@abgov/angular-components 3.0.0-alpha.1 → 3.0.0-alpha.10

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 (126) hide show
  1. package/README.md +12 -7
  2. package/esm2022/index.mjs +4 -1
  3. package/esm2022/lib/angular-components.module.mjs +4 -4
  4. package/esm2022/lib/checked-directive.mjs +7 -6
  5. package/esm2022/lib/components/accordion/accordion.mjs +91 -0
  6. package/esm2022/lib/components/badge/badge.mjs +60 -0
  7. package/esm2022/lib/components/block/block.mjs +58 -0
  8. package/esm2022/lib/components/button/button.mjs +85 -0
  9. package/esm2022/lib/components/button-group/button-group.mjs +54 -0
  10. package/esm2022/lib/components/callout/callout.mjs +77 -0
  11. package/esm2022/lib/components/card/card.mjs +54 -0
  12. package/esm2022/lib/components/card-actions/card-actions.mjs +24 -0
  13. package/esm2022/lib/components/card-content/card-content.mjs +24 -0
  14. package/esm2022/lib/components/card-image/card-image.mjs +36 -0
  15. package/esm2022/lib/components/checkbox/checkbox.mjs +147 -0
  16. package/esm2022/lib/components/chip/chip.mjs +77 -0
  17. package/esm2022/lib/components/circular-progress/circular-progress.mjs +48 -0
  18. package/esm2022/lib/components/column-layout/column-layout.mjs +24 -0
  19. package/esm2022/lib/components/container/container.mjs +86 -0
  20. package/esm2022/lib/components/date-picker/date-picker.mjs +123 -0
  21. package/esm2022/lib/components/details/details.mjs +59 -0
  22. package/esm2022/lib/components/divider/divider.mjs +44 -0
  23. package/esm2022/lib/components/dropdown/dropdown.mjs +153 -0
  24. package/esm2022/lib/components/dropdown-item/dropdown-item.mjs +44 -0
  25. package/esm2022/lib/components/file-upload-card/file-upload-card.mjs +63 -0
  26. package/esm2022/lib/components/file-upload-input/file-upload-input.mjs +70 -0
  27. package/esm2022/lib/components/footer/footer.mjs +38 -0
  28. package/esm2022/lib/components/footer-meta-section/footer-meta-section.mjs +24 -0
  29. package/esm2022/lib/components/footer-nav-section/footer-nav-section.mjs +39 -0
  30. package/esm2022/lib/components/form-item/form-item-slot.mjs +24 -0
  31. package/esm2022/lib/components/form-item/form-item.mjs +76 -0
  32. package/esm2022/lib/components/form-step/form-step.mjs +28 -0
  33. package/esm2022/lib/components/form-stepper/form-stepper.mjs +62 -0
  34. package/esm2022/lib/components/grid/grid.mjs +55 -0
  35. package/esm2022/lib/components/header/header.mjs +58 -0
  36. package/esm2022/lib/components/header-menu/header-menu.mjs +38 -0
  37. package/esm2022/lib/components/hero-banner/hero-banner.mjs +64 -0
  38. package/esm2022/lib/components/icon/icon.mjs +81 -0
  39. package/esm2022/lib/components/icon-button/icon-button.mjs +82 -0
  40. package/esm2022/lib/components/index.mjs +59 -0
  41. package/esm2022/lib/components/input/input.mjs +232 -0
  42. package/esm2022/lib/components/microsite-header/microsite-header.mjs +81 -0
  43. package/esm2022/lib/components/modal/modal.mjs +93 -0
  44. package/esm2022/lib/components/notification-banner/notification-banner.mjs +53 -0
  45. package/esm2022/lib/components/pages/pages.mjs +46 -0
  46. package/esm2022/lib/components/pagination/pagination.mjs +75 -0
  47. package/esm2022/lib/components/popover/popover.mjs +81 -0
  48. package/esm2022/lib/components/radio-group/radio-group.mjs +116 -0
  49. package/esm2022/lib/components/radio-item/radio-item.mjs +94 -0
  50. package/esm2022/lib/components/side-menu/side-menu.mjs +26 -0
  51. package/esm2022/lib/components/side-menu-group/side-menu-group.mjs +55 -0
  52. package/esm2022/lib/components/side-menu-heading/side-menu-heading.mjs +38 -0
  53. package/esm2022/lib/components/skeleton/skeleton.mjs +64 -0
  54. package/esm2022/lib/components/spacer/spacer.mjs +36 -0
  55. package/esm2022/lib/components/tab/tab.mjs +44 -0
  56. package/esm2022/lib/components/table/table.mjs +69 -0
  57. package/esm2022/lib/components/table-sort-header/table-sort-header.mjs +37 -0
  58. package/esm2022/lib/components/tabs/tabs.mjs +47 -0
  59. package/esm2022/lib/components/textarea/textarea.mjs +153 -0
  60. package/esm2022/lib/components/tooltip/tooltip.mjs +58 -0
  61. package/esm2022/lib/public-form-utils.mjs +34 -0
  62. package/esm2022/lib/validation.mjs +205 -0
  63. package/esm2022/lib/value-directive.mjs +20 -8
  64. package/fesm2022/abgov-angular-components.mjs +3813 -18
  65. package/fesm2022/abgov-angular-components.mjs.map +1 -1
  66. package/index.d.ts +3 -0
  67. package/lib/components/accordion/accordion.d.ts +21 -0
  68. package/lib/components/badge/badge.d.ts +15 -0
  69. package/lib/components/block/block.d.ts +14 -0
  70. package/lib/components/button/button.d.ts +21 -0
  71. package/lib/components/button-group/button-group.d.ts +13 -0
  72. package/lib/components/callout/callout.d.ts +17 -0
  73. package/lib/components/card/card.d.ts +13 -0
  74. package/lib/components/card-actions/card-actions.d.ts +5 -0
  75. package/lib/components/card-content/card-content.d.ts +5 -0
  76. package/lib/components/card-image/card-image.d.ts +7 -0
  77. package/lib/components/checkbox/checkbox.d.ts +35 -0
  78. package/lib/components/chip/chip.d.ts +20 -0
  79. package/lib/components/circular-progress/circular-progress.d.ts +12 -0
  80. package/lib/components/column-layout/column-layout.d.ts +5 -0
  81. package/lib/components/container/container.d.ts +19 -0
  82. package/lib/components/date-picker/date-picker.d.ts +33 -0
  83. package/lib/components/details/details.d.ts +14 -0
  84. package/lib/components/divider/divider.d.ts +11 -0
  85. package/lib/components/dropdown/dropdown.d.ts +38 -0
  86. package/lib/components/dropdown-item/dropdown-item.d.ts +11 -0
  87. package/lib/components/file-upload-card/file-upload-card.d.ts +17 -0
  88. package/lib/components/file-upload-input/file-upload-input.d.ts +18 -0
  89. package/lib/components/footer/footer.d.ts +7 -0
  90. package/lib/components/footer-meta-section/footer-meta-section.d.ts +8 -0
  91. package/lib/components/footer-nav-section/footer-nav-section.d.ts +10 -0
  92. package/lib/components/form-item/form-item-slot.d.ts +6 -0
  93. package/lib/components/form-item/form-item.d.ts +18 -0
  94. package/lib/components/form-step/form-step.d.ts +8 -0
  95. package/lib/components/form-stepper/form-stepper.d.ts +15 -0
  96. package/lib/components/grid/grid.d.ts +13 -0
  97. package/lib/components/header/header.d.ts +13 -0
  98. package/lib/components/header-menu/header-menu.d.ts +9 -0
  99. package/lib/components/hero-banner/hero-banner.d.ts +14 -0
  100. package/lib/components/icon/icon.d.ts +19 -0
  101. package/lib/components/icon-button/icon-button.d.ts +20 -0
  102. package/lib/components/index.d.ts +58 -0
  103. package/lib/components/input/input.d.ts +56 -0
  104. package/lib/components/microsite-header/microsite-header.d.ts +18 -0
  105. package/lib/components/modal/modal.d.ts +20 -0
  106. package/lib/components/notification-banner/notification-banner.d.ts +13 -0
  107. package/lib/components/pages/pages.d.ts +11 -0
  108. package/lib/components/pagination/pagination.d.ts +18 -0
  109. package/lib/components/popover/popover.d.ts +18 -0
  110. package/lib/components/radio-group/radio-group.d.ts +29 -0
  111. package/lib/components/radio-item/radio-item.d.ts +22 -0
  112. package/lib/components/side-menu/side-menu.d.ts +6 -0
  113. package/lib/components/side-menu-group/side-menu-group.d.ts +13 -0
  114. package/lib/components/side-menu-heading/side-menu-heading.d.ts +10 -0
  115. package/lib/components/skeleton/skeleton.d.ts +15 -0
  116. package/lib/components/spacer/spacer.d.ts +9 -0
  117. package/lib/components/tab/tab.d.ts +9 -0
  118. package/lib/components/table/table.d.ts +16 -0
  119. package/lib/components/table-sort-header/table-sort-header.d.ts +8 -0
  120. package/lib/components/tabs/tabs.d.ts +11 -0
  121. package/lib/components/textarea/textarea.d.ts +38 -0
  122. package/lib/components/tooltip/tooltip.d.ts +14 -0
  123. package/lib/public-form-utils.d.ts +18 -0
  124. package/lib/validation.d.ts +44 -0
  125. package/lib/value-directive.d.ts +3 -0
  126. package/package.json +5 -4
