cloud-ide-layout 1.0.49 → 1.0.51

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 (15) hide show
  1. package/fesm2022/{cloud-ide-layout-cloud-ide-layout-Dp5qc3C5.mjs → cloud-ide-layout-cloud-ide-layout-BT6krb0-.mjs} +14 -43
  2. package/fesm2022/cloud-ide-layout-cloud-ide-layout-BT6krb0-.mjs.map +1 -0
  3. package/fesm2022/{cloud-ide-layout-drawer-theme.component-BkX1xh6A.mjs → cloud-ide-layout-drawer-theme.component-DQxKNHV2.mjs} +2 -2
  4. package/fesm2022/{cloud-ide-layout-drawer-theme.component-BkX1xh6A.mjs.map → cloud-ide-layout-drawer-theme.component-DQxKNHV2.mjs.map} +1 -1
  5. package/fesm2022/{cloud-ide-layout-floating-entity-selection.component-BwrKdQB4.mjs → cloud-ide-layout-floating-entity-selection.component-Bk1F1fD4.mjs} +3 -3
  6. package/fesm2022/cloud-ide-layout-floating-entity-selection.component-Bk1F1fD4.mjs.map +1 -0
  7. package/fesm2022/{cloud-ide-layout-home-wrapper.component-DE5lpCxu.mjs → cloud-ide-layout-home-wrapper.component-nOJs_t7D.mjs} +3 -3
  8. package/fesm2022/cloud-ide-layout-home-wrapper.component-nOJs_t7D.mjs.map +1 -0
  9. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-CDIHnAIJ.mjs → cloud-ide-layout-sidedrawer-notes.component-CpXybU-I.mjs} +2 -2
  10. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-CDIHnAIJ.mjs.map → cloud-ide-layout-sidedrawer-notes.component-CpXybU-I.mjs.map} +1 -1
  11. package/fesm2022/cloud-ide-layout.mjs +1 -1
  12. package/package.json +1 -1
  13. package/fesm2022/cloud-ide-layout-cloud-ide-layout-Dp5qc3C5.mjs.map +0 -1
  14. package/fesm2022/cloud-ide-layout-floating-entity-selection.component-BwrKdQB4.mjs.map +0 -1
  15. package/fesm2022/cloud-ide-layout-home-wrapper.component-DE5lpCxu.mjs.map +0 -1
@@ -10,13 +10,12 @@ import { Title } from '@angular/platform-browser';
10
10
  import { CideEleFileManagerService, CideElementsService, CideEleFloatingContainerService, CideInputComponent, CideIconComponent, CideEleDropdownComponent, CideEleFileImageDirective, CideEleResizerDirective, TooltipDirective, CideSpinnerComponent, CideEleSkeletonLoaderComponent, CideEleFloatingContainerManagerComponent, CideEleGlobalNotificationsComponent, CideEleBreadcrumbComponent, CideEleButtonComponent } from 'cloud-ide-element';
11
11
  import * as i1 from '@angular/common';
12
12
  import { CommonModule, NgClass, NgFor, NgIf, isPlatformBrowser } from '@angular/common';
