@ohioepa/oepa-ui-lib 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/esm2022/lib/account-search-input/account-search-input.component.mjs +3 -3
  2. package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +3 -3
  3. package/esm2022/lib/action-btn/action-btn.component.mjs +3 -3
  4. package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +3 -3
  5. package/esm2022/lib/address/address.component.mjs +3 -3
  6. package/esm2022/lib/address/oepa-address.service.mjs +3 -3
  7. package/esm2022/lib/blank/blank.component.mjs +3 -3
  8. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  9. package/esm2022/lib/checkbox-input/checkbox-input.component.mjs +3 -3
  10. package/esm2022/lib/comment-modal/comment-modal.component.mjs +3 -3
  11. package/esm2022/lib/common-forms.module.mjs +9 -36
  12. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +3 -3
  13. package/esm2022/lib/contact/contact.component.mjs +3 -3
  14. package/esm2022/lib/date-input/date-input.component.mjs +3 -3
  15. package/esm2022/lib/date-input-modal/date-input-modal.component.mjs +3 -3
  16. package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
  17. package/esm2022/lib/daterangepicker/daterangepicker.component.mjs +3 -3
  18. package/esm2022/lib/dual-list-box/array.pipes.mjs +6 -6
  19. package/esm2022/lib/dual-list-box/dual-list-box.component.mjs +3 -3
  20. package/esm2022/lib/ebiz-address/ebiz-address.component.mjs +3 -3
  21. package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +3 -3
  22. package/esm2022/lib/edoc-attachment/edoc-attachment.service.mjs +3 -3
  23. package/esm2022/lib/entity/entity.service.mjs +3 -3
  24. package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +3 -3
  25. package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +3 -3
  26. package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +5 -5
  27. package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +3 -3
  28. package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +3 -3
  29. package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +5 -5
  30. package/esm2022/lib/entity/place-create-modal/place-create-modal.component.mjs +3 -3
  31. package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +3 -3
  32. package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +5 -5
  33. package/esm2022/lib/file-upload/file-upload.component.mjs +3 -3
  34. package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +3 -3
  35. package/esm2022/lib/lynx-image-upload/lynx.service.mjs +3 -3
  36. package/esm2022/lib/message/message.component.mjs +3 -3
  37. package/esm2022/lib/message-list/message-list.component.mjs +3 -3
  38. package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +3 -3
  39. package/esm2022/lib/notes-modal/notes-modal.component.mjs +3 -3
  40. package/esm2022/lib/numeric-input/numeric-input.component.mjs +3 -3
  41. package/esm2022/lib/numeric-input.directive.mjs +3 -3
  42. package/esm2022/lib/oepa-error-message/oepa-error-message.component.mjs +3 -3
  43. package/esm2022/lib/oepa-forms.service.mjs +3 -3
  44. package/esm2022/lib/oepa-wait-message/oepa-wait-message.component.mjs +3 -3
  45. package/esm2022/lib/parameter/parameter.service.mjs +3 -3
  46. package/esm2022/lib/params-help-button/params-help-button.component.mjs +3 -3
  47. package/esm2022/lib/phone-number/phone-number.component.mjs +3 -3
  48. package/esm2022/lib/pin-modal/oepa-pin.service.mjs +3 -3
  49. package/esm2022/lib/pin-modal/pin-modal.component.mjs +3 -3
  50. package/esm2022/lib/select-input/select-input.component.mjs +3 -3
  51. package/esm2022/lib/server-timeout-modal/server-timeout-modal.component.mjs +3 -3
  52. package/esm2022/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.mjs +3 -3
  53. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +3 -3
  54. package/esm2022/lib/shopping-cart/shopping-cart.service.mjs +3 -3
  55. package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +3 -3
  56. package/esm2022/lib/table/oepa-table-cell-classname.pipe.mjs +3 -3
  57. package/esm2022/lib/table/oepa-table-cell-colspan.pipe.mjs +3 -3
  58. package/esm2022/lib/table/oepa-table-cell-hidden.pipe.mjs +3 -3
  59. package/esm2022/lib/table/oepa-table-cell-icon-classname.pipe.mjs +3 -3
  60. package/esm2022/lib/table/oepa-table-cell-img-src.pipe.mjs +3 -3
  61. package/esm2022/lib/table/oepa-table-cell-inner-html.pipe.mjs +3 -3
  62. package/esm2022/lib/table/oepa-table-cell-input-component.pipe.mjs +3 -3
  63. package/esm2022/lib/table/oepa-table-cell-not-selectable.pipe.mjs +3 -3
  64. package/esm2022/lib/table/oepa-table-cell-value.pipe.mjs +3 -3
  65. package/esm2022/lib/table/oepa-table-filtering.directive.mjs +3 -3
  66. package/esm2022/lib/table/oepa-table-sorting.directive.mjs +3 -3
  67. package/esm2022/lib/table/p-table/p-table.component.mjs +3 -3
  68. package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +3 -3
  69. package/esm2022/lib/table/table-export.service.mjs +3 -3
  70. package/esm2022/lib/table/table-header-cell/table-header-cell.component.mjs +3 -3
  71. package/esm2022/lib/table/table.component.mjs +3 -3
  72. package/esm2022/lib/table/table.service.mjs +3 -3
  73. package/esm2022/lib/template-confirmation-modal/template-confirmation-modal.component.mjs +3 -3
  74. package/esm2022/lib/text-area-input/text-area-input.component.mjs +3 -3
  75. package/esm2022/lib/text-input/text-input.component.mjs +3 -3
  76. package/esm2022/lib/timeout-modal/timeout-modal.component.mjs +3 -3
  77. package/esm2022/lib/timepicker/timepicker.component.mjs +3 -3
  78. package/esm2022/lib/validation/validation.service.mjs +3 -3
  79. package/esm2022/lib/yes-no/yes-no.component.mjs +3 -3
  80. package/esm2022/lib/yes-no-boolean/yes-no.component.mjs +3 -3
  81. package/esm2022/lib/yes-no-other-input/yes-no-other-input.component.mjs +3 -3
  82. package/esm2022/lib/zip-code/zip-code.component.mjs +3 -3
  83. package/esm2022/public-api.mjs +1 -28
  84. package/fesm2022/ohioepa-oepa-ui-lib.mjs +495 -2519
  85. package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -1
  86. package/lib/common-forms.module.d.ts +70 -82
  87. package/ohioepa-oepa-ui-lib-1.2.0.tgz +0 -0
  88. package/package.json +3 -3
  89. package/public-api.d.ts +0 -27
  90. package/esm2022/lib/document/document-editor/document-editor.component.mjs +0 -225
  91. package/esm2022/lib/document/document-event-entity-type.mjs +0 -7
  92. package/esm2022/lib/document/document-event-type.mjs +0 -7
  93. package/esm2022/lib/document/document-event.mjs +0 -2
  94. package/esm2022/lib/document/document-group/document-group.component.mjs +0 -210
  95. package/esm2022/lib/document/document-part/document-part.component.mjs +0 -19
  96. package/esm2022/lib/document/document-part-editor/document-part-editor.component.mjs +0 -296
  97. package/esm2022/lib/document/document-placeholder-modal/document-placeholder-modal.component.mjs +0 -49
  98. package/esm2022/lib/document/document-section/document-section.component.mjs +0 -226
  99. package/esm2022/lib/document/document.service.mjs +0 -325
  100. package/esm2022/lib/document/group-modal/group-modal.component.mjs +0 -46
  101. package/esm2022/lib/document/part-modal/part-modal.component.mjs +0 -48
  102. package/esm2022/lib/document/portal-document-class.mjs +0 -2
  103. package/esm2022/lib/document/portal-document-group.mjs +0 -2
  104. package/esm2022/lib/document/portal-document-part.mjs +0 -2
  105. package/esm2022/lib/document/portal-document-placeholder.mjs +0 -2
  106. package/esm2022/lib/document/portal-document-section.mjs +0 -2
  107. package/esm2022/lib/document/portal-document-text.mjs +0 -2
  108. package/esm2022/lib/document/portal-document-type.mjs +0 -2
  109. package/esm2022/lib/document/portal-document.mjs +0 -2
  110. package/esm2022/lib/document/portal-email-attachment-type.mjs +0 -2
  111. package/esm2022/lib/document/portal-email-attachment.mjs +0 -2
  112. package/esm2022/lib/document/portal-email-filter.mjs +0 -2
  113. package/esm2022/lib/document/portal-email.mjs +0 -2
  114. package/esm2022/lib/document/section-modal/section-modal.component.mjs +0 -46
  115. package/esm2022/lib/esri-map/esri-map.component.mjs +0 -416
  116. package/esm2022/lib/ohio-lat-long/ohio-lat-long.component.mjs +0 -176
  117. package/lib/document/document-editor/document-editor.component.d.ts +0 -34
  118. package/lib/document/document-event-entity-type.d.ts +0 -5
  119. package/lib/document/document-event-type.d.ts +0 -5
  120. package/lib/document/document-event.d.ts +0 -9
  121. package/lib/document/document-group/document-group.component.d.ts +0 -38
  122. package/lib/document/document-part/document-part.component.d.ts +0 -10
  123. package/lib/document/document-part-editor/document-part-editor.component.d.ts +0 -46
  124. package/lib/document/document-placeholder-modal/document-placeholder-modal.component.d.ts +0 -19
  125. package/lib/document/document-section/document-section.component.d.ts +0 -37
  126. package/lib/document/document.service.d.ts +0 -90
  127. package/lib/document/group-modal/group-modal.component.d.ts +0 -20
  128. package/lib/document/part-modal/part-modal.component.d.ts +0 -20
  129. package/lib/document/portal-document-class.d.ts +0 -10
  130. package/lib/document/portal-document-group.d.ts +0 -15
  131. package/lib/document/portal-document-part.d.ts +0 -22
  132. package/lib/document/portal-document-placeholder.d.ts +0 -12
  133. package/lib/document/portal-document-section.d.ts +0 -13
  134. package/lib/document/portal-document-text.d.ts +0 -7
  135. package/lib/document/portal-document-type.d.ts +0 -15
  136. package/lib/document/portal-document.d.ts +0 -27
  137. package/lib/document/portal-email-attachment-type.d.ts +0 -6
  138. package/lib/document/portal-email-attachment.d.ts +0 -12
  139. package/lib/document/portal-email-filter.d.ts +0 -12
  140. package/lib/document/portal-email.d.ts +0 -18
  141. package/lib/document/section-modal/section-modal.component.d.ts +0 -20
  142. package/lib/esri-map/esri-map.component.d.ts +0 -41
  143. package/lib/ohio-lat-long/ohio-lat-long.component.d.ts +0 -63
  144. package/ohioepa-oepa-ui-lib-1.1.0.tgz +0 -0
