@cleavelandprice/ngx-lib 4.2.0 → 4.3.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 (80) hide show
  1. package/README.md +5 -5
  2. package/esm2022/active-directory/active-directory.module.mjs +4 -4
  3. package/esm2022/active-directory/material/components/user-chooser/user-chooser.component.mjs +5 -5
  4. package/esm2022/active-directory/material/components/user-form-field/user-form-field.component.mjs +5 -5
  5. package/esm2022/active-directory/material/mat-active-directory.module.mjs +5 -5
  6. package/esm2022/active-directory/services/active-directory.service.mjs +3 -3
  7. package/esm2022/authentication/authentication.base.module.mjs +4 -4
  8. package/esm2022/authentication/material/components/login/login.component.mjs +5 -5
  9. package/esm2022/authentication/material/components/login-form/login-form.component.mjs +5 -5
  10. package/esm2022/authentication/material/mat-authentication.module.mjs +4 -4
  11. package/esm2022/authentication/material/services/mat-authentication.service.mjs +3 -3
  12. package/esm2022/authentication/object/authentication-object.module.mjs +4 -4
  13. package/esm2022/authentication/object/services/authentication-object.service.mjs +3 -3
  14. package/esm2022/authentication/token/authetiction-token.module.mjs +4 -4
  15. package/esm2022/authentication/token/services/authentication-token.service.mjs +3 -3
  16. package/esm2022/dialog/components/base/base.component.mjs +5 -5
  17. package/esm2022/dialog/components/choice/choice.component.mjs +5 -5
  18. package/esm2022/dialog/components/confirmation/confirmation.component.mjs +5 -5
  19. package/esm2022/dialog/components/input/input.component.mjs +5 -5
  20. package/esm2022/dialog/components/message/message.component.mjs +5 -5
  21. package/esm2022/dialog/dialog.module.mjs +5 -5
  22. package/esm2022/lib/ngx-lib.module.mjs +4 -4
  23. package/esm2022/lib/services/app-path-config.service.mjs +3 -3
  24. package/esm2022/msgraph/msgraph.module.mjs +5 -5
  25. package/esm2022/quill/components/editor/editor.component.mjs +6 -6
  26. package/esm2022/quill/components/raw/raw.component.mjs +5 -5
  27. package/esm2022/quill/mention/components/editor/editor.component.mjs +6 -18
  28. package/esm2022/quill/mention/quill-mention.module.mjs +4 -4
  29. package/esm2022/quill/quill.module.mjs +4 -4
  30. package/esm2022/sharepoint/components/user-photo/user-photo.component.mjs +3 -3
  31. package/esm2022/sharepoint/pipes/user-photo-url.pipe.mjs +4 -4
  32. package/esm2022/sharepoint/services/sharepoint.service.mjs +3 -3
  33. package/esm2022/sharepoint/sharepoint.module.mjs +4 -4
  34. package/esm2022/table/components/table/table.component.mjs +15 -6
  35. package/esm2022/table/model/table-column.mjs +1 -1
  36. package/esm2022/table/pipes/decimalPoints.mjs +14 -0
  37. package/esm2022/table/pipes/roundNumber.mjs +14 -0
  38. package/esm2022/table/table.api.mjs +3 -1
  39. package/esm2022/table/table.module.mjs +18 -8
  40. package/esm2022/upload/components/upload/upload.component.mjs +3 -3
  41. package/esm2022/upload/components/upload-dialog/upload-dialog.component.mjs +5 -5
  42. package/esm2022/upload/services/upload.service.mjs +3 -3
  43. package/esm2022/upload/upload.module.mjs +4 -4
  44. package/esm2022/url-utilities/pipes/safe-resource-url.pipe.mjs +4 -4
  45. package/esm2022/url-utilities/pipes/safe-url.pipe.mjs +4 -4
  46. package/esm2022/url-utilities/pipes/uri-scheme.pipe.mjs +4 -4
  47. package/esm2022/url-utilities/url-utilities.module.mjs +5 -5
  48. package/fesm2022/cleavelandprice-ngx-lib-active-directory-material.mjs +12 -12
  49. package/fesm2022/cleavelandprice-ngx-lib-active-directory-material.mjs.map +1 -1
  50. package/fesm2022/cleavelandprice-ngx-lib-active-directory.mjs +7 -7
  51. package/fesm2022/cleavelandprice-ngx-lib-authentication-material.mjs +15 -15
  52. package/fesm2022/cleavelandprice-ngx-lib-authentication-material.mjs.map +1 -1
  53. package/fesm2022/cleavelandprice-ngx-lib-authentication-object.mjs +7 -7
  54. package/fesm2022/cleavelandprice-ngx-lib-authentication-token.mjs +7 -7
  55. package/fesm2022/cleavelandprice-ngx-lib-authentication.mjs +4 -4
  56. package/fesm2022/cleavelandprice-ngx-lib-dialog.mjs +24 -24
  57. package/fesm2022/cleavelandprice-ngx-lib-dialog.mjs.map +1 -1
  58. package/fesm2022/cleavelandprice-ngx-lib-msgraph.mjs +4 -4
  59. package/fesm2022/cleavelandprice-ngx-lib-msgraph.mjs.map +1 -1
  60. package/fesm2022/cleavelandprice-ngx-lib-quill-mention.mjs +9 -21
  61. package/fesm2022/cleavelandprice-ngx-lib-quill-mention.mjs.map +1 -1
  62. package/fesm2022/cleavelandprice-ngx-lib-quill.mjs +13 -13
  63. package/fesm2022/cleavelandprice-ngx-lib-quill.mjs.map +1 -1
  64. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs +13 -13
  65. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  66. package/fesm2022/cleavelandprice-ngx-lib-table.mjs +53 -14
  67. package/fesm2022/cleavelandprice-ngx-lib-table.mjs.map +1 -1
  68. package/fesm2022/cleavelandprice-ngx-lib-upload.mjs +14 -14
  69. package/fesm2022/cleavelandprice-ngx-lib-upload.mjs.map +1 -1
  70. package/fesm2022/cleavelandprice-ngx-lib-url-utilities.mjs +13 -13
  71. package/fesm2022/cleavelandprice-ngx-lib-url-utilities.mjs.map +1 -1
  72. package/fesm2022/cleavelandprice-ngx-lib.mjs +7 -7
  73. package/package.json +7 -7
  74. package/quill/mention/components/editor/editor.component.d.ts +0 -4
  75. package/table/components/table/table.component.d.ts +3 -1
  76. package/table/model/table-column.d.ts +5 -1
  77. package/table/pipes/decimalPoints.d.ts +7 -0
  78. package/table/pipes/roundNumber.d.ts +7 -0
  79. package/table/table.api.d.ts +2 -0
  80. package/table/table.module.d.ts +3 -1
@@ -92,10 +92,10 @@ export class UriSchemePipe {
92
92
  return `of${openMode}`; // default: open file as view/edit
93
93
  }
