@ohioepa/oepa-ui-lib 1.1.0 → 1.2.1

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 (175) hide show
  1. package/esm2022/lib/account-search-input/account-search-input.component.mjs +11 -19
  2. package/esm2022/lib/account-search-input/account-search.service.mjs +31 -0
  3. package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +10 -18
  4. package/esm2022/lib/action-btn/action-btn.component.mjs +3 -3
  5. package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +3 -3
  6. package/esm2022/lib/address/address.component.mjs +3 -3
  7. package/esm2022/lib/address/oepa-address.service.mjs +13 -7
  8. package/esm2022/lib/blank/blank.component.mjs +3 -3
  9. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  10. package/esm2022/lib/checkbox-input/checkbox-input.component.mjs +3 -3
  11. package/esm2022/lib/comment-modal/comment-modal.component.mjs +3 -3
  12. package/esm2022/lib/common-forms.module.mjs +44 -36
  13. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +3 -3
  14. package/esm2022/lib/contact/contact.component.mjs +3 -3
  15. package/esm2022/lib/date-input/date-input.component.mjs +3 -3
  16. package/esm2022/lib/date-input-modal/date-input-modal.component.mjs +3 -3
  17. package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
  18. package/esm2022/lib/daterangepicker/daterangepicker.component.mjs +3 -3
  19. package/esm2022/lib/dual-list-box/array.pipes.mjs +6 -6
  20. package/esm2022/lib/dual-list-box/dual-list-box.component.mjs +3 -3
  21. package/esm2022/lib/ebiz-address/ebiz-address.component.mjs +3 -3
  22. package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +10 -9
  23. package/esm2022/lib/edoc-attachment/edoc-attachment.service.mjs +13 -7
  24. package/esm2022/lib/entity/entity.service.mjs +13 -7
  25. package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +3 -3
  26. package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +3 -3
  27. package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +5 -5
  28. package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +3 -3
  29. package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +3 -3
  30. package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +5 -5
  31. package/esm2022/lib/entity/place-create-modal/place-create-modal.component.mjs +3 -3
  32. package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +3 -3
  33. package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +5 -5
  34. package/esm2022/lib/file-upload/file-upload.component.mjs +9 -8
  35. package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +8 -7
  36. package/esm2022/lib/lynx-image-upload/lynx.service.mjs +13 -7
  37. package/esm2022/lib/message/message.component.mjs +3 -3
  38. package/esm2022/lib/message-list/message-list.component.mjs +3 -3
  39. package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +9 -8
  40. package/esm2022/lib/notes-modal/notes-modal.component.mjs +3 -3
  41. package/esm2022/lib/numeric-input/numeric-input.component.mjs +3 -3
  42. package/esm2022/lib/numeric-input.directive.mjs +3 -3
  43. package/esm2022/lib/oepa-account/account-service.mjs +62 -0
  44. package/esm2022/lib/oepa-error-message/oepa-error-message.component.mjs +3 -3
  45. package/esm2022/lib/oepa-file-utils/oepa-file-util.service.mjs +227 -0
  46. package/esm2022/lib/oepa-forms.service.mjs +3 -3
  47. package/esm2022/lib/oepa-reference/oepa-reference.service.mjs +47 -0
  48. package/esm2022/lib/oepa-user-account/oepa-user-account.service.mjs +304 -0
  49. package/esm2022/lib/oepa-wait-message/oepa-wait-message.component.mjs +3 -3
  50. package/esm2022/lib/parameter/parameter.service.mjs +13 -7
  51. package/esm2022/lib/params-help-button/params-help-button.component.mjs +10 -10
  52. package/esm2022/lib/params-help-button/params-help.service.mjs +26 -0
  53. package/esm2022/lib/phone-number/phone-number.component.mjs +3 -3
  54. package/esm2022/lib/pin-modal/oepa-pin.service.mjs +13 -7
  55. package/esm2022/lib/pin-modal/pin-modal.component.mjs +5 -5
  56. package/esm2022/lib/select-input/select-input.component.mjs +3 -3
  57. package/esm2022/lib/server-timeout-modal/server-timeout-modal.component.mjs +5 -5
  58. package/esm2022/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.mjs +3 -3
  59. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +3 -3
  60. package/esm2022/lib/shopping-cart/shopping-cart.service.mjs +13 -7
  61. package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +3 -3
  62. package/esm2022/lib/table/oepa-table-cell-classname.pipe.mjs +3 -3
  63. package/esm2022/lib/table/oepa-table-cell-colspan.pipe.mjs +3 -3
  64. package/esm2022/lib/table/oepa-table-cell-hidden.pipe.mjs +3 -3
  65. package/esm2022/lib/table/oepa-table-cell-icon-classname.pipe.mjs +3 -3
  66. package/esm2022/lib/table/oepa-table-cell-img-src.pipe.mjs +3 -3
  67. package/esm2022/lib/table/oepa-table-cell-inner-html.pipe.mjs +3 -3
  68. package/esm2022/lib/table/oepa-table-cell-input-component.pipe.mjs +3 -3
  69. package/esm2022/lib/table/oepa-table-cell-not-selectable.pipe.mjs +3 -3
  70. package/esm2022/lib/table/oepa-table-cell-value.pipe.mjs +3 -3
  71. package/esm2022/lib/table/oepa-table-filtering.directive.mjs +3 -3
  72. package/esm2022/lib/table/oepa-table-sorting.directive.mjs +3 -3
  73. package/esm2022/lib/table/p-table/p-table.component.mjs +11 -10
  74. package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +3 -3
  75. package/esm2022/lib/table/table-export.service.mjs +16 -7
  76. package/esm2022/lib/table/table-header-cell/table-header-cell.component.mjs +3 -3
  77. package/esm2022/lib/table/table.component.mjs +15 -14
  78. package/esm2022/lib/table/table.service.mjs +3 -3
  79. package/esm2022/lib/template-confirmation-modal/template-confirmation-modal.component.mjs +3 -3
  80. package/esm2022/lib/text-area-input/text-area-input.component.mjs +3 -3
  81. package/esm2022/lib/text-input/text-input.component.mjs +3 -3
  82. package/esm2022/lib/timeout-modal/timeout-modal.component.mjs +3 -3
  83. package/esm2022/lib/timepicker/timepicker.component.mjs +3 -3
  84. package/esm2022/lib/validation/validation.service.mjs +3 -3
  85. package/esm2022/lib/yes-no/yes-no.component.mjs +3 -3
  86. package/esm2022/lib/yes-no-boolean/yes-no.component.mjs +3 -3
  87. package/esm2022/lib/yes-no-other-input/yes-no-other-input.component.mjs +3 -3
  88. package/esm2022/lib/zip-code/zip-code.component.mjs +3 -3
  89. package/esm2022/public-api.mjs +1 -28
  90. package/fesm2022/ohioepa-oepa-ui-lib.mjs +1369 -2662
  91. package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -1
  92. package/lib/account-search-input/account-search-input.component.d.ts +3 -4
  93. package/lib/account-search-input/account-search.service.d.ts +12 -0
  94. package/lib/account-search-modal/account-search-modal.component.d.ts +3 -5
  95. package/lib/address/oepa-address.service.d.ts +2 -1
  96. package/lib/common-forms.module.d.ts +72 -82
  97. package/lib/edoc-attachment/edoc-attachment.component.d.ts +2 -1
  98. package/lib/edoc-attachment/edoc-attachment.service.d.ts +2 -1
  99. package/lib/entity/entity.service.d.ts +2 -1
  100. package/lib/file-upload/file-upload.component.d.ts +2 -1
  101. package/lib/lynx-image-upload/lynx-image-upload.component.d.ts +2 -1
  102. package/lib/lynx-image-upload/lynx.service.d.ts +2 -1
  103. package/lib/multi-file-upload/multi-file-upload.component.d.ts +2 -1
  104. package/lib/oepa-account/account-service.d.ts +23 -0
  105. package/lib/oepa-file-utils/oepa-file-util.service.d.ts +53 -0
  106. package/lib/oepa-reference/oepa-reference.service.d.ts +26 -0
  107. package/lib/oepa-user-account/oepa-user-account.service.d.ts +122 -0
  108. package/lib/parameter/parameter.service.d.ts +2 -1
  109. package/lib/params-help-button/params-help-button.component.d.ts +3 -3
  110. package/lib/params-help-button/params-help.service.d.ts +11 -0
  111. package/lib/pin-modal/oepa-pin.service.d.ts +2 -1
  112. package/lib/pin-modal/pin-modal.component.d.ts +2 -1
  113. package/lib/server-timeout-modal/server-timeout-modal.component.d.ts +1 -1
  114. package/lib/shopping-cart/shopping-cart.service.d.ts +2 -1
  115. package/lib/table/p-table/p-table.component.d.ts +2 -1
  116. package/lib/table/table-export.service.d.ts +2 -1
  117. package/lib/table/table.component.d.ts +1 -1
  118. package/ohioepa-oepa-ui-lib-1.2.1.tgz +0 -0
  119. package/package.json +3 -3
  120. package/public-api.d.ts +0 -27
  121. package/esm2022/lib/document/document-editor/document-editor.component.mjs +0 -225
  122. package/esm2022/lib/document/document-event-entity-type.mjs +0 -7
  123. package/esm2022/lib/document/document-event-type.mjs +0 -7
  124. package/esm2022/lib/document/document-event.mjs +0 -2
  125. package/esm2022/lib/document/document-group/document-group.component.mjs +0 -210
  126. package/esm2022/lib/document/document-part/document-part.component.mjs +0 -19
  127. package/esm2022/lib/document/document-part-editor/document-part-editor.component.mjs +0 -296
  128. package/esm2022/lib/document/document-placeholder-modal/document-placeholder-modal.component.mjs +0 -49
  129. package/esm2022/lib/document/document-section/document-section.component.mjs +0 -226
  130. package/esm2022/lib/document/document.service.mjs +0 -325
  131. package/esm2022/lib/document/group-modal/group-modal.component.mjs +0 -46
  132. package/esm2022/lib/document/part-modal/part-modal.component.mjs +0 -48
  133. package/esm2022/lib/document/portal-document-class.mjs +0 -2
  134. package/esm2022/lib/document/portal-document-group.mjs +0 -2
  135. package/esm2022/lib/document/portal-document-part.mjs +0 -2
  136. package/esm2022/lib/document/portal-document-placeholder.mjs +0 -2
  137. package/esm2022/lib/document/portal-document-section.mjs +0 -2
  138. package/esm2022/lib/document/portal-document-text.mjs +0 -2
  139. package/esm2022/lib/document/portal-document-type.mjs +0 -2
  140. package/esm2022/lib/document/portal-document.mjs +0 -2
  141. package/esm2022/lib/document/portal-email-attachment-type.mjs +0 -2
  142. package/esm2022/lib/document/portal-email-attachment.mjs +0 -2
  143. package/esm2022/lib/document/portal-email-filter.mjs +0 -2
  144. package/esm2022/lib/document/portal-email.mjs +0 -2
  145. package/esm2022/lib/document/section-modal/section-modal.component.mjs +0 -46
  146. package/esm2022/lib/esri-map/esri-map.component.mjs +0 -416
  147. package/esm2022/lib/ohio-lat-long/ohio-lat-long.component.mjs +0 -176
  148. package/lib/document/document-editor/document-editor.component.d.ts +0 -34
  149. package/lib/document/document-event-entity-type.d.ts +0 -5
  150. package/lib/document/document-event-type.d.ts +0 -5
  151. package/lib/document/document-event.d.ts +0 -9
  152. package/lib/document/document-group/document-group.component.d.ts +0 -38
  153. package/lib/document/document-part/document-part.component.d.ts +0 -10
  154. package/lib/document/document-part-editor/document-part-editor.component.d.ts +0 -46
  155. package/lib/document/document-placeholder-modal/document-placeholder-modal.component.d.ts +0 -19
  156. package/lib/document/document-section/document-section.component.d.ts +0 -37
  157. package/lib/document/document.service.d.ts +0 -90
  158. package/lib/document/group-modal/group-modal.component.d.ts +0 -20
  159. package/lib/document/part-modal/part-modal.component.d.ts +0 -20
  160. package/lib/document/portal-document-class.d.ts +0 -10
  161. package/lib/document/portal-document-group.d.ts +0 -15
  162. package/lib/document/portal-document-part.d.ts +0 -22
  163. package/lib/document/portal-document-placeholder.d.ts +0 -12
  164. package/lib/document/portal-document-section.d.ts +0 -13
  165. package/lib/document/portal-document-text.d.ts +0 -7
  166. package/lib/document/portal-document-type.d.ts +0 -15
  167. package/lib/document/portal-document.d.ts +0 -27
  168. package/lib/document/portal-email-attachment-type.d.ts +0 -6
  169. package/lib/document/portal-email-attachment.d.ts +0 -12
  170. package/lib/document/portal-email-filter.d.ts +0 -12
  171. package/lib/document/portal-email.d.ts +0 -18
  172. package/lib/document/section-modal/section-modal.component.d.ts +0 -20
  173. package/lib/esri-map/esri-map.component.d.ts +0 -41
  174. package/lib/ohio-lat-long/ohio-lat-long.component.d.ts +0 -63
  175. package/ohioepa-oepa-ui-lib-1.1.0.tgz +0 -0
