@memberjunction/ng-explorer-settings 2.112.0 → 2.113.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 (31) hide show
  1. package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts.map +1 -1
  2. package/dist/lib/application-management/application-dialog/application-dialog.component.js +17 -17
  3. package/dist/lib/application-management/application-dialog/application-dialog.component.js.map +1 -1
  4. package/dist/lib/application-management/application-management.component.d.ts.map +1 -1
  5. package/dist/lib/application-management/application-management.component.js +28 -17
  6. package/dist/lib/application-management/application-management.component.js.map +1 -1
  7. package/dist/lib/entity-permissions/entity-permissions.component.d.ts.map +1 -1
  8. package/dist/lib/entity-permissions/entity-permissions.component.js +36 -24
  9. package/dist/lib/entity-permissions/entity-permissions.component.js.map +1 -1
  10. package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.d.ts.map +1 -1
  11. package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js +14 -14
  12. package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js.map +1 -1
  13. package/dist/lib/role-management/role-dialog/role-dialog.component.d.ts.map +1 -1
  14. package/dist/lib/role-management/role-dialog/role-dialog.component.js +7 -7
  15. package/dist/lib/role-management/role-dialog/role-dialog.component.js.map +1 -1
  16. package/dist/lib/role-management/role-management.component.d.ts.map +1 -1
  17. package/dist/lib/role-management/role-management.component.js +24 -14
  18. package/dist/lib/role-management/role-management.component.js.map +1 -1
  19. package/dist/lib/sql-logging/sql-logging.component.d.ts.map +1 -1
  20. package/dist/lib/sql-logging/sql-logging.component.js +25 -19
  21. package/dist/lib/sql-logging/sql-logging.component.js.map +1 -1
  22. package/dist/lib/user-management/user-dialog/user-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/user-management/user-dialog/user-dialog.component.js +11 -11
  24. package/dist/lib/user-management/user-dialog/user-dialog.component.js.map +1 -1
  25. package/dist/lib/user-management/user-management.component.d.ts.map +1 -1
  26. package/dist/lib/user-management/user-management.component.js +35 -23
  27. package/dist/lib/user-management/user-management.component.js.map +1 -1
  28. package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts.map +1 -1
  29. package/dist/lib/user-profile-settings/user-profile-settings.component.js +22 -17
  30. package/dist/lib/user-profile-settings/user-profile-settings.component.js.map +1 -1
  31. package/package.json +14 -13
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { Subject, BehaviorSubject } from 'rxjs';
5
5
  import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
6
- import { RunView, Metadata } from '@memberjunction/global';
6
+ import { RunView, Metadata } from '@memberjunction/core';
7
7
  import { SharedSettingsModule } from '../shared/shared-settings.module';
8
8
  import { PermissionDialogComponent } from './permission-dialog/permission-dialog.component';
9
9
  import * as i0 from "@angular/core";
@@ -264,13 +264,13 @@ export class EntityPermissionsComponent {
264
264
  totalEntities: 0,
265
265
  publicEntities: 0,
266
266
  restrictedEntities: 0,
267
- totalPermissions: 0,
267
+ totalPermissions: 0
268
268
  };
269
269
  // Filters
270
270
  filters$ = new BehaviorSubject({
271
271
  entitySearch: '',
272
272
  accessLevel: 'all',
273
- roleId: null,
273
+ roleId: null
274
274
  });
275
275
  // UI State
276
276
  expandedEntityId = null;
@@ -291,7 +291,11 @@ export class EntityPermissionsComponent {
291
291
  this.isLoading = true;
292
292
  this.error = null;
293
293
  // Load all required data in parallel
294
- const [entities, permissions, roles] = await Promise.all([this.loadEntities(), this.loadEntityPermissions(), this.loadRoles()]);
294
+ const [entities, permissions, roles] = await Promise.all([
295
+ this.loadEntities(),
296
+ this.loadEntityPermissions(),
297
+ this.loadRoles()
298
+ ]);
295
299
  // Process the data
296
300
  this.roles = roles;
297
301
  this.processEntityAccess(entities, permissions);
@@ -311,7 +315,7 @@ export class EntityPermissionsComponent {
311
315
  const result = await rv.RunView({
312
316
  EntityName: 'Entities',
313
317
  ResultType: 'entity_object',
314
- OrderBy: 'Name ASC',
318
+ OrderBy: 'Name ASC'
315
319
  });
316
320
  return result.Success ? result.Results : [];
317
321
  }
@@ -320,7 +324,7 @@ export class EntityPermissionsComponent {
320
324
  const result = await rv.RunView({
321
325
  EntityName: 'Entity Permissions',
322
326
  ResultType: 'entity_object',
323
- OrderBy: 'EntityID, RoleID',
327
+ OrderBy: 'EntityID, RoleID'
324
328
  });
325
329
  return result.Success ? result.Results : [];
326
330
  }
@@ -329,7 +333,7 @@ export class EntityPermissionsComponent {
329
333
  const result = await rv.RunView({
330
334
  EntityName: 'Roles',
331
335
  ResultType: 'entity_object',
332
- OrderBy: 'Name ASC',
336
+ OrderBy: 'Name ASC'
333
337
  });
334
338
  return result.Success ? result.Results : [];
335
339
  }
@@ -344,7 +348,7 @@ export class EntityPermissionsComponent {
344
348
  permissionsByEntity.get(entityId).push(permission);
345
349
  }
346
350
  // Create EntityAccess objects
347
- this.entityAccess = entities.map((entity) => {
351
+ this.entityAccess = entities.map(entity => {
348
352
  const entityPermissions = permissionsByEntity.get(entity.ID) || [];
349
353
  const rolePermissions = new Map();
350
354
  // Process permissions by role
@@ -354,7 +358,7 @@ export class EntityPermissionsComponent {
354
358
  canCreate: permission.CanCreate || false,
355
359
  canRead: permission.CanRead || false,
356
360
  canUpdate: permission.CanUpdate || false,
357
- canDelete: permission.CanDelete || false,
361
+ canDelete: permission.CanDelete || false
358
362
  });
359
363
  }
360
364
  }
@@ -362,7 +366,7 @@ export class EntityPermissionsComponent {
362
366
  entity,
363
367
  isPublic: entity.AllowAllRowsAPI || false,
364
368
  permissions: entityPermissions,
365
- rolePermissions,
369
+ rolePermissions
366
370
  };
367
371
  });
368
372
  }
@@ -379,35 +383,36 @@ export class EntityPermissionsComponent {
379
383
  // Apply entity search
380
384
  if (filters.entitySearch) {
381
385
  const searchLower = filters.entitySearch.toLowerCase();
382
- filtered = filtered.filter((ea) => ea.entity.Name?.toLowerCase().includes(searchLower) || ea.entity.Description?.toLowerCase().includes(searchLower));
386
+ filtered = filtered.filter(ea => ea.entity.Name?.toLowerCase().includes(searchLower) ||
387
+ ea.entity.Description?.toLowerCase().includes(searchLower));
383
388
  }
384
389
  // Apply access level filter
385
390
  switch (filters.accessLevel) {
386
391
  case 'public':
387
- filtered = filtered.filter((ea) => ea.isPublic);
392
+ filtered = filtered.filter(ea => ea.isPublic);
388
393
  break;
389
394
  case 'restricted':
390
- filtered = filtered.filter((ea) => !ea.isPublic && ea.permissions.length === 0);
395
+ filtered = filtered.filter(ea => !ea.isPublic && ea.permissions.length === 0);
391
396
  break;
392
397
  case 'custom':
393
- filtered = filtered.filter((ea) => !ea.isPublic && ea.permissions.length > 0);
398
+ filtered = filtered.filter(ea => !ea.isPublic && ea.permissions.length > 0);
394
399
  break;
395
400
  }
396
401
  // Apply role filter
397
402
  if (filters.roleId) {
398
- filtered = filtered.filter((ea) => ea.rolePermissions.has(filters.roleId));
403
+ filtered = filtered.filter(ea => ea.rolePermissions.has(filters.roleId));
399
404
  }
400
405
  this.filteredEntityAccess = filtered;
401
406
  }
402
407
  calculateStats() {
403
- const publicEntities = this.entityAccess.filter((ea) => ea.isPublic).length;
404
- const customPermissions = this.entityAccess.filter((ea) => !ea.isPublic && ea.permissions.length > 0).length;
408
+ const publicEntities = this.entityAccess.filter(ea => ea.isPublic).length;
409
+ const customPermissions = this.entityAccess.filter(ea => !ea.isPublic && ea.permissions.length > 0).length;
405
410
  const totalPermissions = this.entityAccess.reduce((sum, ea) => sum + ea.permissions.length, 0);
406
411
  this.stats = {
407
412
  totalEntities: this.entityAccess.length,
408
413
  publicEntities,
409
414
  restrictedEntities: this.entityAccess.length - publicEntities - customPermissions,
410
- totalPermissions,
415
+ totalPermissions
411
416
  };
412
417
  }
413
418
  // Public methods for template