94
94
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UriSchemePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
96
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: UriSchemePipe, isStandalone: true, name: "uriScheme", pure: false }); }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UriSchemePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
96
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: UriSchemePipe, isStandalone: true, name: "uriScheme", pure: false }); }
97
97
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UriSchemePipe, decorators: [{
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UriSchemePipe, decorators: [{
99
99
  type: Pipe,
100
100
  args: [{
101
101
  name: 'uriScheme',
@@ -103,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
103
103
  pure: false
104
104
  }]
105
105
  }] });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLXNjaGVtZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvdXJsLXV0aWxpdGllcy9zcmMvcGlwZXMvdXJpLXNjaGVtZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sYUFBYTtJQUN4Qiw4RUFBOEU7SUFFOUUsU0FBUyxDQUFDLEtBQWEsRUFBRSxrQkFBa0IsR0FBRyxLQUFLO1FBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUFDLE9BQU8sS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUVuRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUFDLE9BQU8sS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUVqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakMsT0FBTyxNQUFNLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFpQjtRQUNwQixRQUFRLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLFlBQVk7WUFDWixLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQ3hCLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDekIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxFQUFFLFlBQVk7Z0JBQ2hELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDeEIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxLQUFLLENBQUM7WUFDakQsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxFQUFFLFlBQVk7Z0JBQ2hELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDeEIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDbEQsS0FBSyxNQUFNLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUN6QixLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLEVBQUUsWUFBWTtnQkFDaEQsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUN4QixLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxFQUFFLFlBQVk7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxPQUFPLENBQUM7WUFBQyxLQUFLLE9BQU8sQ0FBQztZQUFDLEtBQUssT0FBTyxDQUFDO1lBQ3JELEtBQUssT0FBTyxFQUFFLFlBQVk7Z0JBQ3hCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDeEIsS0FBSyxLQUFLLEVBQUUsWUFBWTtnQkFDdEIsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sV0FBVyxDQUFDO1lBQ3JCLEtBQUssS0FBSztnQkFDUixPQUFPLFVBQVUsQ0FBQztZQUNwQjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWlCO1FBQ3hCLFFBQVEsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDaEMsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQ3JDLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUNyQyxLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDckMsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUN4QixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssS0FBSztnQkFDUixPQUFPLEtBQUssQ0FBQyxDQUFDLG9CQUFvQjtZQUNwQztnQkFDRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQywyQkFBMkI7Z0JBQ2pELE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQzs4R0FoRVUsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUx6QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxXQUFXO29CQUNqQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3VyaVNjaGVtZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHB1cmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIFVyaVNjaGVtZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvb2ZmaWNlL2NsaWVudC1kZXZlbG9wZXIvb2ZmaWNlLXVyaS1zY2hlbWVzXG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcsIGlnbm9yZUxvY2FsU3RvcmFnZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VVcmlTY2hlbWUnKSAmJiAhaWdub3JlTG9jYWxTdG9yYWdlKSB7IHJldHVybiB2YWx1ZTsgfVxuXG4gICAgY29uc3QgdXJsU3BsaXQgPSB2YWx1ZS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IHVybFNwbGl0W3VybFNwbGl0Lmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKCFleHRlbnNpb24pIHsgcmV0dXJuIHZhbHVlOyB9XG5cbiAgICBjb25zdCBjb21tYW5kID0gdGhpcy4jY29tbWFuZChleHRlbnNpb24pO1xuICAgIGNvbnN0IGFwcCA9IHRoaXMuI2FwcChleHRlbnNpb24pO1xuXG4gICAgcmV0dXJuIGBtcy0ke2FwcH06JHtjb21tYW5kfXx1fCR7dmFsdWV9YDtcbiAgfVxuXG4gICNhcHAoZXh0ZW5zaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIC8vIGRvY3VtZW50c1xuICAgICAgY2FzZSAnZG9jJzogY2FzZSAnZG9jeCc6XG4gICAgICBjYXNlICdkb2NtJzogY2FzZSAnZG9jYic6XG4gICAgICBjYXNlICdkb3QnOiBjYXNlICdkb3R4JzogY2FzZSAnZG90bSc6IC8vIHRlbXBsYXRlc1xuICAgICAgICByZXR1cm4gJ3dvcmQnO1xuICAgICAgY2FzZSAneGxzJzogY2FzZSAneGxzeCc6XG4gICAgICBjYXNlICd4bG0nOiBjYXNlICd4bHNtJzogY2FzZSAneGxzYic6IGNhc2UgJ3hsdyc6XG4gICAgICBjYXNlICd4bHQnOiBjYXNlICd4bHR4JzogY2FzZSAneGx0bSc6IC8vIHRlbXBsYXRlc1xuICAgICAgICByZXR1cm4gJ2V4Y2VsJztcbiAgICAgIGNhc2UgJ3BwdCc6IGNhc2UgJ3BwdHgnOlxuICAgICAgY2FzZSAncHBzJzogY2FzZSAncHBzeCc6IGNhc2UgJ3BwdG0nOiBjYXNlICdwcHNtJzpcbiAgICAgIGNhc2UgJ3NsZHgnOiBjYXNlICdzbGRtJzpcbiAgICAgIGNhc2UgJ3BvdCc6IGNhc2UgJ3BvdHgnOiBjYXNlICdwb3RtJzogLy8gdGVtcGxhdGVzXG4gICAgICAgIHJldHVybiAncG93ZXJwb2ludCc7XG4gICAgICBjYXNlICd2c2QnOiBjYXNlICd2c2R4JzpcbiAgICAgIGNhc2UgJ3ZzdCc6IGNhc2UgJ3ZzdHgnOiAvLyB0ZW1wbGF0ZXNcbiAgICAgICAgcmV0dXJuICd2aXNpbyc7XG4gICAgICBjYXNlICdtZGInOiBjYXNlICdhY2NkYic6IGNhc2UgJ2FjY2RlJzogY2FzZSAnYWNjZHInOlxuICAgICAgY2FzZSAnYWNjZHQnOiAvLyB0ZW1wbGF0ZXNcbiAgICAgICAgcmV0dXJuICdhY2Nlc3MnO1xuICAgICAgY2FzZSAnbXBwJzogY2FzZSAnbXBweCc6XG4gICAgICBjYXNlICdtcHQnOiAvLyB0ZW1wbGF0ZXNcbiAgICAgICAgcmV0dXJuICdwcm9qZWN0JztcbiAgICAgIGNhc2UgJ3B1Yic6XG4gICAgICAgIHJldHVybiAncHVibGlzaGVyJztcbiAgICAgIGNhc2UgJ3hzbic6XG4gICAgICAgIHJldHVybiAnaW5mb3BhdGgnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gICNjb21tYW5kKGV4dGVuc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdkb3QnOiBjYXNlICdkb3R4JzogY2FzZSAnZG90bSc6XG4gICAgICBjYXNlICd4bHQnOiBjYXNlICd4bHR4JzogY2FzZSAneGx0bSc6XG4gICAgICBjYXNlICdwb3QnOiBjYXNlICdwb3R4JzogY2FzZSAncG90bSc6XG4gICAgICBjYXNlICd2c3QnOiBjYXNlICd2c3R4JzpcbiAgICAgIGNhc2UgJ2FjY2R0JzpcbiAgICAgIGNhc2UgJ21wdCc6XG4gICAgICAgIHJldHVybiAnbmZ0JzsgLy8gbmV3IGZyb20gdGVtcGxhdGVcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnN0IG9wZW5Nb2RlID0gJ3YnOyAvLyBmb3Igdmlldywgb3IgJ2UnIG9yIGVkaXRcbiAgICAgICAgcmV0dXJuIGBvZiR7b3Blbk1vZGV9YDsgLy8gZGVmYXVsdDogb3BlbiBmaWxlIGFzIHZpZXcvZWRpdFxuICAgIH1cbiAgfVxufVxuIl19
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLXNjaGVtZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvdXJsLXV0aWxpdGllcy9zcmMvcGlwZXMvdXJpLXNjaGVtZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sYUFBYTtJQUN4Qiw4RUFBOEU7SUFFOUUsU0FBUyxDQUFDLEtBQWEsRUFBRSxrQkFBa0IsR0FBRyxLQUFLO1FBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUFDLE9BQU8sS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUVuRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUFDLE9BQU8sS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUVqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakMsT0FBTyxNQUFNLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFpQjtRQUNwQixRQUFRLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLFlBQVk7WUFDWixLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQ3hCLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDekIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxFQUFFLFlBQVk7Z0JBQ2hELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDeEIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxLQUFLLENBQUM7WUFDakQsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxFQUFFLFlBQVk7Z0JBQ2hELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDeEIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDbEQsS0FBSyxNQUFNLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUN6QixLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLEVBQUUsWUFBWTtnQkFDaEQsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUN4QixLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxFQUFFLFlBQVk7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxPQUFPLENBQUM7WUFBQyxLQUFLLE9BQU8sQ0FBQztZQUFDLEtBQUssT0FBTyxDQUFDO1lBQ3JELEtBQUssT0FBTyxFQUFFLFlBQVk7Z0JBQ3hCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDeEIsS0FBSyxLQUFLLEVBQUUsWUFBWTtnQkFDdEIsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sV0FBVyxDQUFDO1lBQ3JCLEtBQUssS0FBSztnQkFDUixPQUFPLFVBQVUsQ0FBQztZQUNwQjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWlCO1FBQ3hCLFFBQVEsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDaEMsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQ3JDLEtBQUssS0FBSyxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUNyQyxLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxNQUFNLENBQUM7WUFDckMsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUN4QixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssS0FBSztnQkFDUixPQUFPLEtBQUssQ0FBQyxDQUFDLG9CQUFvQjtZQUNwQztnQkFDRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQywyQkFBMkI7Z0JBQ2pELE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQzs4R0FoRVUsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUx6QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxXQUFXO29CQUNqQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AUGlwZSh7XHJcbiAgbmFtZTogJ3VyaVNjaGVtZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBwdXJlOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXJpU2NoZW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL29mZmljZS9jbGllbnQtZGV2ZWxvcGVyL29mZmljZS11cmktc2NoZW1lc1xyXG5cclxuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgaWdub3JlTG9jYWxTdG9yYWdlID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlVXJpU2NoZW1lJykgJiYgIWlnbm9yZUxvY2FsU3RvcmFnZSkgeyByZXR1cm4gdmFsdWU7IH1cclxuXHJcbiAgICBjb25zdCB1cmxTcGxpdCA9IHZhbHVlLnNwbGl0KCcuJyk7XHJcbiAgICBjb25zdCBleHRlbnNpb24gPSB1cmxTcGxpdFt1cmxTcGxpdC5sZW5ndGggLSAxXTtcclxuXHJcbiAgICBpZiAoIWV4dGVuc2lvbikgeyByZXR1cm4gdmFsdWU7IH1cclxuXHJcbiAgICBjb25zdCBjb21tYW5kID0gdGhpcy4jY29tbWFuZChleHRlbnNpb24pO1xyXG4gICAgY29uc3QgYXBwID0gdGhpcy4jYXBwKGV4dGVuc2lvbik7XHJcblxyXG4gICAgcmV0dXJuIGBtcy0ke2FwcH06JHtjb21tYW5kfXx1fCR7dmFsdWV9YDtcclxuICB9XHJcblxyXG4gICNhcHAoZXh0ZW5zaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChleHRlbnNpb24udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAvLyBkb2N1bWVudHNcclxuICAgICAgY2FzZSAnZG9jJzogY2FzZSAnZG9jeCc6XHJcbiAgICAgIGNhc2UgJ2RvY20nOiBjYXNlICdkb2NiJzpcclxuICAgICAgY2FzZSAnZG90JzogY2FzZSAnZG90eCc6IGNhc2UgJ2RvdG0nOiAvLyB0ZW1wbGF0ZXNcclxuICAgICAgICByZXR1cm4gJ3dvcmQnO1xyXG4gICAgICBjYXNlICd4bHMnOiBjYXNlICd4bHN4JzpcclxuICAgICAgY2FzZSAneGxtJzogY2FzZSAneGxzbSc6IGNhc2UgJ3hsc2InOiBjYXNlICd4bHcnOlxyXG4gICAgICBjYXNlICd4bHQnOiBjYXNlICd4bHR4JzogY2FzZSAneGx0bSc6IC8vIHRlbXBsYXRlc1xyXG4gICAgICAgIHJldHVybiAnZXhjZWwnO1xyXG4gICAgICBjYXNlICdwcHQnOiBjYXNlICdwcHR4JzpcclxuICAgICAgY2FzZSAncHBzJzogY2FzZSAncHBzeCc6IGNhc2UgJ3BwdG0nOiBjYXNlICdwcHNtJzpcclxuICAgICAgY2FzZSAnc2xkeCc6IGNhc2UgJ3NsZG0nOlxyXG4gICAgICBjYXNlICdwb3QnOiBjYXNlICdwb3R4JzogY2FzZSAncG90bSc6IC8vIHRlbXBsYXRlc1xyXG4gICAgICAgIHJldHVybiAncG93ZXJwb2ludCc7XHJcbiAgICAgIGNhc2UgJ3ZzZCc6IGNhc2UgJ3ZzZHgnOlxyXG4gICAgICBjYXNlICd2c3QnOiBjYXNlICd2c3R4JzogLy8gdGVtcGxhdGVzXHJcbiAgICAgICAgcmV0dXJuICd2aXNpbyc7XHJcbiAgICAgIGNhc2UgJ21kYic6IGNhc2UgJ2FjY2RiJzogY2FzZSAnYWNjZGUnOiBjYXNlICdhY2Nkcic6XHJcbiAgICAgIGNhc2UgJ2FjY2R0JzogLy8gdGVtcGxhdGVzXHJcbiAgICAgICAgcmV0dXJuICdhY2Nlc3MnO1xyXG4gICAgICBjYXNlICdtcHAnOiBjYXNlICdtcHB4JzpcclxuICAgICAgY2FzZSAnbXB0JzogLy8gdGVtcGxhdGVzXHJcbiAgICAgICAgcmV0dXJuICdwcm9qZWN0JztcclxuICAgICAgY2FzZSAncHViJzpcclxuICAgICAgICByZXR1cm4gJ3B1Ymxpc2hlcic7XHJcbiAgICAgIGNhc2UgJ3hzbic6XHJcbiAgICAgICAgcmV0dXJuICdpbmZvcGF0aCc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgI2NvbW1hbmQoZXh0ZW5zaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChleHRlbnNpb24udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICdkb3QnOiBjYXNlICdkb3R4JzogY2FzZSAnZG90bSc6XHJcbiAgICAgIGNhc2UgJ3hsdCc6IGNhc2UgJ3hsdHgnOiBjYXNlICd4bHRtJzpcclxuICAgICAgY2FzZSAncG90JzogY2FzZSAncG90eCc6IGNhc2UgJ3BvdG0nOlxyXG4gICAgICBjYXNlICd2c3QnOiBjYXNlICd2c3R4JzpcclxuICAgICAgY2FzZSAnYWNjZHQnOlxyXG4gICAgICBjYXNlICdtcHQnOlxyXG4gICAgICAgIHJldHVybiAnbmZ0JzsgLy8gbmV3IGZyb20gdGVtcGxhdGVcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCBvcGVuTW9kZSA9ICd2JzsgLy8gZm9yIHZpZXcsIG9yICdlJyBvciBlZGl0XHJcbiAgICAgICAgcmV0dXJuIGBvZiR7b3Blbk1vZGV9YDsgLy8gZGVmYXVsdDogb3BlbiBmaWxlIGFzIHZpZXcvZWRpdFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -5,16 +5,16 @@ import { SafeUrlPipe } from './pipes/safe-url.pipe';
5
5
  import { UriSchemePipe } from './pipes/uri-scheme.pipe';
