cloud-ide-layout 1.0.53 → 1.0.56

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 (13) hide show
  1. package/fesm2022/{cloud-ide-layout-cloud-ide-layout-pi0j2OhQ.mjs → cloud-ide-layout-cloud-ide-layout-DfEO4yXQ.mjs} +137 -46
  2. package/fesm2022/cloud-ide-layout-cloud-ide-layout-DfEO4yXQ.mjs.map +1 -0
  3. package/fesm2022/{cloud-ide-layout-drawer-theme.component-CfH0gv6b.mjs → cloud-ide-layout-drawer-theme.component-DP0MFwbT.mjs} +2 -2
  4. package/fesm2022/{cloud-ide-layout-drawer-theme.component-CfH0gv6b.mjs.map → cloud-ide-layout-drawer-theme.component-DP0MFwbT.mjs.map} +1 -1
  5. package/fesm2022/{cloud-ide-layout-floating-entity-selection.component-DmoZauYM.mjs → cloud-ide-layout-floating-entity-selection.component-BowznVN2.mjs} +2 -2
  6. package/fesm2022/{cloud-ide-layout-floating-entity-selection.component-DmoZauYM.mjs.map → cloud-ide-layout-floating-entity-selection.component-BowznVN2.mjs.map} +1 -1
  7. package/fesm2022/{cloud-ide-layout-home-wrapper.component-DK1ebn4K.mjs → cloud-ide-layout-home-wrapper.component-4C8MKGr0.mjs} +2 -2
  8. package/fesm2022/{cloud-ide-layout-home-wrapper.component-DK1ebn4K.mjs.map → cloud-ide-layout-home-wrapper.component-4C8MKGr0.mjs.map} +1 -1
  9. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-Dq97FU7V.mjs → cloud-ide-layout-sidedrawer-notes.component-CK1o3zht.mjs} +2 -2
  10. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-Dq97FU7V.mjs.map → cloud-ide-layout-sidedrawer-notes.component-CK1o3zht.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-pi0j2OhQ.mjs.map +0 -1
@@ -1266,7 +1266,7 @@ class CideLytFloatingEntitySelectionService {
1266
1266
  }