@@ -425,7 +430,7 @@ export class EntityPermissionsComponent {
425
430
  updateFilter(partial) {
426
431
  this.filters$.next({
427
432
  ...this.filters$.value,
428
- ...partial,
433
+ ...partial
429
434
  });
430
435
  }
431
436
  toggleEntityExpansion(entityId) {
@@ -441,7 +446,7 @@ export class EntityPermissionsComponent {
441
446
  this.permissionDialogData = {
442
447
  entity: entityAccess.entity,
443
448
  roles: this.roles,
444
- existingPermissions: entityAccess.permissions,
449
+ existingPermissions: entityAccess.permissions
445
450
  };
446
451
  this.showPermissionDialog = true;
447
452
  console.log('Dialog data set:', this.permissionDialogData);
@@ -483,7 +488,7 @@ export class EntityPermissionsComponent {
483
488
  }
484
489
  }
485
490
  getRoleName(roleId) {
486
- const role = this.roles.find((r) => r.ID === roleId);
491
+ const role = this.roles.find(r => r.ID === roleId);
487
492
  return role?.Name || 'Unknown Role';
488
493
  }
489
494
  hasPermission(entityAccess, roleId, permission) {
@@ -622,11 +627,18 @@ export class EntityPermissionsComponent {
622
627
  i0.ɵɵconditional(!ctx.isLoading && !ctx.error ? 70 : -1);
623
628
  i0.ɵɵadvance();
624
629
  i0.ɵɵproperty("visible", ctx.showPermissionDialog)("data", ctx.permissionDialogData);
625
- } }, dependencies: [CommonModule, FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, SharedSettingsModule, PermissionDialogComponent], styles: ["@import '../shared/styles/variables';\n@import '../shared/styles/mixins';\n\n.entity-permissions-container[_ngcontent-%COMP%] {\n @include scrollable-container;\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n//[_ngcontent-%COMP%] Action[_ngcontent-%COMP%] Buttons\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.75rem;\n justify-content: space-between;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n}\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n//[_ngcontent-%COMP%] Buttons\n.btn-primary[_ngcontent-%COMP%] {\n @include button-base;\n background-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3);\n }\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n @include button-base;\n background-color: #ffffff;\n color: #374151;\n border: 1px solid #e5e7eb;\n \n &:hover {\n background-color: #f9fafb;\n border-color: #2196f3;\n color: #2196f3;\n }\n}\n\n//[_ngcontent-%COMP%] Stats[_ngcontent-%COMP%] Grid\n.stats-grid[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n width: 100%;\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 1rem;\n }\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n display: flex;\n margin-right: 10px;\n align-items: center;\n gap: 1rem;\n transition: all 0.3s ease;\n min-width: 0; // Prevent grid blowout\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n}\n\n.stat-icon[_ngcontent-%COMP%] {\n width: 60px;\n height: 60px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n\n &-total {\n background: rgba(33, 150, 243, 0.1);\n color: #2196f3;\n }\n\n &-public {\n background: rgba(76, 175, 80, 0.1);\n color: #4caf50;\n }\n\n &-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n }\n\n &-permissions {\n background: rgba(156, 39, 176, 0.1);\n color: #9c27b0;\n }\n}\n\n.stat-content[_ngcontent-%COMP%] {\n flex: 1;\n\n .stat-value {\n font-size: 2rem;\n font-weight: 700;\n color: #1f2937;\n line-height: 1;\n }\n\n .stat-label {\n color: #6b7280;\n font-size: 0.875rem;\n margin-top: 0.25rem;\n }\n}\n\n//[_ngcontent-%COMP%] Filters[_ngcontent-%COMP%] Section\n.filters-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filters-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 1.5rem;\n align-items: flex-end;\n flex-wrap: wrap;\n}\n\n.search-container[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 250px;\n position: relative;\n\n .search-icon {\n position: absolute;\n left: 1rem;\n top: 50%;\n transform: translateY(-50%);\n color: #6b7280;\n font-size: 1rem;\n }\n\n .search-input {\n width: 100%;\n padding: 0.75rem 1rem 0.75rem 2.75rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n.filter-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n\n .filter-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #374151;\n }\n\n .filter-buttons {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n }\n\n .filter-btn {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n font-weight: 500;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n }\n\n .filter-select {\n padding: 0.75rem 1rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n background: white;\n cursor: pointer;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n//[_ngcontent-%COMP%] Content[_ngcontent-%COMP%] Area\n.content-area[_ngcontent-%COMP%] {\n @include scrollable-content;\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n padding: 1.5rem;\n}\n\n//[_ngcontent-%COMP%] List[_ngcontent-%COMP%] View\n.entities-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n max-height: calc(100vh - 450px); // Dynamic height\n overflow-y: auto;\n padding-right: 0.5rem; // Space for scrollbar\n}\n\n.entity-card[_ngcontent-%COMP%] {\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.3s ease;\n\n &:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n\n &.expanded {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n \n .expand-btn i {\n transform: rotate(180deg);\n }\n }\n}\n\n.entity-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n background: #f9fafb;\n transition: background-color 0.2s;\n\n &:hover {\n background: #f3f4f6;\n }\n}\n\n.entity-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex: 1;\n}\n\n.entity-icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: rgba(33, 150, 243, 0.1);\n display: flex;\n align-items: center;\n justify-content: center;\n color: #2196f3;\n font-size: 1.25rem;\n}\n\n.entity-details[_ngcontent-%COMP%] {\n flex: 1;\n\n .entity-name {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.25rem 0;\n }\n\n .entity-description {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0;\n }\n}\n\n.entity-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.access-badge[_ngcontent-%COMP%] {\n padding: 0.375rem 0.75rem;\n border-radius: 20px;\n font-size: 0.75rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n\n &.access-public {\n background: rgba(76, 175, 80, 0.1);\n color: #388e3c;\n }\n\n &.access-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #d32f2f;\n }\n\n &.access-custom {\n background: rgba(156, 39, 176, 0.1);\n color: #7b1fa2;\n }\n}\n\n.action-btn[_ngcontent-%COMP%] {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n.expand-btn[_ngcontent-%COMP%] {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n cursor: pointer;\n transition: all 0.2s;\n\n i {\n transition: transform 0.3s ease;\n }\n}\n\n//[_ngcontent-%COMP%] Entity[_ngcontent-%COMP%] Content\n.entity-content[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: white;\n border-top: 1px solid #e5e7eb;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease-out;\n}\n\n.permissions-grid[_ngcontent-%COMP%] {\n background: #f9fafb;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.permissions-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n background: #e5e7eb;\n font-weight: 600;\n color: #374151;\n font-size: 0.875rem;\n}\n\n.permission-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n border-bottom: 1px solid #e5e7eb;\n transition: background-color 0.2s;\n\n &:hover {\n background: white;\n }\n\n &:last-child {\n border-bottom: none;\n }\n}\n\n.role-header[_ngcontent-%COMP%], .permission-header[_ngcontent-%COMP%] {\n text-align: left;\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #1f2937;\n}\n\n.permission-cell[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.text-success[_ngcontent-%COMP%] {\n color: #4caf50;\n}\n\n.text-muted[_ngcontent-%COMP%] {\n color: #d1d5db;\n}\n\n.no-permissions[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 0.875rem;\n margin: 0;\n}\n\n//[_ngcontent-%COMP%] Grid[_ngcontent-%COMP%] View\n.entities-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n}\n\n.entity-grid-card[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n padding: 1.5rem;\n transition: all 0.3s ease;\n position: relative;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n\n &.access-public {\n border-left: 4px solid #4caf50;\n }\n\n &.access-restricted {\n border-left: 4px solid #f44336;\n }\n\n &.access-custom {\n border-left: 4px solid #9c27b0;\n }\n}\n\n.grid-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n color: #2196f3;\n}\n\n.edit-btn[_ngcontent-%COMP%] {\n padding: 0.375rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #2196f3;\n }\n}\n\n.grid-card-title[_ngcontent-%COMP%] {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.5rem 0;\n}\n\n.grid-card-description[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0 0 1rem 0;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.grid-card-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 0.875rem;\n}\n\n.access-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-weight: 500;\n}\n\n.permission-count[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n//[_ngcontent-%COMP%] Empty[_ngcontent-%COMP%] State\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 4rem 2rem;\n\n .empty-icon {\n font-size: 4rem;\n color: #e5e7eb;\n margin-bottom: 1rem;\n }\n\n .empty-text {\n font-size: 1.25rem;\n font-weight: 600;\n color: #374151;\n margin: 0 0 0.5rem 0;\n }\n\n .empty-subtext {\n color: #6b7280;\n margin: 0;\n }\n}\n\n//[_ngcontent-%COMP%] Loading[_ngcontent-%COMP%] State\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem 2rem;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n position: relative;\n width: 60px;\n height: 60px;\n margin-bottom: 1rem;\n\n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n\n &:nth-child(1) {\n border-color: #2196f3 transparent transparent transparent;\n animation-delay: -0.45s;\n }\n\n &:nth-child(2) {\n border-color: transparent #9c27b0 transparent transparent;\n animation-delay: -0.3s;\n }\n\n &:nth-child(3) {\n border-color: transparent transparent #4caf50 transparent;\n animation-delay: -0.15s;\n }\n }\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 0.95rem;\n}\n\n//[_ngcontent-%COMP%] Error[_ngcontent-%COMP%] State\n.error-container[_ngcontent-%COMP%] {\n text-align: center;\n padding: 4rem 2rem;\n\n .error-icon {\n font-size: 3rem;\n color: #f44336;\n margin-bottom: 1rem;\n }\n\n .error-message {\n color: #374151;\n margin-bottom: 1.5rem;\n }\n\n .retry-button {\n @include button-base;\n background-color: #2196f3;\n color: white;\n }\n}\n\n//[_ngcontent-%COMP%] Modal[_ngcontent-%COMP%] Styles\n.modal-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.2s ease;\n}\n\n.modal-dialog[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 500px;\n width: 90%;\n max-height: 90vh;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideUp 0.3s ease;\n\n &.modal-large {\n max-width: 800px;\n }\n}\n\n.modal-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.5rem;\n border-bottom: 1px solid #e5e7eb;\n\n .modal-title {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 1.25rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0;\n }\n\n .modal-close {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1.25rem;\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #374151;\n }\n }\n}\n\n.modal-body[_ngcontent-%COMP%] {\n padding: 1.5rem;\n max-height: 60vh;\n overflow-y: auto;\n\n .modal-description {\n color: #374151;\n margin: 0 0 1.5rem 0;\n }\n}\n\n.modal-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1.5rem;\n border-top: 1px solid #e5e7eb;\n background: #f9fafb;\n}\n\n.permission-editor[_ngcontent-%COMP%] {\n padding: 2rem;\n background: #f3f4f6;\n border-radius: 8px;\n text-align: center;\n\n .coming-soon {\n color: #6b7280;\n margin: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n }\n}\n\n//[_ngcontent-%COMP%] Animations\n@keyframes[_ngcontent-%COMP%] fadeIn[_ngcontent-%COMP%] {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes _ngcontent-%COMP%_slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 800px;\n }\n}\n\n//[_ngcontent-%COMP%] Edit[_ngcontent-%COMP%] Button[_ngcontent-%COMP%] Styles\n.btn-edit[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: white;\n color: #666666;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.2);\n }\n \n &:active {\n transform: translateY(0);\n }\n}"] });
630
+ } }, dependencies: [CommonModule,
631
+ FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, SharedSettingsModule,
632
+ PermissionDialogComponent], styles: ["@import '../shared/styles/variables';\n@import '../shared/styles/mixins';\n\n.entity-permissions-container[_ngcontent-%COMP%] {\n @include scrollable-container;\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n//[_ngcontent-%COMP%] Action[_ngcontent-%COMP%] Buttons\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.75rem;\n justify-content: space-between;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n}\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n//[_ngcontent-%COMP%] Buttons\n.btn-primary[_ngcontent-%COMP%] {\n @include button-base;\n background-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3);\n }\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n @include button-base;\n background-color: #ffffff;\n color: #374151;\n border: 1px solid #e5e7eb;\n \n &:hover {\n background-color: #f9fafb;\n border-color: #2196f3;\n color: #2196f3;\n }\n}\n\n//[_ngcontent-%COMP%] Stats[_ngcontent-%COMP%] Grid\n.stats-grid[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n width: 100%;\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 1rem;\n }\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n display: flex;\n margin-right: 10px;\n align-items: center;\n gap: 1rem;\n transition: all 0.3s ease;\n min-width: 0; // Prevent grid blowout\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n}\n\n.stat-icon[_ngcontent-%COMP%] {\n width: 60px;\n height: 60px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n\n &-total {\n background: rgba(33, 150, 243, 0.1);\n color: #2196f3;\n }\n\n &-public {\n background: rgba(76, 175, 80, 0.1);\n color: #4caf50;\n }\n\n &-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n }\n\n &-permissions {\n background: rgba(156, 39, 176, 0.1);\n color: #9c27b0;\n }\n}\n\n.stat-content[_ngcontent-%COMP%] {\n flex: 1;\n\n .stat-value {\n font-size: 2rem;\n font-weight: 700;\n color: #1f2937;\n line-height: 1;\n }\n\n .stat-label {\n color: #6b7280;\n font-size: 0.875rem;\n margin-top: 0.25rem;\n }\n}\n\n//[_ngcontent-%COMP%] Filters[_ngcontent-%COMP%] Section\n.filters-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filters-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 1.5rem;\n align-items: flex-end;\n flex-wrap: wrap;\n}\n\n.search-container[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 250px;\n position: relative;\n\n .search-icon {\n position: absolute;\n left: 1rem;\n top: 50%;\n transform: translateY(-50%);\n color: #6b7280;\n font-size: 1rem;\n }\n\n .search-input {\n width: 100%;\n padding: 0.75rem 1rem 0.75rem 2.75rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n.filter-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n\n .filter-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #374151;\n }\n\n .filter-buttons {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n }\n\n .filter-btn {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n font-weight: 500;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n }\n\n .filter-select {\n padding: 0.75rem 1rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n background: white;\n cursor: pointer;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n//[_ngcontent-%COMP%] Content[_ngcontent-%COMP%] Area\n.content-area[_ngcontent-%COMP%] {\n @include scrollable-content;\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n padding: 1.5rem;\n}\n\n//[_ngcontent-%COMP%] List[_ngcontent-%COMP%] View\n.entities-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n max-height: calc(100vh - 450px); // Dynamic height\n overflow-y: auto;\n padding-right: 0.5rem; // Space for scrollbar\n}\n\n.entity-card[_ngcontent-%COMP%] {\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.3s ease;\n\n &:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n\n &.expanded {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n \n .expand-btn i {\n transform: rotate(180deg);\n }\n }\n}\n\n.entity-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n background: #f9fafb;\n transition: background-color 0.2s;\n\n &:hover {\n background: #f3f4f6;\n }\n}\n\n.entity-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex: 1;\n}\n\n.entity-icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: rgba(33, 150, 243, 0.1);\n display: flex;\n align-items: center;\n justify-content: center;\n color: #2196f3;\n font-size: 1.25rem;\n}\n\n.entity-details[_ngcontent-%COMP%] {\n flex: 1;\n\n .entity-name {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.25rem 0;\n }\n\n .entity-description {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0;\n }\n}\n\n.entity-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.access-badge[_ngcontent-%COMP%] {\n padding: 0.375rem 0.75rem;\n border-radius: 20px;\n font-size: 0.75rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n\n &.access-public {\n background: rgba(76, 175, 80, 0.1);\n color: #388e3c;\n }\n\n &.access-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #d32f2f;\n }\n\n &.access-custom {\n background: rgba(156, 39, 176, 0.1);\n color: #7b1fa2;\n }\n}\n\n.action-btn[_ngcontent-%COMP%] {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n.expand-btn[_ngcontent-%COMP%] {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n cursor: pointer;\n transition: all 0.2s;\n\n i {\n transition: transform 0.3s ease;\n }\n}\n\n//[_ngcontent-%COMP%] Entity[_ngcontent-%COMP%] Content\n.entity-content[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: white;\n border-top: 1px solid #e5e7eb;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease-out;\n}\n\n.permissions-grid[_ngcontent-%COMP%] {\n background: #f9fafb;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.permissions-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n background: #e5e7eb;\n font-weight: 600;\n color: #374151;\n font-size: 0.875rem;\n}\n\n.permission-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n border-bottom: 1px solid #e5e7eb;\n transition: background-color 0.2s;\n\n &:hover {\n background: white;\n }\n\n &:last-child {\n border-bottom: none;\n }\n}\n\n.role-header[_ngcontent-%COMP%], .permission-header[_ngcontent-%COMP%] {\n text-align: left;\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #1f2937;\n}\n\n.permission-cell[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.text-success[_ngcontent-%COMP%] {\n color: #4caf50;\n}\n\n.text-muted[_ngcontent-%COMP%] {\n color: #d1d5db;\n}\n\n.no-permissions[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 0.875rem;\n margin: 0;\n}\n\n//[_ngcontent-%COMP%] Grid[_ngcontent-%COMP%] View\n.entities-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n}\n\n.entity-grid-card[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n padding: 1.5rem;\n transition: all 0.3s ease;\n position: relative;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n\n &.access-public {\n border-left: 4px solid #4caf50;\n }\n\n &.access-restricted {\n border-left: 4px solid #f44336;\n }\n\n &.access-custom {\n border-left: 4px solid #9c27b0;\n }\n}\n\n.grid-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n color: #2196f3;\n}\n\n.edit-btn[_ngcontent-%COMP%] {\n padding: 0.375rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #2196f3;\n }\n}\n\n.grid-card-title[_ngcontent-%COMP%] {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.5rem 0;\n}\n\n.grid-card-description[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0 0 1rem 0;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.grid-card-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 0.875rem;\n}\n\n.access-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-weight: 500;\n}\n\n.permission-count[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n//[_ngcontent-%COMP%] Empty[_ngcontent-%COMP%] State\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 4rem 2rem;\n\n .empty-icon {\n font-size: 4rem;\n color: #e5e7eb;\n margin-bottom: 1rem;\n }\n\n .empty-text {\n font-size: 1.25rem;\n font-weight: 600;\n color: #374151;\n margin: 0 0 0.5rem 0;\n }\n\n .empty-subtext {\n color: #6b7280;\n margin: 0;\n }\n}\n\n//[_ngcontent-%COMP%] Loading[_ngcontent-%COMP%] State\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem 2rem;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n position: relative;\n width: 60px;\n height: 60px;\n margin-bottom: 1rem;\n\n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n\n &:nth-child(1) {\n border-color: #2196f3 transparent transparent transparent;\n animation-delay: -0.45s;\n }\n\n &:nth-child(2) {\n border-color: transparent #9c27b0 transparent transparent;\n animation-delay: -0.3s;\n }\n\n &:nth-child(3) {\n border-color: transparent transparent #4caf50 transparent;\n animation-delay: -0.15s;\n }\n }\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 0.95rem;\n}\n\n//[_ngcontent-%COMP%] Error[_ngcontent-%COMP%] State\n.error-container[_ngcontent-%COMP%] {\n text-align: center;\n padding: 4rem 2rem;\n\n .error-icon {\n font-size: 3rem;\n color: #f44336;\n margin-bottom: 1rem;\n }\n\n .error-message {\n color: #374151;\n margin-bottom: 1.5rem;\n }\n\n .retry-button {\n @include button-base;\n background-color: #2196f3;\n color: white;\n }\n}\n\n//[_ngcontent-%COMP%] Modal[_ngcontent-%COMP%] Styles\n.modal-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.2s ease;\n}\n\n.modal-dialog[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 500px;\n width: 90%;\n max-height: 90vh;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideUp 0.3s ease;\n\n &.modal-large {\n max-width: 800px;\n }\n}\n\n.modal-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.5rem;\n border-bottom: 1px solid #e5e7eb;\n\n .modal-title {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 1.25rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0;\n }\n\n .modal-close {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1.25rem;\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #374151;\n }\n }\n}\n\n.modal-body[_ngcontent-%COMP%] {\n padding: 1.5rem;\n max-height: 60vh;\n overflow-y: auto;\n\n .modal-description {\n color: #374151;\n margin: 0 0 1.5rem 0;\n }\n}\n\n.modal-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1.5rem;\n border-top: 1px solid #e5e7eb;\n background: #f9fafb;\n}\n\n.permission-editor[_ngcontent-%COMP%] {\n padding: 2rem;\n background: #f3f4f6;\n border-radius: 8px;\n text-align: center;\n\n .coming-soon {\n color: #6b7280;\n margin: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n }\n}\n\n//[_ngcontent-%COMP%] Animations\n@keyframes[_ngcontent-%COMP%] fadeIn[_ngcontent-%COMP%] {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes _ngcontent-%COMP%_slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 800px;\n }\n}\n\n//[_ngcontent-%COMP%] Edit[_ngcontent-%COMP%] Button[_ngcontent-%COMP%] Styles\n.btn-edit[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: white;\n color: #666666;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.2);\n }\n \n &:active {\n transform: translateY(0);\n }\n}"] });
626
633
  }