6
6
  import * as i0 from "@angular/core";
7
7
  export class UrlUtilitiesModule {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UrlUtilitiesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: UrlUtilitiesModule, imports: [CommonModule,
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UrlUtilitiesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: UrlUtilitiesModule, imports: [CommonModule,
10
10
  SafeResourceUrlPipe,
11
11
  SafeUrlPipe,
12
12
  UriSchemePipe], exports: [SafeResourceUrlPipe,
13
13
  SafeUrlPipe,
14
14
  UriSchemePipe] }); }
15
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UrlUtilitiesModule, imports: [CommonModule] }); }
15
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UrlUtilitiesModule, imports: [CommonModule] }); }
16
16
  }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UrlUtilitiesModule, decorators: [{
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UrlUtilitiesModule, decorators: [{
18
18
  type: NgModule,
19
19
  args: [{
20
20
  declarations: [],
@@ -31,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
31
31
  ]
32
32
  }]
33
33
  }] });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXV0aWxpdGllcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi91cmwtdXRpbGl0aWVzL3NyYy91cmwtdXRpbGl0aWVzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWlCeEQsTUFBTSxPQUFPLGtCQUFrQjs4R0FBbEIsa0JBQWtCOytHQUFsQixrQkFBa0IsWUFYM0IsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixXQUFXO1lBQ1gsYUFBYSxhQUdiLG1CQUFtQjtZQUNuQixXQUFXO1lBQ1gsYUFBYTsrR0FHSixrQkFBa0IsWUFYM0IsWUFBWTs7MkZBV0gsa0JBQWtCO2tCQWY5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxhQUFhO3FCQUNkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsYUFBYTtxQkFDZDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTYWZlUmVzb3VyY2VVcmxQaXBlIH0gZnJvbSAnLi9waXBlcy9zYWZlLXJlc291cmNlLXVybC5waXBlJztcbmltcG9ydCB7IFNhZmVVcmxQaXBlIH0gZnJvbSAnLi9waXBlcy9zYWZlLXVybC5waXBlJztcbmltcG9ydCB7IFVyaVNjaGVtZVBpcGUgfSBmcm9tICcuL3BpcGVzL3VyaS1zY2hlbWUucGlwZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNhZmVSZXNvdXJjZVVybFBpcGUsXG4gICAgU2FmZVVybFBpcGUsXG4gICAgVXJpU2NoZW1lUGlwZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU2FmZVJlc291cmNlVXJsUGlwZSxcbiAgICBTYWZlVXJsUGlwZSxcbiAgICBVcmlTY2hlbWVQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVXJsVXRpbGl0aWVzTW9kdWxlIHsgfVxuIl19
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXV0aWxpdGllcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi91cmwtdXRpbGl0aWVzL3NyYy91cmwtdXRpbGl0aWVzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWlCeEQsTUFBTSxPQUFPLGtCQUFrQjs4R0FBbEIsa0JBQWtCOytHQUFsQixrQkFBa0IsWUFYM0IsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixXQUFXO1lBQ1gsYUFBYSxhQUdiLG1CQUFtQjtZQUNuQixXQUFXO1lBQ1gsYUFBYTsrR0FHSixrQkFBa0IsWUFYM0IsWUFBWTs7MkZBV0gsa0JBQWtCO2tCQWY5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxhQUFhO3FCQUNkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsYUFBYTtxQkFDZDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTYWZlUmVzb3VyY2VVcmxQaXBlIH0gZnJvbSAnLi9waXBlcy9zYWZlLXJlc291cmNlLXVybC5waXBlJztcclxuaW1wb3J0IHsgU2FmZVVybFBpcGUgfSBmcm9tICcuL3BpcGVzL3NhZmUtdXJsLnBpcGUnO1xyXG5pbXBvcnQgeyBVcmlTY2hlbWVQaXBlIH0gZnJvbSAnLi9waXBlcy91cmktc2NoZW1lLnBpcGUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNhZmVSZXNvdXJjZVVybFBpcGUsXHJcbiAgICBTYWZlVXJsUGlwZSxcclxuICAgIFVyaVNjaGVtZVBpcGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFNhZmVSZXNvdXJjZVVybFBpcGUsXHJcbiAgICBTYWZlVXJsUGlwZSxcclxuICAgIFVyaVNjaGVtZVBpcGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcmxVdGlsaXRpZXNNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -441,10 +441,10 @@ class UserChooserComponent {
441
441
  .join('\n') :
442
442
  '';
443
443
  }
444
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UserChooserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
445
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: UserChooserComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "selectionList", first: true, predicate: MatSelectionList, descendants: true, isSignal: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], ngImport: i0, template: "<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ _data.title }}</h2>\n\n <div id=\"num-selected\">\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n @if (dataSource && photos) {\n <form [formGroup]=\"filterForm\">\n @if (dataSource) {\n <mat-form-field>\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\n @if (filterForm.value.filter) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n }\n </mat-form-field>\n }\n </form>\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n @for (user of dataSource.filteredData; track user) {\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n @if (getPhoto(user)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\n } @else {\n <mat-icon matListItemAvatar class=\"no-photo\"\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\n }\n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName ?? user.name }}\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\n <div>{{ castUser(user).telephoneNumber }}</div>\n }\n </div>\n @if (isUser(user)) {\n <div>{{ castUser(user).department }}</div>\n <div class=\"title\">{{ castUser(user).title }}</div>\n }\n </div>\n </mat-list-option>\n }\n </mat-selection-list>\n } @else {\n <div>\n <mat-spinner [diameter]=\"50\"/>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (dataSource && photos) {\n @if (selectedOptions.length) {\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n }\n @if (isMultiMode) {\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n >\n <mat-icon fontIcon=\"select_all\"/>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n }\n @if (isMultiMode && selectedOptions.length) {\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n >\n <mat-icon fontIcon=\"clear_all\"/>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n }\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\n <mat-icon fontIcon=\"check\"/>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n }\n }\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"/>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width: 801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { 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: "directive", type: MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "component", type: MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
444
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserChooserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
445
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: UserChooserComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "selectionList", first: true, predicate: MatSelectionList, descendants: true, isSignal: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], ngImport: i0, template: "<div id=\"dialog-title\">\r\n <h2 mat-dialog-title>{{ _data.title }}</h2>\r\n\r\n <div id=\"num-selected\">\r\n {{ selectedOptions.length }} selected\r\n </div>\r\n</div>\r\n\r\n<mat-dialog-content>\r\n @if (dataSource && photos) {\r\n <form [formGroup]=\"filterForm\">\r\n @if (dataSource) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\r\n @if (filterForm.value.filter) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </form>\r\n <mat-selection-list [multiple]=\"isMultiMode\"\r\n (selectionChange)=\"listSelectionChanged($event.options)\">\r\n @for (user of dataSource.filteredData; track user) {\r\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\r\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\r\n @if (getPhoto(user)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\r\n } @else {\r\n <mat-icon matListItemAvatar class=\"no-photo\"\r\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\r\n }\r\n <div class=\"user\">\r\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\r\n {{ user.displayName ?? user.name }}\r\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\r\n <div>{{ castUser(user).telephoneNumber }}</div>\r\n }\r\n </div>\r\n @if (isUser(user)) {\r\n <div>{{ castUser(user).department }}</div>\r\n <div class=\"title\">{{ castUser(user).title }}</div>\r\n }\r\n </div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n } @else {\r\n <div>\r\n <mat-spinner [diameter]=\"50\"/>\r\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n @if (dataSource && photos) {\r\n @if (selectedOptions.length) {\r\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\r\n Hide Unselected\r\n </mat-slide-toggle>\r\n }\r\n @if (isMultiMode) {\r\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\r\n >\r\n <mat-icon fontIcon=\"select_all\"/>\r\n <span class=\"hide-mobile\">Select All</span>\r\n </button>\r\n }\r\n @if (isMultiMode && selectedOptions.length) {\r\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\r\n >\r\n <mat-icon fontIcon=\"clear_all\"/>\r\n <span class=\"hide-mobile\">Clear All</span>\r\n </button>\r\n }\r\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\r\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\r\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\r\n <mat-icon fontIcon=\"check\"/>\r\n <span class=\"hide-mobile\">Ok</span>\r\n </button>\r\n }\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\r\n <mat-icon fontIcon=\"close\"/>\r\n <span class=\"hide-mobile\">Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width: 801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { 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: "directive", type: MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "component", type: MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
446
446
  }