@@ -0,0 +1,205 @@
1
+ // TODO: move this into the form-utils file, since it is specific to the public form component
2
+ export function validate(field, fieldsetEl, fieldsetState, validators) {
3
+ const value = fieldsetState?.[field]?.value;
4
+ for (const validator of validators) {
5
+ const msg = validator(value);
6
+ if (msg) {
7
+ dispatchError(fieldsetEl, field, msg);
8
+ return [false, ""];
9
+ }
10
+ }
11
+ return [true, value];
12
+ }
13
+ // TODO: move this into the form-utils file, since it is specific to the public form component
14
+ function dispatchError(el, name, msg) {
15
+ el.dispatchEvent(new CustomEvent("msg", {
16
+ composed: true,
17
+ detail: {
18
+ action: "external::set:error",
19
+ data: {
20
+ name,
21
+ msg,
22
+ },
23
+ },
24
+ }));
25
+ }
26
+ export class FormValidator {
27
+ constructor(validators) {
28
+ this.validators = validators || {};
29
+ }
30
+ add(fieldName, ...validators) {
31
+ this.validators[fieldName] = validators;
32
+ }
33
+ validate(data) {
34
+ const errors = {};
35
+ Object.entries(this.validators).forEach(([name, validators]) => {
36
+ const err = validators
37
+ .map((validatorFn) => {
38
+ const errMsg = validatorFn(data[name]);
39
+ return errMsg;
40
+ })
41
+ .find((msg) => !!msg);
42
+ if (err) {
43
+ errors[name] = err;
44
+ }
45
+ });
46
+ return errors;
47
+ }
48
+ }
49
+ // **********
50
+ // Validators
51
+ // **********
52
+ export function birthDayValidator() {
53
+ return [
54
+ requiredValidator("Day is required"),
55
+ numericValidator({
56
+ min: 1,
57
+ max: 31,
58
+ minMsg: "Day must be between 1 and 31",
59
+ maxMsg: "Day must be between 1 and 31",
60
+ }),
61
+ ];
62
+ }
63
+ export function birthMonthValidator() {
64
+ return [
65
+ requiredValidator("Month is required"),
66
+ numericValidator({
67
+ min: 0,
68
+ max: 11,
69
+ minMsg: "Month must be between Jan and Dec",
70
+ maxMsg: "Month must be between Jan and Dec",
71
+ }),
72
+ ];
73
+ }
74
+ export function birthYearValidator() {
75
+ const maxYear = new Date().getFullYear();
76
+ return [
77
+ requiredValidator("Year is required"),
78
+ numericValidator({
79
+ min: 1900,
80
+ max: maxYear,
81
+ minMsg: "Year must be greater than 1900",
82
+ maxMsg: `Year must be less than ${maxYear}`,
83
+ }),
84
+ ];
85
+ }
86
+ export function requiredValidator(msg) {
87
+ return (value) => {
88
+ msg = msg || "Required";
89
+ if (typeof value === "number" && !isNaN(value)) {
90
+ return "";
91
+ }
92
+ if (value) {
93
+ return "";
94
+ }
95
+ return msg;
96
+ };
97
+ }
98
+ export function phoneNumberValidator(msg) {
99
+ const regex = new RegExp(/^\+?[\d-() ]{10,18}$/);
100
+ return regexValidator(regex, msg || "Invalid phone number");
101
+ }
102
+ export function emailValidator(msg) {
103
+ // emailregex.com
104
+ const regex = new RegExp(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
105
+ return regexValidator(regex, msg || "Invalid email address");
106
+ }
107
+ export function SINValidator() {
108
+ return (value) => {
109
+ if (!value)
110
+ return "";
111
+ const checkValue = "121121121".split("").map((c) => parseInt(c));
112
+ const valueStr = value.replace(/\D/g, "");
113
+ if (valueStr.length !== 9)
114
+ return "SIN must contain 9 numbers";
115
+ const checkSum = valueStr
116
+ .split("")
117
+ .map((c) => parseInt(c))
118
+ .map((num, index) => {
119
+ const val = num * checkValue[index];
120
+ if (val < 10) {
121
+ return val;
122
+ }
123
+ return `${val}`
124
+ .split("")
125
+ .map((c) => parseInt(c))
126
+ .reduce((acc, val) => acc * val, 1);
127
+ })
128
+ .reduce((acc, val) => acc + val, 0);
129
+ if (checkSum % 10 === 0) {
130
+ return "";
131
+ }
132
+ return "Invalid SIN";
133
+ };
134
+ }
135
+ export function postalCodeValidator() {
136
+ return regexValidator(/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, "Invalid postal code");
137
+ }
138
+ export function regexValidator(regex, msg) {
139
+ return (value) => {
140
+ if (!value) {
141
+ return "";
142
+ }
143
+ if (value.match(regex)) {
144
+ return "";
145
+ }
146
+ return msg;
147
+ };
148
+ }
149
+ export function dateValidator({ invalidMsg, startMsg, endMsg, start, end, }) {
150
+ return (date) => {
151
+ let _date = new Date(0);
152
+ if (typeof date === "string") {
153
+ _date = new Date(date);
154
+ }
155
+ if (date.toDateString) {
156
+ _date = date;
157
+ }
158
+ if (_date.toString() === "Invalid Date" || _date.getTime() === 0) {
159
+ return invalidMsg || "Invalid date";
160
+ }
161
+ if (_date && start && _date < start) {
162
+ return startMsg || `Must be after ${start}`;
163
+ }
164
+ if (_date && end && _date > end) {
165
+ return endMsg || `Must be before ${end}`;
166
+ }
167
+ return "";
168
+ };
169
+ }
170
+ export function numericValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
171
+ return (value) => {
172
+ let _value = Number.MAX_VALUE;
173
+ if (typeof value === "string") {
174
+ _value = parseFloat(value);
175
+ }
176
+ if (typeof value === "number") {
177
+ _value = value;
178
+ }
179
+ if (isNaN(_value)) {
180
+ return invalidTypeMsg || "Must be a numeric value";
181
+ }
182
+ if (_value > max) {
183
+ return maxMsg || `Must be less than or equal to ${max}`;
184
+ }
185
+ if (_value < min) {
186
+ return minMsg || `Must be greater than or equal to ${min}`;
187
+ }
188
+ return "";
189
+ };
190
+ }
191
+ export function lengthValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
192
+ return (value) => {
193
+ if (typeof value !== "string") {
194
+ return invalidTypeMsg || "Invalid type";
195
+ }
196
+ if (value.length > max) {
197
+ return maxMsg || `Must be less than ${max} characters`;
198
+ }
199
+ if (value.length < min) {
200
+ return minMsg || `Must be greater than ${min} characters`;
201
+ }
202
+ return "";
203
+ };
204
+ }
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsS0FBYSxFQUNiLFVBQXVCLEVBQ3ZCLGFBQTRCLEVBQzVCLFVBQTRCO0lBRTVCLE1BQU0sS0FBSyxHQUFHLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUU1QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELDhGQUE4RjtBQUM5RixTQUFTLGFBQWEsQ0FBQyxFQUFlLEVBQUUsSUFBWSxFQUFFLEdBQVc7SUFDL0QsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDckIsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUscUJBQXFCO1lBQzdCLElBQUksRUFBRTtnQkFDSixJQUFJO2dCQUNKLEdBQUc7YUFDSjtTQUNGO0tBQ0YsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBWSxVQUE2QztRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDckMs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O1FBRUQsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDakIsT0FBTyxNQUFNLElBQUksaUNBQWlDLEdBQUcsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNqQixPQUFPLE1BQU0sSUFBSSxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsY0FBYyxFQUNkLE1BQU0sRUFDTixNQUFNLEVBQ04sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFDdkIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQ0M7SUFDdkIsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxjQUFjLElBQUksY0FBYyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUkscUJBQXFCLEdBQUcsYUFBYSxDQUFDO1FBQ3pELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUksd0JBQXdCLEdBQUcsYUFBYSxDQUFDO1FBQzVELENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZHNldEl0ZW1TdGF0ZSB9IGZyb20gXCIuL3B1YmxpYy1mb3JtLXV0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIEZpZWxkVmFsaWRhdG9yID0gKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBGaWVsZHNldFN0YXRlID0gUmVjb3JkPHN0cmluZywgRmllbGRzZXRJdGVtU3RhdGU+O1xuXG4vLyBUT0RPOiBtb3ZlIHRoaXMgaW50byB0aGUgZm9ybS11dGlscyBmaWxlLCBzaW5jZSBpdCBpcyBzcGVjaWZpYyB0byB0aGUgcHVibGljIGZvcm0gY29tcG9uZW50XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGZpZWxkc2V0RWw6IEhUTUxFbGVtZW50LFxuICBmaWVsZHNldFN0YXRlOiBGaWVsZHNldFN0YXRlLFxuICB2YWxpZGF0b3JzOiBGaWVsZFZhbGlkYXRvcltdLFxuKTogW2Jvb2xlYW4sIHN0cmluZ10ge1xuICBjb25zdCB2YWx1ZSA9IGZpZWxkc2V0U3RhdGU/LltmaWVsZF0/LnZhbHVlO1xuXG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCBtc2cgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgIGlmIChtc2cpIHtcbiAgICAgIGRpc3BhdGNoRXJyb3IoZmllbGRzZXRFbCwgZmllbGQsIG1zZyk7XG4gICAgICByZXR1cm4gW2ZhbHNlLCBcIlwiXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFt0cnVlLCB2YWx1ZV07XG59XG5cbi8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHRoZSBmb3JtLXV0aWxzIGZpbGUsIHNpbmNlIGl0IGlzIHNwZWNpZmljIHRvIHRoZSBwdWJsaWMgZm9ybSBjb21wb25lbnRcbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIGVsLmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwibXNnXCIsIHtcbiAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGFjdGlvbjogXCJleHRlcm5hbDo6c2V0OmVycm9yXCIsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFZhbGlkYXRvcltdPjtcbiAgY29uc3RydWN0b3IodmFsaWRhdG9ycz86IFJlY29yZDxzdHJpbmcsIEZpZWxkVmFsaWRhdG9yW10+KSB7XG4gICAgdGhpcy52YWxpZGF0b3JzID0gdmFsaWRhdG9ycyB8fCB7fTtcbiAgfVxuXG4gIGFkZChmaWVsZE5hbWU6IHN0cmluZywgLi4udmFsaWRhdG9yczogRmllbGRWYWxpZGF0b3JbXSkge1xuICAgIHRoaXMudmFsaWRhdG9yc1tmaWVsZE5hbWVdID0gdmFsaWRhdG9ycztcbiAgfVxuXG4gIHZhbGlkYXRlKGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdG9ycykuZm9yRWFjaCgoW25hbWUsIHZhbGlkYXRvcnNdKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSB2YWxpZGF0b3JzXG4gICAgICAgIC5tYXAoKHZhbGlkYXRvckZuKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gdmFsaWRhdG9yRm4oZGF0YVtuYW1lXSk7XG4gICAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmQoKG1zZykgPT4gISFtc2cpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBlcnI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG59XG5cbi8vICoqKioqKioqKipcbi8vIFZhbGlkYXRvcnNcbi8vICoqKioqKioqKipcblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoRGF5VmFsaWRhdG9yKCk6IEZpZWxkVmFsaWRhdG9yW10ge1xuICByZXR1cm4gW1xuICAgIHJlcXVpcmVkVmFsaWRhdG9yKFwiRGF5IGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAxLFxuICAgICAgbWF4OiAzMSxcbiAgICAgIG1pbk1zZzogXCJEYXkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMxXCIsXG4gICAgICBtYXhNc2c6IFwiRGF5IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzMVwiLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlydGhNb250aFZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIk1vbnRoIGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMSxcbiAgICAgIG1pbk1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICAgIG1heE1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICB9KSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoWWVhclZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgY29uc3QgbWF4WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIlllYXIgaXMgcmVxdWlyZWRcIiksXG4gICAgbnVtZXJpY1ZhbGlkYXRvcih7XG4gICAgICBtaW46IDE5MDAsXG4gICAgICBtYXg6IG1heFllYXIsXG4gICAgICBtaW5Nc2c6IFwiWWVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxOTAwXCIsXG4gICAgICBtYXhNc2c6IGBZZWFyIG11c3QgYmUgbGVzcyB0aGFuICR7bWF4WWVhcn1gLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWRWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgbXNnID0gbXNnIHx8IFwiUmVxdWlyZWRcIjtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaG9uZU51bWJlclZhbGlkYXRvcihtc2c/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXlxcKz9bXFxkLSgpIF17MTAsMTh9JC8pO1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IocmVnZXgsIG1zZyB8fCBcIkludmFsaWQgcGhvbmUgbnVtYmVyXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1haWxWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICAvLyBlbWFpbHJlZ2V4LmNvbVxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31dKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgKTtcbiAgcmV0dXJuIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4LCBtc2cgfHwgXCJJbnZhbGlkIGVtYWlsIGFkZHJlc3NcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTSU5WYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgY2hlY2tWYWx1ZSA9IFwiMTIxMTIxMTIxXCIuc3BsaXQoXCJcIikubWFwKChjKSA9PiBwYXJzZUludChjKSk7XG4gICAgY29uc3QgdmFsdWVTdHIgPSAodmFsdWUgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG5cbiAgICBpZiAodmFsdWVTdHIubGVuZ3RoICE9PSA5KSByZXR1cm4gXCJTSU4gbXVzdCBjb250YWluIDkgbnVtYmVyc1wiO1xuXG4gICAgY29uc3QgY2hlY2tTdW0gPSB2YWx1ZVN0clxuICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAubWFwKChjKSA9PiBwYXJzZUludChjKSlcbiAgICAgIC5tYXAoKG51bSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gbnVtICogY2hlY2tWYWx1ZVtpbmRleF07XG4gICAgICAgIGlmICh2YWwgPCAxMCkge1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbH1gXG4gICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgLm1hcCgoYykgPT4gcGFyc2VJbnQoYykpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqIHZhbCwgMSk7XG4gICAgICB9KVxuICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XG5cbiAgICBpZiAoY2hlY2tTdW0gJSAxMCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiSW52YWxpZCBTSU5cIjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3RhbENvZGVWYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IoXG4gICAgL15bQUJDRUdISi1OUFJTVFZYWV1cXGRbQUJDRUdISi1OUFJTVFYtWl1bIC1dP1xcZFtBQkNFR0hKLU5QUlNUVi1aXVxcZCQvaSxcbiAgICBcIkludmFsaWQgcG9zdGFsIGNvZGVcIixcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4OiBSZWdFeHAsIG1zZzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICgodmFsdWUgYXMgc3RyaW5nKS5tYXRjaChyZWdleCkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGludmFsaWRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0TXNnPzogc3RyaW5nO1xuICBlbmRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0PzogRGF0ZTtcbiAgZW5kPzogRGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVmFsaWRhdG9yKHtcbiAgaW52YWxpZE1zZyxcbiAgc3RhcnRNc2csXG4gIGVuZE1zZyxcbiAgc3RhcnQsXG4gIGVuZCxcbn06IERhdGVWYWxpZGF0b3JPcHRpb25zKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKGRhdGU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX2RhdGU6IERhdGUgPSBuZXcgRGF0ZSgwKTtcblxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX2RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICB9XG4gICAgaWYgKChkYXRlIGFzIERhdGUpLnRvRGF0ZVN0cmluZykge1xuICAgICAgX2RhdGUgPSBkYXRlIGFzIERhdGU7XG4gICAgfVxuXG4gICAgaWYgKF9kYXRlLnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgfHwgX2RhdGUuZ2V0VGltZSgpID09PSAwKSB7XG4gICAgICByZXR1cm4gaW52YWxpZE1zZyB8fCBcIkludmFsaWQgZGF0ZVwiO1xuICAgIH1cblxuICAgIGlmIChfZGF0ZSAmJiBzdGFydCAmJiBfZGF0ZSA8IHN0YXJ0KSB7XG4gICAgICByZXR1cm4gc3RhcnRNc2cgfHwgYE11c3QgYmUgYWZ0ZXIgJHtzdGFydH1gO1xuICAgIH1cbiAgICBpZiAoX2RhdGUgJiYgZW5kICYmIF9kYXRlID4gZW5kKSB7XG4gICAgICByZXR1cm4gZW5kTXNnIHx8IGBNdXN0IGJlIGJlZm9yZSAke2VuZH1gO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMge1xuICBpbnZhbGlkVHlwZU1zZz86IHN0cmluZztcbiAgbWluTXNnPzogc3RyaW5nO1xuICBtYXhNc2c/OiBzdHJpbmc7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bWVyaWNWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX3ZhbHVlOiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX3ZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChpc05hTihfdmFsdWUpKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFR5cGVNc2cgfHwgXCJNdXN0IGJlIGEgbnVtZXJpYyB2YWx1ZVwiO1xuICAgIH1cblxuICAgIGlmIChfdmFsdWUgPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7bWF4fWA7XG4gICAgfVxuICAgIGlmIChfdmFsdWUgPCBtaW4pIHtcbiAgICAgIHJldHVybiBtaW5Nc2cgfHwgYE11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG5cbmludGVyZmFjZSBMZW5ndGhWYWxpZGF0b3JPcHRpb25zIHtcbiAgaW52YWxpZFR5cGVNc2c/OiBzdHJpbmc7XG4gIG1pbk1zZz86IHN0cmluZztcbiAgbWF4TXNnPzogc3RyaW5nO1xuICBtYXg/OiBudW1iZXI7XG4gIG1pbj86IG51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVHlwZU1zZyB8fCBcIkludmFsaWQgdHlwZVwiO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuICR7bWF4fSBjaGFyYWN0ZXJzYDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgbWluKSB7XG4gICAgICByZXR1cm4gbWluTXNnIHx8IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAke21pbn0gY2hhcmFjdGVyc2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  import { forwardRef, Directive, ElementRef, HostListener } from "@angular/core";
2
2
  import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