627
634
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityPermissionsComponent, [{
628
635
  type: Component,
629
- args: [{ selector: 'mj-entity-permissions', standalone: true, imports: [CommonModule, FormsModule, SharedSettingsModule, PermissionDialogComponent], template: "<div class=\"entity-permissions-container\">\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <div class=\"mj-view-toggle\">\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-th\"></i>\n </button>\n </div>\n <button class=\"mj-btn mj-btn-secondary\" (click)=\"refreshData()\" [disabled]=\"isLoading\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n\n <!-- Stats Cards -->\n <div class=\"mj-grid mj-grid-4\">\n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-total\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.totalEntities }}</div>\n <div class=\"stat-label\">Total Entities</div>\n </div>\n </div>\n \n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-public\">\n <i class=\"fa-solid fa-globe\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.publicEntities }}</div>\n <div class=\"stat-label\">Public Entities</div>\n </div>\n </div>\n \n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-restricted\">\n <i class=\"fa-solid fa-lock\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.restrictedEntities }}</div>\n <div class=\"stat-label\">Restricted Entities</div>\n </div>\n </div>\n \n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-permissions\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.totalPermissions }}</div>\n <div class=\"stat-label\">Total Permissions</div>\n </div>\n </div>\n </div>\n\n <!-- Filters Section -->\n <div class=\"filters-section\">\n <div class=\"filters-row\">\n <!-- Entity Search -->\n <div class=\"mj-search\">\n <i class=\"fa-solid fa-search mj-search-icon\"></i>\n <input \n type=\"text\" \n class=\"mj-search-input\" \n placeholder=\"Search entities by name or description...\"\n (input)=\"onSearchChange($event)\"\n [value]=\"filters$.value.entitySearch\"\n />\n </div>\n \n <!-- Access Level Filter -->\n <div class=\"mj-filter-group\">\n <label class=\"mj-filter-label\">Access Level</label>\n <div class=\"mj-filter-buttons\">\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'all'\"\n (click)=\"onAccessLevelChange('all')\"\n >\n All\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'public'\"\n (click)=\"onAccessLevelChange('public')\"\n >\n Public\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'restricted'\"\n (click)=\"onAccessLevelChange('restricted')\"\n >\n Restricted\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'custom'\"\n (click)=\"onAccessLevelChange('custom')\"\n >\n Custom\n </button>\n </div>\n </div>\n \n <!-- Role Filter -->\n <div class=\"mj-filter-group\">\n <label class=\"mj-filter-label\">Filter by Role</label>\n <select class=\"mj-select\" (change)=\"onRoleFilterChange($event)\">\n <option value=\"\">All Roles</option>\n @for (role of roles; track role.ID) {\n <option [value]=\"role.ID\">{{ role.Name }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">Loading entity permissions...</div>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !isLoading) {\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"fa-solid fa-exclamation-triangle error-icon\"></i>\n <p class=\"error-message\">{{ error }}</p>\n <button class=\"mj-btn mj-btn-primary\" (click)=\"loadInitialData()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Try Again\n </button>\n </div>\n </div>\n }\n\n <!-- Content Area -->\n @if (!isLoading && !error) {\n <div class=\"content-area\">\n @if (viewMode === 'list') {\n <!-- List View -->\n <div class=\"entities-list\">\n @for (ea of filteredEntityAccess; track ea.entity.ID) {\n <div class=\"entity-card\" [class.expanded]=\"isEntityExpanded(ea.entity.ID)\">\n <div class=\"entity-header\" (click)=\"toggleEntityExpansion(ea.entity.ID)\">\n <div class=\"entity-info\">\n <div class=\"entity-icon-wrapper\">\n <i class=\"fa-solid fa-table\"></i>\n </div>\n <div class=\"entity-details\">\n <h3 class=\"entity-name\">{{ ea.entity.Name }}</h3>\n <p class=\"entity-description\">{{ ea.entity.Description || 'No description available' }}</p>\n </div>\n </div>\n \n <div class=\"entity-meta\">\n <span class=\"access-badge\" [class]=\"getAccessLevelClass(ea)\">\n <i [class]=\"getAccessLevelClass(ea) === 'access-public' ? 'fa-solid fa-globe' : \n getAccessLevelClass(ea) === 'access-restricted' ? 'fa-solid fa-lock' : \n 'fa-solid fa-key'\"></i>\n {{ getAccessLevelLabel(ea) }}\n </span>\n <button \n type=\"button\"\n class=\"btn-edit\" \n (click)=\"editEntityPermissions(ea); $event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n title=\"Edit Permissions\"\n >\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"expand-btn\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n </div>\n </div>\n \n @if (isEntityExpanded(ea.entity.ID)) {\n <div class=\"entity-content\">\n @if (ea.permissions.length > 0) {\n <div class=\"permissions-grid\">\n <div class=\"permissions-header\">\n <span class=\"role-header\">Role</span>\n <span class=\"permission-header\">Create</span>\n <span class=\"permission-header\">Read</span>\n <span class=\"permission-header\">Update</span>\n <span class=\"permission-header\">Delete</span>\n </div>\n @for (roleId of ea.rolePermissions.keys(); track roleId) {\n <div class=\"permission-row\">\n <span class=\"role-name\">{{ getRoleName(roleId) }}</span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canCreate') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canRead') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canUpdate') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canDelete') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n </div>\n }\n </div>\n } @else {\n <p class=\"no-permissions\">\n @if (ea.isPublic) {\n This entity is publicly accessible by all users.\n } @else {\n No specific role permissions configured. Access is restricted to system administrators.\n }\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- Grid View -->\n <div class=\"entities-grid\">\n @for (ea of filteredEntityAccess; track ea.entity.ID) {\n <div class=\"entity-grid-card\" [class]=\"getAccessLevelClass(ea)\">\n <div class=\"grid-card-header\">\n <i class=\"fa-solid fa-table\"></i>\n <button \n type=\"button\"\n class=\"btn-edit\" \n (click)=\"editEntityPermissions(ea)\"\n title=\"Edit Permissions\"\n >\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n </div>\n <h4 class=\"grid-card-title\">{{ ea.entity.Name }}</h4>\n <p class=\"grid-card-description\">{{ ea.entity.Description || 'No description' }}</p>\n <div class=\"grid-card-footer\">\n <span class=\"access-label\">\n <i [class]=\"getAccessLevelClass(ea) === 'access-public' ? 'fa-solid fa-globe' : \n getAccessLevelClass(ea) === 'access-restricted' ? 'fa-solid fa-lock' : \n 'fa-solid fa-key'\"></i>\n {{ getAccessLevelLabel(ea) }}\n </span>\n @if (ea.permissions.length > 0) {\n <span class=\"permission-count\">\n {{ ea.permissions.length }} permission{{ ea.permissions.length === 1 ? '' : 's' }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n \n @if (filteredEntityAccess.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-key empty-icon\"></i>\n <p class=\"empty-text\">No entities found</p>\n <p class=\"empty-subtext\">Try adjusting your filters to see more results</p>\n </div>\n }\n </div>\n }\n\n <!-- Permission Edit Dialog -->\n <mj-permission-dialog\n [visible]=\"showPermissionDialog\"\n [data]=\"permissionDialogData\"\n (result)=\"onPermissionDialogResult($event)\"\n ></mj-permission-dialog>\n</div>", styles: ["@import '../shared/styles/variables';\n@import '../shared/styles/mixins';\n\n.entity-permissions-container {\n @include scrollable-container;\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n// Action Buttons\n.action-buttons {\n display: flex;\n gap: 0.75rem;\n justify-content: space-between;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n}\n\n.view-toggle {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n// Buttons\n.btn-primary {\n @include button-base;\n background-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3);\n }\n}\n\n.btn-secondary {\n @include button-base;\n background-color: #ffffff;\n color: #374151;\n border: 1px solid #e5e7eb;\n \n &:hover {\n background-color: #f9fafb;\n border-color: #2196f3;\n color: #2196f3;\n }\n}\n\n// Stats Grid\n.stats-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n width: 100%;\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 1rem;\n }\n}\n\n.stat-card {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n display: flex;\n margin-right: 10px;\n align-items: center;\n gap: 1rem;\n transition: all 0.3s ease;\n min-width: 0; // Prevent grid blowout\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n}\n\n.stat-icon {\n width: 60px;\n height: 60px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n\n &-total {\n background: rgba(33, 150, 243, 0.1);\n color: #2196f3;\n }\n\n &-public {\n background: rgba(76, 175, 80, 0.1);\n color: #4caf50;\n }\n\n &-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n }\n\n &-permissions {\n background: rgba(156, 39, 176, 0.1);\n color: #9c27b0;\n }\n}\n\n.stat-content {\n flex: 1;\n\n .stat-value {\n font-size: 2rem;\n font-weight: 700;\n color: #1f2937;\n line-height: 1;\n }\n\n .stat-label {\n color: #6b7280;\n font-size: 0.875rem;\n margin-top: 0.25rem;\n }\n}\n\n// Filters Section\n.filters-section {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filters-row {\n display: flex;\n gap: 1.5rem;\n align-items: flex-end;\n flex-wrap: wrap;\n}\n\n.search-container {\n flex: 1;\n min-width: 250px;\n position: relative;\n\n .search-icon {\n position: absolute;\n left: 1rem;\n top: 50%;\n transform: translateY(-50%);\n color: #6b7280;\n font-size: 1rem;\n }\n\n .search-input {\n width: 100%;\n padding: 0.75rem 1rem 0.75rem 2.75rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n.filter-group {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n\n .filter-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #374151;\n }\n\n .filter-buttons {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n }\n\n .filter-btn {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n font-weight: 500;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n }\n\n .filter-select {\n padding: 0.75rem 1rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n background: white;\n cursor: pointer;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n// Content Area\n.content-area {\n @include scrollable-content;\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n padding: 1.5rem;\n}\n\n// List View\n.entities-list {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n max-height: calc(100vh - 450px); // Dynamic height\n overflow-y: auto;\n padding-right: 0.5rem; // Space for scrollbar\n}\n\n.entity-card {\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.3s ease;\n\n &:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n\n &.expanded {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n \n .expand-btn i {\n transform: rotate(180deg);\n }\n }\n}\n\n.entity-header {\n padding: 1.5rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n background: #f9fafb;\n transition: background-color 0.2s;\n\n &:hover {\n background: #f3f4f6;\n }\n}\n\n.entity-info {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex: 1;\n}\n\n.entity-icon-wrapper {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: rgba(33, 150, 243, 0.1);\n display: flex;\n align-items: center;\n justify-content: center;\n color: #2196f3;\n font-size: 1.25rem;\n}\n\n.entity-details {\n flex: 1;\n\n .entity-name {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.25rem 0;\n }\n\n .entity-description {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0;\n }\n}\n\n.entity-meta {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.access-badge {\n padding: 0.375rem 0.75rem;\n border-radius: 20px;\n font-size: 0.75rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n\n &.access-public {\n background: rgba(76, 175, 80, 0.1);\n color: #388e3c;\n }\n\n &.access-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #d32f2f;\n }\n\n &.access-custom {\n background: rgba(156, 39, 176, 0.1);\n color: #7b1fa2;\n }\n}\n\n.action-btn {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n.expand-btn {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n cursor: pointer;\n transition: all 0.2s;\n\n i {\n transition: transform 0.3s ease;\n }\n}\n\n// Entity Content\n.entity-content {\n padding: 1.5rem;\n background: white;\n border-top: 1px solid #e5e7eb;\n animation: slideDown 0.3s ease-out;\n}\n\n.permissions-grid {\n background: #f9fafb;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.permissions-header {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n background: #e5e7eb;\n font-weight: 600;\n color: #374151;\n font-size: 0.875rem;\n}\n\n.permission-row {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n border-bottom: 1px solid #e5e7eb;\n transition: background-color 0.2s;\n\n &:hover {\n background: white;\n }\n\n &:last-child {\n border-bottom: none;\n }\n}\n\n.role-header, .permission-header {\n text-align: left;\n}\n\n.role-name {\n font-weight: 500;\n color: #1f2937;\n}\n\n.permission-cell {\n text-align: center;\n}\n\n.text-success {\n color: #4caf50;\n}\n\n.text-muted {\n color: #d1d5db;\n}\n\n.no-permissions {\n color: #6b7280;\n font-size: 0.875rem;\n margin: 0;\n}\n\n// Grid View\n.entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n}\n\n.entity-grid-card {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n padding: 1.5rem;\n transition: all 0.3s ease;\n position: relative;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n\n &.access-public {\n border-left: 4px solid #4caf50;\n }\n\n &.access-restricted {\n border-left: 4px solid #f44336;\n }\n\n &.access-custom {\n border-left: 4px solid #9c27b0;\n }\n}\n\n.grid-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n color: #2196f3;\n}\n\n.edit-btn {\n padding: 0.375rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #2196f3;\n }\n}\n\n.grid-card-title {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.5rem 0;\n}\n\n.grid-card-description {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0 0 1rem 0;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.grid-card-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 0.875rem;\n}\n\n.access-label {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-weight: 500;\n}\n\n.permission-count {\n color: #6b7280;\n}\n\n// Empty State\n.empty-state {\n text-align: center;\n padding: 4rem 2rem;\n\n .empty-icon {\n font-size: 4rem;\n color: #e5e7eb;\n margin-bottom: 1rem;\n }\n\n .empty-text {\n font-size: 1.25rem;\n font-weight: 600;\n color: #374151;\n margin: 0 0 0.5rem 0;\n }\n\n .empty-subtext {\n color: #6b7280;\n margin: 0;\n }\n}\n\n// Loading State\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem 2rem;\n}\n\n.loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n margin-bottom: 1rem;\n\n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1.5s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n\n &:nth-child(1) {\n border-color: #2196f3 transparent transparent transparent;\n animation-delay: -0.45s;\n }\n\n &:nth-child(2) {\n border-color: transparent #9c27b0 transparent transparent;\n animation-delay: -0.3s;\n }\n\n &:nth-child(3) {\n border-color: transparent transparent #4caf50 transparent;\n animation-delay: -0.15s;\n }\n }\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text {\n color: #6b7280;\n font-size: 0.95rem;\n}\n\n// Error State\n.error-container {\n text-align: center;\n padding: 4rem 2rem;\n\n .error-icon {\n font-size: 3rem;\n color: #f44336;\n margin-bottom: 1rem;\n }\n\n .error-message {\n color: #374151;\n margin-bottom: 1.5rem;\n }\n\n .retry-button {\n @include button-base;\n background-color: #2196f3;\n color: white;\n }\n}\n\n// Modal Styles\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.2s ease;\n}\n\n.modal-dialog {\n background: white;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 500px;\n width: 90%;\n max-height: 90vh;\n overflow: hidden;\n animation: slideUp 0.3s ease;\n\n &.modal-large {\n max-width: 800px;\n }\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.5rem;\n border-bottom: 1px solid #e5e7eb;\n\n .modal-title {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 1.25rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0;\n }\n\n .modal-close {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1.25rem;\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #374151;\n }\n }\n}\n\n.modal-body {\n padding: 1.5rem;\n max-height: 60vh;\n overflow-y: auto;\n\n .modal-description {\n color: #374151;\n margin: 0 0 1.5rem 0;\n }\n}\n\n.modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1.5rem;\n border-top: 1px solid #e5e7eb;\n background: #f9fafb;\n}\n\n.permission-editor {\n padding: 2rem;\n background: #f3f4f6;\n border-radius: 8px;\n text-align: center;\n\n .coming-soon {\n color: #6b7280;\n margin: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n }\n}\n\n// Animations\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 800px;\n }\n}\n\n// Edit Button Styles\n.btn-edit {\n width: 36px;\n height: 36px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: white;\n color: #666666;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.2);\n }\n \n &:active {\n transform: translateY(0);\n }\n}"] }]
636
+ args: [{ selector: 'mj-entity-permissions', standalone: true, imports: [
637
+ CommonModule,
638
+ FormsModule,
639
+ SharedSettingsModule,
640
+ PermissionDialogComponent
641
+ ], template: "<div class=\"entity-permissions-container\">\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <div class=\"mj-view-toggle\">\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-th\"></i>\n </button>\n </div>\n <button class=\"mj-btn mj-btn-secondary\" (click)=\"refreshData()\" [disabled]=\"isLoading\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n\n <!-- Stats Cards -->\n <div class=\"mj-grid mj-grid-4\">\n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-total\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.totalEntities }}</div>\n <div class=\"stat-label\">Total Entities</div>\n </div>\n </div>\n \n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-public\">\n <i class=\"fa-solid fa-globe\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.publicEntities }}</div>\n <div class=\"stat-label\">Public Entities</div>\n </div>\n </div>\n \n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-restricted\">\n <i class=\"fa-solid fa-lock\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.restrictedEntities }}</div>\n <div class=\"stat-label\">Restricted Entities</div>\n </div>\n </div>\n \n <div class=\"mj-card\">\n <div class=\"stat-icon stat-icon-permissions\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.totalPermissions }}</div>\n <div class=\"stat-label\">Total Permissions</div>\n </div>\n </div>\n </div>\n\n <!-- Filters Section -->\n <div class=\"filters-section\">\n <div class=\"filters-row\">\n <!-- Entity Search -->\n <div class=\"mj-search\">\n <i class=\"fa-solid fa-search mj-search-icon\"></i>\n <input \n type=\"text\" \n class=\"mj-search-input\" \n placeholder=\"Search entities by name or description...\"\n (input)=\"onSearchChange($event)\"\n [value]=\"filters$.value.entitySearch\"\n />\n </div>\n \n <!-- Access Level Filter -->\n <div class=\"mj-filter-group\">\n <label class=\"mj-filter-label\">Access Level</label>\n <div class=\"mj-filter-buttons\">\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'all'\"\n (click)=\"onAccessLevelChange('all')\"\n >\n All\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'public'\"\n (click)=\"onAccessLevelChange('public')\"\n >\n Public\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'restricted'\"\n (click)=\"onAccessLevelChange('restricted')\"\n >\n Restricted\n </button>\n <button \n class=\"mj-btn mj-btn-ghost\"\n [class.mj-btn-primary]=\"filters$.value.accessLevel === 'custom'\"\n (click)=\"onAccessLevelChange('custom')\"\n >\n Custom\n </button>\n </div>\n </div>\n \n <!-- Role Filter -->\n <div class=\"mj-filter-group\">\n <label class=\"mj-filter-label\">Filter by Role</label>\n <select class=\"mj-select\" (change)=\"onRoleFilterChange($event)\">\n <option value=\"\">All Roles</option>\n @for (role of roles; track role.ID) {\n <option [value]=\"role.ID\">{{ role.Name }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">Loading entity permissions...</div>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !isLoading) {\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"fa-solid fa-exclamation-triangle error-icon\"></i>\n <p class=\"error-message\">{{ error }}</p>\n <button class=\"mj-btn mj-btn-primary\" (click)=\"loadInitialData()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Try Again\n </button>\n </div>\n </div>\n }\n\n <!-- Content Area -->\n @if (!isLoading && !error) {\n <div class=\"content-area\">\n @if (viewMode === 'list') {\n <!-- List View -->\n <div class=\"entities-list\">\n @for (ea of filteredEntityAccess; track ea.entity.ID) {\n <div class=\"entity-card\" [class.expanded]=\"isEntityExpanded(ea.entity.ID)\">\n <div class=\"entity-header\" (click)=\"toggleEntityExpansion(ea.entity.ID)\">\n <div class=\"entity-info\">\n <div class=\"entity-icon-wrapper\">\n <i class=\"fa-solid fa-table\"></i>\n </div>\n <div class=\"entity-details\">\n <h3 class=\"entity-name\">{{ ea.entity.Name }}</h3>\n <p class=\"entity-description\">{{ ea.entity.Description || 'No description available' }}</p>\n </div>\n </div>\n \n <div class=\"entity-meta\">\n <span class=\"access-badge\" [class]=\"getAccessLevelClass(ea)\">\n <i [class]=\"getAccessLevelClass(ea) === 'access-public' ? 'fa-solid fa-globe' : \n getAccessLevelClass(ea) === 'access-restricted' ? 'fa-solid fa-lock' : \n 'fa-solid fa-key'\"></i>\n {{ getAccessLevelLabel(ea) }}\n </span>\n <button \n type=\"button\"\n class=\"btn-edit\" \n (click)=\"editEntityPermissions(ea); $event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n title=\"Edit Permissions\"\n >\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"expand-btn\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n </div>\n </div>\n \n @if (isEntityExpanded(ea.entity.ID)) {\n <div class=\"entity-content\">\n @if (ea.permissions.length > 0) {\n <div class=\"permissions-grid\">\n <div class=\"permissions-header\">\n <span class=\"role-header\">Role</span>\n <span class=\"permission-header\">Create</span>\n <span class=\"permission-header\">Read</span>\n <span class=\"permission-header\">Update</span>\n <span class=\"permission-header\">Delete</span>\n </div>\n @for (roleId of ea.rolePermissions.keys(); track roleId) {\n <div class=\"permission-row\">\n <span class=\"role-name\">{{ getRoleName(roleId) }}</span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canCreate') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canRead') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canUpdate') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n <span class=\"permission-cell\">\n <i [class]=\"hasPermission(ea, roleId, 'canDelete') ? \n 'fa-solid fa-check text-success' : \n 'fa-solid fa-times text-muted'\"></i>\n </span>\n </div>\n }\n </div>\n } @else {\n <p class=\"no-permissions\">\n @if (ea.isPublic) {\n This entity is publicly accessible by all users.\n } @else {\n No specific role permissions configured. Access is restricted to system administrators.\n }\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- Grid View -->\n <div class=\"entities-grid\">\n @for (ea of filteredEntityAccess; track ea.entity.ID) {\n <div class=\"entity-grid-card\" [class]=\"getAccessLevelClass(ea)\">\n <div class=\"grid-card-header\">\n <i class=\"fa-solid fa-table\"></i>\n <button \n type=\"button\"\n class=\"btn-edit\" \n (click)=\"editEntityPermissions(ea)\"\n title=\"Edit Permissions\"\n >\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n </div>\n <h4 class=\"grid-card-title\">{{ ea.entity.Name }}</h4>\n <p class=\"grid-card-description\">{{ ea.entity.Description || 'No description' }}</p>\n <div class=\"grid-card-footer\">\n <span class=\"access-label\">\n <i [class]=\"getAccessLevelClass(ea) === 'access-public' ? 'fa-solid fa-globe' : \n getAccessLevelClass(ea) === 'access-restricted' ? 'fa-solid fa-lock' : \n 'fa-solid fa-key'\"></i>\n {{ getAccessLevelLabel(ea) }}\n </span>\n @if (ea.permissions.length > 0) {\n <span class=\"permission-count\">\n {{ ea.permissions.length }} permission{{ ea.permissions.length === 1 ? '' : 's' }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n \n @if (filteredEntityAccess.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-key empty-icon\"></i>\n <p class=\"empty-text\">No entities found</p>\n <p class=\"empty-subtext\">Try adjusting your filters to see more results</p>\n </div>\n }\n </div>\n }\n\n <!-- Permission Edit Dialog -->\n <mj-permission-dialog\n [visible]=\"showPermissionDialog\"\n [data]=\"permissionDialogData\"\n (result)=\"onPermissionDialogResult($event)\"\n ></mj-permission-dialog>\n</div>", styles: ["@import '../shared/styles/variables';\n@import '../shared/styles/mixins';\n\n.entity-permissions-container {\n @include scrollable-container;\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n// Action Buttons\n.action-buttons {\n display: flex;\n gap: 0.75rem;\n justify-content: space-between;\n margin-bottom: 1.5rem;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n}\n\n.view-toggle {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n// Buttons\n.btn-primary {\n @include button-base;\n background-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3);\n }\n}\n\n.btn-secondary {\n @include button-base;\n background-color: #ffffff;\n color: #374151;\n border: 1px solid #e5e7eb;\n \n &:hover {\n background-color: #f9fafb;\n border-color: #2196f3;\n color: #2196f3;\n }\n}\n\n// Stats Grid\n.stats-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n width: 100%;\n\n @media (max-width: 768px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 1rem;\n }\n}\n\n.stat-card {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n display: flex;\n margin-right: 10px;\n align-items: center;\n gap: 1rem;\n transition: all 0.3s ease;\n min-width: 0; // Prevent grid blowout\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n}\n\n.stat-icon {\n width: 60px;\n height: 60px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n\n &-total {\n background: rgba(33, 150, 243, 0.1);\n color: #2196f3;\n }\n\n &-public {\n background: rgba(76, 175, 80, 0.1);\n color: #4caf50;\n }\n\n &-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n }\n\n &-permissions {\n background: rgba(156, 39, 176, 0.1);\n color: #9c27b0;\n }\n}\n\n.stat-content {\n flex: 1;\n\n .stat-value {\n font-size: 2rem;\n font-weight: 700;\n color: #1f2937;\n line-height: 1;\n }\n\n .stat-label {\n color: #6b7280;\n font-size: 0.875rem;\n margin-top: 0.25rem;\n }\n}\n\n// Filters Section\n.filters-section {\n background: white;\n border-radius: 12px;\n padding: 1.5rem;\n margin-bottom: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filters-row {\n display: flex;\n gap: 1.5rem;\n align-items: flex-end;\n flex-wrap: wrap;\n}\n\n.search-container {\n flex: 1;\n min-width: 250px;\n position: relative;\n\n .search-icon {\n position: absolute;\n left: 1rem;\n top: 50%;\n transform: translateY(-50%);\n color: #6b7280;\n font-size: 1rem;\n }\n\n .search-input {\n width: 100%;\n padding: 0.75rem 1rem 0.75rem 2.75rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n.filter-group {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n\n .filter-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #374151;\n }\n\n .filter-buttons {\n display: flex;\n background: #f3f4f6;\n border-radius: 8px;\n padding: 4px;\n }\n\n .filter-btn {\n padding: 0.5rem 1rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n font-weight: 500;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n color: #374151;\n }\n\n &.active {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n }\n\n .filter-select {\n padding: 0.75rem 1rem;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 0.95rem;\n background: white;\n cursor: pointer;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n }\n}\n\n// Content Area\n.content-area {\n @include scrollable-content;\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n padding: 1.5rem;\n}\n\n// List View\n.entities-list {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n max-height: calc(100vh - 450px); // Dynamic height\n overflow-y: auto;\n padding-right: 0.5rem; // Space for scrollbar\n}\n\n.entity-card {\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n overflow: hidden;\n transition: all 0.3s ease;\n\n &:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n\n &.expanded {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n \n .expand-btn i {\n transform: rotate(180deg);\n }\n }\n}\n\n.entity-header {\n padding: 1.5rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n background: #f9fafb;\n transition: background-color 0.2s;\n\n &:hover {\n background: #f3f4f6;\n }\n}\n\n.entity-info {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex: 1;\n}\n\n.entity-icon-wrapper {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: rgba(33, 150, 243, 0.1);\n display: flex;\n align-items: center;\n justify-content: center;\n color: #2196f3;\n font-size: 1.25rem;\n}\n\n.entity-details {\n flex: 1;\n\n .entity-name {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.25rem 0;\n }\n\n .entity-description {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0;\n }\n}\n\n.entity-meta {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.access-badge {\n padding: 0.375rem 0.75rem;\n border-radius: 20px;\n font-size: 0.75rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n\n &.access-public {\n background: rgba(76, 175, 80, 0.1);\n color: #388e3c;\n }\n\n &.access-restricted {\n background: rgba(244, 67, 54, 0.1);\n color: #d32f2f;\n }\n\n &.access-custom {\n background: rgba(156, 39, 176, 0.1);\n color: #7b1fa2;\n }\n}\n\n.action-btn {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: white;\n color: #2196f3;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n}\n\n.expand-btn {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1rem;\n cursor: pointer;\n transition: all 0.2s;\n\n i {\n transition: transform 0.3s ease;\n }\n}\n\n// Entity Content\n.entity-content {\n padding: 1.5rem;\n background: white;\n border-top: 1px solid #e5e7eb;\n animation: slideDown 0.3s ease-out;\n}\n\n.permissions-grid {\n background: #f9fafb;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.permissions-header {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n background: #e5e7eb;\n font-weight: 600;\n color: #374151;\n font-size: 0.875rem;\n}\n\n.permission-row {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr 1fr;\n gap: 1rem;\n padding: 1rem;\n border-bottom: 1px solid #e5e7eb;\n transition: background-color 0.2s;\n\n &:hover {\n background: white;\n }\n\n &:last-child {\n border-bottom: none;\n }\n}\n\n.role-header, .permission-header {\n text-align: left;\n}\n\n.role-name {\n font-weight: 500;\n color: #1f2937;\n}\n\n.permission-cell {\n text-align: center;\n}\n\n.text-success {\n color: #4caf50;\n}\n\n.text-muted {\n color: #d1d5db;\n}\n\n.no-permissions {\n color: #6b7280;\n font-size: 0.875rem;\n margin: 0;\n}\n\n// Grid View\n.entities-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n}\n\n.entity-grid-card {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n padding: 1.5rem;\n transition: all 0.3s ease;\n position: relative;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n }\n\n &.access-public {\n border-left: 4px solid #4caf50;\n }\n\n &.access-restricted {\n border-left: 4px solid #f44336;\n }\n\n &.access-custom {\n border-left: 4px solid #9c27b0;\n }\n}\n\n.grid-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n color: #2196f3;\n}\n\n.edit-btn {\n padding: 0.375rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 0.875rem;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #2196f3;\n }\n}\n\n.grid-card-title {\n font-size: 1.125rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 0.5rem 0;\n}\n\n.grid-card-description {\n font-size: 0.875rem;\n color: #6b7280;\n margin: 0 0 1rem 0;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.grid-card-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 0.875rem;\n}\n\n.access-label {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-weight: 500;\n}\n\n.permission-count {\n color: #6b7280;\n}\n\n// Empty State\n.empty-state {\n text-align: center;\n padding: 4rem 2rem;\n\n .empty-icon {\n font-size: 4rem;\n color: #e5e7eb;\n margin-bottom: 1rem;\n }\n\n .empty-text {\n font-size: 1.25rem;\n font-weight: 600;\n color: #374151;\n margin: 0 0 0.5rem 0;\n }\n\n .empty-subtext {\n color: #6b7280;\n margin: 0;\n }\n}\n\n// Loading State\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem 2rem;\n}\n\n.loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n margin-bottom: 1rem;\n\n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1.5s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n\n &:nth-child(1) {\n border-color: #2196f3 transparent transparent transparent;\n animation-delay: -0.45s;\n }\n\n &:nth-child(2) {\n border-color: transparent #9c27b0 transparent transparent;\n animation-delay: -0.3s;\n }\n\n &:nth-child(3) {\n border-color: transparent transparent #4caf50 transparent;\n animation-delay: -0.15s;\n }\n }\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text {\n color: #6b7280;\n font-size: 0.95rem;\n}\n\n// Error State\n.error-container {\n text-align: center;\n padding: 4rem 2rem;\n\n .error-icon {\n font-size: 3rem;\n color: #f44336;\n margin-bottom: 1rem;\n }\n\n .error-message {\n color: #374151;\n margin-bottom: 1.5rem;\n }\n\n .retry-button {\n @include button-base;\n background-color: #2196f3;\n color: white;\n }\n}\n\n// Modal Styles\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.2s ease;\n}\n\n.modal-dialog {\n background: white;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 500px;\n width: 90%;\n max-height: 90vh;\n overflow: hidden;\n animation: slideUp 0.3s ease;\n\n &.modal-large {\n max-width: 800px;\n }\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.5rem;\n border-bottom: 1px solid #e5e7eb;\n\n .modal-title {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 1.25rem;\n font-weight: 600;\n color: #1f2937;\n margin: 0;\n }\n\n .modal-close {\n padding: 0.5rem;\n border: none;\n background: transparent;\n color: #6b7280;\n font-size: 1.25rem;\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n\n &:hover {\n background: #f3f4f6;\n color: #374151;\n }\n }\n}\n\n.modal-body {\n padding: 1.5rem;\n max-height: 60vh;\n overflow-y: auto;\n\n .modal-description {\n color: #374151;\n margin: 0 0 1.5rem 0;\n }\n}\n\n.modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1.5rem;\n border-top: 1px solid #e5e7eb;\n background: #f9fafb;\n}\n\n.permission-editor {\n padding: 2rem;\n background: #f3f4f6;\n border-radius: 8px;\n text-align: center;\n\n .coming-soon {\n color: #6b7280;\n margin: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n }\n}\n\n// Animations\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes slideUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 800px;\n }\n}\n\n// Edit Button Styles\n.btn-edit {\n width: 36px;\n height: 36px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: white;\n color: #666666;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.2);\n }\n \n &:active {\n transform: translateY(0);\n }\n}"] }]
630
642
  }], () => [], null); })();