447
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UserChooserComponent, decorators: [{
447
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserChooserComponent, decorators: [{
448
448
  type: Component,
449
449
  args: [{ standalone: true, imports: [
450
450
  MatButton,
@@ -462,7 +462,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
462
462
  MatSlideToggle,
463
463
  MatTooltip,
464
464
  ReactiveFormsModule,
465
- ], template: "<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ _data.title }}</h2>\n\n <div id=\"num-selected\">\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n @if (dataSource && photos) {\n <form [formGroup]=\"filterForm\">\n @if (dataSource) {\n <mat-form-field>\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\n @if (filterForm.value.filter) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n }\n </mat-form-field>\n }\n </form>\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n @for (user of dataSource.filteredData; track user) {\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n @if (getPhoto(user)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\n } @else {\n <mat-icon matListItemAvatar class=\"no-photo\"\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\n }\n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName ?? user.name }}\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\n <div>{{ castUser(user).telephoneNumber }}</div>\n }\n </div>\n @if (isUser(user)) {\n <div>{{ castUser(user).department }}</div>\n <div class=\"title\">{{ castUser(user).title }}</div>\n }\n </div>\n </mat-list-option>\n }\n </mat-selection-list>\n } @else {\n <div>\n <mat-spinner [diameter]=\"50\"/>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (dataSource && photos) {\n @if (selectedOptions.length) {\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n }\n @if (isMultiMode) {\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n >\n <mat-icon fontIcon=\"select_all\"/>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n }\n @if (isMultiMode && selectedOptions.length) {\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n >\n <mat-icon fontIcon=\"clear_all\"/>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n }\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\n <mat-icon fontIcon=\"check\"/>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n }\n }\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"/>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width: 801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
465
+ ], template: "<div id=\"dialog-title\">\r\n <h2 mat-dialog-title>{{ _data.title }}</h2>\r\n\r\n <div id=\"num-selected\">\r\n {{ selectedOptions.length }} selected\r\n </div>\r\n</div>\r\n\r\n<mat-dialog-content>\r\n @if (dataSource && photos) {\r\n <form [formGroup]=\"filterForm\">\r\n @if (dataSource) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\r\n @if (filterForm.value.filter) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </form>\r\n <mat-selection-list [multiple]=\"isMultiMode\"\r\n (selectionChange)=\"listSelectionChanged($event.options)\">\r\n @for (user of dataSource.filteredData; track user) {\r\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\r\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\r\n @if (getPhoto(user)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\r\n } @else {\r\n <mat-icon matListItemAvatar class=\"no-photo\"\r\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\r\n }\r\n <div class=\"user\">\r\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\r\n {{ user.displayName ?? user.name }}\r\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\r\n <div>{{ castUser(user).telephoneNumber }}</div>\r\n }\r\n </div>\r\n @if (isUser(user)) {\r\n <div>{{ castUser(user).department }}</div>\r\n <div class=\"title\">{{ castUser(user).title }}</div>\r\n }\r\n </div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n } @else {\r\n <div>\r\n <mat-spinner [diameter]=\"50\"/>\r\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n @if (dataSource && photos) {\r\n @if (selectedOptions.length) {\r\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\r\n Hide Unselected\r\n </mat-slide-toggle>\r\n }\r\n @if (isMultiMode) {\r\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\r\n >\r\n <mat-icon fontIcon=\"select_all\"/>\r\n <span class=\"hide-mobile\">Select All</span>\r\n </button>\r\n }\r\n @if (isMultiMode && selectedOptions.length) {\r\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\r\n >\r\n <mat-icon fontIcon=\"clear_all\"/>\r\n <span class=\"hide-mobile\">Clear All</span>\r\n </button>\r\n }\r\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\r\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\r\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\r\n <mat-icon fontIcon=\"check\"/>\r\n <span class=\"hide-mobile\">Ok</span>\r\n </button>\r\n }\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\r\n <mat-icon fontIcon=\"close\"/>\r\n <span class=\"hide-mobile\">Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width: 801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
466
466
  }], propDecorators: { filterInput: [{
467
467
  type: ViewChild,
468
468
  args: ['filterInput']
@@ -595,10 +595,10 @@ class UserFormFieldComponent {
595
595
  p.displayName?.toLowerCase() === (user.displayName ?? user.name).toLowerCase() ||
596
596
  p.title?.toLowerCase() === (user.displayName ?? user.name).toLowerCase())?.encodedAbsUrl;
597
597
  }
598
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UserFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
599
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", 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: "\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\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/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames?.length) {\n <div [ngClass]=\"class\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\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"] }] }); }
598
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
599
+ 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"] }] }); }
600
600
  }
601
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UserFormFieldComponent, decorators: [{
601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserFormFieldComponent, decorators: [{
602
602
  type: Component,
603
603
  args: [{ selector: 'cp-user-field', standalone: true, imports: [
604
604
  MatButton,
@@ -609,7 +609,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
609
609
  MatProgressBar,
610
610
  MatSuffix,
611
611
  NgClass
612
- ], template: "\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\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/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames?.length) {\n <div [ngClass]=\"class\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\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"] }]
612
+ ], 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"] }]
613
613
  }] });
614
614
 
615
615
  class MatActiveDirectoryModule {
@@ -629,8 +629,8 @@ class MatActiveDirectoryModule {
629
629
  throw new Error('MatActiveDirectoryModule is already loaded. Import it in the AppModule only');
630
630
  }
631
631
  }
632
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MatActiveDirectoryModule, deps: [{ token: MatActiveDirectoryModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
633
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: MatActiveDirectoryModule, imports: [CommonModule,
632
+ 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 }); }
633
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: MatActiveDirectoryModule, imports: [CommonModule,
634
634
  ReactiveFormsModule,
635
635
  MatButtonModule,
636
636
  MatDialogModule,
@@ -646,7 +646,7 @@ class MatActiveDirectoryModule {
646
646
  UserChooserComponent,
647
647
  UserFormFieldComponent], exports: [UserChooserComponent,
648
648
  UserFormFieldComponent] }); }
649
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MatActiveDirectoryModule, imports: [CommonModule,
649
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MatActiveDirectoryModule, imports: [CommonModule,
650
650
  ReactiveFormsModule,
651
651
  MatButtonModule,
652
652
  MatDialogModule,
@@ -662,7 +662,7 @@ class MatActiveDirectoryModule {
662
662
  UserChooserComponent,
663
663
  UserFormFieldComponent] }); }
664
664
  }