13
- import { FINANCIAL_YEAR_SERVICE_TOKEN, ACADEMIC_YEAR_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, authGuard } from 'cloud-ide-shared';
13
+ import { FINANCIAL_YEAR_SERVICE_TOKEN, ACADEMIC_YEAR_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, authGuard, ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
14
14
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
15
15
  import { trigger, state, transition, style, animate } from '@angular/animations';
16
16
  import { merge } from 'lodash';
17
17
  import * as i2$1 from '@angular/forms';
18
18
  import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
19
- import { CideCoreEntityManagementService } from 'cloud-ide-core';
20
19
 
21
20
  class CloudIdeLayoutService {
22
21
  constructor() { }
@@ -1267,7 +1266,7 @@ class CideLytFloatingEntitySelectionService {
1267
1266
  }
1268
1267
  try {
1269
1268
  // Use relative import to avoid circular dependency
1270
- const module = await import('./cloud-ide-layout-floating-entity-selection.component-BwrKdQB4.mjs');
1269
+ const module = await import('./cloud-ide-layout-floating-entity-selection.component-Bk1F1fD4.mjs');
1271
1270
  if (module.CideLytFloatingEntitySelectionComponent) {
1272
1271
  this.containerService.registerComponent('entity-selection-header', module.CideLytFloatingEntitySelectionComponent);
1273
1272
  console.log('✅ Entity selection component registered successfully');
@@ -1480,7 +1479,6 @@ class CideLytHeaderWrapperComponent {
1480
1479
  }
1481
1480
  ngAfterViewInit() {
1482
1481
  // No need to manually load file details - cideEleFileImage directive will handle it
1483
- console.log('Header component initialized - using cideEleFileImage directive for entity logo');
1484
1482
  }
1485
1483
  ngOnDestroy() {
1486
1484
  // Cleanup handled by takeUntilDestroyed
@@ -1496,11 +1494,10 @@ class CideLytHeaderWrapperComponent {
1496
1494
  */
1497
1495
  async onEntityNameClick() {
1498
1496
  try {
1499
- console.log('🏢 Opening entity selection floating container...');
1500
1497
  await this.floatingEntitySelectionService.show();
1501
1498
  }
1502
1499
  catch (error) {
1503
- console.error('❌ Error opening entity selection:', error);
1500
+ // Error handling
1504
1501
  }
1505
1502
  }
1506
1503
  /**
@@ -1553,15 +1550,12 @@ class CideLytHeaderWrapperComponent {
1553
1550
  if (response?.success && response.data) {
1554
1551
  this.financialYears.set(response.data);
1555
1552
  this.updateFinancialYearDropdown();
1556
- console.log('📊 Financial years loaded:', response.data);
1557
1553
  }
1558
1554
  else {
1559
- console.warn('⚠️ No financial year data received');
1560
1555
  this.financialYears.set([]);
1561
1556
  }
1562
1557
  },
1563
1558
  error: (error) => {
1564
- console.error('❌ Error loading financial years:', error);
1565
1559
  this.financialYears.set([]);
1566
1560
  }
1567
1561
  });
@@ -1577,15 +1571,12 @@ class CideLytHeaderWrapperComponent {
1577
1571
  if (response?.success && response.data) {
1578
1572
  this.academicYears.set(response.data);
1579
1573
  this.updateAcademicYearDropdown();
1580
- console.log('📚 Academic years loaded:', response.data);
1581
1574
  }
1582
1575
  else {
1583
- console.warn('⚠️ No academic year data received');
1584
1576
  this.academicYears.set([]);
1585
1577
  }
1586
1578
  },
1587
1579
  error: (error) => {
1588
- console.error('❌ Error loading academic years:', error);
1589
1580
  this.academicYears.set([]);
1590
1581
  }
1591
1582
  });
@@ -1631,13 +1622,11 @@ class CideLytHeaderWrapperComponent {
1631
1622
  * @param item The clicked dropdown item
1632
1623
  */
1633
1624
  onFinancialYearClick(item) {
1634
- console.log('📊 Financial year selected:', item);
1635
1625
  const selectedYear = this.financialYears().find(year => year._id === item.id);
1636
1626
  if (selectedYear) {
1637
1627
  this.currentFinancialYear.set(selectedYear);
1638
1628
  this.currentFinancialYearName.set(selectedYear.financial_year_name || 'FY');
1639
1629
  // TODO: Update app state or notify other components about the change
1640
- console.log('✅ Financial year changed to:', selectedYear);
1641
1630
  }
1642
1631
  }
1643
1632
  /**
@@ -1645,13 +1634,11 @@ class CideLytHeaderWrapperComponent {
1645
1634
  * @param item The clicked dropdown item
1646
1635
  */
1647
1636
  onAcademicYearClick(item) {
1648
- console.log('📚 Academic year selected:', item);
1649
1637
  const selectedYear = this.academicYears().find(year => year._id === item.id);
1650
1638
  if (selectedYear) {
1651
1639
  this.currentAcademicYear.set(selectedYear);
1652
1640
  this.currentAcademicYearName.set(selectedYear.academic_year_name || 'AY');
1653
1641
  // TODO: Update app state or notify other components about the change
1654
- console.log('✅ Academic year changed to:', selectedYear);
1655
1642
  }
1656
1643
  }
1657
1644
  /**
@@ -1659,7 +1646,6 @@ class CideLytHeaderWrapperComponent {
1659
1646
  * @param item The clicked dropdown item
1660
1647
  */
1661
1648
  onProfileClick(item) {
1662
- console.log('👤 Profile option clicked:', item);
1663
1649
  switch (item.id) {
1664
1650
  case 'profile':
1665
1651
  this.navigateToProfile();
@@ -1673,15 +1659,12 @@ class CideLytHeaderWrapperComponent {
1673
1659
  case 'logout':
1674
1660
  this.handleLogout();
1675
1661
  break;
1676
- default:
1677
- console.log('🔍 [HeaderComponent] Unknown profile option:', item.id);
1678
1662
  }
1679
1663
  }
1680
1664
  /**
1681
1665
  * Navigate to user profile page
1682
1666
  */
1683
1667
  navigateToProfile() {
1684
- console.log('🔍 [HeaderComponent] Navigating to profile...');
1685
1668
  // TODO: Implement profile navigation
1686
1669
  // this.router.navigate(['/profile']);
1687
1670
  }
@@ -1690,7 +1673,6 @@ class CideLytHeaderWrapperComponent {
1690
1673
  * @param item The clicked dropdown item
1691
1674
  */
1692
1675
  onMoreOptionsClick(item) {
1693
- console.log('🔍 [HeaderComponent] More options clicked:', item);
1694
1676
  switch (item.id) {
1695
1677
  case 'settings':
1696
1678
  this.navigateToSettings();
@@ -1701,15 +1683,12 @@ class CideLytHeaderWrapperComponent {
1701
1683
  case 'logout':
1702
1684
  this.handleLogout();
1703
1685
  break;
1704
- default:
1705
- console.log('🔍 [HeaderComponent] Unknown option:', item.id);
1706
1686
  }
1707
1687
  }
1708
1688
  /**
1709
1689
  * Navigate to settings page
1710
1690
  */
1711
1691
  navigateToSettings() {
1712
- console.log('🔍 [HeaderComponent] Navigating to settings...');
1713
1692
  // TODO: Implement settings navigation
1714
1693
  // this.router.navigate(['/settings']);
1715
1694
  }
@@ -1717,7 +1696,6 @@ class CideLytHeaderWrapperComponent {
1717
1696
  * Navigate to help and support page
1718
1697
  */
1719
1698
  navigateToHelp() {
1720
- console.log('🔍 [HeaderComponent] Navigating to help...');
1721
1699
  // TODO: Implement help navigation
1722
1700
  // this.router.navigate(['/help']);
1723
1701
  }
@@ -1726,7 +1704,6 @@ class CideLytHeaderWrapperComponent {
1726
1704
  * Uses the auth service to sign out and navigate to login page
1727
1705
  */
1728
1706
  handleLogout() {
1729
- console.log('🔍 [HeaderComponent] Logging out user...');
1730
1707
  // Show confirmation dialog
1731
1708
  if (confirm('Are you sure you want to logout?')) {
1732
1709
  try {
@@ -1734,22 +1711,16 @@ class CideLytHeaderWrapperComponent {
1734
1711
  this.authService.signOut();
1735
1712
  // Navigate to login page
1736
1713
  this.router.navigate(['/auth/sign-in']).then(success => {
1737
- if (success) {
1738
- console.log('✅ [HeaderComponent] Successfully logged out and navigated to login page');
1739
- }
1740
- else {
1741
- console.error('❌ [HeaderComponent] Failed to navigate to login page');
1714
+ if (!success) {
1742
1715
  // Fallback: reload the page to force navigation
1743
1716
  window.location.href = '/auth/sign-in';
1744
1717
  }
1745
1718
  }).catch(error => {
1746
- console.error('❌ [HeaderComponent] Navigation error:', error);
1747
1719
  // Fallback: reload the page to force navigation
1748
1720
  window.location.href = '/auth/sign-in';
1749
1721
  });
1750
1722
  }
1751
1723
  catch (error) {
1752
- console.error('❌ [HeaderComponent] Logout error:', error);
1753
1724
  // Still try to navigate to login page even if logout fails
1754
1725
  this.router.navigate(['/auth/sign-in']);
1755
1726
  }
@@ -1760,7 +1731,7 @@ class CideLytHeaderWrapperComponent {
1760
1731
  }
1761
1732
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytHeaderWrapperComponent, decorators: [{
1762
1733
  type: Component,
1763
- args: [{ selector: 'cide-lyt-header-wrapper', standalone: true, imports: [CideInputComponent, CommonModule, CideIconComponent, CideEleDropdownComponent, CideEleFileImageDirective], template: "<header id=\"cide-lyt-header-wrapper\" class=\"cide-lyt-header tw-w-full tw-select-none cide-lyt-header-wrapper-hide\">\n <!-- Logo Section -->\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"header-logo-container tw-flex tw-items-center tw-gap-3 tw-cursor-pointer\" (click)=\"onLogoClick()\"\n (keydown.enter)=\"onLogoClick()\" (keydown.space)=\"onLogoClick()\" tabindex=\"0\" role=\"button\"\n aria-label=\"Navigate to home\" title=\"Click to go to control panel home\">\n @if (appStateService.activeEntity()?.syen_photo_id_cyfm) {\n <img cideEleFileImage [fileId]=\"(appStateService.activeEntity()?.syen_photo_id_cyfm || '')\"\n [altText]=\"'Entity Logo'\" class=\"tw-w-8 tw-h-8 tw-object-contain\">\n } @else {\n <cide-ele-icon name=\"business\" class=\"tw-w-8 tw-h-8 tw-text-blue-600\"></cide-ele-icon>\n }\n\n </div>\n @if (appStateService.activeEntity()?.syen_name) {\n <span\n class=\"tw-text-md tw-font-semibold tw-text-blue-600 hover:tw-text-blue-800 tw-cursor-pointer sm:block tw-transition-colors tw-duration-200 hover:tw-underline\"\n (click)=\"onEntityNameClick()\" title=\"Click to switch entity\">\n {{ appStateService.activeEntity()?.syen_name }}\n </span>\n }\n </div>\n <!-- Search Section -->\n <div class=\"header-search-container\">\n <cide-ele-input id=\"cide_lyt_header_search\" placeholder=\"Search...\" leadingIcon=\"search\"\n size=\"md\"></cide-ele-input>\n </div>\n\n <!-- Icons Section -->\n <div class=\"header-icons-container\">\n <!-- Financial Year Dropdown -->\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentFinancialYearName() }}</span>\n <cide-ele-dropdown [items]=\"financialYearItems\" [config]=\"financialYearConfig\"\n (itemClick)=\"onFinancialYearClick($event)\">\n </cide-ele-dropdown>\n <div class=\"header-tooltip\">Financial Year</div>\n </div>\n\n <!-- Academic Year Dropdown -->\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentAcademicYearName() }}</span>\n <cide-ele-dropdown [items]=\"academicYearItems\" [config]=\"academicYearConfig\"\n (itemClick)=\"onAcademicYearClick($event)\">\n </cide-ele-dropdown>\n <div class=\"header-tooltip\">Academic Year</div>\n </div>\n\n <div class=\"header-icon\" (mouseenter)=\"updateTooltipPosition($event)\">\n <cide-ele-icon>notifications</cide-ele-icon>\n <div class=\"header-badge\">3</div>\n <div class=\"header-tooltip\">Notifications</div>\n </div>\n\n <div class=\"header-divider\"></div>\n\n <!-- Profile with Dropdown -->\n <div class=\"header-icon user-profile\" (mouseenter)=\"updateTooltipPosition($event)\">\n <cide-ele-dropdown [items]=\"profileItems\" [config]=\"profileConfig\"\n [triggerTemplate]=\"triggerTemplate\"\n (itemClick)=\"onProfileClick($event)\">\n <ng-template #triggerTemplate>\n @if (appStateService.currentUser()?.user_photo_id_cyfm) {\n <div class=\"profile-avatar\">\n <img cideEleFileImage [fileId]=\"(appStateService.currentUser()?.user_photo_id_cyfm || '')\"\n [altText]=\"'User Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n </div>\n } @else {\n <div class=\"profile-avatar\">\n <cide-ele-icon name=\"person\" class=\"tw-w-6 tw-h-6 tw-text-white\"></cide-ele-icon>\n </div>\n }\n </ng-template>\n </cide-ele-dropdown>\n <div class=\"header-tooltip\">My Account</div>\n </div>\n </div>\n</header>", styles: [".cide-lyt-header{display:flex;align-items:center;justify-content:space-between;background:linear-gradient(to right,#fffffff2,#f9fafbf2);box-shadow:0 2px 8px #00000008;padding:0 1rem;position:relative;z-index:20;transition:all .3s cubic-bezier(.4,0,.2,1);will-change:transform;border-bottom:1px solid rgba(229,231,235,.8);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.header-logo-container{height:100%;display:flex;align-items:center;padding:.5rem 0;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:8px;outline:none}.header-logo-container img{height:30px;max-height:100%;transition:all .3s ease;border-radius:5px;overflow:hidden;box-shadow:0 1px 4px #0000000d}.header-logo-container:hover img{transform:scale(1.03);filter:brightness(1.05);box-shadow:0 2px 6px #00000014}.header-logo-container:after{content:\"\";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(to bottom right,#fff0,#ffffff4d,#fff0);transform:rotate(30deg);opacity:0;transition:transform .6s ease,opacity .6s ease;pointer-events:none}.header-logo-container:hover:after,.header-logo-container:focus:after{opacity:1;transform:rotate(30deg) translate(50%,50%)}.header-search-container{flex-grow:1;max-width:600px;margin:0 2rem;position:relative;transition:all .3s ease}::ng-deep .header-search-container #cide_lyt_header_search{width:100%;background-color:#f9fafbcc;border-radius:20px!important;transition:all .3s ease;overflow:visible;transform:translateZ(0)}::ng-deep .header-search-container #cide_lyt_header_search:hover{box-shadow:0 3px 12px #00000014;background-color:#fff;transform:translateY(-1px)}::ng-deep .header-search-container #cide_lyt_header_search .cide-input-input{background-color:transparent;font-size:.85rem!important;letter-spacing:.01em}::ng-deep .header-search-container #cide_lyt_header_search .cide-input-leading-icon{color:#6b7280b3!important;font-size:1.1rem!important}::ng-deep .header-search-container #cide_lyt_header_search:focus-within{transform:translateY(-1px) scale(1.01)}::ng-deep .header-search-container #cide_lyt_header_search:focus-within .cide-input-input{border-color:#3b82f6!important}::ng-deep .header-search-container #cide_lyt_header_search:focus-within .cide-input-leading-icon{color:#3b82f6!important}.header-icons-container{display:flex;align-items:center;gap:1rem}.header-icon{position:relative;width:32px;height:32px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;color:#374151;border-radius:.4rem;margin:0 2px}.header-dropdown-container{position:relative;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;color:#374151;border-radius:.4rem;margin:0 2px;padding:.25rem .5rem;background-color:#f9fafb99;border:1px solid rgba(229,231,235,.5);font-size:.75rem;font-weight:600;min-width:40px;height:28px}.header-dropdown-container:hover{background-color:#3b82f61a;border-color:#3b82f64d;color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #3b82f61a}.header-dropdown-container:active{transform:scale(.98)}.header-icon:before{content:\"\";position:absolute;inset:0;background-color:#3b82f61a;border-radius:.5rem;opacity:0;transform:scale(.8);transition:all .2s cubic-bezier(.4,0,.2,1)}.header-icon:hover:before{opacity:1;transform:scale(1)}.header-icon:hover{color:#3b82f6}.header-icon:active{transform:scale(.95)}.header-tooltip{position:absolute;bottom:-26px;left:50%;transform:translate(-50%);background-color:#374151e6;color:#fff;padding:.25rem .6rem;border-radius:.25rem;font-size:.7rem;white-space:nowrap;opacity:0;pointer-events:none;transition:all .2s cubic-bezier(.4,0,.2,1);z-index:1000;box-shadow:0 2px 5px #0003;letter-spacing:.01em;will-change:transform,opacity}.header-tooltip:before{content:\"\";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border-width:5px;border-style:solid;border-color:transparent transparent rgba(55,65,81,.9) transparent}.header-icon:hover .header-tooltip{opacity:1;transform:translate(-50%) translateY(0)}.header-badge{position:absolute;top:0;right:0;min-width:16px;height:16px;border-radius:8px;background-color:#ef4444;color:#fff;font-size:9px;display:flex;align-items:center;justify-content:center;padding:0 4px;box-shadow:0 1px 3px #ef44444d;font-weight:600;z-index:2;transition:all .2s ease}.header-icon:hover .header-badge{transform:scale(1.1)}.header-divider{height:20px;width:1px;background-color:#e5e7ebcc;margin:0 6px}.profile-avatar{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;font-size:.75rem;font-weight:600;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #2563eb33;transition:all .2s cubic-bezier(.4,0,.2,1);letter-spacing:-.5px;cursor:pointer;border:2px solid transparent}.profile-avatar:hover,.header-icon:hover .profile-avatar{transform:scale(1.08);box-shadow:0 3px 8px #2563eb4d;border-color:#3b82f64d}::ng-deep .user-profile .dropdown-trigger{background:transparent!important;border:none!important;padding:0!important;width:auto!important;height:auto!important;border-radius:0!important}::ng-deep .user-profile .dropdown-trigger:hover{background:transparent!important}::ng-deep .user-profile .dropdown-trigger:focus,::ng-deep .user-profile .dropdown-trigger:focus-visible,::ng-deep .user-profile .dropdown-trigger:active{outline:none!important;box-shadow:none!important}.header-avatar{width:36px;height:36px;border-radius:50%;overflow:hidden;transition:all .2s cubic-bezier(.4,0,.2,1);border:2px solid transparent;box-shadow:0 2px 4px #0000001a}.header-avatar:hover{border-color:#3b82f6;transform:scale(1.05);box-shadow:0 3px 6px #3b82f64d}@media (max-width: 768px){.header-search-container{margin:0 1rem}.header-icons-container{gap:.5rem}}@media (max-width: 640px){.header-search-container{max-width:200px;margin:0 .5rem}}\n"] }]
1734
+ args: [{ selector: 'cide-lyt-header-wrapper', imports: [CideInputComponent, CommonModule, CideIconComponent, CideEleDropdownComponent, CideEleFileImageDirective], template: "<header id=\"cide-lyt-header-wrapper\" class=\"cide-lyt-header tw-w-full tw-select-none cide-lyt-header-wrapper-hide\">\n <!-- Logo Section -->\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"header-logo-container tw-flex tw-items-center tw-gap-3 tw-cursor-pointer\" (click)=\"onLogoClick()\"\n (keydown.enter)=\"onLogoClick()\" (keydown.space)=\"onLogoClick()\" tabindex=\"0\" role=\"button\"\n aria-label=\"Navigate to home\" title=\"Click to go to control panel home\">\n @if (appStateService.activeEntity()?.syen_photo_id_cyfm) {\n <img cideEleFileImage [fileId]=\"(appStateService.activeEntity()?.syen_photo_id_cyfm || '')\"\n [altText]=\"'Entity Logo'\" class=\"tw-w-8 tw-h-8 tw-object-contain\">\n } @else {\n <cide-ele-icon name=\"business\" class=\"tw-w-8 tw-h-8 tw-text-blue-600\"></cide-ele-icon>\n }\n\n </div>\n @if (appStateService.activeEntity()?.syen_name) {\n <span\n class=\"tw-text-md tw-font-semibold tw-text-blue-600 hover:tw-text-blue-800 tw-cursor-pointer sm:block tw-transition-colors tw-duration-200 hover:tw-underline\"\n (click)=\"onEntityNameClick()\" title=\"Click to switch entity\">\n {{ appStateService.activeEntity()?.syen_name }}\n </span>\n }\n </div>\n <!-- Search Section -->\n <div class=\"header-search-container\">\n <cide-ele-input id=\"cide_lyt_header_search\" placeholder=\"Search...\" leadingIcon=\"search\"\n size=\"md\"></cide-ele-input>\n </div>\n\n <!-- Icons Section -->\n <div class=\"header-icons-container\">\n <!-- Financial Year Dropdown -->\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentFinancialYearName() }}</span>\n <cide-ele-dropdown [items]=\"financialYearItems\" [config]=\"financialYearConfig\"\n (itemClick)=\"onFinancialYearClick($event)\">\n </cide-ele-dropdown>\n <div class=\"header-tooltip\">Financial Year</div>\n </div>\n\n <!-- Academic Year Dropdown -->\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentAcademicYearName() }}</span>\n <cide-ele-dropdown [items]=\"academicYearItems\" [config]=\"academicYearConfig\"\n (itemClick)=\"onAcademicYearClick($event)\">\n </cide-ele-dropdown>\n <div class=\"header-tooltip\">Academic Year</div>\n </div>\n\n <div class=\"header-icon\" (mouseenter)=\"updateTooltipPosition($event)\">\n <cide-ele-icon>notifications</cide-ele-icon>\n <div class=\"header-badge\">3</div>\n <div class=\"header-tooltip\">Notifications</div>\n </div>\n\n <div class=\"header-divider\"></div>\n\n <!-- Profile with Dropdown -->\n <div class=\"header-icon user-profile\" (mouseenter)=\"updateTooltipPosition($event)\">\n <cide-ele-dropdown [items]=\"profileItems\" [config]=\"profileConfig\"\n [triggerTemplate]=\"triggerTemplate\"\n (itemClick)=\"onProfileClick($event)\">\n <ng-template #triggerTemplate>\n @if (appStateService.currentUser()?.user_photo_id_cyfm) {\n <div class=\"profile-avatar\">\n <img cideEleFileImage [fileId]=\"(appStateService.currentUser()?.user_photo_id_cyfm || '')\"\n [altText]=\"'User Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n </div>\n } @else {\n <div class=\"profile-avatar\">\n <cide-ele-icon name=\"person\" class=\"tw-w-6 tw-h-6 tw-text-white\"></cide-ele-icon>\n </div>\n }\n </ng-template>\n </cide-ele-dropdown>\n <div class=\"header-tooltip\">My Account</div>\n </div>\n </div>\n</header>", styles: [".cide-lyt-header{display:flex;align-items:center;justify-content:space-between;background:linear-gradient(to right,#fffffff2,#f9fafbf2);box-shadow:0 2px 8px #00000008;padding:0 1rem;position:relative;z-index:20;transition:all .3s cubic-bezier(.4,0,.2,1);will-change:transform;border-bottom:1px solid rgba(229,231,235,.8);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.header-logo-container{height:100%;display:flex;align-items:center;padding:.5rem 0;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:8px;outline:none}.header-logo-container img{height:30px;max-height:100%;transition:all .3s ease;border-radius:5px;overflow:hidden;box-shadow:0 1px 4px #0000000d}.header-logo-container:hover img{transform:scale(1.03);filter:brightness(1.05);box-shadow:0 2px 6px #00000014}.header-logo-container:after{content:\"\";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(to bottom right,#fff0,#ffffff4d,#fff0);transform:rotate(30deg);opacity:0;transition:transform .6s ease,opacity .6s ease;pointer-events:none}.header-logo-container:hover:after,.header-logo-container:focus:after{opacity:1;transform:rotate(30deg) translate(50%,50%)}.header-search-container{flex-grow:1;max-width:600px;margin:0 2rem;position:relative;transition:all .3s ease}::ng-deep .header-search-container #cide_lyt_header_search{width:100%;background-color:#f9fafbcc;border-radius:20px!important;transition:all .3s ease;overflow:visible;transform:translateZ(0)}::ng-deep .header-search-container #cide_lyt_header_search:hover{box-shadow:0 3px 12px #00000014;background-color:#fff;transform:translateY(-1px)}::ng-deep .header-search-container #cide_lyt_header_search .cide-input-input{background-color:transparent;font-size:.85rem!important;letter-spacing:.01em}::ng-deep .header-search-container #cide_lyt_header_search .cide-input-leading-icon{color:#6b7280b3!important;font-size:1.1rem!important}::ng-deep .header-search-container #cide_lyt_header_search:focus-within{transform:translateY(-1px) scale(1.01)}::ng-deep .header-search-container #cide_lyt_header_search:focus-within .cide-input-input{border-color:#3b82f6!important}::ng-deep .header-search-container #cide_lyt_header_search:focus-within .cide-input-leading-icon{color:#3b82f6!important}.header-icons-container{display:flex;align-items:center;gap:1rem}.header-icon{position:relative;width:32px;height:32px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;color:#374151;border-radius:.4rem;margin:0 2px}.header-dropdown-container{position:relative;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;color:#374151;border-radius:.4rem;margin:0 2px;padding:.25rem .5rem;background-color:#f9fafb99;border:1px solid rgba(229,231,235,.5);font-size:.75rem;font-weight:600;min-width:40px;height:28px}.header-dropdown-container:hover{background-color:#3b82f61a;border-color:#3b82f64d;color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #3b82f61a}.header-dropdown-container:active{transform:scale(.98)}.header-icon:before{content:\"\";position:absolute;inset:0;background-color:#3b82f61a;border-radius:.5rem;opacity:0;transform:scale(.8);transition:all .2s cubic-bezier(.4,0,.2,1)}.header-icon:hover:before{opacity:1;transform:scale(1)}.header-icon:hover{color:#3b82f6}.header-icon:active{transform:scale(.95)}.header-tooltip{position:absolute;bottom:-26px;left:50%;transform:translate(-50%);background-color:#374151e6;color:#fff;padding:.25rem .6rem;border-radius:.25rem;font-size:.7rem;white-space:nowrap;opacity:0;pointer-events:none;transition:all .2s cubic-bezier(.4,0,.2,1);z-index:1000;box-shadow:0 2px 5px #0003;letter-spacing:.01em;will-change:transform,opacity}.header-tooltip:before{content:\"\";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border-width:5px;border-style:solid;border-color:transparent transparent rgba(55,65,81,.9) transparent}.header-icon:hover .header-tooltip{opacity:1;transform:translate(-50%) translateY(0)}.header-badge{position:absolute;top:0;right:0;min-width:16px;height:16px;border-radius:8px;background-color:#ef4444;color:#fff;font-size:9px;display:flex;align-items:center;justify-content:center;padding:0 4px;box-shadow:0 1px 3px #ef44444d;font-weight:600;z-index:2;transition:all .2s ease}.header-icon:hover .header-badge{transform:scale(1.1)}.header-divider{height:20px;width:1px;background-color:#e5e7ebcc;margin:0 6px}.profile-avatar{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;font-size:.75rem;font-weight:600;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #2563eb33;transition:all .2s cubic-bezier(.4,0,.2,1);letter-spacing:-.5px;cursor:pointer;border:2px solid transparent}.profile-avatar:hover,.header-icon:hover .profile-avatar{transform:scale(1.08);box-shadow:0 3px 8px #2563eb4d;border-color:#3b82f64d}::ng-deep .user-profile .dropdown-trigger{background:transparent!important;border:none!important;padding:0!important;width:auto!important;height:auto!important;border-radius:0!important}::ng-deep .user-profile .dropdown-trigger:hover{background:transparent!important}::ng-deep .user-profile .dropdown-trigger:focus,::ng-deep .user-profile .dropdown-trigger:focus-visible,::ng-deep .user-profile .dropdown-trigger:active{outline:none!important;box-shadow:none!important}.header-avatar{width:36px;height:36px;border-radius:50%;overflow:hidden;transition:all .2s cubic-bezier(.4,0,.2,1);border:2px solid transparent;box-shadow:0 2px 4px #0000001a}.header-avatar:hover{border-color:#3b82f6;transform:scale(1.05);box-shadow:0 3px 6px #3b82f64d}@media (max-width: 768px){.header-search-container{margin:0 1rem}.header-icons-container{gap:.5rem}}@media (max-width: 640px){.header-search-container{max-width:200px;margin:0 .5rem}}\n"] }]
1764
1735
  }], ctorParameters: () => [], propDecorators: { triggerTemplate: [{
1765
1736
  type: ViewChild,
1766
1737
  args: ['triggerTemplate']
@@ -2364,7 +2335,7 @@ class CideLytSidebarWrapperComponent {
2364
2335
  }
2365
2336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytSidebarWrapperComponent, decorators: [{
2366
2337
  type: Component,
2367
- args: [{ selector: 'cide-lyt-sidebar-wrapper', standalone: true, imports: [CideIconComponent, CideInputComponent, CommonModule, CideEleResizerDirective, TooltipDirective, CideSpinnerComponent], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
2338
+ args: [{ selector: 'cide-lyt-sidebar-wrapper', imports: [CideIconComponent, CideInputComponent, CommonModule, CideEleResizerDirective, TooltipDirective, CideSpinnerComponent], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
2368
2339
  trigger('slideInOut', [
2369
2340
  state('in', style({
2370
2341
  opacity: 1,
@@ -2966,8 +2937,8 @@ class CideLytSidedrawerWrapperComponent {
2966
2937
  }
2967
2938
  ngOnInit() {
2968
2939
  // Initialize the component map (You'd likely populate this from a config or service)
2969
- this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-CDIHnAIJ.mjs').then(m => m.CideLytSidedrawerNotesComponent);
2970
- this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-BkX1xh6A.mjs').then(m => m.CideLytDrawerThemeComponent);
2940
+ this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-CpXybU-I.mjs').then(m => m.CideLytSidedrawerNotesComponent);
2941
+ this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-DQxKNHV2.mjs').then(m => m.CideLytDrawerThemeComponent);
2971
2942
  }
2972
2943
  async loadComponent(configFor) {
2973
2944
  console.log('🔍 SIDEDRAWER - Loading component:', configFor, 'Current tab:', this.currentTabId);
@@ -3323,7 +3294,7 @@ class CloudIdeLayoutComponent {
3323
3294
  }
3324
3295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CloudIdeLayoutComponent, decorators: [{
3325
3296
  type: Component,
3326
- args: [{ selector: 'cide-lyt-wrapper', standalone: true, template: `
3297
+ args: [{ selector: 'cide-lyt-wrapper', template: `
3327
3298
  <cide-lyt-layout-wrapper></cide-lyt-layout-wrapper>
3328
3299
 
3329
3300
  <!-- Floating Container Manager -->
@@ -3475,7 +3446,7 @@ class CideLytSharedWrapperComponent {
3475
3446
  }
3476
3447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytSharedWrapperComponent, decorators: [{
3477
3448
  type: Component,
3478
- args: [{ selector: 'cide-lyt-shared-wrapper', standalone: true, imports: [CideEleBreadcrumbComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tw-w-full tw-h-full tw-table\">\n <div\n class=\"tw-sticky tw-table-row tw-w-full tw-top-0 tw-z-50 tw-bg-white tw-border-b tw-border-gray-200 tw-shadow-sm\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-px-4 tw-py-0.5\">\n <div class=\"tw-flex-1\">\n <cide-ele-breadcrumb style=\"modern\" [compact]=\"true\" (homeClick)=\"onBreadcrumbHomeClick()\"></cide-ele-breadcrumb>\n </div>\n <div class=\"tw-flex-shrink-0 tw-ml-4\">\n <ng-content select=\"[breadcrumb-actions]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"tw-table-row tw-h-full tw-w-full tw-overflow-y-auto\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [":host{display:block;height:100%}:host>div{display:flex;flex-direction:column}::ng-deep cide-lyt-shared-wrapper{height:100%!important;display:block!important;width:100%!important}\n"] }]
3449
+ args: [{ selector: 'cide-lyt-shared-wrapper', imports: [CideEleBreadcrumbComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tw-w-full tw-h-full tw-table\">\n <div\n class=\"tw-sticky tw-table-row tw-w-full tw-top-0 tw-z-50 tw-bg-white tw-border-b tw-border-gray-200 tw-shadow-sm\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-px-4 tw-py-0.5\">\n <div class=\"tw-flex-1\">\n <cide-ele-breadcrumb style=\"modern\" [compact]=\"true\" (homeClick)=\"onBreadcrumbHomeClick()\"></cide-ele-breadcrumb>\n </div>\n <div class=\"tw-flex-shrink-0 tw-ml-4\">\n <ng-content select=\"[breadcrumb-actions]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"tw-table-row tw-h-full tw-w-full tw-overflow-y-auto\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [":host{display:block;height:100%}:host>div{display:flex;flex-direction:column}::ng-deep cide-lyt-shared-wrapper{height:100%!important;display:block!important;width:100%!important}\n"] }]
3479
3450
  }], ctorParameters: () => [] });
3480
3451
 
3481
3452
  const layoutRoutes = {
@@ -3490,7 +3461,7 @@ const layoutControlPannelChildRoutes = [{
3490
3461
  },
3491
3462
  {
3492
3463
  path: "home",
3493
- loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-DE5lpCxu.mjs').then(c => c.CideLytHomeWrapperComponent),
3464
+ loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-nOJs_t7D.mjs').then(c => c.CideLytHomeWrapperComponent),
3494
3465
  canActivate: [authGuard],
3495
3466
  data: {
3496
3467
  reuseTab: true, // For CustomRouteReuseStrategy
@@ -4003,7 +3974,7 @@ class CideLytFloatingEntityRightsSharingComponent {
4003
3974
  entityDataCache = new Map();
4004
3975
  CACHE_DURATION = 5 * 60 * 1000; // 5 minutes cache duration
4005
3976
  fb = inject(FormBuilder);
4006
- entityService = inject(CideCoreEntityManagementService);
3977
+ entityService = inject(ENTITY_SERVICE_TOKEN);
4007
3978
  // Inject the merged service that now includes entity access pass management
4008
3979
  entityAccessPassService = inject(CideLytFloatingEntityRightsSharingService);
4009
3980
  appState = inject(AppStateService);
@@ -4803,7 +4774,7 @@ class CideLytFloatingEntityRightsSharingComponent {
4803
4774
  }
4804
4775
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytFloatingEntityRightsSharingComponent, decorators: [{
4805
4776
  type: Component,
4806
- args: [{ selector: 'cide-lyt-floating-entity-rights-sharing', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
4777
+ args: [{ selector: 'cide-lyt-floating-entity-rights-sharing', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
4807
4778
  CommonModule,
4808
4779
  ReactiveFormsModule,
4809
4780
  CideEleButtonComponent,
@@ -5058,4 +5029,4 @@ var floatingEntityRightsSharing_component = /*#__PURE__*/Object.freeze({
5058
5029
  */
5059
5030
 
5060
5031
  export { AppStateHelperService as A, CideLytSharedWrapperComponent as C, ENVIRONMENT_CONFIG as E, CideLytSidebarService as a, CideLytRequestService as b, CideLytSidedrawerService as c, CideLytThemeService as d, AppStateService as e, CloudIdeLayoutService as f, CloudIdeLayoutComponent as g, CideLytSharedService as h, layoutControlPannelChildRoutes as i, CustomRouteReuseStrategy as j, CideLytUserStatusService as k, layoutRoutes as l, CacheManagerService as m, CideLytFileManagerService as n, CideLytFloatingEntityRightsSharingComponent as o, processThemeVariable as p, CideLytFloatingEntityRightsSharingService as q, setCSSVariable as s, themeFactory as t };
5061
- //# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-Dp5qc3C5.mjs.map
5032
+ //# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-BT6krb0-.mjs.map