631
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityPermissionsComponent, { className: "EntityPermissionsComponent", filePath: "src/lib/entity-permissions/entity-permissions.component.ts", lineNumber: 45 }); })();
643
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityPermissionsComponent, { className: "EntityPermissionsComponent", filePath: "src/lib/entity-permissions/entity-permissions.component.ts", lineNumber: 55 }); })();
632
644
  //# sourceMappingURL=entity-permissions.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-permissions.component.js","sourceRoot":"","sources":["../../../src/lib/entity-permissions/entity-permissions.component.ts","../../../src/lib/entity-permissions/entity-permissions.component.html"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-permissions.component.js","sourceRoot":"","sources":["../../../src/lib/entity-permissions/entity-permissions.component.ts","../../../src/lib/entity-permissions/entity-permissions.component.html"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/entity-permissions/permission-dialog/permission-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,SAAS,EACT,aAAa,EAKd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAiD,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;;AAGjG,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,mBAAmB,EAAE,sBAAsB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAQa,yBAA0B,YAAW,MAAM,EAAE,SAAS,EAAE,SAAS;IACnE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACzC,OAAO,UAAS;IACf,MAAM,uCAA8C;IAE9D,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAkB;IAE3B,cAAc,EAAE,SAAS,CAAC;IAC1B,SAAS,UAAS;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,eAAe,EAAE,eAAe,EAAE,CAAM;IACxC,cAAc,EAAE,UAAU,EAAE,CAAM;;IAMzC,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAkBzC,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,WAAW;IAMnB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAMvC,IAAW,UAAU,IAAI,OAAO,CAE/B;IAEM,gBAAgB,CAAC,cAAc,EAAE,eAAe,GAAG,OAAO;IAIjE,OAAO,CAAC,kBAAkB;IA8Cb,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBxD,oBAAoB,CAAC,cAAc,EAAE,eAAe,GAAG,IAAI;IAsBrD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAuBxB,kBAAkB;IAUzB,QAAQ,IAAI,IAAI;yCA9LZ,yBAAyB;2CAAzB,yBAAyB;CAiMrC"}
