ng-primitives 0.0.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/README.md +14 -4
  2. package/accordion/accordion-trigger/accordion-trigger.directive.d.ts +2 -1
  3. package/autofill/README.md +3 -0
  4. package/autofill/autofill/autofill.directive.d.ts +19 -0
  5. package/{select/select-button/select-button.token.d.ts → autofill/autofill/autofill.token.d.ts} +4 -4
  6. package/autofill/index.d.ts +9 -0
  7. package/avatar/avatar/avatar.directive.d.ts +2 -1
  8. package/button/README.md +3 -0
  9. package/button/button/button.directive.d.ts +27 -0
  10. package/{select/select-option/select-option.token.d.ts → button/button/button.token.d.ts} +4 -4
  11. package/button/index.d.ts +9 -0
  12. package/checkbox/checkbox/checkbox.directive.d.ts +11 -61
  13. package/checkbox/index.d.ts +0 -4
  14. package/esm2022/a11y/visually-hidden/visually-hidden.directive.mjs +3 -3
  15. package/esm2022/accordion/accordion/accordion.directive.mjs +5 -4
  16. package/esm2022/accordion/accordion-content/accordion-content.directive.mjs +5 -6
  17. package/esm2022/accordion/accordion-item/accordion-item.directive.mjs +5 -5
  18. package/esm2022/accordion/accordion-trigger/accordion-trigger.directive.mjs +8 -5
  19. package/esm2022/autofill/autofill/autofill.directive.mjs +71 -0
  20. package/esm2022/autofill/autofill/autofill.token.mjs +16 -0
  21. package/esm2022/autofill/index.mjs +10 -0
  22. package/esm2022/autofill/ng-primitives-autofill.mjs +5 -0
  23. package/esm2022/avatar/avatar/avatar.directive.mjs +7 -4
  24. package/esm2022/avatar/avatar-fallback/avatar-fallback.directive.mjs +3 -3
  25. package/esm2022/avatar/avatar-image/avatar-image.directive.mjs +3 -3
  26. package/esm2022/button/button/button.directive.mjs +47 -0
  27. package/esm2022/button/button/button.token.mjs +16 -0
  28. package/esm2022/button/index.mjs +10 -0
  29. package/esm2022/button/ng-primitives-button.mjs +5 -0
  30. package/esm2022/checkbox/checkbox/checkbox.directive.mjs +29 -79
  31. package/esm2022/checkbox/index.mjs +1 -5
  32. package/esm2022/file-upload/file-upload/file-upload.directive.mjs +7 -4
  33. package/esm2022/focus-trap/focus-trap/focus-trap.directive.mjs +262 -0
  34. package/esm2022/focus-trap/focus-trap/focus-trap.token.mjs +16 -0
  35. package/esm2022/focus-trap/index.mjs +10 -0
  36. package/esm2022/focus-trap/ng-primitives-focus-trap.mjs +5 -0
  37. package/esm2022/form-field/description/description.directive.mjs +14 -14
  38. package/esm2022/form-field/error/error.directive.mjs +27 -29
  39. package/esm2022/form-field/form-control/form-control.directive.mjs +22 -16
  40. package/esm2022/form-field/form-field/form-field.directive.mjs +3 -3
  41. package/esm2022/form-field/form-field/form-field.token.mjs +3 -7
  42. package/esm2022/form-field/label/label.directive.mjs +56 -17
  43. package/esm2022/input/index.mjs +10 -0
  44. package/esm2022/input/input/input.directive.mjs +55 -0
  45. package/esm2022/input/input/input.token.mjs +16 -0
  46. package/esm2022/input/ng-primitives-input.mjs +5 -0
  47. package/esm2022/interactions/focus/focus.directive.mjs +15 -10
  48. package/esm2022/interactions/focus-visible/focus-visible.directive.mjs +12 -7
  49. package/esm2022/interactions/hover/hover.directive.mjs +16 -11
  50. package/esm2022/interactions/index.mjs +5 -1
  51. package/esm2022/interactions/move/move.directive.mjs +216 -0
  52. package/esm2022/interactions/move/move.token.mjs +16 -0
  53. package/esm2022/interactions/press/press.directive.mjs +118 -0
  54. package/esm2022/interactions/press/press.token.mjs +16 -0
  55. package/esm2022/internal/disabled/disabled.mjs +19 -0
  56. package/esm2022/internal/index.mjs +11 -0
  57. package/esm2022/internal/ng-primitives-internal.mjs +5 -0
  58. package/esm2022/internal/orientation/orientation.mjs +19 -0
  59. package/esm2022/internal/style-injector/style-injector.mjs +81 -0
  60. package/esm2022/progress/progress/progress.directive.mjs +3 -3
  61. package/esm2022/progress/progress-indicator/progress-indicator.directive.mjs +3 -3
  62. package/esm2022/radio/radio-group/radio-group.directive.mjs +14 -54
  63. package/esm2022/radio/radio-indicator/radio-indicator.directive.mjs +8 -5
  64. package/esm2022/radio/radio-item/radio-item.directive.mjs +8 -6
  65. package/esm2022/resize/resize/resize.directive.mjs +3 -3
  66. package/esm2022/roving-focus/roving-focus-group/roving-focus-group.directive.mjs +14 -9
  67. package/esm2022/roving-focus/roving-focus-item/roving-focus-item.directive.mjs +3 -3
  68. package/esm2022/search/index.mjs +10 -0
  69. package/esm2022/search/ng-primitives-search.mjs +5 -0
  70. package/esm2022/search/search-field/search-field.directive.mjs +47 -0
  71. package/esm2022/search/search-field/search-field.token.mjs +16 -0
  72. package/esm2022/select/index.mjs +1 -7
  73. package/esm2022/select/select/select.directive.mjs +23 -36
  74. package/esm2022/select/select/select.token.mjs +1 -1
  75. package/esm2022/slider/slider/slider.directive.mjs +18 -5
  76. package/esm2022/slider/slider-range/slider-range.directive.mjs +6 -5
  77. package/esm2022/slider/slider-thumb/slider-thumb.directive.mjs +7 -4
  78. package/esm2022/slider/slider-track/slider-track.directive.mjs +8 -4
  79. package/esm2022/switch/switch/switch.directive.mjs +18 -58
  80. package/esm2022/switch/switch-thumb/switch-thumb.directive.mjs +9 -6
  81. package/esm2022/tabs/tab-button/tab-button.directive.mjs +8 -6
  82. package/esm2022/tabs/tab-list/tab-list.directive.mjs +3 -3
  83. package/esm2022/tabs/tab-panel/tab-panel.directive.mjs +5 -6
  84. package/esm2022/tabs/tabset/tabset.directive.mjs +14 -18
  85. package/esm2022/textarea/index.mjs +10 -0
  86. package/esm2022/textarea/ng-primitives-textarea.mjs +5 -0
  87. package/esm2022/textarea/textarea/textarea.directive.mjs +37 -0
  88. package/esm2022/textarea/textarea/textarea.token.mjs +16 -0
  89. package/esm2022/toggle/toggle/toggle.directive.mjs +33 -13
  90. package/esm2022/tooltip/tooltip/tooltip.directive.mjs +3 -3
  91. package/esm2022/tooltip/tooltip-trigger/tooltip-trigger.directive.mjs +7 -7
  92. package/esm2022/utils/helpers/focus-manager.mjs +3 -3
  93. package/esm2022/utils/index.mjs +2 -2
  94. package/esm2022/utils/signals/async.mjs +11 -17
  95. package/fesm2022/ng-primitives-a11y.mjs +3 -3
  96. package/fesm2022/ng-primitives-accordion.mjs +19 -16
  97. package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
  98. package/fesm2022/ng-primitives-autofill.mjs +100 -0
  99. package/fesm2022/ng-primitives-autofill.mjs.map +1 -0
  100. package/fesm2022/ng-primitives-avatar.mjs +13 -10
  101. package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
  102. package/fesm2022/ng-primitives-button.mjs +76 -0
  103. package/fesm2022/ng-primitives-button.mjs.map +1 -0
  104. package/fesm2022/ng-primitives-checkbox.mjs +25 -203
  105. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  106. package/fesm2022/ng-primitives-file-upload.mjs +6 -3
  107. package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
  108. package/fesm2022/ng-primitives-focus-trap.mjs +291 -0
  109. package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -0
  110. package/fesm2022/ng-primitives-form-field.mjs +119 -80
  111. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  112. package/fesm2022/ng-primitives-input.mjs +84 -0
  113. package/fesm2022/ng-primitives-input.mjs.map +1 -0
  114. package/fesm2022/ng-primitives-interactions.mjs +394 -26
  115. package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
  116. package/fesm2022/ng-primitives-internal.mjs +132 -0
  117. package/fesm2022/ng-primitives-internal.mjs.map +1 -0
  118. package/fesm2022/ng-primitives-progress.mjs +6 -6
  119. package/fesm2022/ng-primitives-radio.mjs +25 -62
  120. package/fesm2022/ng-primitives-radio.mjs.map +1 -1
  121. package/fesm2022/ng-primitives-resize.mjs +3 -3
  122. package/fesm2022/ng-primitives-roving-focus.mjs +15 -10
  123. package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
  124. package/fesm2022/ng-primitives-search.mjs +76 -0
  125. package/fesm2022/ng-primitives-search.mjs.map +1 -0
  126. package/fesm2022/ng-primitives-select.mjs +23 -395
  127. package/fesm2022/ng-primitives-select.mjs.map +1 -1
  128. package/fesm2022/ng-primitives-slider.mjs +35 -14
  129. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  130. package/fesm2022/ng-primitives-switch.mjs +23 -62
  131. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  132. package/fesm2022/ng-primitives-tabs.mjs +27 -30
  133. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  134. package/fesm2022/ng-primitives-textarea.mjs +66 -0
  135. package/fesm2022/ng-primitives-textarea.mjs.map +1 -0
  136. package/fesm2022/ng-primitives-toggle.mjs +32 -12
  137. package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
  138. package/fesm2022/ng-primitives-tooltip.mjs +9 -9
  139. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  140. package/fesm2022/ng-primitives-utils.mjs +14 -20
  141. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  142. package/file-upload/file-upload/file-upload.directive.d.ts +2 -1
  143. package/focus-trap/README.md +3 -0
  144. package/focus-trap/focus-trap/focus-trap.directive.d.ts +64 -0
  145. package/{select/select-options/select-options.token.d.ts → focus-trap/focus-trap/focus-trap.token.d.ts} +4 -4
  146. package/focus-trap/index.d.ts +9 -0
  147. package/form-field/description/description.directive.d.ts +1 -1
  148. package/form-field/error/error.directive.d.ts +9 -5
  149. package/form-field/form-control/form-control.directive.d.ts +7 -3
  150. package/form-field/form-field/form-field.token.d.ts +1 -1
  151. package/form-field/label/label.directive.d.ts +3 -2
  152. package/input/README.md +3 -0
  153. package/input/index.d.ts +9 -0
  154. package/input/input/input.directive.d.ts +33 -0
  155. package/input/input/input.token.d.ts +14 -0
  156. package/interactions/focus/focus.directive.d.ts +6 -2
  157. package/interactions/focus-visible/focus-visible.directive.d.ts +5 -1
  158. package/interactions/hover/hover.directive.d.ts +5 -1
  159. package/interactions/index.d.ts +4 -0
  160. package/interactions/move/move.directive.d.ts +126 -0
  161. package/interactions/move/move.token.d.ts +14 -0
  162. package/interactions/press/press.directive.d.ts +59 -0
  163. package/interactions/press/press.token.d.ts +14 -0
  164. package/internal/README.md +3 -0
  165. package/internal/disabled/disabled.d.ts +21 -0
  166. package/internal/index.d.ts +10 -0
  167. package/internal/orientation/orientation.d.ts +22 -0
  168. package/internal/style-injector/style-injector.d.ts +36 -0
  169. package/package.json +49 -7
  170. package/radio/radio-group/radio-group.directive.d.ts +4 -41
  171. package/radio/radio-indicator/radio-indicator.directive.d.ts +2 -1
  172. package/radio/radio-item/radio-item.directive.d.ts +2 -1
  173. package/roving-focus/roving-focus-group/roving-focus-group.directive.d.ts +7 -2
  174. package/search/README.md +3 -0
  175. package/search/index.d.ts +9 -0
  176. package/search/search-field/search-field.directive.d.ts +15 -0
  177. package/search/search-field/search-field.token.d.ts +14 -0
  178. package/select/index.d.ts +0 -6
  179. package/select/select/select.directive.d.ts +7 -22
  180. package/select/select/select.token.d.ts +2 -2
  181. package/slider/slider/slider.directive.d.ts +4 -2
  182. package/slider/slider-thumb/slider-thumb.directive.d.ts +2 -1
  183. package/slider/slider-track/slider-track.directive.d.ts +1 -1
  184. package/switch/switch/switch.directive.d.ts +5 -45
  185. package/switch/switch-thumb/switch-thumb.directive.d.ts +2 -1
  186. package/tabs/tab-button/tab-button.directive.d.ts +2 -1
  187. package/tabs/tabset/tabset.directive.d.ts +3 -9
  188. package/textarea/README.md +3 -0
  189. package/textarea/index.d.ts +9 -0
  190. package/textarea/textarea/textarea.directive.d.ts +20 -0
  191. package/textarea/textarea/textarea.token.d.ts +14 -0
  192. package/toggle/toggle/toggle.directive.d.ts +16 -4
  193. package/utils/index.d.ts +1 -1
  194. package/utils/signals/async.d.ts +10 -12
  195. package/checkbox/checkbox-indicator/checkbox-indicator.directive.d.ts +0 -19
  196. package/checkbox/checkbox-indicator/checkbox-indicator.token.d.ts +0 -15
  197. package/checkbox/checkbox-input/checkbox-input.directive.d.ts +0 -10
  198. package/checkbox/checkbox-label/checkbox-label.directive.d.ts +0 -9
  199. package/esm2022/checkbox/checkbox-indicator/checkbox-indicator.directive.mjs +0 -51
  200. package/esm2022/checkbox/checkbox-indicator/checkbox-indicator.token.mjs +0 -17
  201. package/esm2022/checkbox/checkbox-input/checkbox-input.directive.mjs +0 -40
  202. package/esm2022/checkbox/checkbox-label/checkbox-label.directive.mjs +0 -32
  203. package/esm2022/select/select-button/select-button.directive.mjs +0 -84
  204. package/esm2022/select/select-button/select-button.token.mjs +0 -16
  205. package/esm2022/select/select-option/select-option.directive.mjs +0 -90
  206. package/esm2022/select/select-option/select-option.token.mjs +0 -16
  207. package/esm2022/select/select-options/select-options.directive.mjs +0 -157
  208. package/esm2022/select/select-options/select-options.token.mjs +0 -16
  209. package/select/select-button/select-button.directive.d.ts +0 -51
  210. package/select/select-option/select-option.directive.d.ts +0 -57
  211. package/select/select-options/select-options.directive.d.ts +0 -65
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Copyright © 2024 Angular Primitives.
3
+ * https://github.com/ng-primitives/ng-primitives
4
+ *
5
+ * This source code is licensed under the CC BY-ND 4.0 license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import { InteractivityChecker } from '@angular/cdk/a11y';
9
+ import { booleanAttribute, Directive, ElementRef, HostListener, inject, input, NgZone, } from '@angular/core';
10
+ import { NgpFocusTrapToken } from './focus-trap.token';
11
+ import * as i0 from "@angular/core";
12
+ /**
13
+ * This implementation is based on the Radix UI FocusScope:
14
+ * https://github.com/radix-ui/primitives/blob/main/packages/react/focus-scope/src/FocusScope.tsx#L306
15
+ */
16
+ class FocusTrap {
17
+ constructor() {
18
+ /**
19
+ * Whether the focus trap is active.
20
+ */
21
+ this.active = false;
22
+ }
23
+ /**
24
+ * Activates the focus trap.
25
+ */
26
+ activate() {
27
+ this.active = true;
28
+ }
29
+ /**
30
+ * Deactivates the focus trap.
31
+ */
32
+ deactivate() {
33
+ this.active = false;
34
+ }
35
+ }
36
+ class FocusTrapStack {
37
+ constructor() {
38
+ /**
39
+ * The stack of focus traps.
40
+ */
41
+ this.stack = [];
42
+ }
43
+ /**
44
+ * Adds a focus trap to the stack.
45
+ */
46
+ add(focusTrap) {
47
+ // deactivate the previous focus trap
48
+ this.stack.forEach(t => t.deactivate());
49
+ // add the new focus trap and activate it
50
+ this.stack.push(focusTrap);
51
+ focusTrap.activate();
52
+ }
53
+ /**
54
+ * Removes a focus trap from the stack.
55
+ */
56
+ remove(focusTrap) {
57
+ // remove the focus trap
58
+ const index = this.stack.indexOf(focusTrap);
59
+ if (index >= 0) {
60
+ this.stack.splice(index, 1);
61
+ }
62
+ // activate the previous focus trap
63
+ const previous = this.stack[this.stack.length - 1];
64
+ if (previous) {
65
+ previous.activate();
66
+ }
67
+ }
68
+ }
69
+ // create a global stack of focus traps
70
+ const focusTrapStack = new FocusTrapStack();
71
+ export class NgpFocusTrap {
72
+ constructor() {
73
+ /**
74
+ * Create a new focus trap.
75
+ */
76
+ this.focusTrap = new FocusTrap();
77
+ /**
78
+ * Access the interactivity checker.
79
+ */
80
+ this.interactivityChecker = inject(InteractivityChecker);
81
+ /**
82
+ * Get the focus trap container element.
83
+ */
84
+ this.elementRef = inject(ElementRef);
85
+ /**
86
+ * Access NgZone to run the focus trap events outside of Angular's zone.
87
+ */
88
+ this.ngZone = inject(NgZone);
89
+ /**
90
+ * Store the mutation observer.
91
+ */
92
+ this.mutationObserver = null;
93
+ /**
94
+ * Store the last focused element.
95
+ */
96
+ this.lastFocusedElement = null;
97
+ /**
98
+ * Whether the focus trap is disabled.
99
+ */
100
+ this.disabled = input(false, {
101
+ alias: 'ngpFocusTrapDisabled',
102
+ transform: booleanAttribute,
103
+ });
104
+ }
105
+ ngOnInit() {
106
+ focusTrapStack.add(this.focusTrap);
107
+ this.mutationObserver = new MutationObserver(this.handleMutations.bind(this));
108
+ // setup event listeners
109
+ this.ngZone.runOutsideAngular(() => {
110
+ this.mutationObserver.observe(this.elementRef.nativeElement, {
111
+ childList: true,
112
+ subtree: true,
113
+ });
114
+ document.addEventListener('focusin', this.handleFocusIn.bind(this));
115
+ document.addEventListener('focusout', this.handleFocusOut.bind(this));
116
+ });
117
+ const previouslyFocusedElement = document.activeElement;
118
+ const hasFocusedCandidate = this.elementRef.nativeElement.contains(previouslyFocusedElement);
119
+ if (!hasFocusedCandidate) {
120
+ this.focusFirst();
121
+ // if the focus didn't change, focus the container
122
+ if (document.activeElement === previouslyFocusedElement) {
123
+ this.focus(this.elementRef.nativeElement);
124
+ }
125
+ }
126
+ }
127
+ ngOnDestroy() {
128
+ focusTrapStack.remove(this.focusTrap);
129
+ this.mutationObserver?.disconnect();
130
+ }
131
+ handleFocusIn(event) {
132
+ if (!this.focusTrap.active || this.disabled()) {
133
+ return;
134
+ }
135
+ const target = event.target;
136
+ if (this.elementRef.nativeElement.contains(target)) {
137
+ this.lastFocusedElement = target;
138
+ }
139
+ else {
140
+ this.focus(this.lastFocusedElement);
141
+ }
142
+ }
143
+ /**
144
+ * Handles the `focusout` event.
145
+ */
146
+ handleFocusOut(event) {
147
+ if (!this.focusTrap.active || this.disabled() || event.relatedTarget === null) {
148
+ return;
149
+ }
150
+ const relatedTarget = event.relatedTarget;
151
+ if (!this.elementRef.nativeElement.contains(relatedTarget)) {
152
+ this.focus(this.lastFocusedElement);
153
+ }
154
+ }
155
+ /**
156
+ * If the focused element gets removed from the DOM, browsers move focus back to the document.body.
157
+ * We move focus to the container to keep focus trapped correctly.
158
+ */
159
+ handleMutations(mutations) {
160
+ const focusedElement = document.activeElement;
161
+ if (focusedElement !== document.body) {
162
+ return;
163
+ }
164
+ for (const mutation of mutations) {
165
+ if (mutation.removedNodes.length > 0) {
166
+ this.focus(this.elementRef.nativeElement);
167
+ }
168
+ }
169
+ }
170
+ /**
171
+ * Handles the `keydown` event.
172
+ */
173
+ handleKeyDown(event) {
174
+ if (!this.focusTrap.active || this.disabled()) {
175
+ return;
176
+ }
177
+ const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;
178
+ const focusedElement = document.activeElement;
179
+ if (isTabKey && focusedElement) {
180
+ const container = event.currentTarget;
181
+ const [first, last] = this.getTabbableEdges(container);
182
+ const hasTabbableElementsInside = first && last;
183
+ // we can only wrap focus if we have tabbable edges
184
+ if (!hasTabbableElementsInside) {
185
+ if (focusedElement === container) {
186
+ event.preventDefault();
187
+ }
188
+ }
189
+ else {
190
+ if (!event.shiftKey && focusedElement === last) {
191
+ event.preventDefault();
192
+ this.focus(first);
193
+ }
194
+ else if (event.shiftKey && focusedElement === first) {
195
+ event.preventDefault();
196
+ this.focus(last);
197
+ }
198
+ }
199
+ }
200
+ }
201
+ /**
202
+ * Returns the first and last tabbable elements inside a container.
203
+ */
204
+ getTabbableEdges(container) {
205
+ const candidates = this.getTabbableCandidates(container);
206
+ const first = this.findVisible(candidates);
207
+ const last = this.findVisible(candidates.reverse());
208
+ return [first, last];
209
+ }
210
+ /**
211
+ * Returns a list of potential focusable elements inside a container.
212
+ */
213
+ getTabbableCandidates(container) {
214
+ const nodes = [];
215
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
216
+ acceptNode: (node) => this.interactivityChecker.isFocusable(node)
217
+ ? NodeFilter.FILTER_ACCEPT
218
+ : NodeFilter.FILTER_SKIP,
219
+ });
220
+ while (walker.nextNode()) {
221
+ nodes.push(walker.currentNode);
222
+ }
223
+ return nodes;
224
+ }
225
+ /**
226
+ * Returns the first visible element in a list..
227
+ */
228
+ findVisible(elements) {
229
+ return elements.find(element => this.interactivityChecker.isVisible(element)) ?? null;
230
+ }
231
+ focus(element) {
232
+ element?.focus({ preventScroll: true });
233
+ }
234
+ focusFirst() {
235
+ const previouslyFocusedElement = document.activeElement;
236
+ for (const candidate of this.getTabbableCandidates(this.elementRef.nativeElement)) {
237
+ this.focus(candidate);
238
+ if (document.activeElement !== previouslyFocusedElement) {
239
+ return;
240
+ }
241
+ }
242
+ }
243
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFocusTrap, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
244
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", type: NgpFocusTrap, isStandalone: true, selector: "[ngpFocusTrap]", inputs: { disabled: { classPropertyName: "disabled", publicName: "ngpFocusTrapDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "handleKeyDown($event)" }, properties: { "attr.tabindex": "-1", "attr.data-focus-trap": "!disabled()" } }, providers: [{ provide: NgpFocusTrapToken, useExisting: NgpFocusTrap }], exportAs: ["ngpFocusTrap"], ngImport: i0 }); }
245
+ }
246
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFocusTrap, decorators: [{
247
+ type: Directive,
248
+ args: [{
249
+ standalone: true,
250
+ selector: '[ngpFocusTrap]',
251
+ exportAs: 'ngpFocusTrap',
252
+ providers: [{ provide: NgpFocusTrapToken, useExisting: NgpFocusTrap }],
253
+ host: {
254
+ '[attr.tabindex]': '-1',
255
+ '[attr.data-focus-trap]': '!disabled()',
256
+ },
257
+ }]
258
+ }], propDecorators: { handleKeyDown: [{
259
+ type: HostListener,
260
+ args: ['keydown', ['$event']]
261
+ }] } });
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2ZvY3VzLXRyYXAvc3JjL2ZvY3VzLXRyYXAvZm9jdXMtdHJhcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFFdkQ7OztHQUdHO0FBRUgsTUFBTSxTQUFTO0lBQWY7UUFDRTs7V0FFRztRQUNILFdBQU0sR0FBWSxLQUFLLENBQUM7SUFlMUIsQ0FBQztJQWJDOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGNBQWM7SUFBcEI7UUFDRTs7V0FFRztRQUNjLFVBQUssR0FBZ0IsRUFBRSxDQUFDO0lBZ0MzQyxDQUFDO0lBOUJDOztPQUVHO0lBQ0gsR0FBRyxDQUFDLFNBQW9CO1FBQ3RCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXhDLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMs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QUFFO3dCQUNKLGlCQUFpQixFQUFFLElBQUk7d0JBQ3ZCLHdCQUF3QixFQUFFLGFBQWE7cUJBQ3hDO2lCQUNGOzhCQTRIVyxhQUFhO3NCQUR0QixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZLU5EIDQuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBJbnRlcmFjdGl2aXR5Q2hlY2tlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ncEZvY3VzVHJhcFRva2VuIH0gZnJvbSAnLi9mb2N1cy10cmFwLnRva2VuJztcblxuLyoqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBSYWRpeCBVSSBGb2N1c1Njb3BlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JhZGl4LXVpL3ByaW1pdGl2ZXMvYmxvYi9tYWluL3BhY2thZ2VzL3JlYWN0L2ZvY3VzLXNjb3BlL3NyYy9Gb2N1c1Njb3BlLnRzeCNMMzA2XG4gKi9cblxuY2xhc3MgRm9jdXNUcmFwIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvY3VzIHRyYXAgaXMgYWN0aXZlLlxuICAgKi9cbiAgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgZm9jdXMgdHJhcC5cbiAgICovXG4gIGFjdGl2YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgZm9jdXMgdHJhcC5cbiAgICovXG4gIGRlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufVxuXG5jbGFzcyBGb2N1c1RyYXBTdGFjayB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgb2YgZm9jdXMgdHJhcHMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBGb2N1c1RyYXBbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgZm9jdXMgdHJhcCB0byB0aGUgc3RhY2suXG4gICAqL1xuICBhZGQoZm9jdXNUcmFwOiBGb2N1c1RyYXApOiB2b2lkIHtcbiAgICAvLyBkZWFjdGl2YXRlIHRoZSBwcmV2aW91cyBmb2N1cyB0cmFwXG4gICAgdGhpcy5zdGFjay5mb3JFYWNoKHQgPT4gdC5kZWFjdGl2YXRlKCkpO1xuXG4gICAgLy8gYWRkIHRoZSBuZXcgZm9jdXMgdHJhcCBhbmQgYWN0aXZhdGUgaXRcbiAgICB0aGlzLnN0YWNrLnB1c2goZm9jdXNUcmFwKTtcbiAgICBmb2N1c1RyYXAuYWN0aXZhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZm9jdXMgdHJhcCBmcm9tIHRoZSBzdGFjay5cbiAgICovXG4gIHJlbW92ZShmb2N1c1RyYXA6IEZvY3VzVHJhcCk6IHZvaWQge1xuICAgIC8vIHJlbW92ZSB0aGUgZm9jdXMgdHJhcFxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGFjay5pbmRleE9mKGZvY3VzVHJhcCk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5zdGFjay5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8vIGFjdGl2YXRlIHRoZSBwcmV2aW91cyBmb2N1cyB0cmFwXG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgIHByZXZpb3VzLmFjdGl2YXRlKCk7XG4gICAgfVxuICB9XG59XG5cbi8vIGNyZWF0ZSBhIGdsb2JhbCBzdGFjayBvZiBmb2N1cyB0cmFwc1xuY29uc3QgZm9jdXNUcmFwU3RhY2sgPSBuZXcgRm9jdXNUcmFwU3RhY2soKTtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW25ncEZvY3VzVHJhcF0nLFxuICBleHBvcnRBczogJ25ncEZvY3VzVHJhcCcsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmdwRm9jdXNUcmFwVG9rZW4sIHVzZUV4aXN0aW5nOiBOZ3BGb2N1c1RyYXAgfV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIudGFiaW5kZXhdJzogJy0xJyxcbiAgICAnW2F0dHIuZGF0YS1mb2N1cy10cmFwXSc6ICchZGlzYWJsZWQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncEZvY3VzVHJhcCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBmb2N1cyB0cmFwLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBmb2N1c1RyYXAgPSBuZXcgRm9jdXNUcmFwKCk7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgaW50ZXJhY3Rpdml0eSBjaGVja2VyLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcmFjdGl2aXR5Q2hlY2tlciA9IGluamVjdChJbnRlcmFjdGl2aXR5Q2hlY2tlcik7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZm9jdXMgdHJhcCBjb250YWluZXIgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBOZ1pvbmUgdG8gcnVuIHRoZSBmb2N1cyB0cmFwIGV2ZW50cyBvdXRzaWRlIG9mIEFuZ3VsYXIncyB6b25lLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAvKipcbiAgICogU3RvcmUgdGhlIG11dGF0aW9uIG9ic2VydmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgbGFzdEZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2N1cyB0cmFwIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSwge1xuICAgIGFsaWFzOiAnbmdwRm9jdXNUcmFwRGlzYWJsZWQnLFxuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcbiAgfSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgZm9jdXNUcmFwU3RhY2suYWRkKHRoaXMuZm9jdXNUcmFwKTtcblxuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuaGFuZGxlTXV0YXRpb25zLmJpbmQodGhpcykpO1xuXG4gICAgLy8gc2V0dXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyIS5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuaGFuZGxlRm9jdXNJbi5iaW5kKHRoaXMpKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5oYW5kbGVGb2N1c091dC5iaW5kKHRoaXMpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGhhc0ZvY3VzZWRDYW5kaWRhdGUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO1xuXG4gICAgaWYgKCFoYXNGb2N1c2VkQ2FuZGlkYXRlKSB7XG4gICAgICB0aGlzLmZvY3VzRmlyc3QoKTtcblxuICAgICAgLy8gaWYgdGhlIGZvY3VzIGRpZG4ndCBjaGFuZ2UsIGZvY3VzIHRoZSBjb250YWluZXJcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5mb2N1cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9jdXNUcmFwU3RhY2sucmVtb3ZlKHRoaXMuZm9jdXNUcmFwKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRm9jdXNJbihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb2N1c1RyYXAuYWN0aXZlIHx8IHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgdGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQgPSB0YXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXModGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBgZm9jdXNvdXRgIGV2ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVGb2N1c091dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghdGhpcy5mb2N1c1RyYXAuYWN0aXZlIHx8IHRoaXMuZGlzYWJsZWQoKSB8fCBldmVudC5yZWxhdGVkVGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICB0aGlzLmZvY3VzKHRoaXMubGFzdEZvY3VzZWRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGZvY3VzZWQgZWxlbWVudCBnZXRzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLCBicm93c2VycyBtb3ZlIGZvY3VzIGJhY2sgdG8gdGhlIGRvY3VtZW50LmJvZHkuXG4gICAqIFdlIG1vdmUgZm9jdXMgdG8gdGhlIGNvbnRhaW5lciB0byBrZWVwIGZvY3VzIHRyYXBwZWQgY29ycmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVNdXRhdGlvbnMobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKTogdm9pZCB7XG4gICAgY29uc3QgZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIGlmIChmb2N1c2VkRWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG4gICAgICBpZiAobXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5mb2N1cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGBrZXlkb3duYCBldmVudC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb2N1c1RyYXAuYWN0aXZlIHx8IHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVGFiS2V5ID0gZXZlbnQua2V5ID09PSAnVGFiJyAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5O1xuICAgIGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoaXNUYWJLZXkgJiYgZm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBbZmlyc3QsIGxhc3RdID0gdGhpcy5nZXRUYWJiYWJsZUVkZ2VzKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBoYXNUYWJiYWJsZUVsZW1lbnRzSW5zaWRlID0gZmlyc3QgJiYgbGFzdDtcblxuICAgICAgLy8gd2UgY2FuIG9ubHkgd3JhcCBmb2N1cyBpZiB3ZSBoYXZlIHRhYmJhYmxlIGVkZ2VzXG4gICAgICBpZiAoIWhhc1RhYmJhYmxlRWxlbWVudHNJbnNpZGUpIHtcbiAgICAgICAgaWYgKGZvY3VzZWRFbGVtZW50ID09PSBjb250YWluZXIpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGZvY3VzZWRFbGVtZW50ID09PSBsYXN0KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLmZvY3VzKGZpcnN0KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSAmJiBmb2N1c2VkRWxlbWVudCA9PT0gZmlyc3QpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuZm9jdXMobGFzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgYW5kIGxhc3QgdGFiYmFibGUgZWxlbWVudHMgaW5zaWRlIGEgY29udGFpbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUYWJiYWJsZUVkZ2VzKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gdGhpcy5nZXRUYWJiYWJsZUNhbmRpZGF0ZXMoY29udGFpbmVyKTtcbiAgICBjb25zdCBmaXJzdCA9IHRoaXMuZmluZFZpc2libGUoY2FuZGlkYXRlcyk7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMuZmluZFZpc2libGUoY2FuZGlkYXRlcy5yZXZlcnNlKCkpO1xuICAgIHJldHVybiBbZmlyc3QsIGxhc3RdIGFzIGNvbnN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHBvdGVudGlhbCBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIGEgY29udGFpbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXMoY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IG5vZGVzOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihjb250YWluZXIsIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULCB7XG4gICAgICBhY2NlcHROb2RlOiAobm9kZTogSFRNTEVsZW1lbnQpID0+XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNGb2N1c2FibGUobm9kZSlcbiAgICAgICAgICA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVFxuICAgICAgICAgIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUCxcbiAgICB9KTtcbiAgICB3aGlsZSAod2Fsa2VyLm5leHROb2RlKCkpIHtcbiAgICAgIG5vZGVzLnB1c2god2Fsa2VyLmN1cnJlbnROb2RlIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IHZpc2libGUgZWxlbWVudCBpbiBhIGxpc3QuLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kVmlzaWJsZShlbGVtZW50czogSFRNTEVsZW1lbnRbXSkge1xuICAgIHJldHVybiBlbGVtZW50cy5maW5kKGVsZW1lbnQgPT4gdGhpcy5pbnRlcmFjdGl2aXR5Q2hlY2tlci5pc1Zpc2libGUoZWxlbWVudCkpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzKGVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICBlbGVtZW50Py5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzRmlyc3QoKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHRoaXMuZ2V0VGFiYmFibGVDYW5kaWRhdGVzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgdGhpcy5mb2N1cyhjYW5kaWRhdGUpO1xuXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcHJldmlvdXNseUZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Copyright © 2024 Angular Primitives.
3
+ * https://github.com/ng-primitives/ng-primitives
4
+ *
5
+ * This source code is licensed under the CC BY-ND 4.0 license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import { InjectionToken, inject } from '@angular/core';
9
+ export const NgpFocusTrapToken = new InjectionToken('NgpFocusTrapToken');
10
+ /**
11
+ * Inject the FocusTrap directive instance
12
+ */
13
+ export function injectFocusTrap() {
14
+ return inject(NgpFocusTrapToken);
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvZm9jdXMtdHJhcC9zcmMvZm9jdXMtdHJhcC9mb2N1cy10cmFwLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFlLG1CQUFtQixDQUFDLENBQUM7QUFFdkY7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3BGb2N1c1RyYXAgfSBmcm9tICcuL2ZvY3VzLXRyYXAuZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IE5ncEZvY3VzVHJhcFRva2VuID0gbmV3IEluamVjdGlvblRva2VuPE5ncEZvY3VzVHJhcD4oJ05ncEZvY3VzVHJhcFRva2VuJyk7XG5cbi8qKlxuICogSW5qZWN0IHRoZSBGb2N1c1RyYXAgZGlyZWN0aXZlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RGb2N1c1RyYXAoKTogTmdwRm9jdXNUcmFwIHtcbiAgcmV0dXJuIGluamVjdChOZ3BGb2N1c1RyYXBUb2tlbik7XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright © 2024 Angular Primitives.
3
+ * https://github.com/ng-primitives/ng-primitives
4
+ *
5
+ * This source code is licensed under the CC BY-ND 4.0 license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ export { NgpFocusTrap } from './focus-trap/focus-trap.directive';
9
+ export { NgpFocusTrapToken } from './focus-trap/focus-trap.token';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2ZvY3VzLXRyYXAvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZLU5EIDQuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmV4cG9ydCB7IE5ncEZvY3VzVHJhcCB9IGZyb20gJy4vZm9jdXMtdHJhcC9mb2N1cy10cmFwLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBOZ3BGb2N1c1RyYXBUb2tlbiB9IGZyb20gJy4vZm9jdXMtdHJhcC9mb2N1cy10cmFwLnRva2VuJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcHJpbWl0aXZlcy1mb2N1cy10cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9mb2N1cy10cmFwL3NyYy9uZy1wcmltaXRpdmVzLWZvY3VzLXRyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -15,20 +15,20 @@ export class NgpDescription {
15
15
  /**
16
16
  * Access the form field that the description is associated with.
17
17
  */
18
- this.formField = injectFormField('NgpDescription');
18
+ this.formField = injectFormField();
19
19
  /**
20
20
  * The id of the description. If not provided, a unique id will be generated.
21
21
  */
22
22
  this.id = input(uniqueId('ngp-description'));
23
23
  effect(onCleanup => {
24
- this.formField.addDescription(this.id());
25
- onCleanup(() => this.formField.removeDescription(this.id()));
24
+ this.formField?.addDescription(this.id());
25
+ onCleanup(() => this.formField?.removeDescription(this.id()));
26
26
  }, { allowSignalWrites: true });
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.2", type: NgpDescription, isStandalone: true, selector: "[ngpDescription]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField.invalid()", "attr.data-valid": "formField.valid()", "attr.data-touched": "formField.touched()", "attr.data-pristine": "formField.pristine()", "attr.data-dirty": "formField.dirty()", "attr.data-pending": "formField.pending()", "attr.data-disabled": "formField.disabled()" } }, providers: [{ provide: NgpDescriptionToken, useExisting: NgpDescription }], exportAs: ["ngpDescription"], ngImport: i0 }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", type: NgpDescription, isStandalone: true, selector: "[ngpDescription]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField?.invalid()", "attr.data-valid": "formField?.valid()", "attr.data-touched": "formField?.touched()", "attr.data-pristine": "formField?.pristine()", "attr.data-dirty": "formField?.dirty()", "attr.data-pending": "formField?.pending()", "attr.data-disabled": "formField?.disabled()" } }, providers: [{ provide: NgpDescriptionToken, useExisting: NgpDescription }], exportAs: ["ngpDescription"], ngImport: i0 }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpDescription, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDescription, decorators: [{
32
32
  type: Directive,
33
33
  args: [{
34
34
  standalone: true,
@@ -37,14 +37,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
37
37
  providers: [{ provide: NgpDescriptionToken, useExisting: NgpDescription }],
38
38
  host: {
39
39
  '[attr.id]': 'id()',
40
- '[attr.data-invalid]': 'formField.invalid()',
41
- '[attr.data-valid]': 'formField.valid()',
42
- '[attr.data-touched]': 'formField.touched()',
43
- '[attr.data-pristine]': 'formField.pristine()',
44
- '[attr.data-dirty]': 'formField.dirty()',
45
- '[attr.data-pending]': 'formField.pending()',
46
- '[attr.data-disabled]': 'formField.disabled()',
40
+ '[attr.data-invalid]': 'formField?.invalid()',
41
+ '[attr.data-valid]': 'formField?.valid()',
42
+ '[attr.data-touched]': 'formField?.touched()',
43
+ '[attr.data-pristine]': 'formField?.pristine()',
44
+ '[attr.data-dirty]': 'formField?.dirty()',
45
+ '[attr.data-pending]': 'formField?.pending()',
46
+ '[attr.data-disabled]': 'formField?.disabled()',
47
47
  },
48
48
  }]
49
49
  }], ctorParameters: () => [] });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9mb3JtLWZpZWxkL3NyYy9kZXNjcmlwdGlvbi9kZXNjcmlwdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBa0IxRCxNQUFNLE9BQU8sY0FBYztJQVd6QjtRQVZBOztXQUVHO1FBQ2dCLGNBQVMsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVqRTs7V0FFRztRQUNNLE9BQUUsR0FBRyxLQUFLLENBQVMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUd2RCxNQUFNLENBQ0osU0FBUyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM1QixDQUFDO0lBQ0osQ0FBQzs4R0FuQlUsY0FBYztrR0FBZCxjQUFjLHVoQkFaZCxDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQzs7MkZBWS9ELGNBQWM7a0JBaEIxQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLGdCQUFnQixFQUFFLENBQUM7b0JBQzFFLElBQUksRUFBRTt3QkFDSixXQUFXLEVBQUUsTUFBTTt3QkFDbkIscUJBQXFCLEVBQUUscUJBQXFCO3dCQUM1QyxtQkFBbUIsRUFBRSxtQkFBbUI7d0JBQ3hDLHFCQUFxQixFQUFFLHFCQUFxQjt3QkFDNUMsc0JBQXNCLEVBQUUsc0JBQXNCO3dCQUM5QyxtQkFBbUIsRUFBRSxtQkFBbUI7d0JBQ3hDLHFCQUFxQixFQUFFLHFCQUFxQjt3QkFDNUMsc0JBQXNCLEVBQUUsc0JBQXNCO3FCQUMvQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZLU5EIDQuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbmctcHJpbWl0aXZlcy91dGlscyc7XG5pbXBvcnQgeyBpbmplY3RGb3JtRmllbGQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQudG9rZW4nO1xuaW1wb3J0IHsgTmdwRGVzY3JpcHRpb25Ub2tlbiB9IGZyb20gJy4vZGVzY3JpcHRpb24udG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmdwRGVzY3JpcHRpb25dJyxcbiAgZXhwb3J0QXM6ICduZ3BEZXNjcmlwdGlvbicsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmdwRGVzY3JpcHRpb25Ub2tlbiwgdXNlRXhpc3Rpbmc6IE5ncERlc2NyaXB0aW9uIH1dLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS1pbnZhbGlkXSc6ICdmb3JtRmllbGQuaW52YWxpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS12YWxpZF0nOiAnZm9ybUZpZWxkLnZhbGlkKCknLFxuICAgICdbYXR0ci5kYXRhLXRvdWNoZWRdJzogJ2Zvcm1GaWVsZC50b3VjaGVkKCknLFxuICAgICdbYXR0ci5kYXRhLXByaXN0aW5lXSc6ICdmb3JtRmllbGQucHJpc3RpbmUoKScsXG4gICAgJ1thdHRyLmRhdGEtZGlydHldJzogJ2Zvcm1GaWVsZC5kaXJ0eSgpJyxcbiAgICAnW2F0dHIuZGF0YS1wZW5kaW5nXSc6ICdmb3JtRmllbGQucGVuZGluZygpJyxcbiAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAnZm9ybUZpZWxkLmRpc2FibGVkKCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ3BEZXNjcmlwdGlvbiB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGZvcm0gZmllbGQgdGhhdCB0aGUgZGVzY3JpcHRpb24gaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZvcm1GaWVsZCA9IGluamVjdEZvcm1GaWVsZCgnTmdwRGVzY3JpcHRpb24nKTtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBkZXNjcmlwdGlvbi4gSWYgbm90IHByb3ZpZGVkLCBhIHVuaXF1ZSBpZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nPih1bmlxdWVJZCgnbmdwLWRlc2NyaXB0aW9uJykpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgIG9uQ2xlYW51cCA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkLmFkZERlc2NyaXB0aW9uKHRoaXMuaWQoKSk7XG4gICAgICAgIG9uQ2xlYW51cCgoKSA9PiB0aGlzLmZvcm1GaWVsZC5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLmlkKCkpKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxufVxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9mb3JtLWZpZWxkL3NyYy9kZXNjcmlwdGlvbi9kZXNjcmlwdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBa0IxRCxNQUFNLE9BQU8sY0FBYztJQVd6QjtRQVZBOztXQUVHO1FBQ2dCLGNBQVMsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUVqRDs7V0FFRztRQUNNLE9BQUUsR0FBRyxLQUFLLENBQVMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUd2RCxNQUFNLENBQ0osU0FBUyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM1QixDQUFDO0lBQ0osQ0FBQzs4R0FuQlUsY0FBYztrR0FBZCxjQUFjLDhoQkFaZCxDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQzs7MkZBWS9ELGNBQWM7a0JBaEIxQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLGdCQUFnQixFQUFFLENBQUM7b0JBQzFFLElBQUksRUFBRTt3QkFDSixXQUFXLEVBQUUsTUFBTTt3QkFDbkIscUJBQXFCLEVBQUUsc0JBQXNCO3dCQUM3QyxtQkFBbUIsRUFBRSxvQkFBb0I7d0JBQ3pDLHFCQUFxQixFQUFFLHNCQUFzQjt3QkFDN0Msc0JBQXNCLEVBQUUsdUJBQXVCO3dCQUMvQyxtQkFBbUIsRUFBRSxvQkFBb0I7d0JBQ3pDLHFCQUFxQixFQUFFLHNCQUFzQjt3QkFDN0Msc0JBQXNCLEVBQUUsdUJBQXVCO3FCQUNoRDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZLU5EIDQuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbmctcHJpbWl0aXZlcy91dGlscyc7XG5pbXBvcnQgeyBpbmplY3RGb3JtRmllbGQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQudG9rZW4nO1xuaW1wb3J0IHsgTmdwRGVzY3JpcHRpb25Ub2tlbiB9IGZyb20gJy4vZGVzY3JpcHRpb24udG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmdwRGVzY3JpcHRpb25dJyxcbiAgZXhwb3J0QXM6ICduZ3BEZXNjcmlwdGlvbicsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmdwRGVzY3JpcHRpb25Ub2tlbiwgdXNlRXhpc3Rpbmc6IE5ncERlc2NyaXB0aW9uIH1dLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS1pbnZhbGlkXSc6ICdmb3JtRmllbGQ/LmludmFsaWQoKScsXG4gICAgJ1thdHRyLmRhdGEtdmFsaWRdJzogJ2Zvcm1GaWVsZD8udmFsaWQoKScsXG4gICAgJ1thdHRyLmRhdGEtdG91Y2hlZF0nOiAnZm9ybUZpZWxkPy50b3VjaGVkKCknLFxuICAgICdbYXR0ci5kYXRhLXByaXN0aW5lXSc6ICdmb3JtRmllbGQ/LnByaXN0aW5lKCknLFxuICAgICdbYXR0ci5kYXRhLWRpcnR5XSc6ICdmb3JtRmllbGQ/LmRpcnR5KCknLFxuICAgICdbYXR0ci5kYXRhLXBlbmRpbmddJzogJ2Zvcm1GaWVsZD8ucGVuZGluZygpJyxcbiAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAnZm9ybUZpZWxkPy5kaXNhYmxlZCgpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTmdwRGVzY3JpcHRpb24ge1xuICAvKipcbiAgICogQWNjZXNzIHRoZSBmb3JtIGZpZWxkIHRoYXQgdGhlIGRlc2NyaXB0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBmb3JtRmllbGQgPSBpbmplY3RGb3JtRmllbGQoKTtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBkZXNjcmlwdGlvbi4gSWYgbm90IHByb3ZpZGVkLCBhIHVuaXF1ZSBpZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nPih1bmlxdWVJZCgnbmdwLWRlc2NyaXB0aW9uJykpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgIG9uQ2xlYW51cCA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkPy5hZGREZXNjcmlwdGlvbih0aGlzLmlkKCkpO1xuICAgICAgICBvbkNsZWFudXAoKCkgPT4gdGhpcy5mb3JtRmllbGQ/LnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuaWQoKSkpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -5,8 +5,8 @@
