@porscheinformatik/material-addons 10.4.1 → 14.0.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 (182) hide show
  1. package/fesm2015/porscheinformatik-material-addons.mjs +2984 -0
  2. package/fesm2015/porscheinformatik-material-addons.mjs.map +1 -0
  3. package/lib/button/button.d.ts +7 -0
  4. package/lib/button/button.d.ts.map +1 -0
  5. package/lib/button/button.module.d.ts +15 -0
  6. package/lib/button/button.module.d.ts.map +1 -0
  7. package/lib/button/danger-button/danger-button.component.d.ts +4 -0
  8. package/lib/button/danger-button/danger-button.component.d.ts.map +1 -0
  9. package/lib/button/flat-button/link-button.component.d.ts +4 -0
  10. package/lib/button/flat-button/link-button.component.d.ts.map +1 -0
  11. package/lib/button/icon-button/icon-button.component.d.ts +4 -0
  12. package/lib/button/icon-button/icon-button.component.d.ts.map +1 -0
  13. package/lib/button/mad-basic-button.d.ts +5 -1
  14. package/lib/button/mad-basic-button.d.ts.map +1 -0
  15. package/lib/button/outline-button/outline-button.component.d.ts +4 -0
  16. package/lib/button/outline-button/outline-button.component.d.ts.map +1 -0
  17. package/lib/button/primary-button/primary-button.component.d.ts +4 -0
  18. package/lib/button/primary-button/primary-button.component.d.ts.map +1 -0
  19. package/lib/card/card.component.d.ts +4 -0
  20. package/lib/card/card.component.d.ts.map +1 -0
  21. package/lib/card/card.d.ts +2 -0
  22. package/lib/card/card.d.ts.map +1 -0
  23. package/lib/card/card.module.d.ts +12 -0
  24. package/lib/card/card.module.d.ts.map +1 -0
  25. package/lib/content-panel/content-header/content-header.component.d.ts +4 -0
  26. package/lib/content-panel/content-header/content-header.component.d.ts.map +1 -0
  27. package/lib/content-panel/content-panel-container/content-panel-container.component.d.ts +4 -0
  28. package/lib/content-panel/content-panel-container/content-panel-container.component.d.ts.map +1 -0
  29. package/lib/content-panel/content-panel-container-content/content-panel-container-content.component.d.ts +4 -0
  30. package/lib/content-panel/content-panel-container-content/content-panel-container-content.component.d.ts.map +1 -0
  31. package/lib/content-panel/content-panel-container-footer/content-panel-container-footer.component.d.ts +4 -0
  32. package/lib/content-panel/content-panel-container-footer/content-panel-container-footer.component.d.ts.map +1 -0
  33. package/lib/content-panel/content-panel.module.d.ts +11 -0
  34. package/lib/content-panel/content-panel.module.d.ts.map +1 -0
  35. package/lib/content-panel/main-container/main-container.component.d.ts +4 -0
  36. package/lib/content-panel/main-container/main-container.component.d.ts.map +1 -0
  37. package/lib/data-table/data-table-action-type.d.ts +1 -0
  38. package/lib/data-table/data-table-action-type.d.ts.map +1 -0
  39. package/lib/data-table/data-table-action.d.ts +1 -0
  40. package/lib/data-table/data-table-action.d.ts.map +1 -0
  41. package/lib/data-table/data-table-column-definition.d.ts +1 -0
  42. package/lib/data-table/data-table-column-definition.d.ts.map +1 -0
  43. package/lib/data-table/data-table-column.d.ts +1 -0
  44. package/lib/data-table/data-table-column.d.ts.map +1 -0
  45. package/lib/data-table/data-table-columns-modal/data-table-columns-modal.component.d.ts +4 -0
  46. package/lib/data-table/data-table-columns-modal/data-table-columns-modal.component.d.ts.map +1 -0
  47. package/lib/data-table/data-table.component.d.ts +4 -0
  48. package/lib/data-table/data-table.component.d.ts.map +1 -0
  49. package/lib/data-table/data-table.d.ts +3 -0
  50. package/lib/data-table/data-table.d.ts.map +1 -0
  51. package/lib/data-table/data-table.module.d.ts +23 -0
  52. package/lib/data-table/data-table.module.d.ts.map +1 -0
  53. package/lib/flowbar/flowbar.component.d.ts +4 -0
  54. package/lib/flowbar/flowbar.component.d.ts.map +1 -0
  55. package/lib/flowbar/flowbar.module.d.ts +8 -0
  56. package/lib/flowbar/flowbar.module.d.ts.map +1 -0
  57. package/lib/material-action-button/material-action-button.component.d.ts +4 -0
  58. package/lib/material-action-button/material-action-button.component.d.ts.map +1 -0
  59. package/lib/material-action-button/material-action-button.module.d.ts +11 -0
  60. package/lib/material-action-button/material-action-button.module.d.ts.map +1 -0
  61. package/lib/material-addons.module.d.ts +13 -0
  62. package/lib/material-addons.module.d.ts.map +1 -0
  63. package/lib/numeric-field/number-format.service.d.ts +4 -0
  64. package/lib/numeric-field/number-format.service.d.ts.map +1 -0
  65. package/lib/numeric-field/numeric-field.d.ts +2 -0
  66. package/lib/numeric-field/numeric-field.d.ts.map +1 -0
  67. package/lib/numeric-field/numeric-field.directive.d.ts +4 -0
  68. package/lib/numeric-field/numeric-field.directive.d.ts.map +1 -0
  69. package/lib/numeric-field/numeric-field.module.d.ts +6 -0
  70. package/lib/numeric-field/numeric-field.module.d.ts.map +1 -0
  71. package/lib/quick-list/base-quick-list.component.d.ts +4 -0
  72. package/lib/quick-list/base-quick-list.component.d.ts.map +1 -0
  73. package/lib/quick-list/quick-list-compact/quick-list-compact.component.d.ts +4 -0
  74. package/lib/quick-list/quick-list-compact/quick-list-compact.component.d.ts.map +1 -0
  75. package/lib/quick-list/quick-list.component.d.ts +4 -0
  76. package/lib/quick-list/quick-list.component.d.ts.map +1 -0
  77. package/lib/quick-list/quick-list.d.ts +4 -0
  78. package/lib/quick-list/quick-list.d.ts.map +1 -0
  79. package/lib/quick-list/quick-list.module.d.ts +12 -0
  80. package/lib/quick-list/quick-list.module.d.ts.map +1 -0
  81. package/lib/readonly/readonly-form-field/readonly-form-field.component.d.ts +4 -0
  82. package/lib/readonly/readonly-form-field/readonly-form-field.component.d.ts.map +1 -0
  83. package/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.d.ts +4 -0
  84. package/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.d.ts.map +1 -0
  85. package/lib/readonly/readonly-form-field.module.d.ts +13 -0
  86. package/lib/readonly/readonly-form-field.module.d.ts.map +1 -0
  87. package/lib/stepper/mad-stepper-animation.d.ts +1 -0
  88. package/lib/stepper/mad-stepper-animation.d.ts.map +1 -0
  89. package/lib/stepper/step-header/step-header.component.d.ts +4 -0
  90. package/lib/stepper/step-header/step-header.component.d.ts.map +1 -0
  91. package/lib/stepper/stepper.component.d.ts +7 -1
  92. package/lib/stepper/stepper.component.d.ts.map +1 -0
  93. package/lib/stepper/stepper.module.d.ts +12 -0
  94. package/lib/stepper/stepper.module.d.ts.map +1 -0
  95. package/lib/table/column-header.d.ts +1 -0
  96. package/lib/table/column-header.d.ts.map +1 -0
  97. package/lib/table/table-action.d.ts +1 -0
  98. package/lib/table/table-action.d.ts.map +1 -0
  99. package/lib/table/table.component.d.ts +4 -0
  100. package/lib/table/table.component.d.ts.map +1 -0
  101. package/lib/table/table.d.ts +2 -0
  102. package/lib/table/table.d.ts.map +1 -0
  103. package/lib/table/table.module.d.ts +16 -0
  104. package/lib/table/table.module.d.ts.map +1 -0
  105. package/lib/throttle-click/throttle-click.directive.d.ts +4 -0
  106. package/lib/throttle-click/throttle-click.directive.d.ts.map +1 -0
  107. package/lib/throttle-click/throttle-click.module.d.ts +7 -0
  108. package/lib/throttle-click/throttle-click.module.d.ts.map +1 -0
  109. package/lib/toolbar/toolbar-action.interface.d.ts +1 -0
  110. package/lib/toolbar/toolbar-action.interface.d.ts.map +1 -0
  111. package/lib/toolbar/toolbar.component.d.ts +4 -0
  112. package/lib/toolbar/toolbar.component.d.ts.map +1 -0
  113. package/lib/toolbar/toolbar.module.d.ts +16 -0
  114. package/lib/toolbar/toolbar.module.d.ts.map +1 -0
  115. package/lib/toolbar/toolbar.service.d.ts +4 -0
  116. package/lib/toolbar/toolbar.service.d.ts.map +1 -0
  117. package/package.json +29 -16
  118. package/public-api.d.ts +5 -0
  119. package/themes/common/styles.scss +23 -22
  120. package/bundles/porscheinformatik-material-addons.umd.js +0 -3301
  121. package/bundles/porscheinformatik-material-addons.umd.js.map +0 -1
  122. package/bundles/porscheinformatik-material-addons.umd.min.js +0 -17
  123. package/bundles/porscheinformatik-material-addons.umd.min.js.map +0 -1
  124. package/esm2015/lib/button/button.module.js +0 -21
  125. package/esm2015/lib/button/danger-button/danger-button.component.js +0 -25
  126. package/esm2015/lib/button/flat-button/link-button.component.js +0 -25
  127. package/esm2015/lib/button/icon-button/icon-button.component.js +0 -25
  128. package/esm2015/lib/button/mad-basic-button.js +0 -28
  129. package/esm2015/lib/button/outline-button/outline-button.component.js +0 -25
  130. package/esm2015/lib/button/primary-button/primary-button.component.js +0 -25
  131. package/esm2015/lib/card/card.component.js +0 -86
  132. package/esm2015/lib/card/card.module.js +0 -18
  133. package/esm2015/lib/content-panel/content-header/content-header.component.js +0 -11
  134. package/esm2015/lib/content-panel/content-panel-container/content-panel-container.component.js +0 -11
  135. package/esm2015/lib/content-panel/content-panel-container-content/content-panel-container-content.component.js +0 -11
  136. package/esm2015/lib/content-panel/content-panel-container-footer/content-panel-container-footer.component.js +0 -11
  137. package/esm2015/lib/content-panel/content-panel.module.js +0 -29
  138. package/esm2015/lib/content-panel/main-container/main-container.component.js +0 -11
  139. package/esm2015/lib/data-table/data-table-action-type.js +0 -6
  140. package/esm2015/lib/data-table/data-table-action.js +0 -1
  141. package/esm2015/lib/data-table/data-table-column-definition.js +0 -1
  142. package/esm2015/lib/data-table/data-table-column.js +0 -1
  143. package/esm2015/lib/data-table/data-table-columns-modal/data-table-columns-modal.component.js +0 -93
  144. package/esm2015/lib/data-table/data-table.component.js +0 -459
  145. package/esm2015/lib/data-table/data-table.js +0 -1
  146. package/esm2015/lib/data-table/data-table.module.js +0 -46
  147. package/esm2015/lib/flowbar/flowbar.component.js +0 -182
  148. package/esm2015/lib/flowbar/flowbar.module.js +0 -14
  149. package/esm2015/lib/material-action-button/material-action-button.component.js +0 -25
  150. package/esm2015/lib/material-action-button/material-action-button.module.js +0 -17
  151. package/esm2015/lib/material-addons.module.js +0 -26
  152. package/esm2015/lib/numeric-field/number-format.service.js +0 -137
  153. package/esm2015/lib/numeric-field/numeric-field.directive.js +0 -275
  154. package/esm2015/lib/numeric-field/numeric-field.module.js +0 -19
  155. package/esm2015/lib/quick-list/base-quick-list.component.js +0 -91
  156. package/esm2015/lib/quick-list/quick-list-compact/quick-list-compact.component.js +0 -18
  157. package/esm2015/lib/quick-list/quick-list.component.js +0 -19
  158. package/esm2015/lib/quick-list/quick-list.module.js +0 -18
  159. package/esm2015/lib/readonly/readonly-form-field/readonly-form-field.component.js +0 -131
  160. package/esm2015/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.js +0 -164
  161. package/esm2015/lib/readonly/readonly-form-field.module.js +0 -19
  162. package/esm2015/lib/stepper/mad-stepper-animation.js +0 -13
  163. package/esm2015/lib/stepper/step-header/step-header.component.js +0 -75
  164. package/esm2015/lib/stepper/stepper.component.js +0 -169
  165. package/esm2015/lib/stepper/stepper.module.js +0 -18
  166. package/esm2015/lib/table/column-header.js +0 -1
  167. package/esm2015/lib/table/table-action.js +0 -1
  168. package/esm2015/lib/table/table.component.js +0 -106
  169. package/esm2015/lib/table/table.js +0 -1
  170. package/esm2015/lib/table/table.module.js +0 -33
  171. package/esm2015/lib/throttle-click/throttle-click.directive.js +0 -32
  172. package/esm2015/lib/throttle-click/throttle-click.module.js +0 -13
  173. package/esm2015/lib/toolbar/toolbar-action.interface.js +0 -1
  174. package/esm2015/lib/toolbar/toolbar.component.js +0 -71
  175. package/esm2015/lib/toolbar/toolbar.module.js +0 -33
  176. package/esm2015/lib/toolbar/toolbar.service.js +0 -127
  177. package/esm2015/porscheinformatik-material-addons.js +0 -19
  178. package/esm2015/public-api.js +0 -37
  179. package/fesm2015/porscheinformatik-material-addons.js +0 -2658
  180. package/fesm2015/porscheinformatik-material-addons.js.map +0 -1
  181. package/porscheinformatik-material-addons.d.ts +0 -19
  182. package/porscheinformatik-material-addons.metadata.json +0 -1