1
+ {"version":3,"file":"permission-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/entity-permissions/permission-dialog/permission-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAA8D,MAAM,eAAe,CAAC;AAEhL,OAAO,EAAiD,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;;AAGjG,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,mBAAmB,EAAE,sBAAsB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAQa,yBAA0B,YAAW,MAAM,EAAE,SAAS,EAAE,SAAS;IACnE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACzC,OAAO,UAAS;IACf,MAAM,uCAA8C;IAE9D,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAkB;IAE3B,cAAc,EAAE,SAAS,CAAC;IAC1B,SAAS,UAAS;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,eAAe,EAAE,eAAe,EAAE,CAAM;IACxC,cAAc,EAAE,UAAU,EAAE,CAAM;;IAMzC,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAkBzC,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,WAAW;IAMnB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAMvC,IAAW,UAAU,IAAI,OAAO,CAE/B;IAEM,gBAAgB,CAAC,cAAc,EAAE,eAAe,GAAG,OAAO;IAIjE,OAAO,CAAC,kBAAkB;IA2Cb,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBxD,oBAAoB,CAAC,cAAc,EAAE,eAAe,GAAG,IAAI;IAsBrD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBxB,kBAAkB;IAQzB,QAAQ,IAAI,IAAI;yCA1LZ,yBAAyB;2CAAzB,yBAAyB;CA6LrC"}
@@ -1,7 +1,7 @@
1
- import { Component, Input, Output, EventEmitter, inject, HostListener, ChangeDetectorRef, ViewEncapsulation, } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, inject, HostListener, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';
4
- import { Metadata } from '@memberjunction/global';
4
+ import { Metadata } from '@memberjunction/core';
5
5
  import { WindowModule } from '@progress/kendo-angular-dialog';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/common";
