@softpak/components 0.3.5 → 0.3.6

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 (185) hide show
  1. package/esm2022/placeholder.mjs +2 -0
  2. package/esm2022/public_api.mjs +2 -0
  3. package/esm2022/softpak-components.mjs +5 -0
  4. package/esm2022/spx-alert/public-api.mjs +3 -0
  5. package/esm2022/spx-alert/softpak-components-spx-alert.mjs +5 -0
  6. package/esm2022/spx-alert/spx-alert.component.mjs +193 -0
  7. package/esm2022/spx-alert/spx-alert.interface.mjs +3 -0
  8. package/esm2022/spx-app-configuration/public-api.mjs +8 -0
  9. package/esm2022/spx-app-configuration/softpak-components-spx-app-configuration.mjs +5 -0
  10. package/esm2022/spx-app-configuration/spx-app-alert.interface.mjs +2 -0
  11. package/esm2022/spx-app-configuration/spx-app-bundle-set.interface.mjs +2 -0
  12. package/esm2022/spx-app-configuration/spx-app-channel-type.enum.mjs +8 -0
  13. package/esm2022/spx-app-configuration/spx-app-channel.interface.mjs +2 -0
  14. package/esm2022/spx-app-configuration/spx-app-config.interface.mjs +2 -0
  15. package/esm2022/spx-app-configuration/spx-app-id.enum.mjs +8 -0
  16. package/esm2022/spx-app-configuration/spx-app-lang.enum.mjs +6 -0
  17. package/esm2022/spx-app-configuration/spx-app-release-note.interface.mjs +2 -0
  18. package/esm2022/spx-app-expiry/public-api.mjs +6 -0
  19. package/esm2022/spx-app-expiry/softpak-components-spx-app-expiry.mjs +5 -0
  20. package/esm2022/spx-app-expiry/spx-app-expiry.component.mjs +90 -0
  21. package/esm2022/spx-app-expiry/spx-app-expiry.interface.mjs +2 -0
  22. package/esm2022/spx-app-expiry/spx-check-expiry-final-warning.interface.mjs +5 -0
  23. package/esm2022/spx-app-expiry/spx-check-expiry-happened.interface.mjs +5 -0
  24. package/esm2022/spx-app-expiry/spx-check-expiry-warning.interface.mjs +5 -0
  25. package/esm2022/spx-app-update/public-api.mjs +2 -0
  26. package/esm2022/spx-app-update/softpak-components-spx-app-update.mjs +5 -0
  27. package/esm2022/spx-app-update/spx-app-update.component.mjs +314 -0
  28. package/esm2022/spx-button/public-api.mjs +2 -0
  29. package/esm2022/spx-button/softpak-components-spx-button.mjs +5 -0
  30. package/esm2022/spx-button/spx-button.component.mjs +142 -0
  31. package/esm2022/spx-capitalize/public-api.mjs +2 -0
  32. package/esm2022/spx-capitalize/softpak-components-spx-capitalize.mjs +5 -0
  33. package/esm2022/spx-capitalize/spx-capitalize.pipe.mjs +20 -0
  34. package/esm2022/spx-card/public-api.mjs +5 -0
  35. package/esm2022/spx-card/softpak-components-spx-card.mjs +5 -0
  36. package/esm2022/spx-card/spx-card-grid.component.mjs +46 -0
  37. package/esm2022/spx-card/spx-card-item.component.mjs +111 -0
  38. package/esm2022/spx-card/spx-card-line.component.mjs +101 -0
  39. package/esm2022/spx-card/spx-card.component.mjs +93 -0
  40. package/esm2022/spx-change-details/public-api.mjs +2 -0
  41. package/esm2022/spx-change-details/softpak-components-spx-change-details.mjs +5 -0
  42. package/esm2022/spx-change-details/spx-change-details-value.interface.mjs +2 -0
  43. package/esm2022/spx-change-details/spx-change-details.component.mjs +199 -0
  44. package/esm2022/spx-channel-selection/public-api.mjs +3 -0
  45. package/esm2022/spx-channel-selection/softpak-components-spx-channel-selection.mjs +5 -0
  46. package/esm2022/spx-channel-selection/src/spx-channel-indicator.component.mjs +45 -0
  47. package/esm2022/spx-channel-selection/src/spx-welcome.component.mjs +135 -0
  48. package/esm2022/spx-check-digit/public-api.mjs +2 -0
  49. package/esm2022/spx-check-digit/softpak-components-spx-check-digit.mjs +5 -0
  50. package/esm2022/spx-check-digit/spx-check-digit.component.mjs +94 -0
  51. package/esm2022/spx-form-section/public-api.mjs +2 -0
  52. package/esm2022/spx-form-section/softpak-components-spx-form-section.mjs +5 -0
  53. package/esm2022/spx-form-section/spx-form-section.component.mjs +37 -0
  54. package/esm2022/spx-form-view/public-api.mjs +7 -0
  55. package/esm2022/spx-form-view/softpak-components-spx-form-view.mjs +5 -0
  56. package/esm2022/spx-form-view/spx-autocomplete-search.component.mjs +119 -0
  57. package/esm2022/spx-form-view/spx-form-button-type.enum.mjs +6 -0
  58. package/esm2022/spx-form-view/spx-form-button.interface.mjs +2 -0
  59. package/esm2022/spx-form-view/spx-form-field.interface.mjs +2 -0
  60. package/esm2022/spx-form-view/spx-form-section.interface.mjs +2 -0
  61. package/esm2022/spx-form-view/spx-form-view.component.mjs +289 -0
  62. package/esm2022/spx-form-view/spx-form.interface.mjs +2 -0
  63. package/esm2022/spx-helpers/calc-check-digit.function.mjs +21 -0
  64. package/esm2022/spx-helpers/public-api.mjs +4 -0
  65. package/esm2022/spx-helpers/softpak-components-spx-helpers.mjs +5 -0
  66. package/esm2022/spx-helpers/spx-severity.enum.mjs +9 -0
  67. package/esm2022/spx-helpers/value-pair-to-value.function.mjs +7 -0
  68. package/esm2022/spx-inputs/public-api.mjs +6 -0
  69. package/esm2022/spx-inputs/softpak-components-spx-inputs.mjs +5 -0
  70. package/esm2022/spx-inputs/spx-dropdown.component.mjs +94 -0
  71. package/esm2022/spx-inputs/spx-input-box.component.mjs +255 -0
  72. package/esm2022/spx-inputs/spx-input-date.component.mjs +294 -0
  73. package/esm2022/spx-inputs/spx-input-float.component.mjs +159 -0
  74. package/esm2022/spx-inputs/spx-input-number.component.mjs +87 -0
  75. package/esm2022/spx-inputs/spx-input-radio.component.mjs +129 -0
  76. package/esm2022/spx-inputs/spx-input-text.component.mjs +156 -0
  77. package/esm2022/spx-inputs/spx-input-time-modal.component.mjs +116 -0
  78. package/esm2022/spx-inputs/spx-input-time.component.mjs +166 -0
  79. package/esm2022/spx-inputs/spx-input-type.enum.mjs +17 -0
  80. package/esm2022/spx-inputs/spx-input.component.mjs +449 -0
  81. package/esm2022/spx-inputs/spx-value-interface.mjs +2 -0
  82. package/esm2022/spx-navigation/public-api.mjs +5 -0
  83. package/esm2022/spx-navigation/softpak-components-spx-navigation.mjs +5 -0
  84. package/esm2022/spx-navigation/spx-home-tile.component.mjs +68 -0
  85. package/esm2022/spx-navigation/spx-home-tiles.component.mjs +24 -0
  86. package/esm2022/spx-navigation/spx-navigation-item.interface.mjs +2 -0
  87. package/esm2022/spx-navigation/spx-navigation.component.mjs +51 -0
  88. package/esm2022/spx-number-check/public-api.mjs +2 -0
  89. package/esm2022/spx-number-check/softpak-components-spx-number-check.mjs +5 -0
  90. package/esm2022/spx-number-check/spx-number-check.component.mjs +259 -0
  91. package/esm2022/spx-pagination/public-api.mjs +2 -0
  92. package/esm2022/spx-pagination/softpak-components-spx-pagination.mjs +5 -0
  93. package/esm2022/spx-pagination/spx-pagination.component.mjs +44 -0
  94. package/esm2022/spx-patch/patch-check.function.mjs +9 -0
  95. package/esm2022/spx-patch/public-api.mjs +4 -0
  96. package/esm2022/spx-patch/release-check.function.mjs +14 -0
  97. package/esm2022/spx-patch/softpak-components-spx-patch.mjs +5 -0
  98. package/esm2022/spx-patch/spx-patch.component.mjs +48 -0
  99. package/esm2022/spx-progress-bar/public-api.mjs +2 -0
  100. package/esm2022/spx-progress-bar/softpak-components-spx-progress-bar.mjs +5 -0
  101. package/esm2022/spx-progress-bar/spx-progress-bar.component.mjs +29 -0
  102. package/esm2022/spx-spinner/public-api.mjs +2 -0
  103. package/esm2022/spx-spinner/softpak-components-spx-spinner.mjs +5 -0
  104. package/esm2022/spx-spinner/spx-spinner.component.mjs +159 -0
  105. package/esm2022/spx-stock-info/public-api.mjs +3 -0
  106. package/esm2022/spx-stock-info/softpak-components-spx-stock-info.mjs +5 -0
  107. package/esm2022/spx-stock-info/spx-stock-info-value.interface.mjs +2 -0
  108. package/esm2022/spx-stock-info/spx-stock-info.component.mjs +327 -0
  109. package/esm2022/spx-storage/public-api.mjs +3 -0
  110. package/esm2022/spx-storage/softpak-components-spx-storage.mjs +5 -0
  111. package/esm2022/spx-storage/src/spx-storage-key.enum.mjs +13 -0
  112. package/esm2022/spx-storage/src/spx-storage.class.mjs +45 -0
  113. package/esm2022/spx-suggestion/public-api.mjs +2 -0
  114. package/esm2022/spx-suggestion/softpak-components-spx-suggestion.mjs +5 -0
  115. package/esm2022/spx-suggestion/spx-suggestion.component.mjs +69 -0
  116. package/esm2022/spx-toaster/public-api.mjs +4 -0
  117. package/esm2022/spx-toaster/softpak-components-spx-toaster.mjs +5 -0
  118. package/esm2022/spx-toaster/src/spx-toaster-autoclose-speed.mjs +23 -0
  119. package/esm2022/spx-toaster/src/spx-toaster-message.interface.mjs +3 -0
  120. package/esm2022/spx-toaster/src/spx-toaster.component.mjs +173 -0
  121. package/esm2022/spx-update/public-api.mjs +3 -0
  122. package/esm2022/spx-update/softpak-components-spx-update.mjs +5 -0
  123. package/esm2022/spx-update/src/spx-update-info.component.mjs +88 -0
  124. package/esm2022/spx-update/src/spx-update-progress.component.mjs +46 -0
  125. package/esm2022/spx-validation/max.validator.mjs +17 -0
  126. package/esm2022/spx-validation/maxlength.validator.mjs +20 -0
  127. package/esm2022/spx-validation/min.validator.mjs +17 -0
  128. package/esm2022/spx-validation/minlength.validator.mjs +20 -0
  129. package/esm2022/spx-validation/pattern.validator.mjs +12 -0
  130. package/esm2022/spx-validation/public-api.mjs +9 -0
  131. package/esm2022/spx-validation/required.validator.mjs +12 -0
  132. package/esm2022/spx-validation/softpak-components-spx-validation.mjs +5 -0
  133. package/esm2022/spx-validation/spx-validate-control.component.mjs +68 -0
  134. package/esm2022/spx-validation/year-and-month.validator.mjs +42 -0
  135. package/fesm2022/softpak-components-spx-alert.mjs +3 -3
  136. package/fesm2022/softpak-components-spx-alert.mjs.map +1 -1
  137. package/fesm2022/softpak-components-spx-app-configuration.mjs.map +1 -1
  138. package/fesm2022/softpak-components-spx-app-expiry.mjs +3 -3
  139. package/fesm2022/softpak-components-spx-app-expiry.mjs.map +1 -1
  140. package/fesm2022/softpak-components-spx-app-update.mjs +3 -3
  141. package/fesm2022/softpak-components-spx-app-update.mjs.map +1 -1
  142. package/fesm2022/softpak-components-spx-button.mjs +3 -3
  143. package/fesm2022/softpak-components-spx-button.mjs.map +1 -1
  144. package/fesm2022/softpak-components-spx-capitalize.mjs +3 -3
  145. package/fesm2022/softpak-components-spx-capitalize.mjs.map +1 -1
  146. package/fesm2022/softpak-components-spx-card.mjs +16 -16
  147. package/fesm2022/softpak-components-spx-card.mjs.map +1 -1
  148. package/fesm2022/softpak-components-spx-change-details.mjs +3 -3
  149. package/fesm2022/softpak-components-spx-change-details.mjs.map +1 -1
  150. package/fesm2022/softpak-components-spx-channel-selection.mjs +6 -6
  151. package/fesm2022/softpak-components-spx-channel-selection.mjs.map +1 -1
  152. package/fesm2022/softpak-components-spx-check-digit.mjs +3 -3
  153. package/fesm2022/softpak-components-spx-check-digit.mjs.map +1 -1
  154. package/fesm2022/softpak-components-spx-form-section.mjs +3 -3
  155. package/fesm2022/softpak-components-spx-form-section.mjs.map +1 -1
  156. package/fesm2022/softpak-components-spx-form-view.mjs +6 -6
  157. package/fesm2022/softpak-components-spx-form-view.mjs.map +1 -1
  158. package/fesm2022/softpak-components-spx-helpers.mjs.map +1 -1
  159. package/fesm2022/softpak-components-spx-inputs.mjs +30 -30
  160. package/fesm2022/softpak-components-spx-inputs.mjs.map +1 -1
  161. package/fesm2022/softpak-components-spx-navigation.mjs +9 -9
  162. package/fesm2022/softpak-components-spx-navigation.mjs.map +1 -1
  163. package/fesm2022/softpak-components-spx-number-check.mjs +3 -3
  164. package/fesm2022/softpak-components-spx-number-check.mjs.map +1 -1
  165. package/fesm2022/softpak-components-spx-pagination.mjs +3 -3
  166. package/fesm2022/softpak-components-spx-pagination.mjs.map +1 -1
  167. package/fesm2022/softpak-components-spx-patch.mjs +3 -3
  168. package/fesm2022/softpak-components-spx-patch.mjs.map +1 -1
  169. package/fesm2022/softpak-components-spx-progress-bar.mjs +3 -3
  170. package/fesm2022/softpak-components-spx-progress-bar.mjs.map +1 -1
  171. package/fesm2022/softpak-components-spx-spinner.mjs +3 -3
  172. package/fesm2022/softpak-components-spx-spinner.mjs.map +1 -1
  173. package/fesm2022/softpak-components-spx-stock-info.mjs +3 -3
  174. package/fesm2022/softpak-components-spx-stock-info.mjs.map +1 -1
  175. package/fesm2022/softpak-components-spx-storage.mjs.map +1 -1
  176. package/fesm2022/softpak-components-spx-suggestion.mjs +3 -3
  177. package/fesm2022/softpak-components-spx-suggestion.mjs.map +1 -1
  178. package/fesm2022/softpak-components-spx-toaster.mjs +4 -4
  179. package/fesm2022/softpak-components-spx-toaster.mjs.map +1 -1
  180. package/fesm2022/softpak-components-spx-update.mjs +6 -6
  181. package/fesm2022/softpak-components-spx-update.mjs.map +1 -1
  182. package/fesm2022/softpak-components-spx-validation.mjs +3 -3
  183. package/fesm2022/softpak-components-spx-validation.mjs.map +1 -1
  184. package/package.json +75 -21
  185. package/tailwind.css +1 -1