@@ -37,10 +37,10 @@ export class ContactComponent {
37
37
  this.componentId = this.idService.getComponentId(this.group);
38
38
  }
39
39
  }
40
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContactComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
41
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ContactComponent, selector: "oepa-contact", inputs: { group: "group", showValidation: "showValidation", firstNameLabel: "firstNameLabel", lastNameLabel: "lastNameLabel", showMiddleName: "showMiddleName", middleNameLabel: "middleNameLabel", emailLabel: "emailLabel", phoneLabel: "phoneLabel", faxLabel: "faxLabel", noFax: "noFax", showTitle: "showTitle", noPhone: "noPhone", noEmail: "noEmail", isSearch: "isSearch", firstNameMaxLength: "firstNameMaxLength", middleNameMaxLength: "middleNameMaxLength", lastNameMaxLength: "lastNameMaxLength", titleMaxLength: "titleMaxLength", emailMaxLength: "emailMaxLength" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n\t<div *ngIf=\"!showMiddleName\" class=\"row\">\n\t\t<div class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{firstNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['firstName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"First Name\" formControlName=\"firstName\" [id]=\"componentId+'_FirstNameInput'\" [maxlength]=\"firstNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('required')\">{{firstNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('maxlength')\">{{firstNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{lastNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['lastName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Last Name\" formControlName=\"lastName\" [id]=\"componentId+'_LastNameInput'\" [maxlength]=\"lastNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('required')\">{{lastNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('maxlength')\">{{lastNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"showMiddleName\" class=\"row\">\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{firstNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['firstName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"First Name\" formControlName=\"firstName\" [id]=\"componentId+'_FirstNameInput'\" [maxlength]=\"firstNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('required')\">{{firstNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('maxlength')\">{{firstNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\" [ngClass]=\"{'is-invalid':showValidation && group.controls['middleName'].status === 'INVALID'}\">\n\t\t\t\t<label>{{middleNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" placeholder=\"Middle Name\" formControlName=\"middleName\" [id]=\"componentId+'_MiddleNameInput'\" [maxlength]=\"middleNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['middleName'].status === 'INVALID'\">Middle Name is required</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{lastNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['lastName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Last Name\" formControlName=\"lastName\" [id]=\"componentId+'_LastNameInput'\" [maxlength]=\"lastNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('required')\">{{lastNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('maxlength')\">{{lastNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"showTitle\" class=\"row\">\n\t\t<div class=\"col-md-12\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>Title</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" placeholder=\"Title\" \n\t\t\t\t[ngClass]=\"{'is-invalid':showValidation && group.controls['title'].status === 'INVALID'}\"\n\t\t\t\tformControlName=\"title\" [id]=\"componentId+'_TitleInput'\" [maxlength]=\"titleMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['title'].hasError('required')\">Title is required</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"row\">\n\t\t<div *ngIf=\"!noEmail\" class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{emailLabel}}</label>\n\t\t\t\t<input type=\"email\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['emailAddress'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Email\" formControlName=\"emailAddress\" [id]=\"componentId+'_EmailInput'\" [maxlength]=\"emailMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('required')\">{{emailLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('maxlength')\">{{emailLabel}} has exceeded its maximum length</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('email')\">Please enter a valid email address</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div [ngClass]=\"{ 'col-md-3': !noFax, 'col-md-6': noFax }\">\n\t\t\t<div *ngIf=\"!noPhone\" class=\"form-group\">\n\t\t\t\t<label>{{phoneLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['phoneNumber'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"(xxx) xxx-xxxx\" formControlName=\"phoneNumber\" [id]=\"componentId+'_PhoneInput'\" mask=\"(000) 000-0000\" minlength=\"10\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['phoneNumber'].hasError('required')\">{{phoneLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['phoneNumber'].hasError('minlength')\">Please enter a valid phone number</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"!noFax\" class=\"col-md-3\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{faxLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['faxNumber'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"(xxx) xxx-xxxx\" formControlName=\"faxNumber\" [id]=\"componentId+'_FaxInput'\" mask=\"(000) 000-0000\" minlength=\"10\">\n\t\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['faxNumber'].hasError('required')\">{{faxLabel}} is required</small>\n\t\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['faxNumber'].hasError('minlength')\">Please enter a valid phone number</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }] });
40
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContactComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
41
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContactComponent, selector: "oepa-contact", inputs: { group: "group", showValidation: "showValidation", firstNameLabel: "firstNameLabel", lastNameLabel: "lastNameLabel", showMiddleName: "showMiddleName", middleNameLabel: "middleNameLabel", emailLabel: "emailLabel", phoneLabel: "phoneLabel", faxLabel: "faxLabel", noFax: "noFax", showTitle: "showTitle", noPhone: "noPhone", noEmail: "noEmail", isSearch: "isSearch", firstNameMaxLength: "firstNameMaxLength", middleNameMaxLength: "middleNameMaxLength", lastNameMaxLength: "lastNameMaxLength", titleMaxLength: "titleMaxLength", emailMaxLength: "emailMaxLength" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n\t<div *ngIf=\"!showMiddleName\" class=\"row\">\n\t\t<div class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{firstNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['firstName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"First Name\" formControlName=\"firstName\" [id]=\"componentId+'_FirstNameInput'\" [maxlength]=\"firstNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('required')\">{{firstNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('maxlength')\">{{firstNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{lastNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['lastName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Last Name\" formControlName=\"lastName\" [id]=\"componentId+'_LastNameInput'\" [maxlength]=\"lastNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('required')\">{{lastNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('maxlength')\">{{lastNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"showMiddleName\" class=\"row\">\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{firstNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['firstName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"First Name\" formControlName=\"firstName\" [id]=\"componentId+'_FirstNameInput'\" [maxlength]=\"firstNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('required')\">{{firstNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('maxlength')\">{{firstNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\" [ngClass]=\"{'is-invalid':showValidation && group.controls['middleName'].status === 'INVALID'}\">\n\t\t\t\t<label>{{middleNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" placeholder=\"Middle Name\" formControlName=\"middleName\" [id]=\"componentId+'_MiddleNameInput'\" [maxlength]=\"middleNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['middleName'].status === 'INVALID'\">Middle Name is required</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{lastNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['lastName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Last Name\" formControlName=\"lastName\" [id]=\"componentId+'_LastNameInput'\" [maxlength]=\"lastNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('required')\">{{lastNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('maxlength')\">{{lastNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"showTitle\" class=\"row\">\n\t\t<div class=\"col-md-12\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>Title</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" placeholder=\"Title\" \n\t\t\t\t[ngClass]=\"{'is-invalid':showValidation && group.controls['title'].status === 'INVALID'}\"\n\t\t\t\tformControlName=\"title\" [id]=\"componentId+'_TitleInput'\" [maxlength]=\"titleMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['title'].hasError('required')\">Title is required</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"row\">\n\t\t<div *ngIf=\"!noEmail\" class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{emailLabel}}</label>\n\t\t\t\t<input type=\"email\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['emailAddress'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Email\" formControlName=\"emailAddress\" [id]=\"componentId+'_EmailInput'\" [maxlength]=\"emailMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('required')\">{{emailLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('maxlength')\">{{emailLabel}} has exceeded its maximum length</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('email')\">Please enter a valid email address</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div [ngClass]=\"{ 'col-md-3': !noFax, 'col-md-6': noFax }\">\n\t\t\t<div *ngIf=\"!noPhone\" class=\"form-group\">\n\t\t\t\t<label>{{phoneLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['phoneNumber'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"(xxx) xxx-xxxx\" formControlName=\"phoneNumber\" [id]=\"componentId+'_PhoneInput'\" mask=\"(000) 000-0000\" minlength=\"10\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['phoneNumber'].hasError('required')\">{{phoneLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['phoneNumber'].hasError('minlength')\">Please enter a valid phone number</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"!noFax\" class=\"col-md-3\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{faxLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['faxNumber'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"(xxx) xxx-xxxx\" formControlName=\"faxNumber\" [id]=\"componentId+'_FaxInput'\" mask=\"(000) 000-0000\" minlength=\"10\">\n\t\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['faxNumber'].hasError('required')\">{{faxLabel}} is required</small>\n\t\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['faxNumber'].hasError('minlength')\">Please enter a valid phone number</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }] });
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContactComponent, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContactComponent, decorators: [{
44
44
  type: Component,
45
45
  args: [{ selector: 'oepa-contact', template: "<div [formGroup]=\"group\">\n\t<div *ngIf=\"!showMiddleName\" class=\"row\">\n\t\t<div class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{firstNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['firstName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"First Name\" formControlName=\"firstName\" [id]=\"componentId+'_FirstNameInput'\" [maxlength]=\"firstNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('required')\">{{firstNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('maxlength')\">{{firstNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{lastNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['lastName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Last Name\" formControlName=\"lastName\" [id]=\"componentId+'_LastNameInput'\" [maxlength]=\"lastNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('required')\">{{lastNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('maxlength')\">{{lastNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"showMiddleName\" class=\"row\">\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{firstNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['firstName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"First Name\" formControlName=\"firstName\" [id]=\"componentId+'_FirstNameInput'\" [maxlength]=\"firstNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('required')\">{{firstNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['firstName'].hasError('maxlength')\">{{firstNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\" [ngClass]=\"{'is-invalid':showValidation && group.controls['middleName'].status === 'INVALID'}\">\n\t\t\t\t<label>{{middleNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" placeholder=\"Middle Name\" formControlName=\"middleName\" [id]=\"componentId+'_MiddleNameInput'\" [maxlength]=\"middleNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['middleName'].status === 'INVALID'\">Middle Name is required</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"col-md-4\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{lastNameLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['lastName'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Last Name\" formControlName=\"lastName\" [id]=\"componentId+'_LastNameInput'\" [maxlength]=\"lastNameMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('required')\">{{lastNameLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['lastName'].hasError('maxlength')\">{{lastNameLabel}} has exceeded its maximum length</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"showTitle\" class=\"row\">\n\t\t<div class=\"col-md-12\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>Title</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" placeholder=\"Title\" \n\t\t\t\t[ngClass]=\"{'is-invalid':showValidation && group.controls['title'].status === 'INVALID'}\"\n\t\t\t\tformControlName=\"title\" [id]=\"componentId+'_TitleInput'\" [maxlength]=\"titleMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['title'].hasError('required')\">Title is required</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"row\">\n\t\t<div *ngIf=\"!noEmail\" class=\"col-md-6\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{emailLabel}}</label>\n\t\t\t\t<input type=\"email\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['emailAddress'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"Email\" formControlName=\"emailAddress\" [id]=\"componentId+'_EmailInput'\" [maxlength]=\"emailMaxLength\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('required')\">{{emailLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('maxlength')\">{{emailLabel}} has exceeded its maximum length</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['emailAddress'].hasError('email')\">Please enter a valid email address</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div [ngClass]=\"{ 'col-md-3': !noFax, 'col-md-6': noFax }\">\n\t\t\t<div *ngIf=\"!noPhone\" class=\"form-group\">\n\t\t\t\t<label>{{phoneLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['phoneNumber'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"(xxx) xxx-xxxx\" formControlName=\"phoneNumber\" [id]=\"componentId+'_PhoneInput'\" mask=\"(000) 000-0000\" minlength=\"10\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['phoneNumber'].hasError('required')\">{{phoneLabel}} is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['phoneNumber'].hasError('minlength')\">Please enter a valid phone number</small>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"!noFax\" class=\"col-md-3\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label>{{faxLabel}}</label>\n\t\t\t\t<input [type]=\"isSearch ? 'search' : 'text'\" class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['faxNumber'].status === 'INVALID'}\"\n\t\t\t\t\tplaceholder=\"(xxx) xxx-xxxx\" formControlName=\"faxNumber\" [id]=\"componentId+'_FaxInput'\" mask=\"(000) 000-0000\" minlength=\"10\">\n\t\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['faxNumber'].hasError('required')\">{{faxLabel}} is required</small>\n\t\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"group.controls['faxNumber'].hasError('minlength')\">Please enter a valid phone number</small>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>" }]
46
46
  }], ctorParameters: () => [{ type: i1.OepaComponentIdService }], propDecorators: { group: [{
@@ -28,10 +28,10 @@ export class DateInputComponent {
28
28
  });
29
29
  }
30
30
  }
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DateInputComponent, selector: "oepa-date-input", inputs: { group: "group", field: "field", tableIdx: "tableIdx", placement: "placement", showValidation: "showValidation", pauseChangeProcessing: "pauseChangeProcessing" }, outputs: { onValueChange: "onValueChange" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n <oepa-datepicker [group]=\"group\" [field]=\"field\" [tableIdx]=\"tableIdx\" \n [placement]=\"placement\" [showValidation]=\"showValidation\"></oepa-datepicker>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.DatepickerComponent, selector: "oepa-datepicker", inputs: ["group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"] }] });
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateInputComponent, selector: "oepa-date-input", inputs: { group: "group", field: "field", tableIdx: "tableIdx", placement: "placement", showValidation: "showValidation", pauseChangeProcessing: "pauseChangeProcessing" }, outputs: { onValueChange: "onValueChange" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n <oepa-datepicker [group]=\"group\" [field]=\"field\" [tableIdx]=\"tableIdx\" \n [placement]=\"placement\" [showValidation]=\"showValidation\"></oepa-datepicker>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.DatepickerComponent, selector: "oepa-datepicker", inputs: ["group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"] }] });
33
33
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateInputComponent, decorators: [{
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputComponent, decorators: [{
35
35
  type: Component,
36
36
  args: [{ selector: 'oepa-date-input', template: "<div [formGroup]=\"group\">\n <oepa-datepicker [group]=\"group\" [field]=\"field\" [tableIdx]=\"tableIdx\" \n [placement]=\"placement\" [showValidation]=\"showValidation\"></oepa-datepicker>\n</div>" }]
37
37
  }], ctorParameters: () => [], propDecorators: { group: [{
@@ -44,10 +44,10 @@ export class DateInputModalComponent {
44
44
  this.onCancel.emit();
45
45
  this.bsModalRef.hide();
46
46
  }
47
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateInputModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DateInputModalComponent, selector: "oepa-date-input-modal", inputs: { title: "title", infoText: "infoText", dateLabel: "dateLabel", submitBtnLabel: "submitBtnLabel", cancelBtnLabel: "cancelBtnLabel" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{title}}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"row\">\n <div *ngIf=\"infoText\" class=\"col-sm-12\">\n <div class=\"alert alert-info\">\n {{infoText}}\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div>\n <label>{{dateLabel}}</label>\n <oepa-datepicker [group]=\"dateForm\" field=\"date\" [showValidation]=\"true\"></oepa-datepicker>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMessage\" class=\"col-sm-12\">\n <div class=\"alert alert-danger\">{{errorMessage}}</div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <button type=\"submit\" class=\"btn btn-primary mr-1\" (click)=\"submit()\" \n [id]=\"'submitDateBtn'\" [disabled]=\"dateForm.status === 'INVALID'\">{{submitBtnLabel}}</button>\n <button [id]=\"'cancelDateInputBtn'\" type=\"button\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\">{{cancelBtnLabel}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DatepickerComponent, selector: "oepa-datepicker", inputs: ["group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"] }] });
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateInputModalComponent, selector: "oepa-date-input-modal", inputs: { title: "title", infoText: "infoText", dateLabel: "dateLabel", submitBtnLabel: "submitBtnLabel", cancelBtnLabel: "cancelBtnLabel" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{title}}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"row\">\n <div *ngIf=\"infoText\" class=\"col-sm-12\">\n <div class=\"alert alert-info\">\n {{infoText}}\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div>\n <label>{{dateLabel}}</label>\n <oepa-datepicker [group]=\"dateForm\" field=\"date\" [showValidation]=\"true\"></oepa-datepicker>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMessage\" class=\"col-sm-12\">\n <div class=\"alert alert-danger\">{{errorMessage}}</div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <button type=\"submit\" class=\"btn btn-primary mr-1\" (click)=\"submit()\" \n [id]=\"'submitDateBtn'\" [disabled]=\"dateForm.status === 'INVALID'\">{{submitBtnLabel}}</button>\n <button [id]=\"'cancelDateInputBtn'\" type=\"button\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\">{{cancelBtnLabel}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DatepickerComponent, selector: "oepa-datepicker", inputs: ["group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"] }] });
49
49
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateInputModalComponent, decorators: [{
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputModalComponent, decorators: [{
51
51
  type: Component,
52
52
  args: [{ selector: 'oepa-date-input-modal', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{title}}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"row\">\n <div *ngIf=\"infoText\" class=\"col-sm-12\">\n <div class=\"alert alert-info\">\n {{infoText}}\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div>\n <label>{{dateLabel}}</label>\n <oepa-datepicker [group]=\"dateForm\" field=\"date\" [showValidation]=\"true\"></oepa-datepicker>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMessage\" class=\"col-sm-12\">\n <div class=\"alert alert-danger\">{{errorMessage}}</div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <button type=\"submit\" class=\"btn btn-primary mr-1\" (click)=\"submit()\" \n [id]=\"'submitDateBtn'\" [disabled]=\"dateForm.status === 'INVALID'\">{{submitBtnLabel}}</button>\n <button [id]=\"'cancelDateInputBtn'\" type=\"button\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\">{{cancelBtnLabel}}</button>\n</div>\n" }]
53
53
  }], ctorParameters: () => [{ type: i1.BsModalRef }, { type: i2.FormBuilder }], propDecorators: { title: [{
@@ -107,10 +107,10 @@ export class DatepickerComponent {
107
107
  }
108
108
  }
109
109
  }
110
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DatepickerComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
111
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DatepickerComponent, selector: "oepa-datepicker", inputs: { group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation", placement: "placement", tableIdx: "tableIdx", small: "small" }, usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #dp=\"bsDatepicker\"\n bsDatepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"group.get('field')?.disabled || false\"\n [placement]=\"getPlacement() || 'bottom'\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n (bsValueChange)=\"onValueChange($event)\"\n >\n <div class=\"btn-group\" role=\"group\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dp.toggle()\" [id]=\"componentId+'_ToggleBtn'\" [disabled]=\"group.get(field)?.disabled\">\n <i class=\"bi bi-calendar3\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"clearDate()\" [id]=\"componentId+'_ClearBtn'\" [disabled]=\"group.get(field)?.disabled\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && group.get(field)?.hasError('required')\">Date is required</small>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && group.get(field)?.invalid && !group.get(field)?.hasError('required')\">Date is out of range</small>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i4.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }] });
110
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
111
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatepickerComponent, selector: "oepa-datepicker", inputs: { group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation", placement: "placement", tableIdx: "tableIdx", small: "small" }, usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #dp=\"bsDatepicker\"\n bsDatepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"group.get('field')?.disabled || false\"\n [placement]=\"getPlacement() || 'bottom'\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n (bsValueChange)=\"onValueChange($event)\"\n >\n <div class=\"btn-group\" role=\"group\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dp.toggle()\" [id]=\"componentId+'_ToggleBtn'\" [disabled]=\"group.get(field)?.disabled\">\n <i class=\"bi bi-calendar3\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"clearDate()\" [id]=\"componentId+'_ClearBtn'\" [disabled]=\"group.get(field)?.disabled\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && group.get(field)?.hasError('required')\">Date is required</small>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && group.get(field)?.invalid && !group.get(field)?.hasError('required')\">Date is out of range</small>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "ignoreMinMaxErrors", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i4.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }] });
112
112
  }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DatepickerComponent, decorators: [{
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, decorators: [{
114
114
  type: Component,
115
115
  args: [{ selector: 'oepa-datepicker', template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #dp=\"bsDatepicker\"\n bsDatepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"group.get('field')?.disabled || false\"\n [placement]=\"getPlacement() || 'bottom'\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n (bsValueChange)=\"onValueChange($event)\"\n >\n <div class=\"btn-group\" role=\"group\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dp.toggle()\" [id]=\"componentId+'_ToggleBtn'\" [disabled]=\"group.get(field)?.disabled\">\n <i class=\"bi bi-calendar3\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"clearDate()\" [id]=\"componentId+'_ClearBtn'\" [disabled]=\"group.get(field)?.disabled\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && group.get(field)?.hasError('required')\">Date is required</small>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && group.get(field)?.invalid && !group.get(field)?.hasError('required')\">Date is out of range</small>\n </div>\n</div>\n" }]
116
116
  }], ctorParameters: () => [{ type: i1.OepaComponentIdService }], propDecorators: { group: [{
@@ -52,10 +52,10 @@ export class DaterangepickerComponent {
52
52
  this.componentId = this.idService.getComponentId(this.group);
53
53
  }
54
54
  }
55
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DaterangepickerComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
56
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DaterangepickerComponent, selector: "oepa-daterangepicker", inputs: { group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #drp=\"bsDaterangepicker\"\n bsDaterangepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"isDisabled\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n >\n <div *ngIf=\"!isDisabled\" class=\"input-group-btn\">\n <button class=\"btn btn-primary\" (click)=\"drp.toggle()\" [id]=\"componentId+'_ToggleBtn'\">\n <i class=\"bi bi-calendar3\"></i>\n </button>\n <button class=\"btn btn-primary\" (click)=\"clearRange()\" [id]=\"componentId+'_ClearBtn'\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && !checkValidity()\">Date is required</small>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i4.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }] });
55
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaterangepickerComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
56
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DaterangepickerComponent, selector: "oepa-daterangepicker", inputs: { group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #drp=\"bsDaterangepicker\"\n bsDaterangepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"isDisabled\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n >\n <div *ngIf=\"!isDisabled\" class=\"input-group-btn\">\n <button class=\"btn btn-primary\" (click)=\"drp.toggle()\" [id]=\"componentId+'_ToggleBtn'\">\n <i class=\"bi bi-calendar3\"></i>\n </button>\n <button class=\"btn btn-primary\" (click)=\"clearRange()\" [id]=\"componentId+'_ClearBtn'\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && !checkValidity()\">Date is required</small>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i4.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }] });
57
57
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DaterangepickerComponent, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaterangepickerComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'oepa-daterangepicker', template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #drp=\"bsDaterangepicker\"\n bsDaterangepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"isDisabled\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n >\n <div *ngIf=\"!isDisabled\" class=\"input-group-btn\">\n <button class=\"btn btn-primary\" (click)=\"drp.toggle()\" [id]=\"componentId+'_ToggleBtn'\">\n <i class=\"bi bi-calendar3\"></i>\n </button>\n <button class=\"btn btn-primary\" (click)=\"clearRange()\" [id]=\"componentId+'_ClearBtn'\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && !checkValidity()\">Date is required</small>\n </div>\n</div>" }]
61
61
  }], ctorParameters: () => [{ type: i1.OepaComponentIdService }], propDecorators: { group: [{
@@ -33,10 +33,10 @@ export class ArraySortPipe {
33
33
  // if there is no key we assume item is of string type
34
34
  return orderBy(array, (item) => item.hasOwnProperty(key) ? item[key] : item, (direction === SortOptions.direction.DESC ? 'desc' : 'asc'));
35
35
  }
36
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
37
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, name: "arraySort" });
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArraySortPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
37
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ArraySortPipe, name: "arraySort" });
38
38
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArraySortPipe, decorators: [{
40
40
  type: Pipe,
41
41
  args: [{
42
42
  name: 'arraySort'
@@ -59,10 +59,10 @@ export class ArrayFilterPipe {
59
59
  }
60
60
  return array.filter((item) => item[key].toString().toLowerCase().search(searchTerm.toLowerCase().trim()) >= 0);
61
61
  }
62
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
63
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, name: "arrayFilter" });
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArrayFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
63
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ArrayFilterPipe, name: "arrayFilter" });
64
64
  }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, decorators: [{
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArrayFilterPipe, decorators: [{
66
66
  type: Pipe,
67
67
  args: [{
68
68
  name: 'arrayFilter'
@@ -279,14 +279,14 @@ export class DualListBoxComponent {
279
279
  getValues() {
280
280
  return (this.selectedItems || []).map((item) => item.value);
281
281
  }
282
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DualListBoxComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
283
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DualListBoxComponent, selector: "oepa-dual-list-box", inputs: { available: "available", selected: "selected", availableSearch: "availableSearch", selectedSearch: "selectedSearch", valueField: "valueField", textField: "textField", title: "title", debounceTime: "debounceTime", moveAllButton: "moveAllButton", availableText: "availableText", selectedText: "selectedText", availableFilterPlaceholder: "availableFilterPlaceholder", selectedFilterPlaceholder: "selectedFilterPlaceholder", idField: "idField", disabled: "disabled", listSize: "listSize", sortBy: "sortBy", maxSelectableItems: "maxSelectableItems" }, outputs: { onAvailableItemSelected: "onAvailableItemSelected", onSelectedItemsSelected: "onSelectedItemsSelected", onItemsMoved: "onItemsMoved" }, providers: [{
282
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DualListBoxComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
283
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DualListBoxComponent, selector: "oepa-dual-list-box", inputs: { available: "available", selected: "selected", availableSearch: "availableSearch", selectedSearch: "selectedSearch", valueField: "valueField", textField: "textField", title: "title", debounceTime: "debounceTime", moveAllButton: "moveAllButton", availableText: "availableText", selectedText: "selectedText", availableFilterPlaceholder: "availableFilterPlaceholder", selectedFilterPlaceholder: "selectedFilterPlaceholder", idField: "idField", disabled: "disabled", listSize: "listSize", sortBy: "sortBy", maxSelectableItems: "maxSelectableItems" }, outputs: { onAvailableItemSelected: "onAvailableItemSelected", onSelectedItemsSelected: "onSelectedItemsSelected", onItemsMoved: "onItemsMoved" }, providers: [{
284
284
  provide: NG_VALUE_ACCESSOR,
285
285
  useExisting: forwardRef(() => DualListBoxComponent),
286
286
  multi: true
287
287
  }], ngImport: i0, template: "<div class=\"row\" [formGroup]=\"listBoxForm\">\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{availableText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{availableFilterPlaceholder}}\"\n formControlName=\"availableSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"availableListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of availableItems | arrayFilter:['text', searchTermAvailable] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n [id]=\"item?.value+'Option'\"\n (dblclick)=\"moveAvailableItemToSelected(item)\">{{item?.text}}</option>\n </select>\n </div>\n <div class=\"col-md-2 col-lg-2 col-sm-12 center-block text-center\">\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atr top80 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToSelected()\">\n <span class=\"bi bi-list-task\"></span>\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 str vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !availableListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneBtn'\"\n (click)=\"moveMarkedAvailableItemsToSelected()\">\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 stl vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !selectedListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneLeftBtn'\"\n (click)=\"moveMarkedSelectedItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atl bottom10 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllLeftBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n <span class=\"bi bi-list-task\"></span>\n </button>\n </div>\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{selectedText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{selectedFilterPlaceholder}}\"\n formControlName=\"selectedSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"selectedListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of selectedItems | arrayFilter:['text', searchTermSelected] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n (dblclick)=\"moveSelectedItemToAvailable(item)\">{{item?.text}}</option>\n </select>\n </div>\n</div>\n", styles: [".list-box{min-height:200px;width:100%}.top100{margin-top:100px}.top80{margin-top:80px}.bottom10{margin-bottom:10px}.vertical-spacing-5{margin-top:5px;margin-bottom:5px}.center-block{min-height:50px}@media only screen and (max-width : 768px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (min-width : 768px) and (max-width : 992px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (max-width : 480px){.sm-spacing{margin-top:10px;margin-bottom:10px}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4.ArrayFilterPipe, name: "arrayFilter" }, { kind: "pipe", type: i4.ArraySortPipe, name: "arraySort" }] });
288
288
  }
289
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DualListBoxComponent, decorators: [{
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DualListBoxComponent, decorators: [{
290
290
  type: Component,
291
291
  args: [{ selector: 'oepa-dual-list-box', providers: [{
292
292
  provide: NG_VALUE_ACCESSOR,
@@ -33,10 +33,10 @@ export class EbizAddressComponent {
33
33
  this.componentId = this.idService.getComponentId(this.group);
34
34
  }
35
35
  }
36
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EbizAddressComponent, deps: [{ token: i1.OepaAddressService }, { token: i2.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
37
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EbizAddressComponent, selector: "oepa-ebiz-address", inputs: { group: "group", showValidation: "showValidation", addressOneLabel: "addressOneLabel", addressTwoLabel: "addressTwoLabel", cityLabel: "cityLabel", stateLabel: "stateLabel", zipCodeLabel: "zipCodeLabel" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>{{addressOneLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['addressLine1'].status === 'INVALID'}\" \n type=\"text\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"addressLine1\" \n [id]=\"componentId+'_Line1Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine1'].hasError('required')\">{{addressOneLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine1'].hasError('maxlength')\">{{addressOneLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>{{addressTwoLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['addressLine2'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"addressLine2\" \n [id]=\"componentId+'_Line2Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine2'].hasError('required')\">{{addressTwoLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine2'].hasError('maxlength')\">{{addressTwoLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label>{{cityLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['city'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"City\" maxlength=\"30\" formControlName=\"city\" \n [id]=\"componentId+'_CityInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('required')\">{{cityLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('maxlength')\">{{cityLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n <div class=\"col-md-2\">\n <div *ngIf=\"showStates\" class=\"form-group\">\n <label>{{stateLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\" \n name=\"AddressState\" formControlName=\"state\" [id]=\"componentId+'_StateSelect'\">\n <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['state'].hasError('required')\">State is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <label>{{zipCodeLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['zip'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Zip Code\" formControlName=\"zip\" [id]=\"componentId+'_ZipInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['zip'].hasError('required')\">Zip code is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['zip'].hasError('pattern')\">Zip code must contain exactly 5 digits</small>\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EbizAddressComponent, deps: [{ token: i1.OepaAddressService }, { token: i2.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EbizAddressComponent, selector: "oepa-ebiz-address", inputs: { group: "group", showValidation: "showValidation", addressOneLabel: "addressOneLabel", addressTwoLabel: "addressTwoLabel", cityLabel: "cityLabel", stateLabel: "stateLabel", zipCodeLabel: "zipCodeLabel" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>{{addressOneLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['addressLine1'].status === 'INVALID'}\" \n type=\"text\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"addressLine1\" \n [id]=\"componentId+'_Line1Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine1'].hasError('required')\">{{addressOneLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine1'].hasError('maxlength')\">{{addressOneLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>{{addressTwoLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['addressLine2'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"addressLine2\" \n [id]=\"componentId+'_Line2Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine2'].hasError('required')\">{{addressTwoLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine2'].hasError('maxlength')\">{{addressTwoLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label>{{cityLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['city'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"City\" maxlength=\"30\" formControlName=\"city\" \n [id]=\"componentId+'_CityInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('required')\">{{cityLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('maxlength')\">{{cityLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n <div class=\"col-md-2\">\n <div *ngIf=\"showStates\" class=\"form-group\">\n <label>{{stateLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\" \n name=\"AddressState\" formControlName=\"state\" [id]=\"componentId+'_StateSelect'\">\n <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['state'].hasError('required')\">State is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <label>{{zipCodeLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['zip'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Zip Code\" formControlName=\"zip\" [id]=\"componentId+'_ZipInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['zip'].hasError('required')\">Zip code is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['zip'].hasError('pattern')\">Zip code must contain exactly 5 digits</small>\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
38
38
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EbizAddressComponent, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EbizAddressComponent, decorators: [{
40
40
  type: Component,
41
41
  args: [{ selector: 'oepa-ebiz-address', template: "<div [formGroup]=\"group\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>{{addressOneLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['addressLine1'].status === 'INVALID'}\" \n type=\"text\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"addressLine1\" \n [id]=\"componentId+'_Line1Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine1'].hasError('required')\">{{addressOneLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine1'].hasError('maxlength')\">{{addressOneLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>{{addressTwoLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['addressLine2'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"addressLine2\" \n [id]=\"componentId+'_Line2Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine2'].hasError('required')\">{{addressTwoLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['addressLine2'].hasError('maxlength')\">{{addressTwoLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label>{{cityLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['city'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"City\" maxlength=\"30\" formControlName=\"city\" \n [id]=\"componentId+'_CityInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('required')\">{{cityLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('maxlength')\">{{cityLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n <div class=\"col-md-2\">\n <div *ngIf=\"showStates\" class=\"form-group\">\n <label>{{stateLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\" \n name=\"AddressState\" formControlName=\"state\" [id]=\"componentId+'_StateSelect'\">\n <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['state'].hasError('required')\">State is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <label>{{zipCodeLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['zip'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Zip Code\" formControlName=\"zip\" [id]=\"componentId+'_ZipInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['zip'].hasError('required')\">Zip code is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['zip'].hasError('pattern')\">Zip code must contain exactly 5 digits</small>\n </div>\n </div>\n </div>\n</div>" }]
42
42
  }], ctorParameters: () => [{ type: i1.OepaAddressService }, { type: i2.OepaComponentIdService }], propDecorators: { group: [{
@@ -2,10 +2,11 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { ConfirmationModalComponent } from '../confirmation-modal/confirmation-modal.component';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@ohioepa/oepa-common-lib";
5
- import * as i2 from "./edoc-attachment.service";
6
- import * as i3 from "ngx-bootstrap/modal";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "@angular/forms";
5
+ import * as i2 from "../oepa-file-utils/oepa-file-util.service";
6
+ import * as i3 from "./edoc-attachment.service";
7
+ import * as i4 from "ngx-bootstrap/modal";
8
+ import * as i5 from "@angular/common";
9
+ import * as i6 from "@angular/forms";
9
10
  export class EdocAttachmentComponent {
10
11
  idService;
11
12
  fileUtilService;
@@ -182,13 +183,13 @@ export class EdocAttachmentComponent {
182
183
  }
183
184
  });
184
185
  }
185
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EdocAttachmentComponent, deps: [{ token: i1.OepaComponentIdService }, { token: i1.OepaFileUtilService }, { token: i2.EdocAttachmentService }, { token: i3.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
186
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EdocAttachmentComponent, selector: "oepa-edoc-attachment", inputs: { attachment: "attachment", group: "group", field: "field", label: "label", errorLabel: "errorLabel", showValidation: "showValidation", accept: "accept", removeAllowed: "removeAllowed", okToDelete: "okToDelete" }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved", download: "download" }, ngImport: i0, template: "<form [formGroup]=\"group\">\n <div *ngIf=\"!attachment || !attachment.userFilename\" class=\"form-group\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span *ngIf=\"!busy\" class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\">\n Browse&hellip;\n <input type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\"\n [id]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [attr.accept]=\"accept ? accept : null\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <span *ngIf=\"busy\"> <span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\"\n type=\"text\" class=\"form-control\" placeholder=\"No file chosen\" [id]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\"\n *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is\n required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"text\" [hidden]=\"true\" [formControlName]=\"field\" />\n </div>\n </div>\n </div>\n <div *ngIf=\"attachment && attachment.userFilename\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink'\" \n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed && !busy\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn'\"\n (click)=\"removeFile()\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">Remove Attachment</button>\n </span>\n <span *ngIf=\"busy\"> <span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMsg\" class=\"alert alert-danger\" role=\"alert\">{{errorMsg}}</div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.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"] }] });
186
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EdocAttachmentComponent, deps: [{ token: i1.OepaComponentIdService }, { token: i2.OepaFileUtilService }, { token: i3.EdocAttachmentService }, { token: i4.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
187
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EdocAttachmentComponent, selector: "oepa-edoc-attachment", inputs: { attachment: "attachment", group: "group", field: "field", label: "label", errorLabel: "errorLabel", showValidation: "showValidation", accept: "accept", removeAllowed: "removeAllowed", okToDelete: "okToDelete" }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved", download: "download" }, ngImport: i0, template: "<form [formGroup]=\"group\">\n <div *ngIf=\"!attachment || !attachment.userFilename\" class=\"form-group\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span *ngIf=\"!busy\" class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\">\n Browse&hellip;\n <input type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\"\n [id]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [attr.accept]=\"accept ? accept : null\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <span *ngIf=\"busy\"> <span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\"\n type=\"text\" class=\"form-control\" placeholder=\"No file chosen\" [id]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\"\n *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is\n required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"text\" [hidden]=\"true\" [formControlName]=\"field\" />\n </div>\n </div>\n </div>\n <div *ngIf=\"attachment && attachment.userFilename\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink'\" \n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed && !busy\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn'\"\n (click)=\"removeFile()\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">Remove Attachment</button>\n </span>\n <span *ngIf=\"busy\"> <span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMsg\" class=\"alert alert-danger\" role=\"alert\">{{errorMsg}}</div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
187
188
  }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EdocAttachmentComponent, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EdocAttachmentComponent, decorators: [{
189
190
  type: Component,
190
191
  args: [{ selector: 'oepa-edoc-attachment', template: "<form [formGroup]=\"group\">\n <div *ngIf=\"!attachment || !attachment.userFilename\" class=\"form-group\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span *ngIf=\"!busy\" class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\">\n Browse&hellip;\n <input type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\"\n [id]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [attr.accept]=\"accept ? accept : null\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <span *ngIf=\"busy\"> <span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\"\n type=\"text\" class=\"form-control\" placeholder=\"No file chosen\" [id]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\"\n *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is\n required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"text\" [hidden]=\"true\" [formControlName]=\"field\" />\n </div>\n </div>\n </div>\n <div *ngIf=\"attachment && attachment.userFilename\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink'\" \n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed && !busy\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn'\"\n (click)=\"removeFile()\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">Remove Attachment</button>\n </span>\n <span *ngIf=\"busy\"> <span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMsg\" class=\"alert alert-danger\" role=\"alert\">{{errorMsg}}</div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"] }]
191
- }], ctorParameters: () => [{ type: i1.OepaComponentIdService }, { type: i1.OepaFileUtilService }, { type: i2.EdocAttachmentService }, { type: i3.BsModalService }], propDecorators: { attachment: [{
192
+ }], ctorParameters: () => [{ type: i1.OepaComponentIdService }, { type: i2.OepaFileUtilService }, { type: i3.EdocAttachmentService }, { type: i4.BsModalService }], propDecorators: { attachment: [{
192
193
  type: Input
193
194
  }], group: [{
194
195
  type: Input
@@ -213,4 +214,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
213
214
  }], download: [{
214
215
  type: Output
215
216
  }] } });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRvYy1hdHRhY2htZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZWRvYy1hdHRhY2htZW50L2Vkb2MtYXR0YWNobWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2Vkb2MtYXR0YWNobWVudC9lZG9jLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0vRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7OztBQVFoRyxNQUFNLE9BQU8sdUJBQXVCO0lBb0JkO0lBQ1Y7SUFDQTtJQUNBO0lBdEJILFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztJQUN4QyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLElBQUksR0FBRyxLQUFLLENBQUM7SUFDWixrQkFBa0IsQ0FBMkI7SUFFNUMsVUFBVSxHQUF3QixFQUFFLENBQUM7SUFDckMsS0FBSyxDQUFhO0lBQ2xCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUNwQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLFVBQVUsQ0FBK0I7SUFFeEMsWUFBWSxHQUFzQyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUMxRixXQUFXLEdBQXNDLElBQUksWUFBWSxFQUF1QixDQUFDO0lBQ3pGLFFBQVEsR0FBc0MsSUFBSSxZQUFZLEVBQXVCLENBQUM7SUFFaEcsWUFBb0IsU0FBaUMsRUFD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QUMsWUFBWSxHQUFHLDhCQUE4QixDQUFDO2dCQUN6RyxDQUFDO1lBQ0gsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLDBCQUEwQixHQUFHLFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUNwRixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FqTFUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsdVhDZHBDLG9uRkEyQ087OzRGRDdCTSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCOzhMQVV2QixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRURvY3VtZW50QXR0YWNobWVudCB9IGZyb20gJy4vZWRvY3VtZW50LWF0dGFjaG1lbnQnO1xuaW1wb3J0IHsgT2VwYUF0dGFjaG1lbnQsIE9lcGFDb21wb25lbnRJZFNlcnZpY2UsIE9lcGFGaWxlVXRpbFNlcnZpY2UgfSBmcm9tICdAb2hpb2VwYS9vZXBhLWNvbW1vbi1saWInO1xuaW1wb3J0IHsgRWRvY0F0dGFjaG1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9lZG9jLWF0dGFjaG1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtYXRpb24tbW9kYWwvY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1lZG9jLWF0dGFjaG1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRvYy1hdHRhY2htZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRvYy1hdHRhY2htZW50LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFZG9jQXR0YWNobWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBjb21wb25lbnRJZCA9ICdFZG9jQXR0YWNobWVudENvbXBvbmVudCc7XG4gIHB1YmxpYyBlcnJvck1zZzogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBidXN5ID0gZmFsc2U7XG4gIHByaXZhdGUgZGVsZXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgYXR0YWNobWVudDogRURvY3VtZW50QXR0YWNobWVudCA9IHt9O1xuICBASW5wdXQoKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZmllbGQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yTGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzaG93VmFsaWRhdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSByZW1vdmVBbGxvd2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgb2tUb0RlbGV0ZTogU3ViamVjdDxib29sZWFuPiB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgZmlsZVVwbG9hZGVkOiBFdmVudEVtaXR0ZXI8RURvY3VtZW50QXR0YWNobWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEVEb2N1bWVudEF0dGFjaG1lbnQ+KCk7XG4gIEBPdXRwdXQoKSBmaWxlUmVtb3ZlZDogRXZlbnRFbWl0dGVyPEVEb2N1bWVudEF0dGFjaG1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFRG9jdW1lbnRBdHRhY2htZW50PigpO1xuICBAT3V0cHV0KCkgZG93bmxvYWQ6IEV2ZW50RW1pdHRlcjxFRG9jdW1lbnRBdHRhY2htZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RURvY3VtZW50QXR0YWNobWVudD4oKTtcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaWRTZXJ2aWNlOiBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsZVV0aWxTZXJ2aWNlOiBPZXBhRmlsZVV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZURvY0F0dGFjaG1lbnRTZXJ2aWNlOiBFZG9jQXR0YWNobWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlXG4gICAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgdGhpcy5jb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5jb21wb25lbnRJZCArPSAodGhpcy5jb21wb25lbnRJZC5sZW5ndGggPiAwID8gJ18nIDogJycpICsgdGhpcy5maWVsZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTXNnID0gJyc7XG4gICAgY29uc3QgZmlsZUxpc3Q6IEZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIGlmIChmaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWxlOiBGaWxlID0gZmlsZUxpc3RbMF07XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmZpbGVUeXBlQ2FuQmVBY2NlcHRlZChmaWxlKSkge1xuICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS51cGxvYWRGaWxlKGZpbGUpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGF0dGFjaG1lbnQ6IE9lcGFBdHRhY2htZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkXS5zZXRWYWx1ZShhdHRhY2htZW50LnVzZXJGaWxlbmFtZSk7XG4gICAgICAgICAgdGhpcy5hdHRhY2htZW50ID0gdGhpcy5hcHBlbmRPZXBhQXR0YWNobWVudERhdGEoYXR0YWNobWVudCk7XG4gICAgICAgICAgdGhpcy5lRG9jQXR0YWNobWVudFNlcnZpY2UuY3JlYXRlRURvY0F0dGFjaG1lbnQodGhpcy5hdHRhY2htZW50KS5zdWJzY3JpYmUoaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50LmlkID0gaWQucmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRlZC5lbWl0KHRoaXMuYXR0YWNobWVudCk7XG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1zZyA9ICdFcnJvciB1cGxvYWRpbmcgZmlsZTogJyArIGVycjtcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTXNnID0gJ0Vycm9yIHVwbG9hZGluZyBmaWxlOiAnICsgZXJyIHx8ICcnO1xuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgICB9fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yTXNnID0gJ0Nhbm5vdCBhY2NlcHQgdGhpcyB0eXBlIG9mIGZpbGUuIFBsZWFzZSB1cGxvYWQgYSBmaWxlIG9mIHR5cGU6ICcgKyB0aGlzLmFjY2VwdDtcbiAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRPZXBhQXR0YWNobWVudERhdGEob2VwYTogT2VwYUF0dGFjaG1lbnQpIDogRURvY3VtZW50QXR0YWNobWVudCB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuYXR0YWNobWVudCB8fCB7fTtcbiAgICByZXN1bHQuc3lzdGVtRmlsZW5hbWUgPSBvZXBhLnN5c3RlbUZpbGVuYW1lO1xuICAgIHJlc3VsdC51c2VyRmlsZW5hbWUgPSBvZXBhLnVzZXJGaWxlbmFtZTtcbiAgICByZXN1bHQubG9jYXRpb24gPSBvZXBhLmxvY2F0aW9uO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGZpbGVUeXBlQ2FuQmVBY2NlcHRlZChmaWxlOmFueSk6IGJvb2xlYW4ge1xuICAgIGxldCBvayA9IHRydWU7XG4gICAgaWYgKHRoaXMuYWNjZXB0KSB7XG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMuZmlsZVV0aWxTZXJ2aWNlLm1pbWVUeXBlRm9yRmlsZShmaWxlLm5hbWUpO1xuICAgICAgaWYgKHRoaXMuYWNjZXB0LmluZGV4T2YobWltZVR5cGUpIDwgMCkge1xuICAgICAgICBvayA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2s7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsZSgpIHtcbiAgICB0aGlzLmVycm9yTXNnID0gJyc7XG4gICAgY29uc3QgbW9kYWw6IEJzTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7IGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUgfSk7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5oZWFkZXJUZXh0ID0gJ1JlbW92ZSBBdHRhY2htZW50JztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmJvZHlUZXh0ID0gJ0RvIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgYXR0YWNobWVudDogJyArIHRoaXMuYXR0YWNobWVudC51c2VyRmlsZW5hbWUgKyAnPyc7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jb25maXJtQnRuTGFiZWwgPSAnWWVzJztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmNhbmNlbEJ0bkxhYmVsID0gJ05vJztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmNvbmZpcm1DbGlja2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmF0dGVtcHREZWxldGVBdHRhY2htZW50KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF0dGVtcHREZWxldGVBdHRhY2htZW50KCkge1xuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLm9rVG9EZWxldGUpIHtcbiAgICAgIHRoaXMuZGVsZXRlQXR0YWNobWVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuZGVsZXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlU3Vic2NyaXB0aW9uID0gdGhpcy5va1RvRGVsZXRlLnN1YnNjcmliZShvayA9PiB7XG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUF0dGFjaG1lbnQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1zZyA9ICdVbmFibGUgdG8gZGVsZXRlIGF0dGFjaG1lbnQuIFJlZmVyZW5jZSBzdGlsbCBhY3RpdmUuJztcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdCh0aGlzLmF0dGFjaG1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVBdHRhY2htZW50KCkge1xuICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICBpZiAodGhpcy5hdHRhY2htZW50LmlkKSB7XG4gICAgICB0aGlzLmVEb2NBdHRhY2htZW50U2VydmljZS5kZWxldGVFRG9jQXR0YWNobWVudCh0aGlzLmF0dGFjaG1lbnQuaWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckF0dGFjaG1lbnQoKTtcbiAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9IFwiRXJyb3IgZGVsZXRpbmcgZmlsZTogXCIgKyBlcnI7XG4gICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgfX0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBdHRhY2htZW50KCkge1xuICAgIHRoaXMuYXR0YWNobWVudC5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmF0dGFjaG1lbnQudXNlckZpbGVuYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXR0YWNobWVudC5sb2NhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmF0dGFjaG1lbnQuZURvY0hhbmRsZUlEID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGRdLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZpbGUoYXR0YWNobWVudDogRURvY3VtZW50QXR0YWNobWVudCkge1xuICAgIHRoaXMuZXJyb3JNc2cgPSAnJztcbiAgICBpZiAoIWF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZG93bmxvYWRFRG9jRmlsZShhdHRhY2htZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3dubG9hZFNlcnZlckZpbGUoYXR0YWNobWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZEVEb2NGaWxlKGF0dGFjaG1lbnQ6IEVEb2N1bWVudEF0dGFjaG1lbnQpIHtcbiAgICBpZiAoYXR0YWNobWVudC5pZCkge1xuICAgICAgdGhpcy5lRG9jQXR0YWNobWVudFNlcnZpY2UuZG93bmxvYWRFRG9jQXR0YWNobWVudChhdHRhY2htZW50LmlkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBkYXRhID0+IHtcbiAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMuZmlsZVV0aWxTZXJ2aWNlLm1pbWVUeXBlRm9yRmlsZShhdHRhY2htZW50LnVzZXJGaWxlbmFtZSB8fCAnJyk7XG4gICAgICAgICAgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEZpbGUoZGF0YSwgbWltZVR5cGUpO1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZC5lbWl0KGF0dGFjaG1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTXNnID0gJ1VuYWJsZSB0byBkb3dubG9hZCBmaWxlOiAnICsgYXR0YWNobWVudC51c2VyRmlsZW5hbWUgKyAnLiBDYW5ub3QgZGV0ZXJtaW5lIG1pbWUgdHlwZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTXNnID0gJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGU6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICc6ICcgKyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWRTZXJ2ZXJGaWxlKGF0dGFjaG1lbnQ6IEVEb2N1bWVudEF0dGFjaG1lbnQpIHtcbiAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEF0dGFjaG1lbnQoYXR0YWNobWVudCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMuZmlsZVV0aWxTZXJ2aWNlLm1pbWVUeXBlRm9yRmlsZShhdHRhY2htZW50LnN5c3RlbUZpbGVuYW1lIHx8ICcnKTtcbiAgICAgICAgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRGaWxlKGRhdGEsIG1pbWVUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVycm9yTXNnID0gJ1VuYWJsZSB0byBkb3dubG9hZCBmaWxlOiAnICsgYXR0YWNobWVudC51c2VyRmlsZW5hbWUgKyAnLiBDYW5ub3QgZGV0ZXJtaW5lIG1pbWUgdHlwZSc7XG4gICAgICAgIH1cbiAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTXNnID0gJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGU6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICc6ICcgKyBlcnI7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuICAgIDxkaXYgKm5nSWY9XCIhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51c2VyRmlsZW5hbWVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsXCI+e3tsYWJlbH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWJ1c3lcIiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJvd3NlJmhlbGxpcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQrJ19Ccm93c2VCdG4nXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hY2NlcHRdPVwiYWNjZXB0ID8gYWNjZXB0IDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncm91cC5jb250cm9sc1tmaWVsZF0uc3RhdHVzID09PSAnRElTQUJMRUQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYnVzeVwiPiA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj48L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1tmaWVsZF0uc3RhdHVzID09PSAnSU5WQUxJRCd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIk5vIGZpbGUgY2hvc2VuXCIgW2lkXT1cImNvbXBvbmVudElkKydfSW5wdXQnXCIgcmVhZG9ubHk+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1tmaWVsZF0uc3RhdHVzID09PSAnSU5WQUxJRCdcIj57e2Vycm9yTGFiZWwgfHwgbGFiZWx9fSBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gZHVtbXkgaW5wdXQgZmllbGQgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgLS0+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2hpZGRlbl09XCJ0cnVlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC51c2VyRmlsZW5hbWVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsXCI+e3tsYWJlbH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJkb3dubG9hZEZpbGUoYXR0YWNobWVudClcIiBbaWRdPVwiY29tcG9uZW50SWQrJ19Eb3dubG9hZEZpbGVMaW5rJ1wiIFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPnt7YXR0YWNobWVudC51c2VyRmlsZW5hbWV9fTwvYT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlbW92ZUFsbG93ZWQgJiYgIWJ1c3lcIiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtpZF09XCJjb21wb25lbnRJZCsnX1JlbW92ZUZpbGVCdG4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdESVNBQkxFRCdcIj5SZW1vdmUgQXR0YWNobWVudDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImJ1c3lcIj4gPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNc2dcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPnt7ZXJyb3JNc2d9fTwvZGl2PlxuPC9mb3JtPiJdfQ==
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRvYy1hdHRhY2htZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZWRvYy1hdHRhY2htZW50L2Vkb2MtYXR0YWNobWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2Vkb2MtYXR0YWNobWVudC9lZG9jLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0vRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7QUFTaEcsTUFBTSxPQUFPLHVCQUF1QjtJQW9CZDtJQUNWO0lBQ0E7SUFDQTtJQXRCSCxXQUFXLEdBQUcseUJBQXlCLENBQUM7SUFDeEMsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUN0QixJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ1osa0JBQWtCLENBQTJCO0lBRTVDLFVBQVUsR0FBd0IsRUFBRSxDQUFDO0lBQ3JDLEtBQUssQ0FBYTtJQUNsQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFDcEIsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixVQUFVLENBQStCO0lBRXhDLFlBQVksR0FBc0MsSUFBSSxZQUFZLEVBQXVCLENBQUM7SUFDMUYsV0FBVyxHQUFzQyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUN6RixRQUFRLEdBQXNDLElBQUksWUFBWSxFQUF1QixDQUFDO0lBRWhHLFlBQW9CLFNBQWlDLEVB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QUFDLFlBQVksR0FBRyw4QkFBOEIsQ0FBQztnQkFDekcsQ0FBQztZQUNILENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRywwQkFBMEIsR0FBRyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7WUFDcEYsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBakxVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHVYQ2ZwQyxvbkZBMkNPOzs0RkQ1Qk0sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHNCQUFzQjs4TEFVdkIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEVEb2N1bWVudEF0dGFjaG1lbnQgfSBmcm9tICcuL2Vkb2N1bWVudC1hdHRhY2htZW50JztcbmltcG9ydCB7IE9lcGFBdHRhY2htZW50LCBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IEVkb2NBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4vZWRvYy1hdHRhY2htZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiwgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPZXBhRmlsZVV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vb2VwYS1maWxlLXV0aWxzL29lcGEtZmlsZS11dGlsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLWVkb2MtYXR0YWNobWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZG9jLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZG9jLWF0dGFjaG1lbnQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEVkb2NBdHRhY2htZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGNvbXBvbmVudElkID0gJ0Vkb2NBdHRhY2htZW50Q29tcG9uZW50JztcbiAgcHVibGljIGVycm9yTXNnOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGJ1c3kgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZWxldGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKSBhdHRhY2htZW50OiBFRG9jdW1lbnRBdHRhY2htZW50ID0ge307XG4gIEBJbnB1dCgpIGdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmaWVsZDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZXJyb3JMYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dWYWxpZGF0aW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjY2VwdDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHJlbW92ZUFsbG93ZWQgPSB0cnVlO1xuICBASW5wdXQoKSBva1RvRGVsZXRlOiBTdWJqZWN0PGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG4gIEBPdXRwdXQoKSBmaWxlVXBsb2FkZWQ6IEV2ZW50RW1pdHRlcjxFRG9jdW1lbnRBdHRhY2htZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RURvY3VtZW50QXR0YWNobWVudD4oKTtcbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkOiBFdmVudEVtaXR0ZXI8RURvY3VtZW50QXR0YWNobWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEVEb2N1bWVudEF0dGFjaG1lbnQ+KCk7XG4gIEBPdXRwdXQoKSBkb3dubG9hZDogRXZlbnRFbWl0dGVyPEVEb2N1bWVudEF0dGFjaG1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFRG9jdW1lbnRBdHRhY2htZW50PigpO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpZFNlcnZpY2U6IE9lcGFDb21wb25lbnRJZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxlVXRpbFNlcnZpY2U6IE9lcGFGaWxlVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlRG9jQXR0YWNobWVudFNlcnZpY2U6IEVkb2NBdHRhY2htZW50U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2VcbiAgICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudElkID0gdGhpcy5pZFNlcnZpY2UuZ2V0Q29tcG9uZW50SWQodGhpcy5ncm91cCk7XG4gICAgICB0aGlzLmNvbXBvbmVudElkICs9ICh0aGlzLmNvbXBvbmVudElkLmxlbmd0aCA+IDAgPyAnXycgOiAnJykgKyB0aGlzLmZpZWxkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWxlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNc2cgPSAnJztcbiAgICBjb25zdCBmaWxlTGlzdDogRmlsZUxpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBmaWxlTGlzdFswXTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZmlsZVR5cGVDYW5CZUFjY2VwdGVkKGZpbGUpKSB7XG4gICAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLnVwbG9hZEZpbGUoZmlsZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoYXR0YWNobWVudDogT2VwYUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGRdLnNldFZhbHVlKGF0dGFjaG1lbnQudXNlckZpbGVuYW1lKTtcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnQgPSB0aGlzLmFwcGVuZE9lcGFBdHRhY2htZW50RGF0YShhdHRhY2htZW50KTtcbiAgICAgICAgICB0aGlzLmVEb2NBdHRhY2htZW50U2VydmljZS5jcmVhdGVFRG9jQXR0YWNobWVudCh0aGlzLmF0dGFjaG1lbnQpLnN1YnNjcmliZShpZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnQuaWQgPSBpZC5yZXNwb25zZTtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZGVkLmVtaXQodGhpcy5hdHRhY2htZW50KTtcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTXNnID0gJ0Vycm9yIHVwbG9hZGluZyBmaWxlOiAnICsgZXJyO1xuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNc2cgPSAnRXJyb3IgdXBsb2FkaW5nIGZpbGU6ICcgKyBlcnIgfHwgJyc7XG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICAgIH19KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXJyb3JNc2cgPSAnQ2Fubm90IGFjY2VwdCB0aGlzIHR5cGUgb2YgZmlsZS4gUGxlYXNlIHVwbG9hZCBhIGZpbGUgb2YgdHlwZTogJyArIHRoaXMuYWNjZXB0O1xuICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZE9lcGFBdHRhY2htZW50RGF0YShvZXBhOiBPZXBhQXR0YWNobWVudCkgOiBFRG9jdW1lbnRBdHRhY2htZW50IHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5hdHRhY2htZW50IHx8IHt9O1xuICAgIHJlc3VsdC5zeXN0ZW1GaWxlbmFtZSA9IG9lcGEuc3lzdGVtRmlsZW5hbWU7XG4gICAgcmVzdWx0LnVzZXJGaWxlbmFtZSA9IG9lcGEudXNlckZpbGVuYW1lO1xuICAgIHJlc3VsdC5sb2NhdGlvbiA9IG9lcGEubG9jYXRpb247XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZmlsZVR5cGVDYW5CZUFjY2VwdGVkKGZpbGU6YW55KTogYm9vbGVhbiB7XG4gICAgbGV0IG9rID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5hY2NlcHQpIHtcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5maWxlVXRpbFNlcnZpY2UubWltZVR5cGVGb3JGaWxlKGZpbGUubmFtZSk7XG4gICAgICBpZiAodGhpcy5hY2NlcHQuaW5kZXhPZihtaW1lVHlwZSkgPCAwKSB7XG4gICAgICAgIG9rID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvaztcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVGaWxlKCkge1xuICAgIHRoaXMuZXJyb3JNc2cgPSAnJztcbiAgICBjb25zdCBtb2RhbDogQnNNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHsgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSB9KTtcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmhlYWRlclRleHQgPSAnUmVtb3ZlIEF0dGFjaG1lbnQnO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuYm9keVRleHQgPSAnRG8geW91IHdhbnQgdG8gcmVtb3ZlIHRoZSBhdHRhY2htZW50OiAnICsgdGhpcy5hdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICc/JztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmNvbmZpcm1CdG5MYWJlbCA9ICdZZXMnO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY2FuY2VsQnRuTGFiZWwgPSAnTm8nO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY29uZmlybUNsaWNrZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuYXR0ZW1wdERlbGV0ZUF0dGFjaG1lbnQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0ZW1wdERlbGV0ZUF0dGFjaG1lbnQoKSB7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMub2tUb0RlbGV0ZSkge1xuICAgICAgdGhpcy5kZWxldGVBdHRhY2htZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5kZWxldGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5kZWxldGVTdWJzY3JpcHRpb24gPSB0aGlzLm9rVG9EZWxldGUuc3Vic2NyaWJlKG9rID0+IHtcbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlQXR0YWNobWVudCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTXNnID0gJ1VuYWJsZSB0byBkZWxldGUgYXR0YWNobWVudC4gUmVmZXJlbmNlIHN0aWxsIGFjdGl2ZS4nO1xuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5maWxlUmVtb3ZlZC5lbWl0KHRoaXMuYXR0YWNobWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUF0dGFjaG1lbnQoKSB7XG4gICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgIGlmICh0aGlzLmF0dGFjaG1lbnQuaWQpIHtcbiAgICAgIHRoaXMuZURvY0F0dGFjaG1lbnRTZXJ2aWNlLmRlbGV0ZUVEb2NBdHRhY2htZW50KHRoaXMuYXR0YWNobWVudC5pZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyQXR0YWNobWVudCgpO1xuICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTXNnID0gXCJFcnJvciBkZWxldGluZyBmaWxlOiBcIiArIGVycjtcbiAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB9fSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckF0dGFjaG1lbnQoKSB7XG4gICAgdGhpcy5hdHRhY2htZW50LmlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXR0YWNobWVudC51c2VyRmlsZW5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hdHRhY2htZW50LmxvY2F0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXR0YWNobWVudC5lRG9jSGFuZGxlSUQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hdHRhY2htZW50LnN5c3RlbUZpbGVuYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0uc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkRmlsZShhdHRhY2htZW50OiBFRG9jdW1lbnRBdHRhY2htZW50KSB7XG4gICAgdGhpcy5lcnJvck1zZyA9ICcnO1xuICAgIGlmICghYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZSB8fCBhdHRhY2htZW50LnN5c3RlbUZpbGVuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5kb3dubG9hZEVEb2NGaWxlKGF0dGFjaG1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvd25sb2FkU2VydmVyRmlsZShhdHRhY2htZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkRURvY0ZpbGUoYXR0YWNobWVudDogRURvY3VtZW50QXR0YWNobWVudCkge1xuICAgIGlmIChhdHRhY2htZW50LmlkKSB7XG4gICAgICB0aGlzLmVEb2NBdHRhY2htZW50U2VydmljZS5kb3dubG9hZEVEb2NBdHRhY2htZW50KGF0dGFjaG1lbnQuaWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5maWxlVXRpbFNlcnZpY2UubWltZVR5cGVGb3JGaWxlKGF0dGFjaG1lbnQudXNlckZpbGVuYW1lIHx8ICcnKTtcbiAgICAgICAgICBpZiAobWltZVR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLmRvd25sb2FkRmlsZShkYXRhLCBtaW1lVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkLmVtaXQoYXR0YWNobWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNc2cgPSAnVW5hYmxlIHRvIGRvd25sb2FkIGZpbGU6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICcuIENhbm5vdCBkZXRlcm1pbmUgbWltZSB0eXBlJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNc2cgPSAnRXJyb3IgZG93bmxvYWRpbmcgZmlsZTogJyArIGF0dGFjaG1lbnQudXNlckZpbGVuYW1lICsgJzogJyArIGVycjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZFNlcnZlckZpbGUoYXR0YWNobWVudDogRURvY3VtZW50QXR0YWNobWVudCkge1xuICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLmRvd25sb2FkQXR0YWNobWVudChhdHRhY2htZW50KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5maWxlVXRpbFNlcnZpY2UubWltZVR5cGVGb3JGaWxlKGF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgJycpO1xuICAgICAgICBpZiAobWltZVR5cGUpIHtcbiAgICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEZpbGUoZGF0YSwgbWltZVR5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3JNc2cgPSAnVW5hYmxlIHRvIGRvd25sb2FkIGZpbGU6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICcuIENhbm5vdCBkZXRlcm1pbmUgbWltZSB0eXBlJztcbiAgICAgICAgfVxuICAgICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNc2cgPSAnRXJyb3IgZG93bmxvYWRpbmcgZmlsZTogJyArIGF0dGFjaG1lbnQudXNlckZpbGVuYW1lICsgJzogJyArIGVycjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFhdHRhY2htZW50IHx8ICFhdHRhY2htZW50LnVzZXJGaWxlbmFtZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYnVzeVwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWZpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcm93c2UmaGVsbGlwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cImZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCsnX0Jyb3dzZUJ0bidcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHQgPyBhY2NlcHQgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdESVNBQkxFRCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJidXN5XCI+IDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiTm8gZmlsZSBjaG9zZW5cIiBbaWRdPVwiY29tcG9uZW50SWQrJ19JbnB1dCdcIiByZWFkb25seT5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ1wiPnt7ZXJyb3JMYWJlbCB8fCBsYWJlbH19IGlzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBkdW1teSBpbnB1dCBmaWVsZCBmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcyAtLT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaGlkZGVuXT1cInRydWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiYXR0YWNobWVudCAmJiBhdHRhY2htZW50LnVzZXJGaWxlbmFtZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImRvd25sb2FkRmlsZShhdHRhY2htZW50KVwiIFtpZF09XCJjb21wb25lbnRJZCsnX0Rvd25sb2FkRmlsZUxpbmsnXCIgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+e3thdHRhY2htZW50LnVzZXJGaWxlbmFtZX19PC9hPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtb3ZlQWxsb3dlZCAmJiAhYnVzeVwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2lkXT1cImNvbXBvbmVudElkKydfUmVtb3ZlRmlsZUJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuY29udHJvbHNbZmllbGRdLnN0YXR1cyA9PT0gJ0RJU0FCTEVEJ1wiPlJlbW92ZSBBdHRhY2htZW50PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYnVzeVwiPiA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj48L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1zZ1wiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+e3tlcnJvck1zZ319PC9kaXY+XG48L2Zvcm0+Il19