3
  import * as i0 from "@angular/core";
4
+ // @deprecated: Use the new <goab-input .. /> component
4
5
  export class ValueDirective {
5
6
  get value() {
6
7
  return this._value;
@@ -20,9 +21,14 @@ export class ValueDirective {
20
21
  registerOnTouched(fn) {
21
22
  this.onTouched = fn;
22
23
  }
24
+ setDisabledState(isDisabled) {
25
+ this._disabled = isDisabled;
26
+ this.elementRef.nativeElement.disabled = isDisabled;
27
+ }
23
28
  constructor(elementRef) {
24
29
  this.elementRef = elementRef;
25
30
  this._value = "";
31
+ this._disabled = false;
26
32
  /* eslint-disable @typescript-eslint/no-explicit-any */
27
33
  this.onChange = () => { };
28
34
  this.onTouched = () => { };
@@ -30,14 +36,17 @@ export class ValueDirective {
30
36
  listenForValueChange(value) {
31
37
  this.value = value;
32
38
  }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ValueDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
34
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: ValueDirective, selector: "[goaValue]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)" } }, providers: [{
39
+ listenForDisabledChange(isDisabled) {
40
+ this.setDisabledState(isDisabled);
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: ValueDirective, selector: "[goaValue]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)", "disabledChange": "listenForDisabledChange($event.detail.disabled)" } }, providers: [{
35
44
  provide: NG_VALUE_ACCESSOR,
36
45
  useExisting: forwardRef(() => ValueDirective),
37
46
  multi: true,
38
47
  }], ngImport: i0 }); }
39
48
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ValueDirective, decorators: [{
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueDirective, decorators: [{
41
50
  type: Directive,
42
51
  args: [{
43
52
  selector: "[goaValue]", providers: [{
@@ -49,13 +58,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
49
58
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { listenForValueChange: [{
50
59
  type: HostListener,
51
60
  args: ["_change", ["$event.detail.value"]]
61
+ }], listenForDisabledChange: [{
62
+ type: HostListener,
63
+ args: ["disabledChange", ["$event.detail.disabled"]]
52
64
  }] } });
53
65
  export class ValueListDirective {
54
66
  get value() {
55
67
  return this._value;
56
68
  }
57
69
  set value(val) {
58
- if (1 === 1 && val && val !== this._value) {
70
+ if (val && val !== this._value) {
59
71
  this._setValue(val);
60
72
  this.elementRef.nativeElement.value = JSON.stringify(val);
61
73
  }
@@ -96,14 +108,14 @@ export class ValueListDirective {
96
108
  this.onChange(value);
97
109
  this.onTouched();
98
110
  }
99
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ValueListDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
100
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: ValueListDirective, selector: "[goaValueList]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)" } }, providers: [{
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueListDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
112
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: ValueListDirective, selector: "[goaValueList]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)" } }, providers: [{
101
113
  provide: NG_VALUE_ACCESSOR,
102
114
  useExisting: forwardRef(() => ValueListDirective),
103
115
  multi: true,
104
116
  }], ngImport: i0 }); }
105
117
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ValueListDirective, decorators: [{
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueListDirective, decorators: [{
107
119
  type: Directive,
108
120
  args: [{
109
121
  selector: "[goaValueList]",
@@ -117,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
117
129
  type: HostListener,
118
130
  args: ["_change", ["$event.detail.value"]]
119
131
  }] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi92YWx1ZS1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBU3pFLE1BQU0sT0FBTyxjQUFjO0lBT3pCLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUM1QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQWM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQXNCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUE3QnBDLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFFcEIsdURBQXVEO1FBQ3ZELGFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUIs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QUFrQjtrR0FBbEIsa0JBQWtCLDBIQU5sQixDQUFDO2dCQUNWLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pELEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQzs7MkZBRVMsa0JBQWtCO2tCQVI5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFNBQVMsRUFBRSxDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO2lCQUNIOytFQW1DQyxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3J3YXJkUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcIltnb2FWYWx1ZV1cIiwgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFZhbHVlRGlyZWN0aXZlKSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIF92YWx1ZSA9IFwiXCI7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICBASG9zdExpc3RlbmVyKFwiX2NoYW5nZVwiLCBbXCIkZXZlbnQuZGV0YWlsLnZhbHVlXCJdKVxuICBsaXN0ZW5Gb3JWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZ29hVmFsdWVMaXN0XVwiLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVmFsdWVMaXN0RGlyZWN0aXZlKSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlTGlzdERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfdmFsdWU/OiBzdHJpbmdbXSA9IFtdO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbDogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoMSA9PT0gMSAmJiB2YWwgJiYgdmFsICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fc2V0VmFsdWUodmFsKTtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlPzogc3RyaW5nW10pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJfY2hhbmdlXCIsIFtcIiRldmVudC5kZXRhaWwudmFsdWVcIl0pXG4gIGxpc3RlbkZvclZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl9zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gd2Ugc3RpbGwgbmVlZCB0byB0cmlnZ2VyIHRoZSBldmVudHMgdG8gcHJldmVudCBhbnkgcHJldmlvdXMgdmFsaWQgdmFsdWUgdG8gcmVtYWluIHNldC5cbiAgICAgIGNvbnN0IHYgPSB2YWx1ZS5tYXRjaCgvXltcXHdcXHMsXSokLykgPyB2YWx1ZS5zcGxpdChcIixcIikgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zZXRWYWx1ZSh2KTtcbiAgICB9XG4gIH1cblxuICBfc2V0VmFsdWUodmFsdWU/OiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxufVxuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi92YWx1ZS1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXpFLHVEQUF1RDtBQVF2RCxNQUFNLE9BQU8sY0FBYztJQVF6QixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQVc7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFjO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lB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LENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWdCO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7OEdBckRVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLDBIQU5sQixDQUFDO2dCQUNWLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pELEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQzs7MkZBRVMsa0JBQWtCO2tCQVI5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFNBQVMsRUFBRSxDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO2lCQUNIOytFQW1DQyxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3J3YXJkUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuLy8gQGRlcHJlY2F0ZWQ6IFVzZSB0aGUgbmV3IDxnb2FiLWlucHV0IC4uIC8+IGNvbXBvbmVudFxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcIltnb2FWYWx1ZV1cIiwgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFZhbHVlRGlyZWN0aXZlKSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIF92YWx1ZSA9IFwiXCI7XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcIl9jaGFuZ2VcIiwgW1wiJGV2ZW50LmRldGFpbC52YWx1ZVwiXSlcbiAgbGlzdGVuRm9yVmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBASG9zdExpc3RlbmVyKFwiZGlzYWJsZWRDaGFuZ2VcIiwgW1wiJGV2ZW50LmRldGFpbC5kaXNhYmxlZFwiXSlcbiAgbGlzdGVuRm9yRGlzYWJsZWRDaGFuZ2UoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2dvYVZhbHVlTGlzdF1cIixcbiAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFZhbHVlTGlzdERpcmVjdGl2ZSksXG4gICAgbXVsdGk6IHRydWUsXG4gIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBWYWx1ZUxpc3REaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX3ZhbHVlPzogc3RyaW5nW10gPSBbXTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICBnZXQgdmFsdWUoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbCAmJiB2YWwgIT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLl9zZXRWYWx1ZSh2YWwpO1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU/OiBzdHJpbmdbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcIl9jaGFuZ2VcIiwgW1wiJGV2ZW50LmRldGFpbC52YWx1ZVwiXSlcbiAgbGlzdGVuRm9yVmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB3ZSBzdGlsbCBuZWVkIHRvIHRyaWdnZXIgdGhlIGV2ZW50cyB0byBwcmV2ZW50IGFueSBwcmV2aW91cyB2YWxpZCB2YWx1ZSB0byByZW1haW4gc2V0LlxuICAgICAgY29uc3QgdiA9IHZhbHVlLm1hdGNoKC9eW1xcd1xccyxdKiQvKSA/IHZhbHVlLnNwbGl0KFwiLFwiKSA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3NldFZhbHVlKHYpO1xuICAgIH1cbiAgfVxuXG4gIF9zZXRWYWx1ZSh2YWx1ZT86IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG59XG4iXX0=