1267
1267
  try {
1268
1268
  // Use relative import to avoid circular dependency
1269
- const module = await import('./cloud-ide-layout-floating-entity-selection.component-DmoZauYM.mjs');
1269
+ const module = await import('./cloud-ide-layout-floating-entity-selection.component-BowznVN2.mjs');
1270
1270
  if (module.CideLytFloatingEntitySelectionComponent) {
1271
1271
  this.containerService.registerComponent('entity-selection-header', module.CideLytFloatingEntitySelectionComponent);
1272
1272
  console.log('✅ Entity selection component registered successfully');
@@ -1347,6 +1347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
1347
1347
 
1348
1348
  class CideLytHeaderWrapperComponent {
1349
1349
  triggerTemplate;
1350
+ yearTriggerTemplate;
1350
1351
  // Inject app state service to get active entity
1351
1352
  appStateService = inject(AppStateService);
1352
1353
  // Inject floating entity selection service
@@ -1362,24 +1363,44 @@ class CideLytHeaderWrapperComponent {
1362
1363
  currentAcademicYear = signal(null, ...(ngDevMode ? [{ debugName: "currentAcademicYear" }] : []));
1363
1364
  currentFinancialYearName = signal('FY', ...(ngDevMode ? [{ debugName: "currentFinancialYearName" }] : []));
1364
1365
  currentAcademicYearName = signal('AY', ...(ngDevMode ? [{ debugName: "currentAcademicYearName" }] : []));
1365
- // Financial Year Dropdown Configuration
1366
- financialYearItems = [];
1367
- financialYearConfig = {
1368
- triggerIcon: 'calendar_today',
1369
- triggerSize: 'sm',
1370
- menuPosition: 'auto',
1371
- menuWidth: 'tw-w-48',
1372
- usePortal: true
1373
- };
1374
- // Academic Year Dropdown Configuration
1375
- academicYearItems = [];
1376
- academicYearConfig = {
1377
- triggerIcon: 'school',
1366
+ // Combined Year Dropdown Configuration
1367
+ combinedYearItems = [];
1368
+ combinedYearConfig = {
1369
+ triggerIcon: '',
1378
1370
  triggerSize: 'sm',
1379
1371
  menuPosition: 'auto',
1380
- menuWidth: 'tw-w-48',
1372
+ menuWidth: 'tw-w-64',
1381
1373
  usePortal: true
1382
1374
  };
1375
+ // Computed signal for current year display (FY or AY)
1376
+ currentYearDisplay = computed(() => {
1377
+ const fy = this.currentFinancialYear();
1378
+ const ay = this.currentAcademicYear();
1379
+ // Prefer Academic Year if available, otherwise Financial Year
1380
+ if (ay) {
1381
+ const name = ay.acayr_name;
1382
+ const fromDate = ay.acayr_from_date;
1383
+ const toDate = ay.acayr_to_date;
1384
+ if (name) {
1385
+ return { type: 'AY', label: name, icon: 'school' };
1386
+ }
1387
+ else if (fromDate && toDate) {
1388
+ return { type: 'AY', label: `${fromDate} - ${toDate}`, icon: 'school' };
1389
+ }
1390
+ else if (fromDate || toDate) {
1391
+ return { type: 'AY', label: fromDate || toDate || 'Academic Year', icon: 'school' };
1392
+ }
1393
+ return { type: 'AY', label: 'Academic Year', icon: 'school' };
1394
+ }
1395
+ else if (fy) {
1396
+ return {
1397
+ type: 'FY',
1398
+ label: fy.financial_year_name || `${fy.financial_year_start_date} - ${fy.financial_year_end_date}` || 'Financial Year',
1399
+ icon: 'calendar_today'
1400
+ };
1401
+ }
1402
+ return { type: 'AY', label: 'Academic Year', icon: 'school' };
1403
+ }, ...(ngDevMode ? [{ debugName: "currentYearDisplay" }] : []));
1383
1404
  // Profile Dropdown Configuration (moved from more options)
1384
1405
  profileItems = [
1385
1406
  {
@@ -1592,8 +1613,8 @@ class CideLytHeaderWrapperComponent {
1592
1613
  */
1593
1614
  updateFinancialYearDropdown() {
1594
1615
  const years = this.financialYears();
1595
- this.financialYearItems = years.map(year => ({
1596
- id: year._id,
1616
+ const financialYearItems = years.map(year => ({
1617
+ id: `fy_${year._id}`, // Prefix with 'fy_' to distinguish from AY
1597
1618
  label: year.financial_year_name || `${year.financial_year_start_date} - ${year.financial_year_end_date}`,
1598
1619
  icon: 'calendar_today',
1599
1620
  iconColor: 'tw-text-blue-500'
@@ -1604,47 +1625,114 @@ class CideLytHeaderWrapperComponent {
1604
1625
  this.currentFinancialYear.set(currentFY);
1605
1626
  this.currentFinancialYearName.set(currentFY.financial_year_name || 'FY');
1606
1627
  }
1628
+ // Update combined dropdown
1629
+ this.updateCombinedYearDropdown();
1607
1630
  }
1608
1631
  /**
1609
1632
  * Update academic year dropdown items
1610
1633
  */
1611
1634
  updateAcademicYearDropdown() {
1612
1635
  const years = this.academicYears();
1613
- this.academicYearItems = years.map(year => ({
1614
- id: year._id,
1615
- label: year.academic_year_name || `${year.academic_year_start_date} - ${year.academic_year_end_date}`,
1616
- icon: 'school',
1617
- iconColor: 'tw-text-green-500'
1618
- }));
1636
+ const academicYearItems = years.map(year => {
1637
+ // Use correct field names: acayr_name, acayr_from_date, acayr_to_date
1638
+ const name = year.acayr_name;
1639
+ const fromDate = year.acayr_from_date;
1640
+ const toDate = year.acayr_to_date;
1641
+ // Build label with proper fallback
1642
+ let label = name;
1643
+ if (!label && fromDate && toDate) {
1644
+ label = `${fromDate} - ${toDate}`;
1645
+ }
1646
+ else if (!label && (fromDate || toDate)) {
1647
+ label = fromDate || toDate || 'Academic Year';
1648
+ }
1649
+ else if (!label) {
1650
+ label = 'Academic Year';
1651
+ }
1652
+ return {
1653
+ id: `ay_${year._id}`, // Prefix with 'ay_' to distinguish from FY
1654
+ label: label,
1655
+ icon: 'school',
1656
+ iconColor: 'tw-text-green-500'
1657
+ };
1658
+ });
1619
1659
  // Set current academic year (first active one or first in list)
1620
- const currentAY = years.find(year => year.is_active) || years[0];
1660
+ // Use correct field name: acayr_isactive
1661
+ const currentAY = years.find(year => year.acayr_isactive) || years[0];
1621
1662
  if (currentAY) {
1622
1663
  this.currentAcademicYear.set(currentAY);
1623
- this.currentAcademicYearName.set(currentAY.academic_year_name || 'AY');
1664
+ this.currentAcademicYearName.set(currentAY.acayr_name || 'AY');
1624
1665
  }
1666
+ // Update combined dropdown
1667
+ this.updateCombinedYearDropdown();
1625
1668
  }
1626
1669
  /**
1627
- * Handle financial year dropdown item clicks
1628
- * @param item The clicked dropdown item
1670
+ * Update combined year dropdown items (Financial Year + Academic Year)
1629
1671
  */
1630
- onFinancialYearClick(item) {
1631
- const selectedYear = this.financialYears().find(year => year._id === item.id);
1632
- if (selectedYear) {
1633
- this.currentFinancialYear.set(selectedYear);
1634
- this.currentFinancialYearName.set(selectedYear.financial_year_name || 'FY');
1635
- // TODO: Update app state or notify other components about the change
1672
+ updateCombinedYearDropdown() {
1673
+ const financialYearItems = this.financialYears().map(year => ({
1674
+ id: `fy_${year._id}`,
1675
+ label: year.financial_year_name || `${year.financial_year_start_date} - ${year.financial_year_end_date}` || 'Financial Year',
1676
+ icon: 'calendar_today',
1677
+ iconColor: 'tw-text-blue-500'
1678
+ }));
1679
+ const academicYearItems = this.academicYears().map(year => {
1680
+ const name = year.acayr_name;
1681
+ const fromDate = year.acayr_from_date;
1682
+ const toDate = year.acayr_to_date;
1683
+ let label = name;
1684
+ if (!label && fromDate && toDate) {
1685
+ label = `${fromDate} - ${toDate}`;
1686
+ }
1687
+ else if (!label && (fromDate || toDate)) {
1688
+ label = fromDate || toDate || 'Academic Year';
1689
+ }
1690
+ else if (!label) {
1691
+ label = 'Academic Year';
1692
+ }
1693
+ return {
1694
+ id: `ay_${year._id}`,
1695
+ label: label,
1696
+ icon: 'school',
1697
+ iconColor: 'tw-text-green-500'
1698
+ };
1699
+ });
1700
+ // Combine: Financial Years + Divider + Academic Years
1701
+ this.combinedYearItems = [];
1702
+ if (financialYearItems.length > 0) {
1703
+ this.combinedYearItems.push(...financialYearItems);
1704
+ }
1705
+ if (financialYearItems.length > 0 && academicYearItems.length > 0) {
1706
+ this.combinedYearItems.push({ id: 'divider', label: '', divider: true });
1707
+ }
1708
+ if (academicYearItems.length > 0) {
1709
+ this.combinedYearItems.push(...academicYearItems);
1636
1710
  }
1637
1711
  }
1638
1712
  /**
1639
- * Handle academic year dropdown item clicks
1713
+ * Handle combined year dropdown item clicks (Financial Year or Academic Year)
1640
1714
  * @param item The clicked dropdown item
1641
1715
  */
1642
- onAcademicYearClick(item) {
1643
- const selectedYear = this.academicYears().find(year => year._id === item.id);
1644
- if (selectedYear) {
1645
- this.currentAcademicYear.set(selectedYear);
1646
- this.currentAcademicYearName.set(selectedYear.academic_year_name || 'AY');
1647
- // TODO: Update app state or notify other components about the change
1716
+ onCombinedYearClick(item) {
1717
+ if (item.id.startsWith('fy_')) {
1718
+ // Financial Year selection
1719
+ const yearId = item.id.replace('fy_', '');
1720
+ const selectedYear = this.financialYears().find(year => year._id === yearId);
1721
+ if (selectedYear) {
1722
+ this.currentFinancialYear.set(selectedYear);
1723
+ this.currentFinancialYearName.set(selectedYear.financial_year_name || 'FY');
1724
+ // TODO: Update app state or notify other components about the change
1725
+ }
1726
+ }
1727
+ else if (item.id.startsWith('ay_')) {
1728
+ // Academic Year selection
1729
+ const yearId = item.id.replace('ay_', '');
1730
+ const selectedYear = this.academicYears().find(year => year._id === yearId);
1731
+ if (selectedYear) {
1732
+ this.currentAcademicYear.set(selectedYear);
1733
+ this.currentAcademicYearName.set(selectedYear.acayr_name || 'AY');
1734
+ // TODO: Update app state or notify other components about the change
1735
+ }
1648
1736
  }
1649
1737
  }
1650
1738
  /**
@@ -1733,15 +1821,18 @@ class CideLytHeaderWrapperComponent {
1733
1821
  }
1734
1822
  }
1735
1823
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytHeaderWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1736
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytHeaderWrapperComponent, isStandalone: true, selector: "cide-lyt-header-wrapper", viewQueries: [{ propertyName: "triggerTemplate", first: true, predicate: ["triggerTemplate"], descendants: true }], ngImport: i0, template: "<header id=\"cide-lyt-header-wrapper\" class=\"cide-lyt-header tw-w-full tw-select-none cide-lyt-header-wrapper-hide\">\r\n <!-- Logo Section -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"header-logo-container tw-flex tw-items-center tw-gap-3 tw-cursor-pointer\" (click)=\"onLogoClick()\"\r\n (keydown.enter)=\"onLogoClick()\" (keydown.space)=\"onLogoClick()\" tabindex=\"0\" role=\"button\"\r\n aria-label=\"Navigate to home\" title=\"Click to go to control panel home\">\r\n @if (appStateService.activeEntity()?.syen_photo_id_cyfm) {\r\n <img cideEleFileImage [fileId]=\"(appStateService.activeEntity()?.syen_photo_id_cyfm || '')\"\r\n [altText]=\"'Entity Logo'\" class=\"tw-w-8 tw-h-8 tw-object-contain\">\r\n } @else {\r\n <cide-ele-icon name=\"business\" class=\"tw-w-8 tw-h-8 tw-text-blue-600\"></cide-ele-icon>\r\n }\r\n\r\n </div>\r\n @if (appStateService.activeEntity()?.syen_name) {\r\n <span\r\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\"\r\n (click)=\"onEntityNameClick()\" title=\"Click to switch entity\">\r\n {{ appStateService.activeEntity()?.syen_name }}\r\n </span>\r\n }\r\n </div>\r\n <!-- Search Section -->\r\n <div class=\"header-search-container\">\r\n <cide-ele-input id=\"cide_lyt_header_search\" placeholder=\"Search...\" leadingIcon=\"search\"\r\n size=\"md\"></cide-ele-input>\r\n </div>\r\n\r\n <!-- Icons Section -->\r\n <div class=\"header-icons-container\">\r\n <!-- Financial Year Dropdown -->\r\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentFinancialYearName() }}</span>\r\n <cide-ele-dropdown [items]=\"financialYearItems\" [config]=\"financialYearConfig\"\r\n (itemClick)=\"onFinancialYearClick($event)\">\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">Financial Year</div>\r\n </div>\r\n\r\n <!-- Academic Year Dropdown -->\r\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentAcademicYearName() }}</span>\r\n <cide-ele-dropdown [items]=\"academicYearItems\" [config]=\"academicYearConfig\"\r\n (itemClick)=\"onAcademicYearClick($event)\">\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">Academic Year</div>\r\n </div>\r\n\r\n <div class=\"header-icon\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-icon>notifications</cide-ele-icon>\r\n <div class=\"header-badge\">3</div>\r\n <div class=\"header-tooltip\">Notifications</div>\r\n </div>\r\n\r\n <div class=\"header-divider\"></div>\r\n\r\n <!-- Profile with Dropdown -->\r\n <div class=\"header-icon user-profile\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-dropdown [items]=\"profileItems\" [config]=\"profileConfig\"\r\n [triggerTemplate]=\"triggerTemplate\"\r\n (itemClick)=\"onProfileClick($event)\">\r\n <ng-template #triggerTemplate>\r\n @if (appStateService.currentUser()?.user_photo_id_cyfm) {\r\n <div class=\"profile-avatar\">\r\n <img cideEleFileImage [fileId]=\"(appStateService.currentUser()?.user_photo_id_cyfm || '')\"\r\n [altText]=\"'User Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\r\n </div>\r\n } @else {\r\n <div class=\"profile-avatar\">\r\n <cide-ele-icon name=\"person\" class=\"tw-w-6 tw-h-6 tw-text-white\"></cide-ele-icon>\r\n </div>\r\n }\r\n </ng-template>\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">My Account</div>\r\n </div>\r\n </div>\r\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"], dependencies: [{ kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "directive", type: CideEleFileImageDirective, selector: "[cideEleFileImage]", inputs: ["fileId", "altText"] }] });
1824
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytHeaderWrapperComponent, isStandalone: true, selector: "cide-lyt-header-wrapper", viewQueries: [{ propertyName: "triggerTemplate", first: true, predicate: ["triggerTemplate"], descendants: true }, { propertyName: "yearTriggerTemplate", first: true, predicate: ["yearTriggerTemplate"], descendants: true }], ngImport: i0, template: "<header id=\"cide-lyt-header-wrapper\" class=\"cide-lyt-header tw-w-full tw-select-none cide-lyt-header-wrapper-hide\">\r\n <!-- Logo Section -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"header-logo-container tw-flex tw-items-center tw-gap-3 tw-cursor-pointer\" (click)=\"onLogoClick()\"\r\n (keydown.enter)=\"onLogoClick()\" (keydown.space)=\"onLogoClick()\" tabindex=\"0\" role=\"button\"\r\n aria-label=\"Navigate to home\" title=\"Click to go to control panel home\">\r\n @if (appStateService.activeEntity()?.syen_photo_id_cyfm) {\r\n <img cideEleFileImage [fileId]=\"(appStateService.activeEntity()?.syen_photo_id_cyfm || '')\"\r\n [altText]=\"'Entity Logo'\" class=\"tw-w-8 tw-h-8 tw-object-contain\">\r\n } @else {\r\n <cide-ele-icon name=\"business\" class=\"tw-w-8 tw-h-8 tw-text-blue-600\"></cide-ele-icon>\r\n }\r\n\r\n </div>\r\n @if (appStateService.activeEntity()?.syen_name) {\r\n <span\r\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\"\r\n (click)=\"onEntityNameClick()\" title=\"Click to switch entity\">\r\n {{ appStateService.activeEntity()?.syen_name }}\r\n </span>\r\n }\r\n </div>\r\n <!-- Search Section -->\r\n <div class=\"header-search-container\">\r\n <cide-ele-input id=\"cide_lyt_header_search\" placeholder=\"Search...\" leadingIcon=\"search\"\r\n size=\"md\"></cide-ele-input>\r\n </div>\r\n\r\n <!-- Icons Section -->\r\n <div class=\"header-icons-container\">\r\n <!-- Combined Year Dropdown (Financial Year + Academic Year) -->\r\n <div class=\"header-year-dropdown-wrapper\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-dropdown [items]=\"combinedYearItems\" [config]=\"combinedYearConfig\"\r\n [triggerTemplate]=\"yearTriggerTemplate\"\r\n (itemClick)=\"onCombinedYearClick($event)\">\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">{{ currentYearDisplay().type === 'AY' ? 'Academic Year' : 'Financial Year' }}</div>\r\n </div>\r\n \r\n <ng-template #yearTriggerTemplate let-isOpen=\"isOpen\">\r\n <div class=\"header-year-pill\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-mr-1.5\">{{ currentYearDisplay().icon }}</cide-ele-icon>\r\n <span class=\"header-year-pill-text\">{{ currentYearDisplay().label }}</span>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"header-icon\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-icon>notifications</cide-ele-icon>\r\n <div class=\"header-badge\">3</div>\r\n <div class=\"header-tooltip\">Notifications</div>\r\n </div>\r\n\r\n <div class=\"header-divider\"></div>\r\n\r\n <!-- Profile with Dropdown -->\r\n <div class=\"header-icon user-profile\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-dropdown [items]=\"profileItems\" [config]=\"profileConfig\"\r\n [triggerTemplate]=\"triggerTemplate\"\r\n (itemClick)=\"onProfileClick($event)\">\r\n <ng-template #triggerTemplate>\r\n @if (appStateService.currentUser()?.user_photo_id_cyfm) {\r\n <div class=\"profile-avatar\">\r\n <img cideEleFileImage [fileId]=\"(appStateService.currentUser()?.user_photo_id_cyfm || '')\"\r\n [altText]=\"'User Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\r\n </div>\r\n } @else {\r\n <div class=\"profile-avatar\">\r\n <cide-ele-icon name=\"person\" class=\"tw-w-6 tw-h-6 tw-text-white\"></cide-ele-icon>\r\n </div>\r\n }\r\n </ng-template>\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">My Account</div>\r\n </div>\r\n </div>\r\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}.header-year-dropdown-wrapper{position:relative;display:flex;align-items:center;justify-content:center}.header-year-pill{position:relative;display:flex;align-items:center;padding:.375rem .875rem;background:linear-gradient(135deg,#3b82f61a,#2563eb26);border:1px solid rgba(59,130,246,.3);border-radius:9999px;color:#2563eb;font-size:.75rem;font-weight:600;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;white-space:nowrap;box-shadow:0 1px 3px #3b82f61a;min-height:28px}.header-year-pill:hover{background:linear-gradient(135deg,#3b82f626,#2563eb33);border-color:#3b82f666;transform:translateY(-1px);box-shadow:0 2px 6px #3b82f626}.header-year-pill-text{max-width:200px;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.01em;line-height:1.2}::ng-deep .header-year-dropdown-wrapper .dropdown-trigger{background:transparent!important;border:none!important;border-radius:0!important;padding:0!important;width:auto!important;height:auto!important;min-width:auto!important;box-shadow:none!important;display:flex!important;align-items:center!important;justify-content:center!important;transition:none!important}::ng-deep .header-year-dropdown-wrapper .dropdown-trigger:hover{background:transparent!important}::ng-deep .header-year-dropdown-wrapper .dropdown-trigger:hover .header-year-pill{background:linear-gradient(135deg,#3b82f626,#2563eb33)!important;border-color:#3b82f666!important;transform:translateY(-1px)!important;box-shadow:0 2px 6px #3b82f626!important}::ng-deep .header-dropdown-container .dropdown-trigger:focus,::ng-deep .header-dropdown-container .dropdown-trigger:focus-visible,::ng-deep .header-dropdown-container .dropdown-trigger:active{outline:none!important;box-shadow:0 2px 6px #3b82f626!important}.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"], dependencies: [{ kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "directive", type: CideEleFileImageDirective, selector: "[cideEleFileImage]", inputs: ["fileId", "altText"] }] });
1737
1825
  }
1738
1826
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytHeaderWrapperComponent, decorators: [{
1739
1827
  type: Component,
1740
1828
  args: [{ selector: 'cide-lyt-header-wrapper', imports: [CideInputComponent, CommonModule, CideIconComponent,
1741
- CideEleDropdownComponent, CideEleFileImageDirective], template: "<header id=\"cide-lyt-header-wrapper\" class=\"cide-lyt-header tw-w-full tw-select-none cide-lyt-header-wrapper-hide\">\r\n <!-- Logo Section -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"header-logo-container tw-flex tw-items-center tw-gap-3 tw-cursor-pointer\" (click)=\"onLogoClick()\"\r\n (keydown.enter)=\"onLogoClick()\" (keydown.space)=\"onLogoClick()\" tabindex=\"0\" role=\"button\"\r\n aria-label=\"Navigate to home\" title=\"Click to go to control panel home\">\r\n @if (appStateService.activeEntity()?.syen_photo_id_cyfm) {\r\n <img cideEleFileImage [fileId]=\"(appStateService.activeEntity()?.syen_photo_id_cyfm || '')\"\r\n [altText]=\"'Entity Logo'\" class=\"tw-w-8 tw-h-8 tw-object-contain\">\r\n } @else {\r\n <cide-ele-icon name=\"business\" class=\"tw-w-8 tw-h-8 tw-text-blue-600\"></cide-ele-icon>\r\n }\r\n\r\n </div>\r\n @if (appStateService.activeEntity()?.syen_name) {\r\n <span\r\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\"\r\n (click)=\"onEntityNameClick()\" title=\"Click to switch entity\">\r\n {{ appStateService.activeEntity()?.syen_name }}\r\n </span>\r\n }\r\n </div>\r\n <!-- Search Section -->\r\n <div class=\"header-search-container\">\r\n <cide-ele-input id=\"cide_lyt_header_search\" placeholder=\"Search...\" leadingIcon=\"search\"\r\n size=\"md\"></cide-ele-input>\r\n </div>\r\n\r\n <!-- Icons Section -->\r\n <div class=\"header-icons-container\">\r\n <!-- Financial Year Dropdown -->\r\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentFinancialYearName() }}</span>\r\n <cide-ele-dropdown [items]=\"financialYearItems\" [config]=\"financialYearConfig\"\r\n (itemClick)=\"onFinancialYearClick($event)\">\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">Financial Year</div>\r\n </div>\r\n\r\n <!-- Academic Year Dropdown -->\r\n <div class=\"header-dropdown-container\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <span class=\"tw-text-xs tw-font-semibold tw-mr-1\">{{ currentAcademicYearName() }}</span>\r\n <cide-ele-dropdown [items]=\"academicYearItems\" [config]=\"academicYearConfig\"\r\n (itemClick)=\"onAcademicYearClick($event)\">\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">Academic Year</div>\r\n </div>\r\n\r\n <div class=\"header-icon\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-icon>notifications</cide-ele-icon>\r\n <div class=\"header-badge\">3</div>\r\n <div class=\"header-tooltip\">Notifications</div>\r\n </div>\r\n\r\n <div class=\"header-divider\"></div>\r\n\r\n <!-- Profile with Dropdown -->\r\n <div class=\"header-icon user-profile\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-dropdown [items]=\"profileItems\" [config]=\"profileConfig\"\r\n [triggerTemplate]=\"triggerTemplate\"\r\n (itemClick)=\"onProfileClick($event)\">\r\n <ng-template #triggerTemplate>\r\n @if (appStateService.currentUser()?.user_photo_id_cyfm) {\r\n <div class=\"profile-avatar\">\r\n <img cideEleFileImage [fileId]=\"(appStateService.currentUser()?.user_photo_id_cyfm || '')\"\r\n [altText]=\"'User Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\r\n </div>\r\n } @else {\r\n <div class=\"profile-avatar\">\r\n <cide-ele-icon name=\"person\" class=\"tw-w-6 tw-h-6 tw-text-white\"></cide-ele-icon>\r\n </div>\r\n }\r\n </ng-template>\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">My Account</div>\r\n </div>\r\n </div>\r\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"] }]
1829
+ CideEleDropdownComponent, CideEleFileImageDirective], template: "<header id=\"cide-lyt-header-wrapper\" class=\"cide-lyt-header tw-w-full tw-select-none cide-lyt-header-wrapper-hide\">\r\n <!-- Logo Section -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"header-logo-container tw-flex tw-items-center tw-gap-3 tw-cursor-pointer\" (click)=\"onLogoClick()\"\r\n (keydown.enter)=\"onLogoClick()\" (keydown.space)=\"onLogoClick()\" tabindex=\"0\" role=\"button\"\r\n aria-label=\"Navigate to home\" title=\"Click to go to control panel home\">\r\n @if (appStateService.activeEntity()?.syen_photo_id_cyfm) {\r\n <img cideEleFileImage [fileId]=\"(appStateService.activeEntity()?.syen_photo_id_cyfm || '')\"\r\n [altText]=\"'Entity Logo'\" class=\"tw-w-8 tw-h-8 tw-object-contain\">\r\n } @else {\r\n <cide-ele-icon name=\"business\" class=\"tw-w-8 tw-h-8 tw-text-blue-600\"></cide-ele-icon>\r\n }\r\n\r\n </div>\r\n @if (appStateService.activeEntity()?.syen_name) {\r\n <span\r\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\"\r\n (click)=\"onEntityNameClick()\" title=\"Click to switch entity\">\r\n {{ appStateService.activeEntity()?.syen_name }}\r\n </span>\r\n }\r\n </div>\r\n <!-- Search Section -->\r\n <div class=\"header-search-container\">\r\n <cide-ele-input id=\"cide_lyt_header_search\" placeholder=\"Search...\" leadingIcon=\"search\"\r\n size=\"md\"></cide-ele-input>\r\n </div>\r\n\r\n <!-- Icons Section -->\r\n <div class=\"header-icons-container\">\r\n <!-- Combined Year Dropdown (Financial Year + Academic Year) -->\r\n <div class=\"header-year-dropdown-wrapper\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-dropdown [items]=\"combinedYearItems\" [config]=\"combinedYearConfig\"\r\n [triggerTemplate]=\"yearTriggerTemplate\"\r\n (itemClick)=\"onCombinedYearClick($event)\">\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">{{ currentYearDisplay().type === 'AY' ? 'Academic Year' : 'Financial Year' }}</div>\r\n </div>\r\n \r\n <ng-template #yearTriggerTemplate let-isOpen=\"isOpen\">\r\n <div class=\"header-year-pill\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-mr-1.5\">{{ currentYearDisplay().icon }}</cide-ele-icon>\r\n <span class=\"header-year-pill-text\">{{ currentYearDisplay().label }}</span>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"header-icon\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-icon>notifications</cide-ele-icon>\r\n <div class=\"header-badge\">3</div>\r\n <div class=\"header-tooltip\">Notifications</div>\r\n </div>\r\n\r\n <div class=\"header-divider\"></div>\r\n\r\n <!-- Profile with Dropdown -->\r\n <div class=\"header-icon user-profile\" (mouseenter)=\"updateTooltipPosition($event)\">\r\n <cide-ele-dropdown [items]=\"profileItems\" [config]=\"profileConfig\"\r\n [triggerTemplate]=\"triggerTemplate\"\r\n (itemClick)=\"onProfileClick($event)\">\r\n <ng-template #triggerTemplate>\r\n @if (appStateService.currentUser()?.user_photo_id_cyfm) {\r\n <div class=\"profile-avatar\">\r\n <img cideEleFileImage [fileId]=\"(appStateService.currentUser()?.user_photo_id_cyfm || '')\"\r\n [altText]=\"'User Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\r\n </div>\r\n } @else {\r\n <div class=\"profile-avatar\">\r\n <cide-ele-icon name=\"person\" class=\"tw-w-6 tw-h-6 tw-text-white\"></cide-ele-icon>\r\n </div>\r\n }\r\n </ng-template>\r\n </cide-ele-dropdown>\r\n <div class=\"header-tooltip\">My Account</div>\r\n </div>\r\n </div>\r\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}.header-year-dropdown-wrapper{position:relative;display:flex;align-items:center;justify-content:center}.header-year-pill{position:relative;display:flex;align-items:center;padding:.375rem .875rem;background:linear-gradient(135deg,#3b82f61a,#2563eb26);border:1px solid rgba(59,130,246,.3);border-radius:9999px;color:#2563eb;font-size:.75rem;font-weight:600;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;white-space:nowrap;box-shadow:0 1px 3px #3b82f61a;min-height:28px}.header-year-pill:hover{background:linear-gradient(135deg,#3b82f626,#2563eb33);border-color:#3b82f666;transform:translateY(-1px);box-shadow:0 2px 6px #3b82f626}.header-year-pill-text{max-width:200px;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.01em;line-height:1.2}::ng-deep .header-year-dropdown-wrapper .dropdown-trigger{background:transparent!important;border:none!important;border-radius:0!important;padding:0!important;width:auto!important;height:auto!important;min-width:auto!important;box-shadow:none!important;display:flex!important;align-items:center!important;justify-content:center!important;transition:none!important}::ng-deep .header-year-dropdown-wrapper .dropdown-trigger:hover{background:transparent!important}::ng-deep .header-year-dropdown-wrapper .dropdown-trigger:hover .header-year-pill{background:linear-gradient(135deg,#3b82f626,#2563eb33)!important;border-color:#3b82f666!important;transform:translateY(-1px)!important;box-shadow:0 2px 6px #3b82f626!important}::ng-deep .header-dropdown-container .dropdown-trigger:focus,::ng-deep .header-dropdown-container .dropdown-trigger:focus-visible,::ng-deep .header-dropdown-container .dropdown-trigger:active{outline:none!important;box-shadow:0 2px 6px #3b82f626!important}.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"] }]
1742
1830
  }], ctorParameters: () => [], propDecorators: { triggerTemplate: [{
1743
1831
  type: ViewChild,
1744
1832
  args: ['triggerTemplate']
1833
+ }], yearTriggerTemplate: [{
1834
+ type: ViewChild,
1835
+ args: ['yearTriggerTemplate']
1745
1836
  }] } });
1746
1837
 
1747
1838
  class CideLytUserStatusService {
@@ -2944,8 +3035,8 @@ class CideLytSidedrawerWrapperComponent {
2944
3035
  }
2945
3036
  ngOnInit() {
2946
3037
  // Initialize the component map (You'd likely populate this from a config or service)
2947
- this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-Dq97FU7V.mjs').then(m => m.CideLytSidedrawerNotesComponent);
2948
- this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-CfH0gv6b.mjs').then(m => m.CideLytDrawerThemeComponent);
3038
+ this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-CK1o3zht.mjs').then(m => m.CideLytSidedrawerNotesComponent);
3039
+ this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-DP0MFwbT.mjs').then(m => m.CideLytDrawerThemeComponent);
2949
3040
  }
2950
3041
  async loadComponent(configFor) {
2951
3042
  console.log('🔍 SIDEDRAWER - Loading component:', configFor, 'Current tab:', this.currentTabId);
@@ -3468,7 +3559,7 @@ const layoutControlPannelChildRoutes = [{
3468
3559
  },
3469
3560
  {
3470
3561
  path: "home",
3471
- loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-DK1ebn4K.mjs').then(c => c.CideLytHomeWrapperComponent),
3562
+ loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-4C8MKGr0.mjs').then(c => c.CideLytHomeWrapperComponent),
3472
3563
  canActivate: [authGuard],
3473
3564
  data: {
3474
3565
  reuseTab: true, // For CustomRouteReuseStrategy
@@ -5036,4 +5127,4 @@ var floatingEntityRightsSharing_component = /*#__PURE__*/Object.freeze({
5036
5127
  */
5037
5128
 
5038
5129
  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 };
5039
- //# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-pi0j2OhQ.mjs.map
5130
+ //# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-DfEO4yXQ.mjs.map