cloud-ide-layout 1.0.108 → 1.0.111
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.
- package/fesm2022/{cloud-ide-layout-cloud-ide-layout-BaeUxU6C.mjs → cloud-ide-layout-cloud-ide-layout-BbcIno6W.mjs} +985 -900
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-BbcIno6W.mjs.map +1 -0
- package/fesm2022/{cloud-ide-layout-drawer-theme.component-D46FeYqz.mjs → cloud-ide-layout-drawer-theme.component-CAocxERw.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-drawer-theme.component-D46FeYqz.mjs.map → cloud-ide-layout-drawer-theme.component-CAocxERw.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-floating-entity-selection.component-D_BFF6Qt.mjs → cloud-ide-layout-floating-entity-selection.component-DMS4hfOP.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-floating-entity-selection.component-D_BFF6Qt.mjs.map → cloud-ide-layout-floating-entity-selection.component-DMS4hfOP.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-home-wrapper.component-C61ybzgc.mjs → cloud-ide-layout-home-wrapper.component-D3FEDXRo.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-home-wrapper.component-C61ybzgc.mjs.map → cloud-ide-layout-home-wrapper.component-D3FEDXRo.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-CIwq4Ei_.mjs → cloud-ide-layout-sidedrawer-notes.component-DYbvtr2t.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-CIwq4Ei_.mjs.map → cloud-ide-layout-sidedrawer-notes.component-DYbvtr2t.mjs.map} +1 -1
- package/fesm2022/cloud-ide-layout.mjs +1 -1
- package/index.d.ts +4 -0
- package/package.json +1 -1
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-BaeUxU6C.mjs.map +0 -1
|
@@ -7,7 +7,7 @@ import { map, filter, tap, catchError, shareReplay, take, distinctUntilChanged }
|
|
|
7
7
|
import * as i2$1 from '@angular/router';
|
|
8
8
|
import { Router, NavigationEnd, RouteReuseStrategy, RouterModule } from '@angular/router';
|
|
9
9
|
import { Title, DomSanitizer } from '@angular/platform-browser';
|
|
10
|
-
import { CideEleFileManagerService, CideElementsService, CideEleFloatingContainerService, NotificationService, CideIconComponent, CideEleButtonComponent, CideInputComponent, CideSelectComponent, CideThemeService, WebSocketNotificationService, NotificationApiService, CideEleDropdownComponent, CideEleFileImageDirective, CideEleResizerDirective, TooltipDirective, CideSpinnerComponent, CideEleSkeletonLoaderComponent, KeyboardShortcutService, CideEleFloatingContainerManagerComponent, CideEleGlobalNotificationsComponent, CideEleBreadcrumbComponent } from 'cloud-ide-element';
|
|
10
|
+
import { CideEleFileManagerService, CideElementsService, CideEleFloatingContainerService, NotificationService, CideIconComponent, CideEleButtonComponent, CideInputComponent, CideSelectComponent, CideThemeService, WebSocketNotificationService, NotificationApiService, CideEleDropdownComponent, CideEleFileImageDirective, CideEleResizerDirective, TooltipDirective, CideSpinnerComponent, CideEleSkeletonLoaderComponent, KeyboardShortcutService, FloatingContainerShortcutsService, CideEleFloatingContainerManagerComponent, CideEleGlobalNotificationsComponent, CideEleBreadcrumbComponent } from 'cloud-ide-element';
|
|
11
11
|
import * as i1 from '@angular/common';
|
|
12
12
|
import { CommonModule, NgClass, NgFor, NgIf, isPlatformBrowser } from '@angular/common';
|
|
13
13
|
import { FINANCIAL_YEAR_SERVICE_TOKEN, ACADEMIC_YEAR_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, authGuard, ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
|
|
@@ -1268,7 +1268,7 @@ class CideLytFloatingEntitySelectionService {
|
|
|
1268
1268
|
}
|
|
1269
1269
|
try {
|
|
1270
1270
|
// Use relative import to avoid circular dependency
|
|
1271
|
-
const module = await import('./cloud-ide-layout-floating-entity-selection.component-
|
|
1271
|
+
const module = await import('./cloud-ide-layout-floating-entity-selection.component-DMS4hfOP.mjs');
|
|
1272
1272
|
if (module.CideLytFloatingEntitySelectionComponent) {
|
|
1273
1273
|
this.containerService.registerComponent('entity-selection-header', module.CideLytFloatingEntitySelectionComponent);
|
|
1274
1274
|
console.log('✅ Entity selection component registered successfully');
|
|
@@ -1442,36 +1442,65 @@ class NotificationSettingsService {
|
|
|
1442
1442
|
// Create audio context for sound generation
|
|
1443
1443
|
// Handle browser autoplay policy - resume if suspended
|
|
1444
1444
|
const AudioContextClass = window.AudioContext || window.webkitAudioContext;
|
|
1445
|
-
|
|
1445
|
+
let audioContext;
|
|
1446
|
+
// Try to get existing audio context or create new one
|
|
1447
|
+
if (!this._audioContext) {
|
|
1448
|
+
audioContext = new AudioContextClass();
|
|
1449
|
+
this._audioContext = audioContext;
|
|
1450
|
+
}
|
|
1451
|
+
else {
|
|
1452
|
+
audioContext = this._audioContext;
|
|
1453
|
+
}
|
|
1454
|
+
// Resume audio context if suspended (required for browser autoplay policy)
|
|
1446
1455
|
if (audioContext.state === 'suspended') {
|
|
1447
|
-
audioContext.resume()
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
break;
|
|
1465
|
-
case 'default':
|
|
1466
|
-
default:
|
|
1467
|
-
this.playTone(audioContext, 800, 600, 0.15, volume, 'sine');
|
|
1468
|
-
break;
|
|
1456
|
+
audioContext.resume().then(() => {
|
|
1457
|
+
this.playSoundWithContext(audioContext, settings);
|
|
1458
|
+
}).catch((error) => {
|
|
1459
|
+
console.warn('Failed to resume audio context:', error);
|
|
1460
|
+
// Try creating a new context as fallback
|
|
1461
|
+
try {
|
|
1462
|
+
const newContext = new AudioContextClass();
|
|
1463
|
+
this.playSoundWithContext(newContext, settings);
|
|
1464
|
+
}
|
|
1465
|
+
catch (fallbackError) {
|
|
1466
|
+
console.warn('Failed to create fallback audio context:', fallbackError);
|
|
1467
|
+
}
|
|
1468
|
+
});
|
|
1469
|
+
}
|
|
1470
|
+
else {
|
|
1471
|
+
// Context is already running, play sound immediately
|
|
1472
|
+
this.playSoundWithContext(audioContext, settings);
|
|
1469
1473
|
}
|
|
1470
1474
|
}
|
|
1471
1475
|
catch (error) {
|
|
1472
1476
|
console.warn('Failed to play notification sound:', error);
|
|
1473
1477
|
}
|
|
1474
1478
|
}
|
|
1479
|
+
/**
|
|
1480
|
+
* Play sound with the given audio context
|
|
1481
|
+
*/
|
|
1482
|
+
playSoundWithContext(audioContext, settings) {
|
|
1483
|
+
const volume = settings.soundVolume / 100;
|
|
1484
|
+
// Configure based on sound type
|
|
1485
|
+
switch (settings.soundType) {
|
|
1486
|
+
case 'gentle':
|
|
1487
|
+
this.playTone(audioContext, 800, 600, 0.15, volume, 'sine');
|
|
1488
|
+
break;
|
|
1489
|
+
case 'alert':
|
|
1490
|
+
this.playTone(audioContext, 1000, 800, 0.2, volume, 'square');
|
|
1491
|
+
break;
|
|
1492
|
+
case 'chime':
|
|
1493
|
+
// Play a chord (C-E-G)
|
|
1494
|
+
this.playTone(audioContext, 523.25, 523.25, 0.3, volume * 0.7, 'sine', 0); // C5
|
|
1495
|
+
this.playTone(audioContext, 659.25, 659.25, 0.3, volume * 0.7, 'sine', 0.05); // E5
|
|
1496
|
+
this.playTone(audioContext, 783.99, 783.99, 0.3, volume * 0.7, 'sine', 0.1); // G5
|
|
1497
|
+
break;
|
|
1498
|
+
case 'default':
|
|
1499
|
+
default:
|
|
1500
|
+
this.playTone(audioContext, 800, 600, 0.15, volume, 'sine');
|
|
1501
|
+
break;
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1475
1504
|
/**
|
|
1476
1505
|
* Play a single tone
|
|
1477
1506
|
*/
|
|
@@ -1590,216 +1619,216 @@ class NotificationSettingsComponent {
|
|
|
1590
1619
|
this.notificationService.info('Settings reset to defaults');
|
|
1591
1620
|
}
|
|
1592
1621
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NotificationSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1593
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NotificationSettingsComponent, isStandalone: true, selector: "cide-lyt-notification-settings", ngImport: i0, template: `
|
|
1594
|
-
<div class="tw-p-6 tw-space-y-6 tw-bg-white dark:tw-bg-gray-900">
|
|
1595
|
-
<!-- Header -->
|
|
1596
|
-
<div class="tw-flex tw-items-center tw-gap-2 tw-pb-3 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
1597
|
-
<div class="tw-w-8 tw-h-8 tw-bg-blue-500 tw-rounded-lg tw-flex tw-items-center tw-justify-center">
|
|
1598
|
-
<cide-ele-icon class="tw-text-white">settings</cide-ele-icon>
|
|
1599
|
-
</div>
|
|
1600
|
-
<div>
|
|
1601
|
-
<h3 class="tw-m-0 tw-text-sm tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Notification Settings</h3>
|
|
1602
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Customize your notification preferences</p>
|
|
1603
|
-
</div>
|
|
1604
|
-
</div>
|
|
1605
|
-
|
|
1606
|
-
<form [formGroup]="settingsForm" class="tw-space-y-6">
|
|
1607
|
-
<!-- Sound Settings -->
|
|
1608
|
-
<div class="tw-space-y-3">
|
|
1609
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Sound Settings</h4>
|
|
1610
|
-
|
|
1611
|
-
<!-- Enable Sound -->
|
|
1612
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1613
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1614
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">volume_up</cide-ele-icon>
|
|
1615
|
-
<div>
|
|
1616
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Sound</label>
|
|
1617
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Play sound when receiving notifications</p>
|
|
1618
|
-
</div>
|
|
1619
|
-
</div>
|
|
1620
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1621
|
-
<input
|
|
1622
|
-
type="checkbox"
|
|
1623
|
-
[checked]="settingsForm.get('soundEnabled')?.value"
|
|
1624
|
-
(change)="settingsForm.get('soundEnabled')?.setValue($any($event.target).checked)"
|
|
1625
|
-
class="tw-sr-only tw-peer">
|
|
1626
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1627
|
-
</label>
|
|
1628
|
-
</div>
|
|
1629
|
-
|
|
1630
|
-
@if (settingsForm.get('soundEnabled')?.value) {
|
|
1631
|
-
<!-- Sound Type -->
|
|
1632
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1633
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Sound Type</label>
|
|
1634
|
-
<cide-ele-select
|
|
1635
|
-
formControlName="soundType"
|
|
1636
|
-
[options]="soundTypeOptions"
|
|
1637
|
-
placeholder="Select sound type">
|
|
1638
|
-
</cide-ele-select>
|
|
1639
|
-
</div>
|
|
1640
|
-
|
|
1641
|
-
<!-- Sound Volume -->
|
|
1642
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1643
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-mb-2">
|
|
1644
|
-
<label class="tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300">Volume</label>
|
|
1645
|
-
<span class="tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ settingsForm.get('soundVolume')?.value }}%</span>
|
|
1646
|
-
</div>
|
|
1647
|
-
<input
|
|
1648
|
-
type="range"
|
|
1649
|
-
formControlName="soundVolume"
|
|
1650
|
-
min="0"
|
|
1651
|
-
max="100"
|
|
1652
|
-
step="5"
|
|
1653
|
-
class="tw-w-full tw-h-2 tw-bg-gray-200 tw-rounded-lg tw-appearance-none tw-cursor-pointer dark:tw-bg-gray-700 tw-accent-blue-600">
|
|
1654
|
-
<div class="tw-flex tw-justify-between tw-text-[10px] tw-text-gray-400 tw-mt-1">
|
|
1655
|
-
<span>0%</span>
|
|
1656
|
-
<span>100%</span>
|
|
1657
|
-
</div>
|
|
1658
|
-
</div>
|
|
1659
|
-
|
|
1660
|
-
<!-- Test Sound Button -->
|
|
1661
|
-
<button
|
|
1662
|
-
type="button"
|
|
1663
|
-
cideEleButton
|
|
1664
|
-
variant="outline"
|
|
1665
|
-
size="sm"
|
|
1666
|
-
(click)="testSound()"
|
|
1667
|
-
class="tw-w-full">
|
|
1668
|
-
<cide-ele-icon>play_arrow</cide-ele-icon>
|
|
1669
|
-
Test Sound
|
|
1670
|
-
</button>
|
|
1671
|
-
}
|
|
1672
|
-
</div>
|
|
1673
|
-
|
|
1674
|
-
<!-- Quiet Hours -->
|
|
1675
|
-
<div class="tw-space-y-3">
|
|
1676
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Quiet Hours</h4>
|
|
1677
|
-
|
|
1678
|
-
<!-- Enable Quiet Hours -->
|
|
1679
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1680
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1681
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">schedule</cide-ele-icon>
|
|
1682
|
-
<div>
|
|
1683
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Quiet Hours</label>
|
|
1684
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Mute notifications during specified hours</p>
|
|
1685
|
-
</div>
|
|
1686
|
-
</div>
|
|
1687
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1688
|
-
<input
|
|
1689
|
-
type="checkbox"
|
|
1690
|
-
[checked]="settingsForm.get('quietHoursEnabled')?.value"
|
|
1691
|
-
(change)="settingsForm.get('quietHoursEnabled')?.setValue($any($event.target).checked)"
|
|
1692
|
-
class="tw-sr-only tw-peer">
|
|
1693
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1694
|
-
</label>
|
|
1695
|
-
</div>
|
|
1696
|
-
|
|
1697
|
-
@if (settingsForm.get('quietHoursEnabled')?.value) {
|
|
1698
|
-
<div class="tw-grid tw-grid-cols-2 tw-gap-3 tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1699
|
-
<div>
|
|
1700
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Start Time</label>
|
|
1701
|
-
<cide-ele-input
|
|
1702
|
-
type="time"
|
|
1703
|
-
formControlName="quietHoursStart"
|
|
1704
|
-
placeholder="22:00">
|
|
1705
|
-
</cide-ele-input>
|
|
1706
|
-
</div>
|
|
1707
|
-
<div>
|
|
1708
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">End Time</label>
|
|
1709
|
-
<cide-ele-input
|
|
1710
|
-
type="time"
|
|
1711
|
-
formControlName="quietHoursEnd"
|
|
1712
|
-
placeholder="08:00">
|
|
1713
|
-
</cide-ele-input>
|
|
1714
|
-
</div>
|
|
1715
|
-
</div>
|
|
1716
|
-
}
|
|
1717
|
-
</div>
|
|
1718
|
-
|
|
1719
|
-
<!-- Snooze Settings -->
|
|
1720
|
-
<div class="tw-space-y-3">
|
|
1721
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Snooze</h4>
|
|
1722
|
-
|
|
1723
|
-
<!-- Enable Snooze -->
|
|
1724
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1725
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1726
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">snooze</cide-ele-icon>
|
|
1727
|
-
<div>
|
|
1728
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Snooze</label>
|
|
1729
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Temporarily pause notifications</p>
|
|
1730
|
-
</div>
|
|
1731
|
-
</div>
|
|
1732
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1733
|
-
<input
|
|
1734
|
-
type="checkbox"
|
|
1735
|
-
[checked]="settingsForm.get('snoozeEnabled')?.value"
|
|
1736
|
-
(change)="settingsForm.get('snoozeEnabled')?.setValue($any($event.target).checked)"
|
|
1737
|
-
class="tw-sr-only tw-peer">
|
|
1738
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1739
|
-
</label>
|
|
1740
|
-
</div>
|
|
1741
|
-
|
|
1742
|
-
@if (settingsForm.get('snoozeEnabled')?.value) {
|
|
1743
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1744
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Snooze Duration (minutes)</label>
|
|
1745
|
-
<cide-ele-input
|
|
1746
|
-
type="number"
|
|
1747
|
-
formControlName="snoozeDuration"
|
|
1748
|
-
min="5"
|
|
1749
|
-
max="1440"
|
|
1750
|
-
placeholder="30">
|
|
1751
|
-
</cide-ele-input>
|
|
1752
|
-
</div>
|
|
1753
|
-
}
|
|
1754
|
-
</div>
|
|
1755
|
-
|
|
1756
|
-
<!-- Other Settings -->
|
|
1757
|
-
<div class="tw-space-y-3">
|
|
1758
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Other Settings</h4>
|
|
1759
|
-
|
|
1760
|
-
<!-- Desktop Notifications -->
|
|
1761
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1762
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1763
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">desktop_windows</cide-ele-icon>
|
|
1764
|
-
<div>
|
|
1765
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Desktop Notifications</label>
|
|
1766
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Show browser notifications</p>
|
|
1767
|
-
</div>
|
|
1768
|
-
</div>
|
|
1769
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1770
|
-
<input
|
|
1771
|
-
type="checkbox"
|
|
1772
|
-
[checked]="settingsForm.get('desktopNotifications')?.value"
|
|
1773
|
-
(change)="settingsForm.get('desktopNotifications')?.setValue($any($event.target).checked)"
|
|
1774
|
-
class="tw-sr-only tw-peer">
|
|
1775
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1776
|
-
</label>
|
|
1777
|
-
</div>
|
|
1778
|
-
</div>
|
|
1779
|
-
|
|
1780
|
-
<!-- Action Buttons -->
|
|
1781
|
-
<div class="tw-flex tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200 dark:tw-border-gray-700">
|
|
1782
|
-
<button
|
|
1783
|
-
type="button"
|
|
1784
|
-
cideEleButton
|
|
1785
|
-
variant="outline"
|
|
1786
|
-
size="sm"
|
|
1787
|
-
(click)="reset()"
|
|
1788
|
-
class="tw-flex-1">
|
|
1789
|
-
Reset
|
|
1790
|
-
</button>
|
|
1791
|
-
<button
|
|
1792
|
-
type="button"
|
|
1793
|
-
cideEleButton
|
|
1794
|
-
variant="primary"
|
|
1795
|
-
size="sm"
|
|
1796
|
-
(click)="save()"
|
|
1797
|
-
class="tw-flex-1">
|
|
1798
|
-
Save Settings
|
|
1799
|
-
</button>
|
|
1800
|
-
</div>
|
|
1801
|
-
</form>
|
|
1802
|
-
</div>
|
|
1622
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NotificationSettingsComponent, isStandalone: true, selector: "cide-lyt-notification-settings", ngImport: i0, template: `
|
|
1623
|
+
<div class="tw-p-6 tw-space-y-6 tw-bg-white dark:tw-bg-gray-900">
|
|
1624
|
+
<!-- Header -->
|
|
1625
|
+
<div class="tw-flex tw-items-center tw-gap-2 tw-pb-3 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
1626
|
+
<div class="tw-w-8 tw-h-8 tw-bg-blue-500 tw-rounded-lg tw-flex tw-items-center tw-justify-center">
|
|
1627
|
+
<cide-ele-icon class="tw-text-white">settings</cide-ele-icon>
|
|
1628
|
+
</div>
|
|
1629
|
+
<div>
|
|
1630
|
+
<h3 class="tw-m-0 tw-text-sm tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Notification Settings</h3>
|
|
1631
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Customize your notification preferences</p>
|
|
1632
|
+
</div>
|
|
1633
|
+
</div>
|
|
1634
|
+
|
|
1635
|
+
<form [formGroup]="settingsForm" class="tw-space-y-6">
|
|
1636
|
+
<!-- Sound Settings -->
|
|
1637
|
+
<div class="tw-space-y-3">
|
|
1638
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Sound Settings</h4>
|
|
1639
|
+
|
|
1640
|
+
<!-- Enable Sound -->
|
|
1641
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1642
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1643
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">volume_up</cide-ele-icon>
|
|
1644
|
+
<div>
|
|
1645
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Sound</label>
|
|
1646
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Play sound when receiving notifications</p>
|
|
1647
|
+
</div>
|
|
1648
|
+
</div>
|
|
1649
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1650
|
+
<input
|
|
1651
|
+
type="checkbox"
|
|
1652
|
+
[checked]="settingsForm.get('soundEnabled')?.value"
|
|
1653
|
+
(change)="settingsForm.get('soundEnabled')?.setValue($any($event.target).checked)"
|
|
1654
|
+
class="tw-sr-only tw-peer">
|
|
1655
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1656
|
+
</label>
|
|
1657
|
+
</div>
|
|
1658
|
+
|
|
1659
|
+
@if (settingsForm.get('soundEnabled')?.value) {
|
|
1660
|
+
<!-- Sound Type -->
|
|
1661
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1662
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Sound Type</label>
|
|
1663
|
+
<cide-ele-select
|
|
1664
|
+
formControlName="soundType"
|
|
1665
|
+
[options]="soundTypeOptions"
|
|
1666
|
+
placeholder="Select sound type">
|
|
1667
|
+
</cide-ele-select>
|
|
1668
|
+
</div>
|
|
1669
|
+
|
|
1670
|
+
<!-- Sound Volume -->
|
|
1671
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1672
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-mb-2">
|
|
1673
|
+
<label class="tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300">Volume</label>
|
|
1674
|
+
<span class="tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ settingsForm.get('soundVolume')?.value }}%</span>
|
|
1675
|
+
</div>
|
|
1676
|
+
<input
|
|
1677
|
+
type="range"
|
|
1678
|
+
formControlName="soundVolume"
|
|
1679
|
+
min="0"
|
|
1680
|
+
max="100"
|
|
1681
|
+
step="5"
|
|
1682
|
+
class="tw-w-full tw-h-2 tw-bg-gray-200 tw-rounded-lg tw-appearance-none tw-cursor-pointer dark:tw-bg-gray-700 tw-accent-blue-600">
|
|
1683
|
+
<div class="tw-flex tw-justify-between tw-text-[10px] tw-text-gray-400 tw-mt-1">
|
|
1684
|
+
<span>0%</span>
|
|
1685
|
+
<span>100%</span>
|
|
1686
|
+
</div>
|
|
1687
|
+
</div>
|
|
1688
|
+
|
|
1689
|
+
<!-- Test Sound Button -->
|
|
1690
|
+
<button
|
|
1691
|
+
type="button"
|
|
1692
|
+
cideEleButton
|
|
1693
|
+
variant="outline"
|
|
1694
|
+
size="sm"
|
|
1695
|
+
(click)="testSound()"
|
|
1696
|
+
class="tw-w-full">
|
|
1697
|
+
<cide-ele-icon>play_arrow</cide-ele-icon>
|
|
1698
|
+
Test Sound
|
|
1699
|
+
</button>
|
|
1700
|
+
}
|
|
1701
|
+
</div>
|
|
1702
|
+
|
|
1703
|
+
<!-- Quiet Hours -->
|
|
1704
|
+
<div class="tw-space-y-3">
|
|
1705
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Quiet Hours</h4>
|
|
1706
|
+
|
|
1707
|
+
<!-- Enable Quiet Hours -->
|
|
1708
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1709
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1710
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">schedule</cide-ele-icon>
|
|
1711
|
+
<div>
|
|
1712
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Quiet Hours</label>
|
|
1713
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Mute notifications during specified hours</p>
|
|
1714
|
+
</div>
|
|
1715
|
+
</div>
|
|
1716
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1717
|
+
<input
|
|
1718
|
+
type="checkbox"
|
|
1719
|
+
[checked]="settingsForm.get('quietHoursEnabled')?.value"
|
|
1720
|
+
(change)="settingsForm.get('quietHoursEnabled')?.setValue($any($event.target).checked)"
|
|
1721
|
+
class="tw-sr-only tw-peer">
|
|
1722
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1723
|
+
</label>
|
|
1724
|
+
</div>
|
|
1725
|
+
|
|
1726
|
+
@if (settingsForm.get('quietHoursEnabled')?.value) {
|
|
1727
|
+
<div class="tw-grid tw-grid-cols-2 tw-gap-3 tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1728
|
+
<div>
|
|
1729
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Start Time</label>
|
|
1730
|
+
<cide-ele-input
|
|
1731
|
+
type="time"
|
|
1732
|
+
formControlName="quietHoursStart"
|
|
1733
|
+
placeholder="22:00">
|
|
1734
|
+
</cide-ele-input>
|
|
1735
|
+
</div>
|
|
1736
|
+
<div>
|
|
1737
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">End Time</label>
|
|
1738
|
+
<cide-ele-input
|
|
1739
|
+
type="time"
|
|
1740
|
+
formControlName="quietHoursEnd"
|
|
1741
|
+
placeholder="08:00">
|
|
1742
|
+
</cide-ele-input>
|
|
1743
|
+
</div>
|
|
1744
|
+
</div>
|
|
1745
|
+
}
|
|
1746
|
+
</div>
|
|
1747
|
+
|
|
1748
|
+
<!-- Snooze Settings -->
|
|
1749
|
+
<div class="tw-space-y-3">
|
|
1750
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Snooze</h4>
|
|
1751
|
+
|
|
1752
|
+
<!-- Enable Snooze -->
|
|
1753
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1754
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1755
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">snooze</cide-ele-icon>
|
|
1756
|
+
<div>
|
|
1757
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Snooze</label>
|
|
1758
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Temporarily pause notifications</p>
|
|
1759
|
+
</div>
|
|
1760
|
+
</div>
|
|
1761
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1762
|
+
<input
|
|
1763
|
+
type="checkbox"
|
|
1764
|
+
[checked]="settingsForm.get('snoozeEnabled')?.value"
|
|
1765
|
+
(change)="settingsForm.get('snoozeEnabled')?.setValue($any($event.target).checked)"
|
|
1766
|
+
class="tw-sr-only tw-peer">
|
|
1767
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1768
|
+
</label>
|
|
1769
|
+
</div>
|
|
1770
|
+
|
|
1771
|
+
@if (settingsForm.get('snoozeEnabled')?.value) {
|
|
1772
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1773
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Snooze Duration (minutes)</label>
|
|
1774
|
+
<cide-ele-input
|
|
1775
|
+
type="number"
|
|
1776
|
+
formControlName="snoozeDuration"
|
|
1777
|
+
min="5"
|
|
1778
|
+
max="1440"
|
|
1779
|
+
placeholder="30">
|
|
1780
|
+
</cide-ele-input>
|
|
1781
|
+
</div>
|
|
1782
|
+
}
|
|
1783
|
+
</div>
|
|
1784
|
+
|
|
1785
|
+
<!-- Other Settings -->
|
|
1786
|
+
<div class="tw-space-y-3">
|
|
1787
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Other Settings</h4>
|
|
1788
|
+
|
|
1789
|
+
<!-- Desktop Notifications -->
|
|
1790
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1791
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1792
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">desktop_windows</cide-ele-icon>
|
|
1793
|
+
<div>
|
|
1794
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Desktop Notifications</label>
|
|
1795
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Show browser notifications</p>
|
|
1796
|
+
</div>
|
|
1797
|
+
</div>
|
|
1798
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1799
|
+
<input
|
|
1800
|
+
type="checkbox"
|
|
1801
|
+
[checked]="settingsForm.get('desktopNotifications')?.value"
|
|
1802
|
+
(change)="settingsForm.get('desktopNotifications')?.setValue($any($event.target).checked)"
|
|
1803
|
+
class="tw-sr-only tw-peer">
|
|
1804
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1805
|
+
</label>
|
|
1806
|
+
</div>
|
|
1807
|
+
</div>
|
|
1808
|
+
|
|
1809
|
+
<!-- Action Buttons -->
|
|
1810
|
+
<div class="tw-flex tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200 dark:tw-border-gray-700">
|
|
1811
|
+
<button
|
|
1812
|
+
type="button"
|
|
1813
|
+
cideEleButton
|
|
1814
|
+
variant="outline"
|
|
1815
|
+
size="sm"
|
|
1816
|
+
(click)="reset()"
|
|
1817
|
+
class="tw-flex-1">
|
|
1818
|
+
Reset
|
|
1819
|
+
</button>
|
|
1820
|
+
<button
|
|
1821
|
+
type="button"
|
|
1822
|
+
cideEleButton
|
|
1823
|
+
variant="primary"
|
|
1824
|
+
size="sm"
|
|
1825
|
+
(click)="save()"
|
|
1826
|
+
class="tw-flex-1">
|
|
1827
|
+
Save Settings
|
|
1828
|
+
</button>
|
|
1829
|
+
</div>
|
|
1830
|
+
</form>
|
|
1831
|
+
</div>
|
|
1803
1832
|
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { 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", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }] });
|
|
1804
1833
|
}
|
|
1805
1834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NotificationSettingsComponent, decorators: [{
|
|
@@ -1811,216 +1840,216 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
1811
1840
|
CideEleButtonComponent,
|
|
1812
1841
|
CideInputComponent,
|
|
1813
1842
|
CideSelectComponent
|
|
1814
|
-
], template: `
|
|
1815
|
-
<div class="tw-p-6 tw-space-y-6 tw-bg-white dark:tw-bg-gray-900">
|
|
1816
|
-
<!-- Header -->
|
|
1817
|
-
<div class="tw-flex tw-items-center tw-gap-2 tw-pb-3 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
1818
|
-
<div class="tw-w-8 tw-h-8 tw-bg-blue-500 tw-rounded-lg tw-flex tw-items-center tw-justify-center">
|
|
1819
|
-
<cide-ele-icon class="tw-text-white">settings</cide-ele-icon>
|
|
1820
|
-
</div>
|
|
1821
|
-
<div>
|
|
1822
|
-
<h3 class="tw-m-0 tw-text-sm tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Notification Settings</h3>
|
|
1823
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Customize your notification preferences</p>
|
|
1824
|
-
</div>
|
|
1825
|
-
</div>
|
|
1826
|
-
|
|
1827
|
-
<form [formGroup]="settingsForm" class="tw-space-y-6">
|
|
1828
|
-
<!-- Sound Settings -->
|
|
1829
|
-
<div class="tw-space-y-3">
|
|
1830
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Sound Settings</h4>
|
|
1831
|
-
|
|
1832
|
-
<!-- Enable Sound -->
|
|
1833
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1834
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1835
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">volume_up</cide-ele-icon>
|
|
1836
|
-
<div>
|
|
1837
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Sound</label>
|
|
1838
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Play sound when receiving notifications</p>
|
|
1839
|
-
</div>
|
|
1840
|
-
</div>
|
|
1841
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1842
|
-
<input
|
|
1843
|
-
type="checkbox"
|
|
1844
|
-
[checked]="settingsForm.get('soundEnabled')?.value"
|
|
1845
|
-
(change)="settingsForm.get('soundEnabled')?.setValue($any($event.target).checked)"
|
|
1846
|
-
class="tw-sr-only tw-peer">
|
|
1847
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1848
|
-
</label>
|
|
1849
|
-
</div>
|
|
1850
|
-
|
|
1851
|
-
@if (settingsForm.get('soundEnabled')?.value) {
|
|
1852
|
-
<!-- Sound Type -->
|
|
1853
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1854
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Sound Type</label>
|
|
1855
|
-
<cide-ele-select
|
|
1856
|
-
formControlName="soundType"
|
|
1857
|
-
[options]="soundTypeOptions"
|
|
1858
|
-
placeholder="Select sound type">
|
|
1859
|
-
</cide-ele-select>
|
|
1860
|
-
</div>
|
|
1861
|
-
|
|
1862
|
-
<!-- Sound Volume -->
|
|
1863
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1864
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-mb-2">
|
|
1865
|
-
<label class="tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300">Volume</label>
|
|
1866
|
-
<span class="tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ settingsForm.get('soundVolume')?.value }}%</span>
|
|
1867
|
-
</div>
|
|
1868
|
-
<input
|
|
1869
|
-
type="range"
|
|
1870
|
-
formControlName="soundVolume"
|
|
1871
|
-
min="0"
|
|
1872
|
-
max="100"
|
|
1873
|
-
step="5"
|
|
1874
|
-
class="tw-w-full tw-h-2 tw-bg-gray-200 tw-rounded-lg tw-appearance-none tw-cursor-pointer dark:tw-bg-gray-700 tw-accent-blue-600">
|
|
1875
|
-
<div class="tw-flex tw-justify-between tw-text-[10px] tw-text-gray-400 tw-mt-1">
|
|
1876
|
-
<span>0%</span>
|
|
1877
|
-
<span>100%</span>
|
|
1878
|
-
</div>
|
|
1879
|
-
</div>
|
|
1880
|
-
|
|
1881
|
-
<!-- Test Sound Button -->
|
|
1882
|
-
<button
|
|
1883
|
-
type="button"
|
|
1884
|
-
cideEleButton
|
|
1885
|
-
variant="outline"
|
|
1886
|
-
size="sm"
|
|
1887
|
-
(click)="testSound()"
|
|
1888
|
-
class="tw-w-full">
|
|
1889
|
-
<cide-ele-icon>play_arrow</cide-ele-icon>
|
|
1890
|
-
Test Sound
|
|
1891
|
-
</button>
|
|
1892
|
-
}
|
|
1893
|
-
</div>
|
|
1894
|
-
|
|
1895
|
-
<!-- Quiet Hours -->
|
|
1896
|
-
<div class="tw-space-y-3">
|
|
1897
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Quiet Hours</h4>
|
|
1898
|
-
|
|
1899
|
-
<!-- Enable Quiet Hours -->
|
|
1900
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1901
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1902
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">schedule</cide-ele-icon>
|
|
1903
|
-
<div>
|
|
1904
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Quiet Hours</label>
|
|
1905
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Mute notifications during specified hours</p>
|
|
1906
|
-
</div>
|
|
1907
|
-
</div>
|
|
1908
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1909
|
-
<input
|
|
1910
|
-
type="checkbox"
|
|
1911
|
-
[checked]="settingsForm.get('quietHoursEnabled')?.value"
|
|
1912
|
-
(change)="settingsForm.get('quietHoursEnabled')?.setValue($any($event.target).checked)"
|
|
1913
|
-
class="tw-sr-only tw-peer">
|
|
1914
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1915
|
-
</label>
|
|
1916
|
-
</div>
|
|
1917
|
-
|
|
1918
|
-
@if (settingsForm.get('quietHoursEnabled')?.value) {
|
|
1919
|
-
<div class="tw-grid tw-grid-cols-2 tw-gap-3 tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1920
|
-
<div>
|
|
1921
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Start Time</label>
|
|
1922
|
-
<cide-ele-input
|
|
1923
|
-
type="time"
|
|
1924
|
-
formControlName="quietHoursStart"
|
|
1925
|
-
placeholder="22:00">
|
|
1926
|
-
</cide-ele-input>
|
|
1927
|
-
</div>
|
|
1928
|
-
<div>
|
|
1929
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">End Time</label>
|
|
1930
|
-
<cide-ele-input
|
|
1931
|
-
type="time"
|
|
1932
|
-
formControlName="quietHoursEnd"
|
|
1933
|
-
placeholder="08:00">
|
|
1934
|
-
</cide-ele-input>
|
|
1935
|
-
</div>
|
|
1936
|
-
</div>
|
|
1937
|
-
}
|
|
1938
|
-
</div>
|
|
1939
|
-
|
|
1940
|
-
<!-- Snooze Settings -->
|
|
1941
|
-
<div class="tw-space-y-3">
|
|
1942
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Snooze</h4>
|
|
1943
|
-
|
|
1944
|
-
<!-- Enable Snooze -->
|
|
1945
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1946
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1947
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">snooze</cide-ele-icon>
|
|
1948
|
-
<div>
|
|
1949
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Snooze</label>
|
|
1950
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Temporarily pause notifications</p>
|
|
1951
|
-
</div>
|
|
1952
|
-
</div>
|
|
1953
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1954
|
-
<input
|
|
1955
|
-
type="checkbox"
|
|
1956
|
-
[checked]="settingsForm.get('snoozeEnabled')?.value"
|
|
1957
|
-
(change)="settingsForm.get('snoozeEnabled')?.setValue($any($event.target).checked)"
|
|
1958
|
-
class="tw-sr-only tw-peer">
|
|
1959
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1960
|
-
</label>
|
|
1961
|
-
</div>
|
|
1962
|
-
|
|
1963
|
-
@if (settingsForm.get('snoozeEnabled')?.value) {
|
|
1964
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1965
|
-
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Snooze Duration (minutes)</label>
|
|
1966
|
-
<cide-ele-input
|
|
1967
|
-
type="number"
|
|
1968
|
-
formControlName="snoozeDuration"
|
|
1969
|
-
min="5"
|
|
1970
|
-
max="1440"
|
|
1971
|
-
placeholder="30">
|
|
1972
|
-
</cide-ele-input>
|
|
1973
|
-
</div>
|
|
1974
|
-
}
|
|
1975
|
-
</div>
|
|
1976
|
-
|
|
1977
|
-
<!-- Other Settings -->
|
|
1978
|
-
<div class="tw-space-y-3">
|
|
1979
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Other Settings</h4>
|
|
1980
|
-
|
|
1981
|
-
<!-- Desktop Notifications -->
|
|
1982
|
-
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1983
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1984
|
-
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">desktop_windows</cide-ele-icon>
|
|
1985
|
-
<div>
|
|
1986
|
-
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Desktop Notifications</label>
|
|
1987
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Show browser notifications</p>
|
|
1988
|
-
</div>
|
|
1989
|
-
</div>
|
|
1990
|
-
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1991
|
-
<input
|
|
1992
|
-
type="checkbox"
|
|
1993
|
-
[checked]="settingsForm.get('desktopNotifications')?.value"
|
|
1994
|
-
(change)="settingsForm.get('desktopNotifications')?.setValue($any($event.target).checked)"
|
|
1995
|
-
class="tw-sr-only tw-peer">
|
|
1996
|
-
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1997
|
-
</label>
|
|
1998
|
-
</div>
|
|
1999
|
-
</div>
|
|
2000
|
-
|
|
2001
|
-
<!-- Action Buttons -->
|
|
2002
|
-
<div class="tw-flex tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200 dark:tw-border-gray-700">
|
|
2003
|
-
<button
|
|
2004
|
-
type="button"
|
|
2005
|
-
cideEleButton
|
|
2006
|
-
variant="outline"
|
|
2007
|
-
size="sm"
|
|
2008
|
-
(click)="reset()"
|
|
2009
|
-
class="tw-flex-1">
|
|
2010
|
-
Reset
|
|
2011
|
-
</button>
|
|
2012
|
-
<button
|
|
2013
|
-
type="button"
|
|
2014
|
-
cideEleButton
|
|
2015
|
-
variant="primary"
|
|
2016
|
-
size="sm"
|
|
2017
|
-
(click)="save()"
|
|
2018
|
-
class="tw-flex-1">
|
|
2019
|
-
Save Settings
|
|
2020
|
-
</button>
|
|
2021
|
-
</div>
|
|
2022
|
-
</form>
|
|
2023
|
-
</div>
|
|
1843
|
+
], template: `
|
|
1844
|
+
<div class="tw-p-6 tw-space-y-6 tw-bg-white dark:tw-bg-gray-900">
|
|
1845
|
+
<!-- Header -->
|
|
1846
|
+
<div class="tw-flex tw-items-center tw-gap-2 tw-pb-3 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
1847
|
+
<div class="tw-w-8 tw-h-8 tw-bg-blue-500 tw-rounded-lg tw-flex tw-items-center tw-justify-center">
|
|
1848
|
+
<cide-ele-icon class="tw-text-white">settings</cide-ele-icon>
|
|
1849
|
+
</div>
|
|
1850
|
+
<div>
|
|
1851
|
+
<h3 class="tw-m-0 tw-text-sm tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Notification Settings</h3>
|
|
1852
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Customize your notification preferences</p>
|
|
1853
|
+
</div>
|
|
1854
|
+
</div>
|
|
1855
|
+
|
|
1856
|
+
<form [formGroup]="settingsForm" class="tw-space-y-6">
|
|
1857
|
+
<!-- Sound Settings -->
|
|
1858
|
+
<div class="tw-space-y-3">
|
|
1859
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Sound Settings</h4>
|
|
1860
|
+
|
|
1861
|
+
<!-- Enable Sound -->
|
|
1862
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1863
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1864
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">volume_up</cide-ele-icon>
|
|
1865
|
+
<div>
|
|
1866
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Sound</label>
|
|
1867
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Play sound when receiving notifications</p>
|
|
1868
|
+
</div>
|
|
1869
|
+
</div>
|
|
1870
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1871
|
+
<input
|
|
1872
|
+
type="checkbox"
|
|
1873
|
+
[checked]="settingsForm.get('soundEnabled')?.value"
|
|
1874
|
+
(change)="settingsForm.get('soundEnabled')?.setValue($any($event.target).checked)"
|
|
1875
|
+
class="tw-sr-only tw-peer">
|
|
1876
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1877
|
+
</label>
|
|
1878
|
+
</div>
|
|
1879
|
+
|
|
1880
|
+
@if (settingsForm.get('soundEnabled')?.value) {
|
|
1881
|
+
<!-- Sound Type -->
|
|
1882
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1883
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Sound Type</label>
|
|
1884
|
+
<cide-ele-select
|
|
1885
|
+
formControlName="soundType"
|
|
1886
|
+
[options]="soundTypeOptions"
|
|
1887
|
+
placeholder="Select sound type">
|
|
1888
|
+
</cide-ele-select>
|
|
1889
|
+
</div>
|
|
1890
|
+
|
|
1891
|
+
<!-- Sound Volume -->
|
|
1892
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1893
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-mb-2">
|
|
1894
|
+
<label class="tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300">Volume</label>
|
|
1895
|
+
<span class="tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ settingsForm.get('soundVolume')?.value }}%</span>
|
|
1896
|
+
</div>
|
|
1897
|
+
<input
|
|
1898
|
+
type="range"
|
|
1899
|
+
formControlName="soundVolume"
|
|
1900
|
+
min="0"
|
|
1901
|
+
max="100"
|
|
1902
|
+
step="5"
|
|
1903
|
+
class="tw-w-full tw-h-2 tw-bg-gray-200 tw-rounded-lg tw-appearance-none tw-cursor-pointer dark:tw-bg-gray-700 tw-accent-blue-600">
|
|
1904
|
+
<div class="tw-flex tw-justify-between tw-text-[10px] tw-text-gray-400 tw-mt-1">
|
|
1905
|
+
<span>0%</span>
|
|
1906
|
+
<span>100%</span>
|
|
1907
|
+
</div>
|
|
1908
|
+
</div>
|
|
1909
|
+
|
|
1910
|
+
<!-- Test Sound Button -->
|
|
1911
|
+
<button
|
|
1912
|
+
type="button"
|
|
1913
|
+
cideEleButton
|
|
1914
|
+
variant="outline"
|
|
1915
|
+
size="sm"
|
|
1916
|
+
(click)="testSound()"
|
|
1917
|
+
class="tw-w-full">
|
|
1918
|
+
<cide-ele-icon>play_arrow</cide-ele-icon>
|
|
1919
|
+
Test Sound
|
|
1920
|
+
</button>
|
|
1921
|
+
}
|
|
1922
|
+
</div>
|
|
1923
|
+
|
|
1924
|
+
<!-- Quiet Hours -->
|
|
1925
|
+
<div class="tw-space-y-3">
|
|
1926
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Quiet Hours</h4>
|
|
1927
|
+
|
|
1928
|
+
<!-- Enable Quiet Hours -->
|
|
1929
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1930
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1931
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">schedule</cide-ele-icon>
|
|
1932
|
+
<div>
|
|
1933
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Quiet Hours</label>
|
|
1934
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Mute notifications during specified hours</p>
|
|
1935
|
+
</div>
|
|
1936
|
+
</div>
|
|
1937
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1938
|
+
<input
|
|
1939
|
+
type="checkbox"
|
|
1940
|
+
[checked]="settingsForm.get('quietHoursEnabled')?.value"
|
|
1941
|
+
(change)="settingsForm.get('quietHoursEnabled')?.setValue($any($event.target).checked)"
|
|
1942
|
+
class="tw-sr-only tw-peer">
|
|
1943
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1944
|
+
</label>
|
|
1945
|
+
</div>
|
|
1946
|
+
|
|
1947
|
+
@if (settingsForm.get('quietHoursEnabled')?.value) {
|
|
1948
|
+
<div class="tw-grid tw-grid-cols-2 tw-gap-3 tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1949
|
+
<div>
|
|
1950
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Start Time</label>
|
|
1951
|
+
<cide-ele-input
|
|
1952
|
+
type="time"
|
|
1953
|
+
formControlName="quietHoursStart"
|
|
1954
|
+
placeholder="22:00">
|
|
1955
|
+
</cide-ele-input>
|
|
1956
|
+
</div>
|
|
1957
|
+
<div>
|
|
1958
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">End Time</label>
|
|
1959
|
+
<cide-ele-input
|
|
1960
|
+
type="time"
|
|
1961
|
+
formControlName="quietHoursEnd"
|
|
1962
|
+
placeholder="08:00">
|
|
1963
|
+
</cide-ele-input>
|
|
1964
|
+
</div>
|
|
1965
|
+
</div>
|
|
1966
|
+
}
|
|
1967
|
+
</div>
|
|
1968
|
+
|
|
1969
|
+
<!-- Snooze Settings -->
|
|
1970
|
+
<div class="tw-space-y-3">
|
|
1971
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Snooze</h4>
|
|
1972
|
+
|
|
1973
|
+
<!-- Enable Snooze -->
|
|
1974
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1975
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
1976
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">snooze</cide-ele-icon>
|
|
1977
|
+
<div>
|
|
1978
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Enable Snooze</label>
|
|
1979
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Temporarily pause notifications</p>
|
|
1980
|
+
</div>
|
|
1981
|
+
</div>
|
|
1982
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
1983
|
+
<input
|
|
1984
|
+
type="checkbox"
|
|
1985
|
+
[checked]="settingsForm.get('snoozeEnabled')?.value"
|
|
1986
|
+
(change)="settingsForm.get('snoozeEnabled')?.setValue($any($event.target).checked)"
|
|
1987
|
+
class="tw-sr-only tw-peer">
|
|
1988
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
1989
|
+
</label>
|
|
1990
|
+
</div>
|
|
1991
|
+
|
|
1992
|
+
@if (settingsForm.get('snoozeEnabled')?.value) {
|
|
1993
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
1994
|
+
<label class="tw-block tw-text-xs tw-font-medium tw-text-gray-700 dark:tw-text-gray-300 tw-mb-2">Snooze Duration (minutes)</label>
|
|
1995
|
+
<cide-ele-input
|
|
1996
|
+
type="number"
|
|
1997
|
+
formControlName="snoozeDuration"
|
|
1998
|
+
min="5"
|
|
1999
|
+
max="1440"
|
|
2000
|
+
placeholder="30">
|
|
2001
|
+
</cide-ele-input>
|
|
2002
|
+
</div>
|
|
2003
|
+
}
|
|
2004
|
+
</div>
|
|
2005
|
+
|
|
2006
|
+
<!-- Other Settings -->
|
|
2007
|
+
<div class="tw-space-y-3">
|
|
2008
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide">Other Settings</h4>
|
|
2009
|
+
|
|
2010
|
+
<!-- Desktop Notifications -->
|
|
2011
|
+
<div class="tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
2012
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
2013
|
+
<cide-ele-icon class="tw-text-gray-600 dark:tw-text-gray-400">desktop_windows</cide-ele-icon>
|
|
2014
|
+
<div>
|
|
2015
|
+
<label class="tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">Desktop Notifications</label>
|
|
2016
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Show browser notifications</p>
|
|
2017
|
+
</div>
|
|
2018
|
+
</div>
|
|
2019
|
+
<label class="tw-relative tw-inline-flex tw-items-center tw-cursor-pointer">
|
|
2020
|
+
<input
|
|
2021
|
+
type="checkbox"
|
|
2022
|
+
[checked]="settingsForm.get('desktopNotifications')?.value"
|
|
2023
|
+
(change)="settingsForm.get('desktopNotifications')?.setValue($any($event.target).checked)"
|
|
2024
|
+
class="tw-sr-only tw-peer">
|
|
2025
|
+
<div class="tw-w-11 tw-h-6 tw-bg-gray-200 peer-focus:tw-outline-none peer-focus:tw-ring-4 peer-focus:tw-ring-blue-300 dark:peer-focus:tw-ring-blue-800 dark:peer-focus:tw-ring-offset-gray-800 tw-rounded-full peer dark:tw-bg-gray-700 peer-checked:after:tw-translate-x-full peer-checked:after:tw-border-white after:tw-content-[''] after:tw-absolute after:tw-top-[2px] after:tw-left-[2px] after:tw-bg-white after:tw-border-gray-300 after:tw-border after:tw-rounded-full after:tw-h-5 after:tw-w-5 after:tw-transition-all dark:tw-border-gray-600 peer-checked:tw-bg-blue-600"></div>
|
|
2026
|
+
</label>
|
|
2027
|
+
</div>
|
|
2028
|
+
</div>
|
|
2029
|
+
|
|
2030
|
+
<!-- Action Buttons -->
|
|
2031
|
+
<div class="tw-flex tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200 dark:tw-border-gray-700">
|
|
2032
|
+
<button
|
|
2033
|
+
type="button"
|
|
2034
|
+
cideEleButton
|
|
2035
|
+
variant="outline"
|
|
2036
|
+
size="sm"
|
|
2037
|
+
(click)="reset()"
|
|
2038
|
+
class="tw-flex-1">
|
|
2039
|
+
Reset
|
|
2040
|
+
</button>
|
|
2041
|
+
<button
|
|
2042
|
+
type="button"
|
|
2043
|
+
cideEleButton
|
|
2044
|
+
variant="primary"
|
|
2045
|
+
size="sm"
|
|
2046
|
+
(click)="save()"
|
|
2047
|
+
class="tw-flex-1">
|
|
2048
|
+
Save Settings
|
|
2049
|
+
</button>
|
|
2050
|
+
</div>
|
|
2051
|
+
</form>
|
|
2052
|
+
</div>
|
|
2024
2053
|
`, styles: [":host{display:block}\n"] }]
|
|
2025
2054
|
}] });
|
|
2026
2055
|
|
|
@@ -2052,6 +2081,9 @@ class CideLytHeaderWrapperComponent {
|
|
|
2052
2081
|
unreadCount = computed(() => this.wsNotificationService?.unreadNotificationsCount() || 0, ...(ngDevMode ? [{ debugName: "unreadCount" }] : []));
|
|
2053
2082
|
isNotificationDropdownOpen = signal(false, ...(ngDevMode ? [{ debugName: "isNotificationDropdownOpen" }] : []));
|
|
2054
2083
|
notificationItems = signal([], ...(ngDevMode ? [{ debugName: "notificationItems" }] : []));
|
|
2084
|
+
// Track previously seen notification IDs to detect new ones
|
|
2085
|
+
previousNotificationIds = new Set();
|
|
2086
|
+
isInitialLoad = true; // Track if this is the first load
|
|
2055
2087
|
// Animation and undo state
|
|
2056
2088
|
animatingNotifications = signal(new Set(), ...(ngDevMode ? [{ debugName: "animatingNotifications" }] : []));
|
|
2057
2089
|
recentlyRemovedNotifications = signal(new Map(), ...(ngDevMode ? [{ debugName: "recentlyRemovedNotifications" }] : []));
|
|
@@ -2187,6 +2219,9 @@ class CideLytHeaderWrapperComponent {
|
|
|
2187
2219
|
});
|
|
2188
2220
|
}
|
|
2189
2221
|
ngOnInit() {
|
|
2222
|
+
// Initialize audio context early to avoid browser autoplay restrictions
|
|
2223
|
+
// This must be done on user interaction, so we'll do it on first user click
|
|
2224
|
+
this.initializeAudioContext();
|
|
2190
2225
|
// Subscribe to theme service for reactive theme updates
|
|
2191
2226
|
this.themeService.getEffectiveTheme$()
|
|
2192
2227
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
@@ -2320,6 +2355,23 @@ class CideLytHeaderWrapperComponent {
|
|
|
2320
2355
|
}
|
|
2321
2356
|
// Sort by timestamp (newest first)
|
|
2322
2357
|
filteredNotifications.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
|
|
2358
|
+
// Detect new notifications and play sound
|
|
2359
|
+
if (!this.isInitialLoad) {
|
|
2360
|
+
const currentNotificationIds = new Set(filteredNotifications.map(n => n.id));
|
|
2361
|
+
const newNotifications = filteredNotifications.filter(n => !this.previousNotificationIds.has(n.id));
|
|
2362
|
+
if (newNotifications.length > 0) {
|
|
2363
|
+
console.log(`[Notifications] ${newNotifications.length} new notification(s) detected, playing sound...`);
|
|
2364
|
+
// Play sound for new notifications
|
|
2365
|
+
this.playNotificationSound();
|
|
2366
|
+
}
|
|
2367
|
+
// Update previous notification IDs
|
|
2368
|
+
this.previousNotificationIds = currentNotificationIds;
|
|
2369
|
+
}
|
|
2370
|
+
else {
|
|
2371
|
+
// First load - just track IDs, don't play sound
|
|
2372
|
+
this.previousNotificationIds = new Set(filteredNotifications.map(n => n.id));
|
|
2373
|
+
this.isInitialLoad = false;
|
|
2374
|
+
}
|
|
2323
2375
|
console.log('[Notifications] Total notifications to display:', filteredNotifications.length);
|
|
2324
2376
|
this.notifications.set(filteredNotifications);
|
|
2325
2377
|
this.updateNotificationDropdown();
|
|
@@ -3245,6 +3297,44 @@ class CideLytHeaderWrapperComponent {
|
|
|
3245
3297
|
}
|
|
3246
3298
|
}
|
|
3247
3299
|
}
|
|
3300
|
+
/**
|
|
3301
|
+
* Initialize audio context early to avoid browser autoplay restrictions
|
|
3302
|
+
*/
|
|
3303
|
+
initializeAudioContext() {
|
|
3304
|
+
// Initialize audio context on first user interaction
|
|
3305
|
+
const initAudio = () => {
|
|
3306
|
+
try {
|
|
3307
|
+
const AudioContextClass = window.AudioContext || window.webkitAudioContext;
|
|
3308
|
+
if (AudioContextClass && !window._notificationAudioContext) {
|
|
3309
|
+
const audioContext = new AudioContextClass();
|
|
3310
|
+
// Resume to unlock audio (required for autoplay policy)
|
|
3311
|
+
if (audioContext.state === 'suspended') {
|
|
3312
|
+
audioContext.resume().then(() => {
|
|
3313
|
+
console.log('[Notifications] Audio context initialized and resumed');
|
|
3314
|
+
}).catch((error) => {
|
|
3315
|
+
console.warn('[Notifications] Failed to initialize audio context:', error);
|
|
3316
|
+
});
|
|
3317
|
+
}
|
|
3318
|
+
window._notificationAudioContext = audioContext;
|
|
3319
|
+
}
|
|
3320
|
+
}
|
|
3321
|
+
catch (error) {
|
|
3322
|
+
console.warn('[Notifications] Failed to initialize audio context:', error);
|
|
3323
|
+
}
|
|
3324
|
+
};
|
|
3325
|
+
// Try to initialize on any user interaction
|
|
3326
|
+
const events = ['click', 'touchstart', 'keydown'];
|
|
3327
|
+
const initOnce = () => {
|
|
3328
|
+
initAudio();
|
|
3329
|
+
// Remove listeners after first initialization
|
|
3330
|
+
events.forEach(event => {
|
|
3331
|
+
document.removeEventListener(event, initOnce);
|
|
3332
|
+
});
|
|
3333
|
+
};
|
|
3334
|
+
events.forEach(event => {
|
|
3335
|
+
document.addEventListener(event, initOnce, { once: true, passive: true });
|
|
3336
|
+
});
|
|
3337
|
+
}
|
|
3248
3338
|
/**
|
|
3249
3339
|
* Play notification sound based on user settings
|
|
3250
3340
|
*/
|
|
@@ -4397,16 +4487,8 @@ class CideLytRequestService {
|
|
|
4397
4487
|
const id = this.generateId();
|
|
4398
4488
|
const currentTabs = this.tabsSignal();
|
|
4399
4489
|
console.log('currentTabs', currentTabs, route);
|
|
4400
|
-
//
|
|
4401
|
-
|
|
4402
|
-
const paramsMatch = JSON.stringify(tab.params || {}) === JSON.stringify(params || {});
|
|
4403
|
-
return tab.route === route && paramsMatch;
|
|
4404
|
-
});
|
|
4405
|
-
console.log('existingTab', existingTab);
|
|
4406
|
-
if (existingTab) {
|
|
4407
|
-
this.activateTab(existingTab.id);
|
|
4408
|
-
return existingTab.id;
|
|
4409
|
-
}
|
|
4490
|
+
// Tab reuse disabled - always create new tab
|
|
4491
|
+
// Removed existing tab check to prevent tab reuse
|
|
4410
4492
|
// Create new tab
|
|
4411
4493
|
const newTab = {
|
|
4412
4494
|
id,
|
|
@@ -4701,8 +4783,8 @@ class CideLytSidedrawerWrapperComponent {
|
|
|
4701
4783
|
}
|
|
4702
4784
|
ngOnInit() {
|
|
4703
4785
|
// Initialize the component map (You'd likely populate this from a config or service)
|
|
4704
|
-
this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-
|
|
4705
|
-
this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-
|
|
4786
|
+
this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-DYbvtr2t.mjs').then(m => m.CideLytSidedrawerNotesComponent);
|
|
4787
|
+
this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-CAocxERw.mjs').then(m => m.CideLytDrawerThemeComponent);
|
|
4706
4788
|
}
|
|
4707
4789
|
async loadComponent(configFor) {
|
|
4708
4790
|
console.log('🔍 SIDEDRAWER - Loading component:', configFor, 'Current tab:', this.currentTabId);
|
|
@@ -4873,6 +4955,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
4873
4955
|
class ShortcutsPanelComponent {
|
|
4874
4956
|
keyboardShortcutService = inject(KeyboardShortcutService);
|
|
4875
4957
|
sanitizer = inject(DomSanitizer);
|
|
4958
|
+
// Inject FloatingContainerShortcutsService to ensure it's initialized and shortcuts are registered
|
|
4959
|
+
floatingContainerShortcutsService = inject(FloatingContainerShortcutsService);
|
|
4876
4960
|
refreshInterval;
|
|
4877
4961
|
shortcuts = signal([], ...(ngDevMode ? [{ debugName: "shortcuts" }] : []));
|
|
4878
4962
|
searchQuery = signal('', ...(ngDevMode ? [{ debugName: "searchQuery" }] : []));
|
|
@@ -4895,6 +4979,8 @@ class ShortcutsPanelComponent {
|
|
|
4895
4979
|
return Array.from(cats).sort();
|
|
4896
4980
|
}, ...(ngDevMode ? [{ debugName: "categories" }] : []));
|
|
4897
4981
|
ngOnInit() {
|
|
4982
|
+
// FloatingContainerShortcutsService is now injected, so it's initialized
|
|
4983
|
+
// Load shortcuts immediately
|
|
4898
4984
|
this.loadShortcuts();
|
|
4899
4985
|
// Reload shortcuts periodically to catch dynamically registered shortcuts
|
|
4900
4986
|
// This ensures floating container shortcuts and custom shortcuts are shown
|
|
@@ -5026,278 +5112,278 @@ class ShortcutsPanelComponent {
|
|
|
5026
5112
|
// Computed signal will automatically update
|
|
5027
5113
|
}
|
|
5028
5114
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ShortcutsPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5029
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ShortcutsPanelComponent, isStandalone: true, selector: "cide-lyt-shortcuts-panel", ngImport: i0, template: `
|
|
5030
|
-
<div class="tw-p-6 tw-space-y-4 tw-bg-white dark:tw-bg-gray-900">
|
|
5031
|
-
<!-- View Toggle and Refresh -->
|
|
5032
|
-
<div class="tw-flex tw-items-center tw-justify-end tw-gap-2 tw-mb-4">
|
|
5033
|
-
<button
|
|
5034
|
-
type="button"
|
|
5035
|
-
cideEleButton
|
|
5036
|
-
variant="outline"
|
|
5037
|
-
size="sm"
|
|
5038
|
-
(click)="loadShortcuts()"
|
|
5039
|
-
title="Refresh shortcuts">
|
|
5040
|
-
<cide-ele-icon>refresh</cide-ele-icon>
|
|
5041
|
-
Refresh
|
|
5042
|
-
</button>
|
|
5043
|
-
<button
|
|
5044
|
-
type="button"
|
|
5045
|
-
cideEleButton
|
|
5046
|
-
variant="outline"
|
|
5047
|
-
size="sm"
|
|
5048
|
-
(click)="toggleView()">
|
|
5049
|
-
<cide-ele-icon>{{ viewMode() === 'grouped' ? 'view_list' : 'category' }}</cide-ele-icon>
|
|
5050
|
-
{{ viewMode() === 'grouped' ? 'List View' : 'Grouped View' }}
|
|
5051
|
-
</button>
|
|
5052
|
-
</div>
|
|
5053
|
-
|
|
5054
|
-
<!-- Search -->
|
|
5055
|
-
<div class="tw-relative">
|
|
5056
|
-
<cide-ele-icon class="tw-absolute tw-left-2 tw-top-1/2 tw-transform -tw-translate-y-1/2 tw-text-gray-400">search</cide-ele-icon>
|
|
5057
|
-
<input
|
|
5058
|
-
type="text"
|
|
5059
|
-
[value]="searchQuery()"
|
|
5060
|
-
(input)="searchQuery.set($any($event.target).value)"
|
|
5061
|
-
placeholder="Search shortcuts..."
|
|
5062
|
-
class="tw-w-full tw-pl-8 tw-pr-3 tw-py-2 tw-text-sm tw-border tw-border-gray-300 dark:tw-border-gray-600 tw-rounded-lg tw-bg-white dark:tw-bg-gray-800 tw-text-gray-900 dark:tw-text-gray-100 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500">
|
|
5063
|
-
</div>
|
|
5064
|
-
|
|
5065
|
-
<!-- Shortcuts Content -->
|
|
5066
|
-
@if (filteredShortcuts().length === 0) {
|
|
5067
|
-
<div class="tw-py-12 tw-text-center">
|
|
5068
|
-
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-2">keyboard_off</cide-ele-icon>
|
|
5069
|
-
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">No shortcuts found</p>
|
|
5070
|
-
</div>
|
|
5071
|
-
} @else {
|
|
5072
|
-
@if (viewMode() === 'grouped') {
|
|
5073
|
-
<!-- Grouped View -->
|
|
5074
|
-
@for (category of categories(); track category) {
|
|
5075
|
-
<div class="tw-space-y-2">
|
|
5076
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide tw-mt-4 tw-mb-2">
|
|
5077
|
-
{{ category }}
|
|
5078
|
-
</h4>
|
|
5079
|
-
<div class="tw-space-y-2">
|
|
5080
|
-
@for (shortcut of getShortcutsByCategory(category); track shortcut.id) {
|
|
5081
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5082
|
-
@if (shortcut.featuredHTML) {
|
|
5083
|
-
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5084
|
-
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5085
|
-
</div>
|
|
5086
|
-
}
|
|
5087
|
-
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5088
|
-
<div class="tw-flex-1">
|
|
5089
|
-
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5090
|
-
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5091
|
-
{{ shortcut.title }}
|
|
5092
|
-
</h5>
|
|
5093
|
-
@if (shortcut.isUserDefined) {
|
|
5094
|
-
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5095
|
-
}
|
|
5096
|
-
</div>
|
|
5097
|
-
@if (shortcut.description) {
|
|
5098
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5099
|
-
}
|
|
5100
|
-
</div>
|
|
5101
|
-
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5102
|
-
@for (key of getKeyParts(shortcut.keyCombination); track $index; let isLast = $last) {
|
|
5103
|
-
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5104
|
-
{{ key }}
|
|
5105
|
-
</kbd>
|
|
5106
|
-
@if (!isLast) {
|
|
5107
|
-
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5108
|
-
}
|
|
5109
|
-
}
|
|
5110
|
-
</div>
|
|
5111
|
-
</div>
|
|
5112
|
-
</div>
|
|
5113
|
-
}
|
|
5114
|
-
</div>
|
|
5115
|
-
</div>
|
|
5116
|
-
}
|
|
5117
|
-
} @else {
|
|
5118
|
-
<!-- List View -->
|
|
5119
|
-
<div class="tw-space-y-2">
|
|
5120
|
-
@for (shortcut of filteredShortcuts(); track shortcut.id) {
|
|
5121
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5122
|
-
@if (shortcut.featuredHTML) {
|
|
5123
|
-
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5124
|
-
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5125
|
-
</div>
|
|
5126
|
-
}
|
|
5127
|
-
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5128
|
-
<div class="tw-flex-1">
|
|
5129
|
-
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5130
|
-
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5131
|
-
{{ shortcut.title }}
|
|
5132
|
-
</h5>
|
|
5133
|
-
@if (shortcut.isUserDefined) {
|
|
5134
|
-
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5135
|
-
}
|
|
5136
|
-
</div>
|
|
5137
|
-
@if (shortcut.description) {
|
|
5138
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5139
|
-
}
|
|
5140
|
-
@if (shortcut.category) {
|
|
5141
|
-
<span class="tw-inline-block tw-mt-1 tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-medium tw-text-gray-500 dark:tw-text-gray-400 tw-bg-gray-100 dark:tw-bg-gray-600 tw-rounded">
|
|
5142
|
-
{{ shortcut.category }}
|
|
5143
|
-
</span>
|
|
5144
|
-
}
|
|
5145
|
-
</div>
|
|
5146
|
-
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5147
|
-
@for (key of getKeyParts(shortcut.keyCombination); track $index) {
|
|
5148
|
-
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5149
|
-
{{ key }}
|
|
5150
|
-
</kbd>
|
|
5151
|
-
@if (!$last) {
|
|
5152
|
-
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5153
|
-
}
|
|
5154
|
-
}
|
|
5155
|
-
</div>
|
|
5156
|
-
</div>
|
|
5157
|
-
</div>
|
|
5158
|
-
}
|
|
5159
|
-
</div>
|
|
5160
|
-
}
|
|
5161
|
-
}
|
|
5162
|
-
</div>
|
|
5115
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ShortcutsPanelComponent, isStandalone: true, selector: "cide-lyt-shortcuts-panel", ngImport: i0, template: `
|
|
5116
|
+
<div class="tw-p-6 tw-space-y-4 tw-bg-white dark:tw-bg-gray-900">
|
|
5117
|
+
<!-- View Toggle and Refresh -->
|
|
5118
|
+
<div class="tw-flex tw-items-center tw-justify-end tw-gap-2 tw-mb-4">
|
|
5119
|
+
<button
|
|
5120
|
+
type="button"
|
|
5121
|
+
cideEleButton
|
|
5122
|
+
variant="outline"
|
|
5123
|
+
size="sm"
|
|
5124
|
+
(click)="loadShortcuts()"
|
|
5125
|
+
title="Refresh shortcuts">
|
|
5126
|
+
<cide-ele-icon>refresh</cide-ele-icon>
|
|
5127
|
+
Refresh
|
|
5128
|
+
</button>
|
|
5129
|
+
<button
|
|
5130
|
+
type="button"
|
|
5131
|
+
cideEleButton
|
|
5132
|
+
variant="outline"
|
|
5133
|
+
size="sm"
|
|
5134
|
+
(click)="toggleView()">
|
|
5135
|
+
<cide-ele-icon>{{ viewMode() === 'grouped' ? 'view_list' : 'category' }}</cide-ele-icon>
|
|
5136
|
+
{{ viewMode() === 'grouped' ? 'List View' : 'Grouped View' }}
|
|
5137
|
+
</button>
|
|
5138
|
+
</div>
|
|
5139
|
+
|
|
5140
|
+
<!-- Search -->
|
|
5141
|
+
<div class="tw-relative">
|
|
5142
|
+
<cide-ele-icon class="tw-absolute tw-left-2 tw-top-1/2 tw-transform -tw-translate-y-1/2 tw-text-gray-400">search</cide-ele-icon>
|
|
5143
|
+
<input
|
|
5144
|
+
type="text"
|
|
5145
|
+
[value]="searchQuery()"
|
|
5146
|
+
(input)="searchQuery.set($any($event.target).value)"
|
|
5147
|
+
placeholder="Search shortcuts..."
|
|
5148
|
+
class="tw-w-full tw-pl-8 tw-pr-3 tw-py-2 tw-text-sm tw-border tw-border-gray-300 dark:tw-border-gray-600 tw-rounded-lg tw-bg-white dark:tw-bg-gray-800 tw-text-gray-900 dark:tw-text-gray-100 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500">
|
|
5149
|
+
</div>
|
|
5150
|
+
|
|
5151
|
+
<!-- Shortcuts Content -->
|
|
5152
|
+
@if (filteredShortcuts().length === 0) {
|
|
5153
|
+
<div class="tw-py-12 tw-text-center">
|
|
5154
|
+
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-2">keyboard_off</cide-ele-icon>
|
|
5155
|
+
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">No shortcuts found</p>
|
|
5156
|
+
</div>
|
|
5157
|
+
} @else {
|
|
5158
|
+
@if (viewMode() === 'grouped') {
|
|
5159
|
+
<!-- Grouped View -->
|
|
5160
|
+
@for (category of categories(); track category) {
|
|
5161
|
+
<div class="tw-space-y-2">
|
|
5162
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide tw-mt-4 tw-mb-2">
|
|
5163
|
+
{{ category }}
|
|
5164
|
+
</h4>
|
|
5165
|
+
<div class="tw-space-y-2">
|
|
5166
|
+
@for (shortcut of getShortcutsByCategory(category); track shortcut.id) {
|
|
5167
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5168
|
+
@if (shortcut.featuredHTML) {
|
|
5169
|
+
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5170
|
+
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5171
|
+
</div>
|
|
5172
|
+
}
|
|
5173
|
+
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5174
|
+
<div class="tw-flex-1">
|
|
5175
|
+
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5176
|
+
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5177
|
+
{{ shortcut.title }}
|
|
5178
|
+
</h5>
|
|
5179
|
+
@if (shortcut.isUserDefined) {
|
|
5180
|
+
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5181
|
+
}
|
|
5182
|
+
</div>
|
|
5183
|
+
@if (shortcut.description) {
|
|
5184
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5185
|
+
}
|
|
5186
|
+
</div>
|
|
5187
|
+
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5188
|
+
@for (key of getKeyParts(shortcut.keyCombination); track $index; let isLast = $last) {
|
|
5189
|
+
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5190
|
+
{{ key }}
|
|
5191
|
+
</kbd>
|
|
5192
|
+
@if (!isLast) {
|
|
5193
|
+
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5194
|
+
}
|
|
5195
|
+
}
|
|
5196
|
+
</div>
|
|
5197
|
+
</div>
|
|
5198
|
+
</div>
|
|
5199
|
+
}
|
|
5200
|
+
</div>
|
|
5201
|
+
</div>
|
|
5202
|
+
}
|
|
5203
|
+
} @else {
|
|
5204
|
+
<!-- List View -->
|
|
5205
|
+
<div class="tw-space-y-2">
|
|
5206
|
+
@for (shortcut of filteredShortcuts(); track shortcut.id) {
|
|
5207
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5208
|
+
@if (shortcut.featuredHTML) {
|
|
5209
|
+
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5210
|
+
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5211
|
+
</div>
|
|
5212
|
+
}
|
|
5213
|
+
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5214
|
+
<div class="tw-flex-1">
|
|
5215
|
+
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5216
|
+
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5217
|
+
{{ shortcut.title }}
|
|
5218
|
+
</h5>
|
|
5219
|
+
@if (shortcut.isUserDefined) {
|
|
5220
|
+
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5221
|
+
}
|
|
5222
|
+
</div>
|
|
5223
|
+
@if (shortcut.description) {
|
|
5224
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5225
|
+
}
|
|
5226
|
+
@if (shortcut.category) {
|
|
5227
|
+
<span class="tw-inline-block tw-mt-1 tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-medium tw-text-gray-500 dark:tw-text-gray-400 tw-bg-gray-100 dark:tw-bg-gray-600 tw-rounded">
|
|
5228
|
+
{{ shortcut.category }}
|
|
5229
|
+
</span>
|
|
5230
|
+
}
|
|
5231
|
+
</div>
|
|
5232
|
+
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5233
|
+
@for (key of getKeyParts(shortcut.keyCombination); track $index) {
|
|
5234
|
+
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5235
|
+
{{ key }}
|
|
5236
|
+
</kbd>
|
|
5237
|
+
@if (!$last) {
|
|
5238
|
+
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5239
|
+
}
|
|
5240
|
+
}
|
|
5241
|
+
</div>
|
|
5242
|
+
</div>
|
|
5243
|
+
</div>
|
|
5244
|
+
}
|
|
5245
|
+
</div>
|
|
5246
|
+
}
|
|
5247
|
+
}
|
|
5248
|
+
</div>
|
|
5163
5249
|
`, isInline: true, styles: [":host{display:block}kbd{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }] });
|
|
5164
5250
|
}
|
|
5165
5251
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ShortcutsPanelComponent, decorators: [{
|
|
5166
5252
|
type: Component,
|
|
5167
|
-
args: [{ selector: 'cide-lyt-shortcuts-panel', standalone: true, imports: [CommonModule, FormsModule, CideIconComponent, CideEleButtonComponent], template: `
|
|
5168
|
-
<div class="tw-p-6 tw-space-y-4 tw-bg-white dark:tw-bg-gray-900">
|
|
5169
|
-
<!-- View Toggle and Refresh -->
|
|
5170
|
-
<div class="tw-flex tw-items-center tw-justify-end tw-gap-2 tw-mb-4">
|
|
5171
|
-
<button
|
|
5172
|
-
type="button"
|
|
5173
|
-
cideEleButton
|
|
5174
|
-
variant="outline"
|
|
5175
|
-
size="sm"
|
|
5176
|
-
(click)="loadShortcuts()"
|
|
5177
|
-
title="Refresh shortcuts">
|
|
5178
|
-
<cide-ele-icon>refresh</cide-ele-icon>
|
|
5179
|
-
Refresh
|
|
5180
|
-
</button>
|
|
5181
|
-
<button
|
|
5182
|
-
type="button"
|
|
5183
|
-
cideEleButton
|
|
5184
|
-
variant="outline"
|
|
5185
|
-
size="sm"
|
|
5186
|
-
(click)="toggleView()">
|
|
5187
|
-
<cide-ele-icon>{{ viewMode() === 'grouped' ? 'view_list' : 'category' }}</cide-ele-icon>
|
|
5188
|
-
{{ viewMode() === 'grouped' ? 'List View' : 'Grouped View' }}
|
|
5189
|
-
</button>
|
|
5190
|
-
</div>
|
|
5191
|
-
|
|
5192
|
-
<!-- Search -->
|
|
5193
|
-
<div class="tw-relative">
|
|
5194
|
-
<cide-ele-icon class="tw-absolute tw-left-2 tw-top-1/2 tw-transform -tw-translate-y-1/2 tw-text-gray-400">search</cide-ele-icon>
|
|
5195
|
-
<input
|
|
5196
|
-
type="text"
|
|
5197
|
-
[value]="searchQuery()"
|
|
5198
|
-
(input)="searchQuery.set($any($event.target).value)"
|
|
5199
|
-
placeholder="Search shortcuts..."
|
|
5200
|
-
class="tw-w-full tw-pl-8 tw-pr-3 tw-py-2 tw-text-sm tw-border tw-border-gray-300 dark:tw-border-gray-600 tw-rounded-lg tw-bg-white dark:tw-bg-gray-800 tw-text-gray-900 dark:tw-text-gray-100 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500">
|
|
5201
|
-
</div>
|
|
5202
|
-
|
|
5203
|
-
<!-- Shortcuts Content -->
|
|
5204
|
-
@if (filteredShortcuts().length === 0) {
|
|
5205
|
-
<div class="tw-py-12 tw-text-center">
|
|
5206
|
-
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-2">keyboard_off</cide-ele-icon>
|
|
5207
|
-
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">No shortcuts found</p>
|
|
5208
|
-
</div>
|
|
5209
|
-
} @else {
|
|
5210
|
-
@if (viewMode() === 'grouped') {
|
|
5211
|
-
<!-- Grouped View -->
|
|
5212
|
-
@for (category of categories(); track category) {
|
|
5213
|
-
<div class="tw-space-y-2">
|
|
5214
|
-
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide tw-mt-4 tw-mb-2">
|
|
5215
|
-
{{ category }}
|
|
5216
|
-
</h4>
|
|
5217
|
-
<div class="tw-space-y-2">
|
|
5218
|
-
@for (shortcut of getShortcutsByCategory(category); track shortcut.id) {
|
|
5219
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5220
|
-
@if (shortcut.featuredHTML) {
|
|
5221
|
-
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5222
|
-
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5223
|
-
</div>
|
|
5224
|
-
}
|
|
5225
|
-
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5226
|
-
<div class="tw-flex-1">
|
|
5227
|
-
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5228
|
-
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5229
|
-
{{ shortcut.title }}
|
|
5230
|
-
</h5>
|
|
5231
|
-
@if (shortcut.isUserDefined) {
|
|
5232
|
-
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5233
|
-
}
|
|
5234
|
-
</div>
|
|
5235
|
-
@if (shortcut.description) {
|
|
5236
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5237
|
-
}
|
|
5238
|
-
</div>
|
|
5239
|
-
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5240
|
-
@for (key of getKeyParts(shortcut.keyCombination); track $index; let isLast = $last) {
|
|
5241
|
-
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5242
|
-
{{ key }}
|
|
5243
|
-
</kbd>
|
|
5244
|
-
@if (!isLast) {
|
|
5245
|
-
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5246
|
-
}
|
|
5247
|
-
}
|
|
5248
|
-
</div>
|
|
5249
|
-
</div>
|
|
5250
|
-
</div>
|
|
5251
|
-
}
|
|
5252
|
-
</div>
|
|
5253
|
-
</div>
|
|
5254
|
-
}
|
|
5255
|
-
} @else {
|
|
5256
|
-
<!-- List View -->
|
|
5257
|
-
<div class="tw-space-y-2">
|
|
5258
|
-
@for (shortcut of filteredShortcuts(); track shortcut.id) {
|
|
5259
|
-
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5260
|
-
@if (shortcut.featuredHTML) {
|
|
5261
|
-
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5262
|
-
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5263
|
-
</div>
|
|
5264
|
-
}
|
|
5265
|
-
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5266
|
-
<div class="tw-flex-1">
|
|
5267
|
-
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5268
|
-
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5269
|
-
{{ shortcut.title }}
|
|
5270
|
-
</h5>
|
|
5271
|
-
@if (shortcut.isUserDefined) {
|
|
5272
|
-
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5273
|
-
}
|
|
5274
|
-
</div>
|
|
5275
|
-
@if (shortcut.description) {
|
|
5276
|
-
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5277
|
-
}
|
|
5278
|
-
@if (shortcut.category) {
|
|
5279
|
-
<span class="tw-inline-block tw-mt-1 tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-medium tw-text-gray-500 dark:tw-text-gray-400 tw-bg-gray-100 dark:tw-bg-gray-600 tw-rounded">
|
|
5280
|
-
{{ shortcut.category }}
|
|
5281
|
-
</span>
|
|
5282
|
-
}
|
|
5283
|
-
</div>
|
|
5284
|
-
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5285
|
-
@for (key of getKeyParts(shortcut.keyCombination); track $index) {
|
|
5286
|
-
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5287
|
-
{{ key }}
|
|
5288
|
-
</kbd>
|
|
5289
|
-
@if (!$last) {
|
|
5290
|
-
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5291
|
-
}
|
|
5292
|
-
}
|
|
5293
|
-
</div>
|
|
5294
|
-
</div>
|
|
5295
|
-
</div>
|
|
5296
|
-
}
|
|
5297
|
-
</div>
|
|
5298
|
-
}
|
|
5299
|
-
}
|
|
5300
|
-
</div>
|
|
5253
|
+
args: [{ selector: 'cide-lyt-shortcuts-panel', standalone: true, imports: [CommonModule, FormsModule, CideIconComponent, CideEleButtonComponent], template: `
|
|
5254
|
+
<div class="tw-p-6 tw-space-y-4 tw-bg-white dark:tw-bg-gray-900">
|
|
5255
|
+
<!-- View Toggle and Refresh -->
|
|
5256
|
+
<div class="tw-flex tw-items-center tw-justify-end tw-gap-2 tw-mb-4">
|
|
5257
|
+
<button
|
|
5258
|
+
type="button"
|
|
5259
|
+
cideEleButton
|
|
5260
|
+
variant="outline"
|
|
5261
|
+
size="sm"
|
|
5262
|
+
(click)="loadShortcuts()"
|
|
5263
|
+
title="Refresh shortcuts">
|
|
5264
|
+
<cide-ele-icon>refresh</cide-ele-icon>
|
|
5265
|
+
Refresh
|
|
5266
|
+
</button>
|
|
5267
|
+
<button
|
|
5268
|
+
type="button"
|
|
5269
|
+
cideEleButton
|
|
5270
|
+
variant="outline"
|
|
5271
|
+
size="sm"
|
|
5272
|
+
(click)="toggleView()">
|
|
5273
|
+
<cide-ele-icon>{{ viewMode() === 'grouped' ? 'view_list' : 'category' }}</cide-ele-icon>
|
|
5274
|
+
{{ viewMode() === 'grouped' ? 'List View' : 'Grouped View' }}
|
|
5275
|
+
</button>
|
|
5276
|
+
</div>
|
|
5277
|
+
|
|
5278
|
+
<!-- Search -->
|
|
5279
|
+
<div class="tw-relative">
|
|
5280
|
+
<cide-ele-icon class="tw-absolute tw-left-2 tw-top-1/2 tw-transform -tw-translate-y-1/2 tw-text-gray-400">search</cide-ele-icon>
|
|
5281
|
+
<input
|
|
5282
|
+
type="text"
|
|
5283
|
+
[value]="searchQuery()"
|
|
5284
|
+
(input)="searchQuery.set($any($event.target).value)"
|
|
5285
|
+
placeholder="Search shortcuts..."
|
|
5286
|
+
class="tw-w-full tw-pl-8 tw-pr-3 tw-py-2 tw-text-sm tw-border tw-border-gray-300 dark:tw-border-gray-600 tw-rounded-lg tw-bg-white dark:tw-bg-gray-800 tw-text-gray-900 dark:tw-text-gray-100 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500">
|
|
5287
|
+
</div>
|
|
5288
|
+
|
|
5289
|
+
<!-- Shortcuts Content -->
|
|
5290
|
+
@if (filteredShortcuts().length === 0) {
|
|
5291
|
+
<div class="tw-py-12 tw-text-center">
|
|
5292
|
+
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-2">keyboard_off</cide-ele-icon>
|
|
5293
|
+
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">No shortcuts found</p>
|
|
5294
|
+
</div>
|
|
5295
|
+
} @else {
|
|
5296
|
+
@if (viewMode() === 'grouped') {
|
|
5297
|
+
<!-- Grouped View -->
|
|
5298
|
+
@for (category of categories(); track category) {
|
|
5299
|
+
<div class="tw-space-y-2">
|
|
5300
|
+
<h4 class="tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-uppercase tw-tracking-wide tw-mt-4 tw-mb-2">
|
|
5301
|
+
{{ category }}
|
|
5302
|
+
</h4>
|
|
5303
|
+
<div class="tw-space-y-2">
|
|
5304
|
+
@for (shortcut of getShortcutsByCategory(category); track shortcut.id) {
|
|
5305
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5306
|
+
@if (shortcut.featuredHTML) {
|
|
5307
|
+
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5308
|
+
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5309
|
+
</div>
|
|
5310
|
+
}
|
|
5311
|
+
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5312
|
+
<div class="tw-flex-1">
|
|
5313
|
+
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5314
|
+
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5315
|
+
{{ shortcut.title }}
|
|
5316
|
+
</h5>
|
|
5317
|
+
@if (shortcut.isUserDefined) {
|
|
5318
|
+
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5319
|
+
}
|
|
5320
|
+
</div>
|
|
5321
|
+
@if (shortcut.description) {
|
|
5322
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5323
|
+
}
|
|
5324
|
+
</div>
|
|
5325
|
+
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5326
|
+
@for (key of getKeyParts(shortcut.keyCombination); track $index; let isLast = $last) {
|
|
5327
|
+
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5328
|
+
{{ key }}
|
|
5329
|
+
</kbd>
|
|
5330
|
+
@if (!isLast) {
|
|
5331
|
+
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5332
|
+
}
|
|
5333
|
+
}
|
|
5334
|
+
</div>
|
|
5335
|
+
</div>
|
|
5336
|
+
</div>
|
|
5337
|
+
}
|
|
5338
|
+
</div>
|
|
5339
|
+
</div>
|
|
5340
|
+
}
|
|
5341
|
+
} @else {
|
|
5342
|
+
<!-- List View -->
|
|
5343
|
+
<div class="tw-space-y-2">
|
|
5344
|
+
@for (shortcut of filteredShortcuts(); track shortcut.id) {
|
|
5345
|
+
<div class="tw-p-3 tw-bg-gray-50 dark:tw-bg-gray-800/50 tw-rounded-lg tw-border tw-border-gray-200 dark:tw-border-gray-700 hover:tw-border-blue-500 dark:hover:tw-border-blue-400 tw-transition-colors">
|
|
5346
|
+
@if (shortcut.featuredHTML) {
|
|
5347
|
+
<div class="tw-mb-2 tw-p-2 tw-bg-white dark:tw-bg-gray-800 tw-rounded tw-border tw-border-gray-200 dark:tw-border-gray-700">
|
|
5348
|
+
<div [innerHTML]="sanitizeHTML(shortcut.featuredHTML)"></div>
|
|
5349
|
+
</div>
|
|
5350
|
+
}
|
|
5351
|
+
<div class="tw-flex tw-items-start tw-justify-between tw-gap-3">
|
|
5352
|
+
<div class="tw-flex-1">
|
|
5353
|
+
<div class="tw-flex tw-items-center tw-gap-2 tw-mb-1">
|
|
5354
|
+
<h5 class="tw-m-0 tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-gray-100">
|
|
5355
|
+
{{ shortcut.title }}
|
|
5356
|
+
</h5>
|
|
5357
|
+
@if (shortcut.isUserDefined) {
|
|
5358
|
+
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-blue-600 dark:tw-text-blue-400 tw-bg-blue-50 dark:tw-bg-blue-900/30 tw-rounded">Custom</span>
|
|
5359
|
+
}
|
|
5360
|
+
</div>
|
|
5361
|
+
@if (shortcut.description) {
|
|
5362
|
+
<p class="tw-m-0 tw-text-xs tw-text-gray-600 dark:tw-text-gray-400">{{ shortcut.description }}</p>
|
|
5363
|
+
}
|
|
5364
|
+
@if (shortcut.category) {
|
|
5365
|
+
<span class="tw-inline-block tw-mt-1 tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-medium tw-text-gray-500 dark:tw-text-gray-400 tw-bg-gray-100 dark:tw-bg-gray-600 tw-rounded">
|
|
5366
|
+
{{ shortcut.category }}
|
|
5367
|
+
</span>
|
|
5368
|
+
}
|
|
5369
|
+
</div>
|
|
5370
|
+
<div class="tw-flex tw-items-center tw-gap-1 tw-flex-shrink-0">
|
|
5371
|
+
@for (key of getKeyParts(shortcut.keyCombination); track $index) {
|
|
5372
|
+
<kbd class="tw-px-2 tw-py-1 tw-text-xs tw-font-semibold tw-text-gray-700 dark:tw-text-gray-300 tw-bg-gray-200 dark:tw-bg-gray-600 tw-border tw-border-gray-300 dark:tw-border-gray-500 tw-rounded tw-shadow-sm">
|
|
5373
|
+
{{ key }}
|
|
5374
|
+
</kbd>
|
|
5375
|
+
@if (!$last) {
|
|
5376
|
+
<span class="tw-text-gray-400 tw-text-xs">+</span>
|
|
5377
|
+
}
|
|
5378
|
+
}
|
|
5379
|
+
</div>
|
|
5380
|
+
</div>
|
|
5381
|
+
</div>
|
|
5382
|
+
}
|
|
5383
|
+
</div>
|
|
5384
|
+
}
|
|
5385
|
+
}
|
|
5386
|
+
</div>
|
|
5301
5387
|
`, styles: [":host{display:block}kbd{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;line-height:1.5}\n"] }]
|
|
5302
5388
|
}] });
|
|
5303
5389
|
|
|
@@ -5360,91 +5446,91 @@ class SettingsContainerComponent {
|
|
|
5360
5446
|
this.selectedSection.set(sectionId);
|
|
5361
5447
|
}
|
|
5362
5448
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: SettingsContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5363
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: SettingsContainerComponent, isStandalone: true, selector: "cide-lyt-settings-container", ngImport: i0, template: `
|
|
5364
|
-
<div class="tw-flex tw-h-full tw-bg-white dark:tw-bg-gray-900">
|
|
5365
|
-
<!-- Left Sidebar Navigation -->
|
|
5366
|
-
<div class="tw-w-64 tw-border-r tw-border-gray-200 dark:tw-border-gray-700 tw-bg-gray-50 dark:tw-bg-gray-800 tw-flex tw-flex-col">
|
|
5367
|
-
<!-- Header -->
|
|
5368
|
-
<div class="tw-px-4 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
5369
|
-
<h2 class="tw-m-0 tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Settings</h2>
|
|
5370
|
-
<p class="tw-m-0 tw-mt-1 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Manage your preferences</p>
|
|
5371
|
-
</div>
|
|
5372
|
-
|
|
5373
|
-
<!-- Navigation List -->
|
|
5374
|
-
<nav class="tw-flex-1 tw-overflow-y-auto tw-p-2">
|
|
5375
|
-
@for (section of sections(); track section.id) {
|
|
5376
|
-
<button
|
|
5377
|
-
type="button"
|
|
5378
|
-
cideEleButton
|
|
5379
|
-
[ngClass]="{
|
|
5380
|
-
'tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-text-blue-600 dark:tw-text-blue-400': selectedSection() === section.id,
|
|
5381
|
-
'tw-text-gray-700 dark:tw-text-gray-300': selectedSection() !== section.id
|
|
5382
|
-
}"
|
|
5383
|
-
(click)="selectSection(section.id)"
|
|
5384
|
-
class="tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-mb-1 tw-rounded-lg tw-transition-colors tw-text-left hover:tw-bg-gray-100 dark:hover:tw-bg-gray-700 tw-justify-start">
|
|
5385
|
-
<cide-ele-icon class="tw-text-lg">{{ section.icon }}</cide-ele-icon>
|
|
5386
|
-
<div class="tw-flex-1 tw-min-w-0">
|
|
5387
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
5388
|
-
<span class="tw-text-sm tw-font-medium tw-truncate">{{ section.title }}</span>
|
|
5389
|
-
@if (section.badge) {
|
|
5390
|
-
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-white tw-bg-blue-500 tw-rounded">{{ section.badge }}</span>
|
|
5391
|
-
}
|
|
5392
|
-
</div>
|
|
5393
|
-
@if (section.description) {
|
|
5394
|
-
<p class="tw-m-0 tw-mt-0.5 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400 tw-truncate">{{ section.description }}</p>
|
|
5395
|
-
}
|
|
5396
|
-
</div>
|
|
5397
|
-
</button>
|
|
5398
|
-
}
|
|
5399
|
-
</nav>
|
|
5400
|
-
</div>
|
|
5401
|
-
|
|
5402
|
-
<!-- Main Content Area -->
|
|
5403
|
-
<div class="tw-flex-1 tw-flex tw-flex-col tw-overflow-hidden">
|
|
5404
|
-
<!-- Content Header -->
|
|
5405
|
-
<div class="tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700 tw-bg-white dark:tw-bg-gray-900">
|
|
5406
|
-
@if (currentSection()) {
|
|
5407
|
-
<div class="tw-flex tw-items-center tw-justify-between">
|
|
5408
|
-
<div>
|
|
5409
|
-
<h3 class="tw-m-0 tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">
|
|
5410
|
-
{{ currentSection()?.title }}
|
|
5411
|
-
</h3>
|
|
5412
|
-
@if (currentSection()?.description) {
|
|
5413
|
-
<p class="tw-m-0 tw-mt-1 tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5414
|
-
{{ currentSection()?.description }}
|
|
5415
|
-
</p>
|
|
5416
|
-
}
|
|
5417
|
-
</div>
|
|
5418
|
-
</div>
|
|
5419
|
-
}
|
|
5420
|
-
</div>
|
|
5421
|
-
|
|
5422
|
-
<!-- Content Body -->
|
|
5423
|
-
<div class="tw-flex-1 tw-overflow-y-auto tw-bg-white dark:tw-bg-gray-900">
|
|
5424
|
-
@switch (selectedSection()) {
|
|
5425
|
-
@case ('notifications') {
|
|
5426
|
-
<cide-lyt-notification-settings></cide-lyt-notification-settings>
|
|
5427
|
-
}
|
|
5428
|
-
@case ('shortcuts') {
|
|
5429
|
-
<cide-lyt-shortcuts-panel></cide-lyt-shortcuts-panel>
|
|
5430
|
-
}
|
|
5431
|
-
@default {
|
|
5432
|
-
<div class="tw-p-6">
|
|
5433
|
-
<div class="tw-text-center tw-py-12">
|
|
5434
|
-
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-3">{{ currentSection()?.icon || 'settings' }}</cide-ele-icon>
|
|
5435
|
-
<h4 class="tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mb-1">
|
|
5436
|
-
{{ currentSection()?.title || 'Settings' }}
|
|
5437
|
-
</h4>
|
|
5438
|
-
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5439
|
-
{{ currentSection()?.description || 'Select a section from the sidebar to view settings.' }}
|
|
5440
|
-
</p>
|
|
5441
|
-
</div>
|
|
5442
|
-
</div>
|
|
5443
|
-
}
|
|
5444
|
-
}
|
|
5445
|
-
</div>
|
|
5446
|
-
</div>
|
|
5447
|
-
</div>
|
|
5449
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: SettingsContainerComponent, isStandalone: true, selector: "cide-lyt-settings-container", ngImport: i0, template: `
|
|
5450
|
+
<div class="tw-flex tw-h-full tw-bg-white dark:tw-bg-gray-900 tw-text-gray-900 dark:tw-text-gray-100">
|
|
5451
|
+
<!-- Left Sidebar Navigation -->
|
|
5452
|
+
<div class="tw-w-64 tw-border-r tw-border-gray-200 dark:tw-border-gray-700 tw-bg-gray-50 dark:tw-bg-gray-800 tw-flex tw-flex-col">
|
|
5453
|
+
<!-- Header -->
|
|
5454
|
+
<div class="tw-px-4 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
5455
|
+
<h2 class="tw-m-0 tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Settings</h2>
|
|
5456
|
+
<p class="tw-m-0 tw-mt-1 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Manage your preferences</p>
|
|
5457
|
+
</div>
|
|
5458
|
+
|
|
5459
|
+
<!-- Navigation List -->
|
|
5460
|
+
<nav class="tw-flex-1 tw-overflow-y-auto tw-p-2">
|
|
5461
|
+
@for (section of sections(); track section.id) {
|
|
5462
|
+
<button
|
|
5463
|
+
type="button"
|
|
5464
|
+
cideEleButton
|
|
5465
|
+
[ngClass]="{
|
|
5466
|
+
'tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-text-blue-600 dark:tw-text-blue-400': selectedSection() === section.id,
|
|
5467
|
+
'tw-text-gray-700 dark:tw-text-gray-300': selectedSection() !== section.id
|
|
5468
|
+
}"
|
|
5469
|
+
(click)="selectSection(section.id)"
|
|
5470
|
+
class="tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-mb-1 tw-rounded-lg tw-transition-colors tw-text-left hover:tw-bg-gray-100 dark:hover:tw-bg-gray-700 tw-justify-start">
|
|
5471
|
+
<cide-ele-icon class="tw-text-lg">{{ section.icon }}</cide-ele-icon>
|
|
5472
|
+
<div class="tw-flex-1 tw-min-w-0">
|
|
5473
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
5474
|
+
<span class="tw-text-sm tw-font-medium tw-truncate">{{ section.title }}</span>
|
|
5475
|
+
@if (section.badge) {
|
|
5476
|
+
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-white tw-bg-blue-500 tw-rounded">{{ section.badge }}</span>
|
|
5477
|
+
}
|
|
5478
|
+
</div>
|
|
5479
|
+
@if (section.description) {
|
|
5480
|
+
<p class="tw-m-0 tw-mt-0.5 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400 tw-truncate">{{ section.description }}</p>
|
|
5481
|
+
}
|
|
5482
|
+
</div>
|
|
5483
|
+
</button>
|
|
5484
|
+
}
|
|
5485
|
+
</nav>
|
|
5486
|
+
</div>
|
|
5487
|
+
|
|
5488
|
+
<!-- Main Content Area -->
|
|
5489
|
+
<div class="tw-flex-1 tw-flex tw-flex-col tw-overflow-hidden">
|
|
5490
|
+
<!-- Content Header -->
|
|
5491
|
+
<div class="tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700 tw-bg-white dark:tw-bg-gray-900">
|
|
5492
|
+
@if (currentSection()) {
|
|
5493
|
+
<div class="tw-flex tw-items-center tw-justify-between">
|
|
5494
|
+
<div>
|
|
5495
|
+
<h3 class="tw-m-0 tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">
|
|
5496
|
+
{{ currentSection()?.title }}
|
|
5497
|
+
</h3>
|
|
5498
|
+
@if (currentSection()?.description) {
|
|
5499
|
+
<p class="tw-m-0 tw-mt-1 tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5500
|
+
{{ currentSection()?.description }}
|
|
5501
|
+
</p>
|
|
5502
|
+
}
|
|
5503
|
+
</div>
|
|
5504
|
+
</div>
|
|
5505
|
+
}
|
|
5506
|
+
</div>
|
|
5507
|
+
|
|
5508
|
+
<!-- Content Body -->
|
|
5509
|
+
<div class="tw-flex-1 tw-overflow-y-auto tw-bg-white dark:tw-bg-gray-900">
|
|
5510
|
+
@switch (selectedSection()) {
|
|
5511
|
+
@case ('notifications') {
|
|
5512
|
+
<cide-lyt-notification-settings></cide-lyt-notification-settings>
|
|
5513
|
+
}
|
|
5514
|
+
@case ('shortcuts') {
|
|
5515
|
+
<cide-lyt-shortcuts-panel></cide-lyt-shortcuts-panel>
|
|
5516
|
+
}
|
|
5517
|
+
@default {
|
|
5518
|
+
<div class="tw-p-6">
|
|
5519
|
+
<div class="tw-text-center tw-py-12">
|
|
5520
|
+
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-3">{{ currentSection()?.icon || 'settings' }}</cide-ele-icon>
|
|
5521
|
+
<h4 class="tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mb-1">
|
|
5522
|
+
{{ currentSection()?.title || 'Settings' }}
|
|
5523
|
+
</h4>
|
|
5524
|
+
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5525
|
+
{{ currentSection()?.description || 'Select a section from the sidebar to view settings.' }}
|
|
5526
|
+
</p>
|
|
5527
|
+
</div>
|
|
5528
|
+
</div>
|
|
5529
|
+
}
|
|
5530
|
+
}
|
|
5531
|
+
</div>
|
|
5532
|
+
</div>
|
|
5533
|
+
</div>
|
|
5448
5534
|
`, isInline: true, styles: [":host{display:block;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: NotificationSettingsComponent, selector: "cide-lyt-notification-settings" }, { kind: "component", type: ShortcutsPanelComponent, selector: "cide-lyt-shortcuts-panel" }] });
|
|
5449
5535
|
}
|
|
5450
5536
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: SettingsContainerComponent, decorators: [{
|
|
@@ -5454,91 +5540,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
5454
5540
|
CideIconComponent,
|
|
5455
5541
|
NotificationSettingsComponent,
|
|
5456
5542
|
ShortcutsPanelComponent
|
|
5457
|
-
], template: `
|
|
5458
|
-
<div class="tw-flex tw-h-full tw-bg-white dark:tw-bg-gray-900">
|
|
5459
|
-
<!-- Left Sidebar Navigation -->
|
|
5460
|
-
<div class="tw-w-64 tw-border-r tw-border-gray-200 dark:tw-border-gray-700 tw-bg-gray-50 dark:tw-bg-gray-800 tw-flex tw-flex-col">
|
|
5461
|
-
<!-- Header -->
|
|
5462
|
-
<div class="tw-px-4 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
5463
|
-
<h2 class="tw-m-0 tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Settings</h2>
|
|
5464
|
-
<p class="tw-m-0 tw-mt-1 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Manage your preferences</p>
|
|
5465
|
-
</div>
|
|
5466
|
-
|
|
5467
|
-
<!-- Navigation List -->
|
|
5468
|
-
<nav class="tw-flex-1 tw-overflow-y-auto tw-p-2">
|
|
5469
|
-
@for (section of sections(); track section.id) {
|
|
5470
|
-
<button
|
|
5471
|
-
type="button"
|
|
5472
|
-
cideEleButton
|
|
5473
|
-
[ngClass]="{
|
|
5474
|
-
'tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-text-blue-600 dark:tw-text-blue-400': selectedSection() === section.id,
|
|
5475
|
-
'tw-text-gray-700 dark:tw-text-gray-300': selectedSection() !== section.id
|
|
5476
|
-
}"
|
|
5477
|
-
(click)="selectSection(section.id)"
|
|
5478
|
-
class="tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-mb-1 tw-rounded-lg tw-transition-colors tw-text-left hover:tw-bg-gray-100 dark:hover:tw-bg-gray-700 tw-justify-start">
|
|
5479
|
-
<cide-ele-icon class="tw-text-lg">{{ section.icon }}</cide-ele-icon>
|
|
5480
|
-
<div class="tw-flex-1 tw-min-w-0">
|
|
5481
|
-
<div class="tw-flex tw-items-center tw-gap-2">
|
|
5482
|
-
<span class="tw-text-sm tw-font-medium tw-truncate">{{ section.title }}</span>
|
|
5483
|
-
@if (section.badge) {
|
|
5484
|
-
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-white tw-bg-blue-500 tw-rounded">{{ section.badge }}</span>
|
|
5485
|
-
}
|
|
5486
|
-
</div>
|
|
5487
|
-
@if (section.description) {
|
|
5488
|
-
<p class="tw-m-0 tw-mt-0.5 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400 tw-truncate">{{ section.description }}</p>
|
|
5489
|
-
}
|
|
5490
|
-
</div>
|
|
5491
|
-
</button>
|
|
5492
|
-
}
|
|
5493
|
-
</nav>
|
|
5494
|
-
</div>
|
|
5495
|
-
|
|
5496
|
-
<!-- Main Content Area -->
|
|
5497
|
-
<div class="tw-flex-1 tw-flex tw-flex-col tw-overflow-hidden">
|
|
5498
|
-
<!-- Content Header -->
|
|
5499
|
-
<div class="tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700 tw-bg-white dark:tw-bg-gray-900">
|
|
5500
|
-
@if (currentSection()) {
|
|
5501
|
-
<div class="tw-flex tw-items-center tw-justify-between">
|
|
5502
|
-
<div>
|
|
5503
|
-
<h3 class="tw-m-0 tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">
|
|
5504
|
-
{{ currentSection()?.title }}
|
|
5505
|
-
</h3>
|
|
5506
|
-
@if (currentSection()?.description) {
|
|
5507
|
-
<p class="tw-m-0 tw-mt-1 tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5508
|
-
{{ currentSection()?.description }}
|
|
5509
|
-
</p>
|
|
5510
|
-
}
|
|
5511
|
-
</div>
|
|
5512
|
-
</div>
|
|
5513
|
-
}
|
|
5514
|
-
</div>
|
|
5515
|
-
|
|
5516
|
-
<!-- Content Body -->
|
|
5517
|
-
<div class="tw-flex-1 tw-overflow-y-auto tw-bg-white dark:tw-bg-gray-900">
|
|
5518
|
-
@switch (selectedSection()) {
|
|
5519
|
-
@case ('notifications') {
|
|
5520
|
-
<cide-lyt-notification-settings></cide-lyt-notification-settings>
|
|
5521
|
-
}
|
|
5522
|
-
@case ('shortcuts') {
|
|
5523
|
-
<cide-lyt-shortcuts-panel></cide-lyt-shortcuts-panel>
|
|
5524
|
-
}
|
|
5525
|
-
@default {
|
|
5526
|
-
<div class="tw-p-6">
|
|
5527
|
-
<div class="tw-text-center tw-py-12">
|
|
5528
|
-
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-3">{{ currentSection()?.icon || 'settings' }}</cide-ele-icon>
|
|
5529
|
-
<h4 class="tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mb-1">
|
|
5530
|
-
{{ currentSection()?.title || 'Settings' }}
|
|
5531
|
-
</h4>
|
|
5532
|
-
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5533
|
-
{{ currentSection()?.description || 'Select a section from the sidebar to view settings.' }}
|
|
5534
|
-
</p>
|
|
5535
|
-
</div>
|
|
5536
|
-
</div>
|
|
5537
|
-
}
|
|
5538
|
-
}
|
|
5539
|
-
</div>
|
|
5540
|
-
</div>
|
|
5541
|
-
</div>
|
|
5543
|
+
], template: `
|
|
5544
|
+
<div class="tw-flex tw-h-full tw-bg-white dark:tw-bg-gray-900 tw-text-gray-900 dark:tw-text-gray-100">
|
|
5545
|
+
<!-- Left Sidebar Navigation -->
|
|
5546
|
+
<div class="tw-w-64 tw-border-r tw-border-gray-200 dark:tw-border-gray-700 tw-bg-gray-50 dark:tw-bg-gray-800 tw-flex tw-flex-col">
|
|
5547
|
+
<!-- Header -->
|
|
5548
|
+
<div class="tw-px-4 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700">
|
|
5549
|
+
<h2 class="tw-m-0 tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">Settings</h2>
|
|
5550
|
+
<p class="tw-m-0 tw-mt-1 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400">Manage your preferences</p>
|
|
5551
|
+
</div>
|
|
5552
|
+
|
|
5553
|
+
<!-- Navigation List -->
|
|
5554
|
+
<nav class="tw-flex-1 tw-overflow-y-auto tw-p-2">
|
|
5555
|
+
@for (section of sections(); track section.id) {
|
|
5556
|
+
<button
|
|
5557
|
+
type="button"
|
|
5558
|
+
cideEleButton
|
|
5559
|
+
[ngClass]="{
|
|
5560
|
+
'tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-text-blue-600 dark:tw-text-blue-400': selectedSection() === section.id,
|
|
5561
|
+
'tw-text-gray-700 dark:tw-text-gray-300': selectedSection() !== section.id
|
|
5562
|
+
}"
|
|
5563
|
+
(click)="selectSection(section.id)"
|
|
5564
|
+
class="tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-mb-1 tw-rounded-lg tw-transition-colors tw-text-left hover:tw-bg-gray-100 dark:hover:tw-bg-gray-700 tw-justify-start">
|
|
5565
|
+
<cide-ele-icon class="tw-text-lg">{{ section.icon }}</cide-ele-icon>
|
|
5566
|
+
<div class="tw-flex-1 tw-min-w-0">
|
|
5567
|
+
<div class="tw-flex tw-items-center tw-gap-2">
|
|
5568
|
+
<span class="tw-text-sm tw-font-medium tw-truncate">{{ section.title }}</span>
|
|
5569
|
+
@if (section.badge) {
|
|
5570
|
+
<span class="tw-px-1.5 tw-py-0.5 tw-text-[10px] tw-font-semibold tw-text-white tw-bg-blue-500 tw-rounded">{{ section.badge }}</span>
|
|
5571
|
+
}
|
|
5572
|
+
</div>
|
|
5573
|
+
@if (section.description) {
|
|
5574
|
+
<p class="tw-m-0 tw-mt-0.5 tw-text-xs tw-text-gray-500 dark:tw-text-gray-400 tw-truncate">{{ section.description }}</p>
|
|
5575
|
+
}
|
|
5576
|
+
</div>
|
|
5577
|
+
</button>
|
|
5578
|
+
}
|
|
5579
|
+
</nav>
|
|
5580
|
+
</div>
|
|
5581
|
+
|
|
5582
|
+
<!-- Main Content Area -->
|
|
5583
|
+
<div class="tw-flex-1 tw-flex tw-flex-col tw-overflow-hidden">
|
|
5584
|
+
<!-- Content Header -->
|
|
5585
|
+
<div class="tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 dark:tw-border-gray-700 tw-bg-white dark:tw-bg-gray-900">
|
|
5586
|
+
@if (currentSection()) {
|
|
5587
|
+
<div class="tw-flex tw-items-center tw-justify-between">
|
|
5588
|
+
<div>
|
|
5589
|
+
<h3 class="tw-m-0 tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100">
|
|
5590
|
+
{{ currentSection()?.title }}
|
|
5591
|
+
</h3>
|
|
5592
|
+
@if (currentSection()?.description) {
|
|
5593
|
+
<p class="tw-m-0 tw-mt-1 tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5594
|
+
{{ currentSection()?.description }}
|
|
5595
|
+
</p>
|
|
5596
|
+
}
|
|
5597
|
+
</div>
|
|
5598
|
+
</div>
|
|
5599
|
+
}
|
|
5600
|
+
</div>
|
|
5601
|
+
|
|
5602
|
+
<!-- Content Body -->
|
|
5603
|
+
<div class="tw-flex-1 tw-overflow-y-auto tw-bg-white dark:tw-bg-gray-900">
|
|
5604
|
+
@switch (selectedSection()) {
|
|
5605
|
+
@case ('notifications') {
|
|
5606
|
+
<cide-lyt-notification-settings></cide-lyt-notification-settings>
|
|
5607
|
+
}
|
|
5608
|
+
@case ('shortcuts') {
|
|
5609
|
+
<cide-lyt-shortcuts-panel></cide-lyt-shortcuts-panel>
|
|
5610
|
+
}
|
|
5611
|
+
@default {
|
|
5612
|
+
<div class="tw-p-6">
|
|
5613
|
+
<div class="tw-text-center tw-py-12">
|
|
5614
|
+
<cide-ele-icon class="tw-text-4xl tw-text-gray-300 dark:tw-text-gray-600 tw-mb-3">{{ currentSection()?.icon || 'settings' }}</cide-ele-icon>
|
|
5615
|
+
<h4 class="tw-text-base tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mb-1">
|
|
5616
|
+
{{ currentSection()?.title || 'Settings' }}
|
|
5617
|
+
</h4>
|
|
5618
|
+
<p class="tw-text-sm tw-text-gray-500 dark:tw-text-gray-400">
|
|
5619
|
+
{{ currentSection()?.description || 'Select a section from the sidebar to view settings.' }}
|
|
5620
|
+
</p>
|
|
5621
|
+
</div>
|
|
5622
|
+
</div>
|
|
5623
|
+
}
|
|
5624
|
+
}
|
|
5625
|
+
</div>
|
|
5626
|
+
</div>
|
|
5627
|
+
</div>
|
|
5542
5628
|
`, styles: [":host{display:block;height:100%}\n"] }]
|
|
5543
5629
|
}] });
|
|
5544
5630
|
|
|
@@ -5585,11 +5671,11 @@ class CideLytFooterWrapperComponent {
|
|
|
5585
5671
|
this.floatingContainerService.bringToFront(containerId);
|
|
5586
5672
|
}
|
|
5587
5673
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytFooterWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5588
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideLytFooterWrapperComponent, isStandalone: true, selector: "cide-lyt-footer-wrapper", ngImport: i0, template: "<div\
|
|
5674
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideLytFooterWrapperComponent, isStandalone: true, selector: "cide-lyt-footer-wrapper", ngImport: i0, template: "<div\n class=\"cide-footer tw-w-full tw-justify-between tw-flex tw-h-5 tw-select-none tw-px-1\">\n <!-- Resizer -->\n <div parentElementSelector=\"#cide-lyt-layout-wrapper\" prevElementSelector=\"#cide-lyt-sidebar-page-wrapper\"\n nextElementSelector=\"#cide-lyt-footer-console-wrapper\" [minNextSize]=\"footerSetupData.cide_lyt_footer_height\" cideEleResizer direction=\"vertical\">\n <div class=\"cide-lyt-devider-track tw-w-full tw-h-full\"></div>\n </div>\n <div></div>\n <div class=\"tw-flex tw-items-center tw-gap-1.5\">\n <cide-ele-icon \n size=\"3xs\" \n class=\"tw-mt-0.5 tw-cursor-pointer tw-text-gray-500 dark:tw-text-gray-400 hover:tw-text-blue-600 dark:hover:tw-text-blue-400 tw-transition-colors\" \n type=\"none\"\n (click)=\"openSettingsPanel()\"\n title=\"Settings\">\n settings\n </cide-ele-icon>\n <cide-ele-icon size=\"3xs\" class=\"tw-mt-0.5\" type=\"none\">contact_support</cide-ele-icon>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "directive", type: CideEleResizerDirective, selector: "[cideEleResizer]", inputs: ["direction", "to", "prevElementSelector", "nextElementSelector", "parentElementSelector", "minPrevSize", "minNextSize", "usePercentage"], outputs: ["resizeStart", "resizing", "resizeEnd"] }] });
|
|
5589
5675
|
}
|
|
5590
5676
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytFooterWrapperComponent, decorators: [{
|
|
5591
5677
|
type: Component,
|
|
5592
|
-
args: [{ selector: 'cide-lyt-footer-wrapper', standalone: true, imports: [CideIconComponent, CideEleResizerDirective], template: "<div\
|
|
5678
|
+
args: [{ selector: 'cide-lyt-footer-wrapper', standalone: true, imports: [CideIconComponent, CideEleResizerDirective], template: "<div\n class=\"cide-footer tw-w-full tw-justify-between tw-flex tw-h-5 tw-select-none tw-px-1\">\n <!-- Resizer -->\n <div parentElementSelector=\"#cide-lyt-layout-wrapper\" prevElementSelector=\"#cide-lyt-sidebar-page-wrapper\"\n nextElementSelector=\"#cide-lyt-footer-console-wrapper\" [minNextSize]=\"footerSetupData.cide_lyt_footer_height\" cideEleResizer direction=\"vertical\">\n <div class=\"cide-lyt-devider-track tw-w-full tw-h-full\"></div>\n </div>\n <div></div>\n <div class=\"tw-flex tw-items-center tw-gap-1.5\">\n <cide-ele-icon \n size=\"3xs\" \n class=\"tw-mt-0.5 tw-cursor-pointer tw-text-gray-500 dark:tw-text-gray-400 hover:tw-text-blue-600 dark:hover:tw-text-blue-400 tw-transition-colors\" \n type=\"none\"\n (click)=\"openSettingsPanel()\"\n title=\"Settings\">\n settings\n </cide-ele-icon>\n <cide-ele-icon size=\"3xs\" class=\"tw-mt-0.5\" type=\"none\">contact_support</cide-ele-icon>\n </div>\n</div>" }]
|
|
5593
5679
|
}], ctorParameters: () => [] });
|
|
5594
5680
|
|
|
5595
5681
|
class CideLytConsoleWrapperComponent {
|
|
@@ -5934,10 +6020,9 @@ const layoutControlPannelChildRoutes = [{
|
|
|
5934
6020
|
},
|
|
5935
6021
|
{
|
|
5936
6022
|
path: "home",
|
|
5937
|
-
loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-
|
|
6023
|
+
loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-D3FEDXRo.mjs').then(c => c.CideLytHomeWrapperComponent),
|
|
5938
6024
|
canActivate: [authGuard],
|
|
5939
6025
|
data: {
|
|
5940
|
-
reuseTab: true, // For CustomRouteReuseStrategy
|
|
5941
6026
|
sypg_page_code: "cide_lyt_home" // Used by RequestService to fetch tab properties
|
|
5942
6027
|
}
|
|
5943
6028
|
}
|
|
@@ -7502,4 +7587,4 @@ var floatingEntityRightsSharing_component = /*#__PURE__*/Object.freeze({
|
|
|
7502
7587
|
*/
|
|
7503
7588
|
|
|
7504
7589
|
export { AppStateHelperService as A, CideLytSharedWrapperComponent as C, ENVIRONMENT_CONFIG as E, NotificationSettingsService as N, 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 };
|
|
7505
|
-
//# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-
|
|
7590
|
+
//# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-BbcIno6W.mjs.map
|