665
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MatActiveDirectoryModule, decorators: [{
665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MatActiveDirectoryModule, decorators: [{
666
666
  type: NgModule,
667
667
  args: [{
668
668
  declarations: [],
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-material.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/default-user-chooser-filter-options.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/default-user-chooser-data.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-filter-options.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-pre-processing-group.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/mat-active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/cleavelandprice-ngx-lib-active-directory-material.ts"],"sourcesContent":["import { UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\n\r\nexport const DefaultUserChooserFilterOptions: UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n};","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { DefaultUserChooserFilterOptions } from \"./default-user-chooser-filter-options\";\r\nimport { UserChooserData } from \"./user-chooser-data\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\n\r\nexport const DefaultUserChooserData: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n allowCloseWithoutSelections: false,\r\n includeDisabledUsers: false,\r\n returnUserObjects: false,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n mode: UserChooserMode.Single,\r\n objectTypes: '*',\r\n filterOptions: DefaultUserChooserFilterOptions\r\n};","export interface UserChooserFilterOptions {\r\n accountName?: boolean;\r\n department?: boolean;\r\n groupMembership?: boolean;\r\n phoneNumber?: boolean;\r\n title?: boolean;\r\n};","export interface UserChooserPreProcessingGroup {\r\n accountNames?: string[];\r\n departments?: string[];\r\n groups?: string[];\r\n titles?: string[];\r\n};","import { Component, ElementRef, inject, OnInit, ViewChild, viewChild } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\nimport { MatListItemAvatar, MatListOption, MatSelectionList } from '@angular/material/list';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\n\nimport { ActiveDirectoryService } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { DefaultUserChooserData } from '../../model/default-user-chooser-data';\nimport { SelectableGroup } from '../../model/selectable-group';\nimport { SelectableUser } from '../../model/selectable-user';\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { UserChooserMode } from '../../model/user-chooser-mode';\n\n@Component({\n standalone: true,\n templateUrl: './user-chooser.component.html',\n imports: [\n MatButton,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatFormField,\n MatIcon,\n MatIconButton,\n MatInput,\n MatListItemAvatar,\n MatListOption,\n MatProgressSpinner,\n MatSelectionList,\n MatSlideToggle,\n MatTooltip,\n ReactiveFormsModule,\n ],\n styleUrls: [\n './user-chooser.component.scss',\n '../../../../../styles/mat-icon.scss'\n ]\n})\nexport class UserChooserComponent implements OnInit {\n #services = {\n dialogRef: inject(MatDialogRef<UserChooserComponent>),\n activeDirectory: inject(ActiveDirectoryService),\n sharePoint: inject(SharePointService),\n data: inject<UserChooserData>(MAT_DIALOG_DATA)\n };\n _data = {...DefaultUserChooserData, ...this.#services.data};\n \n //#region Fields\n \n //@ViewChild(MatSelectionList) selectionList?: MatSelectionList;\n selectionList = viewChild(MatSelectionList);\n\n @ViewChild('filterInput') set filterInput(elRef: ElementRef<HTMLInputElement>) {\n if (elRef) {\n elRef.nativeElement.focus();\n }\n };\n //filterInput = viewChild<ElementRef>('filterInput');\n\n filterForm = new FormGroup({\n filter: new FormControl()\n });\n\n dataSource?: MatTableDataSource<SelectableUser | SelectableGroup>;\n photos?: PhotoItem[];\n groups?: SelectableGroup[]; // May or may not get populated, depending on config data sent in\n //#endregion\n\n //#region Properties\n get isMultiMode(): boolean {\n return this._data.mode === UserChooserMode.Multiple;\n }\n\n get selectedOptions(): MatListOption[] {\n return this.selectionList()?.options.filter(o => o.selected) ?? [];\n }\n\n get selectedUsers(): (SelectableUser | SelectableGroup)[] {\n return this.dataSource?.data?.filter(d => d.selected) ?? [];\n }\n\n get filterValue(): string {\n return this.filterForm.value.filter;\n }\n\n get adGroupsNeeded(): boolean {\n // If any are these are true, then we need to pull AD groups for use later\n return (this._data.showGroupMembershipTooltips ?? false) ||\n (this._data.exclusions?.groups?.length ?? 0) > 0 ||\n (this._data.inclusions?.groups?.length ?? 0) > 0 ||\n (this._data.preSelections?.groups?.length ?? 0) > 0 ||\n this._data.filterOptions?.groupMembership ||\n (this._data.selectableGroupNames?.length ?? 0) > 0 ||\n (this._data.groups?.length ?? 0) > 0;\n }\n //#endregion\n\n //#region Lifecycle\n ngOnInit(): void {\n this.#getData();\n this.#listenForFilterChanges();\n }\n //#endregion\n\n //#region Events\n listSelectionChanged(options: MatListOption[]): void {\n if (this._data.mode === UserChooserMode.Single &&\n this.selectedOptions.length &&\n this._data.closeWhenSelectionMade\n ) {\n this.close();\n }\n }\n\n optionSelectionChanged(option: MatListOption): void {\n const user = this.dataSource?.data\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\n\n if (user) {\n // If we are in single user selection mode, deselect any existing selections first\n if (!this.isMultiMode && option.selected) {\n this.dataSource?.data\n .filter(u => u.sAMAccountName.toLowerCase() !== (option.value as SelectableUser).sAMAccountName.toLowerCase())\n .forEach(u => u.selected = false);\n }\n\n user.selected = option.selected;\n }\n }\n\n hideUnselectedChanged(selected: boolean): void {\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\n }\n\n selectAll(): void {\n this.selectionList()?.selectAll();\n\n if (this.selectionList()?.options) {\n this.listSelectionChanged(this.selectionList()!.options.toArray());\n }\n }\n\n deselectAll(): void {\n this.selectionList()?.deselectAll();\n }\n //#endregion\n\n //#region Utilities\n isUser(userOrGroup: SelectableUser | SelectableGroup): boolean {\n return 'title' in userOrGroup;\n }\n castUser(userOrGroup: SelectableUser | SelectableGroup): SelectableUser {\n return userOrGroup as SelectableUser;\n }\n\n #getData(): void {\n const observables$: Observable<any>[] = [\n this._data.users?.length ?\n // Users were passed in\n of(this._data.users) :\n // Users need to be retrieved\n this.#services.activeDirectory.getUsers(false, this._data.includeDisabledUsers, this._data.parentOu),\n\n this._data.photos?.length ?\n // Photos were passed in\n of(this._data.photos) :\n // Photos need to be retrieved\n this.#services.sharePoint.getPhotos()\n ];\n\n // Do we need AD groups?\n if (this.adGroupsNeeded) {\n observables$.push(\n this._data.groups?.length ?\n // Groups were passed in\n of(this._data.groups) :\n // Groups need to be retrieved\n this.#services.activeDirectory.getGroups()\n );\n }\n\n forkJoin(observables$)\n //.subscribe(([users, photos]) => {\n .subscribe(data => {\n // Need groups in place before we handle exclusions/inclusions/pre-selections\n this.groups = this.adGroupsNeeded ?\n data[2] :\n null;\n\n let users = data[0] as SelectableUser[];\n users.forEach(u => u.selected = false); // In case existing data was re-used\n users = this.#includeUsersByAccountName(users);\n users = this.#includeUsersByGroupName(users);\n users = this.#includeUsersByDepartment(users);\n users = this.#includeUsersByTitle(users);\n\n users = this.#excludeUsersByAccountName(users);\n users = this.#excludeUsersByGroupName(users);\n users = this.#excludeUsersByDepartment(users);\n users = this.#excludeUsersByTitle(users);\n\n users = this.#preSelectUsersByAccountName(users);\n users = this.#preSelectUsersByGroupName(users);\n users = this.#preSelectUsersByDepartment(users);\n users = this.#preSelectUsersByTitle(users);\n\n this.#preSelectGroupsByAccountName();\n\n const usersAndGroups: (SelectableUser | SelectableGroup)[] = [];\n\n // Should we allow users to be selected?\n if (['users', '*'].includes(this._data.objectTypes!)) {\n usersAndGroups.push(...users);\n }\n\n // Should we allow groups to be selected\n\n if (['groups', '*'].includes(this._data.objectTypes!)) {\n if (this._data.selectableGroupNames?.length) {\n if (this._data.selectableGroupNames.includes('*')) {\n usersAndGroups.push(...this.groups!);\n } else {\n this._data.selectableGroupNames\n .forEach(groupName => {\n const group = this.groups!.find(g => g.displayName === groupName);\n \n if (group) {\n usersAndGroups.push({\n ...group,\n selected: group.selected\n });\n }\n });\n }\n }\n }\n\n this.dataSource = new MatTableDataSource(usersAndGroups);\n \n this.photos = data[1];\n\n this.#setFilterPredicate();\n });\n }\n\n close(): void {\n if (!this.selectedUsers?.length) {\n this.#services.dialogRef.close(this._data.allowCloseWithoutSelections ? [] : undefined);\n return;\n }\n const value = this.selectedUsers\n .map(u => this._data.returnUserObjects ? u : u.sAMAccountName);\n\n this.#services.dialogRef.close(this._data.mode === UserChooserMode.Multiple ?\n value :\n value[0]\n );\n }\n\n getPhoto(user: SelectableUser | SelectableGroup): string | undefined {\n if (!this.isUser(user)) { return; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === (user as SelectableUser).employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === (user.displayName ?? user.name).toLowerCase() ||\n p.title?.toLowerCase() === (user.displayName ?? user.name).toLowerCase()\n )?.encodedAbsUrl;\n }\n\n //#region Exclusions - won't be included in the dataSource at all\n #excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.accountNames\n ?.forEach(accountName => {\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n\n return users;\n }\n\n #excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.groups\n ?.forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n \n group.member.forEach(groupMemberDn => {\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n #excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.departments\n ?.forEach(department => {\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\n\n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n #excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.titles\n ?.forEach(title => {\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\n \n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n //#endregion\n\n //#region Inclusions - only these will be included in the dataSource\n #includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.accountNames?.length || // No account inclusions specified\n\n this._data.inclusions.accountNames.find(accountName =>\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\n ));\n }\n\n #includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.departments?.length || // No department inclusions specified\n\n this._data.inclusions.departments.find(department =>\n department.toLowerCase() === user.department?.toLowerCase()\n ));\n }\n\n #includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.titles?.length || // No title inclusions specified\n\n this._data.inclusions.titles.find(title =>\n title.toLowerCase() === user.title?.toLowerCase()\n ));\n }\n\n #includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n if (!this._data.inclusions?.groups?.length) {\n return users; // No group inclusions specified\n }\n\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\n this._data.inclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n users\n .filter(user =>\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\n )\n .forEach(user => user.selected = true);\n });\n \n // At this point, all of the appropriate users should have 'selected' set to true\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\n // Reset 'selected' to false, and return\n selectedUsers.forEach(user => user.selected = false);\n return selectedUsers;\n }\n //#endregion\n\n //#region Pre-Selections\n #preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.accountNames\n ?.forEach(accountName => {\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!user) { return; }\n\n user.selected = true;\n });\n\n return users;\n }\n\n #preSelectGroupsByAccountName(): void {\n this._data.preSelections?.accountNames\n ?.forEach(accountName => {\n const group = this.groups?.find(g => g.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!group) { return; }\n\n group.selected = true;\n });;\n }\n\n #preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.departments\n ?.forEach(department =>\n users\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n #preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.titles\n ?.forEach(title =>\n users\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n #preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.groups\n ?.forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n group.member.forEach(groupMemberDn => {\n const user = users.find(u => u.distinguishedName === groupMemberDn);\n if (!user) { return; }\n\n user.selected = true;\n });\n });\n\n return users;\n }\n //#endregion\n \n #setFilterPredicate(): void {\n if (!this.dataSource) {\n return;\n }\n\n this.dataSource.filterPredicate = (user: (SelectableUser | SelectableGroup), filter: string) => {\n if (filter === '{selected:true}') {\n return user.selected;\n } else {\n const regex = new RegExp(filter, 'i'); // Case-insensitive\n let match = false; // The end result - whether or not a employee matches the filter\n\n const filterProperties = [ 'displayName' ];\n if (this._data.filterOptions?.accountName) {\n filterProperties.push('sAMAccountName')\n }\n if (this._data.filterOptions?.title) {\n filterProperties.push('title');\n }\n if (this._data.filterOptions?.department) {\n filterProperties.push('department');\n }\n if (this._data.filterOptions?.phoneNumber) {\n filterProperties.push('telephoneNumber');\n }\n \n // Match on the properties configured above\n filterProperties\n .forEach(field => {\n // @ts-ignore\n if (user[field] && user[field].match(regex)) {\n match = true;\n }\n });\n \n // Match on group membership (group name)\n if (this._data.filterOptions?.groupMembership) {\n user.memberOf.forEach(groupDn => {\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\n \n if (group) {\n match = true;\n }\n });\n }\n\n return match;\n }\n };\n }\n\n #listenForFilterChanges(): void {\n this.filterForm.get('filter')?.valueChanges\n .pipe(\n debounceTime(250)\n )\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\n }\n\n tooltip(user: SelectableUser | SelectableGroup): string {\n return this._data.showGroupMembershipTooltips ?\n user.memberOf\n .map(groupDn =>\n this.groups\n ?.find(group =>\n group.distinguishedName === groupDn\n )?.name\n )\n .sort((a, b) => a! > b! ? 1 : -1)\n .join('\\n') :\n '';\n }\n //#endregion\n}","<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ _data.title }}</h2>\n\n <div id=\"num-selected\">\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n @if (dataSource && photos) {\n <form [formGroup]=\"filterForm\">\n @if (dataSource) {\n <mat-form-field>\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\n @if (filterForm.value.filter) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n }\n </mat-form-field>\n }\n </form>\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n @for (user of dataSource.filteredData; track user) {\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n @if (getPhoto(user)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\n } @else {\n <mat-icon matListItemAvatar class=\"no-photo\"\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\n }\n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName ?? user.name }}\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\n <div>{{ castUser(user).telephoneNumber }}</div>\n }\n </div>\n @if (isUser(user)) {\n <div>{{ castUser(user).department }}</div>\n <div class=\"title\">{{ castUser(user).title }}</div>\n }\n </div>\n </mat-list-option>\n }\n </mat-selection-list>\n } @else {\n <div>\n <mat-spinner [diameter]=\"50\"/>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (dataSource && photos) {\n @if (selectedOptions.length) {\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n }\n @if (isMultiMode) {\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n >\n <mat-icon fontIcon=\"select_all\"/>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n }\n @if (isMultiMode && selectedOptions.length) {\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n >\n <mat-icon fontIcon=\"clear_all\"/>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n }\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\n <mat-icon fontIcon=\"check\"/>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n }\n }\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"/>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, inject, input, OnInit, output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { forkJoin, of } from 'rxjs';\n\nimport { ActiveDirectoryService, User, UserOrGroup } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { DefaultUserChooserData } from '../../model/default-user-chooser-data';\nimport { UserChooserData } from '../../model/user-chooser-data';\n\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatFormField, MatSuffix } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { UserChooserMode } from '../../mat-active-directory.api';\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\n\n@Component({\n selector: 'cp-user-field',\n standalone: true,\n imports: [\n MatButton,\n MatFormField,\n MatIcon,\n MatIconButton,\n MatInput,\n MatProgressBar,\n MatSuffix,\n NgClass\n ],\n templateUrl: './user-form-field.component.html',\n styleUrl: './user-form-field.component.scss'\n})\nexport class UserFormFieldComponent implements OnInit {\n //#region Fields\n #services = {\n dialog: inject(MatDialog),\n activeDirectory: inject(ActiveDirectoryService),\n sharePoint: inject(SharePointService)\n };\n usersSelected = output<string | string[] | UserOrGroup | UserOrGroup[]>(); // string for Single mode, string[] for multi\n userUnSelected = output<string>();\n placeholder = input('Select User(s)');\n clickable = input(true);\n userChooserData = input.required<UserChooserData>();\n _userChooserData!: UserChooserData;\n\n accountNames?: string[];\n\n users?: User[];\n groups?: UserOrGroup[];\n photos?: PhotoItem[];\n //#endregion\n\n //#region Properties\n /*get isEdge(): boolean {\n return window.navigator.userAgent.indexOf('Edge') > -1;\n }*/\n get class(): string {\n return this._userChooserData?.mode === UserChooserMode.Single ? '' :\n (this.accountNames?.length ?? 0) > 4 ? 'grid five' :\n (this.accountNames?.length ?? 0) > 3 ? 'grid four' :\n (this.accountNames?.length ?? 0) > 2 ? 'grid three' :\n (this.accountNames?.length ?? 0) > 1 ? 'grid two' :\n '';\n }\n //#endregion\n \n //#region Lifecycle\n ngOnInit(): void {\n this._userChooserData = {\n ...DefaultUserChooserData,\n ...this.userChooserData()\n }\n\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\n this.accountNames = this._userChooserData.preSelections?.accountNames;\n\n this.#getData();\n }\n //#endregion\n\n //#region Events\n selectUser(): void {\n if (!this.clickable()) { return; }\n\n const data: UserChooserData = {\n ...this._userChooserData,\n\n users: this.users,\n photos: this.photos,\n };\n\n this.#services.dialog.open(UserChooserComponent, {\n data: data\n })\n .afterClosed()\n .subscribe((selected: string | string[] | UserOrGroup | UserOrGroup[]) => {\n if (!selected) { return; }\n \n this.accountNames = Array.isArray(selected) ?\n selected.map(s => typeof(s) === 'string' ? s : s.sAMAccountName) :\n [ selected ].map(s => typeof(s) === 'string' ? s : s.sAMAccountName);\n\n // Overwrite what may have been passed in, for subsequent launches of UserChooserComponent - otherwise it just keeps getting fed stale data\n if (this._userChooserData.preSelections) {\n this._userChooserData.preSelections.accountNames = this.accountNames;\n }\n\n this.usersSelected.emit(selected);\n });\n }\n\n unSelectUser(accountName: string): void {\n const index = this.accountNames?.findIndex(a => a === accountName);\n this.accountNames?.splice(index ?? -1, 1);\n\n if (this._userChooserData.preSelections) {\n this._userChooserData.preSelections.accountNames = this.accountNames;\n }\n\n this.userUnSelected.emit(accountName);\n }\n //#endregion\n\n //#region Utilities\n #getData(): void {\n forkJoin([\n this._userChooserData!.users ?\n // Users were passed in\n of(this._userChooserData!.users) :\n // Users need to be retrieved\n this.#services.activeDirectory.getUsers(false, this._userChooserData!.includeDisabledUsers, this._userChooserData!.parentOu),\n\n this._userChooserData!.groups ?\n // Groups were passed in\n of(this._userChooserData!.groups) :\n // Groups need to be retrieved\n this.#services.activeDirectory.getGroups(this._userChooserData!.parentOu),\n\n this._userChooserData!.photos ?\n // Photos were passed in\n of(this._userChooserData!.photos) :\n // Photos need to be retrieved\n this.#services.sharePoint.getPhotos()\n ])\n .subscribe(([users, groups, photos]) => {\n this.users = users;\n this.groups = groups;\n this.photos = photos;\n });\n }\n\n getUser(user: string | User | undefined): User | undefined {\n user = typeof(user) === 'string' ?\n this.users?.find(u => u.sAMAccountName.toLowerCase() === user?.toString().toLowerCase()) :\n user;\n\n return !user ? undefined :\n 'groupType' in user ? undefined : user;\n }\n\n getGroup(group: string | UserOrGroup | undefined): UserOrGroup | undefined {\n group = typeof(group) === 'string' ?\n this.groups?.find(g => g.sAMAccountName.toLowerCase() === group?.toString().toLowerCase()) :\n group;\n\n return !group ? undefined :\n 'groupType' in group ? group : undefined;\n }\n\n getPhoto(accountName: string): string | undefined {\n const user = this.getUser(accountName);\n if (!user) { return undefined; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === (user.displayName ?? user.name).toLowerCase() ||\n p.title?.toLowerCase() === (user.displayName ?? user.name).toLowerCase()\n )?.encodedAbsUrl;\n }\n //#endregion\n}","\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\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/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames?.length) {\n <div [ngClass]=\"class\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\n}","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ActiveDirectoryServiceOptions, ActiveDirectoryServiceOptionsToken } from '@cleavelandprice/ngx-lib/active-directory';\n\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatTableModule,\n MatTooltipModule,\n\n UserChooserComponent,\n UserFormFieldComponent\n ],\n exports: [\n UserChooserComponent,\n UserFormFieldComponent\n ]\n})\nexport class MatActiveDirectoryModule {\n static forRoot(config: ActiveDirectoryServiceOptions): ModuleWithProviders<MatActiveDirectoryModule> {\n return {\n ngModule: MatActiveDirectoryModule,\n providers: [\n {\n provide: ActiveDirectoryServiceOptionsToken,\n useValue: config\n }\n ]\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule: MatActiveDirectoryModule) {\n if (parentModule) {\n throw new Error(\n 'MatActiveDirectoryModule is already loaded. Import it in the AppModule only');\n }\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './mat-active-directory.api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-material.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/default-user-chooser-filter-options.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/default-user-chooser-data.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-filter-options.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-pre-processing-group.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/mat-active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/cleavelandprice-ngx-lib-active-directory-material.ts"],"sourcesContent":["import { UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\n\r\nexport const DefaultUserChooserFilterOptions: UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n};","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { DefaultUserChooserFilterOptions } from \"./default-user-chooser-filter-options\";\r\nimport { UserChooserData } from \"./user-chooser-data\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\n\r\nexport const DefaultUserChooserData: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n allowCloseWithoutSelections: false,\r\n includeDisabledUsers: false,\r\n returnUserObjects: false,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n mode: UserChooserMode.Single,\r\n objectTypes: '*',\r\n filterOptions: DefaultUserChooserFilterOptions\r\n};","export interface UserChooserFilterOptions {\r\n accountName?: boolean;\r\n department?: boolean;\r\n groupMembership?: boolean;\r\n phoneNumber?: boolean;\r\n title?: boolean;\r\n};","export interface UserChooserPreProcessingGroup {\r\n accountNames?: string[];\r\n departments?: string[];\r\n groups?: string[];\r\n titles?: string[];\r\n};","import { Component, ElementRef, inject, OnInit, ViewChild, viewChild } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatListItemAvatar, MatListOption, MatSelectionList } from '@angular/material/list';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\r\n\r\nimport { ActiveDirectoryService } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatFormField } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { DefaultUserChooserData } from '../../model/default-user-chooser-data';\r\nimport { SelectableGroup } from '../../model/selectable-group';\r\nimport { SelectableUser } from '../../model/selectable-user';\r\nimport { UserChooserData } from '../../model/user-chooser-data';\r\nimport { UserChooserMode } from '../../model/user-chooser-mode';\r\n\r\n@Component({\r\n standalone: true,\r\n templateUrl: './user-chooser.component.html',\r\n imports: [\r\n MatButton,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MatDialogContent,\r\n MatFormField,\r\n MatIcon,\r\n MatIconButton,\r\n MatInput,\r\n MatListItemAvatar,\r\n MatListOption,\r\n MatProgressSpinner,\r\n MatSelectionList,\r\n MatSlideToggle,\r\n MatTooltip,\r\n ReactiveFormsModule,\r\n ],\r\n styleUrls: [\r\n './user-chooser.component.scss',\r\n '../../../../../styles/mat-icon.scss'\r\n ]\r\n})\r\nexport class UserChooserComponent implements OnInit {\r\n #services = {\r\n dialogRef: inject(MatDialogRef<UserChooserComponent>),\r\n activeDirectory: inject(ActiveDirectoryService),\r\n sharePoint: inject(SharePointService),\r\n data: inject<UserChooserData>(MAT_DIALOG_DATA)\r\n };\r\n _data = {...DefaultUserChooserData, ...this.#services.data};\r\n \r\n //#region Fields\r\n \r\n //@ViewChild(MatSelectionList) selectionList?: MatSelectionList;\r\n selectionList = viewChild(MatSelectionList);\r\n\r\n @ViewChild('filterInput') set filterInput(elRef: ElementRef<HTMLInputElement>) {\r\n if (elRef) {\r\n elRef.nativeElement.focus();\r\n }\r\n };\r\n //filterInput = viewChild<ElementRef>('filterInput');\r\n\r\n filterForm = new FormGroup({\r\n filter: new FormControl()\r\n });\r\n\r\n dataSource?: MatTableDataSource<SelectableUser | SelectableGroup>;\r\n photos?: PhotoItem[];\r\n groups?: SelectableGroup[]; // May or may not get populated, depending on config data sent in\r\n //#endregion\r\n\r\n //#region Properties\r\n get isMultiMode(): boolean {\r\n return this._data.mode === UserChooserMode.Multiple;\r\n }\r\n\r\n get selectedOptions(): MatListOption[] {\r\n return this.selectionList()?.options.filter(o => o.selected) ?? [];\r\n }\r\n\r\n get selectedUsers(): (SelectableUser | SelectableGroup)[] {\r\n return this.dataSource?.data?.filter(d => d.selected) ?? [];\r\n }\r\n\r\n get filterValue(): string {\r\n return this.filterForm.value.filter;\r\n }\r\n\r\n get adGroupsNeeded(): boolean {\r\n // If any are these are true, then we need to pull AD groups for use later\r\n return (this._data.showGroupMembershipTooltips ?? false) ||\r\n (this._data.exclusions?.groups?.length ?? 0) > 0 ||\r\n (this._data.inclusions?.groups?.length ?? 0) > 0 ||\r\n (this._data.preSelections?.groups?.length ?? 0) > 0 ||\r\n this._data.filterOptions?.groupMembership ||\r\n (this._data.selectableGroupNames?.length ?? 0) > 0 ||\r\n (this._data.groups?.length ?? 0) > 0;\r\n }\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n ngOnInit(): void {\r\n this.#getData();\r\n this.#listenForFilterChanges();\r\n }\r\n //#endregion\r\n\r\n //#region Events\r\n listSelectionChanged(options: MatListOption[]): void {\r\n if (this._data.mode === UserChooserMode.Single &&\r\n this.selectedOptions.length &&\r\n this._data.closeWhenSelectionMade\r\n ) {\r\n this.close();\r\n }\r\n }\r\n\r\n optionSelectionChanged(option: MatListOption): void {\r\n const user = this.dataSource?.data\r\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\r\n\r\n if (user) {\r\n // If we are in single user selection mode, deselect any existing selections first\r\n if (!this.isMultiMode && option.selected) {\r\n this.dataSource?.data\r\n .filter(u => u.sAMAccountName.toLowerCase() !== (option.value as SelectableUser).sAMAccountName.toLowerCase())\r\n .forEach(u => u.selected = false);\r\n }\r\n\r\n user.selected = option.selected;\r\n }\r\n }\r\n\r\n hideUnselectedChanged(selected: boolean): void {\r\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\r\n }\r\n\r\n selectAll(): void {\r\n this.selectionList()?.selectAll();\r\n\r\n if (this.selectionList()?.options) {\r\n this.listSelectionChanged(this.selectionList()!.options.toArray());\r\n }\r\n }\r\n\r\n deselectAll(): void {\r\n this.selectionList()?.deselectAll();\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n isUser(userOrGroup: SelectableUser | SelectableGroup): boolean {\r\n return 'title' in userOrGroup;\r\n }\r\n castUser(userOrGroup: SelectableUser | SelectableGroup): SelectableUser {\r\n return userOrGroup as SelectableUser;\r\n }\r\n\r\n #getData(): void {\r\n const observables$: Observable<any>[] = [\r\n this._data.users?.length ?\r\n // Users were passed in\r\n of(this._data.users) :\r\n // Users need to be retrieved\r\n this.#services.activeDirectory.getUsers(false, this._data.includeDisabledUsers, this._data.parentOu),\r\n\r\n this._data.photos?.length ?\r\n // Photos were passed in\r\n of(this._data.photos) :\r\n // Photos need to be retrieved\r\n this.#services.sharePoint.getPhotos()\r\n ];\r\n\r\n // Do we need AD groups?\r\n if (this.adGroupsNeeded) {\r\n observables$.push(\r\n this._data.groups?.length ?\r\n // Groups were passed in\r\n of(this._data.groups) :\r\n // Groups need to be retrieved\r\n this.#services.activeDirectory.getGroups()\r\n );\r\n }\r\n\r\n forkJoin(observables$)\r\n //.subscribe(([users, photos]) => {\r\n .subscribe(data => {\r\n // Need groups in place before we handle exclusions/inclusions/pre-selections\r\n this.groups = this.adGroupsNeeded ?\r\n data[2] :\r\n null;\r\n\r\n let users = data[0] as SelectableUser[];\r\n users.forEach(u => u.selected = false); // In case existing data was re-used\r\n users = this.#includeUsersByAccountName(users);\r\n users = this.#includeUsersByGroupName(users);\r\n users = this.#includeUsersByDepartment(users);\r\n users = this.#includeUsersByTitle(users);\r\n\r\n users = this.#excludeUsersByAccountName(users);\r\n users = this.#excludeUsersByGroupName(users);\r\n users = this.#excludeUsersByDepartment(users);\r\n users = this.#excludeUsersByTitle(users);\r\n\r\n users = this.#preSelectUsersByAccountName(users);\r\n users = this.#preSelectUsersByGroupName(users);\r\n users = this.#preSelectUsersByDepartment(users);\r\n users = this.#preSelectUsersByTitle(users);\r\n\r\n this.#preSelectGroupsByAccountName();\r\n\r\n const usersAndGroups: (SelectableUser | SelectableGroup)[] = [];\r\n\r\n // Should we allow users to be selected?\r\n if (['users', '*'].includes(this._data.objectTypes!)) {\r\n usersAndGroups.push(...users);\r\n }\r\n\r\n // Should we allow groups to be selected\r\n\r\n if (['groups', '*'].includes(this._data.objectTypes!)) {\r\n if (this._data.selectableGroupNames?.length) {\r\n if (this._data.selectableGroupNames.includes('*')) {\r\n usersAndGroups.push(...this.groups!);\r\n } else {\r\n this._data.selectableGroupNames\r\n .forEach(groupName => {\r\n const group = this.groups!.find(g => g.displayName === groupName);\r\n \r\n if (group) {\r\n usersAndGroups.push({\r\n ...group,\r\n selected: group.selected\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.dataSource = new MatTableDataSource(usersAndGroups);\r\n \r\n this.photos = data[1];\r\n\r\n this.#setFilterPredicate();\r\n });\r\n }\r\n\r\n close(): void {\r\n if (!this.selectedUsers?.length) {\r\n this.#services.dialogRef.close(this._data.allowCloseWithoutSelections ? [] : undefined);\r\n return;\r\n }\r\n const value = this.selectedUsers\r\n .map(u => this._data.returnUserObjects ? u : u.sAMAccountName);\r\n\r\n this.#services.dialogRef.close(this._data.mode === UserChooserMode.Multiple ?\r\n value :\r\n value[0]\r\n );\r\n }\r\n\r\n getPhoto(user: SelectableUser | SelectableGroup): string | undefined {\r\n if (!this.isUser(user)) { return; }\r\n\r\n return this.photos?.find(p =>\r\n (p.employeeNumber && p.employeeNumber.toString() === (user as SelectableUser).employeeNumber) ||\r\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\r\n p.displayName?.toLowerCase() === (user.displayName ?? user.name).toLowerCase() ||\r\n p.title?.toLowerCase() === (user.displayName ?? user.name).toLowerCase()\r\n )?.encodedAbsUrl;\r\n }\r\n\r\n //#region Exclusions - won't be included in the dataSource at all\r\n #excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\r\n this._data.exclusions?.accountNames\r\n ?.forEach(accountName => {\r\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\r\n if (index === -1) { return; }\r\n\r\n users.splice(index, 1);\r\n });\r\n\r\n return users;\r\n }\r\n\r\n #excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\r\n this._data.exclusions?.groups\r\n ?.forEach(groupName => {\r\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\r\n if (!group) { return; }\r\n \r\n group.member.forEach(groupMemberDn => {\r\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\r\n if (index === -1) { return; }\r\n\r\n users.splice(index, 1);\r\n });\r\n });\r\n\r\n return users;\r\n }\r\n\r\n #excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\r\n this._data.exclusions?.departments\r\n ?.forEach(department => {\r\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\r\n\r\n excludedUsers.forEach(user => {\r\n const index = users.indexOf(user);\r\n users.splice(index, 1);\r\n });\r\n });\r\n\r\n return users;\r\n }\r\n\r\n #excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\r\n this._data.exclusions?.titles\r\n ?.forEach(title => {\r\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\r\n \r\n excludedUsers.forEach(user => {\r\n const index = users.indexOf(user);\r\n users.splice(index, 1);\r\n });\r\n });\r\n\r\n return users;\r\n }\r\n //#endregion\r\n\r\n //#region Inclusions - only these will be included in the dataSource\r\n #includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\r\n return users.filter(user =>\r\n !this._data.inclusions?.accountNames?.length || // No account inclusions specified\r\n\r\n this._data.inclusions.accountNames.find(accountName =>\r\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\r\n ));\r\n }\r\n\r\n #includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\r\n return users.filter(user =>\r\n !this._data.inclusions?.departments?.length || // No department inclusions specified\r\n\r\n this._data.inclusions.departments.find(department =>\r\n department.toLowerCase() === user.department?.toLowerCase()\r\n ));\r\n }\r\n\r\n #includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\r\n return users.filter(user =>\r\n !this._data.inclusions?.titles?.length || // No title inclusions specified\r\n\r\n this._data.inclusions.titles.find(title =>\r\n title.toLowerCase() === user.title?.toLowerCase()\r\n ));\r\n }\r\n\r\n #includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\r\n if (!this._data.inclusions?.groups?.length) {\r\n return users; // No group inclusions specified\r\n }\r\n\r\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\r\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\r\n this._data.inclusions.groups\r\n .forEach(groupName => {\r\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\r\n if (!group) { return; }\r\n\r\n users\r\n .filter(user =>\r\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\r\n )\r\n .forEach(user => user.selected = true);\r\n });\r\n \r\n // At this point, all of the appropriate users should have 'selected' set to true\r\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\r\n // Reset 'selected' to false, and return\r\n selectedUsers.forEach(user => user.selected = false);\r\n return selectedUsers;\r\n }\r\n //#endregion\r\n\r\n //#region Pre-Selections\r\n #preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\r\n this._data.preSelections?.accountNames\r\n ?.forEach(accountName => {\r\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\r\n if (!user) { return; }\r\n\r\n user.selected = true;\r\n });\r\n\r\n return users;\r\n }\r\n\r\n #preSelectGroupsByAccountName(): void {\r\n this._data.preSelections?.accountNames\r\n ?.forEach(accountName => {\r\n const group = this.groups?.find(g => g.sAMAccountName.toLowerCase() === accountName.toLowerCase());\r\n if (!group) { return; }\r\n\r\n group.selected = true;\r\n });;\r\n }\r\n\r\n #preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\r\n this._data.preSelections?.departments\r\n ?.forEach(department =>\r\n users\r\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\r\n .forEach(user => user.selected = true)\r\n );\r\n\r\n return users;\r\n }\r\n\r\n #preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\r\n this._data.preSelections?.titles\r\n ?.forEach(title =>\r\n users\r\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\r\n .forEach(user => user.selected = true)\r\n );\r\n\r\n return users;\r\n }\r\n\r\n #preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\r\n this._data.preSelections?.groups\r\n ?.forEach(groupName => {\r\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\r\n if (!group) { return; }\r\n\r\n group.member.forEach(groupMemberDn => {\r\n const user = users.find(u => u.distinguishedName === groupMemberDn);\r\n if (!user) { return; }\r\n\r\n user.selected = true;\r\n });\r\n });\r\n\r\n return users;\r\n }\r\n //#endregion\r\n \r\n #setFilterPredicate(): void {\r\n if (!this.dataSource) {\r\n return;\r\n }\r\n\r\n this.dataSource.filterPredicate = (user: (SelectableUser | SelectableGroup), filter: string) => {\r\n if (filter === '{selected:true}') {\r\n return user.selected;\r\n } else {\r\n const regex = new RegExp(filter, 'i'); // Case-insensitive\r\n let match = false; // The end result - whether or not a employee matches the filter\r\n\r\n const filterProperties = [ 'displayName' ];\r\n if (this._data.filterOptions?.accountName) {\r\n filterProperties.push('sAMAccountName')\r\n }\r\n if (this._data.filterOptions?.title) {\r\n filterProperties.push('title');\r\n }\r\n if (this._data.filterOptions?.department) {\r\n filterProperties.push('department');\r\n }\r\n if (this._data.filterOptions?.phoneNumber) {\r\n filterProperties.push('telephoneNumber');\r\n }\r\n \r\n // Match on the properties configured above\r\n filterProperties\r\n .forEach(field => {\r\n // @ts-ignore\r\n if (user[field] && user[field].match(regex)) {\r\n match = true;\r\n }\r\n });\r\n \r\n // Match on group membership (group name)\r\n if (this._data.filterOptions?.groupMembership) {\r\n user.memberOf.forEach(groupDn => {\r\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\r\n \r\n if (group) {\r\n match = true;\r\n }\r\n });\r\n }\r\n\r\n return match;\r\n }\r\n };\r\n }\r\n\r\n #listenForFilterChanges(): void {\r\n this.filterForm.get('filter')?.valueChanges\r\n .pipe(\r\n debounceTime(250)\r\n )\r\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\r\n }\r\n\r\n tooltip(user: SelectableUser | SelectableGroup): string {\r\n return this._data.showGroupMembershipTooltips ?\r\n user.memberOf\r\n .map(groupDn =>\r\n this.groups\r\n ?.find(group =>\r\n group.distinguishedName === groupDn\r\n )?.name\r\n )\r\n .sort((a, b) => a! > b! ? 1 : -1)\r\n .join('\\n') :\r\n '';\r\n }\r\n //#endregion\r\n}","<div id=\"dialog-title\">\r\n <h2 mat-dialog-title>{{ _data.title }}</h2>\r\n\r\n <div id=\"num-selected\">\r\n {{ selectedOptions.length }} selected\r\n </div>\r\n</div>\r\n\r\n<mat-dialog-content>\r\n @if (dataSource && photos) {\r\n <form [formGroup]=\"filterForm\">\r\n @if (dataSource) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\r\n @if (filterForm.value.filter) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </form>\r\n <mat-selection-list [multiple]=\"isMultiMode\"\r\n (selectionChange)=\"listSelectionChanged($event.options)\">\r\n @for (user of dataSource.filteredData; track user) {\r\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\r\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\r\n @if (getPhoto(user)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\r\n } @else {\r\n <mat-icon matListItemAvatar class=\"no-photo\"\r\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\r\n }\r\n <div class=\"user\">\r\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\r\n {{ user.displayName ?? user.name }}\r\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\r\n <div>{{ castUser(user).telephoneNumber }}</div>\r\n }\r\n </div>\r\n @if (isUser(user)) {\r\n <div>{{ castUser(user).department }}</div>\r\n <div class=\"title\">{{ castUser(user).title }}</div>\r\n }\r\n </div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n } @else {\r\n <div>\r\n <mat-spinner [diameter]=\"50\"/>\r\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n @if (dataSource && photos) {\r\n @if (selectedOptions.length) {\r\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\r\n Hide Unselected\r\n </mat-slide-toggle>\r\n }\r\n @if (isMultiMode) {\r\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\r\n >\r\n <mat-icon fontIcon=\"select_all\"/>\r\n <span class=\"hide-mobile\">Select All</span>\r\n </button>\r\n }\r\n @if (isMultiMode && selectedOptions.length) {\r\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\r\n >\r\n <mat-icon fontIcon=\"clear_all\"/>\r\n <span class=\"hide-mobile\">Clear All</span>\r\n </button>\r\n }\r\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\r\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\r\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\r\n <mat-icon fontIcon=\"check\"/>\r\n <span class=\"hide-mobile\">Ok</span>\r\n </button>\r\n }\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\r\n <mat-icon fontIcon=\"close\"/>\r\n <span class=\"hide-mobile\">Cancel</span>\r\n </button>\r\n</mat-dialog-actions>","import { Component, inject, input, OnInit, output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { forkJoin, of } from 'rxjs';\r\n\r\nimport { ActiveDirectoryService, User, UserOrGroup } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { DefaultUserChooserData } from '../../model/default-user-chooser-data';\r\nimport { UserChooserData } from '../../model/user-chooser-data';\r\n\r\nimport { NgClass } from '@angular/common';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatFormField, MatSuffix } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatProgressBar } from '@angular/material/progress-bar';\r\nimport { UserChooserMode } from '../../mat-active-directory.api';\r\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\r\n\r\n@Component({\r\n selector: 'cp-user-field',\r\n standalone: true,\r\n imports: [\r\n MatButton,\r\n MatFormField,\r\n MatIcon,\r\n MatIconButton,\r\n MatInput,\r\n MatProgressBar,\r\n MatSuffix,\r\n NgClass\r\n ],\r\n templateUrl: './user-form-field.component.html',\r\n styleUrl: './user-form-field.component.scss'\r\n})\r\nexport class UserFormFieldComponent implements OnInit {\r\n //#region Fields\r\n #services = {\r\n dialog: inject(MatDialog),\r\n activeDirectory: inject(ActiveDirectoryService),\r\n sharePoint: inject(SharePointService)\r\n };\r\n usersSelected = output<string | string[] | UserOrGroup | UserOrGroup[]>(); // string for Single mode, string[] for multi\r\n userUnSelected = output<string>();\r\n placeholder = input('Select User(s)');\r\n clickable = input(true);\r\n userChooserData = input.required<UserChooserData>();\r\n _userChooserData!: UserChooserData;\r\n\r\n accountNames?: string[];\r\n\r\n users?: User[];\r\n groups?: UserOrGroup[];\r\n photos?: PhotoItem[];\r\n //#endregion\r\n\r\n //#region Properties\r\n /*get isEdge(): boolean {\r\n return window.navigator.userAgent.indexOf('Edge') > -1;\r\n }*/\r\n get class(): string {\r\n return this._userChooserData?.mode === UserChooserMode.Single ? '' :\r\n (this.accountNames?.length ?? 0) > 4 ? 'grid five' :\r\n (this.accountNames?.length ?? 0) > 3 ? 'grid four' :\r\n (this.accountNames?.length ?? 0) > 2 ? 'grid three' :\r\n (this.accountNames?.length ?? 0) > 1 ? 'grid two' :\r\n '';\r\n }\r\n //#endregion\r\n \r\n //#region Lifecycle\r\n ngOnInit(): void {\r\n this._userChooserData = {\r\n ...DefaultUserChooserData,\r\n ...this.userChooserData()\r\n }\r\n\r\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\r\n this.accountNames = this._userChooserData.preSelections?.accountNames;\r\n\r\n this.#getData();\r\n }\r\n //#endregion\r\n\r\n //#region Events\r\n selectUser(): void {\r\n if (!this.clickable()) { return; }\r\n\r\n const data: UserChooserData = {\r\n ...this._userChooserData,\r\n\r\n users: this.users,\r\n photos: this.photos,\r\n };\r\n\r\n this.#services.dialog.open(UserChooserComponent, {\r\n data: data\r\n })\r\n .afterClosed()\r\n .subscribe((selected: string | string[] | UserOrGroup | UserOrGroup[]) => {\r\n if (!selected) { return; }\r\n \r\n this.accountNames = Array.isArray(selected) ?\r\n selected.map(s => typeof(s) === 'string' ? s : s.sAMAccountName) :\r\n [ selected ].map(s => typeof(s) === 'string' ? s : s.sAMAccountName);\r\n\r\n // Overwrite what may have been passed in, for subsequent launches of UserChooserComponent - otherwise it just keeps getting fed stale data\r\n if (this._userChooserData.preSelections) {\r\n this._userChooserData.preSelections.accountNames = this.accountNames;\r\n }\r\n\r\n this.usersSelected.emit(selected);\r\n });\r\n }\r\n\r\n unSelectUser(accountName: string): void {\r\n const index = this.accountNames?.findIndex(a => a === accountName);\r\n this.accountNames?.splice(index ?? -1, 1);\r\n\r\n if (this._userChooserData.preSelections) {\r\n this._userChooserData.preSelections.accountNames = this.accountNames;\r\n }\r\n\r\n this.userUnSelected.emit(accountName);\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n #getData(): void {\r\n forkJoin([\r\n this._userChooserData!.users ?\r\n // Users were passed in\r\n of(this._userChooserData!.users) :\r\n // Users need to be retrieved\r\n this.#services.activeDirectory.getUsers(false, this._userChooserData!.includeDisabledUsers, this._userChooserData!.parentOu),\r\n\r\n this._userChooserData!.groups ?\r\n // Groups were passed in\r\n of(this._userChooserData!.groups) :\r\n // Groups need to be retrieved\r\n this.#services.activeDirectory.getGroups(this._userChooserData!.parentOu),\r\n\r\n this._userChooserData!.photos ?\r\n // Photos were passed in\r\n of(this._userChooserData!.photos) :\r\n // Photos need to be retrieved\r\n this.#services.sharePoint.getPhotos()\r\n ])\r\n .subscribe(([users, groups, photos]) => {\r\n this.users = users;\r\n this.groups = groups;\r\n this.photos = photos;\r\n });\r\n }\r\n\r\n getUser(user: string | User | undefined): User | undefined {\r\n user = typeof(user) === 'string' ?\r\n this.users?.find(u => u.sAMAccountName.toLowerCase() === user?.toString().toLowerCase()) :\r\n user;\r\n\r\n return !user ? undefined :\r\n 'groupType' in user ? undefined : user;\r\n }\r\n\r\n getGroup(group: string | UserOrGroup | undefined): UserOrGroup | undefined {\r\n group = typeof(group) === 'string' ?\r\n this.groups?.find(g => g.sAMAccountName.toLowerCase() === group?.toString().toLowerCase()) :\r\n group;\r\n\r\n return !group ? undefined :\r\n 'groupType' in group ? group : undefined;\r\n }\r\n\r\n getPhoto(accountName: string): string | undefined {\r\n const user = this.getUser(accountName);\r\n if (!user) { return undefined; }\r\n\r\n return this.photos?.find(p =>\r\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\r\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\r\n p.displayName?.toLowerCase() === (user.displayName ?? user.name).toLowerCase() ||\r\n p.title?.toLowerCase() === (user.displayName ?? user.name).toLowerCase()\r\n )?.encodedAbsUrl;\r\n }\r\n //#endregion\r\n}","\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}","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { ActiveDirectoryServiceOptions, ActiveDirectoryServiceOptionsToken } from '@cleavelandprice/ngx-lib/active-directory';\r\n\r\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\r\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatListModule,\r\n MatProgressBarModule,\r\n MatProgressSpinnerModule,\r\n MatSlideToggleModule,\r\n MatTableModule,\r\n MatTooltipModule,\r\n\r\n UserChooserComponent,\r\n UserFormFieldComponent\r\n ],\r\n exports: [\r\n UserChooserComponent,\r\n UserFormFieldComponent\r\n ]\r\n})\r\nexport class MatActiveDirectoryModule {\r\n static forRoot(config: ActiveDirectoryServiceOptions): ModuleWithProviders<MatActiveDirectoryModule> {\r\n return {\r\n ngModule: MatActiveDirectoryModule,\r\n providers: [\r\n {\r\n provide: ActiveDirectoryServiceOptionsToken,\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: MatActiveDirectoryModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'MatActiveDirectoryModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './mat-active-directory.api';\n"],"names":[],"mappings":"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"}