@sunbird-cb/access-settings 0.0.1-cbrelease-4.8.26

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 (64) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/_common/access-control/access-control.component.mjs +561 -0
  3. package/esm2022/lib/_common/access-control/access-control.module.mjs +125 -0
  4. package/esm2022/lib/_common/dialogs/access-control-guide/access-control-guide.component.mjs +27 -0
  5. package/esm2022/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.mjs +27 -0
  6. package/esm2022/lib/_common/dialogs/entity-selections/entity-selections.component.mjs +371 -0
  7. package/esm2022/lib/_common/dialogs/invite-users/invite-users.component.mjs +116 -0
  8. package/esm2022/lib/_common/pagination/pagination.component.mjs +168 -0
  9. package/esm2022/lib/_constants/app.constants.mjs +6 -0
  10. package/esm2022/lib/_directives/drag-drop.directive.mjs +53 -0
  11. package/esm2022/lib/_models/access-control.model.mjs +31 -0
  12. package/esm2022/lib/_models/pagination.model.mjs +2 -0
  13. package/esm2022/lib/_services/access-control.service.mjs +195 -0
  14. package/esm2022/lib/_services/cadre-mapping.service.mjs +164 -0
  15. package/esm2022/lib/access-settings.component.mjs +13 -0
  16. package/esm2022/lib/access-settings.module.mjs +21 -0
  17. package/esm2022/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.mjs +391 -0
  18. package/esm2022/lib/components/list-table/list-table.component.mjs +148 -0
  19. package/esm2022/lib/components/snackbar/snackbar.component.mjs +19 -0
  20. package/esm2022/public-api.mjs +10 -0
  21. package/esm2022/sunbird-cb-access-settings.mjs +5 -0
  22. package/fesm2022/sunbird-cb-access-settings.mjs +2331 -0
  23. package/fesm2022/sunbird-cb-access-settings.mjs.map +1 -0
  24. package/index.d.ts +6 -0
  25. package/lib/_common/access-control/access-control.component.d.ts +71 -0
  26. package/lib/_common/access-control/access-control.component.d.ts.map +1 -0
  27. package/lib/_common/access-control/access-control.module.d.ts +36 -0
  28. package/lib/_common/access-control/access-control.module.d.ts.map +1 -0
  29. package/lib/_common/dialogs/access-control-guide/access-control-guide.component.d.ts +16 -0
  30. package/lib/_common/dialogs/access-control-guide/access-control-guide.component.d.ts.map +1 -0
  31. package/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.d.ts +15 -0
  32. package/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
  33. package/lib/_common/dialogs/entity-selections/entity-selections.component.d.ts +65 -0
  34. package/lib/_common/dialogs/entity-selections/entity-selections.component.d.ts.map +1 -0
  35. package/lib/_common/dialogs/invite-users/invite-users.component.d.ts +40 -0
  36. package/lib/_common/dialogs/invite-users/invite-users.component.d.ts.map +1 -0
  37. package/lib/_common/pagination/pagination.component.d.ts +31 -0
  38. package/lib/_common/pagination/pagination.component.d.ts.map +1 -0
  39. package/lib/_constants/app.constants.d.ts +6 -0
  40. package/lib/_constants/app.constants.d.ts.map +1 -0
  41. package/lib/_directives/drag-drop.directive.d.ts +12 -0
  42. package/lib/_directives/drag-drop.directive.d.ts.map +1 -0
  43. package/lib/_models/access-control.model.d.ts +106 -0
  44. package/lib/_models/access-control.model.d.ts.map +1 -0
  45. package/lib/_models/pagination.model.d.ts +6 -0
  46. package/lib/_models/pagination.model.d.ts.map +1 -0
  47. package/lib/_services/access-control.service.d.ts +72 -0
  48. package/lib/_services/access-control.service.d.ts.map +1 -0
  49. package/lib/_services/cadre-mapping.service.d.ts +71 -0
  50. package/lib/_services/cadre-mapping.service.d.ts.map +1 -0
  51. package/lib/access-settings.component.d.ts +9 -0
  52. package/lib/access-settings.component.d.ts.map +1 -0
  53. package/lib/access-settings.module.d.ts +12 -0
  54. package/lib/access-settings.module.d.ts.map +1 -0
  55. package/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.d.ts +31 -0
  56. package/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.d.ts.map +1 -0
  57. package/lib/components/list-table/list-table.component.d.ts +40 -0
  58. package/lib/components/list-table/list-table.component.d.ts.map +1 -0
  59. package/lib/components/snackbar/snackbar.component.d.ts +13 -0
  60. package/lib/components/snackbar/snackbar.component.d.ts.map +1 -0
  61. package/package.json +28 -0
  62. package/public-api.d.ts +7 -0
  63. package/public-api.d.ts.map +1 -0
  64. package/sunbird-cb-access-settings.d.ts.map +1 -0