@@ -1,176 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- import * as i3 from "ngx-mask";
6
- import * as i4 from "../esri-map/esri-map.component";
7
- import * as i5 from "../yes-no/yes-no.component";
8
- export class OhioLatLongComponent {
9
- group;
10
- /** Form validation will be displayed when showValidation is true. */
11
- showValidation = false;
12
- latLongCollectionMethods = [];
13
- OHIO = { latMin: 38, latMax: 42, longMin: -85, longMax: -80 };
14
- collectionMethods = [];
15
- isSatelliteView = false;
16
- coordsOutsideOfOhio = false;
17
- customPatterns = { '9': { pattern: new RegExp('[-?0-9]') },
18
- '0': { pattern: new RegExp('[0-9]') } };
19
- // Set our map properties
20
- mapCenter = [-82.996822, 39.959011];
21
- basemapType = 'streets-vector';
22
- mapZoomLevel = 7;
23
- // See app.component.html
24
- mapLoadedEvent(status) {
25
- console.log('The map loaded: ' + status);
26
- }
27
- useDMS = false;
28
- dmsLat = {
29
- deg: undefined,
30
- min: undefined,
31
- sec: undefined
32
- };
33
- dmsLong = {
34
- deg: undefined,
35
- min: undefined,
36
- sec: undefined
37
- };
38
- constructor() { }
39
- ngOnInit() {
40
- this.updateLatDMSValue(this.group.controls['latDecimal'].value);
41
- this.updateLonDMSValue(this.group.controls['longDecimal'].value);
42
- this.group.controls['latDecimal'].valueChanges.subscribe(latDecimal => {
43
- this.updateLatDMSValue(latDecimal);
44
- });
45
- this.group.controls['longDecimal'].valueChanges.subscribe(longDecimal => {
46
- this.updateLonDMSValue(longDecimal);
47
- });
48
- }
49
- updateLatDMSValue(latDecimal) {
50
- if (this.isNum(latDecimal)) {
51
- this.dmsLat = this.decimalToDMS(latDecimal);
52
- this.group.controls['dmsLat'].get('deg')?.patchValue(this.dmsLat.deg);
53
- this.group.controls['dmsLat'].get('min')?.patchValue(this.dmsLat.min);
54
- this.group.controls['dmsLat'].get('sec')?.patchValue(this.dmsLat.sec);
55
- this.coordsOutsideOfOhio = !this.checkCoordsInOhio(this.group.controls['latDecimal'].value, this.group.controls['longDecimal'].value);
56
- }
57
- }
58
- updateLonDMSValue(longDecimal) {
59
- if (this.isNum(longDecimal)) {
60
- this.dmsLong = this.decimalToDMS(longDecimal);
61
- this.group.controls['dmsLong'].get('deg')?.patchValue(this.dmsLong.deg);
62
- this.group.controls['dmsLong'].get('min')?.patchValue(this.dmsLong.min);
63
- this.group.controls['dmsLong'].get('sec')?.patchValue(this.dmsLong.sec);
64
- this.coordsOutsideOfOhio = !this.checkCoordsInOhio(this.group.controls['latDecimal'].value, this.group.controls['longDecimal'].value);
65
- }
66
- }
67
- // default to required if oepaRequired is not specified
68
- // public isRequired() {
69
- // // return (this.oepaRequired() !== false);
70
- // };
71
- async zoomToCoordinates(latDecimal, longDecimal, facilityMap) {
72
- facilityMap.resetMap();
73
- facilityMap.addPoint(latDecimal, longDecimal, 'xxx');
74
- facilityMap.zoomToFacility(latDecimal, longDecimal);
75
- console.log(this.group.value);
76
- }
77
- convertCoordsToDMS(dmsLatitude, dmsLongitude) {
78
- if (this.isNum(dmsLatitude.controls['deg'].value) &&
79
- this.isNum(dmsLatitude.controls['min'].value) &&
80
- this.isNum(dmsLatitude.controls['sec'].value) &&
81
- this.isNum(dmsLongitude.controls['deg'].value) &&
82
- this.isNum(dmsLongitude.controls['min'].value) &&
83
- this.isNum(dmsLongitude.controls['sec'].value)) {
84
- var decimalLat;
85
- var decimalLong;
86
- var dmsLat = {
87
- deg: dmsLatitude.controls['deg'].value,
88
- min: dmsLatitude.controls['min'].value,
89
- sec: dmsLatitude.controls['sec'].value
90
- };
91
- var dmsLong = {
92
- deg: Number(dmsLongitude.controls['deg'].value) < 0 ? dmsLongitude.controls['deg'].value : -1 * Number(dmsLongitude.controls['deg'].value),
93
- min: dmsLongitude.controls['min'].value,
94
- sec: dmsLongitude.controls['sec'].value
95
- };
96
- decimalLat = this.dmsToDecimal(dmsLat);
97
- decimalLong = this.dmsToDecimal(dmsLong);
98
- this.group.controls['latDecimal'].patchValue(decimalLat);
99
- this.group.controls['longDecimal'].patchValue(decimalLong);
100
- }
101
- }
102
- dmsToDecimal(dms) {
103
- if (null != dms.deg && null != dms.min && null != dms.sec) {
104
- var decimal = undefined;
105
- var decimalFraction = dms.min / 60.0 + dms.sec / 3600.0;
106
- decimal = (dms.deg > 0) ? dms.deg + decimalFraction : dms.deg - decimalFraction;
107
- return decimal.toFixed(6);
108
- }
109
- return null;
110
- }
111
- ;
112
- decimalToDMS(decimal) {
113
- var dms = {
114
- deg: undefined,
115
- min: undefined,
116
- sec: undefined,
117
- };
118
- var absolute = Math.abs(decimal);
119
- dms.deg = Math.floor(absolute);
120
- var minsec = (absolute - dms.deg) * 60.0;
121
- dms.min = Math.floor(minsec);
122
- dms.sec = Number(((minsec - dms.min) * 60.0).toFixed(6));
123
- if (dms.sec === 60) {
124
- dms.min += 1;
125
- dms.sec = 0;
126
- }
127
- if (dms.min === 60) {
128
- dms.deg += 1;
129
- dms.min = 0;
130
- }
131
- return dms;
132
- }
133
- ;
134
- checkCoordsInOhio(latitude, longitude) {
135
- var coordsInOhio = true;
136
- try {
137
- if ((Number(latitude) < this.OHIO.latMin || Number(latitude) > this.OHIO.latMax ||
138
- Number(longitude) < this.OHIO.longMin || Number(longitude) > this.OHIO.longMax)) {
139
- coordsInOhio = false;
140
- }
141
- }
142
- catch (e) {
143
- console.log('ERROR: bad lat/long: ' + latitude + '/' + longitude);
144
- }
145
- return coordsInOhio;
146
- }
147
- updateCoordinates(coords) {
148
- this.group.controls['latDecimal'].patchValue(coords.latDecimal);
149
- this.group.controls['longDecimal'].patchValue(coords.longDecimal);
150
- }
151
- isNum(value) {
152
- if (value && null != value && undefined != value && value != '') {
153
- return true;
154
- }
155
- return false;
156
- }
157
- getDMSLatFormGroup() {
158
- return this.group.controls['dmsLat'];
159
- }
160
- getDMSLongFormGroup() {
161
- return this.group.controls['dmsLong'];
162
- }
163
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OhioLatLongComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
164
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: OhioLatLongComponent, selector: "oepa-ohio-lat-long", inputs: { group: "group", showValidation: "showValidation", latLongCollectionMethods: "latLongCollectionMethods" }, ngImport: i0, template: "<div [style.pointer-events]=\"group.enabled ? null : 'none'\">\n\n<form [formGroup]=\"group\" novalidate>\n <div class=\"oepa-workflow-component-50\">\n <div class=\"oepa-section-component-body\">\n <div class=\"form-group\">\n <div class=\"alert alert-info\">\n Use the map on the right to set the latitude and longitude values and verify they are correct.\n You may click on the map to choose latitude and longitude coordinates or enter the latitude and longitude\n values in the input fields below.\n Alternately, you may enter an address in the input field at the top of the map to find coordinates by\n address.\n </div>\n </div>\n <div *ngIf=\"useDMS\">\n <button class=\"btn btn-primary\" (click)=\"convertCoordsToDMS(getDMSLatFormGroup(), getDMSLongFormGroup()); useDMS = !useDMS\">Convert\n Coordinates to Decimal Degrees</button>\n <div class=\"row\" formGroupName=\"dmsLat\">\n <div class=\"col-md-12\">\n <label>Latitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"latDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-89\" max=\"89\" ng-blur=\"onLatDMSChange()\" maxlength=\"\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['deg'].hasError('required')\">xxx is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"latMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"latSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\" formGroupName=\"dmsLong\">\n <div class=\"col-md-12\">\n <label>Longitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"longDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-179\" max=\"179\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['deg'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"longMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"longSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!useDMS\">\n <button class=\"btn btn-primary\" (click)=\"useDMS = !useDMS\">Enter Coordinates in Degrees, Minutes, Seconds</button>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Latitude</label>\n <input formControlName=\"latDecimal\" name=\"Latitude\" class=\"form-control\" type=\"text\" placeholder=\"Latitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\" \n [ngClass]=\"{'is-invalid':showValidation && group['controls']['latDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['latDecimal'].hasError('required')\">Latitude is required</small>\n </div>\n <div class=\"form-group\">\n <label>Longitude</label>\n <input formControlName=\"longDecimal\" name=\"Longitude\" class=\"form-control\" type=\"text\" placeholder=\"Longitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['longDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['longDecimal'].hasError('required')\">Longitude is required</small>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"group['controls']['latDecimal'].value !== '' && group['controls']['longDecimal'].value !== ''\">\n <button class=\"btn btn-primary\" (click)=\"zoomToCoordinates(group['controls']['latDecimal'].value,group['controls']['longDecimal'].value, facilityMap)\">Zoom To These Coordinates</button>\n </div>\n\n <div *ngIf=\"latLongCollectionMethods && latLongCollectionMethods.length > 0\" class=\"form-group\">\n <label>Collection Method</label>\n <select class=\"form-select\" id=\"collectionMethodType\" name=\"collectionMethodType\" formControlName=\"collectionMethodType\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['collectionMethodType'].status === 'INVALID'}\">\n <option value=\"\">--Select Collection Method--</option>\n <option *ngFor=\"let n of latLongCollectionMethods\" [ngValue]=\"n.codeValue\">{{n.description}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['collectionMethodType'].hasError('required')\">Collection Method is required</small>\n </div>\n\n <div *ngIf=\"coordsOutsideOfOhio\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"group.get('allowOutsideOfOhio')?.value!=='yes'\">\n The Latitude and Longitude values entered are not within the state of Ohio. Please enter a latitude value\n between 38 and 42 and a\n longitude value between -85 and -80 or indicate below that this location is outside of Ohio.\n </div>\n <div>\n <oepa-yes-no [group]=\"group\" field=\"allowOutsideOfOhio\" id=\"allowOutsideOfOhio\" [showValidation]=\"showValidation\">Is\n this location outside of Ohio?</oepa-yes-no>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"oepa-action-component-50\">\n <div class=\"oepa-section-component-body\">\n <oepa-esri-map\n #facilityMap [center]=\"mapCenter\"\n [basemap]=\"basemapType\"\n [zoom]=\"mapZoomLevel\"\n (mapLoaded)=\"mapLoadedEvent($event)\"\n [currentLatLong]=\"group.value\"\n (onNewCoordinates)=\"updateCoordinates($event)\"\n [showSearch]=\"group.enabled\">\n </oepa-esri-map>\n </div>\n </div>\n\n</form>\n\n</div>", styles: [".oepa-workflow-component-50{float:left;width:50%;overflow-y:auto}.oepa-section-component-body{overflow-y:auto;overflow-x:hidden;box-sizing:border-box;padding:10px}.oepa-action-component-50{width:50%;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.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"] }, { kind: "component", type: i4.EsriMapComponent, selector: "oepa-esri-map", inputs: ["currentLatLong", "zoom", "center", "basemap", "showSearch"], outputs: ["mapLoaded", "onNewCoordinates"] }, { kind: "component", type: i5.YesNoComponent, selector: "oepa-yes-no", inputs: ["group", "field", "showValidation", "disabled"] }] });
165
- }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OhioLatLongComponent, decorators: [{
167
- type: Component,
168
- args: [{ selector: 'oepa-ohio-lat-long', template: "<div [style.pointer-events]=\"group.enabled ? null : 'none'\">\n\n<form [formGroup]=\"group\" novalidate>\n <div class=\"oepa-workflow-component-50\">\n <div class=\"oepa-section-component-body\">\n <div class=\"form-group\">\n <div class=\"alert alert-info\">\n Use the map on the right to set the latitude and longitude values and verify they are correct.\n You may click on the map to choose latitude and longitude coordinates or enter the latitude and longitude\n values in the input fields below.\n Alternately, you may enter an address in the input field at the top of the map to find coordinates by\n address.\n </div>\n </div>\n <div *ngIf=\"useDMS\">\n <button class=\"btn btn-primary\" (click)=\"convertCoordsToDMS(getDMSLatFormGroup(), getDMSLongFormGroup()); useDMS = !useDMS\">Convert\n Coordinates to Decimal Degrees</button>\n <div class=\"row\" formGroupName=\"dmsLat\">\n <div class=\"col-md-12\">\n <label>Latitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"latDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-89\" max=\"89\" ng-blur=\"onLatDMSChange()\" maxlength=\"\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['deg'].hasError('required')\">xxx is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"latMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"latSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\" formGroupName=\"dmsLong\">\n <div class=\"col-md-12\">\n <label>Longitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"longDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-179\" max=\"179\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['deg'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"longMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"longSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!useDMS\">\n <button class=\"btn btn-primary\" (click)=\"useDMS = !useDMS\">Enter Coordinates in Degrees, Minutes, Seconds</button>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Latitude</label>\n <input formControlName=\"latDecimal\" name=\"Latitude\" class=\"form-control\" type=\"text\" placeholder=\"Latitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\" \n [ngClass]=\"{'is-invalid':showValidation && group['controls']['latDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['latDecimal'].hasError('required')\">Latitude is required</small>\n </div>\n <div class=\"form-group\">\n <label>Longitude</label>\n <input formControlName=\"longDecimal\" name=\"Longitude\" class=\"form-control\" type=\"text\" placeholder=\"Longitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['longDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['longDecimal'].hasError('required')\">Longitude is required</small>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"group['controls']['latDecimal'].value !== '' && group['controls']['longDecimal'].value !== ''\">\n <button class=\"btn btn-primary\" (click)=\"zoomToCoordinates(group['controls']['latDecimal'].value,group['controls']['longDecimal'].value, facilityMap)\">Zoom To These Coordinates</button>\n </div>\n\n <div *ngIf=\"latLongCollectionMethods && latLongCollectionMethods.length > 0\" class=\"form-group\">\n <label>Collection Method</label>\n <select class=\"form-select\" id=\"collectionMethodType\" name=\"collectionMethodType\" formControlName=\"collectionMethodType\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['collectionMethodType'].status === 'INVALID'}\">\n <option value=\"\">--Select Collection Method--</option>\n <option *ngFor=\"let n of latLongCollectionMethods\" [ngValue]=\"n.codeValue\">{{n.description}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['collectionMethodType'].hasError('required')\">Collection Method is required</small>\n </div>\n\n <div *ngIf=\"coordsOutsideOfOhio\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"group.get('allowOutsideOfOhio')?.value!=='yes'\">\n The Latitude and Longitude values entered are not within the state of Ohio. Please enter a latitude value\n between 38 and 42 and a\n longitude value between -85 and -80 or indicate below that this location is outside of Ohio.\n </div>\n <div>\n <oepa-yes-no [group]=\"group\" field=\"allowOutsideOfOhio\" id=\"allowOutsideOfOhio\" [showValidation]=\"showValidation\">Is\n this location outside of Ohio?</oepa-yes-no>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"oepa-action-component-50\">\n <div class=\"oepa-section-component-body\">\n <oepa-esri-map\n #facilityMap [center]=\"mapCenter\"\n [basemap]=\"basemapType\"\n [zoom]=\"mapZoomLevel\"\n (mapLoaded)=\"mapLoadedEvent($event)\"\n [currentLatLong]=\"group.value\"\n (onNewCoordinates)=\"updateCoordinates($event)\"\n [showSearch]=\"group.enabled\">\n </oepa-esri-map>\n </div>\n </div>\n\n</form>\n\n</div>", styles: [".oepa-workflow-component-50{float:left;width:50%;overflow-y:auto}.oepa-section-component-body{overflow-y:auto;overflow-x:hidden;box-sizing:border-box;padding:10px}.oepa-action-component-50{width:50%;overflow-y:auto}\n"] }]
169
- }], ctorParameters: () => [], propDecorators: { group: [{
170
- type: Input
171
- }], showValidation: [{
172
- type: Input
173
- }], latLongCollectionMethods: [{
174
- type: Input
175
- }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2hpby1sYXQtbG9uZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL29oaW8tbGF0LWxvbmcvb2hpby1sYXQtbG9uZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL29oaW8tbGF0LWxvbmcvb2hpby1sYXQtbG9uZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVd6RCxNQUFNLE9BQU8sb0JBQW9CO0lBRXRCLEtBQUssQ0FBYTtJQUMzQixxRUFBcUU7SUFDNUQsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2Qix3QkFBd0IsR0FBVyxFQUFFLENBQUM7SUFFeEMsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUU5RCxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDdkIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFFNUIsY0FBYyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBQyxFQUFDLENBQUM7SUFFaEUseUJBQXlCO0lBQ3pCLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUMvQixZQUFZLEdBQUcsQ0FBQyxDQUFD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QjtzQkFBaEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTGF0TG9uZyB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgRXNyaU1hcENvbXBvbmVudCB9IGZyb20gJy4uL2VzcmktbWFwL2VzcmktbWFwLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29lcGEtb2hpby1sYXQtbG9uZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9vaGlvLWxhdC1sb25nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2hpby1sYXQtbG9uZy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgT2hpb0xhdExvbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGdyb3VwITogRm9ybUdyb3VwO1xuICAvKiogRm9ybSB2YWxpZGF0aW9uIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4gc2hvd1ZhbGlkYXRpb24gaXMgdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgbGF0TG9uZ0NvbGxlY3Rpb25NZXRob2RzOiBDb2RlW10gPSBbXTtcblxuICBwdWJsaWMgT0hJTyA9IHsgbGF0TWluOiAzOCwgbGF0TWF4OiA0MiwgbG9uZ01pbjogLTg1LCBsb25nTWF4OiAtODAgfTtcblxuICBwdWJsaWMgY29sbGVjdGlvbk1ldGhvZHMgPSBbXTtcbiAgcHVibGljIGlzU2F0ZWxsaXRlVmlldyA9IGZhbHNlO1xuICBwdWJsaWMgY29vcmRzT3V0c2lkZU9mT2hpbyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjdXN0b21QYXR0ZXJucyA9IHsgJzknOiB7IHBhdHRlcm46IG5ldyBSZWdFeHAoJ1stPzAtOV0nKSB9ICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCc6IHsgcGF0dGVybjogbmV3IFJlZ0V4cCgnWzAtOV0nKX19O1xuXG4gIC8vIFNldCBvdXIgbWFwIHByb3BlcnRpZXNcbiAgbWFwQ2VudGVyID0gWy04Mi45OTY4MjIsIDM5Ljk1OTAxMV07XG4gIGJhc2VtYXBUeXBlID0gJ3N0cmVldHMtdmVjdG9yJztcbiAgbWFwWm9vbUxldmVsID0gNztcblxuICAvLyBTZWUgYXBwLmNvbXBvbmVudC5odG1sXG4gIG1hcExvYWRlZEV2ZW50KHN0YXR1czogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKCdUaGUgbWFwIGxvYWRlZDogJyArIHN0YXR1cyk7XG4gIH1cblxuICBwdWJsaWMgdXNlRE1TID0gZmFsc2U7XG4gIHB1YmxpYyBkbXNMYXQ6IHtkZWc6IG51bWJlciB8IHVuZGVmaW5lZCwgbWluOiBudW1iZXIgfCB1bmRlZmluZWQsIHNlYzogbnVtYmVyIHwgdW5kZWZpbmVkfSA9IHtcbiAgICBkZWc6IHVuZGVmaW5lZCxcbiAgICBtaW46IHVuZGVmaW5lZCxcbiAgICBzZWM6IHVuZGVmaW5lZFxuICB9O1xuICBwdWJsaWMgZG1zTG9uZzoge2RlZzogbnVtYmVyIHwgdW5kZWZpbmVkLCBtaW46IG51bWJlciB8IHVuZGVmaW5lZCwgc2VjOiBudW1iZXIgfCB1bmRlZmluZWR9ID0ge1xuICAgIGRlZzogdW5kZWZpbmVkLFxuICAgIG1pbjogdW5kZWZpbmVkLFxuICAgIHNlYzogdW5kZWZpbmVkXG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuIFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUxhdERNU1ZhbHVlKHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVMb25ETVNWYWx1ZSh0aGlzLmdyb3VwLmNvbnRyb2xzWydsb25nRGVjaW1hbCddLnZhbHVlKTtcblxuICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGxhdERlY2ltYWwgPT4ge1xuICAgICAgdGhpcy51cGRhdGVMYXRETVNWYWx1ZShsYXREZWNpbWFsKTtcbiAgICB9KTtcbiAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydsb25nRGVjaW1hbCddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUobG9uZ0RlY2ltYWwgPT4ge1xuICAgICAgdGhpcy51cGRhdGVMb25ETVNWYWx1ZShsb25nRGVjaW1hbCk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVMYXRETVNWYWx1ZShsYXREZWNpbWFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc051bShsYXREZWNpbWFsKSkge1xuICAgICAgdGhpcy5kbXNMYXQgPSB0aGlzLmRlY2ltYWxUb0RNUyhsYXREZWNpbWFsKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xhdCddLmdldCgnZGVnJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMYXQuZGVnKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xhdCddLmdldCgnbWluJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMYXQubWluKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xhdCddLmdldCgnc2VjJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMYXQuc2VjKTtcbiAgICAgIHRoaXMuY29vcmRzT3V0c2lkZU9mT2hpbyA9ICF0aGlzLmNoZWNrQ29vcmRzSW5PaGlvKHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZSwgdGhpcy5ncm91cC5jb250cm9sc1snbG9uZ0RlY2ltYWwnXS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUxvbkRNU1ZhbHVlKGxvbmdEZWNpbWFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc051bShsb25nRGVjaW1hbCkpIHtcbiAgICAgIHRoaXMuZG1zTG9uZyA9IHRoaXMuZGVjaW1hbFRvRE1TKGxvbmdEZWNpbWFsKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xvbmcnXS5nZXQoJ2RlZycpPy5wYXRjaFZhbHVlKHRoaXMuZG1zTG9uZy5kZWcpO1xuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1snZG1zTG9uZyddLmdldCgnbWluJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMb25nLm1pbik7XG4gICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydkbXNMb25nJ10uZ2V0KCdzZWMnKT8ucGF0Y2hWYWx1ZSh0aGlzLmRtc0xvbmcuc2VjKTtcbiAgICAgIHRoaXMuY29vcmRzT3V0c2lkZU9mT2hpbyA9ICF0aGlzLmNoZWNrQ29vcmRzSW5PaGlvKHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZSwgdGhpcy5ncm91cC5jb250cm9sc1snbG9uZ0RlY2ltYWwnXS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVmYXVsdCB0byByZXF1aXJlZCBpZiBvZXBhUmVxdWlyZWQgaXMgbm90IHNwZWNpZmllZFxuICAvLyBwdWJsaWMgaXNSZXF1aXJlZCgpIHtcbiAgLy8gXHQvLyByZXR1cm4gKHRoaXMub2VwYVJlcXVpcmVkKCkgIT09IGZhbHNlKTtcbiAgLy8gfTtcblxuICBhc3luYyB6b29tVG9Db29yZGluYXRlcyhsYXREZWNpbWFsOiBzdHJpbmcsIGxvbmdEZWNpbWFsOiBzdHJpbmcsIGZhY2lsaXR5TWFwOiBFc3JpTWFwQ29tcG9uZW50KSB7XG4gICAgZmFjaWxpdHlNYXAucmVzZXRNYXAoKTtcbiAgICBmYWNpbGl0eU1hcC5hZGRQb2ludChsYXREZWNpbWFsLCBsb25nRGVjaW1hbCwgJ3h4eCcpO1xuICAgIGZhY2lsaXR5TWFwLnpvb21Ub0ZhY2lsaXR5KGxhdERlY2ltYWwsIGxvbmdEZWNpbWFsKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmdyb3VwLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0Q29vcmRzVG9ETVMoZG1zTGF0aXR1ZGU6IEZvcm1Hcm91cCwgZG1zTG9uZ2l0dWRlOiBGb3JtR3JvdXApIHtcbiAgICBpZiAodGhpcy5pc051bShkbXNMYXRpdHVkZS5jb250cm9sc1snZGVnJ10udmFsdWUpICYmXG4gICAgICAgIHRoaXMuaXNOdW0oZG1zTGF0aXR1ZGUuY29udHJvbHNbJ21pbiddLnZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzTnVtKGRtc0xhdGl0dWRlLmNvbnRyb2xzWydzZWMnXS52YWx1ZSkgJiZcbiAgICAgICAgdGhpcy5pc051bShkbXNMb25naXR1ZGUuY29udHJvbHNbJ2RlZyddLnZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzTnVtKGRtc0xvbmdpdHVkZS5jb250cm9sc1snbWluJ10udmFsdWUpICYmXG4gICAgICAgIHRoaXMuaXNOdW0oZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydzZWMnXS52YWx1ZSkpIHtcbiAgICAgIHZhciBkZWNpbWFsTGF0OiBzdHJpbmc7XG4gICAgICB2YXIgZGVjaW1hbExvbmc6IHN0cmluZztcbiAgICAgIHZhciBkbXNMYXQgPSB7XG4gICAgICAgIGRlZzogZG1zTGF0aXR1ZGUuY29udHJvbHNbJ2RlZyddLnZhbHVlLFxuICAgICAgICBtaW46IGRtc0xhdGl0dWRlLmNvbnRyb2xzWydtaW4nXS52YWx1ZSxcbiAgICAgICAgc2VjOiBkbXNMYXRpdHVkZS5jb250cm9sc1snc2VjJ10udmFsdWVcbiAgICAgIH1cbiAgICAgIHZhciBkbXNMb25nID0geyAvLyBmb3JjZSBsYXQvbG9uZyB0byBiZSBpbiBXZXN0ZXJuIEhlbWlzcGhlcmVcbiAgICAgICAgZGVnOiBOdW1iZXIoZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydkZWcnXS52YWx1ZSkgPCAwID8gZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydkZWcnXS52YWx1ZSA6IC0xICogTnVtYmVyKGRtc0xvbmdpdHVkZS5jb250cm9sc1snZGVnJ10udmFsdWUpLFxuICAgICAgICBtaW46IGRtc0xvbmdpdHVkZS5jb250cm9sc1snbWluJ10udmFsdWUsXG4gICAgICAgIHNlYzogZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydzZWMnXS52YWx1ZVxuICAgICAgfVxuXG4gICAgICBkZWNpbWFsTGF0ID0gdGhpcy5kbXNUb0RlY2ltYWwoZG1zTGF0KTtcbiAgICAgIGRlY2ltYWxMb25nID0gdGhpcy5kbXNUb0RlY2ltYWwoZG1zTG9uZyk7XG4gIFxuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1snbGF0RGVjaW1hbCddLnBhdGNoVmFsdWUoZGVjaW1hbExhdCk7XG4gICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydsb25nRGVjaW1hbCddLnBhdGNoVmFsdWUoZGVjaW1hbExvbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkbXNUb0RlY2ltYWwoZG1zOiBhbnkpIHtcbiAgICBpZiAobnVsbCAhPSBkbXMuZGVnICYmIG51bGwgIT0gZG1zLm1pbiAmJiBudWxsICE9IGRtcy5zZWMpIHtcbiAgICAgIHZhciBkZWNpbWFsID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGRlY2ltYWxGcmFjdGlvbiA9IGRtcy5taW4gLyA2MC4wICsgZG1zLnNlYyAvIDM2MDAuMDtcbiAgICAgIGRlY2ltYWwgPSAoZG1zLmRlZyA+IDApID8gZG1zLmRlZyArIGRlY2ltYWxGcmFjdGlvbiA6IGRtcy5kZWcgLSBkZWNpbWFsRnJhY3Rpb247XG4gICAgICByZXR1cm4gZGVjaW1hbC50b0ZpeGVkKDYpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBwdWJsaWMgZGVjaW1hbFRvRE1TKGRlY2ltYWw6YW55KSB7XG4gICAgdmFyIGRtczoge2RlZzogbnVtYmVyIHwgdW5kZWZpbmVkLCBtaW46IG51bWJlciB8IHVuZGVmaW5lZCwgc2VjOiBudW1iZXIgfCB1bmRlZmluZWR9ID0ge1xuICAgICAgZGVnOiB1bmRlZmluZWQsXG4gICAgICBtaW46IHVuZGVmaW5lZCxcbiAgICAgIHNlYzogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgdmFyIGFic29sdXRlID0gTWF0aC5hYnMoZGVjaW1hbCk7XG4gICAgZG1zLmRlZyA9IE1hdGguZmxvb3IoYWJzb2x1dGUpO1xuICAgIHZhciBtaW5zZWMgPSAoYWJzb2x1dGUgLSBkbXMuZGVnKSAqIDYwLjA7XG4gICAgZG1zLm1pbiA9IE1hdGguZmxvb3IobWluc2VjKTtcbiAgICBkbXMuc2VjID0gTnVtYmVyKCgobWluc2VjIC0gZG1zLm1pbikgKiA2MC4wKS50b0ZpeGVkKDYpKTtcbiAgICBpZiAoZG1zLnNlYyA9PT0gNjApIHtcbiAgICAgIGRtcy5taW4gKz0gMTtcbiAgICAgIGRtcy5zZWMgPSAwO1xuICAgIH1cbiAgICBpZiAoZG1zLm1pbiA9PT0gNjApIHtcbiAgICAgIGRtcy5kZWcgKz0gMTtcbiAgICAgIGRtcy5taW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZG1zO1xuICB9O1xuXG4gIHB1YmxpYyBjaGVja0Nvb3Jkc0luT2hpbyhsYXRpdHVkZTogYW55LCBsb25naXR1ZGU6IGFueSkge1xuICAgIHZhciBjb29yZHNJbk9oaW8gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBpZiAoKE51bWJlcihsYXRpdHVkZSkgPCB0aGlzLk9ISU8ubGF0TWluIHx8IE51bWJlcihsYXRpdHVkZSkgPiB0aGlzLk9ISU8ubGF0TWF4IHx8XG4gICAgICAgIE51bWJlcihsb25naXR1ZGUpIDwgdGhpcy5PSElPLmxvbmdNaW4gfHwgTnVtYmVyKGxvbmdpdHVkZSkgPiB0aGlzLk9ISU8ubG9uZ01heCkpIHtcbiAgICAgICAgY29vcmRzSW5PaGlvID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coJ0VSUk9SOiBiYWQgbGF0L2xvbmc6ICcgKyBsYXRpdHVkZSArICcvJyArIGxvbmdpdHVkZSk7XG4gICAgfVxuICAgIHJldHVybiBjb29yZHNJbk9oaW87XG4gIH1cblxuICB1cGRhdGVDb29yZGluYXRlcyhjb29yZHM6IExhdExvbmcpIHtcbiAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydsYXREZWNpbWFsJ10ucGF0Y2hWYWx1ZShjb29yZHMubGF0RGVjaW1hbCk7XG4gICAgdGhpcy5ncm91cC5jb250cm9sc1snbG9uZ0RlY2ltYWwnXS5wYXRjaFZhbHVlKGNvb3Jkcy5sb25nRGVjaW1hbCk7XG4gIH1cblxuICBpc051bSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIG51bGwgIT0gdmFsdWUgJiYgdW5kZWZpbmVkICE9IHZhbHVlICYmIHZhbHVlICE9ICcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldERNU0xhdEZvcm1Hcm91cCgpIDogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cC5jb250cm9sc1snZG1zTGF0J10gYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIGdldERNU0xvbmdGb3JtR3JvdXAoKSA6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xvbmcnXSBhcyBGb3JtR3JvdXA7XG4gIH1cblxufVxuIiwiPGRpdiBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiZ3JvdXAuZW5hYmxlZCA/IG51bGwgOiAnbm9uZSdcIj5cblxuPGZvcm0gW2Zvcm1Hcm91cF09XCJncm91cFwiIG5vdmFsaWRhdGU+XG4gIDxkaXYgY2xhc3M9XCJvZXBhLXdvcmtmbG93LWNvbXBvbmVudC01MFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvZXBhLXNlY3Rpb24tY29tcG9uZW50LWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XG4gICAgICAgICAgVXNlIHRoZSBtYXAgb24gdGhlIHJpZ2h0IHRvIHNldCB0aGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSB2YWx1ZXMgYW5kIHZlcmlmeSB0aGV5IGFyZSBjb3JyZWN0LlxuICAgICAgICAgIFlvdSBtYXkgY2xpY2sgb24gdGhlIG1hcCB0byBjaG9vc2UgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBjb29yZGluYXRlcyBvciBlbnRlciB0aGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZVxuICAgICAgICAgIHZhbHVlcyBpbiB0aGUgaW5wdXQgZmllbGRzIGJlbG93LlxuICAgICAgICAgIEFsdGVybmF0ZWx5LCB5b3UgbWF5IGVudGVyIGFuIGFkZHJlc3MgaW4gdGhlIGlucHV0IGZpZWxkIGF0IHRoZSB0b3Agb2YgdGhlIG1hcCB0byBmaW5kIGNvb3JkaW5hdGVzIGJ5XG4gICAgICAgICAgYWRkcmVzcy5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJ1c2VETVNcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjb252ZXJ0Q29vcmRzVG9ETVMoZ2V0RE1TTGF0Rm9ybUdyb3VwKCksIGdldERNU0xvbmdGb3JtR3JvdXAoKSk7IHVzZURNUyA9ICF1c2VETVNcIj5Db252ZXJ0XG4gICAgICAgICAgQ29vcmRpbmF0ZXMgdG8gRGVjaW1hbCBEZWdyZWVzPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBmb3JtR3JvdXBOYW1lPVwiZG1zTGF0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGxhYmVsPkxhdGl0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZWdcIiBuYW1lPVwibGF0RGVncmVlc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiRGVncmVlc1wiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIi04OVwiIG1heD1cIjg5XCIgbmctYmx1cj1cIm9uTGF0RE1TQ2hhbmdlKClcIiBtYXhsZW5ndGg9XCJcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydkZWcnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydkZWcnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnh4eCBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1pblwiIG5hbWU9XCJsYXRNaW51dGVzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJNaW51dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiIG1heD1cIjU5XCIgbmctYmx1cj1cIm9uTGF0RE1TQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydtaW4nXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydtaW4nXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlByaW1hcnkgU0lDIENvZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJzZWNcIiBuYW1lPVwibGF0U2Vjb25kc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiBtYXg9XCI1OS45OTk5OTlcIiBuZy1ibHVyPVwib25MYXRETVNDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ2V0RE1TTGF0Rm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ3NlYyddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0RE1TTGF0Rm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ3NlYyddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+UHJpbWFyeSBTSUMgQ29kZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgZm9ybUdyb3VwTmFtZT1cImRtc0xvbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICA8bGFiZWw+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZWdcIiBuYW1lPVwibG9uZ0RlZ3JlZXNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIkRlZ3JlZXNcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCItMTc5XCIgbWF4PVwiMTc5XCIgbmctYmx1cj1cIm9uTG9uZ0RNU0NoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBnZXRETVNMb25nRm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ2RlZyddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0RE1TTG9uZ0Zvcm1Hcm91cCgpWydjb250cm9scyddWydkZWcnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlByaW1hcnkgU0lDIENvZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5cIiBuYW1lPVwibG9uZ01pbnV0ZXNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIk1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCIgbWF4PVwiNTlcIiBuZy1ibHVyPVwib25Mb25nRE1TQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xvbmdGb3JtR3JvdXAoKVsnY29udHJvbHMnXVsnbWluJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRETVNMb25nRm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ21pbiddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+UHJpbWFyeSBTSUMgQ29kZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInNlY1wiIG5hbWU9XCJsb25nU2Vjb25kc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiBtYXg9XCI1OS45OTk5OTlcIiBuZy1ibHVyPVwib25Mb25nRE1TQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xvbmdGb3JtR3JvdXAoKVsnY29udHJvbHMnXVsnc2VjJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRETVNMb25nRm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ3NlYyddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+UHJpbWFyeSBTSUMgQ29kZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIXVzZURNU1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInVzZURNUyA9ICF1c2VETVNcIj5FbnRlciBDb29yZGluYXRlcyBpbiBEZWdyZWVzLCBNaW51dGVzLCBTZWNvbmRzPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWw+TGF0aXR1ZGU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibGF0RGVjaW1hbFwiIG5hbWU9XCJMYXRpdHVkZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICBuZy1ibHVyPVwib25MYXRMb25nSW5wdXRDaGFuZ2UoKVwiIG1hc2s9XCJzZXBhcmF0b3IuNlwiIGRlY2ltYWxNYXJrZXI9XCIuXCIgW2FsbG93TmVnYXRpdmVOdW1iZXJzXT1cInRydWVcIiBbZHJvcFNwZWNpYWxDaGFyYWN0ZXJzXT1cImZhbHNlXCIgXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiPlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+TGF0aXR1ZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWw+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImxvbmdEZWNpbWFsXCIgbmFtZT1cIkxvbmdpdHVkZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgbmctYmx1cj1cIm9uTGF0TG9uZ0lucHV0Q2hhbmdlKClcIiBtYXNrPVwic2VwYXJhdG9yLjZcIiBkZWNpbWFsTWFya2VyPVwiLlwiIFthbGxvd05lZ2F0aXZlTnVtYmVyc109XCJ0cnVlXCIgW2Ryb3BTcGVjaWFsQ2hhcmFjdGVyc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cFsnY29udHJvbHMnXVsnbG9uZ0RlY2ltYWwnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXBbJ2NvbnRyb2xzJ11bJ2xvbmdEZWNpbWFsJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5Mb25naXR1ZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLnZhbHVlICE9PSAnJyAmJiBncm91cFsnY29udHJvbHMnXVsnbG9uZ0RlY2ltYWwnXS52YWx1ZSAhPT0gJydcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJ6b29tVG9Db29yZGluYXRlcyhncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLnZhbHVlLGdyb3VwWydjb250cm9scyddWydsb25nRGVjaW1hbCddLnZhbHVlLCBmYWNpbGl0eU1hcClcIj5ab29tIFRvIFRoZXNlIENvb3JkaW5hdGVzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImxhdExvbmdDb2xsZWN0aW9uTWV0aG9kcyAmJiBsYXRMb25nQ29sbGVjdGlvbk1ldGhvZHMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+Q29sbGVjdGlvbiBNZXRob2Q8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImNvbGxlY3Rpb25NZXRob2RUeXBlXCIgbmFtZT1cImNvbGxlY3Rpb25NZXRob2RUeXBlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29sbGVjdGlvbk1ldGhvZFR5cGVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXBbJ2NvbnRyb2xzJ11bJ2NvbGxlY3Rpb25NZXRob2RUeXBlJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tU2VsZWN0IENvbGxlY3Rpb24gTWV0aG9kLS08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBuIG9mIGxhdExvbmdDb2xsZWN0aW9uTWV0aG9kc1wiIFtuZ1ZhbHVlXT1cIm4uY29kZVZhbHVlXCI+e3tuLmRlc2NyaXB0aW9ufX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwWydjb250cm9scyddWydjb2xsZWN0aW9uTWV0aG9kVHlwZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+Q29sbGVjdGlvbiBNZXRob2QgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb29yZHNPdXRzaWRlT2ZPaGlvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cImdyb3VwLmdldCgnYWxsb3dPdXRzaWRlT2ZPaGlvJyk/LnZhbHVlIT09J3llcydcIj5cbiAgICAgICAgICBUaGUgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSB2YWx1ZXMgZW50ZXJlZCBhcmUgbm90IHdpdGhpbiB0aGUgc3RhdGUgb2YgT2hpby4gUGxlYXNlIGVudGVyIGEgbGF0aXR1ZGUgdmFsdWVcbiAgICAgICAgICBiZXR3ZWVuIDM4IGFuZCA0MiBhbmQgYVxuICAgICAgICAgIGxvbmdpdHVkZSB2YWx1ZSBiZXR3ZWVuIC04NSBhbmQgLTgwIG9yIGluZGljYXRlIGJlbG93IHRoYXQgdGhpcyBsb2NhdGlvbiBpcyBvdXRzaWRlIG9mIE9oaW8uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxvZXBhLXllcy1ubyBbZ3JvdXBdPVwiZ3JvdXBcIiBmaWVsZD1cImFsbG93T3V0c2lkZU9mT2hpb1wiIGlkPVwiYWxsb3dPdXRzaWRlT2ZPaGlvXCIgW3Nob3dWYWxpZGF0aW9uXT1cInNob3dWYWxpZGF0aW9uXCI+SXNcbiAgICAgICAgICAgIHRoaXMgbG9jYXRpb24gb3V0c2lkZSBvZiBPaGlvPzwvb2VwYS15ZXMtbm8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJvZXBhLWFjdGlvbi1jb21wb25lbnQtNTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwib2VwYS1zZWN0aW9uLWNvbXBvbmVudC1ib2R5XCI+XG4gICAgICA8b2VwYS1lc3JpLW1hcFxuICAgICAgICNmYWNpbGl0eU1hcCBbY2VudGVyXT1cIm1hcENlbnRlclwiXG4gICAgICAgW2Jhc2VtYXBdPVwiYmFzZW1hcFR5cGVcIlxuICAgICAgIFt6b29tXT1cIm1hcFpvb21MZXZlbFwiXG4gICAgICAgKG1hcExvYWRlZCk9XCJtYXBMb2FkZWRFdmVudCgkZXZlbnQpXCJcbiAgICAgICBbY3VycmVudExhdExvbmddPVwiZ3JvdXAudmFsdWVcIlxuICAgICAgIChvbk5ld0Nvb3JkaW5hdGVzKT1cInVwZGF0ZUNvb3JkaW5hdGVzKCRldmVudClcIlxuICAgICAgIFtzaG93U2VhcmNoXT1cImdyb3VwLmVuYWJsZWRcIj5cbiAgICAgIDwvb2VwYS1lc3JpLW1hcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvZm9ybT5cblxuPC9kaXY+Il19
@@ -1,34 +0,0 @@
1
- import { OnInit, AfterViewInit } from '@angular/core';
2
- import { PortalDocument } from '../portal-document';
3
- import { PortalDocumentSection } from '../portal-document-section';
4
- import { DocumentService } from '../document.service';
5
- import { BsModalService } from 'ngx-bootstrap/modal';
6
- import { ToastrService } from 'ngx-toastr';
7
- import { TabsetComponent } from 'ngx-bootstrap/tabs';
8
- import * as i0 from "@angular/core";
9
- export declare class DocumentEditorComponent implements OnInit, AfterViewInit {
10
- private modalService;
11
- private toastr;
12
- private documentService;
13
- document: PortalDocument | undefined;
14
- allowRemoveSection: boolean;
15
- showSectionOptions: boolean;
16
- documentSectionTabs?: TabsetComponent;
17
- busy: boolean;
18
- private static selectedTabIndex;
19
- constructor(modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
20
- ngOnInit(): void;
21
- ngAfterViewInit(): void;
22
- onSectionTabSelect(index: number): void;
23
- moveSectionUp(section: PortalDocumentSection): void;
24
- insertAboveSection(section: PortalDocumentSection): void;
25
- moveSectionDown(section: PortalDocumentSection): void;
26
- insertBelowSection(section: PortalDocumentSection): void;
27
- private newSection;
28
- private insertSection;
29
- private resequence;
30
- deleteSection(section: PortalDocumentSection): void;
31
- editSection(section: PortalDocumentSection): void;
32
- static ɵfac: i0.ɵɵFactoryDeclaration<DocumentEditorComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<DocumentEditorComponent, "oepa-document-editor", never, { "document": { "alias": "document"; "required": false; }; "allowRemoveSection": { "alias": "allowRemoveSection"; "required": false; }; "showSectionOptions": { "alias": "showSectionOptions"; "required": false; }; }, {}, never, never, false, never>;
34
- }
@@ -1,5 +0,0 @@
1
- export declare enum DocumentEventEntityType {
2
- Section = 0,
3
- Group = 1,
4
- Part = 2
5
- }
@@ -1,5 +0,0 @@
1
- export declare enum DocumentEventType {
2
- Create = 0,
3
- Update = 1,
4
- Delete = 2
5
- }
@@ -1,9 +0,0 @@
1
- import { DocumentEventEntityType } from "./document-event-entity-type";
2
- import { DocumentEventType } from "./document-event-type";
3
- export interface DocumentEvent {
4
- eventType?: DocumentEventType;
5
- entityType?: DocumentEventEntityType;
6
- entityID?: string;
7
- confirmationMessage?: string;
8
- entity?: any;
9
- }
@@ -1,38 +0,0 @@
1
- import { OnInit, EventEmitter } from '@angular/core';
2
- import { PortalDocumentGroup } from '../portal-document-group';
3
- import { PortalDocumentPart } from '../portal-document-part';
4
- import { DocumentService } from '../document.service';
5
- import { BsModalService } from 'ngx-bootstrap/modal';
6
- import { ToastrService } from 'ngx-toastr';
7
- import * as i0 from "@angular/core";
8
- export declare class DocumentGroupComponent implements OnInit {
9
- private modalService;
10
- private toastr;
11
- private documentService;
12
- group: PortalDocumentGroup;
13
- onMoveUp: EventEmitter<PortalDocumentGroup>;
14
- onInsertAbove: EventEmitter<PortalDocumentGroup>;
15
- onMoveDown: EventEmitter<PortalDocumentGroup>;
16
- onInsertBelow: EventEmitter<PortalDocumentGroup>;
17
- onDelete: EventEmitter<PortalDocumentGroup>;
18
- busy: boolean;
19
- constructor(modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
20
- ngOnInit(): void;
21
- moveUp(): void;
22
- insertAbove(): void;
23
- moveDown(): void;
24
- insertBelow(): void;
25
- delete(): void;
26
- movePartUp(part: PortalDocumentPart): void;
27
- insertAbovePart(part: PortalDocumentPart): void;
28
- movePartDown(part: PortalDocumentPart): void;
29
- insertBelowPart(part: PortalDocumentPart): void;
30
- private newPart;
31
- private insertPart;
32
- deletePart(part: PortalDocumentPart): void;
33
- private doDeletePart;
34
- private resequence;
35
- editGroup(group: PortalDocumentGroup): void;
36
- static ɵfac: i0.ɵɵFactoryDeclaration<DocumentGroupComponent, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<DocumentGroupComponent, "oepa-document-group", never, { "group": { "alias": "group"; "required": false; }; }, { "onMoveUp": "onMoveUp"; "onInsertAbove": "onInsertAbove"; "onMoveDown": "onMoveDown"; "onInsertBelow": "onInsertBelow"; "onDelete": "onDelete"; }, never, never, false, never>;
38
- }
@@ -1,10 +0,0 @@
1
- import { OnInit } from '@angular/core';
2
- import { PortalDocumentPart } from '../portal-document-part';
3
- import * as i0 from "@angular/core";
4
- export declare class DocumentPartComponent implements OnInit {
5
- part: PortalDocumentPart;
6
- constructor();
7
- ngOnInit(): void;
8
- static ɵfac: i0.ɵɵFactoryDeclaration<DocumentPartComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<DocumentPartComponent, "oepa-document-part", never, { "part": { "alias": "part"; "required": false; }; }, {}, never, never, false, never>;
10
- }
@@ -1,46 +0,0 @@
1
- import { OnInit, EventEmitter } from '@angular/core';
2
- import { PortalDocumentPart } from '../portal-document-part';
3
- import { FormGroup, FormBuilder } from '@angular/forms';
4
- import { DocumentService } from '../document.service';
5
- import { ToastrService } from 'ngx-toastr';
6
- import { BsModalService } from 'ngx-bootstrap/modal';
7
- import { SummernoteOptions } from 'ngx-summernote/lib/summernote-options';
8
- import * as i0 from "@angular/core";
9
- export declare class DocumentPartEditorComponent implements OnInit {
10
- private fb;
11
- private modalService;
12
- private toastr;
13
- documentService: DocumentService;
14
- part: PortalDocumentPart;
15
- editing: boolean;
16
- partChange: EventEmitter<PortalDocumentPart>;
17
- onMoveUp: EventEmitter<PortalDocumentPart>;
18
- onInsertAbove: EventEmitter<PortalDocumentPart>;
19
- onMoveDown: EventEmitter<PortalDocumentPart>;
20
- onInsertBelow: EventEmitter<PortalDocumentPart>;
21
- onDelete: EventEmitter<PortalDocumentPart>;
22
- form: FormGroup;
23
- config: SummernoteOptions;
24
- errorMessage: string;
25
- busy: boolean;
26
- constructor(fb: FormBuilder, modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
27
- ngOnInit(): void;
28
- private createForm;
29
- private initializePart;
30
- savePart(): void;
31
- editPart(part: PortalDocumentPart): void;
32
- updateDisplay(display: boolean): void;
33
- moveUp(): void;
34
- insertAbove(): void;
35
- moveDown(): void;
36
- insertBelow(): void;
37
- delete(): void;
38
- doCustomAction(): void;
39
- getConfig(): SummernoteOptions;
40
- private invokePlaceHolderModal;
41
- private invokeMonitoringPlaceHolderModal;
42
- private invokeSchedulePlaceHolderModal;
43
- private invokeErasePlaceHolder;
44
- static ɵfac: i0.ɵɵFactoryDeclaration<DocumentPartEditorComponent, never>;
45
- static ɵcmp: i0.ɵɵComponentDeclaration<DocumentPartEditorComponent, "oepa-document-part-editor", never, { "part": { "alias": "part"; "required": false; }; "editing": { "alias": "editing"; "required": false; }; }, { "partChange": "partChange"; "onMoveUp": "onMoveUp"; "onInsertAbove": "onInsertAbove"; "onMoveDown": "onMoveDown"; "onInsertBelow": "onInsertBelow"; "onDelete": "onDelete"; }, never, never, false, never>;
46
- }
@@ -1,19 +0,0 @@
1
- import { OnInit, EventEmitter } from '@angular/core';
2
- import { BsModalRef } from 'ngx-bootstrap/modal';
3
- import { PortalDocumentPlaceholder } from '../portal-document-placeholder';
4
- import { FormBuilder, FormGroup } from '@angular/forms';
5
- import * as i0 from "@angular/core";
6
- export declare class DocumentPlaceholderModalComponent implements OnInit {
7
- private fb;
8
- private bsModalRef;
9
- placeholders: PortalDocumentPlaceholder[];
10
- placeholderSelected: EventEmitter<PortalDocumentPlaceholder>;
11
- modalForm: FormGroup;
12
- hasPlaceholderChildren: boolean;
13
- constructor(fb: FormBuilder, bsModalRef: BsModalRef);
14
- ngOnInit(): void;
15
- submit(): void;
16
- cancel(): void;
17
- static ɵfac: i0.ɵɵFactoryDeclaration<DocumentPlaceholderModalComponent, never>;
18
- static ɵcmp: i0.ɵɵComponentDeclaration<DocumentPlaceholderModalComponent, "oepa-document-placeholder-modal", never, { "placeholders": { "alias": "placeholders"; "required": false; }; }, { "placeholderSelected": "placeholderSelected"; }, never, never, false, never>;
19
- }
@@ -1,37 +0,0 @@
1
- import { OnInit, EventEmitter } from '@angular/core';
2
- import { PortalDocumentSection } from '../portal-document-section';
3
- import { PortalDocumentGroup } from '../portal-document-group';
4
- import { BsModalService } from 'ngx-bootstrap/modal';
5
- import { ToastrService } from 'ngx-toastr';
6
- import { DocumentService } from '../document.service';
7
- import * as i0 from "@angular/core";
8
- export declare class DocumentSectionComponent implements OnInit {
9
- private modalService;
10
- private toastr;
11
- private documentService;
12
- section: PortalDocumentSection;
13
- onMoveUp: EventEmitter<PortalDocumentSection>;
14
- onInsertAbove: EventEmitter<PortalDocumentSection>;
15
- onMoveDown: EventEmitter<PortalDocumentSection>;
16
- onInsertBelow: EventEmitter<PortalDocumentSection>;
17
- onDelete: EventEmitter<PortalDocumentSection>;
18
- busy: boolean;
19
- constructor(modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
20
- ngOnInit(): void;
21
- moveUp(): void;
22
- insertAbove(): void;
23
- moveDown(): void;
24
- insertBelow(): void;
25
- delete(): void;
26
- moveGroupUp(group: PortalDocumentGroup): void;
27
- insertAboveGroup(group: PortalDocumentGroup): void;
28
- moveGroupDown(group: PortalDocumentGroup): void;
29
- insertBelowGroup(group: PortalDocumentGroup): void;
30
- private newGroup;
31
- private insertGroup;
32
- private resequence;
33
- deleteGroup(group: PortalDocumentGroup): void;
34
- editSection(section: PortalDocumentSection): void;
35
- static ɵfac: i0.ɵɵFactoryDeclaration<DocumentSectionComponent, never>;
36
- static ɵcmp: i0.ɵɵComponentDeclaration<DocumentSectionComponent, "oepa-document-section", never, { "section": { "alias": "section"; "required": false; }; }, { "onMoveUp": "onMoveUp"; "onInsertAbove": "onInsertAbove"; "onMoveDown": "onMoveDown"; "onInsertBelow": "onInsertBelow"; "onDelete": "onDelete"; }, never, never, false, never>;
37
- }
@@ -1,90 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { Observable } from 'rxjs';
3
- import { PortalDocumentPlaceholder } from './portal-document-placeholder';
4
- import { PortalDocumentSection } from './portal-document-section';
5
- import { PortalDocumentGroup } from './portal-document-group';
6
- import { PortalDocumentPart } from './portal-document-part';
7
- import { PortalDocumentText } from './portal-document-text';
8
- import { PortalDocument } from './portal-document';
9
- import { PortalDocumentType } from './portal-document-type';
10
- import { DocumentEvent } from './document-event';
11
- import { PortalEmailFilter } from './portal-email-filter';
12
- import { PortalEmail } from './portal-email';
13
- import { OepaAction } from '../action-btn/oepa-action';
14
- import * as i0 from "@angular/core";
15
- export declare class DocumentService {
16
- private http;
17
- private placeholders;
18
- private monitoringPlaceholders;
19
- private monitoringLabel;
20
- private scheduleLabel;
21
- private schedulePlaceholders;
22
- private toolbar;
23
- private height;
24
- private tabSize;
25
- private fontNames;
26
- private documentIDSubject;
27
- private selectedSectionNameSubject;
28
- private documentPartActionSubject;
29
- private documentPartUpdateSubject;
30
- private documentEventSubject;
31
- private overridenEvents;
32
- private customPartAction;
33
- constructor(http: HttpClient);
34
- setPlaceholders(placeholders: PortalDocumentPlaceholder[]): void;
35
- getPlaceholders(): PortalDocumentPlaceholder[];
36
- setMonitoringPlaceholders(placeholders: PortalDocumentPlaceholder[], monitoringLabel?: string): void;
37
- getMonitoringPlaceholders(): PortalDocumentPlaceholder[];
38
- getMonitoringLabel(): string;
39
- setSchedulePlaceholders(placeholders: PortalDocumentPlaceholder[], scheduleLabel?: string): void;
40
- getSchedulePlaceholders(): PortalDocumentPlaceholder[];
41
- getScheduleLabel(): string;
42
- setToolbar(toolbar: any): void;
43
- getToolbar(): any;
44
- setFontNames(fontNames: string[]): void;
45
- getFontNames(): string[];
46
- setHeight(height: number): void;
47
- getHeight(): number;
48
- setTabSize(tabSize: number): void;
49
- getTabSize(): number;
50
- updateDcoumentID(id: string): void;
51
- updateSelectedSectionName(name: string | undefined): void;
52
- overrideEvent(event: DocumentEvent): void;
53
- removeOverridenEvent(event: DocumentEvent): void;
54
- isOverriddenEvent(event: DocumentEvent): DocumentEvent | undefined;
55
- getDocumentIDSubject(): Observable<string>;
56
- getSelectedSectionName(): Observable<string>;
57
- getDocumentEventSubject(): Observable<DocumentEvent>;
58
- retrieveDocumentTemplate(templateID: string): Observable<PortalDocument>;
59
- cloneDocumentTemplate(template: PortalDocumentType): Observable<string>;
60
- retrieveDocument(id: string): Observable<PortalDocument>;
61
- retrieveLegacyDocumentTemplate(id: string): Observable<PortalDocument>;
62
- retrieveLegacyDocumentForPermit(permitID: string): Observable<PortalDocument>;
63
- updateDocument(document: PortalDocument): Observable<any>;
64
- createDocumentSection(section: PortalDocumentSection): Observable<string>;
65
- updateDocumentSection(section: PortalDocumentSection): Observable<any>;
66
- deleteDocumentSection(section: PortalDocumentSection): Observable<any>;
67
- doDeleteDocumentSection(section: PortalDocumentSection): Observable<any>;
68
- createDocumentGroup(group: PortalDocumentGroup): Observable<string>;
69
- retrieveDocumentGroup(documentID: string, groupID: string): Observable<PortalDocumentGroup>;
70
- updateDocumentGroup(group: PortalDocumentGroup): Observable<any>;
71
- deleteDocumentGroup(group: PortalDocumentGroup): Observable<any>;
72
- doDeleteDocumentGroup(group: PortalDocumentGroup): Observable<any>;
73
- createDocumentPart(part: PortalDocumentPart): Observable<string>;
74
- updateDocumentPart(part: PortalDocumentPart): Observable<any>;
75
- deleteDocumentPart(part: PortalDocumentPart): Observable<any>;
76
- updateDocumentText(documentID: string, partID: string, text: PortalDocumentText): Observable<any>;
77
- retrieveAllDocumentPlaceholders(serviceName: string): Observable<PortalDocumentPlaceholder[]>;
78
- setCustomPartAction(action: OepaAction): void;
79
- getCustomPartAction(): OepaAction | undefined;
80
- getDocumentPartActionSubject(): Observable<PortalDocumentPart>;
81
- fireCustomPartAction(part: PortalDocumentPart): void;
82
- getDocumentPartUpdateSubject(): Observable<PortalDocumentPart>;
83
- fireDocumentPartUpdate(part: PortalDocumentPart): void;
84
- searchEmails(filter: PortalEmailFilter): Observable<PortalEmail[]>;
85
- retrieveDocumentByDocumentID(documentID: string): Observable<PortalDocument>;
86
- updateApprovalStatusForEmails(ids: string[], status: string): Observable<any>;
87
- sendApprovedEmails(emails: PortalEmail[]): Observable<any>;
88
- static ɵfac: i0.ɵɵFactoryDeclaration<DocumentService, never>;
89
- static ɵprov: i0.ɵɵInjectableDeclaration<DocumentService>;
90
- }
@@ -1,20 +0,0 @@
1
- import { OnInit, EventEmitter } from '@angular/core';
2
- import { PortalDocumentGroup } from '../portal-document-group';
3
- import { FormBuilder, FormGroup } from '@angular/forms';
4
- import { BsModalRef } from 'ngx-bootstrap/modal';
5
- import * as i0 from "@angular/core";
6
- export declare class GroupModalComponent implements OnInit {
7
- private fb;
8
- bsModalRef: BsModalRef;
9
- group: PortalDocumentGroup;
10
- label: string;
11
- onGroupSave: EventEmitter<PortalDocumentGroup>;
12
- modalForm: FormGroup;
13
- constructor(fb: FormBuilder, bsModalRef: BsModalRef);
14
- ngOnInit(): void;
15
- private createForm;
16
- save(): void;
17
- cancel(): void;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<GroupModalComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<GroupModalComponent, "oepa-group-modal", never, { "group": { "alias": "group"; "required": false; }; "label": { "alias": "label"; "required": false; }; }, { "onGroupSave": "onGroupSave"; }, never, never, false, never>;
20
- }