@@ -324,7 +324,7 @@ export class PermissionDialogComponent {
324
324
  }
325
325
  }
326
326
  get hasChanges() {
327
- return this.rolePermissions.some((rp) => rp.isNew || rp.entityPermission.Dirty);
327
+ return this.rolePermissions.some(rp => rp.isNew || rp.entityPermission.Dirty);
328
328
  }
329
329
  hasEntityChanges(rolePermission) {
330
330
  return rolePermission.isNew || rolePermission.entityPermission.Dirty;
@@ -340,27 +340,27 @@ export class PermissionDialogComponent {
340
340
  const existingRoleIds = new Set();
341
341
  // Process existing permissions
342
342
  for (const permission of this.data.existingPermissions) {
343
- const role = this.data.roles.find((r) => r.ID === permission.RoleID);
343
+ const role = this.data.roles.find(r => r.ID === permission.RoleID);
344
344
  if (role) {
345
345
  console.log(`Processing permission for role ${role.Name}:`, {
346
346
  canCreate: permission.CanCreate,
347
347
  canRead: permission.CanRead,
348
348
  canUpdate: permission.CanUpdate,
349
- canDelete: permission.CanDelete,
349
+ canDelete: permission.CanDelete
350
350
  });
351
351
  this.rolePermissions.push({
352
352
  roleId: role.ID,
353
353
  roleName: role.Name || '',
354
354
  entityPermission: permission,
355
- isNew: false,
355
+ isNew: false
356
356
  });
357
357
  existingRoleIds.add(role.ID);
358
358
  }
359
359
  }
360
360
  console.log('Loaded role permissions:', this.rolePermissions);
361
361
  // Set available roles (those not already configured)
362
- this.availableRoles = this.data.roles.filter((role) => !existingRoleIds.has(role.ID));
363
- console.log('Available roles for adding:', this.availableRoles.map((r) => r.Name));
362
+ this.availableRoles = this.data.roles.filter(role => !existingRoleIds.has(role.ID));
363
+ console.log('Available roles for adding:', this.availableRoles.map(r => r.Name));
364
364
  // Trigger change detection to update the UI
365
365
  this.cdr.detectChanges();
366
366
  }
@@ -379,16 +379,16 @@ export class PermissionDialogComponent {
379
379
  roleId: role.ID,
380
380
  roleName: role.Name || '',
381
381
  entityPermission: entityPermission,
382
- isNew: true,
382
+ isNew: true
383
383
  });
