@memberjunction/core-entities 2.133.0 → 3.1.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.
@@ -9,9 +9,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.DashboardEngine = void 0;
10
10
  const core_1 = require("@memberjunction/core");
11
11
  /**
12
- * Caching of metadata for dashboards and related data
12
+ * Caching of metadata for dashboards and related data, including permission management
13
13
  */
14
14
  let DashboardEngine = class DashboardEngine extends core_1.BaseEngine {
15
+ constructor() {
16
+ super(...arguments);
17
+ this._dashboards = [];
18
+ this._partTypes = [];
19
+ this._dashboardUserPreferences = [];
20
+ this._dashboardCategories = [];
21
+ this._dashboardUserStates = [];
22
+ this._dashboardPermissions = [];
23
+ this._dashboardCategoryPermissions = [];
24
+ this._dashboardCategoryLinks = [];
25
+ }
15
26
  /**
16
27
  * Returns the global instance of the class. This is a singleton class, so there is only one instance of it in the application. Do not directly create new instances of it, always use this method to get the instance.
17
28
  */
@@ -20,6 +31,12 @@ let DashboardEngine = class DashboardEngine extends core_1.BaseEngine {
20
31
  }
21
32
  async Config(forceRefresh, contextUser, provider) {
22
33
  const c = [
34
+ {
35
+ Type: 'entity',
36
+ EntityName: "MJ: Dashboard Part Types",
37
+ PropertyName: "_partTypes",
38
+ CacheLocal: true
39
+ },
23
40
  {
24
41
  Type: 'entity',
25
42
  EntityName: 'Dashboards',
@@ -43,13 +60,37 @@ let DashboardEngine = class DashboardEngine extends core_1.BaseEngine {
43
60
  EntityName: 'MJ: Dashboard User States',
44
61
  PropertyName: "_dashboardUserStates",
45
62
  CacheLocal: true
63
+ },
64
+ {
65
+ Type: 'entity',
66
+ EntityName: 'MJ: Dashboard Permissions',
67
+ PropertyName: "_dashboardPermissions",
68
+ CacheLocal: true
69
+ },
70
+ {
71
+ Type: 'entity',
72
+ EntityName: 'MJ: Dashboard Category Permissions',
73
+ PropertyName: "_dashboardCategoryPermissions",
74
+ CacheLocal: true
75
+ },
76
+ {
77
+ Type: 'entity',
78
+ EntityName: 'MJ: Dashboard Category Links',
79
+ PropertyName: "_dashboardCategoryLinks",
80
+ CacheLocal: true
46
81
  }
47
82
  ];
48
83
  await this.Load(c, provider, forceRefresh, contextUser);
49
84
  }
85
+ // ========================================
86
+ // Getters for cached data
87
+ // ========================================
50
88
  get Dashboards() {
51
89
  return this._dashboards;
52
90
  }
91
+ get DashboardPartTypes() {
92
+ return this._partTypes;
93
+ }
53
94
  get DashboardUserPreferences() {
54
95
  return this._dashboardUserPreferences;
55
96
  }
@@ -59,6 +100,214 @@ let DashboardEngine = class DashboardEngine extends core_1.BaseEngine {
59
100
  get DashboardUserStates() {
60
101
  return this._dashboardUserStates;
61
102
  }
103
+ get DashboardPermissions() {
104
+ return this._dashboardPermissions;
105
+ }
106
+ get DashboardCategoryPermissions() {
107
+ return this._dashboardCategoryPermissions;
108
+ }
109
+ get DashboardCategoryLinks() {
110
+ return this._dashboardCategoryLinks;
111
+ }
112
+ // ========================================
113
+ // Permission Checking Methods
114
+ // ========================================
115
+ /**
116
+ * Gets the effective permissions for a user on a specific dashboard.
117
+ * Permission priority: Owner > Direct Permission > Category Permission
118
+ * @param dashboardId - The ID of the dashboard
119
+ * @param userId - The ID of the user to check permissions for
120
+ * @returns The effective permissions for the user on this dashboard
121
+ */
122
+ GetDashboardPermissions(dashboardId, userId) {
123
+ const dashboard = this._dashboards.find(d => d.ID === dashboardId);
124
+ // Default: no permissions
125
+ const noPermissions = {
126
+ DashboardID: dashboardId,
127
+ CanRead: false,
128
+ CanEdit: false,
129
+ CanDelete: false,
130
+ CanShare: false,
131
+ IsOwner: false,
132
+ PermissionSource: 'none'
133
+ };
134
+ if (!dashboard) {
135
+ return noPermissions;
136
+ }
137
+ // Check if user is the owner - owners have full permissions
138
+ if (dashboard.UserID === userId) {
139
+ return {
140
+ DashboardID: dashboardId,
141
+ CanRead: true,
142
+ CanEdit: true,
143
+ CanDelete: true,
144
+ CanShare: true,
145
+ IsOwner: true,
146
+ PermissionSource: 'owner'
147
+ };
148
+ }
149
+ // Check for direct dashboard permission
150
+ const directPermission = this._dashboardPermissions.find(p => p.DashboardID === dashboardId && p.UserID === userId);
151
+ if (directPermission) {
152
+ return {
153
+ DashboardID: dashboardId,
154
+ CanRead: directPermission.CanRead,
155
+ CanEdit: directPermission.CanEdit,
156
+ CanDelete: directPermission.CanDelete,
157
+ CanShare: directPermission.CanShare,
158
+ IsOwner: false,
159
+ PermissionSource: 'direct'
160
+ };
161
+ }
162
+ // Check for category-level permission (if dashboard has a category)
163
+ if (dashboard.CategoryID) {
164
+ const categoryPermission = this.GetCategoryPermissions(dashboard.CategoryID, userId);
165
+ if (categoryPermission.PermissionSource !== 'none') {
166
+ return {
167
+ DashboardID: dashboardId,
168
+ CanRead: categoryPermission.CanRead,
169
+ CanEdit: categoryPermission.CanEdit,
170
+ // Category permissions don't grant delete on individual dashboards
171
+ CanDelete: false,
172
+ CanShare: false,
173
+ IsOwner: false,
174
+ PermissionSource: 'category'
175
+ };
176
+ }
177
+ }
178
+ return noPermissions;
179
+ }
180
+ /**
181
+ * Gets the effective permissions for a user on a specific dashboard category.
182
+ * @param categoryId - The ID of the category
183
+ * @param userId - The ID of the user to check permissions for
184
+ * @returns The effective permissions for the user on this category
185
+ */
186
+ GetCategoryPermissions(categoryId, userId) {
187
+ const category = this._dashboardCategories.find(c => c.ID === categoryId);
188
+ // Default: no permissions
189
+ const noPermissions = {
190
+ CategoryID: categoryId,
191
+ CanRead: false,
192
+ CanEdit: false,
193
+ CanAddRemove: false,
194
+ CanShare: false,
195
+ IsOwner: false,
196
+ PermissionSource: 'none'
197
+ };
198
+ if (!category) {
199
+ return noPermissions;
200
+ }
201
+ // Check if user is the owner - owners have full permissions
202
+ if (category.UserID === userId) {
203
+ return {
204
+ CategoryID: categoryId,
205
+ CanRead: true,
206
+ CanEdit: true,
207
+ CanAddRemove: true,
208
+ CanShare: true,
209
+ IsOwner: true,
210
+ PermissionSource: 'owner'
211
+ };
212
+ }
213
+ // Check for direct category permission
214
+ const directPermission = this._dashboardCategoryPermissions.find(p => p.DashboardCategoryID === categoryId && p.UserID === userId);
215
+ if (directPermission) {
216
+ return {
217
+ CategoryID: categoryId,
218
+ CanRead: directPermission.CanRead,
219
+ CanEdit: directPermission.CanEdit,
220
+ CanAddRemove: directPermission.CanAddRemove,
221
+ CanShare: directPermission.CanShare,
222
+ IsOwner: false,
223
+ PermissionSource: 'direct'
224
+ };
225
+ }
226
+ return noPermissions;
227
+ }
228
+ /**
229
+ * Checks if a user can read/view a dashboard
230
+ * @param dashboardId - The ID of the dashboard
231
+ * @param userId - The ID of the user
232
+ * @returns true if the user can read the dashboard
233
+ */
234
+ CanUserReadDashboard(dashboardId, userId) {
235
+ return this.GetDashboardPermissions(dashboardId, userId).CanRead;
236
+ }
237
+ /**
238
+ * Checks if a user can edit a dashboard
239
+ * @param dashboardId - The ID of the dashboard
240
+ * @param userId - The ID of the user
241
+ * @returns true if the user can edit the dashboard
242
+ */
243
+ CanUserEditDashboard(dashboardId, userId) {
244
+ return this.GetDashboardPermissions(dashboardId, userId).CanEdit;
245
+ }
246
+ /**
247
+ * Checks if a user can delete a dashboard
248
+ * @param dashboardId - The ID of the dashboard
249
+ * @param userId - The ID of the user
250
+ * @returns true if the user can delete the dashboard
251
+ */
252
+ CanUserDeleteDashboard(dashboardId, userId) {
253
+ return this.GetDashboardPermissions(dashboardId, userId).CanDelete;
254
+ }
255
+ /**
256
+ * Checks if a user can share a dashboard
257
+ * @param dashboardId - The ID of the dashboard
258
+ * @param userId - The ID of the user
259
+ * @returns true if the user can share the dashboard
260
+ */
261
+ CanUserShareDashboard(dashboardId, userId) {
262
+ return this.GetDashboardPermissions(dashboardId, userId).CanShare;
263
+ }
264
+ /**
265
+ * Gets all dashboards the user has read access to (owned or shared)
266
+ * @param userId - The ID of the user
267
+ * @returns Array of dashboards the user can read
268
+ */
269
+ GetAccessibleDashboards(userId) {
270
+ return this._dashboards.filter(dashboard => this.CanUserReadDashboard(dashboard.ID, userId));
271
+ }
272
+ /**
273
+ * Gets all dashboard category links for a user (shared dashboards linked to their folder structure)
274
+ * @param userId - The ID of the user
275
+ * @returns Array of category links for the user
276
+ */
277
+ GetUserCategoryLinks(userId) {
278
+ return this._dashboardCategoryLinks.filter(link => link.UserID === userId);
279
+ }
280
+ /**
281
+ * Gets the dashboards shared with a specific user (excludes owned dashboards)
282
+ * @param userId - The ID of the user
283
+ * @returns Array of dashboards shared with the user
284
+ */
285
+ GetSharedDashboards(userId) {
286
+ return this._dashboards.filter(dashboard => {
287
+ // Exclude owned dashboards
288
+ if (dashboard.UserID === userId) {
289
+ return false;
290
+ }
291
+ // Check if user has read permission
292
+ return this.CanUserReadDashboard(dashboard.ID, userId);
293
+ });
294
+ }
295
+ /**
296
+ * Gets the users a dashboard is shared with and their permissions
297
+ * @param dashboardId - The ID of the dashboard
298
+ * @returns Array of permission records for this dashboard
299
+ */
300
+ GetDashboardShares(dashboardId) {
301
+ return this._dashboardPermissions.filter(p => p.DashboardID === dashboardId);
302
+ }
303
+ /**
304
+ * Gets the users a category is shared with and their permissions
305
+ * @param categoryId - The ID of the category
306
+ * @returns Array of permission records for this category
307
+ */
308
+ GetCategoryShares(categoryId) {
309
+ return this._dashboardCategoryPermissions.filter(p => p.DashboardCategoryID === categoryId);
310
+ }
62
311
  };
63
312
  exports.DashboardEngine = DashboardEngine;
64
313
  exports.DashboardEngine = DashboardEngine = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"dashboards.js","sourceRoot":"","sources":["../../src/engines/dashboards.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAA2I;AAI3I;;GAEG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,iBAA2B;IAC5D;;OAEG;IACI,MAAM,KAAK,QAAQ;QACvB,OAAO,KAAK,CAAC,WAAW,EAAmB,CAAC;IAC/C,CAAC;IAOM,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,CAAC,GAAwC;YAC3C;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,YAAY;gBACxB,YAAY,EAAE,aAAa;gBAC3B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,gCAAgC;gBAC5C,YAAY,EAAE,2BAA2B;gBACzC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,sBAAsB;gBAClC,YAAY,EAAE,sBAAsB;gBACpC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,2BAA2B;gBACvC,YAAY,EAAE,sBAAsB;gBACpC,UAAU,EAAE,IAAI;aACnB;SACJ,CAAA;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IAED,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;CACJ,CAAA;AA1DY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,yBAAkB,GAAE;GACR,eAAe,CA0D3B"}
1
+ {"version":3,"file":"dashboards.js","sourceRoot":"","sources":["../../src/engines/dashboards.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAA2I;AAoD3I;;GAEG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,iBAA2B;IAAzD;;QAQK,gBAAW,GAA8B,EAAE,CAAC;QAC5C,eAAU,GAA8B,EAAE,CAAC;QAC3C,8BAAyB,GAAoC,EAAE,CAAC;QAChE,yBAAoB,GAA8B,EAAE,CAAC;QACrD,yBAAoB,GAA+B,EAAE,CAAC;QACtD,0BAAqB,GAAgC,EAAE,CAAC;QACxD,kCAA6B,GAAwC,EAAE,CAAC;QACxE,4BAAuB,GAAkC,EAAE,CAAC;IAiUxE,CAAC;IA/UG;;OAEG;IACI,MAAM,KAAK,QAAQ;QACvB,OAAO,KAAK,CAAC,WAAW,EAAmB,CAAC;IAC/C,CAAC;IAWM,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,CAAC,GAAwC;YAC3C;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,0BAA0B;gBACtC,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,YAAY;gBACxB,YAAY,EAAE,aAAa;gBAC3B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,gCAAgC;gBAC5C,YAAY,EAAE,2BAA2B;gBACzC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,sBAAsB;gBAClC,YAAY,EAAE,sBAAsB;gBACpC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,2BAA2B;gBACvC,YAAY,EAAE,sBAAsB;gBACpC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,2BAA2B;gBACvC,YAAY,EAAE,uBAAuB;gBACrC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,oCAAoC;gBAChD,YAAY,EAAE,+BAA+B;gBAC7C,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,8BAA8B;gBAC1C,YAAY,EAAE,yBAAyB;gBACvC,UAAU,EAAE,IAAI;aACnB;SACJ,CAAA;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,2CAA2C;IAC3C,0BAA0B;IAC1B,2CAA2C;IAE3C,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IAED,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;IAED,IAAW,4BAA4B;QACnC,OAAO,IAAI,CAAC,6BAA6B,CAAC;IAC9C,CAAC;IAED,IAAW,sBAAsB;QAC7B,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACxC,CAAC;IAED,2CAA2C;IAC3C,8BAA8B;IAC9B,2CAA2C;IAE3C;;;;;;OAMG;IACI,uBAAuB,CAAC,WAAmB,EAAE,MAAc;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAEnE,0BAA0B;QAC1B,MAAM,aAAa,GAA6B;YAC5C,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;YACd,gBAAgB,EAAE,MAAM;SAC3B,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,aAAa,CAAC;QACzB,CAAC;QAED,4DAA4D;QAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO;gBACH,WAAW,EAAE,WAAW;gBACxB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;gBACb,gBAAgB,EAAE,OAAO;aAC5B,CAAC;QACN,CAAC;QAED,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CACpD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAC5D,CAAC;QAEF,IAAI,gBAAgB,EAAE,CAAC;YACnB,OAAO;gBACH,WAAW,EAAE,WAAW;gBACxB,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,SAAS,EAAE,gBAAgB,CAAC,SAAS;gBACrC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;gBACnC,OAAO,EAAE,KAAK;gBACd,gBAAgB,EAAE,QAAQ;aAC7B,CAAC;QACN,CAAC;QAED,oEAAoE;QACpE,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrF,IAAI,kBAAkB,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;gBACjD,OAAO;oBACH,WAAW,EAAE,WAAW;oBACxB,OAAO,EAAE,kBAAkB,CAAC,OAAO;oBACnC,OAAO,EAAE,kBAAkB,CAAC,OAAO;oBACnC,mEAAmE;oBACnE,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;oBACd,gBAAgB,EAAE,UAAU;iBAC/B,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,aAAa,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,UAAkB,EAAE,MAAc;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAE1E,0BAA0B;QAC1B,MAAM,aAAa,GAAqC;YACpD,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;YACd,gBAAgB,EAAE,MAAM;SAC3B,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,aAAa,CAAC;QACzB,CAAC;QAED,4DAA4D;QAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO;gBACH,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;gBACb,gBAAgB,EAAE,OAAO;aAC5B,CAAC;QACN,CAAC;QAED,uCAAuC;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAC5D,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CACnE,CAAC;QAEF,IAAI,gBAAgB,EAAE,CAAC;YACnB,OAAO;gBACH,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,YAAY,EAAE,gBAAgB,CAAC,YAAY;gBAC3C,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;gBACnC,OAAO,EAAE,KAAK;gBACd,gBAAgB,EAAE,QAAQ;aAC7B,CAAC;QACN,CAAC;QAED,OAAO,aAAa,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACI,oBAAoB,CAAC,WAAmB,EAAE,MAAc;QAC3D,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACI,oBAAoB,CAAC,WAAmB,EAAE,MAAc;QAC3D,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,WAAmB,EAAE,MAAc;QAC7D,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,WAAmB,EAAE,MAAc;QAC5D,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACI,uBAAuB,CAAC,MAAc;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CACvC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAClD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,oBAAoB,CAAC,MAAc;QACtC,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED;;;;OAIG;IACI,mBAAmB,CAAC,MAAc;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YACvC,2BAA2B;YAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,oCAAoC;YACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,WAAmB;QACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,UAAkB;QACvC,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,KAAK,UAAU,CAAC,CAAC;IAChG,CAAC;CACJ,CAAA;AAhVY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,yBAAkB,GAAE;GACR,eAAe,CAgV3B"}