@cleavelandprice/ngx-lib 4.4.2 → 4.4.4

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 (199) hide show
  1. package/README.md +5 -5
  2. package/active-directory/material/components/user-chooser/user-chooser.component.d.ts +18 -18
  3. package/esm2022/active-directory/active-directory.api.mjs +11 -0
  4. package/esm2022/active-directory/active-directory.module.mjs +40 -0
  5. package/esm2022/active-directory/cleavelandprice-ngx-lib-active-directory.mjs +5 -0
  6. package/esm2022/active-directory/material/cleavelandprice-ngx-lib-active-directory-material.mjs +5 -0
  7. package/esm2022/active-directory/material/components/user-chooser/user-chooser.component.mjs +437 -0
  8. package/esm2022/active-directory/material/components/user-form-field/user-form-field.component.mjs +159 -0
  9. package/esm2022/active-directory/material/mat-active-directory.api.mjs +11 -0
  10. package/esm2022/active-directory/material/mat-active-directory.module.mjs +100 -0
  11. package/esm2022/active-directory/material/model/default-user-chooser-data.mjs +15 -0
  12. package/esm2022/active-directory/material/model/default-user-chooser-filter-options.mjs +8 -0
  13. package/esm2022/active-directory/material/model/selectable-group.mjs +2 -0
  14. package/esm2022/active-directory/material/model/selectable-user.mjs +2 -0
  15. package/esm2022/active-directory/material/model/user-chooser-data.mjs +2 -0
  16. package/esm2022/active-directory/material/model/user-chooser-filter-options.mjs +3 -0
  17. package/esm2022/active-directory/material/model/user-chooser-mode.mjs +6 -0
  18. package/esm2022/active-directory/material/model/user-chooser-pre-processing-group.mjs +3 -0
  19. package/esm2022/active-directory/model/active-directory-service-options-token.mjs +3 -0
  20. package/esm2022/active-directory/model/active-directory-service-options.mjs +2 -0
  21. package/esm2022/active-directory/model/ad-object-with-children.mjs +2 -0
  22. package/esm2022/active-directory/model/ad-object.mjs +2 -0
  23. package/esm2022/active-directory/model/cache-object.mjs +3 -0
  24. package/esm2022/active-directory/model/cleaveland-price-user.mjs +2 -0
  25. package/esm2022/active-directory/model/group.mjs +2 -0
  26. package/esm2022/active-directory/model/user-or-group.mjs +2 -0
  27. package/esm2022/active-directory/model/user.mjs +2 -0
  28. package/esm2022/active-directory/services/active-directory.service.mjs +125 -0
  29. package/esm2022/authentication/authentication.api.mjs +7 -0
  30. package/esm2022/authentication/authentication.base.module.mjs +40 -0
  31. package/esm2022/authentication/cleavelandprice-ngx-lib-authentication.mjs +5 -0
  32. package/esm2022/authentication/material/cleavelandprice-ngx-lib-authentication-material.mjs +5 -0
  33. package/esm2022/authentication/material/components/login/login.component.mjs +49 -0
  34. package/esm2022/authentication/material/components/login-form/login-form.component.mjs +82 -0
  35. package/esm2022/authentication/material/mat-authentication.api.mjs +8 -0
  36. package/esm2022/authentication/material/mat-authentication.module.mjs +84 -0
  37. package/esm2022/authentication/material/model/login-form-data.mjs +2 -0
  38. package/esm2022/authentication/material/model/mat-authentication-service-options-token.mjs +3 -0
  39. package/esm2022/authentication/material/model/mat-authentication-service-options.mjs +2 -0
  40. package/esm2022/authentication/material/services/mat-authentication.service.mjs +67 -0
  41. package/esm2022/authentication/model/abstract-authentication-service.mjs +2 -0
  42. package/esm2022/authentication/model/authenticated-user.mjs +2 -0
  43. package/esm2022/authentication/model/authentication-request.mjs +2 -0
  44. package/esm2022/authentication/model/authentication-service-options-token.mjs +3 -0
  45. package/esm2022/authentication/model/authentication-service-options.mjs +2 -0
  46. package/esm2022/authentication/object/authentication-object.api.mjs +6 -0
  47. package/esm2022/authentication/object/authentication-object.module.mjs +40 -0
  48. package/esm2022/authentication/object/cleavelandprice-ngx-lib-authentication-object.mjs +5 -0
  49. package/esm2022/authentication/object/services/authentication-object.service.mjs +129 -0
  50. package/esm2022/authentication/token/authentication-token.api.mjs +6 -0
  51. package/esm2022/authentication/token/authetiction-token.module.mjs +40 -0
  52. package/esm2022/authentication/token/cleavelandprice-ngx-lib-authentication-token.mjs +5 -0
  53. package/esm2022/authentication/token/model/authentication-token-service-options-token.mjs +3 -0
  54. package/esm2022/authentication/token/model/authentication-token-service-options.mjs +2 -0
  55. package/esm2022/authentication/token/model/authentication-token.mjs +2 -0
  56. package/esm2022/authentication/token/services/authentication-token.service.mjs +138 -0
  57. package/esm2022/cleavelandprice-ngx-lib.mjs +5 -0
  58. package/esm2022/dialog/cleavelandprice-ngx-lib-dialog.mjs +5 -0
  59. package/esm2022/dialog/components/base/base.component.mjs +102 -0
  60. package/esm2022/dialog/components/choice/choice.component.mjs +21 -0
  61. package/esm2022/dialog/components/confirmation/confirmation.component.mjs +21 -0
  62. package/esm2022/dialog/components/input/input.component.mjs +21 -0
  63. package/esm2022/dialog/components/message/message.component.mjs +21 -0
  64. package/esm2022/dialog/dialog.api.mjs +20 -0
  65. package/esm2022/dialog/dialog.module.mjs +73 -0
  66. package/esm2022/dialog/model/confirmation-dialog-mode.mjs +8 -0
  67. package/esm2022/dialog/model/dialog-base-data.mjs +2 -0
  68. package/esm2022/dialog/model/dialog-choice-data.mjs +2 -0
  69. package/esm2022/dialog/model/dialog-type.mjs +8 -0
  70. package/esm2022/lib/model/app-path-config.mjs +2 -0
  71. package/esm2022/lib/model/app-type.mjs +2 -0
  72. package/esm2022/lib/model/app.mjs +2 -0
  73. package/esm2022/lib/model/caching-config.mjs +2 -0
  74. package/esm2022/lib/model/credentials.mjs +2 -0
  75. package/esm2022/lib/model/logging-config.mjs +2 -0
  76. package/esm2022/lib/model/service-options-token.mjs +3 -0
  77. package/esm2022/lib/model/service-options.mjs +2 -0
  78. package/esm2022/lib/ngx-lib.module.mjs +37 -0
  79. package/esm2022/lib/services/app-path-config.service.mjs +50 -0
  80. package/esm2022/lib/services/service-base.mjs +26 -0
  81. package/esm2022/msgraph/cleavelandprice-ngx-lib-msgraph.mjs +5 -0
  82. package/esm2022/msgraph/model/address.mjs +2 -0
  83. package/esm2022/msgraph/model/attendee.mjs +2 -0
  84. package/esm2022/msgraph/model/bulk-calendar-events.mjs +2 -0
  85. package/esm2022/msgraph/model/bulk-calendar-request.mjs +2 -0
  86. package/esm2022/msgraph/model/calendar-event.mjs +2 -0
  87. package/esm2022/msgraph/model/coordinates.mjs +2 -0
  88. package/esm2022/msgraph/model/email-address.mjs +2 -0
  89. package/esm2022/msgraph/model/location.mjs +2 -0
  90. package/esm2022/msgraph/model/online-meeting-info.mjs +2 -0
  91. package/esm2022/msgraph/model/patterned-recurrence.mjs +2 -0
  92. package/esm2022/msgraph/model/phone.mjs +2 -0
  93. package/esm2022/msgraph/model/recipient.mjs +2 -0
  94. package/esm2022/msgraph/model/recurrence-pattern.mjs +2 -0
  95. package/esm2022/msgraph/model/recurrence-range.mjs +2 -0
  96. package/esm2022/msgraph/model/response-status.mjs +2 -0
  97. package/esm2022/msgraph/model/room.mjs +6 -0
  98. package/esm2022/msgraph/model/user.mjs +132 -0
  99. package/esm2022/msgraph/msgraph.api.mjs +19 -0
  100. package/esm2022/msgraph/msgraph.module.mjs +27 -0
  101. package/esm2022/public_api.mjs +15 -0
  102. package/esm2022/quill/cleavelandprice-ngx-lib-quill.mjs +5 -0
  103. package/esm2022/quill/components/editor/editor.component.mjs +282 -0
  104. package/esm2022/quill/components/raw/raw.component.mjs +30 -0
  105. package/esm2022/quill/mention/cleavelandprice-ngx-lib-quill-mention.mjs +5 -0
  106. package/esm2022/quill/mention/components/editor/editor.component.mjs +151 -0
  107. package/esm2022/quill/mention/model/dialog-data.mjs +2 -0
  108. package/esm2022/quill/mention/quill-mention.api.mjs +9 -0
  109. package/esm2022/quill/mention/quill-mention.module.mjs +65 -0
  110. package/esm2022/quill/model/buttons.mjs +3 -0
  111. package/esm2022/quill/model/config.mjs +3 -0
  112. package/esm2022/quill/model/default-buttons.mjs +50 -0
  113. package/esm2022/quill/model/default-config.mjs +28 -0
  114. package/esm2022/quill/model/default-icons.mjs +7 -0
  115. package/esm2022/quill/model/default-tooltips.mjs +53 -0
  116. package/esm2022/quill/model/dialog-data.mjs +2 -0
  117. package/esm2022/quill/model/icons.mjs +3 -0
  118. package/esm2022/quill/model/tooltips.mjs +3 -0
  119. package/esm2022/quill/quill.api.mjs +13 -0
  120. package/esm2022/quill/quill.module.mjs +75 -0
  121. package/esm2022/sharepoint/cleavelandprice-ngx-lib-sharepoint.mjs +5 -0
  122. package/esm2022/sharepoint/components/user-photo/user-photo.component.mjs +40 -0
  123. package/esm2022/sharepoint/default-credentials.mjs +6 -0
  124. package/esm2022/sharepoint/model/base-item.mjs +2 -0
  125. package/esm2022/sharepoint/model/base-request-credential.mjs +2 -0
  126. package/esm2022/sharepoint/model/base-request.mjs +2 -0
  127. package/esm2022/sharepoint/model/cache-object.mjs +3 -0
  128. package/esm2022/sharepoint/model/file-request.mjs +2 -0
  129. package/esm2022/sharepoint/model/folder-request.mjs +2 -0
  130. package/esm2022/sharepoint/model/list-item.mjs +2 -0
  131. package/esm2022/sharepoint/model/list-items-request.mjs +2 -0
  132. package/esm2022/sharepoint/model/photo-item.mjs +2 -0
  133. package/esm2022/sharepoint/model/sharepoint-service-options.mjs +3 -0
  134. package/esm2022/sharepoint/model/uri-request.mjs +2 -0
  135. package/esm2022/sharepoint/model/user-request.mjs +2 -0
  136. package/esm2022/sharepoint/model/user.mjs +2 -0
  137. package/esm2022/sharepoint/pipes/user-photo-url.pipe.mjs +37 -0
  138. package/esm2022/sharepoint/services/sharepoint.service.mjs +155 -0
  139. package/esm2022/sharepoint/sharepoint.api.mjs +17 -0
  140. package/esm2022/sharepoint/sharepoint.module.mjs +50 -0
  141. package/esm2022/table/cleavelandprice-ngx-lib-table.mjs +5 -0
  142. package/esm2022/table/components/table/table.component.mjs +134 -0
  143. package/esm2022/table/model/table-column.mjs +2 -0
  144. package/esm2022/table/pipes/decimalPoints.mjs +14 -0
  145. package/esm2022/table/pipes/roundNumber.mjs +14 -0
  146. package/esm2022/table/table.api.mjs +6 -0
  147. package/esm2022/table/table.module.mjs +78 -0
  148. package/esm2022/upload/cleavelandprice-ngx-lib-upload.mjs +5 -0
  149. package/esm2022/upload/components/upload/upload.component.mjs +32 -0
  150. package/esm2022/upload/components/upload-dialog/upload-dialog.component.mjs +98 -0
  151. package/esm2022/upload/model/database-file-info.mjs +2 -0
  152. package/esm2022/upload/model/file-upload-request.mjs +2 -0
  153. package/esm2022/upload/model/filesystem-file-info.mjs +2 -0
  154. package/esm2022/upload/model/msg-file-content.mjs +5 -0
  155. package/esm2022/upload/model/upload-service-options-token.mjs +3 -0
  156. package/esm2022/upload/model/upload-service-options.mjs +3 -0
  157. package/esm2022/upload/model/upload-status.mjs +2 -0
  158. package/esm2022/upload/services/upload.service.mjs +106 -0
  159. package/esm2022/upload/upload.api.mjs +11 -0
  160. package/esm2022/upload/upload.module.mjs +68 -0
  161. package/esm2022/url-utilities/cleavelandprice-ngx-lib-url-utilities.mjs +5 -0
  162. package/esm2022/url-utilities/pipes/safe-resource-url.pipe.mjs +19 -0
  163. package/esm2022/url-utilities/pipes/safe-url.pipe.mjs +19 -0
  164. package/esm2022/url-utilities/pipes/uri-scheme.pipe.mjs +106 -0
  165. package/esm2022/url-utilities/url-utilities.api.mjs +13 -0
  166. package/esm2022/url-utilities/url-utilities.module.mjs +34 -0
  167. package/fesm2022/cleavelandprice-ngx-lib-active-directory-material.mjs +12 -12
  168. package/fesm2022/cleavelandprice-ngx-lib-active-directory-material.mjs.map +1 -1
  169. package/fesm2022/cleavelandprice-ngx-lib-active-directory.mjs +7 -7
  170. package/fesm2022/cleavelandprice-ngx-lib-active-directory.mjs.map +1 -1
  171. package/fesm2022/cleavelandprice-ngx-lib-authentication-material.mjs +15 -15
  172. package/fesm2022/cleavelandprice-ngx-lib-authentication-material.mjs.map +1 -1
  173. package/fesm2022/cleavelandprice-ngx-lib-authentication-object.mjs +7 -7
  174. package/fesm2022/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -1
  175. package/fesm2022/cleavelandprice-ngx-lib-authentication-token.mjs +7 -7
  176. package/fesm2022/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -1
  177. package/fesm2022/cleavelandprice-ngx-lib-authentication.mjs +4 -4
  178. package/fesm2022/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
  179. package/fesm2022/cleavelandprice-ngx-lib-dialog.mjs +24 -24
  180. package/fesm2022/cleavelandprice-ngx-lib-dialog.mjs.map +1 -1
  181. package/fesm2022/cleavelandprice-ngx-lib-msgraph.mjs +4 -4
  182. package/fesm2022/cleavelandprice-ngx-lib-msgraph.mjs.map +1 -1
  183. package/fesm2022/cleavelandprice-ngx-lib-quill-mention.mjs +10 -10
  184. package/fesm2022/cleavelandprice-ngx-lib-quill-mention.mjs.map +1 -1
  185. package/fesm2022/cleavelandprice-ngx-lib-quill.mjs +14 -14
  186. package/fesm2022/cleavelandprice-ngx-lib-quill.mjs.map +1 -1
  187. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs +14 -14
  188. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  189. package/fesm2022/cleavelandprice-ngx-lib-table.mjs +28 -14
  190. package/fesm2022/cleavelandprice-ngx-lib-table.mjs.map +1 -1
  191. package/fesm2022/cleavelandprice-ngx-lib-upload.mjs +15 -14
  192. package/fesm2022/cleavelandprice-ngx-lib-upload.mjs.map +1 -1
  193. package/fesm2022/cleavelandprice-ngx-lib-url-utilities.mjs +13 -13
  194. package/fesm2022/cleavelandprice-ngx-lib-url-utilities.mjs.map +1 -1
  195. package/fesm2022/cleavelandprice-ngx-lib.mjs +7 -7
  196. package/fesm2022/cleavelandprice-ngx-lib.mjs.map +1 -1
  197. package/package.json +35 -5
  198. package/table/components/table/table.component.d.ts +5 -1
  199. package/table/model/table-column.d.ts +24 -1