384
384
  // Remove from available roles
385
- this.availableRoles = this.availableRoles.filter((r) => r.ID !== role.ID);
385
+ this.availableRoles = this.availableRoles.filter(r => r.ID !== role.ID);
386
386
  this.cdr.detectChanges();
387
387
  }
388
388
  removeRolePermission(rolePermission) {
389
389
  // Add back to available roles if not new
390
390
  if (!rolePermission.isNew) {
391
- const role = this.data?.roles.find((r) => r.ID === rolePermission.roleId);
391
+ const role = this.data?.roles.find(r => r.ID === rolePermission.roleId);
392
392
  if (role) {
393
393
  this.availableRoles.push(role);
394
394
  this.availableRoles.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''));
@@ -396,14 +396,14 @@ export class PermissionDialogComponent {
396
396
  }
397
397
  else {
398
398
  // Add back to available roles
399
- const role = this.data?.roles.find((r) => r.ID === rolePermission.roleId);
399
+ const role = this.data?.roles.find(r => r.ID === rolePermission.roleId);
400
400
  if (role) {
401
401
  this.availableRoles.push(role);
402
402
  this.availableRoles.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''));
403
403
  }
404
404
  }
405
405
  // Remove from role permissions
406
- this.rolePermissions = this.rolePermissions.filter((rp) => rp.roleId !== rolePermission.roleId);
406
+ this.rolePermissions = this.rolePermissions.filter(rp => rp.roleId !== rolePermission.roleId);
407
407
  this.cdr.detectChanges();
408
408
  }
409
409
  async onSubmit() {
@@ -460,5 +460,5 @@ export class PermissionDialogComponent {
460
460
  type: HostListener,
461
461
  args: ['document:keydown.escape', ['$event']]
462
462
  }] }); })();
463
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PermissionDialogComponent, { className: "PermissionDialogComponent", filePath: "src/lib/entity-permissions/permission-dialog/permission-dialog.component.ts", lineNumber: 47 }); })();
463
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PermissionDialogComponent, { className: "PermissionDialogComponent", filePath: "src/lib/entity-permissions/permission-dialog/permission-dialog.component.ts", lineNumber: 34 }); })();
464
464
  //# sourceMappingURL=permission-dialog.component.js.map