@@ -1,182 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { MatStepper } from '@angular/material/stepper';
3
- export class FlowbarComponent {
4
- constructor() {
5
- this._steps = [];
6
- this._activeStepChange = new EventEmitter(true);
7
- /**
8
- * Event emitted when a step header is clicked.
9
- * When defined header navigation has to be implemented programmatically.
10
- * e.g. {@see changeActiveStepOnHeader}
11
- */
12
- this._headerClick = new EventEmitter(true);
13
- }
14
- get currentStepLabel() {
15
- return this._activeStep.label;
16
- }
17
- get currentSubStepLabel() {
18
- var _a;
19
- return (_a = this._activeStep.activeSubStep) === null || _a === void 0 ? void 0 : _a.label;
20
- }
21
- ngOnInit() {
22
- // If no active step is set as input or the active step is not enabled, select the first enabled step
23
- if (!this._activeStep || !this._activeStep.enabled) {
24
- this._activeStep = this._steps.find(step => step.enabled);
25
- if (this._activeStep) {
26
- // If sub steps exist then set the first non disabled sub step per default
27
- if (this.activeTabHasSubSteps()) {
28
- this._activeStep.activeSubStep = this._activeStep.subSteps.find(step => step.enabled);
29
- }
30
- this._activeStepChange.emit(this._activeStep);
31
- }
32
- }
33
- }
34
- ngAfterViewInit() {
35
- this.stepper._getIndicatorType = () => 'number';
36
- }
37
- getIndexForActiveStep() {
38
- const selectedIndex = this._steps.indexOf(this._activeStep);
39
- return selectedIndex === -1 ? 0 : selectedIndex;
40
- }
41
- changeActiveStep(step) {
42
- const previousIndex = this._steps.indexOf(this._activeStep);
43
- this._activeStep = step;
44
- if (this.activeTabHasSubSteps()) {
45
- if (previousIndex < this._steps.indexOf(this._activeStep)) {
46
- this._activeStep.activeSubStep = this._activeStep.subSteps[0];
47
- }
48
- else {
49
- this._activeStep.activeSubStep = this._activeStep.subSteps[this._activeStep.subSteps.length - 1];
50
- }
51
- }
52
- this._activeStepChange.emit(this._activeStep);
53
- }
54
- changeActiveStepOnHeader(step) {
55
- const stepIndex = this._steps.indexOf(step);
56
- this._activeStep = step;
57
- this.stepper.selected = this.stepper._steps.find((_, i) => i === stepIndex);
58
- }
59
- changeActiveSubStep(subStep) {
60
- this._activeStep.activeSubStep = subStep;
61
- }
62
- previous() {
63
- if (this.isPreviousAvailable()) {
64
- // If active step has no sub steps or first sub step is selected -> go to previous main step
65
- if (!this.activeTabHasSubSteps() || this.isFirstSubStep()) {
66
- const previousEnabledStep = this.findPreviousEnabledStep();
67
- this.changeActiveStep(previousEnabledStep);
68
- this.stepper.selectedIndex = this._steps.indexOf(previousEnabledStep);
69
- }
70
- else {
71
- const subStepIndex = this._activeStep.subSteps.indexOf(this._activeStep.activeSubStep);
72
- this._activeStep.activeSubStep = this._activeStep.subSteps[subStepIndex - 1];
73
- }
74
- }
75
- }
76
- next() {
77
- if (this.isNextAvailable()) {
78
- // If active step has no sub steps or last sub step is selected -> go to next main step
79
- if (!this.activeTabHasSubSteps() || this.isLastSubStep()) {
80
- const nextEnabledStep = this.findNextEnabledStep();
81
- this.changeActiveStep(nextEnabledStep);
82
- this.stepper.selectedIndex = this._steps.indexOf(nextEnabledStep);
83
- }
84
- else {
85
- const subStepIndex = this._activeStep.subSteps.indexOf(this._activeStep.activeSubStep);
86
- this._activeStep.activeSubStep = this._activeStep.subSteps[subStepIndex + 1];
87
- }
88
- }
89
- }
90
- isPreviousAvailable() {
91
- if (this._activeStep) {
92
- if (!this.activeTabHasSubSteps() || this.isFirstSubStep()) {
93
- const index = this.getCurrentIndex();
94
- return index > 0 && this.isAnyPreviousStepEnabled(index);
95
- }
96
- else {
97
- return true;
98
- }
99
- }
100
- return false;
101
- }
102
- isNextAvailable() {
103
- if (this._activeStep) {
104
- if (!this.activeTabHasSubSteps() || this.isLastSubStep()) {
105
- const index = this.getCurrentIndex();
106
- return index < this._steps.length - 1 && this.isAnyFollowingStepEnabled(index);
107
- }
108
- else {
109
- return true;
110
- }
111
- }
112
- return false;
113
- }
114
- isLastStep() {
115
- if (this.getCurrentIndex() === this._steps.length - 1) {
116
- if (this.activeTabHasSubSteps()) {
117
- return this.isLastSubStep();
118
- }
119
- else {
120
- return true;
121
- }
122
- }
123
- return false;
124
- }
125
- getCurrentIndex() {
126
- return this._steps.findIndex(value => value === this._activeStep);
127
- }
128
- getCurrentSubStepIndex() {
129
- return this._activeStep.subSteps.findIndex(value => value === this._activeStep.activeSubStep);
130
- }
131
- triggerClick() {
132
- const selectedStep = this._steps[this.stepper.selectedIndex];
133
- this.changeActiveStep(selectedStep);
134
- }
135
- headerClick(event, step) {
136
- event.stopPropagation(); //stop processing current header click event
137
- this._headerClick.emit(step);
138
- }
139
- activeTabHasSubSteps() {
140
- return this._activeStep.subSteps && this._activeStep.subSteps.length > 0;
141
- }
142
- isFirstSubStep() {
143
- return this._activeStep.activeSubStep === this._activeStep.subSteps[0];
144
- }
145
- isLastSubStep() {
146
- return this._activeStep.activeSubStep === this._activeStep.subSteps[this._activeStep.subSteps.length - 1];
147
- }
148
- isAnyPreviousStepEnabled(index) {
149
- // eslint-disable-next-line id-blacklist
150
- return this._steps.slice(0, index).find(step => step.enabled) !== undefined;
151
- }
152
- isAnyFollowingStepEnabled(index) {
153
- // eslint-disable-next-line id-blacklist
154
- return this._steps.slice(index + 1, this._steps.length).find(step => step.enabled) !== undefined;
155
- }
156
- findPreviousEnabledStep() {
157
- const index = this.getCurrentIndex();
158
- return this._steps
159
- .slice(0, index)
160
- .reverse()
161
- .find(step => step.enabled);
162
- }
163
- findNextEnabledStep() {
164
- const index = this.getCurrentIndex();
165
- return this._steps.slice(index + 1, this._steps.length).find(step => step.enabled);
166
- }
167
- }
168
- FlowbarComponent.decorators = [
169
- { type: Component, args: [{
170
- selector: 'mad-flowbar',
171
- template: "<div class=\"stepper-container\">\n <mat-horizontal-stepper #stepper [selectedIndex]=\"this.getIndexForActiveStep()\" (click)=\"triggerClick()\">\n <mat-step *ngFor=\"let step of _steps\" [aria-labelledby]=\"!step.enabled ? 'disabled' : null\">\n <ng-template matStepLabel>\n <div class=\"step-header-overlay\" *ngIf=\"this._headerClick.observers.length > 0\" (click)=\"headerClick($event, step)\"></div>\n <span>{{step.label}}</span>\n </ng-template>\n </mat-step>\n </mat-horizontal-stepper>\n</div>\n",
172
- styles: [".stepper-container{display:flex;padding:0 1rem}::ng-deep .mat-stepper-horizontal .mat-horizontal-stepper-header{height:auto;padding:0}::ng-deep .mat-step-header[aria-labelledby=disabled]{cursor:not-allowed;pointer-events:none!important}::ng-deep .mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 10px}::ng-deep .mat-stepper-horizontal .mat-stepper-horizontal-line{border-top-width:4px;margin:0 5px}.step-header-overlay{height:100%;position:absolute;right:0;top:0;width:100%}"]
173
- },] }
174
- ];
175
- FlowbarComponent.propDecorators = {
176
- _steps: [{ type: Input, args: ['steps',] }],
177
- _activeStep: [{ type: Input, args: ['activeStep',] }],
178
- _activeStepChange: [{ type: Output, args: ['activeStepChange',] }],
179
- _headerClick: [{ type: Output, args: ['headerClick',] }],
180
- stepper: [{ type: ViewChild, args: ['stepper',] }]
181
- };
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvd2Jhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbWF0ZXJpYWwtYWRkb25zL21hdGVyaWFsLWFkZG9ucy9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjLyIsInNvdXJjZXMiOlsibGliL2Zsb3diYXIvZmxvd2Jhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQWN2RCxNQUFNLE9BQU8sZ0JBQWdCO0lBTDdCO1FBTWtCLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFFVCxzQkFBaUIsR0FBd0IsSUFBSSxZQUFZLENBQVEsSUFBSSxDQUFDLENBQUM7UUFDbkc7Ozs7V0FJRztRQUNvQixpQkFBWSxHQUF3QixJQUFJLFlBQVksQ0FBUSxJQUFJLENBQUMsQ0FBQztJQTRLM0YsQ0FBQztJQXpLQyxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLG1CQUFtQjs7UUFDckIsYUFBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsMENBQUUsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRO1FBQ04scUdBQXFHO1FBQ3JHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLDBFQUEwRTtn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QU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDO0lBQ25HLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDZixLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQzthQUNmLE9BQU8sRUFBRTthQUNULElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckYsQ0FBQzs7O1lBekxGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsNGtCQUF1Qzs7YUFFeEM7OztxQkFFRSxLQUFLLFNBQUMsT0FBTzswQkFDYixLQUFLLFNBQUMsWUFBWTtnQ0FDbEIsTUFBTSxTQUFDLGtCQUFrQjsyQkFNekIsTUFBTSxTQUFDLGFBQWE7c0JBQ3BCLFNBQVMsU0FBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0ZXAge1xuICBsYWJlbDogc3RyaW5nO1xuICBlbmFibGVkPzogYm9vbGVhbjtcbiAgc3ViU3RlcHM/OiBJU3RlcFtdO1xuICBhY3RpdmVTdWJTdGVwPzogSVN0ZXA7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1mbG93YmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zsb3diYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mbG93YmFyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZsb3diYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoJ3N0ZXBzJykgX3N0ZXBzOiBJU3RlcFtdID0gW107XG4gIEBJbnB1dCgnYWN0aXZlU3RlcCcpIF9hY3RpdmVTdGVwOiBJU3RlcDtcbiAgQE91dHB1dCgnYWN0aXZlU3RlcENoYW5nZScpIF9hY3RpdmVTdGVwQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVN0ZXA+ID0gbmV3IEV2ZW50RW1pdHRlcjxJU3RlcD4odHJ1ZSk7XG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBzdGVwIGhlYWRlciBpcyBjbGlja2VkLlxuICAgKiBXaGVuIGRlZmluZWQgaGVhZGVyIG5hdmlnYXRpb24gaGFzIHRvIGJlIGltcGxlbWVudGVkIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqIGUuZy4ge0BzZWUgY2hhbmdlQWN0aXZlU3RlcE9uSGVhZGVyfVxuICAgKi9cbiAgQE91dHB1dCgnaGVhZGVyQ2xpY2snKSBfaGVhZGVyQ2xpY2s6IEV2ZW50RW1pdHRlcjxJU3RlcD4gPSBuZXcgRXZlbnRFbWl0dGVyPElTdGVwPih0cnVlKTtcbiAgQFZpZXdDaGlsZCgnc3RlcHBlcicpIHByaXZhdGUgc3RlcHBlcjogTWF0U3RlcHBlcjtcblxuICBnZXQgY3VycmVudFN0ZXBMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTdGVwLmxhYmVsO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTdWJTdGVwTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlU3RlcC5hY3RpdmVTdWJTdGVwPy5sYWJlbDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIElmIG5vIGFjdGl2ZSBzdGVwIGlzIHNldCBhcyBpbnB1dCBvciB0aGUgYWN0aXZlIHN0ZXAgaXMgbm90IGVuYWJsZWQsIHNlbGVjdCB0aGUgZmlyc3QgZW5hYmxlZCBzdGVwXG4gICAgaWYgKCF0aGlzLl9hY3RpdmVTdGVwIHx8ICF0aGlzLl9hY3RpdmVTdGVwLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVN0ZXAgPSB0aGlzLl9zdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5lbmFibGVkKTtcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVTdGVwKSB7XG4gICAgICAgIC8vIElmIHN1YiBzdGVwcyBleGlzdCB0aGVuIHNldCB0aGUgZmlyc3Qgbm9uIGRpc2FibGVkIHN1YiBzdGVwIHBlciBkZWZhdWx0XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYkhhc1N1YlN0ZXBzKCkpIHtcbiAgICAgICAgICB0aGlzLl9hY3RpdmVTdGVwLmFjdGl2ZVN1YlN0ZXAgPSB0aGlzLl9hY3RpdmVTdGVwLnN1YlN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLmVuYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FjdGl2ZVN0ZXBDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVTdGVwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcGVyLl9nZXRJbmRpY2F0b3JUeXBlID0gKCk6IGFueSA9PiAnbnVtYmVyJztcbiAgfVxuXG4gIGdldEluZGV4Rm9yQWN0aXZlU3RlcCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLl9zdGVwcy5pbmRleE9mKHRoaXMuX2FjdGl2ZVN0ZXApO1xuICAgIHJldHVybiBzZWxlY3RlZEluZGV4ID09PSAtMSA/IDAgOiBzZWxlY3RlZEluZGV4O1xuICB9XG5cbiAgY2hhbmdlQWN0aXZlU3RlcChzdGVwOiBJU3RlcCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSB0aGlzLl9zdGVwcy5pbmRleE9mKHRoaXMuX2FjdGl2ZVN0ZXApO1xuICAgIHRoaXMuX2FjdGl2ZVN0ZXAgPSBzdGVwO1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYkhhc1N1YlN0ZXBzKCkpIHtcbiAgICAgIGlmIChwcmV2aW91c0luZGV4IDwgdGhpcy5fc3RlcHMuaW5kZXhPZih0aGlzLl9hY3RpdmVTdGVwKSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVTdGVwLmFjdGl2ZVN1YlN0ZXAgPSB0aGlzLl9hY3RpdmVTdGVwLnN1YlN0ZXBzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU3RlcC5hY3RpdmVTdWJTdGVwID0gdGhpcy5fYWN0aXZlU3RlcC5zdWJTdGVwc1t0aGlzLl9hY3RpdmVTdGVwLnN1YlN0ZXBzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVTdGVwQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlU3RlcCk7XG4gIH1cblxuICBjaGFuZ2VBY3RpdmVTdGVwT25IZWFkZXIoc3RlcDogSVN0ZXApOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwSW5kZXggPSB0aGlzLl9zdGVwcy5pbmRleE9mKHN0ZXApO1xuICAgIHRoaXMuX2FjdGl2ZVN0ZXAgPSBzdGVwO1xuICAgIHRoaXMuc3RlcHBlci5zZWxlY3RlZCA9IHRoaXMuc3RlcHBlci5fc3RlcHMuZmluZCgoXywgaSkgPT4gaSA9PT0gc3RlcEluZGV4KTtcbiAgfVxuXG4gIGNoYW5nZUFjdGl2ZVN1YlN0ZXAoc3ViU3RlcDogSVN0ZXApOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVTdGVwLmFjdGl2ZVN1YlN0ZXAgPSBzdWJTdGVwO1xuICB9XG5cbiAgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQcmV2aW91c0F2YWlsYWJsZSgpKSB7XG4gICAgICAvLyBJZiBhY3RpdmUgc3RlcCBoYXMgbm8gc3ViIHN0ZXBzIG9yIGZpcnN0IHN1YiBzdGVwIGlzIHNlbGVjdGVkIC0+IGdvIHRvIHByZXZpb3VzIG1haW4gc3RlcFxuICAgICAgaWYgKCF0aGlzLmFjdGl2ZVRhYkhhc1N1YlN0ZXBzKCkgfHwgdGhpcy5pc0ZpcnN0U3ViU3RlcCgpKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRW5hYmxlZFN0ZXAgPSB0aGlzLmZpbmRQcmV2aW91c0VuYWJsZWRTdGVwKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlU3RlcChwcmV2aW91c0VuYWJsZWRTdGVwKTtcbiAgICAgICAgdGhpcy5zdGVwcGVyLnNlbGVjdGVkSW5kZXggPSB0aGlzLl9zdGVwcy5pbmRleE9mKHByZXZpb3VzRW5hYmxlZFN0ZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3ViU3RlcEluZGV4ID0gdGhpcy5fYWN0aXZlU3RlcC5zdWJTdGVwcy5pbmRleE9mKHRoaXMuX2FjdGl2ZVN0ZXAuYWN0aXZlU3ViU3RlcCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVN0ZXAuYWN0aXZlU3ViU3RlcCA9IHRoaXMuX2FjdGl2ZVN0ZXAuc3ViU3RlcHNbc3ViU3RlcEluZGV4IC0gMV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmV4dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc05leHRBdmFpbGFibGUoKSkge1xuICAgICAgLy8gSWYgYWN0aXZlIHN0ZXAgaGFzIG5vIHN1YiBzdGVwcyBvciBsYXN0IHN1YiBzdGVwIGlzIHNlbGVjdGVkIC0+IGdvIHRvIG5leHQgbWFpbiBzdGVwXG4gICAgICBpZiAoIXRoaXMuYWN0aXZlVGFiSGFzU3ViU3RlcHMoKSB8fCB0aGlzLmlzTGFzdFN1YlN0ZXAoKSkge1xuICAgICAgICBjb25zdCBuZXh0RW5hYmxlZFN0ZXAgPSB0aGlzLmZpbmROZXh0RW5hYmxlZFN0ZXAoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VBY3RpdmVTdGVwKG5leHRFbmFibGVkU3RlcCk7XG4gICAgICAgIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID0gdGhpcy5fc3RlcHMuaW5kZXhPZihuZXh0RW5hYmxlZFN0ZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3ViU3RlcEluZGV4ID0gdGhpcy5fYWN0aXZlU3RlcC5zdWJTdGVwcy5pbmRleE9mKHRoaXMuX2FjdGl2ZVN0ZXAuYWN0aXZlU3ViU3RlcCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVN0ZXAuYWN0aXZlU3ViU3RlcCA9IHRoaXMuX2FjdGl2ZVN0ZXAuc3ViU3RlcHNbc3ViU3RlcEluZGV4ICsgMV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNQcmV2aW91c0F2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlU3RlcCkge1xuICAgICAgaWYgKCF0aGlzLmFjdGl2ZVRhYkhhc1N1YlN0ZXBzKCkgfHwgdGhpcy5pc0ZpcnN0U3ViU3RlcCgpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDdXJyZW50SW5kZXgoKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gMCAmJiB0aGlzLmlzQW55UHJldmlvdXNTdGVwRW5hYmxlZChpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNOZXh0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmVTdGVwKSB7XG4gICAgICBpZiAoIXRoaXMuYWN0aXZlVGFiSGFzU3ViU3RlcHMoKSB8fCB0aGlzLmlzTGFzdFN1YlN0ZXAoKSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG4gICAgICAgIHJldHVybiBpbmRleCA8IHRoaXMuX3N0ZXBzLmxlbmd0aCAtIDEgJiYgdGhpcy5pc0FueUZvbGxvd2luZ1N0ZXBFbmFibGVkKGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0xhc3RTdGVwKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmdldEN1cnJlbnRJbmRleCgpID09PSB0aGlzLl9zdGVwcy5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVUYWJIYXNTdWJTdGVwcygpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGFzdFN1YlN0ZXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRDdXJyZW50SW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RlcHMuZmluZEluZGV4KHZhbHVlID0+IHZhbHVlID09PSB0aGlzLl9hY3RpdmVTdGVwKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTdWJTdGVwSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlU3RlcC5zdWJTdGVwcy5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUgPT09IHRoaXMuX2FjdGl2ZVN0ZXAuYWN0aXZlU3ViU3RlcCk7XG4gIH1cblxuICB0cmlnZ2VyQ2xpY2soKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGVwID0gdGhpcy5fc3RlcHNbdGhpcy5zdGVwcGVyLnNlbGVjdGVkSW5kZXhdO1xuICAgIHRoaXMuY2hhbmdlQWN0aXZlU3RlcChzZWxlY3RlZFN0ZXApO1xuICB9XG5cbiAgaGVhZGVyQ2xpY2soZXZlbnQ6IGFueSwgc3RlcDogSVN0ZXApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy9zdG9wIHByb2Nlc3NpbmcgY3VycmVudCBoZWFkZXIgY2xpY2sgZXZlbnRcbiAgICB0aGlzLl9oZWFkZXJDbGljay5lbWl0KHN0ZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmVUYWJIYXNTdWJTdGVwcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlU3RlcC5zdWJTdGVwcyAmJiB0aGlzLl9hY3RpdmVTdGVwLnN1YlN0ZXBzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGlzRmlyc3RTdWJTdGVwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTdGVwLmFjdGl2ZVN1YlN0ZXAgPT09IHRoaXMuX2FjdGl2ZVN0ZXAuc3ViU3RlcHNbMF07XG4gIH1cblxuICBwcml2YXRlIGlzTGFzdFN1YlN0ZXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVN0ZXAuYWN0aXZlU3ViU3RlcCA9PT0gdGhpcy5fYWN0aXZlU3RlcC5zdWJTdGVwc1t0aGlzLl9hY3RpdmVTdGVwLnN1YlN0ZXBzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FueVByZXZpb3VzU3RlcEVuYWJsZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpZC1ibGFja2xpc3RcbiAgICByZXR1cm4gdGhpcy5fc3RlcHMuc2xpY2UoMCwgaW5kZXgpLmZpbmQoc3RlcCA9PiBzdGVwLmVuYWJsZWQpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQW55Rm9sbG93aW5nU3RlcEVuYWJsZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpZC1ibGFja2xpc3RcbiAgICByZXR1cm4gdGhpcy5fc3RlcHMuc2xpY2UoaW5kZXggKyAxLCB0aGlzLl9zdGVwcy5sZW5ndGgpLmZpbmQoc3RlcCA9PiBzdGVwLmVuYWJsZWQpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQcmV2aW91c0VuYWJsZWRTdGVwKCk6IElTdGVwIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXBzXG4gICAgICAuc2xpY2UoMCwgaW5kZXgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmluZChzdGVwID0+IHN0ZXAuZW5hYmxlZCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROZXh0RW5hYmxlZFN0ZXAoKTogSVN0ZXAge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDdXJyZW50SW5kZXgoKTtcbiAgICByZXR1cm4gdGhpcy5fc3RlcHMuc2xpY2UoaW5kZXggKyAxLCB0aGlzLl9zdGVwcy5sZW5ndGgpLmZpbmQoc3RlcCA9PiBzdGVwLmVuYWJsZWQpO1xuICB9XG59XG4iXX0=
@@ -1,14 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { MatStepperModule } from '@angular/material/stepper';
4
- import { FlowbarComponent } from './flowbar.component';
5
- export class FlowbarModule {
6
- }
7
- FlowbarModule.decorators = [
8
- { type: NgModule, args: [{
9
- declarations: [FlowbarComponent],
10
- imports: [CommonModule, MatStepperModule],
11
- exports: [FlowbarComponent],
12
- },] }
13
- ];
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvd2Jhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbWF0ZXJpYWwtYWRkb25zL21hdGVyaWFsLWFkZG9ucy9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjLyIsInNvdXJjZXMiOlsibGliL2Zsb3diYXIvZmxvd2Jhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFPdkQsTUFBTSxPQUFPLGFBQWE7OztZQUx6QixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztnQkFDekMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7YUFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFN0ZXBwZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcbmltcG9ydCB7IEZsb3diYXJDb21wb25lbnQgfSBmcm9tICcuL2Zsb3diYXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRmxvd2JhckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdFN0ZXBwZXJNb2R1bGVdLFxuICBleHBvcnRzOiBbRmxvd2JhckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEZsb3diYXJNb2R1bGUge31cbiJdfQ==
@@ -1,25 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- export class MaterialActionButtonComponent {
3
- constructor() {
4
- this.icon = 'add';
5
- // Sets the lower padding higher providing some bottom space for a fixed paginator
6
- this.liftHigher = true;
7
- this.liftHigher2 = false;
8
- }
9
- }
10
- MaterialActionButtonComponent.decorators = [
11
- { type: Component, args: [{
12
- selector: 'mad-material-action-button',
13
- template: "<div class=\"material-action-button {{ liftHigher ? 'lift-higher' : '' }} {{ liftHigher2 ? 'lift-higher-2' : '' }}\">\n <a [routerLink]=\"routerLink\">\n <button [id]=\"id\" mat-fab [matTooltipPosition]=\"'left'\" [matTooltip]=\"actionName\" color=\"primary\" *ngIf=\"!liftHigher2\">\n <mat-icon>{{ icon }}</mat-icon>\n </button>\n <button [id]=\"id\" mat-mini-fab [matTooltipPosition]=\"'left'\" [matTooltip]=\"actionName\" color=\"accent\" *ngIf=\"liftHigher2\">\n <mat-icon>{{ icon }}</mat-icon>\n </button>\n </a>\n</div>\n",
14
- styles: [".material-action-button{align-items:center;bottom:20px;display:flex;flex-direction:column-reverse;position:fixed;right:20px;z-index:100}.lift-higher{bottom:61px}.lift-higher-2{bottom:121px;right:28px}"]
15
- },] }
16
- ];
17
- MaterialActionButtonComponent.propDecorators = {
18
- actionName: [{ type: Input }],
19
- id: [{ type: Input }],
20
- icon: [{ type: Input }],
21
- routerLink: [{ type: Input }],
22
- liftHigher: [{ type: Input }],
23
- liftHigher2: [{ type: Input }]
24
- };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbWF0ZXJpYWwtYWRkb25zL21hdGVyaWFsLWFkZG9ucy9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjLyIsInNvdXJjZXMiOlsibGliL21hdGVyaWFsLWFjdGlvbi1idXR0b24vbWF0ZXJpYWwtYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPakQsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQWFFLFNBQUksR0FBRyxLQUFLLENBQUM7UUFLYixrRkFBa0Y7UUFFbEYsZUFBVSxHQUFHLElBQUksQ0FBQztRQUdsQixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDOzs7WUF4QkEsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLG1qQkFBc0Q7O2FBRXZEOzs7eUJBRUUsS0FBSztpQkFHTCxLQUFLO21CQUdMLEtBQUs7eUJBR0wsS0FBSzt5QkFJTCxLQUFLOzBCQUdMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1tYXRlcmlhbC1hY3Rpb24tYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLWFjdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC1hY3Rpb24tYnV0dG9uLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxBY3Rpb25CdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKVxuICBhY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgaWQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBpY29uID0gJ2FkZCc7XG5cbiAgQElucHV0KClcbiAgcm91dGVyTGluazogc3RyaW5nO1xuXG4gIC8vIFNldHMgdGhlIGxvd2VyIHBhZGRpbmcgaGlnaGVyIHByb3ZpZGluZyBzb21lIGJvdHRvbSBzcGFjZSBmb3IgYSBmaXhlZCBwYWdpbmF0b3JcbiAgQElucHV0KClcbiAgbGlmdEhpZ2hlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgbGlmdEhpZ2hlcjIgPSBmYWxzZTtcbn1cbiJdfQ==
@@ -1,17 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { MaterialActionButtonComponent } from './material-action-button.component';
3
- import { CommonModule } from '@angular/common';
4
- import { RouterModule } from '@angular/router';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { MatIconModule } from '@angular/material/icon';
7
- import { MatTooltipModule } from '@angular/material/tooltip';
8
- export class MaterialActionButtonModule {
9
- }
10
- MaterialActionButtonModule.decorators = [
11
- { type: NgModule, args: [{
12
- declarations: [MaterialActionButtonComponent],
13
- imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule, MatTooltipModule],
14
- exports: [MaterialActionButtonComponent],
15
- },] }
16
- ];
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtYWN0aW9uLWJ1dHRvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbWF0ZXJpYWwtYWRkb25zL21hdGVyaWFsLWFkZG9ucy9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjLyIsInNvdXJjZXMiOlsibGliL21hdGVyaWFsLWFjdGlvbi1idXR0b24vbWF0ZXJpYWwtYWN0aW9uLWJ1dHRvbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPN0QsTUFBTSxPQUFPLDBCQUEwQjs7O1lBTHRDLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztnQkFDN0MsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDO2dCQUN2RixPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQzthQUN6QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRlcmlhbEFjdGlvbkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtNYXRlcmlhbEFjdGlvbkJ1dHRvbkNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlXSxcbiAgZXhwb3J0czogW01hdGVyaWFsQWN0aW9uQnV0dG9uQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxBY3Rpb25CdXR0b25Nb2R1bGUge31cbiJdfQ==
@@ -1,26 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { ToolbarModule } from './toolbar/toolbar.module';
3
- import { ReadOnlyFormFieldModule } from './readonly/readonly-form-field.module';
4
- import { MaterialActionButtonModule } from './material-action-button/material-action-button.module';
5
- import { NumericFieldModule } from './numeric-field/numeric-field.module';
6
- import { CardModule } from './card/card.module';
7
- import { QuickListModule } from './quick-list/quick-list.module';
8
- import { ButtonModule } from './button/button.module';
9
- import { ThrottleClickModule } from './throttle-click/throttle-click.module';
10
- export class MaterialAddonsModule {
11
- }
12
- MaterialAddonsModule.decorators = [
13
- { type: NgModule, args: [{
14
- exports: [
15
- ReadOnlyFormFieldModule,
16
- ButtonModule,
17
- ToolbarModule,
18
- MaterialActionButtonModule,
19
- NumericFieldModule,
20
- CardModule,
21
- QuickListModule,
22
- ThrottleClickModule,
23
- ],
24
- },] }
25
- ];
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtYWRkb25zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9tYXRlcmlhbC1hZGRvbnMvbWF0ZXJpYWwtYWRkb25zL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvIiwic291cmNlcyI6WyJsaWIvbWF0ZXJpYWwtYWRkb25zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQWM3RSxNQUFNLE9BQU8sb0JBQW9COzs7WUFaaEMsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCx1QkFBdUI7b0JBQ3ZCLFlBQVk7b0JBQ1osYUFBYTtvQkFDYiwwQkFBMEI7b0JBQzFCLGtCQUFrQjtvQkFDbEIsVUFBVTtvQkFDVixlQUFlO29CQUNmLG1CQUFtQjtpQkFDcEI7YUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb29sYmFyTW9kdWxlIH0gZnJvbSAnLi90b29sYmFyL3Rvb2xiYXIubW9kdWxlJztcbmltcG9ydCB7IFJlYWRPbmx5Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnLi9yZWFkb25seS9yZWFkb25seS1mb3JtLWZpZWxkLm1vZHVsZSc7XG5pbXBvcnQgeyBNYXRlcmlhbEFjdGlvbkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4vbWF0ZXJpYWwtYWN0aW9uLWJ1dHRvbi9tYXRlcmlhbC1hY3Rpb24tYnV0dG9uLm1vZHVsZSc7XG5pbXBvcnQgeyBOdW1lcmljRmllbGRNb2R1bGUgfSBmcm9tICcuL251bWVyaWMtZmllbGQvbnVtZXJpYy1maWVsZC5tb2R1bGUnO1xuaW1wb3J0IHsgQ2FyZE1vZHVsZSB9IGZyb20gJy4vY2FyZC9jYXJkLm1vZHVsZSc7XG5pbXBvcnQgeyBRdWlja0xpc3RNb2R1bGUgfSBmcm9tICcuL3F1aWNrLWxpc3QvcXVpY2stbGlzdC5tb2R1bGUnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi9idXR0b24vYnV0dG9uLm1vZHVsZSc7XG5pbXBvcnQgeyBUaHJvdHRsZUNsaWNrTW9kdWxlIH0gZnJvbSAnLi90aHJvdHRsZS1jbGljay90aHJvdHRsZS1jbGljay5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbXG4gICAgUmVhZE9ubHlGb3JtRmllbGRNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRvb2xiYXJNb2R1bGUsXG4gICAgTWF0ZXJpYWxBY3Rpb25CdXR0b25Nb2R1bGUsXG4gICAgTnVtZXJpY0ZpZWxkTW9kdWxlLFxuICAgIENhcmRNb2R1bGUsXG4gICAgUXVpY2tMaXN0TW9kdWxlLFxuICAgIFRocm90dGxlQ2xpY2tNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsQWRkb25zTW9kdWxlIHt9XG4iXX0=
@@ -1,137 +0,0 @@
1
- import { Inject, LOCALE_ID, Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class NumberFormatService {
4
- constructor(locale) {
5
- this.allowedKeys = [];
6
- // try to get the current formatting
7
- const localeDecimalSeparator = (1.1).toLocaleString(locale).charAt(1);
8
- this.decimalSeparator = localeDecimalSeparator === ',' ? ',' : '.';
9
- this.groupingSeparator = localeDecimalSeparator === ',' ? '.' : ',';
10
- this.allowedKeys = [...NumberFormatService.NUMBERS, NumberFormatService.NEGATIVE, this.decimalSeparator];
11
- }
12
- static valueIsSet(value) {
13
- return typeof value !== 'undefined' && value !== null && (typeof value !== 'string' || value.length !== 0);
14
- }
15
- format(value, options) {
16
- return NumberFormatService.valueIsSet(value)
17
- ? this.formatNumber(value.toString().replace(new RegExp('[.]', 'g'), this.decimalSeparator), options)
18
- : '';
19
- }
20
- formatNumber(value, options) {
21
- const autofillDecimals = this.valueOrDefault(options === null || options === void 0 ? void 0 : options.autofillDecimals, NumberFormatService.DEFAULT_AUTOFILL_DECIMALS);
22
- const decimalPlaces = this.valueOrDefault(options === null || options === void 0 ? void 0 : options.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);
23
- const finalFormatting = this.valueOrDefault(options === null || options === void 0 ? void 0 : options.finalFormatting, NumberFormatService.DEFAULT_FINAL_FORMATTING);
24
- let result = this.strip(value, { decimalPlaces, removeLeadingZeros: finalFormatting });
25
- /* add grouping separator */
26
- const decimalIndex = result.indexOf(this.decimalSeparator);
27
- const isNegative = result.startsWith(NumberFormatService.NEGATIVE);
28
- let i = decimalIndex > -1 ? decimalIndex : result.length;
29
- while (i > (isNegative ? 4 : 3)) {
30
- i -= 3;
31
- result = result.substring(0, i) + this.groupingSeparator + result.substring(i, result.length);
32
- }
33
- if (finalFormatting) {
34
- if (decimalPlaces > 0 && !!result) {
35
- /* autofill decimal places */
36
- let actualDecimalIndex = result.indexOf(this.decimalSeparator);
37
- if (autofillDecimals) {
38
- if (actualDecimalIndex === -1) {
39
- actualDecimalIndex = result.length;
40
- result += this.decimalSeparator;
41
- }
42
- result = this.addMissingLeadingZero(result, actualDecimalIndex);
43
- actualDecimalIndex = result.indexOf(this.decimalSeparator);
44
- const actualDecimalPlaces = result.length - actualDecimalIndex - 1;
45
- for (let j = 0; j < decimalPlaces - actualDecimalPlaces; j++) {
46
- result += '0';
47
- }
48
- }
49
- else {
50
- result = this.addMissingLeadingZero(result, actualDecimalIndex);
51
- }
52
- }
53
- }
54
- return result;
55
- }
56
- strip(value, options) {
57
- const decimalPlaces = this.valueOrDefault(options === null || options === void 0 ? void 0 : options.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);
58
- const removeLeadingZeros = this.valueOrDefault(options === null || options === void 0 ? void 0 : options.removeLeadingZeros, NumberFormatService.DEFAULT_REMOVE_LEADING_ZEROS);
59
- let result = '';
60
- let indexDecimalSep = -1;
61
- let j = -1;
62
- let ignoredChars = 0;
63
- for (const char of value) {
64
- j++;
65
- if (this.allowedKeys.includes(char)) {
66
- if (char === this.decimalSeparator) {
67
- if (decimalPlaces === 0) {
68
- /* dismiss content after a decimal separator, when no places allowed */
69
- break;
70
- }
71
- else if (indexDecimalSep > -1) {
72
- /* ignore subsequent decimal separators */
73
- continue;
74
- }
75
- indexDecimalSep = j;
76
- }
77
- if (char === '0' && removeLeadingZeros) {
78
- /* remove leading zero only if it's not the only zero in the 'value' string */
79
- if ((result.length === 0 && j + 1 !== value.length) || result === NumberFormatService.NEGATIVE) {
80
- ignoredChars++;
81
- continue;
82
- }
83
- }
84
- if (char === NumberFormatService.NEGATIVE && j > 0) {
85
- /* dismiss content after a negative sign not on first position */
86
- break;
87
- }
88
- if (indexDecimalSep > -1 && result.length + ignoredChars > indexDecimalSep + decimalPlaces) {
89
- /* dismiss content after maximum decimal places reached */
90
- break;
91
- }
92
- result += char;
93
- }
94
- else if (char === this.groupingSeparator) {
95
- if (indexDecimalSep === -1) {
96
- ignoredChars++;
97
- }
98
- }
99
- else {
100
- /* dismiss content after a invalid character */
101
- break;
102
- }
103
- }
104
- return result;
105
- }
106
- addMissingLeadingZero(result, actualDecimalIndex) {
107
- const isNegative = result.startsWith(NumberFormatService.NEGATIVE);
108
- /* autoadd a zero before decimal separator, when it's missing */
109
- if (actualDecimalIndex === 0) {
110
- result = '0' + result;
111
- }
112
- /* autoadd a zero before decimal separator, when it's missing, for negative values */
113
- if (actualDecimalIndex === 1 && isNegative) {
114
- result = result[0] + '0' + result.substring(1, result.length);
115
- }
116
- return result;
117
- }
118
- valueOrDefault(value, defaultValue) {
119
- return NumberFormatService.valueIsSet(value) ? value : defaultValue;
120
- }
121
- }
122
- NumberFormatService.NEGATIVE = '-';
123
- NumberFormatService.NUMBERS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
124
- NumberFormatService.DEFAULT_FINAL_FORMATTING = true;
125
- NumberFormatService.DEFAULT_DECIMAL_PLACES = 2;
126
- NumberFormatService.DEFAULT_AUTOFILL_DECIMALS = false;
127
- NumberFormatService.DEFAULT_REMOVE_LEADING_ZEROS = false;
128
- NumberFormatService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatService_Factory() { return new NumberFormatService(i0.ɵɵinject(i0.LOCALE_ID)); }, token: NumberFormatService, providedIn: "any" });
129
- NumberFormatService.decorators = [
130
- { type: Injectable, args: [{
131
- providedIn: 'any',
132
- },] }
133
- ];
134
- NumberFormatService.ctorParameters = () => [
135
- { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }
136
- ];
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWZvcm1hdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL21hdGVyaWFsLWFkZG9ucy9tYXRlcmlhbC1hZGRvbnMvcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9udW1lcmljLWZpZWxkL251bWJlci1mb3JtYXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBbUI5RCxNQUFNLE9BQU8sbUJBQW1CO0lBYTlCLFlBQStCLE1BQWM7UUFGN0MsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFHekIsb0NBQW9DO1FBQ3BDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxzQkFBc0IsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ25FLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRXBFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBVTtRQUMxQixPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFD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QU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvRDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBVSxFQUFFLFlBQWlCO1FBQ2xELE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN0RSxDQUFDOztBQXhJZSw0QkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLDJCQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3RCw0Q0FBd0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsMENBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLDZDQUF5QixHQUFHLEtBQUssQ0FBQztBQUNsQyxnREFBNEIsR0FBRyxLQUFLLENBQUM7OztZQVR0RCxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLEtBQUs7YUFDbEI7Ozt5Q0FjYyxNQUFNLFNBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgTE9DQUxFX0lELCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBGb3JtYXRPcHRpb25zIHtcbiAgZGVjaW1hbFBsYWNlcz86IG51bWJlcjtcblxuICBmaW5hbEZvcm1hdHRpbmc/OiBib29sZWFuO1xuXG4gIGF1dG9maWxsRGVjaW1hbHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU3RyaXBPcHRpb25zIHtcbiAgZGVjaW1hbFBsYWNlcz86IG51bWJlcjtcblxuICByZW1vdmVMZWFkaW5nWmVyb3M/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdhbnknLFxufSlcbmV4cG9ydCBjbGFzcyBOdW1iZXJGb3JtYXRTZXJ2aWNlIHtcbiAgc3RhdGljIHJlYWRvbmx5IE5FR0FUSVZFID0gJy0nO1xuICBzdGF0aWMgcmVhZG9ubHkgTlVNQkVSUyA9IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOSddO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9GSU5BTF9GT1JNQVRUSU5HID0gdHJ1ZTtcbiAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfREVDSU1BTF9QTEFDRVMgPSAyO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BVVRPRklMTF9ERUNJTUFMUyA9IGZhbHNlO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9SRU1PVkVfTEVBRElOR19aRVJPUyA9IGZhbHNlO1xuXG4gIGRlY2ltYWxTZXBhcmF0b3I6ICcsJyB8ICcuJztcbiAgZ3JvdXBpbmdTZXBhcmF0b3I6ICcsJyB8ICcuJztcblxuICBhbGxvd2VkS2V5czogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KExPQ0FMRV9JRCkgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAvLyB0cnkgdG8gZ2V0IHRoZSBjdXJyZW50IGZvcm1hdHRpbmdcbiAgICBjb25zdCBsb2NhbGVEZWNpbWFsU2VwYXJhdG9yID0gKDEuMSkudG9Mb2NhbGVTdHJpbmcobG9jYWxlKS5jaGFyQXQoMSk7XG4gICAgdGhpcy5kZWNpbWFsU2VwYXJhdG9yID0gbG9jYWxlRGVjaW1hbFNlcGFyYXRvciA9PT0gJywnID8gJywnIDogJy4nO1xuICAgIHRoaXMuZ3JvdXBpbmdTZXBhcmF0b3IgPSBsb2NhbGVEZWNpbWFsU2VwYXJhdG9yID09PSAnLCcgPyAnLicgOiAnLCc7XG5cbiAgICB0aGlzLmFsbG93ZWRLZXlzID0gWy4uLk51bWJlckZvcm1hdFNlcnZpY2UuTlVNQkVSUywgTnVtYmVyRm9ybWF0U2VydmljZS5ORUdBVElWRSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yXTtcbiAgfVxuXG4gIHN0YXRpYyB2YWx1ZUlzU2V0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS5sZW5ndGggIT09IDApO1xuICB9XG5cbiAgZm9ybWF0KHZhbHVlOiBudW1iZXIsIG9wdGlvbnM/OiBQYXJ0aWFsPEZvcm1hdE9wdGlvbnM+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gTnVtYmVyRm9ybWF0U2VydmljZS52YWx1ZUlzU2V0KHZhbHVlKVxuICAgICAgPyB0aGlzLmZvcm1hdE51bWJlcih2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UobmV3IFJlZ0V4cCgnWy5dJywgJ2cnKSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKSwgb3B0aW9ucylcbiAgICAgIDogJyc7XG4gIH1cblxuICBmb3JtYXROdW1iZXIodmFsdWU6IHN0cmluZywgb3B0aW9ucz86IFBhcnRpYWw8Rm9ybWF0T3B0aW9ucz4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGF1dG9maWxsRGVjaW1hbHMgPSB0aGlzLnZhbHVlT3JEZWZhdWx0KG9wdGlvbnM/LmF1dG9maWxsRGVjaW1hbHMsIE51bWJlckZvcm1hdFNlcnZpY2UuREVGQVVMVF9BVVRPRklMTF9ERUNJTUFMUyk7XG4gICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IHRoaXMudmFsdWVPckRlZmF1bHQob3B0aW9ucz8uZGVjaW1hbFBsYWNlcywgTnVtYmVyRm9ybWF0U2VydmljZS5ERUZBVUxUX0RFQ0lNQUxfUExBQ0VTKTtcbiAgICBjb25zdCBmaW5hbEZvcm1hdHRpbmcgPSB0aGlzLnZhbHVlT3JEZWZhdWx0KG9wdGlvbnM/LmZpbmFsRm9ybWF0dGluZywgTnVtYmVyRm9ybWF0U2VydmljZS5ERUZBVUxUX0ZJTkFMX0ZPUk1BVFRJTkcpO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RyaXAodmFsdWUsIHsgZGVjaW1hbFBsYWNlcywgcmVtb3ZlTGVhZGluZ1plcm9zOiBmaW5hbEZvcm1hdHRpbmcgfSk7XG5cbiAgICAvKiBhZGQgZ3JvdXBpbmcgc2VwYXJhdG9yICovXG4gICAgY29uc3QgZGVjaW1hbEluZGV4ID0gcmVzdWx0LmluZGV4T2YodGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICBjb25zdCBpc05lZ2F0aXZlID0gcmVzdWx0LnN0YXJ0c1dpdGgoTnVtYmVyRm9ybWF0U2VydmljZS5ORUdBVElWRSk7XG4gICAgbGV0IGkgPSBkZWNpbWFsSW5kZXggPiAtMSA/IGRlY2ltYWxJbmRleCA6IHJlc3VsdC5sZW5ndGg7XG4gICAgd2hpbGUgKGkgPiAoaXNOZWdhdGl2ZSA/IDQgOiAzKSkge1xuICAgICAgaSAtPSAzO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBpKSArIHRoaXMuZ3JvdXBpbmdTZXBhcmF0b3IgKyByZXN1bHQuc3Vic3RyaW5nKGksIHJlc3VsdC5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmIChmaW5hbEZvcm1hdHRpbmcpIHtcbiAgICAgIGlmIChkZWNpbWFsUGxhY2VzID4gMCAmJiAhIXJlc3VsdCkge1xuICAgICAgICAvKiBhdXRvZmlsbCBkZWNpbWFsIHBsYWNlcyAqL1xuICAgICAgICBsZXQgYWN0dWFsRGVjaW1hbEluZGV4ID0gcmVzdWx0LmluZGV4T2YodGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGF1dG9maWxsRGVjaW1hbHMpIHtcbiAgICAgICAgICBpZiAoYWN0dWFsRGVjaW1hbEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgYWN0dWFsRGVjaW1hbEluZGV4ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5hZGRNaXNzaW5nTGVhZGluZ1plcm8ocmVzdWx0LCBhY3R1YWxEZWNpbWFsSW5kZXgpO1xuICAgICAgICAgIGFjdHVhbERlY2ltYWxJbmRleCA9IHJlc3VsdC5pbmRleE9mKHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICAgICAgICBjb25zdCBhY3R1YWxEZWNpbWFsUGxhY2VzID0gcmVzdWx0Lmxlbmd0aCAtIGFjdHVhbERlY2ltYWxJbmRleCAtIDE7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkZWNpbWFsUGxhY2VzIC0gYWN0dWFsRGVjaW1hbFBsYWNlczsgaisrKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmFkZE1pc3NpbmdMZWFkaW5nWmVybyhyZXN1bHQsIGFjdHVhbERlY2ltYWxJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0cmlwKHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBTdHJpcE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY2ltYWxQbGFjZXMgPSB0aGlzLnZhbHVlT3JEZWZhdWx0KG9wdGlvbnM/LmRlY2ltYWxQbGFjZXMsIE51bWJlckZvcm1hdFNlcnZpY2UuREVGQVVMVF9ERUNJTUFMX1BMQUNFUyk7XG4gICAgY29uc3QgcmVtb3ZlTGVhZGluZ1plcm9zID0gdGhpcy52YWx1ZU9yRGVmYXVsdChvcHRpb25zPy5yZW1vdmVMZWFkaW5nWmVyb3MsIE51bWJlckZvcm1hdFNlcnZpY2UuREVGQVVMVF9SRU1PVkVfTEVBRElOR19aRVJPUyk7XG5cbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgbGV0IGluZGV4RGVjaW1hbFNlcCA9IC0xO1xuICAgIGxldCBqID0gLTE7XG4gICAgbGV0IGlnbm9yZWRDaGFycyA9IDA7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgICBqKys7XG4gICAgICBpZiAodGhpcy5hbGxvd2VkS2V5cy5pbmNsdWRlcyhjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yKSB7XG4gICAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMgPT09IDApIHtcbiAgICAgICAgICAgIC8qIGRpc21pc3MgY29udGVudCBhZnRlciBhIGRlY2ltYWwgc2VwYXJhdG9yLCB3aGVuIG5vIHBsYWNlcyBhbGxvd2VkICovXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4RGVjaW1hbFNlcCA+IC0xKSB7XG4gICAgICAgICAgICAvKiBpZ25vcmUgc3Vic2VxdWVudCBkZWNpbWFsIHNlcGFyYXRvcnMgKi9cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleERlY2ltYWxTZXAgPSBqO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSAnMCcgJiYgcmVtb3ZlTGVhZGluZ1plcm9zKSB7XG4gICAgICAgICAgLyogcmVtb3ZlIGxlYWRpbmcgemVybyBvbmx5IGlmIGl0J3Mgbm90IHRoZSBvbmx5IHplcm8gaW4gdGhlICd2YWx1ZScgc3RyaW5nICovXG4gICAgICAgICAgaWYgKChyZXN1bHQubGVuZ3RoID09PSAwICYmIGogKyAxICE9PSB2YWx1ZS5sZW5ndGgpIHx8IHJlc3VsdCA9PT0gTnVtYmVyRm9ybWF0U2VydmljZS5ORUdBVElWRSkge1xuICAgICAgICAgICAgaWdub3JlZENoYXJzKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09IE51bWJlckZvcm1hdFNlcnZpY2UuTkVHQVRJVkUgJiYgaiA+IDApIHtcbiAgICAgICAgICAvKiBkaXNtaXNzIGNvbnRlbnQgYWZ0ZXIgYSBuZWdhdGl2ZSBzaWduIG5vdCBvbiBmaXJzdCBwb3NpdGlvbiAqL1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleERlY2ltYWxTZXAgPiAtMSAmJiByZXN1bHQubGVuZ3RoICsgaWdub3JlZENoYXJzID4gaW5kZXhEZWNpbWFsU2VwICsgZGVjaW1hbFBsYWNlcykge1xuICAgICAgICAgIC8qIGRpc21pc3MgY29udGVudCBhZnRlciBtYXhpbXVtIGRlY2ltYWwgcGxhY2VzIHJlYWNoZWQgKi9cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gdGhpcy5ncm91cGluZ1NlcGFyYXRvcikge1xuICAgICAgICBpZiAoaW5kZXhEZWNpbWFsU2VwID09PSAtMSkge1xuICAgICAgICAgIGlnbm9yZWRDaGFycysrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBkaXNtaXNzIGNvbnRlbnQgYWZ0ZXIgYSBpbnZhbGlkIGNoYXJhY3RlciAqL1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWlzc2luZ0xlYWRpbmdaZXJvKHJlc3VsdDogc3RyaW5nLCBhY3R1YWxEZWNpbWFsSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHJlc3VsdC5zdGFydHNXaXRoKE51bWJlckZvcm1hdFNlcnZpY2UuTkVHQVRJVkUpO1xuICAgIC8qIGF1dG9hZGQgYSB6ZXJvIGJlZm9yZSBkZWNpbWFsIHNlcGFyYXRvciwgd2hlbiBpdCdzIG1pc3NpbmcgKi9cbiAgICBpZiAoYWN0dWFsRGVjaW1hbEluZGV4ID09PSAwKSB7XG4gICAgICByZXN1bHQgPSAnMCcgKyByZXN1bHQ7XG4gICAgfVxuICAgIC8qIGF1dG9hZGQgYSB6ZXJvIGJlZm9yZSBkZWNpbWFsIHNlcGFyYXRvciwgd2hlbiBpdCdzIG1pc3NpbmcsIGZvciBuZWdhdGl2ZSB2YWx1ZXMgKi9cbiAgICBpZiAoYWN0dWFsRGVjaW1hbEluZGV4ID09PSAxICYmIGlzTmVnYXRpdmUpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdFswXSArICcwJyArIHJlc3VsdC5zdWJzdHJpbmcoMSwgcmVzdWx0Lmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHZhbHVlT3JEZWZhdWx0KHZhbHVlOiBhbnksIGRlZmF1bHRWYWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gTnVtYmVyRm9ybWF0U2VydmljZS52YWx1ZUlzU2V0KHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iXX0=