5
5
  * This source code is licensed under the CC BY-ND 4.0 license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
- import { Directive, computed, input, } from '@angular/core';
9
- import { uniqueId } from 'ng-primitives/utils';
8
+ import { Directive, computed, input } from '@angular/core';
9
+ import { onBooleanChange, uniqueId } from 'ng-primitives/utils';
10
10
  import { injectFormField } from '../form-field/form-field.token';
11
11
  import { NgpErrorToken } from './error.token';
12
12
  import * as i0 from "@angular/core";
@@ -15,7 +15,7 @@ export class NgpError {
15
15
  /**
16
16
  * Access the form field that the description is associated with.
17
17
  */
18
- this.formField = injectFormField('NgpError');
18
+ this.formField = injectFormField();
19
19
  /**
20
20
  * The id of the error message. If not provided, a unique id will be generated.
21
21
  */
@@ -27,34 +27,32 @@ export class NgpError {
27
27
  alias: 'ngpErrorValidator',
28
28
  });
29
29
  /**
30
- * Determine whether the validator associated with this error is failing.
30
+ * Determine if there is an error message.
31
31
  */
32
- this.state = computed(() => {
33
- const errors = this.formField.errors();
32
+ this.hasError = computed(() => {
33
+ const errors = this.formField?.errors() ?? [];
34
34
  const validator = this.validator();
35
- // if there is no validator, then we mark as invalid when the control is invalid.
36
- if (!validator) {
37
- return null;
38
- }
39
- return validator && errors.includes(validator) ? 'fail' : 'pass';
35
+ return validator ? errors?.includes(validator) : errors?.length > 0;
40
36
  });
41
- }
42
- ngOnInit() {
43
- this.formField.addDescription(this.id());
37
+ /**
38
+ * Determine whether the validator associated with this error is failing.
39
+ */
40
+ this.state = computed(() => (this.hasError() ? 'fail' : 'pass'));
41
+ // add or remove the error message when the error state changes
42
+ onBooleanChange(this.hasError, () => this.formField?.addDescription(this.id()), () => this.formField?.removeDescription(this.id()));
44
43
  }
45
44
  ngOnChanges(changes) {
46
45
  if ('id' in changes) {
47
- this.formField.removeDescription(changes['id'].previousValue);
48
- this.formField.addDescription(changes['id'].currentValue);
46
+ this.formField?.removeDescription(changes['id'].previousValue);
49
47
  }
50
48
  }
51
49
  ngOnDestroy() {
52
- this.formField.removeDescription(this.id());
50
+ this.formField?.removeDescription(this.id());
53
51
  }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpError, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
55
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.2", type: NgpError, isStandalone: true, selector: "[ngpError]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "ngpErrorValidator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField.invalid()", "attr.data-valid": "formField.valid()", "attr.data-touched": "formField.touched()", "attr.data-pristine": "formField.pristine()", "attr.data-dirty": "formField.dirty()", "attr.data-pending": "formField.pending()", "attr.data-disabled": "formField.disabled()", "attr.data-validator": "state()" } }, providers: [{ provide: NgpErrorToken, useExisting: NgpError }], exportAs: ["ngpError"], usesOnChanges: true, ngImport: i0 }); }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpError, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
53
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", type: NgpError, isStandalone: true, selector: "[ngpError]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "ngpErrorValidator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField?.invalid()", "attr.data-valid": "formField?.valid()", "attr.data-touched": "formField?.touched()", "attr.data-pristine": "formField?.pristine()", "attr.data-dirty": "formField?.dirty()", "attr.data-pending": "formField?.pending()", "attr.data-disabled": "formField?.disabled()", "attr.data-validator": "state()" } }, providers: [{ provide: NgpErrorToken, useExisting: NgpError }], exportAs: ["ngpError"], usesOnChanges: true, ngImport: i0 }); }
56
54
  }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpError, decorators: [{
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpError, decorators: [{
58
56
  type: Directive,
59
57
  args: [{
60
58
  standalone: true,
@@ -63,15 +61,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
63
61
  providers: [{ provide: NgpErrorToken, useExisting: NgpError }],
64
62
  host: {
65
63
  '[attr.id]': 'id()',
66
- '[attr.data-invalid]': 'formField.invalid()',
67
- '[attr.data-valid]': 'formField.valid()',
68
- '[attr.data-touched]': 'formField.touched()',
69
- '[attr.data-pristine]': 'formField.pristine()',
70
- '[attr.data-dirty]': 'formField.dirty()',
71
- '[attr.data-pending]': 'formField.pending()',
72
- '[attr.data-disabled]': 'formField.disabled()',
64
+ '[attr.data-invalid]': 'formField?.invalid()',
65
+ '[attr.data-valid]': 'formField?.valid()',
66
+ '[attr.data-touched]': 'formField?.touched()',
67
+ '[attr.data-pristine]': 'formField?.pristine()',
68
+ '[attr.data-dirty]': 'formField?.dirty()',
69
+ '[attr.data-pending]': 'formField?.pending()',
70
+ '[attr.data-disabled]': 'formField?.disabled()',
73
71
  '[attr.data-validator]': 'state()',
74
72
  },
75
73
  }]
76
- }] });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9mb3JtLWZpZWxkL3NyYy9lcnJvci9lcnJvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFLVCxRQUFRLEVBQ1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFtQjlDLE1BQU0sT0FBTyxRQUFRO0lBakJyQjtRQWtCRTs7V0FFRztRQUNnQixjQUFTLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTNEOztXQUVHO1FBQ00sT0FBRSxHQUFHLEtBQUssQ0FBUyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVuRDs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQWdCLElBQUksRUFBRTtZQUM5QyxLQUFLLEVBQUUsbUJBQW1CO1NBQzNCLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ2dCLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRW5DLGlGQUFpRjtZQUNqRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsT0FBTyxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7S0FnQko7SUFkQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDOzhHQTlDVSxRQUFRO2tHQUFSLFFBQVEsK3JCQWJSLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQzs7MkZBYW5ELFFBQVE7a0JBakJwQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLFVBQVUsRUFBRSxDQUFDO29CQUM5RCxJQUFJLEVBQUU7d0JBQ0osV0FBVyxFQUFFLE1BQU07d0JBQ25CLHFCQUFxQixFQUFFLHFCQUFxQjt3QkFDNUMsbUJBQW1CLEVBQUUsbUJBQW1CO3dCQUN4QyxxQkFBcUIsRUFBRSxxQkFBcUI7d0JBQzVDLHNCQUFzQixFQUFFLHNCQUFzQjt3QkFDOUMsbUJBQW1CLEVBQUUsbUJBQW1CO3dCQUN4QyxxQkFBcUIsRUFBRSxxQkFBcUI7d0JBQzVDLHNCQUFzQixFQUFFLHNCQUFzQjt3QkFDOUMsdUJBQXVCLEVBQUUsU0FBUztxQkFDbkM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdW5pcXVlSWQgfSBmcm9tICduZy1wcmltaXRpdmVzL3V0aWxzJztcbmltcG9ydCB7IGluamVjdEZvcm1GaWVsZCB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC50b2tlbic7XG5pbXBvcnQgeyBOZ3BFcnJvclRva2VuIH0gZnJvbSAnLi9lcnJvci50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tuZ3BFcnJvcl0nLFxuICBleHBvcnRBczogJ25ncEVycm9yJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOZ3BFcnJvclRva2VuLCB1c2VFeGlzdGluZzogTmdwRXJyb3IgfV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuaWRdJzogJ2lkKCknLFxuICAgICdbYXR0ci5kYXRhLWludmFsaWRdJzogJ2Zvcm1GaWVsZC5pbnZhbGlkKCknLFxuICAgICdbYXR0ci5kYXRhLXZhbGlkXSc6ICdmb3JtRmllbGQudmFsaWQoKScsXG4gICAgJ1thdHRyLmRhdGEtdG91Y2hlZF0nOiAnZm9ybUZpZWxkLnRvdWNoZWQoKScsXG4gICAgJ1thdHRyLmRhdGEtcHJpc3RpbmVdJzogJ2Zvcm1GaWVsZC5wcmlzdGluZSgpJyxcbiAgICAnW2F0dHIuZGF0YS1kaXJ0eV0nOiAnZm9ybUZpZWxkLmRpcnR5KCknLFxuICAgICdbYXR0ci5kYXRhLXBlbmRpbmddJzogJ2Zvcm1GaWVsZC5wZW5kaW5nKCknLFxuICAgICdbYXR0ci5kYXRhLWRpc2FibGVkXSc6ICdmb3JtRmllbGQuZGlzYWJsZWQoKScsXG4gICAgJ1thdHRyLmRhdGEtdmFsaWRhdG9yXSc6ICdzdGF0ZSgpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTmdwRXJyb3IgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZm9ybSBmaWVsZCB0aGF0IHRoZSBkZXNjcmlwdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9ybUZpZWxkID0gaW5qZWN0Rm9ybUZpZWxkKCdOZ3BFcnJvcicpO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGVycm9yIG1lc3NhZ2UuIElmIG5vdCBwcm92aWRlZCwgYSB1bmlxdWUgaWQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBpZCA9IGlucHV0PHN0cmluZz4odW5pcXVlSWQoJ25ncC1lcnJvcicpKTtcblxuICAvKipcbiAgICogVGhlIHZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0b3IgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsLCB7XG4gICAgYWxpYXM6ICduZ3BFcnJvclZhbGlkYXRvcicsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgdmFsaWRhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVycm9yIGlzIGZhaWxpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy5mb3JtRmllbGQuZXJyb3JzKCk7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy52YWxpZGF0b3IoKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIHZhbGlkYXRvciwgdGhlbiB3ZSBtYXJrIGFzIGludmFsaWQgd2hlbiB0aGUgY29udHJvbCBpcyBpbnZhbGlkLlxuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yICYmIGVycm9ycy5pbmNsdWRlcyh2YWxpZGF0b3IpID8gJ2ZhaWwnIDogJ3Bhc3MnO1xuICB9KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1GaWVsZC5hZGREZXNjcmlwdGlvbih0aGlzLmlkKCkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgnaWQnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkLnJlbW92ZURlc2NyaXB0aW9uKGNoYW5nZXNbJ2lkJ10ucHJldmlvdXNWYWx1ZSk7XG4gICAgICB0aGlzLmZvcm1GaWVsZC5hZGREZXNjcmlwdGlvbihjaGFuZ2VzWydpZCddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRmllbGQucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5pZCgpKTtcbiAgfVxufVxuIl19
74
+ }], ctorParameters: () => [] });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9mb3JtLWZpZWxkL3NyYy9lcnJvci9lcnJvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBdUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQW1COUMsTUFBTSxPQUFPLFFBQVE7SUFpQ25CO1FBaENBOztXQUVHO1FBQ2dCLGNBQVMsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUVqRDs7V0FFRztRQUNNLE9BQUUsR0FBRyxLQUFLLENBQVMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFbkQ7O1dBRUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFnQixJQUFJLEVBQUU7WUFDOUMsS0FBSyxFQUFFLG1CQUFtQjtTQUMzQixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNnQixhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFbkMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDZ0IsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRzdFLCtEQUErRDtRQUMvRCxlQUFlLENBQ2IsSUFBSSxDQUFDLFFBQVEsRUFDYixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFDL0MsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDOzhHQWxEVSxRQUFRO2tHQUFSLFFBQVEsc3NCQWJSLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQzs7MkZBYW5ELFFBQVE7a0JBakJwQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLFVBQVUsRUFBRSxDQUFDO29CQUM5RCxJQUFJLEVBQUU7d0JBQ0osV0FBVyxFQUFFLE1BQU07d0JBQ25CLHFCQUFxQixFQUFFLHNCQUFzQjt3QkFDN0MsbUJBQW1CLEVBQUUsb0JBQW9CO3dCQUN6QyxxQkFBcUIsRUFBRSxzQkFBc0I7d0JBQzdDLHNCQUFzQixFQUFFLHVCQUF1Qjt3QkFDL0MsbUJBQW1CLEVBQUUsb0JBQW9CO3dCQUN6QyxxQkFBcUIsRUFBRSxzQkFBc0I7d0JBQzdDLHNCQUFzQixFQUFFLHVCQUF1Qjt3QkFDL0MsdUJBQXVCLEVBQUUsU0FBUztxQkFDbkM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbkJvb2xlYW5DaGFuZ2UsIHVuaXF1ZUlkIH0gZnJvbSAnbmctcHJpbWl0aXZlcy91dGlscyc7XG5pbXBvcnQgeyBpbmplY3RGb3JtRmllbGQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQudG9rZW4nO1xuaW1wb3J0IHsgTmdwRXJyb3JUb2tlbiB9IGZyb20gJy4vZXJyb3IudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmdwRXJyb3JdJyxcbiAgZXhwb3J0QXM6ICduZ3BFcnJvcicsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmdwRXJyb3JUb2tlbiwgdXNlRXhpc3Rpbmc6IE5ncEVycm9yIH1dLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS1pbnZhbGlkXSc6ICdmb3JtRmllbGQ/LmludmFsaWQoKScsXG4gICAgJ1thdHRyLmRhdGEtdmFsaWRdJzogJ2Zvcm1GaWVsZD8udmFsaWQoKScsXG4gICAgJ1thdHRyLmRhdGEtdG91Y2hlZF0nOiAnZm9ybUZpZWxkPy50b3VjaGVkKCknLFxuICAgICdbYXR0ci5kYXRhLXByaXN0aW5lXSc6ICdmb3JtRmllbGQ/LnByaXN0aW5lKCknLFxuICAgICdbYXR0ci5kYXRhLWRpcnR5XSc6ICdmb3JtRmllbGQ/LmRpcnR5KCknLFxuICAgICdbYXR0ci5kYXRhLXBlbmRpbmddJzogJ2Zvcm1GaWVsZD8ucGVuZGluZygpJyxcbiAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAnZm9ybUZpZWxkPy5kaXNhYmxlZCgpJyxcbiAgICAnW2F0dHIuZGF0YS12YWxpZGF0b3JdJzogJ3N0YXRlKCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ3BFcnJvciBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZm9ybSBmaWVsZCB0aGF0IHRoZSBkZXNjcmlwdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9ybUZpZWxkID0gaW5qZWN0Rm9ybUZpZWxkKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgZXJyb3IgbWVzc2FnZS4gSWYgbm90IHByb3ZpZGVkLCBhIHVuaXF1ZSBpZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nPih1bmlxdWVJZCgnbmdwLWVycm9yJykpO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsaWRhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRvciA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwsIHtcbiAgICBhbGlhczogJ25ncEVycm9yVmFsaWRhdG9yJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGVyZSBpcyBhbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc0Vycm9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZm9ybUZpZWxkPy5lcnJvcnMoKSA/PyBbXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLnZhbGlkYXRvcigpO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IGVycm9ycz8uaW5jbHVkZXModmFsaWRhdG9yKSA6IGVycm9ycz8ubGVuZ3RoID4gMDtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSB2YWxpZGF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXJyb3IgaXMgZmFpbGluZy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzdGF0ZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmhhc0Vycm9yKCkgPyAnZmFpbCcgOiAncGFzcycpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBhZGQgb3IgcmVtb3ZlIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIGVycm9yIHN0YXRlIGNoYW5nZXNcbiAgICBvbkJvb2xlYW5DaGFuZ2UoXG4gICAgICB0aGlzLmhhc0Vycm9yLFxuICAgICAgKCkgPT4gdGhpcy5mb3JtRmllbGQ/LmFkZERlc2NyaXB0aW9uKHRoaXMuaWQoKSksXG4gICAgICAoKSA9PiB0aGlzLmZvcm1GaWVsZD8ucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5pZCgpKSxcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgnaWQnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkPy5yZW1vdmVEZXNjcmlwdGlvbihjaGFuZ2VzWydpZCddLnByZXZpb3VzVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUZpZWxkPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLmlkKCkpO1xuICB9XG59XG4iXX0=