@@ -0,0 +1,195 @@
1
+ import { Injectable, signal } from "@angular/core";
2
+ import { toNumber } from "lodash";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ const ENDPOINTS = {
6
+ SEARCH_USER_WITH_ADMIN: (query) => `/apis/proxies/v8/user/v1/autocomplete/${query}`,
7
+ SEARCH_USER: `/apis/proxies/v8/user/v1/admin/search`,
8
+ SEARCH_ORG: "/apis/proxies/v8/org/v1/admin/search",
9
+ VALIDATE_USER: "/apis/proxies/v8/user/v1/search",
10
+ GROUPS: "/apis/proxies/v8/user/v1/groups",
11
+ CADRE_CONFIG: "/apis/proxies/v8/data/v2/system/settings/get/cadreConfig",
12
+ DESIGNATION_LIST: "/apis/proxies/v8/designation/search",
13
+ SEARCH_V4: "/apis/proxies/v8/sunbirdigot/v4/search",
14
+ CREATE_USERGROUPS_CONTROL: "/apis/proxies/v8/accessSetttings/v1/upsert",
15
+ GET_ACCESS_CONTROL: (id) => `/apis/proxies/v8/accessSetttings/read/${id}`,
16
+ ACTION_CONTENT_V3: `apis/proxies/v8/action/content/v3/`
17
+ };
18
+ export class AccessControlService {
19
+ constructor(http) {
20
+ this.http = http;
21
+ this.accessControlConfig = signal(null);
22
+ this.holdServiceCadrebatch = signal({
23
+ service: [],
24
+ batch: [],
25
+ cadre: []
26
+ });
27
+ }
28
+ fetchUserListWithAdmin(queryString) {
29
+ return this.http.get(ENDPOINTS.SEARCH_USER_WITH_ADMIN(queryString));
30
+ }
31
+ fetchUserList(query, pagination, userIds) {
32
+ let request = {
33
+ filters: {
34
+ "profileDetails.profileStatus": ["VERIFIED", "NOT-VERIFIED"],
35
+ status: 1
36
+ },
37
+ limit: pagination.limit || 5,
38
+ offset: pagination.offset || 0,
39
+ query: query,
40
+ sort_by: {
41
+ firstName: "asc"
42
+ }
43
+ };
44
+ if (userIds?.length) {
45
+ request.filters = { ...request.filters, userId: userIds };
46
+ }
47
+ return this.http.post(ENDPOINTS.SEARCH_USER, { request: request });
48
+ }
49
+ fetchOrgList(query, pagination) {
50
+ const request = {
51
+ request: {
52
+ filters: {},
53
+ sort_by: {
54
+ channel: "asc"
55
+ },
56
+ fields: ["channel", "identifier"],
57
+ // limit: pagination.limit || 5,
58
+ // offset: pagination.offset || 0,
59
+ query: query
60
+ }
61
+ };
62
+ return this.http.post(ENDPOINTS.SEARCH_ORG, request);
63
+ }
64
+ validateUser(request) {
65
+ return this.http.post(ENDPOINTS.VALIDATE_USER, request);
66
+ }
67
+ fetchGroupsList() {
68
+ return this.http.get(ENDPOINTS.GROUPS);
69
+ }
70
+ fetchCadreConfig() {
71
+ return this.http.get(ENDPOINTS.CADRE_CONFIG);
72
+ }
73
+ fetchDesignation(query) {
74
+ const payload = {
75
+ filterCriteriaMap: {
76
+ status: "Active"
77
+ },
78
+ requestedFields: ["designation", "id"],
79
+ searchString: query
80
+ };
81
+ return this.http.post(ENDPOINTS.DESIGNATION_LIST, payload);
82
+ }
83
+ fetchDesignationsWithOrg(categories, query) {
84
+ const payload = {
85
+ request: {
86
+ filters: {
87
+ status: "Live",
88
+ category: "designation",
89
+ categories: categories,
90
+ objectType: "Term"
91
+ },
92
+ fields: ["identifier", "name"],
93
+ query: query,
94
+ sort_by: {
95
+ lastUpdatedOn: "desc",
96
+ objectType: "Term"
97
+ },
98
+ facets: []
99
+ }
100
+ };
101
+ return this.http.post(ENDPOINTS.SEARCH_V4, payload);
102
+ }
103
+ applyUserGroupAccessControl(request) {
104
+ return this.http.put(ENDPOINTS.CREATE_USERGROUPS_CONTROL, request);
105
+ }
106
+ fetchUserGroupAccessControl(id) {
107
+ return this.http.get(ENDPOINTS.GET_ACCESS_CONTROL(id));
108
+ }
109
+ updateContentV3(meta, id) {
110
+ return this.http.patch(`${ENDPOINTS.ACTION_CONTENT_V3}update/${id}`, meta);
111
+ }
112
+ downloadFile(data, filename = "data") {
113
+ const csvData = this.convertToCSV(data, ["email", "status", "mobile", "message"]);
114
+ const blob = new Blob([`\ufeff${csvData}`], { type: "text/csv;charset=utf-8;" });
115
+ const dwldLink = document.createElement("a");
116
+ const url = URL.createObjectURL(blob);
117
+ const isSafariBrowser = navigator.userAgent.indexOf("Safari") !== -1 && navigator.userAgent.indexOf("Chrome") === -1;
118
+ if (isSafariBrowser) {
119
+ // if Safari open in new window to save file with random filename.
120
+ dwldLink.setAttribute("target", "_blank");
121
+ }
122
+ dwldLink.setAttribute("href", url);
123
+ dwldLink.setAttribute("download", `${filename}.csv`);
124
+ dwldLink.style.visibility = "hidden";
125
+ document.body.appendChild(dwldLink);
126
+ dwldLink.click();
127
+ document.body.removeChild(dwldLink);
128
+ }
129
+ convertToCSV(objArray, headerList) {
130
+ const array = typeof objArray !== "object" ? JSON.parse(objArray) : objArray;
131
+ let str = "";
132
+ let row = "S.No,";
133
+ for (const index in headerList) {
134
+ if (headerList[index]) {
135
+ row += `${headerList[index]} ,`;
136
+ }
137
+ }
138
+ row = row.slice(0, -1);
139
+ str += `${row}\r\n`;
140
+ // for (let i = 0; i < array.length; i += 1) {
141
+ for (const iIndex in array) {
142
+ if (array[iIndex]) {
143
+ let line = `${toNumber(iIndex) + 1} `;
144
+ for (const index in headerList) {
145
+ if (headerList[index]) {
146
+ const head = headerList[index];
147
+ line += `, ${array[iIndex][head]}`;
148
+ }
149
+ }
150
+ str += `${line}\r\n`;
151
+ }
152
+ }
153
+ return str;
154
+ }
155
+ createRequestContent(apiResponse, accessSettingsEnabled) {
156
+ return {
157
+ request: {
158
+ content: {
159
+ appIcon: apiResponse.appIcon || "",
160
+ posterImage: apiResponse.posterImage || "",
161
+ code: apiResponse.code || "",
162
+ contentType: apiResponse.contentType || "",
163
+ createdBy: apiResponse.createdBy || "",
164
+ creatorContacts: apiResponse.creatorContacts || [],
165
+ creatorIDs: apiResponse.creatorIDs || [],
166
+ createdFor: apiResponse.createdFor || [],
167
+ creator: apiResponse.creator || "",
168
+ framework: apiResponse.framework || "",
169
+ mimeType: apiResponse.mimeType || "",
170
+ name: apiResponse.name || "",
171
+ organisation: apiResponse.organisation || [],
172
+ isExternal: apiResponse.isExternal || false,
173
+ primaryCategory: apiResponse.primaryCategory || "",
174
+ courseCategory: apiResponse.courseCategory || "",
175
+ license: apiResponse.license || "",
176
+ ownershipType: apiResponse.ownershipType || [],
177
+ cumulativeTracking: apiResponse.cumulativeTracking || false,
178
+ language: apiResponse.language || [],
179
+ accessSetting: apiResponse.accessSetting || "",
180
+ versionKey: apiResponse.versionKey || "",
181
+ accessSettingsEnabled: accessSettingsEnabled || false
182
+ }
183
+ }
184
+ };
185
+ }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
187
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, providedIn: "root" }); }
188
+ }
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, decorators: [{
190
+ type: Injectable,
191
+ args: [{
192
+ providedIn: "root"
193
+ }]
194
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9hY2Nlc3Mtc2V0dGluZ3Mvc3JjL2xpYi9fc2VydmljZXMvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7O0FBRWxDLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLHNCQUFzQixFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyx5Q0FBeUMsS0FBSyxFQUFFO0lBQzNGLFdBQVcsRUFBRSx1Q0FBdUM7SUFDcEQsVUFBVSxFQUFFLHNDQUFzQztJQUNsRCxhQUFhLEVBQUUsaUNBQWlDO0lBQ2hELE1BQU0sRUFBRSxpQ0FBaUM7SUFDekMsWUFBWSxFQUFFLDBEQUEwRDtJQUN4RSxnQkFBZ0IsRUFBRSxxQ0FBcUM7SUFDdkQsU0FBUyxFQUFFLHdDQUF3QztJQUNuRCx5QkFBeUIsRUFBRSw0Q0FBNEM7SUFDdkUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEVBQUU7SUFDakYsaUJBQWlCLEVBQUUsb0NBQW9DO0NBQ3hELENBQUM7QUFLRixNQUFNLE9BQU8sb0JBQW9CO0lBUS9CLFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBNkMsSUFBSSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztZQUNsQyxPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7SUFDTCxDQUFD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QUksRUFBRTtvQkFDbEMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDdEMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRTtvQkFDcEMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRTtvQkFDNUIsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZLElBQUksRUFBRTtvQkFDNUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksS0FBSztvQkFDM0MsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlLElBQUksRUFBRTtvQkFDbEQsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLElBQUksRUFBRTtvQkFDaEQsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRTtvQkFDbEMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUFhLElBQUksRUFBRTtvQkFDOUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEtBQUs7b0JBQzNELFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxJQUFJLEVBQUU7b0JBQ3BDLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUU7b0JBQzlDLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxJQUFJLEVBQUU7b0JBQ3hDLHFCQUFxQixFQUFFLHFCQUFxQixJQUFJLEtBQUs7aUJBQ3REO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzsrR0E3TFUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJVXNlckdyb3VwUmVxdWVzdCwgTnNBY2Nlc3NDb250cm9sQ29uZmlnIH0gZnJvbSBcIi4uL19tb2RlbHMvYWNjZXNzLWNvbnRyb2wubW9kZWxcIjtcbmltcG9ydCB7IHRvTnVtYmVyIH0gZnJvbSBcImxvZGFzaFwiO1xuXG5jb25zdCBFTkRQT0lOVFMgPSB7XG4gIFNFQVJDSF9VU0VSX1dJVEhfQURNSU46IChxdWVyeTogc3RyaW5nKSA9PiBgL2FwaXMvcHJveGllcy92OC91c2VyL3YxL2F1dG9jb21wbGV0ZS8ke3F1ZXJ5fWAsXG4gIFNFQVJDSF9VU0VSOiBgL2FwaXMvcHJveGllcy92OC91c2VyL3YxL2FkbWluL3NlYXJjaGAsXG4gIFNFQVJDSF9PUkc6IFwiL2FwaXMvcHJveGllcy92OC9vcmcvdjEvYWRtaW4vc2VhcmNoXCIsXG4gIFZBTElEQVRFX1VTRVI6IFwiL2FwaXMvcHJveGllcy92OC91c2VyL3YxL3NlYXJjaFwiLFxuICBHUk9VUFM6IFwiL2FwaXMvcHJveGllcy92OC91c2VyL3YxL2dyb3Vwc1wiLFxuICBDQURSRV9DT05GSUc6IFwiL2FwaXMvcHJveGllcy92OC9kYXRhL3YyL3N5c3RlbS9zZXR0aW5ncy9nZXQvY2FkcmVDb25maWdcIixcbiAgREVTSUdOQVRJT05fTElTVDogXCIvYXBpcy9wcm94aWVzL3Y4L2Rlc2lnbmF0aW9uL3NlYXJjaFwiLFxuICBTRUFSQ0hfVjQ6IFwiL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC92NC9zZWFyY2hcIixcbiAgQ1JFQVRFX1VTRVJHUk9VUFNfQ09OVFJPTDogXCIvYXBpcy9wcm94aWVzL3Y4L2FjY2Vzc1NldHR0aW5ncy92MS91cHNlcnRcIixcbiAgR0VUX0FDQ0VTU19DT05UUk9MOiAoaWQ6IHN0cmluZykgPT4gYC9hcGlzL3Byb3hpZXMvdjgvYWNjZXNzU2V0dHRpbmdzL3JlYWQvJHtpZH1gLFxuICBBQ1RJT05fQ09OVEVOVF9WMzogYGFwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9gXG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIHtcbiAgYWNjZXNzQ29udHJvbENvbmZpZzogV3JpdGFibGVTaWduYWw8TnNBY2Nlc3NDb250cm9sQ29uZmlnLklBY2Nlc3NDb250cm9sQ29uZmlnPjtcbiAgaG9sZFNlcnZpY2VDYWRyZWJhdGNoOiBXcml0YWJsZVNpZ25hbDx7XG4gICAgc2VydmljZTogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdO1xuICAgIGJhdGNoOiBudW1iZXJbXTtcbiAgICBjYWRyZTogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdO1xuICB9PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICB0aGlzLmFjY2Vzc0NvbnRyb2xDb25maWcgPSBzaWduYWw8TnNBY2Nlc3NDb250cm9sQ29uZmlnLklBY2Nlc3NDb250cm9sQ29uZmlnPihudWxsKTtcbiAgICB0aGlzLmhvbGRTZXJ2aWNlQ2FkcmViYXRjaCA9IHNpZ25hbCh7XG4gICAgICBzZXJ2aWNlOiBbXSxcbiAgICAgIGJhdGNoOiBbXSxcbiAgICAgIGNhZHJlOiBbXVxuICAgIH0pO1xuICB9XG5cbiAgZmV0Y2hVc2VyTGlzdFdpdGhBZG1pbihxdWVyeVN0cmluZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KEVORFBPSU5UUy5TRUFSQ0hfVVNFUl9XSVRIX0FETUlOKHF1ZXJ5U3RyaW5nKSk7XG4gIH1cblxuICBmZXRjaFVzZXJMaXN0KHF1ZXJ5OiBzdHJpbmcsIHBhZ2luYXRpb246IHsgbGltaXQ6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXIgfSwgdXNlcklkcz86IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcmVxdWVzdDogYW55ID0ge1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICBcInByb2ZpbGVEZXRhaWxzLnByb2ZpbGVTdGF0dXNcIjogW1wiVkVSSUZJRURcIiwgXCJOT1QtVkVSSUZJRURcIl0sXG4gICAgICAgIHN0YXR1czogMVxuICAgICAgfSxcbiAgICAgIGxpbWl0OiBwYWdpbmF0aW9uLmxpbWl0IHx8IDUsXG4gICAgICBvZmZzZXQ6IHBhZ2luYXRpb24ub2Zmc2V0IHx8IDAsXG4gICAgICBxdWVyeTogcXVlcnksXG4gICAgICBzb3J0X2J5OiB7XG4gICAgICAgIGZpcnN0TmFtZTogXCJhc2NcIlxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHVzZXJJZHM/Lmxlbmd0aCkge1xuICAgICAgcmVxdWVzdC5maWx0ZXJzID0geyAuLi5yZXF1ZXN0LmZpbHRlcnMsIHVzZXJJZDogdXNlcklkcyB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihFTkRQT0lOVFMuU0VBUkNIX1VTRVIsIHsgcmVxdWVzdDogcmVxdWVzdCB9KTtcbiAgfVxuXG4gIGZldGNoT3JnTGlzdChxdWVyeTogc3RyaW5nLCBwYWdpbmF0aW9uPzogeyBsaW1pdDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlciB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBmaWx0ZXJzOiB7fSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGNoYW5uZWw6IFwiYXNjXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRzOiBbXCJjaGFubmVsXCIsIFwiaWRlbnRpZmllclwiXSxcbiAgICAgICAgLy8gbGltaXQ6IHBhZ2luYXRpb24ubGltaXQgfHwgNSxcbiAgICAgICAgLy8gb2Zmc2V0OiBwYWdpbmF0aW9uLm9mZnNldCB8fCAwLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5TRUFSQ0hfT1JHLCByZXF1ZXN0KTtcbiAgfVxuXG4gIHZhbGlkYXRlVXNlcihyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5WQUxJREFURV9VU0VSLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGZldGNoR3JvdXBzTGlzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oRU5EUE9JTlRTLkdST1VQUyk7XG4gIH1cblxuICBmZXRjaENhZHJlQ29uZmlnKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihFTkRQT0lOVFMuQ0FEUkVfQ09ORklHKTtcbiAgfVxuXG4gIGZldGNoRGVzaWduYXRpb24ocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgIHN0YXR1czogXCJBY3RpdmVcIlxuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW1wiZGVzaWduYXRpb25cIiwgXCJpZFwiXSxcbiAgICAgIHNlYXJjaFN0cmluZzogcXVlcnlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5ERVNJR05BVElPTl9MSVNULCBwYXlsb2FkKTtcbiAgfVxuXG4gIGZldGNoRGVzaWduYXRpb25zV2l0aE9yZyhjYXRlZ29yaWVzOiBzdHJpbmdbXSwgcXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIHN0YXR1czogXCJMaXZlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZGVzaWduYXRpb25cIixcbiAgICAgICAgICBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogW1wiaWRlbnRpZmllclwiLCBcIm5hbWVcIl0sXG4gICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGxhc3RVcGRhdGVkT246IFwiZGVzY1wiLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW11cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5TRUFSQ0hfVjQsIHBheWxvYWQpO1xuICB9XG5cbiAgYXBwbHlVc2VyR3JvdXBBY2Nlc3NDb250cm9sKHJlcXVlc3Q6IElVc2VyR3JvdXBSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KEVORFBPSU5UUy5DUkVBVEVfVVNFUkdST1VQU19DT05UUk9MLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGZldGNoVXNlckdyb3VwQWNjZXNzQ29udHJvbChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KEVORFBPSU5UUy5HRVRfQUNDRVNTX0NPTlRST0woaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnRWMyhtZXRhOiBhbnksIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8YW55PihgJHtFTkRQT0lOVFMuQUNUSU9OX0NPTlRFTlRfVjN9dXBkYXRlLyR7aWR9YCwgbWV0YSk7XG4gIH1cblxuICBkb3dubG9hZEZpbGUoZGF0YTogYW55LCBmaWxlbmFtZSA9IFwiZGF0YVwiKSB7XG4gICAgY29uc3QgY3N2RGF0YSA9IHRoaXMuY29udmVydFRvQ1NWKGRhdGEsIFtcImVtYWlsXCIsIFwic3RhdHVzXCIsIFwibW9iaWxlXCIsIFwibWVzc2FnZVwiXSk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtgXFx1ZmVmZiR7Y3N2RGF0YX1gXSwgeyB0eXBlOiBcInRleHQvY3N2O2NoYXJzZXQ9dXRmLTg7XCIgfSk7XG4gICAgY29uc3QgZHdsZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGlzU2FmYXJpQnJvd3NlciA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIlNhZmFyaVwiKSAhPT0gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiQ2hyb21lXCIpID09PSAtMTtcbiAgICBpZiAoaXNTYWZhcmlCcm93c2VyKSB7XG4gICAgICAvLyBpZiBTYWZhcmkgb3BlbiBpbiBuZXcgd2luZG93IHRvIHNhdmUgZmlsZSB3aXRoIHJhbmRvbSBmaWxlbmFtZS5cbiAgICAgIGR3bGRMaW5rLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBcIl9ibGFua1wiKTtcbiAgICB9XG4gICAgZHdsZExpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmwpO1xuICAgIGR3bGRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke2ZpbGVuYW1lfS5jc3ZgKTtcbiAgICBkd2xkTGluay5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGR3bGRMaW5rKTtcbiAgICBkd2xkTGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZHdsZExpbmspO1xuICB9XG5cbiAgY29udmVydFRvQ1NWKG9iakFycmF5OiBhbnksIGhlYWRlckxpc3Q6IGFueSkge1xuICAgIGNvbnN0IGFycmF5ID0gdHlwZW9mIG9iakFycmF5ICE9PSBcIm9iamVjdFwiID8gSlNPTi5wYXJzZShvYmpBcnJheSkgOiBvYmpBcnJheTtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBsZXQgcm93ID0gXCJTLk5vLFwiO1xuXG4gICAgZm9yIChjb25zdCBpbmRleCBpbiBoZWFkZXJMaXN0KSB7XG4gICAgICBpZiAoaGVhZGVyTGlzdFtpbmRleF0pIHtcbiAgICAgICAgcm93ICs9IGAke2hlYWRlckxpc3RbaW5kZXhdfSAsYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcm93ID0gcm93LnNsaWNlKDAsIC0xKTtcbiAgICBzdHIgKz0gYCR7cm93fVxcclxcbmA7XG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGZvciAoY29uc3QgaUluZGV4IGluIGFycmF5KSB7XG4gICAgICBpZiAoYXJyYXlbaUluZGV4XSkge1xuICAgICAgICBsZXQgbGluZSA9IGAke3RvTnVtYmVyKGlJbmRleCkgKyAxfSBgO1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIGhlYWRlckxpc3QpIHtcbiAgICAgICAgICBpZiAoaGVhZGVyTGlzdFtpbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBoZWFkZXJMaXN0W2luZGV4XTtcblxuICAgICAgICAgICAgbGluZSArPSBgLCAke2FycmF5W2lJbmRleF1baGVhZF19YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGAke2xpbmV9XFxyXFxuYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGNyZWF0ZVJlcXVlc3RDb250ZW50KGFwaVJlc3BvbnNlOiBhbnksIGFjY2Vzc1NldHRpbmdzRW5hYmxlZDogYm9vbGVhbikge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICBhcHBJY29uOiBhcGlSZXNwb25zZS5hcHBJY29uIHx8IFwiXCIsXG4gICAgICAgICAgcG9zdGVySW1hZ2U6IGFwaVJlc3BvbnNlLnBvc3RlckltYWdlIHx8IFwiXCIsXG4gICAgICAgICAgY29kZTogYXBpUmVzcG9uc2UuY29kZSB8fCBcIlwiLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBhcGlSZXNwb25zZS5jb250ZW50VHlwZSB8fCBcIlwiLFxuICAgICAgICAgIGNyZWF0ZWRCeTogYXBpUmVzcG9uc2UuY3JlYXRlZEJ5IHx8IFwiXCIsXG4gICAgICAgICAgY3JlYXRvckNvbnRhY3RzOiBhcGlSZXNwb25zZS5jcmVhdG9yQ29udGFjdHMgfHwgW10sXG4gICAgICAgICAgY3JlYXRvcklEczogYXBpUmVzcG9uc2UuY3JlYXRvcklEcyB8fCBbXSxcbiAgICAgICAgICBjcmVhdGVkRm9yOiBhcGlSZXNwb25zZS5jcmVhdGVkRm9yIHx8IFtdLFxuICAgICAgICAgIGNyZWF0b3I6IGFwaVJlc3BvbnNlLmNyZWF0b3IgfHwgXCJcIixcbiAgICAgICAgICBmcmFtZXdvcms6IGFwaVJlc3BvbnNlLmZyYW1ld29yayB8fCBcIlwiLFxuICAgICAgICAgIG1pbWVUeXBlOiBhcGlSZXNwb25zZS5taW1lVHlwZSB8fCBcIlwiLFxuICAgICAgICAgIG5hbWU6IGFwaVJlc3BvbnNlLm5hbWUgfHwgXCJcIixcbiAgICAgICAgICBvcmdhbmlzYXRpb246IGFwaVJlc3BvbnNlLm9yZ2FuaXNhdGlvbiB8fCBbXSxcbiAgICAgICAgICBpc0V4dGVybmFsOiBhcGlSZXNwb25zZS5pc0V4dGVybmFsIHx8IGZhbHNlLFxuICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogYXBpUmVzcG9uc2UucHJpbWFyeUNhdGVnb3J5IHx8IFwiXCIsXG4gICAgICAgICAgY291cnNlQ2F0ZWdvcnk6IGFwaVJlc3BvbnNlLmNvdXJzZUNhdGVnb3J5IHx8IFwiXCIsXG4gICAgICAgICAgbGljZW5zZTogYXBpUmVzcG9uc2UubGljZW5zZSB8fCBcIlwiLFxuICAgICAgICAgIG93bmVyc2hpcFR5cGU6IGFwaVJlc3BvbnNlLm93bmVyc2hpcFR5cGUgfHwgW10sXG4gICAgICAgICAgY3VtdWxhdGl2ZVRyYWNraW5nOiBhcGlSZXNwb25zZS5jdW11bGF0aXZlVHJhY2tpbmcgfHwgZmFsc2UsXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFwaVJlc3BvbnNlLmxhbmd1YWdlIHx8IFtdLFxuICAgICAgICAgIGFjY2Vzc1NldHRpbmc6IGFwaVJlc3BvbnNlLmFjY2Vzc1NldHRpbmcgfHwgXCJcIixcbiAgICAgICAgICB2ZXJzaW9uS2V5OiBhcGlSZXNwb25zZS52ZXJzaW9uS2V5IHx8IFwiXCIsXG4gICAgICAgICAgYWNjZXNzU2V0dGluZ3NFbmFibGVkOiBhY2Nlc3NTZXR0aW5nc0VuYWJsZWQgfHwgZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,164 @@
1
+ import { Injectable } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class CadreMappingService {
4
+ constructor() {
5
+ this.allCadres = new Map();
6
+ this.allServices = new Map();
7
+ this.cadreToServiceMap = new Map();
8
+ this.serviceToCadresMap = new Map();
9
+ this.batchYearToCadresMap = new Map();
10
+ this.batchYearToServicesMap = new Map();
11
+ }
12
+ addToMapSet(map, key, value) {
13
+ if (!map.has(key)) {
14
+ map.set(key, new Set());
15
+ }
16
+ map.get(key)?.add(value);
17
+ }
18
+ initialize(data) {
19
+ // Clear existing data
20
+ this.allCadres.clear();
21
+ this.allServices.clear();
22
+ this.cadreToServiceMap.clear();
23
+ this.serviceToCadresMap.clear();
24
+ this.batchYearToCadresMap.clear();
25
+ this.batchYearToServicesMap.clear();
26
+ // Build lookups
27
+ data?.civilServiceType?.civilServiceTypeList.forEach(cst => {
28
+ if (cst) {
29
+ cst.serviceList.forEach(service => {
30
+ const { id: serviceId, commonBatchStartYear, commonBatchEndYear } = service;
31
+ this.allServices.set(serviceId, service);
32
+ // Add years to service-batch map
33
+ for (let y = commonBatchStartYear; y <= commonBatchEndYear; y++) {
34
+ this.addToMapSet(this.batchYearToServicesMap, y, serviceId);
35
+ }
36
+ service.cadreList?.forEach(cadre => {
37
+ const { id: cadreId, startBatchYear, endBatchYear } = cadre;
38
+ this.allCadres.set(cadreId, cadre);
39
+ // Map cadre <-> service
40
+ this.addToMapSet(this.cadreToServiceMap, cadreId, serviceId);
41
+ this.addToMapSet(this.serviceToCadresMap, serviceId, cadreId);
42
+ // Add years to cadre-batch map
43
+ for (let y = startBatchYear; y <= endBatchYear; y++) {
44
+ this.addToMapSet(this.batchYearToCadresMap, y, cadreId);
45
+ }
46
+ });
47
+ });
48
+ }
49
+ });
50
+ }
51
+ getAllBatchYears() {
52
+ return Array.from(this.batchYearToCadresMap.keys()).sort((a, b) => a - b);
53
+ }
54
+ getAllCadres() {
55
+ return Array.from(this.allCadres.values()).map(c => ({
56
+ id: c.id,
57
+ name: c.name
58
+ }));
59
+ }
60
+ getAllServices() {
61
+ return Array.from(this.allServices.values()).map(s => ({
62
+ id: s.id,
63
+ name: s.name
64
+ }));
65
+ }
66
+ getServicesByCadres(cadreIds) {
67
+ const serviceIdsSet = new Set();
68
+ cadreIds.forEach(cadreId => {
69
+ const services = this.cadreToServiceMap.get(cadreId) || new Set();
70
+ services.forEach(serviceId => serviceIdsSet.add(serviceId));
71
+ });
72
+ return Array.from(serviceIdsSet).map(id => {
73
+ const s = this.allServices.get(id);
74
+ return { id: s.id, name: s.name };
75
+ });
76
+ }
77
+ getCadresByServices(serviceIds) {
78
+ const cadreIdsSet = new Set();
79
+ serviceIds.forEach(serviceId => {
80
+ const cadres = this.serviceToCadresMap.get(serviceId) || new Set();
81
+ cadres.forEach(cadreId => cadreIdsSet.add(cadreId));
82
+ });
83
+ return Array.from(cadreIdsSet).map(id => {
84
+ const c = this.allCadres.get(id);
85
+ return { id: c.id, name: c.name };
86
+ });
87
+ }
88
+ getCadresByBatchYears(years) {
89
+ const cadreIdsSet = new Set();
90
+ years.forEach(year => {
91
+ const cadres = this.batchYearToCadresMap.get(year) || new Set();
92
+ cadres.forEach(cadreId => cadreIdsSet.add(cadreId));
93
+ });
94
+ return Array.from(cadreIdsSet).map(id => {
95
+ const c = this.allCadres.get(id);
96
+ return { id: c.id, name: c.name };
97
+ });
98
+ }
99
+ getServicesByBatchYears(years) {
100
+ const serviceIdsSet = new Set();
101
+ years.forEach(year => {
102
+ const services = this.batchYearToServicesMap.get(year) || new Set();
103
+ services.forEach(serviceId => serviceIdsSet.add(serviceId));
104
+ });
105
+ return Array.from(serviceIdsSet).map(id => {
106
+ const s = this.allServices.get(id);
107
+ return { id: s.id, name: s.name };
108
+ });
109
+ }
110
+ getServicesByCadresAndBatch(cadreIds, year) {
111
+ const services = this.getServicesByCadres(cadreIds);
112
+ return services.filter(service => {
113
+ const fullService = this.allServices.get(service.id);
114
+ return year >= fullService.commonBatchStartYear && year <= fullService.commonBatchEndYear;
115
+ });
116
+ }
117
+ getCadresByServicesAndBatch(serviceIds, year) {
118
+ const cadres = this.getCadresByServices(serviceIds);
119
+ return cadres.filter(cadre => {
120
+ const fullCadre = this.allCadres.get(cadre.id);
121
+ return year >= fullCadre.startBatchYear && year <= fullCadre.endBatchYear;
122
+ });
123
+ }
124
+ getBatchYearsByCadres(cadreIds) {
125
+ const batchYearsSet = new Set();
126
+ cadreIds.forEach(cadreId => {
127
+ const cadre = this.allCadres.get(cadreId);
128
+ if (cadre) {
129
+ for (let y = cadre.startBatchYear; y <= cadre.endBatchYear; y++) {
130
+ batchYearsSet.add(y);
131
+ }
132
+ }
133
+ });
134
+ return Array.from(batchYearsSet).sort((a, b) => a - b);
135
+ }
136
+ getBatchYearsByServices(serviceIds) {
137
+ const batchYearsSet = new Set();
138
+ serviceIds.forEach(serviceId => {
139
+ const service = this.allServices.get(serviceId);
140
+ if (service) {
141
+ for (let y = service.commonBatchStartYear; y <= service.commonBatchEndYear; y++) {
142
+ batchYearsSet.add(y);
143
+ }
144
+ }
145
+ });
146
+ return Array.from(batchYearsSet).sort((a, b) => a - b);
147
+ }
148
+ getBatchYearsByServicesAndCadres(serviceIds, cadreIds) {
149
+ const serviceYears = this.getBatchYearsByServices(serviceIds);
150
+ const cadreYears = this.getBatchYearsByCadres(cadreIds);
151
+ // Find intersection of years
152
+ const commonYears = serviceYears.filter(year => cadreYears.includes(year));
153
+ return commonYears.sort((a, b) => a - b);
154
+ }
155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CadreMappingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
156
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CadreMappingService, providedIn: "root" }); }
157
+ }
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CadreMappingService, decorators: [{
159
+ type: Injectable,
160
+ args: [{
161
+ providedIn: "root"
162
+ }]
163
+ }] });
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkcmUtbWFwcGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2FjY2Vzcy1zZXR0aW5ncy9zcmMvbGliL19zZXJ2aWNlcy9jYWRyZS1tYXBwaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUF5QjNDLE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJVSxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUNuQyxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDckMsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDbkQsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDcEQseUJBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDdEQsMkJBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7S0F3S2pFO0lBdEtTLFdBQVcsQ0FBQyxHQUF1QixFQUFFLEdBQVEsRUFBRSxLQUFVO1FBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBc0I7UUFDL0Isc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFcEMsZ0JBQWdCO1FBQ2hCLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ2hDLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxDQUFDO29CQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBRXpDLGlDQUFpQztvQkFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDN0Q7b0JBRUQsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ2pDLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUM7d0JBQzVELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFFbkMsd0JBQXdCO3dCQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7d0JBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFFOUQsK0JBQStCO3dCQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7eUJBQ3pEO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNSLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtTQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBa0I7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN4QyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNsRSxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN4QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxVQUFvQjtRQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWU7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN0QyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNoRSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFlO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDeEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7WUFDcEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDeEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsUUFBa0IsRUFBRSxJQUFZO1FBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sSUFBSSxJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBQzVGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQixDQUFDLFVBQW9CLEVBQUUsSUFBWTtRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQyxPQUFPLElBQUksSUFBSSxTQUFTLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWtCO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDeEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQy9ELGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQW9CO1FBQzFDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMvRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxVQUFvQixFQUFFLFFBQWtCO1FBQ3ZFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEQsNkJBQTZCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBN0tVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmludGVyZmFjZSBDaXZpbFNlcnZpY2VEYXRhIHtcbiAgY2l2aWxTZXJ2aWNlVHlwZToge1xuICAgIGNpdmlsU2VydmljZVR5cGVMaXN0OiBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgc2VydmljZUxpc3Q6IEFycmF5PHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBjb21tb25CYXRjaFN0YXJ0WWVhcjogbnVtYmVyO1xuICAgICAgICBjb21tb25CYXRjaEVuZFllYXI6IG51bWJlcjtcbiAgICAgICAgY2FkcmVMaXN0PzogQXJyYXk8e1xuICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIHN0YXJ0QmF0Y2hZZWFyOiBudW1iZXI7XG4gICAgICAgICAgZW5kQmF0Y2hZZWFyOiBudW1iZXI7XG4gICAgICAgIH0+O1xuICAgICAgfT47XG4gICAgfT47XG4gIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgQ2FkcmVNYXBwaW5nU2VydmljZSB7XG4gIHByaXZhdGUgYWxsQ2FkcmVzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgcHJpdmF0ZSBhbGxTZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIHByaXZhdGUgY2FkcmVUb1NlcnZpY2VNYXAgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgc2VydmljZVRvQ2FkcmVzTWFwID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICBwcml2YXRlIGJhdGNoWWVhclRvQ2FkcmVzTWFwID0gbmV3IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PigpO1xuICBwcml2YXRlIGJhdGNoWWVhclRvU2VydmljZXNNYXAgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG5cbiAgcHJpdmF0ZSBhZGRUb01hcFNldChtYXA6IE1hcDxhbnksIFNldDxhbnk+Piwga2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIW1hcC5oYXMoa2V5KSkge1xuICAgICAgbWFwLnNldChrZXksIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIG1hcC5nZXQoa2V5KT8uYWRkKHZhbHVlKTtcbiAgfVxuXG4gIGluaXRpYWxpemUoZGF0YTogQ2l2aWxTZXJ2aWNlRGF0YSkge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIGRhdGFcbiAgICB0aGlzLmFsbENhZHJlcy5jbGVhcigpO1xuICAgIHRoaXMuYWxsU2VydmljZXMuY2xlYXIoKTtcbiAgICB0aGlzLmNhZHJlVG9TZXJ2aWNlTWFwLmNsZWFyKCk7XG4gICAgdGhpcy5zZXJ2aWNlVG9DYWRyZXNNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmJhdGNoWWVhclRvQ2FkcmVzTWFwLmNsZWFyKCk7XG4gICAgdGhpcy5iYXRjaFllYXJUb1NlcnZpY2VzTWFwLmNsZWFyKCk7XG5cbiAgICAvLyBCdWlsZCBsb29rdXBzXG4gICAgZGF0YT8uY2l2aWxTZXJ2aWNlVHlwZT8uY2l2aWxTZXJ2aWNlVHlwZUxpc3QuZm9yRWFjaChjc3QgPT4ge1xuICAgICAgaWYgKGNzdCkge1xuICAgICAgICBjc3Quc2VydmljZUxpc3QuZm9yRWFjaChzZXJ2aWNlID0+IHtcbiAgICAgICAgICBjb25zdCB7IGlkOiBzZXJ2aWNlSWQsIGNvbW1vbkJhdGNoU3RhcnRZZWFyLCBjb21tb25CYXRjaEVuZFllYXIgfSA9IHNlcnZpY2U7XG4gICAgICAgICAgdGhpcy5hbGxTZXJ2aWNlcy5zZXQoc2VydmljZUlkLCBzZXJ2aWNlKTtcbiAgXG4gICAgICAgICAgLy8gQWRkIHllYXJzIHRvIHNlcnZpY2UtYmF0Y2ggbWFwXG4gICAgICAgICAgZm9yIChsZXQgeSA9IGNvbW1vbkJhdGNoU3RhcnRZZWFyOyB5IDw9IGNvbW1vbkJhdGNoRW5kWWVhcjsgeSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvTWFwU2V0KHRoaXMuYmF0Y2hZZWFyVG9TZXJ2aWNlc01hcCwgeSwgc2VydmljZUlkKTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIHNlcnZpY2UuY2FkcmVMaXN0Py5mb3JFYWNoKGNhZHJlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQ6IGNhZHJlSWQsIHN0YXJ0QmF0Y2hZZWFyLCBlbmRCYXRjaFllYXIgfSA9IGNhZHJlO1xuICAgICAgICAgICAgdGhpcy5hbGxDYWRyZXMuc2V0KGNhZHJlSWQsIGNhZHJlKTtcbiAgXG4gICAgICAgICAgICAvLyBNYXAgY2FkcmUgPC0+IHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuYWRkVG9NYXBTZXQodGhpcy5jYWRyZVRvU2VydmljZU1hcCwgY2FkcmVJZCwgc2VydmljZUlkKTtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9NYXBTZXQodGhpcy5zZXJ2aWNlVG9DYWRyZXNNYXAsIHNlcnZpY2VJZCwgY2FkcmVJZCk7XG4gIFxuICAgICAgICAgICAgLy8gQWRkIHllYXJzIHRvIGNhZHJlLWJhdGNoIG1hcFxuICAgICAgICAgICAgZm9yIChsZXQgeSA9IHN0YXJ0QmF0Y2hZZWFyOyB5IDw9IGVuZEJhdGNoWWVhcjsgeSsrKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkVG9NYXBTZXQodGhpcy5iYXRjaFllYXJUb0NhZHJlc01hcCwgeSwgY2FkcmVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWxsQmF0Y2hZZWFycygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5iYXRjaFllYXJUb0NhZHJlc01hcC5rZXlzKCkpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgfVxuXG4gIGdldEFsbENhZHJlcygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5hbGxDYWRyZXMudmFsdWVzKCkpLm1hcChjID0+ICh7XG4gICAgICBpZDogYy5pZCxcbiAgICAgIG5hbWU6IGMubmFtZVxuICAgIH0pKTtcbiAgfVxuXG4gIGdldEFsbFNlcnZpY2VzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmFsbFNlcnZpY2VzLnZhbHVlcygpKS5tYXAocyA9PiAoe1xuICAgICAgaWQ6IHMuaWQsXG4gICAgICBuYW1lOiBzLm5hbWVcbiAgICB9KSk7XG4gIH1cblxuICBnZXRTZXJ2aWNlc0J5Q2FkcmVzKGNhZHJlSWRzOiBzdHJpbmdbXSk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzZXJ2aWNlSWRzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY2FkcmVJZHMuZm9yRWFjaChjYWRyZUlkID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2VzID0gdGhpcy5jYWRyZVRvU2VydmljZU1hcC5nZXQoY2FkcmVJZCkgfHwgbmV3IFNldCgpO1xuICAgICAgc2VydmljZXMuZm9yRWFjaChzZXJ2aWNlSWQgPT4gc2VydmljZUlkc1NldC5hZGQoc2VydmljZUlkKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXJ2aWNlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgcyA9IHRoaXMuYWxsU2VydmljZXMuZ2V0KGlkKTtcbiAgICAgIHJldHVybiB7IGlkOiBzLmlkLCBuYW1lOiBzLm5hbWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENhZHJlc0J5U2VydmljZXMoc2VydmljZUlkczogc3RyaW5nW10pOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgY2FkcmVJZHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBzZXJ2aWNlSWRzLmZvckVhY2goc2VydmljZUlkID0+IHtcbiAgICAgIGNvbnN0IGNhZHJlcyA9IHRoaXMuc2VydmljZVRvQ2FkcmVzTWFwLmdldChzZXJ2aWNlSWQpIHx8IG5ldyBTZXQoKTtcbiAgICAgIGNhZHJlcy5mb3JFYWNoKGNhZHJlSWQgPT4gY2FkcmVJZHNTZXQuYWRkKGNhZHJlSWQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGNhZHJlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgYyA9IHRoaXMuYWxsQ2FkcmVzLmdldChpZCk7XG4gICAgICByZXR1cm4geyBpZDogYy5pZCwgbmFtZTogYy5uYW1lIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRDYWRyZXNCeUJhdGNoWWVhcnMoeWVhcnM6IG51bWJlcltdKTogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IGNhZHJlSWRzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgeWVhcnMuZm9yRWFjaCh5ZWFyID0+IHtcbiAgICAgIGNvbnN0IGNhZHJlcyA9IHRoaXMuYmF0Y2hZZWFyVG9DYWRyZXNNYXAuZ2V0KHllYXIpIHx8IG5ldyBTZXQoKTtcbiAgICAgIGNhZHJlcy5mb3JFYWNoKGNhZHJlSWQgPT4gY2FkcmVJZHNTZXQuYWRkKGNhZHJlSWQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGNhZHJlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgYyA9IHRoaXMuYWxsQ2FkcmVzLmdldChpZCk7XG4gICAgICByZXR1cm4geyBpZDogYy5pZCwgbmFtZTogYy5uYW1lIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRTZXJ2aWNlc0J5QmF0Y2hZZWFycyh5ZWFyczogbnVtYmVyW10pOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB7XG4gICAgY29uc3Qgc2VydmljZUlkc1NldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHllYXJzLmZvckVhY2goeWVhciA9PiB7XG4gICAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuYmF0Y2hZZWFyVG9TZXJ2aWNlc01hcC5nZXQoeWVhcikgfHwgbmV3IFNldCgpO1xuICAgICAgc2VydmljZXMuZm9yRWFjaChzZXJ2aWNlSWQgPT4gc2VydmljZUlkc1NldC5hZGQoc2VydmljZUlkKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXJ2aWNlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgcyA9IHRoaXMuYWxsU2VydmljZXMuZ2V0KGlkKTtcbiAgICAgIHJldHVybiB7IGlkOiBzLmlkLCBuYW1lOiBzLm5hbWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNlcnZpY2VzQnlDYWRyZXNBbmRCYXRjaChjYWRyZUlkczogc3RyaW5nW10sIHllYXI6IG51bWJlcik6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuZ2V0U2VydmljZXNCeUNhZHJlcyhjYWRyZUlkcyk7XG4gICAgcmV0dXJuIHNlcnZpY2VzLmZpbHRlcihzZXJ2aWNlID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxTZXJ2aWNlID0gdGhpcy5hbGxTZXJ2aWNlcy5nZXQoc2VydmljZS5pZCk7XG4gICAgICByZXR1cm4geWVhciA+PSBmdWxsU2VydmljZS5jb21tb25CYXRjaFN0YXJ0WWVhciAmJiB5ZWFyIDw9IGZ1bGxTZXJ2aWNlLmNvbW1vbkJhdGNoRW5kWWVhcjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENhZHJlc0J5U2VydmljZXNBbmRCYXRjaChzZXJ2aWNlSWRzOiBzdHJpbmdbXSwgeWVhcjogbnVtYmVyKTogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IGNhZHJlcyA9IHRoaXMuZ2V0Q2FkcmVzQnlTZXJ2aWNlcyhzZXJ2aWNlSWRzKTtcbiAgICByZXR1cm4gY2FkcmVzLmZpbHRlcihjYWRyZSA9PiB7XG4gICAgICBjb25zdCBmdWxsQ2FkcmUgPSB0aGlzLmFsbENhZHJlcy5nZXQoY2FkcmUuaWQpO1xuICAgICAgcmV0dXJuIHllYXIgPj0gZnVsbENhZHJlLnN0YXJ0QmF0Y2hZZWFyICYmIHllYXIgPD0gZnVsbENhZHJlLmVuZEJhdGNoWWVhcjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJhdGNoWWVhcnNCeUNhZHJlcyhjYWRyZUlkczogc3RyaW5nW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgYmF0Y2hZZWFyc1NldCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICAgIGNhZHJlSWRzLmZvckVhY2goY2FkcmVJZCA9PiB7XG4gICAgICBjb25zdCBjYWRyZSA9IHRoaXMuYWxsQ2FkcmVzLmdldChjYWRyZUlkKTtcbiAgICAgIGlmIChjYWRyZSkge1xuICAgICAgICBmb3IgKGxldCB5ID0gY2FkcmUuc3RhcnRCYXRjaFllYXI7IHkgPD0gY2FkcmUuZW5kQmF0Y2hZZWFyOyB5KyspIHtcbiAgICAgICAgICBiYXRjaFllYXJzU2V0LmFkZCh5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGJhdGNoWWVhcnNTZXQpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgfVxuXG4gIGdldEJhdGNoWWVhcnNCeVNlcnZpY2VzKHNlcnZpY2VJZHM6IHN0cmluZ1tdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGJhdGNoWWVhcnNTZXQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgICBzZXJ2aWNlSWRzLmZvckVhY2goc2VydmljZUlkID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmFsbFNlcnZpY2VzLmdldChzZXJ2aWNlSWQpO1xuICAgICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgICAgZm9yIChsZXQgeSA9IHNlcnZpY2UuY29tbW9uQmF0Y2hTdGFydFllYXI7IHkgPD0gc2VydmljZS5jb21tb25CYXRjaEVuZFllYXI7IHkrKykge1xuICAgICAgICAgIGJhdGNoWWVhcnNTZXQuYWRkKHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oYmF0Y2hZZWFyc1NldCkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG5cbiAgZ2V0QmF0Y2hZZWFyc0J5U2VydmljZXNBbmRDYWRyZXMoc2VydmljZUlkczogc3RyaW5nW10sIGNhZHJlSWRzOiBzdHJpbmdbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZXJ2aWNlWWVhcnMgPSB0aGlzLmdldEJhdGNoWWVhcnNCeVNlcnZpY2VzKHNlcnZpY2VJZHMpO1xuICAgIGNvbnN0IGNhZHJlWWVhcnMgPSB0aGlzLmdldEJhdGNoWWVhcnNCeUNhZHJlcyhjYWRyZUlkcyk7XG5cbiAgICAvLyBGaW5kIGludGVyc2VjdGlvbiBvZiB5ZWFyc1xuICAgIGNvbnN0IGNvbW1vblllYXJzID0gc2VydmljZVllYXJzLmZpbHRlcih5ZWFyID0+IGNhZHJlWWVhcnMuaW5jbHVkZXMoeWVhcikpO1xuICAgIHJldHVybiBjb21tb25ZZWFycy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { Component } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class AccessSettingsComponent {
4
+ constructor() { }
5
+ ngOnInit() { }
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AccessSettingsComponent, selector: "sb-uic-access-settings", ngImport: i0, template: ` <p>access settings works!</p> `, isInline: true, styles: ["::ng-deep .mdc-tooltip{--mdc-plain-tooltip-container-color: #616161;--mdc-plain-tooltip-supporting-text-color: #ffffff;--mdc-plain-tooltip-container-shape: 4px;--mdc-plain-tooltip-container-size: 340px;--mdc-plain-tooltip-supporting-text-padding: 8px}\n"] }); }
8
+ }
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsComponent, decorators: [{
10
+ type: Component,
11
+ args: [{ selector: "sb-uic-access-settings", template: ` <p>access settings works!</p> `, styles: ["::ng-deep .mdc-tooltip{--mdc-plain-tooltip-container-color: #616161;--mdc-plain-tooltip-supporting-text-color: #ffffff;--mdc-plain-tooltip-container-shape: 4px;--mdc-plain-tooltip-container-size: 340px;--mdc-plain-tooltip-supporting-text-padding: 8px}\n"] }]
12
+ }], ctorParameters: function () { return []; } });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9hY2Nlc3Mtc2V0dGluZ3Mvc3JjL2xpYi9hY2Nlc3Mtc2V0dGluZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBZWxELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsZ0JBQWUsQ0FBQztJQUVoQixRQUFRLEtBQUksQ0FBQzsrR0FIRix1QkFBdUI7bUdBQXZCLHVCQUF1Qiw4REFYeEIsaUNBQWlDOzs0RkFXaEMsdUJBQXVCO2tCQWJuQyxTQUFTOytCQUNFLHdCQUF3QixZQUN4QixpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzYi11aWMtYWNjZXNzLXNldHRpbmdzXCIsXG4gIHRlbXBsYXRlOiBgIDxwPmFjY2VzcyBzZXR0aW5ncyB3b3JrcyE8L3A+IGAsXG4gIHN0eWxlczogW2BcbiAgICA6Om5nLWRlZXAgLm1kYy10b29sdGlwIHtcbiAgICAgIC0tbWRjLXBsYWluLXRvb2x0aXAtY29udGFpbmVyLWNvbG9yOiAjNjE2MTYxO1xuICAgICAgLS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1zaGFwZTogNHB4O1xuICAgICAgLS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItc2l6ZTogMzQwcHg7XG4gICAgICAtLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1wYWRkaW5nOiA4cHg7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBBY2Nlc3NTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHt9XG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { AccessSettingsComponent } from "./access-settings.component";
3
+ import { SnackbarComponent } from "./components/snackbar/snackbar.component";
4
+ import { MatIconModule } from "@angular/material/icon";
5
+ import { CommonModule } from "@angular/common";
6
+ import * as i0 from "@angular/core";
7
+ export class AccessSettingsModule {
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, declarations: [AccessSettingsComponent, SnackbarComponent], imports: [MatIconModule, CommonModule], exports: [AccessSettingsComponent] }); }
10
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, imports: [MatIconModule, CommonModule] }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ declarations: [AccessSettingsComponent, SnackbarComponent],
16
+ imports: [MatIconModule, CommonModule],
17
+ exports: [AccessSettingsComponent]
18
+ }]
19
+ }] });
20
+ export * from "./access-settings.component";
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLXNldHRpbmdzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9hY2Nlc3Mtc2V0dGluZ3Mvc3JjL2xpYi9hY2Nlc3Mtc2V0dGluZ3MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFNL0MsTUFBTSxPQUFPLG9CQUFvQjsrR0FBcEIsb0JBQW9CO2dIQUFwQixvQkFBb0IsaUJBSmhCLHVCQUF1QixFQUFFLGlCQUFpQixhQUMvQyxhQUFhLEVBQUUsWUFBWSxhQUMzQix1QkFBdUI7Z0hBRXRCLG9CQUFvQixZQUhyQixhQUFhLEVBQUUsWUFBWTs7NEZBRzFCLG9CQUFvQjtrQkFMaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQztvQkFDMUQsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQztvQkFDdEMsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ25DOztBQUVELGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY2Nlc3NTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gXCIuL2FjY2Vzcy1zZXR0aW5ncy5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNuYWNrYmFyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbQWNjZXNzU2V0dGluZ3NDb21wb25lbnQsIFNuYWNrYmFyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW01hdEljb25Nb2R1bGUsIENvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtBY2Nlc3NTZXR0aW5nc0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQWNjZXNzU2V0dGluZ3NNb2R1bGUge31cbmV4cG9ydCAqIGZyb20gXCIuL2FjY2Vzcy1zZXR0aW5ncy5jb21wb25lbnRcIjtcbiJdfQ==