@@ -0,0 +1,289 @@
1
+ import { JsonPipe, NgFor, NgIf } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output, ViewChildren } from '@angular/core';
3
+ import { SpxFormSectionComponent } from '@softpak/components/spx-form-section';
4
+ import { SpxInputComponent, SpxInputTypeEnum } from '@softpak/components/spx-inputs';
5
+ import { SpxCapitalizePipe } from '@softpak/components/spx-capitalize';
6
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
7
+ import { SpxAutocompleteSearchComponent } from './spx-autocomplete-search.component';
8
+ import { SpxValidateControlComponent } from '@softpak/components/spx-validation';
9
+ import { TranslateModule } from '@ngx-translate/core';
10
+ import { SpxButtonComponent } from '@softpak/components/spx-button';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "@ngx-translate/core";
14
+ export class SpxFormViewComponent {
15
+ setAutofocus(key) {
16
+ const field = this.spxInputs.find(input => input.spxName === key);
17
+ if (field) {
18
+ field.setFocusIn();
19
+ }
20
+ }
21
+ onBlur(field) {
22
+ this.spxBlur.emit({
23
+ field,
24
+ valuePair: this.spxFormGroup.get(field.key).value,
25
+ });
26
+ }
27
+ onClick(field) {
28
+ this.spxClick.emit({
29
+ field,
30
+ });
31
+ }
32
+ onAutocompleteCancel() {
33
+ this.autocompleteField = undefined;
34
+ }
35
+ onAutocompleteSearch(valuePair) {
36
+ if (this.autocompleteField) {
37
+ this.spxSearch.emit({
38
+ field: this.autocompleteField,
39
+ valuePair,
40
+ });
41
+ }
42
+ }
43
+ onAutocompleteSave(valuePair) {
44
+ this.spxFormGroup.get(this.autocompleteField.key)?.setValue(valuePair);
45
+ this.autocompleteField = undefined;
46
+ }
47
+ onSearch(field) {
48
+ this.autocompleteField = field;
49
+ }
50
+ getRawValidators(formControl) {
51
+ // eslint-disable-next-line no-underscore-dangle
52
+ return formControl._rawValidators;
53
+ }
54
+ hasRequiredField(abstractControl) {
55
+ if (abstractControl.validator) {
56
+ const validator = abstractControl.validator({});
57
+ if (validator && validator['required']) {
58
+ return true;
59
+ }
60
+ }
61
+ if (abstractControl['controls']) {
62
+ for (const controlName in abstractControl['controls']) {
63
+ if (abstractControl['controls'][controlName]) {
64
+ if (this.hasRequiredField(abstractControl['controls'][controlName])) {
65
+ return true;
66
+ }
67
+ }
68
+ }
69
+ }
70
+ return false;
71
+ }
72
+ static initialFormValue(sections) {
73
+ const formObject = {};
74
+ sections.forEach(section => {
75
+ section.fields.forEach(field => {
76
+ formObject[field.key] = [field.defaultValue ? field.defaultValue() : null, field.validators ? [...field.validators()] : []];
77
+ });
78
+ });
79
+ return formObject;
80
+ }
81
+ static createForm(formBuilder, sections) {
82
+ return formBuilder.group(this.initialFormValue(sections));
83
+ }
84
+ constructor(formBuilder) {
85
+ this.formBuilder = formBuilder;
86
+ this.spxBlur = new EventEmitter();
87
+ this.spxClick = new EventEmitter();
88
+ this.spxSearch = new EventEmitter();
89
+ this.typeAutocomplete = SpxInputTypeEnum.autocomplete;
90
+ this.typeButton = SpxInputTypeEnum.button;
91
+ this.typeFloat = SpxInputTypeEnum.float;
92
+ this.typeNumber = SpxInputTypeEnum.number;
93
+ this.typeRadio = SpxInputTypeEnum.radio;
94
+ this.typeText = SpxInputTypeEnum.text;
95
+ this.typeNumericKeyboard = SpxInputTypeEnum.textNumericKeyboard;
96
+ this.typeOverlay = SpxInputTypeEnum.overlay;
97
+ this.typeOverlayNumber = SpxInputTypeEnum.overlayNumber;
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpxFormViewComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SpxFormViewComponent, isStandalone: true, selector: "spx-form-view", inputs: { spxFormGroup: "spxFormGroup", spxForm: "spxForm", spxSuggestions: "spxSuggestions" }, outputs: { spxBlur: "spxBlur", spxClick: "spxClick", spxSearch: "spxSearch" }, viewQueries: [{ propertyName: "spxInputs", predicate: SpxInputComponent, descendants: true }], ngImport: i0, template: `<spx-autocomplete-search
101
+ *ngIf="autocompleteField"
102
+ [spxField]="autocompleteField"
103
+ [spxSuggestions]="this.spxSuggestions[autocompleteField.key]"
104
+ [spxValuePair]="$any(this.spxFormGroup.get(autocompleteField.key)).value"
105
+ [txtOptions]="'Options'"
106
+ [txtQuery]="'Query'"
107
+ [txtSubmit]="'Save'"
108
+ (spxCancel)="onAutocompleteCancel()"
109
+ (spxSearch)="onAutocompleteSearch($event)"
110
+ (spxSubmit)="onAutocompleteSave($event)">
111
+ </spx-autocomplete-search>
112
+ <div class="flex flex-col gap-3">
113
+ <spx-form-section
114
+ *ngFor="let spxSection of spxForm.sections; let spxSectionIndex = index;"
115
+ [spxShowTitle]="!spxSection.showTitle || spxSection.showTitle()"
116
+ [spxIndex]="spxSectionIndex + 1"
117
+ [spxTitle]="spxSection.title ? (spxSection.title() | translate | capitalize) : undefined">
118
+ <ng-container *ngFor="let spxField of spxSection.fields; let spxFieldIndex = index;">
119
+ <ng-container *ngIf="spxField.show === undefined || spxField.show()">
120
+ <spx-button *ngIf="spxField.type() === typeButton"
121
+ [spxFullWidth]="true"
122
+ [spxSeverity]="spxField.severity ? spxField.severity() : undefined"
123
+ [spxType]="'button'"
124
+ (spxClick)="onClick(spxField)"
125
+ >{{ (spxField.label ? spxField.label() : spxField.key) | translate | capitalize }}</spx-button>
126
+
127
+ <spx-input
128
+ *ngIf="spxField.type() === typeOverlay || spxField.type() === typeOverlayNumber || spxField.type() === typeFloat || spxField.type() === typeNumber || spxField.type() === typeText || spxField.type() === typeAutocomplete || spxField.type() === typeNumericKeyboard"
129
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
130
+ [spxAutofocus]="spxField.autofocus ? spxField.autofocus() : false"
131
+ [spxCapitalize]="spxField.capitalize ? spxField.capitalize() : false"
132
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | translate | capitalize"
133
+ [spxName]="spxField.key"
134
+ [spxPattern]="spxField.type() === typeNumericKeyboard ? '\\d*' : undefined"
135
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
136
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
137
+ [spxShowSearch]="spxField.type() === typeAutocomplete"
138
+ [spxShowHelp]="false"
139
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
140
+ [spxStep]="spxField.step ? spxField.step() : undefined"
141
+ [spxType]="spxField.type()"
142
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)"
143
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
144
+ (spxBlur)="onBlur(spxField)"
145
+ (spxSearch)="onSearch(spxField)">
146
+ <spx-validate-control [control]="$any(this.spxFormGroup.get(spxField.key))" [label]="(spxField.label ? spxField.label() : spxField.key)| translate | capitalize"></spx-validate-control>
147
+ </spx-input>
148
+
149
+ <spx-input
150
+ *ngIf="spxField.type() === typeRadio"
151
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
152
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | translate | capitalize"
153
+ [spxName]="spxField.key"
154
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
155
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
156
+ [spxShowHelp]="false"
157
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
158
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
159
+ [spxType]="typeRadio"
160
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)">
161
+ <spx-validate-control [control]="$any(this.spxFormGroup.get(spxField.key))" [label]="(spxField.label ? spxField.label() : spxField.key) | translate | capitalize"></spx-validate-control>
162
+ </spx-input>
163
+ </ng-container>
164
+ </ng-container>
165
+ </spx-form-section>
166
+
167
+ <spx-button *ngFor="let spxButton of spxForm.buttons"
168
+ [spxFullWidth]="true"
169
+ [spxSeverity]="spxButton.severity"
170
+ [spxType]="spxButton.type"
171
+ (spxClick)="spxButton.onClick ? spxButton.onClick() : undefined">
172
+ {{ ((spxButton && spxButton.label) ? spxButton.label() : '') | translate | capitalize }}
173
+ </spx-button>
174
+ </div>
175
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: SpxAutocompleteSearchComponent, selector: "spx-autocomplete-search", inputs: ["spxSuggestions", "spxField", "txtOptions", "txtQuery", "txtSubmit", "spxValuePair"], outputs: ["spxCancel", "spxSearch", "spxSubmit"] }, { kind: "component", type: SpxButtonComponent, selector: "spx-button", inputs: ["spxDisabled", "spxClass", "spxClassObject", "spxForm", "spxFullHeight", "spxFullWidth", "spxSeverity", "spxSize", "spxTabIndex", "spxType"], outputs: ["spxClick"] }, { kind: "pipe", type: SpxCapitalizePipe, name: "capitalize" }, { kind: "component", type: SpxFormSectionComponent, selector: "spx-form-section", inputs: ["spxIndex", "spxIndexSecondary", "spxTitle", "spxShowTitle"] }, { kind: "component", type: SpxInputComponent, selector: "spx-input", inputs: ["spxLabel", "spxMax", "spxMin", "spxName", "spxReadonly", "spxAutocomplete", "spxAutofocus", "spxInputMode", "spxPattern", "spxRequired", "spxSelectMonth", "spxSelectDay", "spxShowEdit", "spxShowHelp", "spxShowLabel", "spxCompact", "spxShowClear", "spxShowSearch", "spxShowValidationMessages", "spxStep", "spxSuggestions", "spxType", "spxValidators", "value", "spxCapitalize", "spxFocused"], outputs: ["spxBlur", "spxClear", "spxChange", "spxFocus", "spxEdit", "spxHelp", "spxSearch"] }, { kind: "component", type: SpxValidateControlComponent, selector: "spx-validate-control", inputs: ["control", "label", "submitTried"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
176
+ }
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpxFormViewComponent, decorators: [{
178
+ type: Component,
179
+ args: [{
180
+ selector: 'spx-form-view',
181
+ standalone: true,
182
+ imports: [
183
+ FormsModule,
184
+ ReactiveFormsModule,
185
+ JsonPipe,
186
+ NgIf,
187
+ NgFor,
188
+ SpxAutocompleteSearchComponent,
189
+ SpxButtonComponent,
190
+ SpxCapitalizePipe,
191
+ SpxFormSectionComponent,
192
+ SpxInputComponent,
193
+ SpxValidateControlComponent,
194
+ TranslateModule,
195
+ ],
196
+ template: `<spx-autocomplete-search
197
+ *ngIf="autocompleteField"
198
+ [spxField]="autocompleteField"
199
+ [spxSuggestions]="this.spxSuggestions[autocompleteField.key]"
200
+ [spxValuePair]="$any(this.spxFormGroup.get(autocompleteField.key)).value"
201
+ [txtOptions]="'Options'"
202
+ [txtQuery]="'Query'"
203
+ [txtSubmit]="'Save'"
204
+ (spxCancel)="onAutocompleteCancel()"
205
+ (spxSearch)="onAutocompleteSearch($event)"
206
+ (spxSubmit)="onAutocompleteSave($event)">
207
+ </spx-autocomplete-search>
208
+ <div class="flex flex-col gap-3">
209
+ <spx-form-section
210
+ *ngFor="let spxSection of spxForm.sections; let spxSectionIndex = index;"
211
+ [spxShowTitle]="!spxSection.showTitle || spxSection.showTitle()"
212
+ [spxIndex]="spxSectionIndex + 1"
213
+ [spxTitle]="spxSection.title ? (spxSection.title() | translate | capitalize) : undefined">
214
+ <ng-container *ngFor="let spxField of spxSection.fields; let spxFieldIndex = index;">
215
+ <ng-container *ngIf="spxField.show === undefined || spxField.show()">
216
+ <spx-button *ngIf="spxField.type() === typeButton"
217
+ [spxFullWidth]="true"
218
+ [spxSeverity]="spxField.severity ? spxField.severity() : undefined"
219
+ [spxType]="'button'"
220
+ (spxClick)="onClick(spxField)"
221
+ >{{ (spxField.label ? spxField.label() : spxField.key) | translate | capitalize }}</spx-button>
222
+
223
+ <spx-input
224
+ *ngIf="spxField.type() === typeOverlay || spxField.type() === typeOverlayNumber || spxField.type() === typeFloat || spxField.type() === typeNumber || spxField.type() === typeText || spxField.type() === typeAutocomplete || spxField.type() === typeNumericKeyboard"
225
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
226
+ [spxAutofocus]="spxField.autofocus ? spxField.autofocus() : false"
227
+ [spxCapitalize]="spxField.capitalize ? spxField.capitalize() : false"
228
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | translate | capitalize"
229
+ [spxName]="spxField.key"
230
+ [spxPattern]="spxField.type() === typeNumericKeyboard ? '\\d*' : undefined"
231
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
232
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
233
+ [spxShowSearch]="spxField.type() === typeAutocomplete"
234
+ [spxShowHelp]="false"
235
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
236
+ [spxStep]="spxField.step ? spxField.step() : undefined"
237
+ [spxType]="spxField.type()"
238
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)"
239
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
240
+ (spxBlur)="onBlur(spxField)"
241
+ (spxSearch)="onSearch(spxField)">
242
+ <spx-validate-control [control]="$any(this.spxFormGroup.get(spxField.key))" [label]="(spxField.label ? spxField.label() : spxField.key)| translate | capitalize"></spx-validate-control>
243
+ </spx-input>
244
+
245
+ <spx-input
246
+ *ngIf="spxField.type() === typeRadio"
247
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
248
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | translate | capitalize"
249
+ [spxName]="spxField.key"
250
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
251
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
252
+ [spxShowHelp]="false"
253
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
254
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
255
+ [spxType]="typeRadio"
256
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)">
257
+ <spx-validate-control [control]="$any(this.spxFormGroup.get(spxField.key))" [label]="(spxField.label ? spxField.label() : spxField.key) | translate | capitalize"></spx-validate-control>
258
+ </spx-input>
259
+ </ng-container>
260
+ </ng-container>
261
+ </spx-form-section>
262
+
263
+ <spx-button *ngFor="let spxButton of spxForm.buttons"
264
+ [spxFullWidth]="true"
265
+ [spxSeverity]="spxButton.severity"
266
+ [spxType]="spxButton.type"
267
+ (spxClick)="spxButton.onClick ? spxButton.onClick() : undefined">
268
+ {{ ((spxButton && spxButton.label) ? spxButton.label() : '') | translate | capitalize }}
269
+ </spx-button>
270
+ </div>
271
+ `,
272
+ }]
273
+ }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { spxFormGroup: [{
274
+ type: Input
275
+ }], spxForm: [{
276
+ type: Input
277
+ }], spxSuggestions: [{
278
+ type: Input
279
+ }], spxBlur: [{
280
+ type: Output
281
+ }], spxClick: [{
282
+ type: Output
283
+ }], spxSearch: [{
284
+ type: Output
285
+ }], spxInputs: [{
286
+ type: ViewChildren,
287
+ args: [SpxInputComponent]
288
+ }] } });
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWZvcm0tdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWZvcm0tdmlldy9zcHgtZm9ybS12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUF3QixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0csT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFnQixNQUFNLGdDQUFnQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBMkMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7O0FBaUdwRSxNQUFNLE9BQU8sb0JBQW9CO0lBb0IvQixZQUFZLENBQUMsR0FBVztRQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtB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QkFBa0IsZ09BQ2xCLGlCQUFpQixtREFDakIsdUJBQXVCLG9JQUN2QixpQkFBaUIscWlCQUNqQiwyQkFBMkIsNkdBQzNCLGVBQWU7OzRGQStFTixvQkFBb0I7a0JBOUZoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixRQUFRO3dCQUNSLElBQUk7d0JBQ0osS0FBSzt3QkFDTCw4QkFBOEI7d0JBQzlCLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLGlCQUFpQjt3QkFDakIsMkJBQTJCO3dCQUMzQixlQUFlO3FCQUNoQjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJFVDtpQkFDRjtnRkFFVSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUMwQixTQUFTO3NCQUF6QyxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpzb25QaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3B4Rm9ybVNlY3Rpb25JIH0gZnJvbSAnLi9zcHgtZm9ybS1zZWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTcHhGb3JtU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJ0Bzb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWZvcm0tc2VjdGlvbic7XG5pbXBvcnQgeyBTcHhJbnB1dENvbXBvbmVudCwgU3B4SW5wdXRUeXBlRW51bSwgU3B4VmFsdWVQYWlyIH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtaW5wdXRzJztcbmltcG9ydCB7IFNweENhcGl0YWxpemVQaXBlIH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3B4Rm9ybUZpZWxkSSB9IGZyb20gJy4vc3B4LWZvcm0tZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNweEF1dG9jb21wbGV0ZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4vc3B4LWF1dG9jb21wbGV0ZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IFNweFZhbGlkYXRlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0Bzb2Z0cGFrL2NvbXBvbmVudHMvc3B4LXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTcHhCdXR0b25Db21wb25lbnQgfSBmcm9tICdAc29mdHBhay9jb21wb25lbnRzL3NweC1idXR0b24nO1xuaW1wb3J0IHsgU3B4Rm9ybUkgfSBmcm9tICcuL3NweC1mb3JtLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NweC1mb3JtLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBKc29uUGlwZSxcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIFNweEF1dG9jb21wbGV0ZVNlYXJjaENvbXBvbmVudCxcbiAgICBTcHhCdXR0b25Db21wb25lbnQsXG4gICAgU3B4Q2FwaXRhbGl6ZVBpcGUsXG4gICAgU3B4Rm9ybVNlY3Rpb25Db21wb25lbnQsXG4gICAgU3B4SW5wdXRDb21wb25lbnQsXG4gICAgU3B4VmFsaWRhdGVDb250cm9sQ29tcG9uZW50LFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGU6IGA8c3B4LWF1dG9jb21wbGV0ZS1zZWFyY2hcbiAgICAqbmdJZj1cImF1dG9jb21wbGV0ZUZpZWxkXCJcbiAgICBbc3B4RmllbGRdPVwiYXV0b2NvbXBsZXRlRmllbGRcIlxuICAgIFtzcHhTdWdnZXN0aW9uc109XCJ0aGlzLnNweFN1Z2dlc3Rpb25zW2F1dG9jb21wbGV0ZUZpZWxkLmtleV1cIlxuICAgIFtzcHhWYWx1ZVBhaXJdPVwiJGFueSh0aGlzLnNweEZvcm1Hcm91cC5nZXQoYXV0b2NvbXBsZXRlRmllbGQua2V5KSkudmFsdWVcIlxuICAgIFt0eHRPcHRpb25zXT1cIidPcHRpb25zJ1wiXG4gICAgW3R4dFF1ZXJ5XT1cIidRdWVyeSdcIlxuICAgIFt0eHRTdWJtaXRdPVwiJ1NhdmUnXCJcbiAgICAoc3B4Q2FuY2VsKT1cIm9uQXV0b2NvbXBsZXRlQ2FuY2VsKClcIlxuICAgIChzcHhTZWFyY2gpPVwib25BdXRvY29tcGxldGVTZWFyY2goJGV2ZW50KVwiXG4gICAgKHNweFN1Ym1pdCk9XCJvbkF1dG9jb21wbGV0ZVNhdmUoJGV2ZW50KVwiPlxuICA8L3NweC1hdXRvY29tcGxldGUtc2VhcmNoPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgIDxzcHgtZm9ybS1zZWN0aW9uXG4gICAgKm5nRm9yPVwibGV0IHNweFNlY3Rpb24gb2Ygc3B4Rm9ybS5zZWN0aW9uczsgbGV0IHNweFNlY3Rpb25JbmRleCA9IGluZGV4O1wiXG4gICAgW3NweFNob3dUaXRsZV09XCIhc3B4U2VjdGlvbi5zaG93VGl0bGUgfHwgc3B4U2VjdGlvbi5zaG93VGl0bGUoKVwiXG4gICAgW3NweEluZGV4XT1cInNweFNlY3Rpb25JbmRleCArIDFcIlxuICAgIFtzcHhUaXRsZV09XCJzcHhTZWN0aW9uLnRpdGxlID8gKHNweFNlY3Rpb24udGl0bGUoKSB8IHRyYW5zbGF0ZSB8IGNhcGl0YWxpemUpIDogdW5kZWZpbmVkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3B4RmllbGQgb2Ygc3B4U2VjdGlvbi5maWVsZHM7IGxldCBzcHhGaWVsZEluZGV4ID0gaW5kZXg7XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3B4RmllbGQuc2hvdyA9PT0gdW5kZWZpbmVkIHx8IHNweEZpZWxkLnNob3coKVwiPlxuICAgICAgICA8c3B4LWJ1dHRvbiAqbmdJZj1cInNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZUJ1dHRvblwiXG4gICAgICAgICAgW3NweEZ1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICBbc3B4U2V2ZXJpdHldPVwic3B4RmllbGQuc2V2ZXJpdHkgPyBzcHhGaWVsZC5zZXZlcml0eSgpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICBbc3B4VHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgKHNweENsaWNrKT1cIm9uQ2xpY2soc3B4RmllbGQpXCJcbiAgICAgICAgICA+e3sgKHNweEZpZWxkLmxhYmVsID8gc3B4RmllbGQubGFiZWwoKSA6IHNweEZpZWxkLmtleSkgfCB0cmFuc2xhdGUgIHwgY2FwaXRhbGl6ZSB9fTwvc3B4LWJ1dHRvbj5cblxuICAgICAgICA8c3B4LWlucHV0XG4gICAgICAgICAgKm5nSWY9XCJzcHhGaWVsZC50eXBlKCkgPT09IHR5cGVPdmVybGF5IHx8IHNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZU92ZXJsYXlOdW1iZXIgfHwgc3B4RmllbGQudHlwZSgpID09PSB0eXBlRmxvYXQgfHwgc3B4RmllbGQudHlwZSgpID09PSB0eXBlTnVtYmVyIHx8IHNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZVRleHQgfHwgc3B4RmllbGQudHlwZSgpID09PSB0eXBlQXV0b2NvbXBsZXRlIHx8IHNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZU51bWVyaWNLZXlib2FyZFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cIiRhbnkodGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkpXCJcbiAgICAgICAgICBbc3B4QXV0b2ZvY3VzXT1cInNweEZpZWxkLmF1dG9mb2N1cyA/IHNweEZpZWxkLmF1dG9mb2N1cygpIDogZmFsc2VcIlxuICAgICAgICAgIFtzcHhDYXBpdGFsaXplXT1cInNweEZpZWxkLmNhcGl0YWxpemUgPyBzcHhGaWVsZC5jYXBpdGFsaXplKCkgOiBmYWxzZVwiXG4gICAgICAgICAgW3NweExhYmVsXT1cIihzcHhGaWVsZC5sYWJlbCA/IHNweEZpZWxkLmxhYmVsKCkgOiBzcHhGaWVsZC5rZXkpIHwgdHJhbnNsYXRlICB8IGNhcGl0YWxpemVcIlxuICAgICAgICAgIFtzcHhOYW1lXT1cInNweEZpZWxkLmtleVwiXG4gICAgICAgICAgW3NweFBhdHRlcm5dPVwic3B4RmllbGQudHlwZSgpID09PSB0eXBlTnVtZXJpY0tleWJvYXJkID8gJ1xcXFxkKicgOiB1bmRlZmluZWRcIlxuICAgICAgICAgIFtzcHhSZWFkb25seV09XCJzcHhGaWVsZC5yZWFkb25seSA/IHNweEZpZWxkLnJlYWRvbmx5KCkgOiBmYWxzZVwiXG4gICAgICAgICAgW3NweFJlcXVpcmVkXT1cImhhc1JlcXVpcmVkRmllbGQodGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkhKVwiXG4gICAgICAgICAgW3NweFNob3dTZWFyY2hdPVwic3B4RmllbGQudHlwZSgpID09PSB0eXBlQXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICBbc3B4U2hvd0hlbHBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtzcHhTaG93VmFsaWRhdGlvbk1lc3NhZ2VzXT1cInRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpISAmJiB0aGlzLnNweEZvcm1Hcm91cC5nZXQoc3B4RmllbGQua2V5KSEuZXJyb3JzICYmIHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpIS50b3VjaGVkXCJcbiAgICAgICAgICBbc3B4U3RlcF09XCJzcHhGaWVsZC5zdGVwID8gc3B4RmllbGQuc3RlcCgpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICBbc3B4VHlwZV09XCJzcHhGaWVsZC50eXBlKClcIlxuICAgICAgICAgIFtzcHhWYWxpZGF0b3JzXT1cImdldFJhd1ZhbGlkYXRvcnModGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkhKVwiXG4gICAgICAgICAgW3NweFN1Z2dlc3Rpb25zXT1cInNweEZpZWxkLnN1Z2dlc3Rpb25zRml4ZWQgPyBzcHhGaWVsZC5zdWdnZXN0aW9uc0ZpeGVkKCkgOiB0aGlzLnNweFN1Z2dlc3Rpb25zW3NweEZpZWxkLmtleV1cIlxuICAgICAgICAgIChzcHhCbHVyKT1cIm9uQmx1cihzcHhGaWVsZClcIlxuICAgICAgICAgIChzcHhTZWFyY2gpPVwib25TZWFyY2goc3B4RmllbGQpXCI+XG4gICAgICAgICAgPHNweC12YWxpZGF0ZS1jb250cm9sIFtjb250cm9sXT1cIiRhbnkodGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkpXCIgW2xhYmVsXT1cIihzcHhGaWVsZC5sYWJlbCA/IHNweEZpZWxkLmxhYmVsKCkgOiBzcHhGaWVsZC5rZXkpfCB0cmFuc2xhdGUgIHwgY2FwaXRhbGl6ZVwiPjwvc3B4LXZhbGlkYXRlLWNvbnRyb2w+XG4gICAgICAgIDwvc3B4LWlucHV0PlxuXG4gICAgICAgIDxzcHgtaW5wdXRcbiAgICAgICAgICAqbmdJZj1cInNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZVJhZGlvXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiJGFueSh0aGlzLnNweEZvcm1Hcm91cC5nZXQoc3B4RmllbGQua2V5KSlcIlxuICAgICAgICAgIFtzcHhMYWJlbF09XCIoc3B4RmllbGQubGFiZWwgPyBzcHhGaWVsZC5sYWJlbCgpIDogc3B4RmllbGQua2V5KSB8IHRyYW5zbGF0ZSB8IGNhcGl0YWxpemVcIlxuICAgICAgICAgIFtzcHhOYW1lXT1cInNweEZpZWxkLmtleVwiXG4gICAgICAgICAgW3NweFJlYWRvbmx5XT1cInNweEZpZWxkLnJlYWRvbmx5ID8gc3B4RmllbGQucmVhZG9ubHkoKSA6IGZhbHNlXCJcbiAgICAgICAgICBbc3B4UmVxdWlyZWRdPVwiaGFzUmVxdWlyZWRGaWVsZCh0aGlzLnNweEZvcm1Hcm91cC5nZXQoc3B4RmllbGQua2V5KSEpXCJcbiAgICAgICAgICBbc3B4U2hvd0hlbHBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtzcHhTaG93VmFsaWRhdGlvbk1lc3NhZ2VzXT1cInRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpISAmJiB0aGlzLnNweEZvcm1Hcm91cC5nZXQoc3B4RmllbGQua2V5KSEuZXJyb3JzICYmIHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpIS50b3VjaGVkXCJcbiAgICAgICAgICBbc3B4U3VnZ2VzdGlvbnNdPVwic3B4RmllbGQuc3VnZ2VzdGlvbnNGaXhlZCA/IHNweEZpZWxkLnN1Z2dlc3Rpb25zRml4ZWQoKSA6IHRoaXMuc3B4U3VnZ2VzdGlvbnNbc3B4RmllbGQua2V5XVwiXG4gICAgICAgICAgW3NweFR5cGVdPVwidHlwZVJhZGlvXCJcbiAgICAgICAgICBbc3B4VmFsaWRhdG9yc109XCJnZXRSYXdWYWxpZGF0b3JzKHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpISlcIj5cbiAgICAgICAgICA8c3B4LXZhbGlkYXRlLWNvbnRyb2wgW2NvbnRyb2xdPVwiJGFueSh0aGlzLnNweEZvcm1Hcm91cC5nZXQoc3B4RmllbGQua2V5KSlcIiBbbGFiZWxdPVwiKHNweEZpZWxkLmxhYmVsID8gc3B4RmllbGQubGFiZWwoKSA6IHNweEZpZWxkLmtleSkgfCB0cmFuc2xhdGUgfCBjYXBpdGFsaXplXCI+PC9zcHgtdmFsaWRhdGUtY29udHJvbD5cbiAgICAgICAgPC9zcHgtaW5wdXQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zcHgtZm9ybS1zZWN0aW9uPlxuICBcbiAgPHNweC1idXR0b24gKm5nRm9yPVwibGV0IHNweEJ1dHRvbiBvZiBzcHhGb3JtLmJ1dHRvbnNcIlxuICAgIFtzcHhGdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgW3NweFNldmVyaXR5XT1cInNweEJ1dHRvbi5zZXZlcml0eVwiXG4gICAgW3NweFR5cGVdPVwic3B4QnV0dG9uLnR5cGVcIlxuICAgIChzcHhDbGljayk9XCJzcHhCdXR0b24ub25DbGljayA/IHNweEJ1dHRvbi5vbkNsaWNrKCkgOiB1bmRlZmluZWRcIj5cbiAgICB7eyAoKHNweEJ1dHRvbiAmJiBzcHhCdXR0b24ubGFiZWwpID8gc3B4QnV0dG9uLmxhYmVsKCkgOiAnJykgfCB0cmFuc2xhdGUgfCBjYXBpdGFsaXplIH19XG4gIDwvc3B4LWJ1dHRvbj5cbjwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTcHhGb3JtVmlld0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNweEZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgc3B4Rm9ybSE6IFNweEZvcm1JO1xuICBASW5wdXQoKSBzcHhTdWdnZXN0aW9ucyE6IGFueTtcbiAgQE91dHB1dCgpIHNweEJsdXI6IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBTcHhGb3JtRmllbGRJLCB2YWx1ZVBhaXI6IFNweFZhbHVlUGFpcjxhbnk+IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBTcHhGb3JtRmllbGRJLCB2YWx1ZVBhaXI6IFNweFZhbHVlUGFpcjxhbnk+IH0+KCk7XG4gIEBPdXRwdXQoKSBzcHhDbGljazogRXZlbnRFbWl0dGVyPHsgZmllbGQ6IFNweEZvcm1GaWVsZEkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IFNweEZvcm1GaWVsZEkgfT4oKTtcbiAgQE91dHB1dCgpIHNweFNlYXJjaDogRXZlbnRFbWl0dGVyPHsgZmllbGQ6IFNweEZvcm1GaWVsZEksIHZhbHVlUGFpcjogU3B4VmFsdWVQYWlyPGFueT4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IFNweEZvcm1GaWVsZEksIHZhbHVlUGFpcjogU3B4VmFsdWVQYWlyPGFueT4gfT4oKTtcbiAgQFZpZXdDaGlsZHJlbihTcHhJbnB1dENvbXBvbmVudCkgc3B4SW5wdXRzITogUXVlcnlMaXN0PFNweElucHV0Q29tcG9uZW50PjtcbiAgYXV0b2NvbXBsZXRlRmllbGQ/OiBTcHhGb3JtRmllbGRJO1xuXG4gIHR5cGVBdXRvY29tcGxldGUgPSBTcHhJbnB1dFR5cGVFbnVtLmF1dG9jb21wbGV0ZTtcbiAgdHlwZUJ1dHRvbiA9IFNweElucHV0VHlwZUVudW0uYnV0dG9uO1xuICB0eXBlRmxvYXQgPSBTcHhJbnB1dFR5cGVFbnVtLmZsb2F0O1xuICB0eXBlTnVtYmVyID0gU3B4SW5wdXRUeXBlRW51bS5udW1iZXI7XG4gIHR5cGVSYWRpbyA9IFNweElucHV0VHlwZUVudW0ucmFkaW87XG4gIHR5cGVUZXh0ID0gU3B4SW5wdXRUeXBlRW51bS50ZXh0O1xuICB0eXBlTnVtZXJpY0tleWJvYXJkID0gU3B4SW5wdXRUeXBlRW51bS50ZXh0TnVtZXJpY0tleWJvYXJkO1xuICB0eXBlT3ZlcmxheSA9IFNweElucHV0VHlwZUVudW0ub3ZlcmxheTtcbiAgdHlwZU92ZXJsYXlOdW1iZXIgPSBTcHhJbnB1dFR5cGVFbnVtLm92ZXJsYXlOdW1iZXI7XG5cbiAgc2V0QXV0b2ZvY3VzKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnNweElucHV0cy5maW5kKGlucHV0ID0+IGlucHV0LnNweE5hbWUgPT09IGtleSk7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBmaWVsZC5zZXRGb2N1c0luKCk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKGZpZWxkOiBTcHhGb3JtRmllbGRJKSB7XG4gICAgdGhpcy5zcHhCbHVyLmVtaXQoe1xuICAgICAgZmllbGQsXG4gICAgICB2YWx1ZVBhaXI6IHRoaXMuc3B4Rm9ybUdyb3VwLmdldChmaWVsZC5rZXkpIS52YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2xpY2soZmllbGQ6IFNweEZvcm1GaWVsZEkpIHtcbiAgICB0aGlzLnNweENsaWNrLmVtaXQoe1xuICAgICAgZmllbGQsXG4gICAgfSk7XG4gIH1cblxuICBvbkF1dG9jb21wbGV0ZUNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgb25BdXRvY29tcGxldGVTZWFyY2godmFsdWVQYWlyOiBTcHhWYWx1ZVBhaXI8YW55Pik6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUZpZWxkKSB7XG4gICAgICB0aGlzLnNweFNlYXJjaC5lbWl0KHtcbiAgICAgICAgZmllbGQ6IHRoaXMuYXV0b2NvbXBsZXRlRmllbGQsXG4gICAgICAgIHZhbHVlUGFpcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQXV0b2NvbXBsZXRlU2F2ZSh2YWx1ZVBhaXI6IFNweFZhbHVlUGFpcjxhbnk+KSB7XG4gICAgdGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHRoaXMuYXV0b2NvbXBsZXRlRmllbGQhLmtleSk/LnNldFZhbHVlKHZhbHVlUGFpcik7XG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIG9uU2VhcmNoKGZpZWxkOiBTcHhGb3JtRmllbGRJKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZCA9IGZpZWxkO1xuICB9XG5cbiAgZ2V0UmF3VmFsaWRhdG9ycyhmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgcmV0dXJuIChmb3JtQ29udHJvbCBhcyBhbnkpLl9yYXdWYWxpZGF0b3JzO1xuICB9XG5cbiAgaGFzUmVxdWlyZWRGaWVsZChhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGlmIChhYnN0cmFjdENvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSBhYnN0cmFjdENvbnRyb2wudmFsaWRhdG9yKHt9IGFzIEFic3RyYWN0Q29udHJvbCk7XG4gICAgICBpZiAodmFsaWRhdG9yICYmIHZhbGlkYXRvclsncmVxdWlyZWQnXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKChhYnN0cmFjdENvbnRyb2wgYXMgYW55KVsnY29udHJvbHMnXSkge1xuICAgICAgZm9yIChjb25zdCBjb250cm9sTmFtZSBpbiAoYWJzdHJhY3RDb250cm9sIGFzIGFueSlbJ2NvbnRyb2xzJ10pIHtcbiAgICAgICAgaWYgKChhYnN0cmFjdENvbnRyb2wgYXMgYW55KVsnY29udHJvbHMnXVtjb250cm9sTmFtZV0pIHtcbiAgICAgICAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEZpZWxkKChhYnN0cmFjdENvbnRyb2wgYXMgYW55KVsnY29udHJvbHMnXVtjb250cm9sTmFtZV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGluaXRpYWxGb3JtVmFsdWUoc2VjdGlvbnM6IFNweEZvcm1TZWN0aW9uSVtdKSB7XG4gICAgY29uc3QgZm9ybU9iamVjdDogYW55ID0ge307XG4gICAgc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBmb3JtT2JqZWN0W2ZpZWxkLmtleV0gPSBbZmllbGQuZGVmYXVsdFZhbHVlID8gZmllbGQuZGVmYXVsdFZhbHVlKCkgOiBudWxsLCBmaWVsZC52YWxpZGF0b3JzID8gWy4uLmZpZWxkLnZhbGlkYXRvcnMoKV0gOiBbXV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybU9iamVjdDtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVGb3JtKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgc2VjdGlvbnM6IFNweEZvcm1TZWN0aW9uSVtdKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gZm9ybUJ1aWxkZXIuZ3JvdXAodGhpcy5pbml0aWFsRm9ybVZhbHVlKHNlY3Rpb25zKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWZvcm0uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc29mdHBhay9jb21wb25lbnRzL3NweC1mb3JtLXZpZXcvc3B4LWZvcm0uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTcHhGb3JtQnV0dG9uSSB9IGZyb20gXCIuL3NweC1mb3JtLWJ1dHRvbi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFNweEZvcm1TZWN0aW9uSSB9IGZyb20gXCIuL3NweC1mb3JtLXNlY3Rpb24uaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3B4Rm9ybUkge1xuICAgIGJ1dHRvbnM6IFNweEZvcm1CdXR0b25JW107XG4gICAgc2VjdGlvbnM6IFNweEZvcm1TZWN0aW9uSVtdO1xufVxuIl19
@@ -0,0 +1,21 @@
1
+ export const calcCheckDigit = (container) => {
2
+ container = container.toUpperCase();
3
+ const mapping = {
4
+ 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9,
5
+ A: 10, B: 12, C: 13, D: 14, E: 15, F: 16, G: 17, H: 18, I: 19, J: 20, K: 21, L: 23, M: 24,
6
+ N: 25, O: 26, P: 27, Q: 28, R: 29, S: 30, T: 31, U: 32, V: 34, W: 35, X: 36, Y: 37, Z: 38
7
+ };
8
+ let total = 0;
9
+ for (let i = 0; i < container.length; i++) {
10
+ const cChar = container.substr(i, 1);
11
+ const value = mapping[cChar];
12
+ const multiplier = Math.pow(2, i);
13
+ total = total + (value * multiplier);
14
+ }
15
+ let outcome = total % 11;
16
+ if (outcome === 10) {
17
+ outcome = 0;
18
+ }
19
+ return outcome.toString();
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsYy1jaGVjay1kaWdpdC5mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NvZnRwYWsvY29tcG9uZW50cy9zcHgtaGVscGVycy9jYWxjLWNoZWNrLWRpZ2l0LmZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFNBQWlCLEVBQVUsRUFBRTtJQUMxRCxTQUFTLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXBDLE1BQU0sT0FBTyxHQUFHO1FBQ2QsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUQsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekYsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7S0FDMUYsQ0FBQztJQUVGLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUksT0FBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDekIsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkIsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM1QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY2FsY0NoZWNrRGlnaXQgPSAoY29udGFpbmVyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb250YWluZXIgPSBjb250YWluZXIudG9VcHBlckNhc2UoKTtcblxuICBjb25zdCBtYXBwaW5nID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG4gICAgQTogMTAsIEI6IDEyLCBDOiAxMywgRDogMTQsIEU6IDE1LCBGOiAxNiwgRzogMTcsIEg6IDE4LCBJOiAxOSwgSjogMjAsIEs6IDIxLCBMOiAyMywgTTogMjQsXG4gICAgTjogMjUsIE86IDI2LCBQOiAyNywgUTogMjgsIFI6IDI5LCBTOiAzMCwgVDogMzEsIFU6IDMyLCBWOiAzNCwgVzogMzUsIFg6IDM2LCBZOiAzNywgWjogMzhcbiAgfTtcblxuICBsZXQgdG90YWwgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGFpbmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY0NoYXIgPSBjb250YWluZXIuc3Vic3RyKGksIDEpO1xuICAgIGNvbnN0IHZhbHVlID0gKG1hcHBpbmcgYXMgYW55KVtjQ2hhcl07XG4gICAgY29uc3QgbXVsdGlwbGllciA9IE1hdGgucG93KDIsIGkpO1xuICAgIHRvdGFsID0gdG90YWwgKyAodmFsdWUgKiBtdWx0aXBsaWVyKTtcbiAgfVxuXG4gIGxldCBvdXRjb21lID0gdG90YWwgJSAxMTtcbiAgaWYgKG91dGNvbWUgPT09IDEwKSB7XG4gICAgb3V0Y29tZSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0Y29tZS50b1N0cmluZygpO1xufVxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './calc-check-digit.function';
2
+ export * from './spx-severity.enum';
3
+ export * from './value-pair-to-value.function';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NvZnRwYWsvY29tcG9uZW50cy9zcHgtaGVscGVycy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jYWxjLWNoZWNrLWRpZ2l0LmZ1bmN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc3B4LXNldmVyaXR5LmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi92YWx1ZS1wYWlyLXRvLXZhbHVlLmZ1bmN0aW9uJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHBhay1jb21wb25lbnRzLXNweC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc29mdHBhay9jb21wb25lbnRzL3NweC1oZWxwZXJzL3NvZnRwYWstY29tcG9uZW50cy1zcHgtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,9 @@
1
+ export var SpxSeverityEnum;
2
+ (function (SpxSeverityEnum) {
3
+ SpxSeverityEnum["error"] = "error";
4
+ SpxSeverityEnum["info"] = "info";
5
+ SpxSeverityEnum["success"] = "success";
6
+ SpxSeverityEnum["unknown"] = "unknown";
7
+ SpxSeverityEnum["warning"] = "warning";
8
+ })(SpxSeverityEnum || (SpxSeverityEnum = {}));
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LXNldmVyaXR5LmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWhlbHBlcnMvc3B4LXNldmVyaXR5LmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksZUFNWDtBQU5ELFdBQVksZUFBZTtJQUN6QixrQ0FBZSxDQUFBO0lBQ2YsZ0NBQWEsQ0FBQTtJQUNiLHNDQUFtQixDQUFBO0lBQ25CLHNDQUFtQixDQUFBO0lBQ25CLHNDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFOVyxlQUFlLEtBQWYsZUFBZSxRQU0xQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFNweFNldmVyaXR5RW51bSB7XG4gIGVycm9yID0gJ2Vycm9yJyxcbiAgaW5mbyA9ICdpbmZvJyxcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcbiAgdW5rbm93biA9ICd1bmtub3duJyxcbiAgd2FybmluZyA9ICd3YXJuaW5nJyxcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export const valuePairToValue = (pair) => {
2
+ if (pair === null || (typeof pair === 'object' && pair.value === undefined)) {
3
+ return null;
4
+ }
5
+ return pair?.value || pair?.value === false || pair?.value === null || pair?.value === '' || pair?.value === 0 ? pair?.value : pair;
6
+ };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtcGFpci10by12YWx1ZS5mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NvZnRwYWsvY29tcG9uZW50cy9zcHgtaGVscGVycy92YWx1ZS1wYWlyLXRvLXZhbHVlLmZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUU7SUFDMUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHZhbHVlUGFpclRvVmFsdWUgPSAocGFpcjogYW55KSA9PiB7XG4gICAgaWYgKHBhaXIgPT09IG51bGwgfHwgKHR5cGVvZiBwYWlyID09PSAnb2JqZWN0JyAmJiBwYWlyLnZhbHVlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcj8udmFsdWUgfHwgcGFpcj8udmFsdWUgPT09IGZhbHNlIHx8IHBhaXI/LnZhbHVlID09PSBudWxsIHx8IHBhaXI/LnZhbHVlID09PSAnJyB8fCBwYWlyPy52YWx1ZSA9PT0gMCA/IHBhaXI/LnZhbHVlIDogcGFpcjtcbn07XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './spx-value-interface';
2
+ export * from './spx-input-box.component';
3
+ export * from './spx-input-text.component';
4
+ export * from './spx-input.component';
5
+ export * from './spx-input-type.enum';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NvZnRwYWsvY29tcG9uZW50cy9zcHgtaW5wdXRzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcHgtdmFsdWUtaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3B4LWlucHV0LWJveC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcHgtaW5wdXQtdGV4dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcHgtaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3B4LWlucHV0LXR5cGUuZW51bSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHBhay1jb21wb25lbnRzLXNweC1pbnB1dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWlucHV0cy9zb2Z0cGFrLWNvbXBvbmVudHMtc3B4LWlucHV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,94 @@
1
+ import { NgFor, NgIf } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { SpxButtonComponent } from '@softpak/components/spx-button';
4
+ import { fromEvent } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ export class SpxDropdownComponent {
7
+ constructor() {
8
+ this.focusPosition = 0;
9
+ this.spxSuggestions = [];
10
+ this.spxSelect = new EventEmitter();
11
+ }
12
+ ngOnInit() {
13
+ this.listenToKeyUp();
14
+ }
15
+ ngOnChanges(changes) {
16
+ this.focusPosition = 0;
17
+ }
18
+ ngOnDestroy() {
19
+ this.subscriptionKeyUp?.unsubscribe();
20
+ }
21
+ handleSuggestionClick(valuePair) {
22
+ this.select(valuePair);
23
+ }
24
+ listenToKeyUp() {
25
+ this.subscriptionKeyUp = fromEvent(window, 'keyup').subscribe((event) => {
26
+ if (event.key === 'ArrowUp' && this.focusPosition > 0) {
27
+ this.focusPosition = this.focusPosition - 1;
28
+ event.preventDefault();
29
+ }
30
+ if (event.key === 'ArrowDown' && this.focusPosition < this.spxSuggestions.length - 1) {
31
+ this.focusPosition = this.focusPosition + 1;
32
+ event.preventDefault();
33
+ }
34
+ if (event.key === 'Enter' && this.spxSuggestions.length > 0) {
35
+ this.select(this.spxSuggestions.at(this.focusPosition));
36
+ event.preventDefault();
37
+ }
38
+ });
39
+ }
40
+ select(valuePair) {
41
+ this.focusPosition = 0;
42
+ this.spxSelect.emit(valuePair);
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpxDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SpxDropdownComponent, isStandalone: true, selector: "spx-dropdown", inputs: { spxSuggestions: "spxSuggestions" }, outputs: { spxSelect: "spxSelect" }, usesOnChanges: true, ngImport: i0, template: `<div class="relative text-black">
46
+ <div
47
+ class="absolute bg-gray-100 left-0 right-0 z-20">
48
+ <button
49
+ *ngFor="let valuePair of this.spxSuggestions; let i = index"
50
+ class="text-black block w-full p-2 border border-gray-200 rounded-lg shadow hover:bg-gray-200 flex items-center text-left"
51
+ [class.bg-gray-100]="i === this.focusPosition"
52
+ [class.bg-white]="i !== this.focusPosition"
53
+ (click)="this.handleSuggestionClick(valuePair)"
54
+ [attr.tabindex]="-1"
55
+ [attr.type]="'button'">
56
+ <div class="flex-1 p-1 font-bold text-lg">{{valuePair?.description}}</div>
57
+ <spx-button (spxClick)="this.handleSuggestionClick(valuePair)" [spxType]="'button'" [spxTabIndex]="-1">Select</spx-button>
58
+ </button>
59
+ </div>
60
+ </div>`, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: SpxButtonComponent, selector: "spx-button", inputs: ["spxDisabled", "spxClass", "spxClassObject", "spxForm", "spxFullHeight", "spxFullWidth", "spxSeverity", "spxSize", "spxTabIndex", "spxType"], outputs: ["spxClick"] }] }); }
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpxDropdownComponent, decorators: [{
63
+ type: Component,
64
+ args: [{
65
+ selector: 'spx-dropdown',
66
+ standalone: true,
67
+ imports: [
68
+ NgIf,
69
+ NgFor,
70
+ SpxButtonComponent,
71
+ ],
72
+ template: `<div class="relative text-black">
73
+ <div
74
+ class="absolute bg-gray-100 left-0 right-0 z-20">
75
+ <button
76
+ *ngFor="let valuePair of this.spxSuggestions; let i = index"
77
+ class="text-black block w-full p-2 border border-gray-200 rounded-lg shadow hover:bg-gray-200 flex items-center text-left"
78
+ [class.bg-gray-100]="i === this.focusPosition"
79
+ [class.bg-white]="i !== this.focusPosition"
80
+ (click)="this.handleSuggestionClick(valuePair)"
81
+ [attr.tabindex]="-1"
82
+ [attr.type]="'button'">
83
+ <div class="flex-1 p-1 font-bold text-lg">{{valuePair?.description}}</div>
84
+ <spx-button (spxClick)="this.handleSuggestionClick(valuePair)" [spxType]="'button'" [spxTabIndex]="-1">Select</spx-button>
85
+ </button>
86
+ </div>
87
+ </div>`,
88
+ }]
89
+ }], propDecorators: { spxSuggestions: [{
90
+ type: Input
91
+ }], spxSelect: [{
92
+ type: Output
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NvZnRwYWsvY29tcG9uZW50cy9zcHgtaW5wdXRzL3NweC1kcm9wZG93bi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBMkIvQyxNQUFNLE9BQU8sb0JBQW9CO0lBekJqQztRQTBCWSxrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNuQixtQkFBYyxHQUE4QyxFQUFFLENBQUM7UUFDOUQsY0FBUyxHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQztLQXdDOUY7SUFyQ0MsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFrRDtRQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3RFLElBQUssS0FBdUIsQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixDQUFDO1lBQ0QsSUFBSyxLQUF1QixDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDNUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFLLEtBQXVCLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFFLENBQUMsQ0FBQztnQkFDekQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBa0Q7UUFDL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0ExQ1Usb0JBQW9CO21HQUFwQixvQkFBb0IsZ0xBakJyQjs7Ozs7Ozs7Ozs7Ozs7O09BZUwsNERBbEJILEtBQUssbUhBQ0wsa0JBQWtCOzs0RkFtQlQsb0JBQW9CO2tCQXpCaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsa0JBQWtCO3FCQUNuQjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztPQWVMO2lCQUNOOzhCQUdVLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcHhWYWx1ZVBhaXIgfSBmcm9tICcuL3NweC12YWx1ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3B4QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtYnV0dG9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NweC1kcm9wZG93bicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIFNweEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdGV4dC1ibGFja1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJhYnNvbHV0ZSBiZy1ncmF5LTEwMCBsZWZ0LTAgcmlnaHQtMCB6LTIwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZVBhaXIgb2YgdGhpcy5zcHhTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1ibGFjayBibG9jayB3LWZ1bGwgcC0yIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3cgaG92ZXI6YmctZ3JheS0yMDAgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1sZWZ0XCJcbiAgICAgICAgW2NsYXNzLmJnLWdyYXktMTAwXT1cImkgPT09IHRoaXMuZm9jdXNQb3NpdGlvblwiXG4gICAgICAgIFtjbGFzcy5iZy13aGl0ZV09XCJpICE9PSB0aGlzLmZvY3VzUG9zaXRpb25cIlxuICAgICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2sodmFsdWVQYWlyKVwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgW2F0dHIudHlwZV09XCInYnV0dG9uJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIHAtMSBmb250LWJvbGQgdGV4dC1sZ1wiPnt7dmFsdWVQYWlyPy5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICA8c3B4LWJ1dHRvbiAoc3B4Q2xpY2spPVwidGhpcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2sodmFsdWVQYWlyKVwiIFtzcHhUeXBlXT1cIididXR0b24nXCIgW3NweFRhYkluZGV4XT1cIi0xXCI+U2VsZWN0PC9zcHgtYnV0dG9uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIFNweERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBmb2N1c1Bvc2l0aW9uID0gMDtcbiAgQElucHV0KCkgc3B4U3VnZ2VzdGlvbnM6IFNweFZhbHVlUGFpcjxib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nPltdID0gW107XG4gIEBPdXRwdXQoKSBzcHhTZWxlY3Q6IEV2ZW50RW1pdHRlcjxTcHhWYWx1ZVBhaXI8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPFNweFZhbHVlUGFpcjxhbnk+PigpO1xuICBzdWJzY3JpcHRpb25LZXlVcD86IFN1YnNjcmlwdGlvbjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlblRvS2V5VXAoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25LZXlVcD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljayh2YWx1ZVBhaXI6IFNweFZhbHVlUGFpcjxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPikge1xuICAgIHRoaXMuc2VsZWN0KHZhbHVlUGFpcik7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRvS2V5VXAoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25LZXlVcCA9IGZyb21FdmVudCh3aW5kb3csICdrZXl1cCcpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmICgoZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkua2V5ID09PSAnQXJyb3dVcCcgJiYgdGhpcy5mb2N1c1Bvc2l0aW9uID4gMCkge1xuICAgICAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSB0aGlzLmZvY3VzUG9zaXRpb24gLSAxO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgaWYgKChldmVudCBhcyBLZXlib2FyZEV2ZW50KS5rZXkgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuZm9jdXNQb3NpdGlvbiA8IHRoaXMuc3B4U3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSB0aGlzLmZvY3VzUG9zaXRpb24gKyAxO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgaWYgKChldmVudCBhcyBLZXlib2FyZEV2ZW50KS5rZXkgPT09ICdFbnRlcicgJiYgdGhpcy5zcHhTdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc3B4U3VnZ2VzdGlvbnMuYXQodGhpcy5mb2N1c1Bvc2l0aW9uKSEpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3QodmFsdWVQYWlyOiBTcHhWYWx1ZVBhaXI8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4pOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSAwO1xuICAgIHRoaXMuc3B4U2VsZWN0LmVtaXQodmFsdWVQYWlyKTtcbiAgfVxufVxuIl19