@@ -0,0 +1,159 @@
1
+ import { Component, inject, input, output } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
3
+ import { forkJoin, of } from 'rxjs';
4
+ import { ActiveDirectoryService } from '@cleavelandprice/ngx-lib/active-directory';
5
+ import { SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';
6
+ import { DefaultUserChooserData } from '../../model/default-user-chooser-data';
7
+ import { NgClass } from '@angular/common';
8
+ import { MatButton, MatIconButton } from '@angular/material/button';
9
+ import { MatFormField, MatSuffix } from '@angular/material/form-field';
10
+ import { MatIcon } from '@angular/material/icon';
11
+ import { MatInput } from '@angular/material/input';
12
+ import { MatProgressBar } from '@angular/material/progress-bar';
13
+ import { UserChooserMode } from '../../mat-active-directory.api';
14
+ import { UserChooserComponent } from '../user-chooser/user-chooser.component';
15
+ import * as i0 from "@angular/core";
16
+ export class UserFormFieldComponent {
17
+ constructor() {
18
+ //#region Fields
19
+ this.#services = {
20
+ dialog: inject(MatDialog),
21
+ activeDirectory: inject(ActiveDirectoryService),
22
+ sharePoint: inject(SharePointService)
23
+ };
24
+ this.usersSelected = output(); // string for Single mode, string[] for multi
25
+ this.userUnSelected = output();
26
+ this.placeholder = input('Select User(s)');
27
+ this.clickable = input(true);
28
+ this.userChooserData = input.required();
29
+ }
30
+ //#region Fields
31
+ #services;
32
+ //#endregion
33
+ //#region Properties
34
+ /*get isEdge(): boolean {
35
+ return window.navigator.userAgent.indexOf('Edge') > -1;
36
+ }*/
37
+ get class() {
38
+ return this._userChooserData?.mode === UserChooserMode.Single ? '' :
39
+ (this.accountNames?.length ?? 0) > 4 ? 'grid five' :
40
+ (this.accountNames?.length ?? 0) > 3 ? 'grid four' :
41
+ (this.accountNames?.length ?? 0) > 2 ? 'grid three' :
42
+ (this.accountNames?.length ?? 0) > 1 ? 'grid two' :
43
+ '';
44
+ }
45
+ //#endregion
46
+ //#region Lifecycle
47
+ ngOnInit() {
48
+ this._userChooserData = {
49
+ ...DefaultUserChooserData,
50
+ ...this.userChooserData()
51
+ };
52
+ // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component
53
+ this.accountNames = this._userChooserData.preSelections?.accountNames;
54
+ this.#getData();
55
+ }
56
+ //#endregion
57
+ //#region Events
58
+ selectUser() {
59
+ if (!this.clickable()) {
60
+ return;
61
+ }
62
+ const data = {
63
+ ...this._userChooserData,
64
+ users: this.users,
65
+ photos: this.photos,
66
+ };
67
+ this.#services.dialog.open(UserChooserComponent, {
68
+ data: data
69
+ })
70
+ .afterClosed()
71
+ .subscribe((selected) => {
72
+ if (!selected) {
73
+ return;
74
+ }
75
+ this.accountNames = Array.isArray(selected) ?
76
+ selected.map(s => typeof (s) === 'string' ? s : s.sAMAccountName) :
77
+ [selected].map(s => typeof (s) === 'string' ? s : s.sAMAccountName);
78
+ // Overwrite what may have been passed in, for subsequent launches of UserChooserComponent - otherwise it just keeps getting fed stale data
79
+ if (this._userChooserData.preSelections) {
80
+ this._userChooserData.preSelections.accountNames = this.accountNames;
81
+ }
82
+ this.usersSelected.emit(selected);
83
+ });
84
+ }
85
+ unSelectUser(accountName) {
86
+ const index = this.accountNames?.findIndex(a => a === accountName);
87
+ this.accountNames?.splice(index ?? -1, 1);
88
+ if (this._userChooserData.preSelections) {
89
+ this._userChooserData.preSelections.accountNames = this.accountNames;
90
+ }
91
+ this.userUnSelected.emit(accountName);
92
+ }
93
+ //#endregion
94
+ //#region Utilities
95
+ #getData() {
96
+ forkJoin([
97
+ this._userChooserData.users ?
98
+ // Users were passed in
99
+ of(this._userChooserData.users) :
100
+ // Users need to be retrieved
101
+ this.#services.activeDirectory.getUsers(false, this._userChooserData.includeDisabledUsers, this._userChooserData.parentOu),
102
+ this._userChooserData.groups ?
103
+ // Groups were passed in
104
+ of(this._userChooserData.groups) :
105
+ // Groups need to be retrieved
106
+ this.#services.activeDirectory.getGroups(this._userChooserData.parentOu),
107
+ this._userChooserData.photos ?
108
+ // Photos were passed in
109
+ of(this._userChooserData.photos) :
110
+ // Photos need to be retrieved
111
+ this.#services.sharePoint.getPhotos()
112
+ ])
113
+ .subscribe(([users, groups, photos]) => {
114
+ this.users = users;
115
+ this.groups = groups;
116
+ this.photos = photos;
117
+ });
118
+ }
119
+ getUser(user) {
120
+ user = typeof (user) === 'string' ?
121
+ this.users?.find(u => u.sAMAccountName.toLowerCase() === user?.toString().toLowerCase()) :
122
+ user;
123
+ return !user ? undefined :
124
+ 'groupType' in user ? undefined : user;
125
+ }
126
+ getGroup(group) {
127
+ group = typeof (group) === 'string' ?
128
+ this.groups?.find(g => g.sAMAccountName.toLowerCase() === group?.toString().toLowerCase()) :
129
+ group;
130
+ return !group ? undefined :
131
+ 'groupType' in group ? group : undefined;
132
+ }
133
+ getPhoto(accountName) {
134
+ const user = this.getUser(accountName);
135
+ if (!user) {
136
+ return undefined;
137
+ }
138
+ return this.photos?.find(p => (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||
139
+ p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||
140
+ p.displayName?.toLowerCase() === (user.displayName ?? user.name).toLowerCase() ||
141
+ p.title?.toLowerCase() === (user.displayName ?? user.name).toLowerCase())?.encodedAbsUrl;
142
+ }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
144
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: UserFormFieldComponent, isStandalone: true, selector: "cp-user-field", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, userChooserData: { classPropertyName: "userChooserData", publicName: "userChooserData", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { usersSelected: "usersSelected", userUnSelected: "userUnSelected" }, ngImport: i0, template: "\r\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\r\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\r\nIt's definitely a better experience if the field IS disabled.\r\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\r\n-->\r\n<!-- Update 8/24/2023:\r\nThe above problem also exists in Chrome now.\r\nSo instead of dynamically setting [disabled] based on browser type,\r\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\r\n-->\r\n\r\n@if (users && photos) {\r\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\r\n @if (accountNames?.length) {\r\n <div [ngClass]=\"class\">\r\n @for (accountName of accountNames; track accountName; let i = $index) {\r\n <div class=\"user\">\r\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\r\n @if (getPhoto(accountName)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\r\n }\r\n @if (getGroup(accountName)) {\r\n <mat-icon>group</mat-icon>\r\n }\r\n <mat-form-field>\r\n <!-- [disabled]=\"!isEdge\" -->\r\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\r\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <mat-form-field>\r\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\r\n </mat-form-field>\r\n }\r\n </div>\r\n} @else {\r\n <mat-progress-bar mode=\"indeterminate\"/>\r\n}", styles: [".user{display:grid;grid-template-columns:auto 1fr;grid-gap:.5em;align-items:center}.clickable,.clickable input{cursor:pointer!important}img{width:2em;height:2em;border-radius:100%}@media (min-width:801px){.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1em}.three{grid-template-columns:repeat(3,1fr)}.four{grid-template-columns:repeat(4,1fr)}.five{grid-template-columns:repeat(5,1fr)}::ng-deep .grid mat-form-field{width:15vw}}input[disabled]{pointer-events:none}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserFormFieldComponent, decorators: [{
147
+ type: Component,
148
+ args: [{ selector: 'cp-user-field', imports: [
149
+ MatButton,
150
+ MatFormField,
151
+ MatIcon,
152
+ MatIconButton,
153
+ MatInput,
154
+ MatProgressBar,
155
+ MatSuffix,
156
+ NgClass
157
+ ], standalone: true, template: "\r\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\r\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\r\nIt's definitely a better experience if the field IS disabled.\r\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\r\n-->\r\n<!-- Update 8/24/2023:\r\nThe above problem also exists in Chrome now.\r\nSo instead of dynamically setting [disabled] based on browser type,\r\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\r\n-->\r\n\r\n@if (users && photos) {\r\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\r\n @if (accountNames?.length) {\r\n <div [ngClass]=\"class\">\r\n @for (accountName of accountNames; track accountName; let i = $index) {\r\n <div class=\"user\">\r\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\r\n @if (getPhoto(accountName)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\r\n }\r\n @if (getGroup(accountName)) {\r\n <mat-icon>group</mat-icon>\r\n }\r\n <mat-form-field>\r\n <!-- [disabled]=\"!isEdge\" -->\r\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\r\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <mat-form-field>\r\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\r\n </mat-form-field>\r\n }\r\n </div>\r\n} @else {\r\n <mat-progress-bar mode=\"indeterminate\"/>\r\n}", styles: [".user{display:grid;grid-template-columns:auto 1fr;grid-gap:.5em;align-items:center}.clickable,.clickable input{cursor:pointer!important}img{width:2em;height:2em;border-radius:100%}@media (min-width:801px){.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1em}.three{grid-template-columns:repeat(3,1fr)}.four{grid-template-columns:repeat(4,1fr)}.five{grid-template-columns:repeat(5,1fr)}::ng-deep .grid mat-form-field{width:15vw}}input[disabled]{pointer-events:none}\n"] }]
158
+ }] });
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL2NvbXBvbmVudHMvdXNlci1mb3JtLWZpZWxkL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9jb21wb25lbnRzL3VzZXItZm9ybS1maWVsZC91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3RHLE9BQU8sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFB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SSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDM0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN6RSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQ2xFLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDOUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUN6RSxFQUFFLGFBQWEsQ0FBQztJQUNuQixDQUFDOzhHQXBKVSxzQkFBc0I7a0dBQXRCLHNCQUFzQix1a0JDbkNuQyxnckVBNENDLDJoQkRyQk8sWUFBWSw0TEFDWixPQUFPLDJJQUNQLGFBQWEsNkZBQ2IsUUFBUSxpVUFDUixjQUFjLHlLQUNkLFNBQVMscUhBQ1QsT0FBTzs7MkZBTUYsc0JBQXNCO2tCQWhCbEMsU0FBUzsrQkFDSSxlQUFlLFdBQ2hCO3dCQUNMLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsUUFBUTt3QkFDUixjQUFjO3dCQUNkLFNBQVM7d0JBQ1QsT0FBTztxQkFDVixjQUNXLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQWN0aXZlRGlyZWN0b3J5U2VydmljZSwgVXNlciwgVXNlck9yR3JvdXAgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeSc7XHJcbmltcG9ydCB7IFBob3RvSXRlbSwgU2hhcmVQb2ludFNlcnZpY2UgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvc2hhcmVwb2ludCc7XHJcblxyXG5pbXBvcnQgeyBEZWZhdWx0VXNlckNob29zZXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGVmYXVsdC11c2VyLWNob29zZXItZGF0YSc7XHJcbmltcG9ydCB7IFVzZXJDaG9vc2VyRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL3VzZXItY2hvb3Nlci1kYXRhJztcclxuXHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdFN1ZmZpeCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IFVzZXJDaG9vc2VyTW9kZSB9IGZyb20gJy4uLy4uL21hdC1hY3RpdmUtZGlyZWN0b3J5LmFwaSc7XHJcbmltcG9ydCB7IFVzZXJDaG9vc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NwLXVzZXItZmllbGQnLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIE1hdEJ1dHRvbixcclxuICAgICAgICBNYXRGb3JtRmllbGQsXHJcbiAgICAgICAgTWF0SWNvbixcclxuICAgICAgICBNYXRJY29uQnV0dG9uLFxyXG4gICAgICAgIE1hdElucHV0LFxyXG4gICAgICAgIE1hdFByb2dyZXNzQmFyLFxyXG4gICAgICAgIE1hdFN1ZmZpeCxcclxuICAgICAgICBOZ0NsYXNzXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJGb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vI3JlZ2lvbiBGaWVsZHNcclxuICAjc2VydmljZXMgPSB7XHJcbiAgICBkaWFsb2c6IGluamVjdChNYXREaWFsb2cpLFxyXG4gICAgYWN0aXZlRGlyZWN0b3J5OiBpbmplY3QoQWN0aXZlRGlyZWN0b3J5U2VydmljZSksXHJcbiAgICBzaGFyZVBvaW50OiBpbmplY3QoU2hhcmVQb2ludFNlcnZpY2UpXHJcbiAgfTtcclxuICB1c2Vyc1NlbGVjdGVkID0gb3V0cHV0PHN0cmluZyB8IHN0cmluZ1tdIHwgVXNlck9yR3JvdXAgfCBVc2VyT3JHcm91cFtdPigpOyAvLyBzdHJpbmcgZm9yIFNpbmdsZSBtb2RlLCBzdHJpbmdbXSBmb3IgbXVsdGlcclxuICB1c2VyVW5TZWxlY3RlZCA9IG91dHB1dDxzdHJpbmc+KCk7XHJcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dCgnU2VsZWN0IFVzZXIocyknKTtcclxuICBjbGlja2FibGUgPSBpbnB1dCh0cnVlKTtcclxuICB1c2VyQ2hvb3NlckRhdGEgPSBpbnB1dC5yZXF1aXJlZDxVc2VyQ2hvb3NlckRhdGE+KCk7XHJcbiAgX3VzZXJDaG9vc2VyRGF0YSE6IFVzZXJDaG9vc2VyRGF0YTtcclxuXHJcbiAgYWNjb3VudE5hbWVzPzogc3RyaW5nW107XHJcblxyXG4gIHVzZXJzPzogVXNlcltdO1xyXG4gIGdyb3Vwcz86IFVzZXJPckdyb3VwW107XHJcbiAgcGhvdG9zPzogUGhvdG9JdGVtW107XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcbiAgLypnZXQgaXNFZGdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA+IC0xO1xyXG4gIH0qL1xyXG4gIGdldCBjbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJDaG9vc2VyRGF0YT8ubW9kZSA9PT0gVXNlckNob29zZXJNb2RlLlNpbmdsZSA/ICcnIDpcclxuICAgICAgKHRoaXMuYWNjb3VudE5hbWVzPy5sZW5ndGggPz8gMCkgPiA0ID8gJ2dyaWQgZml2ZScgOlxyXG4gICAgICAodGhpcy5hY2NvdW50TmFtZXM/Lmxlbmd0aCA/PyAwKSA+IDMgPyAnZ3JpZCBmb3VyJyA6XHJcbiAgICAgICh0aGlzLmFjY291bnROYW1lcz8ubGVuZ3RoID8/IDApID4gMiA/ICdncmlkIHRocmVlJyA6XHJcbiAgICAgICh0aGlzLmFjY291bnROYW1lcz8ubGVuZ3RoID8/IDApID4gMSA/ICdncmlkIHR3bycgOlxyXG4gICAgICAnJztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSA9IHtcclxuICAgICAgLi4uRGVmYXVsdFVzZXJDaG9vc2VyRGF0YSxcclxuICAgICAgLi4udGhpcy51c2VyQ2hvb3NlckRhdGEoKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHVzZXJzIGhhdmUgYmVlbiBwcmUtc2VsZWN0ZWQgaW4gdGhlIGNvbmZpZywgc3RvcmUgdGhvc2UgaW4gYWNjb3VudE5hbWVzLCB3aGljaCBkcml2ZXMgdGhlIFVJIG9mIHRoaXMgY29tcG9uZW50XHJcbiAgICB0aGlzLmFjY291bnROYW1lcyA9IHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zPy5hY2NvdW50TmFtZXM7XHJcblxyXG4gICAgdGhpcy4jZ2V0RGF0YSgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50c1xyXG4gIHNlbGVjdFVzZXIoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2xpY2thYmxlKCkpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgY29uc3QgZGF0YTogVXNlckNob29zZXJEYXRhID0ge1xyXG4gICAgICAuLi50aGlzLl91c2VyQ2hvb3NlckRhdGEsXHJcblxyXG4gICAgICB1c2VyczogdGhpcy51c2VycyxcclxuICAgICAgcGhvdG9zOiB0aGlzLnBob3RvcyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy4jc2VydmljZXMuZGlhbG9nLm9wZW4oVXNlckNob29zZXJDb21wb25lbnQsIHtcclxuICAgICAgZGF0YTogZGF0YVxyXG4gICAgfSlcclxuICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nIHwgc3RyaW5nW10gfCBVc2VyT3JHcm91cCB8IFVzZXJPckdyb3VwW10pID0+IHtcclxuICAgICAgaWYgKCFzZWxlY3RlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgIHRoaXMuYWNjb3VudE5hbWVzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgP1xyXG4gICAgICAgIHNlbGVjdGVkLm1hcChzID0+IHR5cGVvZihzKSA9PT0gJ3N0cmluZycgPyBzIDogcy5zQU1BY2NvdW50TmFtZSkgOlxyXG4gICAgICAgIFsgc2VsZWN0ZWQgXS5tYXAocyA9PiB0eXBlb2YocykgPT09ICdzdHJpbmcnID8gcyA6IHMuc0FNQWNjb3VudE5hbWUpO1xyXG5cclxuICAgICAgLy8gT3ZlcndyaXRlIHdoYXQgbWF5IGhhdmUgYmVlbiBwYXNzZWQgaW4sIGZvciBzdWJzZXF1ZW50IGxhdW5jaGVzIG9mIFVzZXJDaG9vc2VyQ29tcG9uZW50IC0gb3RoZXJ3aXNlIGl0IGp1c3Qga2VlcHMgZ2V0dGluZyBmZWQgc3RhbGUgZGF0YVxyXG4gICAgICBpZiAodGhpcy5fdXNlckNob29zZXJEYXRhLnByZVNlbGVjdGlvbnMpIHtcclxuICAgICAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXMgPSB0aGlzLmFjY291bnROYW1lcztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51c2Vyc1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1blNlbGVjdFVzZXIoYWNjb3VudE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmFjY291bnROYW1lcz8uZmluZEluZGV4KGEgPT4gYSA9PT0gYWNjb3VudE5hbWUpO1xyXG4gICAgdGhpcy5hY2NvdW50TmFtZXM/LnNwbGljZShpbmRleCA/PyAtMSwgMSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zLmFjY291bnROYW1lcyA9IHRoaXMuYWNjb3VudE5hbWVzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXNlclVuU2VsZWN0ZWQuZW1pdChhY2NvdW50TmFtZSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gVXRpbGl0aWVzXHJcbiAgI2dldERhdGEoKTogdm9pZCB7XHJcbiAgICBmb3JrSm9pbihbXHJcbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEudXNlcnMgP1xyXG4gICAgICAgIC8vIFVzZXJzIHdlcmUgcGFzc2VkIGluXHJcbiAgICAgICAgb2YodGhpcy5fdXNlckNob29zZXJEYXRhIS51c2VycykgOlxyXG4gICAgICAgIC8vIFVzZXJzIG5lZWQgdG8gYmUgcmV0cmlldmVkXHJcbiAgICAgICAgdGhpcy4jc2VydmljZXMuYWN0aXZlRGlyZWN0b3J5LmdldFVzZXJzKGZhbHNlLCB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLmluY2x1ZGVEaXNhYmxlZFVzZXJzLCB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBhcmVudE91KSxcclxuXHJcbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEuZ3JvdXBzID9cclxuICAgICAgICAvLyBHcm91cHMgd2VyZSBwYXNzZWQgaW5cclxuICAgICAgICBvZih0aGlzLl91c2VyQ2hvb3NlckRhdGEhLmdyb3VwcykgOlxyXG4gICAgICAgIC8vIEdyb3VwcyBuZWVkIHRvIGJlIHJldHJpZXZlZFxyXG4gICAgICAgIHRoaXMuI3NlcnZpY2VzLmFjdGl2ZURpcmVjdG9yeS5nZXRHcm91cHModGhpcy5fdXNlckNob29zZXJEYXRhIS5wYXJlbnRPdSksXHJcblxyXG4gICAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBob3RvcyA/XHJcbiAgICAgICAgLy8gUGhvdG9zIHdlcmUgcGFzc2VkIGluXHJcbiAgICAgICAgb2YodGhpcy5fdXNlckNob29zZXJEYXRhIS5waG90b3MpIDpcclxuICAgICAgICAvLyBQaG90b3MgbmVlZCB0byBiZSByZXRyaWV2ZWRcclxuICAgICAgICB0aGlzLiNzZXJ2aWNlcy5zaGFyZVBvaW50LmdldFBob3RvcygpXHJcbiAgICBdKVxyXG4gICAgICAuc3Vic2NyaWJlKChbdXNlcnMsIGdyb3VwcywgcGhvdG9zXSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlcnMgPSB1c2VycztcclxuICAgICAgICB0aGlzLmdyb3VwcyA9IGdyb3VwcztcclxuICAgICAgICB0aGlzLnBob3RvcyA9IHBob3RvcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyKHVzZXI6IHN0cmluZyB8IFVzZXIgfCB1bmRlZmluZWQpOiBVc2VyIHwgdW5kZWZpbmVkIHtcclxuICAgIHVzZXIgPSB0eXBlb2YodXNlcikgPT09ICdzdHJpbmcnID9cclxuICAgICAgdGhpcy51c2Vycz8uZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdXNlcj8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSA6XHJcbiAgICAgIHVzZXI7XHJcblxyXG4gICAgcmV0dXJuICF1c2VyID8gdW5kZWZpbmVkIDpcclxuICAgICAgJ2dyb3VwVHlwZScgaW4gdXNlciA/IHVuZGVmaW5lZCA6IHVzZXI7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cChncm91cDogc3RyaW5nIHwgVXNlck9yR3JvdXAgfCB1bmRlZmluZWQpOiBVc2VyT3JHcm91cCB8IHVuZGVmaW5lZCB7XHJcbiAgICBncm91cCA9IHR5cGVvZihncm91cCkgPT09ICdzdHJpbmcnID9cclxuICAgICAgdGhpcy5ncm91cHM/LmZpbmQoZyA9PiBnLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIDpcclxuICAgICAgZ3JvdXA7XHJcblxyXG4gICAgcmV0dXJuICFncm91cCA/IHVuZGVmaW5lZCA6XHJcbiAgICAgICdncm91cFR5cGUnIGluIGdyb3VwID8gZ3JvdXAgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRQaG90byhhY2NvdW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXIoYWNjb3VudE5hbWUpO1xyXG4gICAgaWYgKCF1c2VyKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5waG90b3M/LmZpbmQocCA9PlxyXG4gICAgICAocC5lbXBsb3llZU51bWJlciAmJiBwLmVtcGxveWVlTnVtYmVyLnRvU3RyaW5nKCkgPT09IHVzZXIuZW1wbG95ZWVOdW1iZXIpIHx8XHJcbiAgICAgIHAuYWNjb3VudE5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSB8fFxyXG4gICAgICBwLmRpc3BsYXlOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAodXNlci5kaXNwbGF5TmFtZSA/PyB1c2VyLm5hbWUpLnRvTG93ZXJDYXNlKCkgfHxcclxuICAgICAgcC50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gKHVzZXIuZGlzcGxheU5hbWUgPz8gdXNlci5uYW1lKS50b0xvd2VyQ2FzZSgpXHJcbiAgICApPy5lbmNvZGVkQWJzVXJsO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCJcclxuPCEtLSBJbiBNaWNyb3NvZnQgRWRnZSwgc2VsZWN0VXNlcigpIG5ldmVyIGdldHMgY2FsbGVkIGlmIHRoZSBpbnB1dCBmaWVsZHMgYXJlIGRpc2FibGVkXHJcblNvLi4uIEknbSBkeW5hbWljYWxseSBzZXR0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eSBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgYnJvd3NlciBpcyBFZGdlLlxyXG5JdCdzIGRlZmluaXRlbHkgYSBiZXR0ZXIgZXhwZXJpZW5jZSBpZiB0aGUgZmllbGQgSVMgZGlzYWJsZWQuXHJcbk90aGVyd2lzZSwgaXQncyBjb25mdXNpbmcgLSBlc3BlY2lhbGx5IGJlY2F1c2UgRWRnZSBpcyBTTyBTTE9XIHRvIGRpc3BsYXkgdGhlIHJlc3VsdGluZyBkaWFsb2cgd2luZG93LlxyXG4tLT5cclxuPCEtLSBVcGRhdGUgOC8yNC8yMDIzOlxyXG5UaGUgYWJvdmUgcHJvYmxlbSBhbHNvIGV4aXN0cyBpbiBDaHJvbWUgbm93LlxyXG5TbyBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IHNldHRpbmcgW2Rpc2FibGVkXSBiYXNlZCBvbiBicm93c2VyIHR5cGUsXHJcbkknbSBhcHBseWluZyBDU1MgdG8gc3VwcHJlc3MgbW91c2UgZXZlbnRzIG9uIHRoZSBpbnB1dCAtIHRodXMgbWFraW5nIGl0IGJ1YmJsZSB1cCB0byB0aGUgcGFyZW50IGNvbnRyb2wsIHdoaWNoIHJlc3BvbmRzIHRoZSB3YXkgd2Ugd2FudC9cclxuLS0+XHJcblxyXG5AaWYgKHVzZXJzICYmIHBob3Rvcykge1xyXG4gIDxkaXYgKGNsaWNrKT1cInNlbGVjdFVzZXIoKVwiIFtjbGFzcy5jbGlja2FibGVdPVwiY2xpY2thYmxlKClcIj5cclxuICAgIEBpZiAoYWNjb3VudE5hbWVzPy5sZW5ndGgpIHtcclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJjbGFzc1wiPlxyXG4gICAgICAgIEBmb3IgKGFjY291bnROYW1lIG9mIGFjY291bnROYW1lczsgdHJhY2sgYWNjb3VudE5hbWU7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlclwiPlxyXG4gICAgICAgICAgICA8IS0tPGltZyAqbmdJZj1cImFjY291bnROYW1lICYmIGVtcFV0aWxzLmdldEVtcGxveWVlKGFjY291bnROYW1lKVwiIGFsdD1cIlwiIFtzcmNdPVwiZW1wVXRpbHMuZ2V0RW1wbG95ZWUoYWNjb3VudE5hbWUpIHwgZW1wbG95ZWVQaG90b1VybDpjYWNoZVNlcnZpY2UucGhvdG9zXCI+LS0+XHJcbiAgICAgICAgICAgIEBpZiAoZ2V0UGhvdG8oYWNjb3VudE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgPGltZyBtYXRMaXN0SXRlbUF2YXRhciBhbHQ9XCJcIiBbc3JjXT1cImdldFBob3RvKGFjY291bnROYW1lKVwiPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEBpZiAoZ2V0R3JvdXAoYWNjb3VudE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmdyb3VwPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwiIWlzRWRnZVwiIC0tPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBkaXNhYmxlZCBbcGxhY2Vob2xkZXJdPVwiaSA9PT0gMCA/IHBsYWNlaG9sZGVyKCkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VXNlcihhY2NvdW50TmFtZSk/LmRpc3BsYXlOYW1lID8/IGdldEdyb3VwKGFjY291bnROYW1lKT8uZGlzcGxheU5hbWUgPz8gYWNjb3VudE5hbWVcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdW5TZWxlY3RVc2VyKGFjY291bnROYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xvc2VcIi8+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZGlzYWJsZWQgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIj4gPCEtLSBbZGlzYWJsZWRdPVwiIWlzRWRnZVwiIC0tPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG59IEBlbHNlIHtcclxuICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiLz5cclxufSJdfQ==
@@ -0,0 +1,11 @@
1
+ export * from '@cleavelandprice/ngx-lib/active-directory';
2
+ export * from './model/default-user-chooser-data';
3
+ export * from './model/default-user-chooser-filter-options';
4
+ export * from './model/user-chooser-data';
5
+ export * from './model/user-chooser-filter-options';
6
+ export * from './model/user-chooser-mode';
7
+ export * from './model/user-chooser-pre-processing-group';
8
+ export * from './components/user-chooser/user-chooser.component';
9
+ export * from './components/user-form-field/user-form-field.component';
10
+ export * from './mat-active-directory.module';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWFjdGl2ZS1kaXJlY3RvcnkuYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbWF0LWFjdGl2ZS1kaXJlY3RvcnkuYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkNBQTJDLENBQUM7QUFFMUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkNBQTJDLENBQUM7QUFFMUQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLHdEQUF3RCxDQUFDO0FBRXZFLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWRhdGEnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC91c2VyLWNob29zZXItZGF0YSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC91c2VyLWNob29zZXItbW9kZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvdXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy91c2VyLWNob29zZXIvdXNlci1jaG9vc2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy91c2VyLWZvcm0tZmllbGQvdXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL21hdC1hY3RpdmUtZGlyZWN0b3J5Lm1vZHVsZSc7XHJcblxyXG4iXX0=
@@ -0,0 +1,100 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule, Optional, SkipSelf } from '@angular/core';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatDialogModule } from '@angular/material/dialog';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { MatInputModule } from '@angular/material/input';
9
+ import { MatListModule } from '@angular/material/list';
10
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
11
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
12
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
13
+ import { MatTableModule } from '@angular/material/table';
14
+ import { MatTooltipModule } from '@angular/material/tooltip';
15
+ import { ActiveDirectoryServiceOptionsToken } from '@cleavelandprice/ngx-lib/active-directory';
16
+ import { UserChooserComponent } from './components/user-chooser/user-chooser.component';
17
+ import { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';
18
+ import * as i0 from "@angular/core";
19
+ export class MatActiveDirectoryModule {
20
+ static forRoot(config) {
21
+ return {
22
+ ngModule: MatActiveDirectoryModule,
23
+ providers: [
24
+ {
25
+ provide: ActiveDirectoryServiceOptionsToken,
26
+ useValue: config
27
+ }
28
+ ]
29
+ };
30
+ }
31
+ constructor(parentModule) {
32
+ if (parentModule) {
33
+ throw new Error('MatActiveDirectoryModule is already loaded. Import it in the AppModule only');
34
+ }
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MatActiveDirectoryModule, deps: [{ token: MatActiveDirectoryModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
37
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: MatActiveDirectoryModule, imports: [CommonModule,
38
+ ReactiveFormsModule,
39
+ MatButtonModule,
40
+ MatDialogModule,
41
+ MatFormFieldModule,
42
+ MatIconModule,
43
+ MatInputModule,
44
+ MatListModule,
45
+ MatProgressBarModule,
46
+ MatProgressSpinnerModule,
47
+ MatSlideToggleModule,
48
+ MatTableModule,
49
+ MatTooltipModule,
50
+ UserChooserComponent,
51
+ UserFormFieldComponent], exports: [UserChooserComponent,
52
+ UserFormFieldComponent] }); }
53
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MatActiveDirectoryModule, imports: [CommonModule,
54
+ ReactiveFormsModule,
55
+ MatButtonModule,
56
+ MatDialogModule,
57
+ MatFormFieldModule,
58
+ MatIconModule,
59
+ MatInputModule,
60
+ MatListModule,
61
+ MatProgressBarModule,
62
+ MatProgressSpinnerModule,
63
+ MatSlideToggleModule,
64
+ MatTableModule,
65
+ MatTooltipModule,
66
+ UserChooserComponent,
67
+ UserFormFieldComponent] }); }
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MatActiveDirectoryModule, decorators: [{
70
+ type: NgModule,
71
+ args: [{
72
+ declarations: [],
73
+ imports: [
74
+ CommonModule,
75
+ ReactiveFormsModule,
76
+ MatButtonModule,
77
+ MatDialogModule,
78
+ MatFormFieldModule,
79
+ MatIconModule,
80
+ MatInputModule,
81
+ MatListModule,
82
+ MatProgressBarModule,
83
+ MatProgressSpinnerModule,
84
+ MatSlideToggleModule,
85
+ MatTableModule,
86
+ MatTooltipModule,
87
+ UserChooserComponent,
88
+ UserFormFieldComponent
89
+ ],
90
+ exports: [
91
+ UserChooserComponent,
92
+ UserFormFieldComponent
93
+ ]
94
+ }]
95
+ }], ctorParameters: () => [{ type: MatActiveDirectoryModule, decorators: [{
96
+ type: Optional
97
+ }, {
98
+ type: SkipSelf
99
+ }] }] });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWFjdGl2ZS1kaXJlY3RvcnkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbWF0LWFjdGl2ZS1kaXJlY3RvcnkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXVCLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBaUMsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU5SCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUE0QmhHLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFxQztRQUNsRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLHdCQUF3QjtZQUNsQyxTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGtDQUFrQztvQkFDM0MsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQW9DLFlBQXNDO1FBQ3hFLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FDYiw2RUFBNkUsQ0FBQyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDOzhHQWxCVSx3QkFBd0I7K0dBQXhCLHdCQUF3QixZQXZCakMsWUFBWTtZQUNaLG1CQUFtQjtZQUVuQixlQUFlO1lBQ2YsZUFBZTtZQUNmLGtCQUFrQjtZQUNsQixhQUFhO1lBQ2IsY0FBYztZQUNkLGFBQWE7WUFDYixvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsZ0JBQWdCO1lBRWhCLG9CQUFvQjtZQUNwQixzQkFBc0IsYUFHdEIsb0JBQW9CO1lBQ3BCLHNCQUFzQjsrR0FHYix3QkFBd0IsWUF2QmpDLFlBQVk7WUFDWixtQkFBbUI7WUFFbkIsZUFBZTtZQUNmLGVBQWU7WUFDZixrQkFBa0I7WUFDbEIsYUFBYTtZQUNiLGNBQWM7WUFDZCxhQUFhO1lBQ2Isb0JBQW9CO1lBQ3BCLHdCQUF3QjtZQUN4QixvQkFBb0I7WUFDcEIsY0FBYztZQUNkLGdCQUFnQjtZQUVoQixvQkFBb0I7WUFDcEIsc0JBQXNCOzsyRkFPYix3QkFBd0I7a0JBMUJwQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBRW5CLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUVoQixvQkFBb0I7d0JBQ3BCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3FCQUN2QjtpQkFDRjs7MEJBY2MsUUFBUTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2VPcHRpb25zLCBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlT3B0aW9uc1Rva2VuIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xyXG5cclxuaW1wb3J0IHsgVXNlckNob29zZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVc2VyRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3VzZXItZm9ybS1maWVsZC91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG5cclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdERpYWxvZ01vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdExpc3RNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxyXG4gICAgTWF0VGFibGVNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG5cclxuICAgIFVzZXJDaG9vc2VyQ29tcG9uZW50LFxyXG4gICAgVXNlckZvcm1GaWVsZENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgVXNlckNob29zZXJDb21wb25lbnQsXHJcbiAgICBVc2VyRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0QWN0aXZlRGlyZWN0b3J5TW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2VPcHRpb25zKTogTW9kdWxlV2l0aFByb3ZpZGVyczxNYXRBY3RpdmVEaXJlY3RvcnlNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBNYXRBY3RpdmVEaXJlY3RvcnlNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2VPcHRpb25zVG9rZW4sXHJcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcGFyZW50TW9kdWxlOiBNYXRBY3RpdmVEaXJlY3RvcnlNb2R1bGUpIHtcclxuICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdNYXRBY3RpdmVEaXJlY3RvcnlNb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWQuIEltcG9ydCBpdCBpbiB0aGUgQXBwTW9kdWxlIG9ubHknKTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
@@ -0,0 +1,15 @@
1
+ import { DefaultUserChooserFilterOptions } from "./default-user-chooser-filter-options";
2
+ import { UserChooserMode } from "./user-chooser-mode";
3
+ export const DefaultUserChooserData = {
4
+ closeWhenSelectionMade: false,
5
+ allowCloseWithoutSelections: false,
6
+ includeDisabledUsers: false,
7
+ returnUserObjects: false,
8
+ showGroupMembershipTooltips: false,
9
+ showPhone: true,
10
+ title: 'Select User(s)',
11
+ mode: UserChooserMode.Single,
12
+ objectTypes: '*',
13
+ filterOptions: DefaultUserChooserFilterOptions
14
+ };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC11c2VyLWNob29zZXItZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQjtJQUNuRCxzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLDJCQUEyQixFQUFFLEtBQUs7SUFDbEMsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLDJCQUEyQixFQUFFLEtBQUs7SUFDbEMsU0FBUyxFQUFFLElBQUk7SUFDZixLQUFLLEVBQUUsZ0JBQWdCO0lBQ3ZCLElBQUksRUFBRSxlQUFlLENBQUMsTUFBTTtJQUM1QixXQUFXLEVBQUUsR0FBRztJQUNoQixhQUFhLEVBQUUsK0JBQStCO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0VXNlckNob29zZXJGaWx0ZXJPcHRpb25zIH0gZnJvbSBcIi4vZGVmYXVsdC11c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnNcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJEYXRhIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLWRhdGFcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLW1vZGVcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0VXNlckNob29zZXJEYXRhOiBVc2VyQ2hvb3NlckRhdGEgPSB7XHJcbiAgICBjbG9zZVdoZW5TZWxlY3Rpb25NYWRlOiBmYWxzZSxcclxuICAgIGFsbG93Q2xvc2VXaXRob3V0U2VsZWN0aW9uczogZmFsc2UsXHJcbiAgICBpbmNsdWRlRGlzYWJsZWRVc2VyczogZmFsc2UsXHJcbiAgICByZXR1cm5Vc2VyT2JqZWN0czogZmFsc2UsXHJcbiAgICBzaG93R3JvdXBNZW1iZXJzaGlwVG9vbHRpcHM6IGZhbHNlLFxyXG4gICAgc2hvd1Bob25lOiB0cnVlLFxyXG4gICAgdGl0bGU6ICdTZWxlY3QgVXNlcihzKScsXHJcbiAgICBtb2RlOiBVc2VyQ2hvb3Nlck1vZGUuU2luZ2xlLFxyXG4gICAgb2JqZWN0VHlwZXM6ICcqJyxcclxuICAgIGZpbHRlck9wdGlvbnM6IERlZmF1bHRVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnNcclxufTsiXX0=
@@ -0,0 +1,8 @@
1
+ export const DefaultUserChooserFilterOptions = {
2
+ accountName: true,
3
+ department: true,
4
+ groupMembership: false,
5
+ phoneNumber: true,
6
+ title: true
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC11c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9tb2RlbC9kZWZhdWx0LXVzZXItY2hvb3Nlci1maWx0ZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBNkI7SUFDckUsV0FBVyxFQUFFLElBQUk7SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsV0FBVyxFQUFFLElBQUk7SUFDakIsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckNob29zZXJGaWx0ZXJPcHRpb25zIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgRGVmYXVsdFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9uczogVXNlckNob29zZXJGaWx0ZXJPcHRpb25zID0ge1xyXG4gICAgYWNjb3VudE5hbWU6IHRydWUsXHJcbiAgICBkZXBhcnRtZW50OiB0cnVlLFxyXG4gICAgZ3JvdXBNZW1iZXJzaGlwOiBmYWxzZSxcclxuICAgIHBob25lTnVtYmVyOiB0cnVlLFxyXG4gICAgdGl0bGU6IHRydWVcclxufTsiXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL21vZGVsL3NlbGVjdGFibGUtZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyb3VwIH0gZnJvbSBcIkBjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGFibGVHcm91cCBleHRlbmRzIEdyb3VwIHtcclxuICAgIHNlbGVjdGVkOiBib29sZWFuO1xyXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS11c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbW9kZWwvc2VsZWN0YWJsZS11c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyIH0gZnJvbSBcIkBjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGFibGVVc2VyIGV4dGVuZHMgVXNlciB7XHJcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIHBob3RvVXJsOiBzdHJpbmc7XHJcbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9tb2RlbC91c2VyLWNob29zZXItZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JvdXAsIFVzZXIgfSBmcm9tIFwiQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnlcIjtcclxuaW1wb3J0IHsgUGhvdG9JdGVtIH0gZnJvbSBcIkBjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50XCI7XHJcblxyXG5pbXBvcnQgeyBVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnMgfSBmcm9tIFwiLi91c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnNcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLW1vZGVcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAgfSBmcm9tIFwiLi91c2VyLWNob29zZXItcHJlLXByb2Nlc3NpbmctZ3JvdXBcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNob29zZXJEYXRhIHtcclxuICAgIC8vIFNob3VsZCB0aGUgZGlhbG9nIGNsb3NlIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdXNlciBjaG9vc2VzIGFuIGl0ZW0/XHJcbiAgICAvLyBBcHBsaWVzIHRvIHNpbmdsZS11c2VyIG1vZGUgb25seVxyXG4gICAgY2xvc2VXaGVuU2VsZWN0aW9uTWFkZT86IGJvb2xlYW47XHJcblxyXG4gICAgYWxsb3dDbG9zZVdpdGhvdXRTZWxlY3Rpb25zPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBJZiB0aGUgY29tcG9uZW50IGlzIHRhc2tlZCB3aXRoIHB1bGxpbmcgQWN0aXZlIERpcmVjdG9yeSB1c2VycyAoZGVmYXVsdCBzZXR0aW5nKSxcclxuICAgIC8vICAgc2hvdWxkIHRoYXQgaW5jbHVkZSBkaXNhYmxlZCB1c2Vycz9cclxuICAgIGluY2x1ZGVEaXNhYmxlZFVzZXJzPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBJZiB0aGUgY29tcG9uZW50IGlzIHRhc2tlZCB3aXRoIHB1bGxpbmcgQWN0aXZlIERpcmVjdG9yeSB1c2VycyAoZGVmYXVsdCBzZXR0aW5nKSxcclxuICAgIC8vICAgc2hvdWxkIHRoYXQgc2VhcmNoIGJlZ2luIGF0IGEgcGFydGljdWxhciBPcmdhbml6YXRpb24gVW5pdD9cclxuICAgIHBhcmVudE91Pzogc3RyaW5nO1xyXG5cclxuICAgIC8vIElmIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgQWN0aXZlIERpcmVjdG9yeSBVc2VyIG9iamVjdHMuXHJcbiAgICAvLyBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgdXNlciBhY2NvdW50IG5hbWVzLlxyXG4gICAgcmV0dXJuVXNlck9iamVjdHM/OiBib29sZWFuO1xyXG5cclxuICAgIC8vIFNob3VsZCB0aGUgZGlhbG9nIGluY2x1ZGUgaG92ZXIgdG9vcHRpcHMgZm9yIGVhY2ggdXNlciB0aGF0IGRpc3BsYXlzIHRoZWlyIGdyb3VwIG1lbWJlcnNoaXBcclxuICAgIC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMsIHdoaWNoIGlzIHdoeSB0aGUgZGVmYXVsdCBpcyBmYWxzZVxyXG4gICAgc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBTaG91bGQgdGhlIHVzZXIgcGhvbmUgbnVtYmVyIGJlIGRpc3BsYXllZCBuZXh0IHRvIHRoZWlyIG5hbWUgaW4gdGhlIGRpYWxvZ1xyXG4gICAgc2hvd1Bob25lPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBUaXRsZSBkaXNwbGF5ZWQgaW4gdGhlIGRpYWxvZ1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLy8gU2luZ2xlIG9yIE11bHRpIG1vZGVcclxuICAgIG1vZGU/OiBVc2VyQ2hvb3Nlck1vZGU7XHJcblxyXG4gICAgLy8gQWxsb3cgVXNlcnMvR3JvdXBzXHJcbiAgICBvYmplY3RUeXBlcz86ICd1c2Vycyd8J2dyb3Vwcyd8JyonO1xyXG4gICAgXHJcbiAgICAvLyBBcyB0aGUgdXNlciB0eXBlcyBpbnRvIHRoZSBmaWx0ZXIgZmllbGQsIHRoZSBsaXN0IG9mIHVzZXJzIGlzIGZpbHRlcmVkLlxyXG4gICAgLy8gVGhlIGZpbHRlck9wdGlvbnMgZGV0ZXJtaW5lIHdoaWNoIHVzZXIgcHJvcGVydGllcyBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGF0IGZpbHRlci5cclxuICAgIC8vIE5vdGUsIGRpc3BsYXlOYW1lIGlzIGFsd2F5cyBpbmNsdWRlZCAoaGFyZC1jb2RlZCksIGFuZCBpcyB0aGVyZWZvcmUgbm90IGEgZmlsdGVyIG9wdGlvbi5cclxuICAgIGZpbHRlck9wdGlvbnM/OiBVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnM7XHJcblxyXG4gICAgZXhjbHVzaW9ucz86IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG4gICAgaW5jbHVzaW9ucz86IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG4gICAgcHJlU2VsZWN0aW9ucz86IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG5cclxuICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBjb21wb25lbnQgd2lsbCBwdWxsIGEgZnJlc2ggbGlzdCBvZiBBY3RpdmUgRGlyZWN0b3J5IHVzZXJzL2dyb3VwcyBhbmQgU2hhcmVQb2ludCBwaG90b3MuXHJcbiAgICAvLyBCdXQgaWYgdGhlIHBhcmVudCBjb21wb25lbnQgYWxyZWFkeSBoYXMgdGhlbSwgeW91IGNhbiBwYXNzIHRoZW0gaW4gdmlhIHRoZXNlIHByb3BlcnRpZXMuXHJcbiAgICB1c2Vycz86IFVzZXJbXTtcclxuICAgIGdyb3Vwcz86IEdyb3VwW107XHJcbiAgICBwaG90b3M/OiBQaG90b0l0ZW1bXTtcclxuXHJcbiAgICBzZWxlY3RhYmxlR3JvdXBOYW1lcz86IHN0cmluZ1tdO1xyXG59Il19
@@ -0,0 +1,3 @@
1
+ ;
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9ucyB7XHJcbiAgICBhY2NvdW50TmFtZT86IGJvb2xlYW47XHJcbiAgICBkZXBhcnRtZW50PzogYm9vbGVhbjtcclxuICAgIGdyb3VwTWVtYmVyc2hpcD86IGJvb2xlYW47XHJcbiAgICBwaG9uZU51bWJlcj86IGJvb2xlYW47XHJcbiAgICB0aXRsZT86IGJvb2xlYW47XHJcbn07Il19
@@ -0,0 +1,6 @@
1
+ export var UserChooserMode;
2
+ (function (UserChooserMode) {
3
+ UserChooserMode[UserChooserMode["Single"] = 0] = "Single";
4
+ UserChooserMode[UserChooserMode["Multiple"] = 1] = "Multiple";
5
+ })(UserChooserMode || (UserChooserMode = {}));
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLW1vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9tb2RlbC91c2VyLWNob29zZXItbW9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3ZCLHlEQUFNLENBQUE7SUFDTiw2REFBUSxDQUFBO0FBQ1osQ0FBQyxFQUhXLGVBQWUsS0FBZixlQUFlLFFBRzFCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gVXNlckNob29zZXJNb2RlIHtcclxuICAgIFNpbmdsZSxcclxuICAgIE11bHRpcGxlXHJcbn0iXX0=
@@ -0,0 +1,3 @@
1
+ ;
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwIHtcclxuICAgIGFjY291bnROYW1lcz86IHN0cmluZ1tdO1xyXG4gICAgZGVwYXJ0bWVudHM/OiBzdHJpbmdbXTtcclxuICAgIGdyb3Vwcz86IHN0cmluZ1tdO1xyXG4gICAgdGl0bGVzPzogc3RyaW5nW107XHJcbn07Il19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ export const ActiveDirectoryServiceOptionsToken = new InjectionToken('');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLW9wdGlvbnMtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L3NyYy9tb2RlbC9hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2Utb3B0aW9ucy10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLElBQUksY0FBYyxDQUFnQyxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZlRGlyZWN0b3J5U2VydmljZU9wdGlvbnMgfSBmcm9tIFwiLi9hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2Utb3B0aW9uc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2VPcHRpb25zVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48QWN0aXZlRGlyZWN0b3J5U2VydmljZU9wdGlvbnM+KCcnKTsiXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L3NyYy9tb2RlbC9hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2Utb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FjaGluZ0NvbmZpZywgTG9nZ2luZ0NvbmZpZywgTmd4TGliU2VydmljZU9wdGlvbnMgfSBmcm9tIFwiQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2ZURpcmVjdG9yeVNlcnZpY2VPcHRpb25zIGV4dGVuZHMgTmd4TGliU2VydmljZU9wdGlvbnMge1xyXG4gIGNhY2hpbmc/OiBDYWNoaW5nQ29uZmlnO1xyXG4gIGxvZ2dpbmc/OiBMb2dnaW5nQ29uZmlnO1xyXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWQtb2JqZWN0LXdpdGgtY2hpbGRyZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L3NyYy9tb2RlbC9hZC1vYmplY3Qtd2l0aC1jaGlsZHJlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQURPYmplY3QgfSBmcm9tIFwiLi9hZC1vYmplY3RcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQURPYmplY3RXaXRoQ2hpbGRyZW4gZXh0ZW5kcyBBRE9iamVjdCB7XHJcbiAgICBjaGlsZHJlbjogQURPYmplY3RXaXRoQ2hpbGRyZW5bXTtcclxufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWQtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9zcmMvbW9kZWwvYWQtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEFET2JqZWN0IHtcclxuICAgIGNhbm9uaWNhbE5hbWU6IHN0cmluZztcclxuICAgIGNuOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgICBkaXN0aW5ndWlzaGVkTmFtZTogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgb2JqZWN0Q2F0ZWdvcnk6IHN0cmluZztcclxuICAgIG9iamVjdENsYXNzOiBzdHJpbmdbXTtcclxuICAgIG9iamVjdEdVSUQ6IHN0cmluZztcclxuICAgIHdoZW5DaGFuZ2VkOiBzdHJpbmc7IC8vRGF0ZTtcclxuICAgIHdoZW5DcmVhdGVkOiBzdHJpbmc7IC8vRGF0ZTtcclxuICB9Il19
@@ -0,0 +1,3 @@
1
+ // This interface is internal only, no need to export in public-api.ts
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9zcmMvbW9kZWwvY2FjaGUtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNFQUFzRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgaW50ZXJmYWNlIGlzIGludGVybmFsIG9ubHksIG5vIG5lZWQgdG8gZXhwb3J0IGluIHB1YmxpYy1hcGkudHNcclxuXHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlT2JqZWN0PFQ+IHtcclxuICBkYXRhOiBUW10sXHJcbiAgbGFzdFVwZGF0ZTogRGF0ZVRpbWVcclxufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXZlbGFuZC1wcmljZS11c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9zcmMvbW9kZWwvY2xlYXZlbGFuZC1wcmljZS11c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyIH0gZnJvbSBcIi4vdXNlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGVhdmVsYW5kUHJpY2VVc2VyIGV4dGVuZHMgVXNlciB7XHJcbiAgICBjaXR5OiBzdHJpbmc7XHJcbiAgICBleHRlbnNpb25BdHRyaWJ1dGUxOiBzdHJpbmc7XHJcbiAgICBleHRlbnNpb25BdHRyaWJ1dGUyOiBzdHJpbmc7XHJcbiAgICBleHRlbnNpb25BdHRyaWJ1dGUzOiBzdHJpbmc7XHJcbiAgICBleHRlbnNpb25BdHRyaWJ1dGU0OiBzdHJpbmc7XHJcbiAgICBleHRlbnNpb25BdHRyaWJ1dGU1OiBzdHJpbmc7XHJcbiAgICBleHRlbnNpb25BdHRyaWJ1dGU2OiBzdHJpbmc7XHJcbiAgICBmaXJzdE5hbWU6IHN0cmluZztcclxuICAgIGhpcmVEYXRlOiBzdHJpbmc7IC8vRGF0ZTtcclxuICAgIGxhc3ROYW1lOiBzdHJpbmc7XHJcbiAgICBtYXJrZXRUaXRsZTogc3RyaW5nO1xyXG4gICAgc3RhdGU6IHN0cmluZztcclxuICAgIHRpdGxlMjogc3RyaW5nO1xyXG4gICAgd29ya1NoaWZ0OiBzdHJpbmc7XHJcbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L3NyYy9tb2RlbC9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlck9yR3JvdXAgfSBmcm9tIFwiLi91c2VyLW9yLWdyb3VwXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIGV4dGVuZHMgVXNlck9yR3JvdXAge1xyXG4gICAgbWVtYmVyOiBzdHJpbmdbXTtcclxuICAgIGdyb3VwVHlwZTogbnVtYmVyO1xyXG4gICAgc2NvcGU6IHN0cmluZztcclxuICAgIHR5cGU6IHN0cmluZztcclxufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1vci1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3Rvcnkvc3JjL21vZGVsL3VzZXItb3ItZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFET2JqZWN0IH0gZnJvbSAnLi9hZC1vYmplY3QnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVc2VyT3JHcm91cCBleHRlbmRzIEFET2JqZWN0IHtcclxuICBtYWlsOiBzdHJpbmc7XHJcbiAgbWVtYmVyT2Y6IHN0cmluZ1tdO1xyXG4gIG9iamVjdFNpZDogc3RyaW5nO1xyXG4gIHNBTUFjY291bnROYW1lOiBzdHJpbmc7XHJcbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3Rvcnkvc3JjL21vZGVsL3VzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJPckdyb3VwIH0gZnJvbSAnLi91c2VyLW9yLWdyb3VwJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlciBleHRlbmRzIFVzZXJPckdyb3VwIHtcclxuICBiaXJ0aERhdGU6IHN0cmluZzsgLy9EYXRlO1xyXG4gIGRlcGFydG1lbnQ6IHN0cmluZztcclxuICBlbXBsb3llZU51bWJlcjogc3RyaW5nO1xyXG4gIGZhY3NpbWlsZVRlbGVwaG9uZU51bWJlcjogc3RyaW5nO1xyXG4gIGdpdmVuTmFtZTogc3RyaW5nOyAvLyBGaXJzdCBuYW1lXHJcbiAgaW5pdGlhbHM6IHN0cmluZztcclxuICBsOiBzdHJpbmc7IC8vIENpdHlcclxuICBsYXN0QmFkUGFzc3dvcmRBdHRlbXB0OiBzdHJpbmc7IC8vRGF0ZTtcclxuICBsYXN0TG9nb25EYXRlOiBzdHJpbmc7IC8vRGF0ZTtcclxuICBtYW5hZ2VyOiBzdHJpbmc7XHJcbiAgbW9iaWxlOiBzdHJpbmc7XHJcbiAgc2NyaXB0UGF0aDogc3RyaW5nO1xyXG4gIHNuOiBzdHJpbmc7IC8vIFN1cm5hbWUgKExhc3QgbmFtZSlcclxuICBzdDogc3RyaW5nOyAvLyBTdGF0ZVxyXG4gIHRlbGVwaG9uZU51bWJlcjogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgdGh1bWJuYWlsUGhvdG86IG51bWJlcltdO1xyXG4gIHVzZXJBY2NvdW50Q29udHJvbDogbnVtYmVyO1xyXG4gIHVzZXJQcmluY2lwYWxOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGVuYWJsZWQ6IGJvb2xlYW47IC8vIE5vdCBhIHJlYWwgQUQgcHJvcGVydHkgLSBjYWxjdWxhdGVkIGJ5IEFQSVxyXG59Il19
@@ -0,0 +1,125 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Inject, inject, Injectable, Optional } from '@angular/core';
3
+ import { DateTime } from 'luxon';
4
+ import { of } from 'rxjs';
5
+ import { NgxLibServiceBase } from '@cleavelandprice/ngx-lib';
6
+ import { ActiveDirectoryServiceOptionsToken } from '../model/active-directory-service-options-token';
7
+ import * as i0 from "@angular/core";
8
+ export class ActiveDirectoryService extends NgxLibServiceBase {
9
+ #services = {
10
+ http: inject(HttpClient)
11
+ };
12
+ #cache;
13
+ #defaultCacheLifeMinutes = 720;
14
+ //#region Properties
15
+ get #cacheExpired() {
16
+ if (!this.#cache) {
17
+ return true;
18
+ }
19
+ const expiration = this.#cache.lastUpdate.plus({ minutes: this.options.caching.lifeMinutes });
20
+ return DateTime.now() > expiration;
21
+ }
22
+ //#endregion
23
+ constructor(options) {
24
+ super(options);
25
+ this.options = options;
26
+ this.options = {
27
+ ...options,
28
+ caching: options?.caching ?? {
29
+ enabled: false,
30
+ lifeMinutes: this.#defaultCacheLifeMinutes
31
+ },
32
+ logging: options?.logging ?? {
33
+ dataCached: false,
34
+ cachedDataReturned: false,
35
+ freshDataReturned: false,
36
+ cacheCleared: false
37
+ }
38
+ };
39
+ }
40
+ getUsers(includePhoto = false, includeDisabled = false, parentOU = '') {
41
+ // If caching is enabled, there will be two calls to the API if the cache is null/expired
42
+ // One call is to update the cache and the other is to return the data that the user requested
43
+ // Subsequent calls will bypass the API and returned cached data until it expires
44
+ const observable$ = this.#services.http.get(`${this.apiUrl}/users/${includePhoto}/${includeDisabled}/${parentOU}`);
45
+ if (this.options.caching.enabled) {
46
+ if (this.#cacheExpired) {
47
+ // Get the data and cache it
48
+ observable$.subscribe(data => {
49
+ this.#cache = {
50
+ data,
51
+ lastUpdate: DateTime.now()
52
+ };
53
+ if (this.options.logging.dataCached) {
54
+ console.log(`Data cached for ${this.options.caching.lifeMinutes} minutes`);
55
+ }
56
+ });
57
+ }
58
+ else {
59
+ // Cache exists and hasn't expired yet
60
+ if (this.options.logging.cachedDataReturned) {
61
+ console.log('Returning cached users');
62
+ }
63
+ return of(this.#cache.data);
64
+ }
65
+ }
66
+ // Cache is either disabled or expired, return data from API
67
+ if (this.options.logging.freshDataReturned) {
68
+ console.log('Returning fresh users');
69
+ }
70
+ return observable$;
71
+ }
72
+ getUser(accountName, includePhoto = false) {
73
+ return this.#services.http.get(`${this.apiUrl}/users/name/${accountName}/${includePhoto}`);
74
+ }
75
+ clearCache() {
76
+ this.#cache = undefined;
77
+ if (this.options.logging.cacheCleared) {
78
+ console.log('Cache cleared');
79
+ }
80
+ }
81
+ getDomains() {
82
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/domains`);
83
+ }
84
+ getOUs(parentOU = '') {
85
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/ous/${parentOU}`);
86
+ }
87
+ getContainers(parentOU = '') {
88
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/containers/${parentOU}`);
89
+ }
90
+ getGroups(parentOU = '') {
91
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/groups/${parentOU}`);
92
+ }
93
+ getDistinctUserAttributeValues(attributeName) {
94
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/distinct/${attributeName}`);
95
+ }
96
+ getDepartments() {
97
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/departments`);
98
+ }
99
+ getTitles() {
100
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/titles`);
101
+ }
102
+ getComputers(includeDisabled = false, parentOU = '') {
103
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/computers/${includeDisabled}/${parentOU}`);
104
+ }
105
+ getServers(includeDisabled = false, parentOU = '') {
106
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/servers/${includeDisabled}/${parentOU}`);
107
+ }
108
+ getWorkstations(includeDisabled = false, parentOU = '') {
109
+ return this.#services.http.get(`${this.apiUrl}/activedirectory/workstations/${includeDisabled}/${parentOU}`);
110
+ }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryService, deps: [{ token: ActiveDirectoryServiceOptionsToken, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
112
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryService, providedIn: 'root' }); }
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryService, decorators: [{
115
+ type: Injectable,
116
+ args: [{
117
+ providedIn: 'root'
118
+ }]
119
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
120
+ type: Optional
121
+ }, {
122
+ type: Inject,
123
+ args: [ActiveDirectoryServiceOptionsToken]
124
+ }] }] });
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWRpcmVjdG9yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9zcmMvc2VydmljZXMvYWN0aXZlLWRpcmVjdG9yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7QUFXckcsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQUMzRCxTQUFTLEdBQUc7UUFDVixJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQztLQUN6QixDQUFDO0lBQ0YsTUFBTSxDQUFvQztJQUMxQyx3QkFBd0IsR0FBRyxHQUFHLENBQUM7SUFFL0Isb0JBQW9CO0lBQ3BCLElBQUksYUFBYTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBUSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFFOUYsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcs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QUksQ0FBQyxHQUFHLENBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSw4QkFBOEIsZUFBZSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELFVBQVUsQ0FBQyxlQUFlLEdBQUcsS0FBSyxFQUFFLFFBQVEsR0FBRyxFQUFFO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sNEJBQTRCLGVBQWUsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRCxlQUFlLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRSxRQUFRLEdBQUcsRUFBRTtRQUNwRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLGlDQUFpQyxlQUFlLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN2SCxDQUFDOzhHQS9IVSxzQkFBc0Isa0JBbUJELGtDQUFrQztrSEFuQnZELHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFvQmMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBOZ3hMaWJTZXJ2aWNlQmFzZSB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYic7XHJcbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWwvYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlT3B0aW9uc1Rva2VuIH0gZnJvbSAnLi4vbW9kZWwvYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLW9wdGlvbnMtdG9rZW4nO1xyXG5pbXBvcnQgeyBBRE9iamVjdCB9IGZyb20gJy4uL21vZGVsL2FkLW9iamVjdCc7XHJcbmltcG9ydCB7IEFET2JqZWN0V2l0aENoaWxkcmVuIH0gZnJvbSAnLi4vbW9kZWwvYWQtb2JqZWN0LXdpdGgtY2hpbGRyZW4nO1xyXG5pbXBvcnQgeyBDYWNoZU9iamVjdCB9IGZyb20gJy4uL21vZGVsL2NhY2hlLW9iamVjdCc7XHJcbmltcG9ydCB7IENsZWF2ZWxhbmRQcmljZVVzZXIgfSBmcm9tICcuLi9tb2RlbC9jbGVhdmVsYW5kLXByaWNlLXVzZXInO1xyXG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJy4uL21vZGVsL2dyb3VwJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL21vZGVsL3VzZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZlRGlyZWN0b3J5U2VydmljZSBleHRlbmRzIE5neExpYlNlcnZpY2VCYXNlIHtcclxuICAjc2VydmljZXMgPSB7XHJcbiAgICBodHRwOiBpbmplY3QoSHR0cENsaWVudClcclxuICB9O1xyXG4gICNjYWNoZT86IENhY2hlT2JqZWN0PENsZWF2ZWxhbmRQcmljZVVzZXI+O1xyXG4gICNkZWZhdWx0Q2FjaGVMaWZlTWludXRlcyA9IDcyMDtcclxuXHJcbiAgLy8jcmVnaW9uIFByb3BlcnRpZXNcclxuICBnZXQgI2NhY2hlRXhwaXJlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy4jY2FjaGUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXhwaXJhdGlvbiA9IHRoaXMuI2NhY2hlLmxhc3RVcGRhdGUucGx1cyh7IG1pbnV0ZXM6IHRoaXMub3B0aW9ucy5jYWNoaW5nIS5saWZlTWludXRlc30pO1xyXG5cclxuICAgIHJldHVybiBEYXRlVGltZS5ub3coKSA+IGV4cGlyYXRpb247XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KEFjdGl2ZURpcmVjdG9yeVNlcnZpY2VPcHRpb25zVG9rZW4pIHByaXZhdGUgb3B0aW9uczogQWN0aXZlRGlyZWN0b3J5U2VydmljZU9wdGlvbnMpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuXHJcbiAgICAgIGNhY2hpbmc6IG9wdGlvbnM/LmNhY2hpbmcgPz8ge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIGxpZmVNaW51dGVzOiB0aGlzLiNkZWZhdWx0Q2FjaGVMaWZlTWludXRlc1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgbG9nZ2luZzogb3B0aW9ucz8ubG9nZ2luZyA/PyB7XHJcbiAgICAgICAgZGF0YUNhY2hlZDogZmFsc2UsXHJcbiAgICAgICAgY2FjaGVkRGF0YVJldHVybmVkOiBmYWxzZSxcclxuICAgICAgICBmcmVzaERhdGFSZXR1cm5lZDogZmFsc2UsXHJcbiAgICAgICAgY2FjaGVDbGVhcmVkOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuICBcclxuICBnZXRVc2VycyhpbmNsdWRlUGhvdG8gPSBmYWxzZSwgaW5jbHVkZURpc2FibGVkID0gZmFsc2UsIHBhcmVudE9VID0gJycpOiBPYnNlcnZhYmxlPENsZWF2ZWxhbmRQcmljZVVzZXJbXT4ge1xyXG4gICAgLy8gSWYgY2FjaGluZyBpcyBlbmFibGVkLCB0aGVyZSB3aWxsIGJlIHR3byBjYWxscyB0byB0aGUgQVBJIGlmIHRoZSBjYWNoZSBpcyBudWxsL2V4cGlyZWRcclxuICAgIC8vIE9uZSBjYWxsIGlzIHRvIHVwZGF0ZSB0aGUgY2FjaGUgYW5kIHRoZSBvdGhlciBpcyB0byByZXR1cm4gdGhlIGRhdGEgdGhhdCB0aGUgdXNlciByZXF1ZXN0ZWRcclxuICAgIC8vIFN1YnNlcXVlbnQgY2FsbHMgd2lsbCBieXBhc3MgdGhlIEFQSSBhbmQgcmV0dXJuZWQgY2FjaGVkIGRhdGEgdW50aWwgaXQgZXhwaXJlc1xyXG5cclxuICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy4jc2VydmljZXMuaHR0cC5nZXQ8Q2xlYXZlbGFuZFByaWNlVXNlcltdPihgJHt0aGlzLmFwaVVybH0vdXNlcnMvJHtpbmNsdWRlUGhvdG99LyR7aW5jbHVkZURpc2FibGVkfS8ke3BhcmVudE9VfWApO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2FjaGluZyEuZW5hYmxlZCkge1xyXG4gICAgICBpZiAodGhpcy4jY2FjaGVFeHBpcmVkKSB7XHJcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhIGFuZCBjYWNoZSBpdFxyXG4gICAgICAgIG9ic2VydmFibGUkLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgIHRoaXMuI2NhY2hlID0ge1xyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBsYXN0VXBkYXRlOiBEYXRlVGltZS5ub3coKVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvZ2dpbmchLmRhdGFDYWNoZWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYERhdGEgY2FjaGVkIGZvciAke3RoaXMub3B0aW9ucy5jYWNoaW5nIS5saWZlTWludXRlc30gbWludXRlc2ApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENhY2hlIGV4aXN0cyBhbmQgaGFzbid0IGV4cGlyZWQgeWV0XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2dnaW5nIS5jYWNoZWREYXRhUmV0dXJuZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdSZXR1cm5pbmcgY2FjaGVkIHVzZXJzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YodGhpcy4jY2FjaGUhLmRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FjaGUgaXMgZWl0aGVyIGRpc2FibGVkIG9yIGV4cGlyZWQsIHJldHVybiBkYXRhIGZyb20gQVBJXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvZ2dpbmchLmZyZXNoRGF0YVJldHVybmVkKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdSZXR1cm5pbmcgZnJlc2ggdXNlcnMnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZSQ7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyKGFjY291bnROYW1lOiBzdHJpbmcsIGluY2x1ZGVQaG90byA9IGZhbHNlKTogT2JzZXJ2YWJsZTxDbGVhdmVsYW5kUHJpY2VVc2VyPiB7XHJcbiAgICByZXR1cm4gdGhpcy4jc2VydmljZXMuaHR0cC5nZXQ8Q2xlYXZlbGFuZFByaWNlVXNlcj4oYCR7dGhpcy5hcGlVcmx9L3VzZXJzL25hbWUvJHthY2NvdW50TmFtZX0vJHtpbmNsdWRlUGhvdG99YCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckNhY2hlKCk6IHZvaWQge1xyXG4gICAgdGhpcy4jY2FjaGUgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2dnaW5nIS5jYWNoZUNsZWFyZWQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NhY2hlIGNsZWFyZWQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERvbWFpbnMoKTogT2JzZXJ2YWJsZTxBRE9iamVjdFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy4jc2VydmljZXMuaHR0cC5nZXQ8QURPYmplY3RbXT4oYCR7dGhpcy5hcGlVcmx9L2FjdGl2ZWRpcmVjdG9yeS9kb21haW5zYCk7XHJcbiAgfVxyXG5cclxuICBnZXRPVXMocGFyZW50T1UgPSAnJyk6IE9ic2VydmFibGU8QURPYmplY3RXaXRoQ2hpbGRyZW5bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuI3NlcnZpY2VzLmh0dHAuZ2V0PEFET2JqZWN0V2l0aENoaWxkcmVuW10+KGAke3RoaXMuYXBpVXJsfS9hY3RpdmVkaXJlY3Rvcnkvb3VzLyR7cGFyZW50T1V9YCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb250YWluZXJzKHBhcmVudE9VID0gJycpOiBPYnNlcnZhYmxlPEFET2JqZWN0V2l0aENoaWxkcmVuW10+IHtcclxuICAgIHJldHVybiB0aGlzLiNzZXJ2aWNlcy5odHRwLmdldDxBRE9iamVjdFdpdGhDaGlsZHJlbltdPihgJHt0aGlzLmFwaVVybH0vYWN0aXZlZGlyZWN0b3J5L2NvbnRhaW5lcnMvJHtwYXJlbnRPVX1gKTtcclxuICB9XHJcblxyXG4gIGdldEdyb3VwcyhwYXJlbnRPVSA9ICcnKTogT2JzZXJ2YWJsZTxHcm91cFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy4jc2VydmljZXMuaHR0cC5nZXQ8R3JvdXBbXT4oYCR7dGhpcy5hcGlVcmx9L2FjdGl2ZWRpcmVjdG9yeS9ncm91cHMvJHtwYXJlbnRPVX1gKTtcclxuICB9XHJcblxyXG4gIGdldERpc3RpbmN0VXNlckF0dHJpYnV0ZVZhbHVlcyhhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpIDogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuI3NlcnZpY2VzLmh0dHAuZ2V0PGFueVtdPihgJHt0aGlzLmFwaVVybH0vYWN0aXZlZGlyZWN0b3J5L2Rpc3RpbmN0LyR7YXR0cmlidXRlTmFtZX1gKTtcclxuICB9XHJcblxyXG4gIGdldERlcGFydG1lbnRzKCkgOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy4jc2VydmljZXMuaHR0cC5nZXQ8c3RyaW5nW10+KGAke3RoaXMuYXBpVXJsfS9hY3RpdmVkaXJlY3RvcnkvZGVwYXJ0bWVudHNgKTtcclxuICB9XHJcblxyXG4gIGdldFRpdGxlcygpIDogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuI3NlcnZpY2VzLmh0dHAuZ2V0PHN0cmluZ1tdPihgJHt0aGlzLmFwaVVybH0vYWN0aXZlZGlyZWN0b3J5L3RpdGxlc2ApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcHV0ZXJzKGluY2x1ZGVEaXNhYmxlZCA9IGZhbHNlLCBwYXJlbnRPVSA9ICcnKTogT2JzZXJ2YWJsZTxVc2VyW10+IHtcclxuICAgIHJldHVybiB0aGlzLiNzZXJ2aWNlcy5odHRwLmdldDxVc2VyW10+KGAke3RoaXMuYXBpVXJsfS9hY3RpdmVkaXJlY3RvcnkvY29tcHV0ZXJzLyR7aW5jbHVkZURpc2FibGVkfS8ke3BhcmVudE9VfWApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VydmVycyhpbmNsdWRlRGlzYWJsZWQgPSBmYWxzZSwgcGFyZW50T1UgPSAnJyk6IE9ic2VydmFibGU8VXNlcltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy4jc2VydmljZXMuaHR0cC5nZXQ8VXNlcltdPihgJHt0aGlzLmFwaVVybH0vYWN0aXZlZGlyZWN0b3J5L3NlcnZlcnMvJHtpbmNsdWRlRGlzYWJsZWR9LyR7cGFyZW50T1V9YCk7XHJcbiAgfVxyXG5cclxuICBnZXRXb3Jrc3RhdGlvbnMoaW5jbHVkZURpc2FibGVkID0gZmFsc2UsIHBhcmVudE9VID0gJycpOiBPYnNlcnZhYmxlPFVzZXJbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuI3NlcnZpY2VzLmh0dHAuZ2V0PFVzZXJbXT4oYCR7dGhpcy5hcGlVcmx9L2FjdGl2ZWRpcmVjdG9yeS93b3Jrc3RhdGlvbnMvJHtpbmNsdWRlRGlzYWJsZWR9LyR7cGFyZW50T1V9YCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==