cloud-ide-layout 1.0.34 → 1.0.35

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.
@@ -4,7 +4,7 @@ import { inject, PLATFORM_ID, Inject, Component } from '@angular/core';
4
4
  import * as i2 from '@angular/forms';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import { CideSelectComponent, CideEleButtonComponent } from 'cloud-ide-element';
7
- import { A as AppStateHelperService, s as setCSSVariable, d as CideLytThemeService } from './cloud-ide-layout-cloud-ide-layout-BaoaTej4.mjs';
7
+ import { A as AppStateHelperService, s as setCSSVariable, a as CideLytThemeService } from './cloud-ide-layout-cloud-ide-layout-CAo1_7zl.mjs';
8
8
  import _, { cloneDeep, isEqual } from 'lodash';
9
9
 
10
10
  class CideLytDrawerThemeComponent {
@@ -294,4 +294,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
294
294
  }] }] });
295
295
 
296
296
  export { CideLytDrawerThemeComponent };
297
- //# sourceMappingURL=cloud-ide-layout-drawer-theme.component-dHWR01J1.mjs.map
297
+ //# sourceMappingURL=cloud-ide-layout-drawer-theme.component-DNNgFvg2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-ide-layout-drawer-theme.component-dHWR01J1.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.html"],"sourcesContent":["import { NgFor, NgIf } from '@angular/common';\nimport { NgClass } from '@angular/common';\nimport { Component, OnInit, PLATFORM_ID, Inject, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CideSelectComponent, SelectOption, CideEleButtonComponent } from 'cloud-ide-element';\nimport { CideLytThemeService, Theme, setCSSVariable } from '../../../services/theme/theme.service';\nimport type { MSystemThemeUserPreferencesRequest, SystemThemesListControllerRespoonse, SystemThemeUserPreferencesControllerRespoonse } from 'cloud-ide-lms-model';\nimport type { SystemThemeControllerRespoonse } from 'cloud-ide-lms-model';\nimport type { ICoreSyth, ICoreSyoth, ICoreSyupth } from 'cloud-ide-lms-model';\nimport { isEqual, cloneDeep } from 'lodash';\nimport _ from 'lodash';\nimport { AppStateHelperService } from '../../../services/app-state';\n\ninterface ThemeColor {\n label: string;\n varName: string;\n value: string;\n}\n\ninterface TypographySetting {\n label: string;\n varName: string;\n value: string;\n type: 'number' | 'text';\n min?: number;\n max?: number;\n}\n\ntype ThemeGroup = {\n label: string;\n items: Array<{\n label: string;\n varName: string;\n value: string;\n type: 'number' | 'text';\n min?: number;\n max?: number;\n }>;\n};\n\n@Component({\n selector: 'cide-lyt-drawer-theme',\n standalone: true,\n imports: [FormsModule, NgFor, NgIf, NgClass, CideSelectComponent, CideEleButtonComponent],\n templateUrl: './drawer-theme.component.html',\n styleUrl: './drawer-theme.component.scss'\n})\nexport class CideLytDrawerThemeComponent implements OnInit {\n private readonly appState = inject(AppStateHelperService);\n // Preset themes\n presetThemes: { value: string, label: string, theme: ICoreSyth }[] = [];\n selectedTheme = '';\n isLoadingThemes = false;\n themeLoadError = '';\n mergedTheme: { [key: string]: string } = {};\n isRTL = false;\n originalThemeGroupValues: ThemeGroup[] = [];\n originalApiThemeValues: { [key: string]: string } = {}; // Store original API values\n\n themeGroups: ThemeGroup[] = [\n {\n label: 'Brand Colors',\n items: [\n { label: 'Primary', varName: '--cide-theme-color-brand-primary', value: '#4f46e5', type: 'text' },\n { label: 'Accent', varName: '--cide-theme-color-brand-accent', value: '#4338ca', type: 'text' },\n { label: 'Separator', varName: '--cide-theme-color-brand-separator', value: '#e5e7eb', type: 'text' }\n ]\n },\n {\n label: 'Text Colors',\n items: [\n { label: 'Body Text', varName: '--cide-theme-color-text-body', value: '#374151', type: 'text' },\n { label: 'Heading Text', varName: '--cide-theme-color-text-heading', value: '#111827', type: 'text' },\n { label: 'Link Text', varName: '--cide-theme-color-text-link', value: '#3b82f6', type: 'text' },\n { label: 'Muted Text', varName: '--cide-theme-color-text-muted', value: '#6b7280', type: 'text' }\n ]\n },\n {\n label: 'Background Colors',\n items: [\n { label: 'Body Background', varName: '--cide-theme-color-background-body', value: '#ffffff', type: 'text' }\n ]\n },\n {\n label: 'Layout Dimensions',\n items: [\n { label: 'Stack Wrapper Width', varName: '--cide-lyt-stack-wrapper-width', value: '60', type: 'number', min: 20, max: 120 }\n ]\n },\n {\n label: 'Font Sizes',\n items: [\n { label: 'XXXL Font Size', varName: '--cide-theme-font-size-xxxl', value: '3.052', type: 'number', min: 1, max: 10 },\n { label: 'XXL Font Size', varName: '--cide-theme-font-size-xxl', value: '2.441', type: 'number', min: 1, max: 10 },\n { label: 'XL Font Size', varName: '--cide-theme-font-size-xl', value: '1.953', type: 'number', min: 1, max: 10 },\n { label: 'LG Font Size', varName: '--cide-theme-font-size-lg', value: '1.563', type: 'number', min: 1, max: 10 },\n { label: 'MD Font Size', varName: '--cide-theme-font-size-md', value: '1.25', type: 'number', min: 1, max: 10 },\n { label: 'Paragraph Font Size', varName: '--cide-theme-font-size-p', value: '1', type: 'number', min: 0.5, max: 5 },\n { label: 'SM Font Size', varName: '--cide-theme-font-size-sm', value: '0.9', type: 'number', min: 0.5, max: 5 },\n { label: 'XS Font Size', varName: '--cide-theme-font-size-xs', value: '0.8', type: 'number', min: 0.5, max: 5 }\n ]\n },\n {\n label: 'Line Heights',\n items: [\n { label: 'Body Line Height', varName: '--cide-theme-line-height-body', value: '1.6', type: 'number', min: 1, max: 3 },\n { label: 'Heading Line Height', varName: '--cide-theme-line-height-heading', value: '1.2', type: 'number', min: 1, max: 3 }\n ]\n }\n ];\n\n constructor(\n private themeService: CideLytThemeService,\n @Inject(PLATFORM_ID) private platformId: object\n ) { }\n\n ngOnInit(): void {\n // Modern Angular v20 pattern: Use Signals directly\n this.selectedTheme = this.themeService.selectedTheme();\n\n // fetch the system themes list\n this.isLoadingThemes = true;\n this.themeService.fetchSystemThemesList().subscribe({\n next: (res: SystemThemesListControllerRespoonse) => {\n const themes: ICoreSyth[] = res?.data?.core_system_themes || [];\n this.presetThemes = themes.map((theme: ICoreSyth) => ({\n value: theme._id || '',\n label: theme.syth_theme_name || theme.syth_theme_id || '',\n theme\n }));\n this.isLoadingThemes = false;\n // If user has no theme set, select and apply the default theme\n if (!this.selectedTheme) {\n const defaultTheme = this.presetThemes.find(t => t.theme.syth_is_default);\n if (defaultTheme) {\n this.selectedTheme = defaultTheme.value;\n // Apply the default theme as CSS variables\n if (defaultTheme.theme.syth_properties) {\n Object.entries(defaultTheme.theme.syth_properties).forEach(([varName, value]) => {\n this.updateVar(varName, value as string);\n });\n }\n }\n }\n },\n error: () => {\n this.themeLoadError = 'Failed to load themes';\n this.isLoadingThemes = false;\n }\n });\n this.loadAndApplyUserTheme();\n }\n\n loadAndApplyUserTheme(): void {\n this.themeService.loadTheme().subscribe({\n next: (res: SystemThemeControllerRespoonse) => {\n const base: ICoreSyth | undefined = res?.data?.core_system_themes;\n const org: ICoreSyoth | undefined = res?.data?.core_system_organization_themes;\n const user: ICoreSyupth | undefined = res?.data?.core_system_theme_user_preferences;\n // Start with base theme properties\n let merged = { ...(base?.syth_properties || {}) };\n // Override with org overrides\n if (org?.syoth_overrides) {\n merged = { ...merged, ...org.syoth_overrides };\n }\n // Override with user overrides\n if (user?.syupth_overrides) {\n merged = { ...merged, ...user.syupth_overrides };\n }\n this.mergedTheme = merged;\n\n // Store original API values for reset functionality\n this.originalApiThemeValues = { ...merged };\n\n // Apply merged theme as CSS variables\n Object.entries(this.mergedTheme).forEach(([varName, value]) => {\n this.updateVar(varName, value as string);\n });\n\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n item.value = merged[item.varName] || merged[key] || item.value;\n\n if (key.includes('font_size') || key.includes('line_height')) {\n item.value = parseFloat(item.value) as unknown as string;\n }\n }\n }\n // Store a deep copy of the current values for reset\n this.originalThemeGroupValues = cloneDeep(this.themeGroups);\n },\n error: () => {\n // handle error if needed\n }\n });\n }\n\n // Update CSS variable in real time\n updateVar(varName: string, value: string) {\n // You can use either the utility function directly or the service method\n setCSSVariable(varName, value, this.platformId);\n // Alternative: this.themeService.updateCSSVariable(varName, value);\n }\n\n onThemeChange(event: SelectOption) {\n this.selectedTheme = event.value as string;\n const selected = this.presetThemes.find(t => t.value === this.selectedTheme);\n if (selected && selected.theme && selected.theme.syth_properties) {\n // here we will check the theme selected by organization is same if yes then overide also for user preferences\n if (this.themeService.selectedTheme() === selected.theme._id) {\n this.loadAndApplyUserTheme();\n } else {\n // Store original API values for the selected theme\n this.originalApiThemeValues = _.cloneDeep(selected.theme.syth_properties);\n\n // Update all group values from the selected theme\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n item.value = selected.theme.syth_properties[item.varName] ||\n selected.theme.syth_properties[key] ||\n item.value;\n\n this.updateVar(item.varName, item.value);\n\n if (key.includes('font_size') || key.includes('line_height')) {\n item.value = parseFloat(item.value) as unknown as string;\n }\n }\n }\n // Store a deep copy of the current values for reset\n this.originalThemeGroupValues = cloneDeep(this.themeGroups);\n }\n }\n }\n\n onReset() {\n // Restore all values from the original API values\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n // Get the original API value\n const originalValue = this.originalApiThemeValues[item.varName] ||\n this.originalApiThemeValues[key] ||\n item.value;\n\n // Update the item value\n item.value = originalValue;\n\n // Apply the CSS variable\n this.updateVar(item.varName, item.value);\n\n if (key.includes('font_size') || key.includes('line_height')) {\n item.value = parseFloat(item.value) as unknown as string;\n }\n }\n }\n\n // Update the originalThemeGroupValues to reflect the reset state\n this.originalThemeGroupValues = cloneDeep(this.themeGroups);\n }\n\n onSave() {\n // Collect all current values\n const themeVars: Theme = {\n\n };\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n themeVars[item.varName?.replaceAll('-', '_')] = item.value;\n }\n }\n\n const systemThemePreferences: MSystemThemeUserPreferencesRequest = {\n syupth_overrides: {\n ...themeVars\n },\n syupth_system_theme_id_syth: this.selectedTheme, // LATER: need to upadate LATER\n syupth_user_id_user: this.appState.currentUser()?._id || '', // LATER: need to get user id from user\n syupth_entity_id_syen: this.appState.getActiveEntityId() || '', // LATER: need to get entity id from user\n syth_theme_id: \"\" // need to upadate LATER\n };\n\n // TODO: Send themeVars to backend or emit event by designConfigRoutesUrl?.systemThemeUserPreferences\n this.themeService.saveSystemThemeUserPreferences(systemThemePreferences).subscribe({\n next: (res: SystemThemeUserPreferencesControllerRespoonse) => {\n console.log('Theme saved:', res);\n // Modern Angular v20 pattern: Update Signal through service method\n // Note: The theme service should provide a method to update the selected theme\n // For now, we'll just log the change since the service doesn't expose a setter\n console.log('Theme selected:', this.selectedTheme);\n },\n error: (error) => {\n console.error('Error saving theme:', error);\n }\n });\n }\n\n hasUnsavedChanges(): boolean {\n // chec selected theme is different\n if (this.themeService.selectedTheme() !== this.selectedTheme) {\n return true;\n }\n // check the theme groups are different\n return !isEqual(this.themeGroups, this.originalThemeGroupValues);\n }\n\n /**\n * Check if current values differ from the original API values\n * This is useful for determining if reset should be enabled\n */\n hasChangesFromOriginal(): boolean {\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n const originalValue = this.originalApiThemeValues[item.varName] ||\n this.originalApiThemeValues[key];\n\n if (originalValue !== undefined && item.value !== originalValue) {\n return true;\n }\n }\n }\n return false;\n }\n\n onColorChange(event: Event, color: ThemeColor) {\n const input = event.target as HTMLInputElement;\n color.value = input.value;\n this.updateVar(color.varName, color.value);\n }\n\n onTypographyChange(event: Event, setting: TypographySetting) {\n const input = event.target as HTMLInputElement;\n setting.value = input.value;\n this.updateVar(setting.varName, setting.type === 'number' ? setting.value : setting.value);\n }\n\n onLayoutChange(event: Event, setting: TypographySetting) {\n const input = event.target as HTMLInputElement;\n setting.value = input.value;\n // For layout dimensions, append 'px' unit to the value\n this.updateVar(setting.varName, setting.value + 'px');\n }\n\n onDirectionToggle(event: Event) {\n this.isRTL = (event.target as HTMLInputElement).checked;\n document.documentElement.dir = this.isRTL ? 'rtl' : 'ltr';\n }\n}\n","<div class=\"tw-relative tw-h-full tw-bg-white tw-overflow-hidden tw-flex tw-flex-col\">\n <!-- STICKY HEADER SECTION -->\n <div class=\"tw-bg-white tw-sticky tw-top-0 tw-border-b tw-border-gray-200 tw-z-10 tw-flex-shrink-0\">\n <!-- DYNAMIC HEADING -->\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-2 tw-bg-white tw-border-b tw-border-gray-200\">\n <h6 class=\"tw-font-semibold tw-text-gray-800\">Preset Theme</h6>\n </div>\n </div>\n\n <!-- SCROLLABLE CONTENT AREA -->\n <div class=\"tw-flex-1 tw-overflow-y-auto tw-scroll-smooth tw-p-2 tw-flex tw-flex-col tw-gap-5 tw-text-sm tw-pb-3 theme-scroll-container\">\n <!-- Preset Theme -->\n <section>\n <cide-ele-select id=\"theme-selector\" [(ngModel)]=\"selectedTheme\" (change)=\"onThemeChange($event)\"\n [options]=\"presetThemes\" [size]=\"'sm'\"></cide-ele-select>\n </section>\n\n <!-- Direction Toggle -->\n <section>\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-2\">\n <h2 class=\"tw-text-md tw-font-semibold tw-text-gray-800\">Text Direction</h2>\n <div class=\"tw-flex tw-items-center tw-gap-1\">\n <span class=\"tw-text-xs tw-text-gray-500\">LTR</span>\n <label for=\"direction-toggle\" class=\"tw-relative tw-inline-block tw-w-9 tw-h-5\">\n <input type=\"checkbox\" id=\"direction-toggle\" class=\"tw-opacity-0 tw-w-0 tw-h-0\" [(ngModel)]=\"isRTL\"\n (change)=\"onDirectionToggle($event)\">\n <span\n class=\"tw-absolute tw-cursor-pointer tw-top-0 tw-left-0 tw-right-0 tw-bottom-0 tw-bg-gray-300 tw-rounded-full tw-transition-colors checked:tw-bg-blue-500 before:tw-absolute before:tw-content-[''] before:tw-h-4 before:tw-w-4 before:tw-left-0.5 before:tw-bottom-0.5 before:tw-bg-white before:tw-rounded-full before:tw-transition-transform checked:before:tw-translate-x-4\"></span>\n </label>\n <span class=\"tw-text-xs tw-text-gray-500\">RTL</span>\n </div>\n </div>\n </section>\n\n <!-- Theme Property Groups (Brand, Text, Background, Font Sizes, Line Heights) -->\n <section *ngFor=\"let group of themeGroups\" class=\"theme-section\">\n <h2 class=\"tw-text-md tw-font-semibold tw-mb-2 tw-text-gray-800\">{{ group.label }}</h2>\n <div class=\"tw-grid tw-grid-cols-2 tw-gap-2 tw-gap-x-4\">\n <div *ngFor=\"let item of group.items\"\n class=\"tw-flex tw-items-center tw-gap-2 tw-p-1 tw-rounded-lg tw-bg-gray-50\"\n [ngClass]=\"{'tw-flex-col tw-items-stretch': (group.label === 'Font Sizes' || group.label === 'Line Heights' || group.label === 'Layout Dimensions')}\">\n <!-- Font Sizes: label on top, input in middle, unit at bottom -->\n <ng-container *ngIf=\"group.label === 'Font Sizes'\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700 tw-text-left\">{{ item.label\n }}</label>\n <div class=\"tw-flex tw-items-start\">\n <input [id]=\"item.varName\" type=\"number\" step=\"0.001\" [min]=\"item.min ?? null\" [max]=\"item.max ?? null\"\n [(ngModel)]=\"item.value\" (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-18 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\">rem</span>\n </div>\n </ng-container>\n <!-- Line Heights: label on top, input and unit on same line -->\n <ng-container *ngIf=\"group.label === 'Line Heights'\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700 tw-text-left\">{{ item.label\n }}</label>\n <div class=\"tw-flex tw-items-start\">\n <input [id]=\"item.varName\" type=\"number\" step=\"0.1\" [min]=\"item.min ?? null\" [max]=\"item.max ?? null\"\n [(ngModel)]=\"item.value\" (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-18 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\">unitless</span>\n </div>\n </ng-container>\n <!-- Layout Dimensions: label on top, input in middle, px unit at bottom -->\n <ng-container *ngIf=\"group.label === 'Layout Dimensions'\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700 tw-text-left\">{{ item.label\n }}</label>\n <div class=\"tw-flex tw-items-start\">\n <input [id]=\"item.varName\" type=\"number\" step=\"1\" [min]=\"item.min ?? null\" [max]=\"item.max ?? null\"\n [(ngModel)]=\"item.value\" (input)=\"onLayoutChange($event, item)\"\n class=\"tw-w-18 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\">px</span>\n </div>\n </ng-container>\n <!-- Other groups: keep previous layout -->\n <ng-container *ngIf=\"group.label !== 'Font Sizes' && group.label !== 'Line Heights' && group.label !== 'Layout Dimensions'\">\n <!-- Color input for color variables -->\n <ng-container *ngIf=\"item.varName.includes('color')\">\n <input [id]=\"item.varName\" [attr.data-variable]=\"item.varName\" type=\"color\" [(ngModel)]=\"item.value\"\n (input)=\"onColorChange($event, item)\"\n class=\"tw-appearance-none tw-border-2 tw-border-gray-200 tw-rounded tw-w-8 tw-h-8 tw-p-0 tw-bg-none tw-shadow-none tw-cursor-pointer tw-transition-colors focus:tw-border-blue-500 color-input\">\n </ng-container>\n <!-- Number input for line heights -->\n <ng-container\n *ngIf=\"!item.varName.includes('color') && item.type === 'number' && group.label !== 'Font Sizes'\">\n <input [id]=\"item.varName\" type=\"number\" [step]=\"item.varName.includes('line-height') ? 0.1 : 0.001\"\n [min]=\"item.min ?? null\" [max]=\"item.max ?? null\" [(ngModel)]=\"item.value\"\n (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-16 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\" *ngIf=\"!item.varName.includes('line-height')\">rem</span>\n </ng-container>\n <!-- Text input fallback (if needed) -->\n <ng-container *ngIf=\"!item.varName.includes('color') && item.type !== 'number'\">\n <input [id]=\"item.varName\" type=\"text\" [(ngModel)]=\"item.value\" (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-24 tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n </ng-container>\n <div class=\"tw-flex tw-flex-col tw-gap-0.5\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">{{ item.label }}</label>\n <span class=\"tw-text-xs tw-text-gray-500 tw-font-mono\">{{ item.value }}</span>\n </div>\n </ng-container>\n </div>\n </div>\n </section>\n </div>\n\n <!-- STICKY ACTION BUTTONS SECTION -->\n <div class=\"tw-bg-white tw-sticky tw-bottom-0 tw-border-t tw-border-gray-200 tw-z-10 tw-flex-shrink-0 tw-p-3 tw-shadow-lg sticky-action-buttons\">\n <div class=\"tw-flex tw-gap-2 tw-justify-end\">\n <button cideEleButton \n variant=\"outline\" \n size=\"sm\" \n (btnClick)=\"onReset()\" \n [disabled]=\"!hasChangesFromOriginal()\"\n class=\"tw-transition-all tw-duration-200 hover:tw-scale-105 action-button\">\n Reset to Original\n </button>\n <button cideEleButton \n variant=\"primary\" \n size=\"sm\" \n (btnClick)=\"onSave()\" \n [disabled]=\"!hasUnsavedChanges()\"\n class=\"tw-transition-all tw-duration-200 hover:tw-scale-105 action-button\">\n Save Changes\n </button>\n </div>\n </div>\n</div>"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-ide-layout-drawer-theme.component-DNNgFvg2.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.html"],"sourcesContent":["import { NgFor, NgIf } from '@angular/common';\nimport { NgClass } from '@angular/common';\nimport { Component, OnInit, PLATFORM_ID, Inject, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CideSelectComponent, SelectOption, CideEleButtonComponent } from 'cloud-ide-element';\nimport { CideLytThemeService, Theme, setCSSVariable } from '../../../services/theme/theme.service';\nimport type { MSystemThemeUserPreferencesRequest, SystemThemesListControllerRespoonse, SystemThemeUserPreferencesControllerRespoonse } from 'cloud-ide-lms-model';\nimport type { SystemThemeControllerRespoonse } from 'cloud-ide-lms-model';\nimport type { ICoreSyth, ICoreSyoth, ICoreSyupth } from 'cloud-ide-lms-model';\nimport { isEqual, cloneDeep } from 'lodash';\nimport _ from 'lodash';\nimport { AppStateHelperService } from '../../../services/app-state';\n\ninterface ThemeColor {\n label: string;\n varName: string;\n value: string;\n}\n\ninterface TypographySetting {\n label: string;\n varName: string;\n value: string;\n type: 'number' | 'text';\n min?: number;\n max?: number;\n}\n\ntype ThemeGroup = {\n label: string;\n items: Array<{\n label: string;\n varName: string;\n value: string;\n type: 'number' | 'text';\n min?: number;\n max?: number;\n }>;\n};\n\n@Component({\n selector: 'cide-lyt-drawer-theme',\n standalone: true,\n imports: [FormsModule, NgFor, NgIf, NgClass, CideSelectComponent, CideEleButtonComponent],\n templateUrl: './drawer-theme.component.html',\n styleUrl: './drawer-theme.component.scss'\n})\nexport class CideLytDrawerThemeComponent implements OnInit {\n private readonly appState = inject(AppStateHelperService);\n // Preset themes\n presetThemes: { value: string, label: string, theme: ICoreSyth }[] = [];\n selectedTheme = '';\n isLoadingThemes = false;\n themeLoadError = '';\n mergedTheme: { [key: string]: string } = {};\n isRTL = false;\n originalThemeGroupValues: ThemeGroup[] = [];\n originalApiThemeValues: { [key: string]: string } = {}; // Store original API values\n\n themeGroups: ThemeGroup[] = [\n {\n label: 'Brand Colors',\n items: [\n { label: 'Primary', varName: '--cide-theme-color-brand-primary', value: '#4f46e5', type: 'text' },\n { label: 'Accent', varName: '--cide-theme-color-brand-accent', value: '#4338ca', type: 'text' },\n { label: 'Separator', varName: '--cide-theme-color-brand-separator', value: '#e5e7eb', type: 'text' }\n ]\n },\n {\n label: 'Text Colors',\n items: [\n { label: 'Body Text', varName: '--cide-theme-color-text-body', value: '#374151', type: 'text' },\n { label: 'Heading Text', varName: '--cide-theme-color-text-heading', value: '#111827', type: 'text' },\n { label: 'Link Text', varName: '--cide-theme-color-text-link', value: '#3b82f6', type: 'text' },\n { label: 'Muted Text', varName: '--cide-theme-color-text-muted', value: '#6b7280', type: 'text' }\n ]\n },\n {\n label: 'Background Colors',\n items: [\n { label: 'Body Background', varName: '--cide-theme-color-background-body', value: '#ffffff', type: 'text' }\n ]\n },\n {\n label: 'Layout Dimensions',\n items: [\n { label: 'Stack Wrapper Width', varName: '--cide-lyt-stack-wrapper-width', value: '60', type: 'number', min: 20, max: 120 }\n ]\n },\n {\n label: 'Font Sizes',\n items: [\n { label: 'XXXL Font Size', varName: '--cide-theme-font-size-xxxl', value: '3.052', type: 'number', min: 1, max: 10 },\n { label: 'XXL Font Size', varName: '--cide-theme-font-size-xxl', value: '2.441', type: 'number', min: 1, max: 10 },\n { label: 'XL Font Size', varName: '--cide-theme-font-size-xl', value: '1.953', type: 'number', min: 1, max: 10 },\n { label: 'LG Font Size', varName: '--cide-theme-font-size-lg', value: '1.563', type: 'number', min: 1, max: 10 },\n { label: 'MD Font Size', varName: '--cide-theme-font-size-md', value: '1.25', type: 'number', min: 1, max: 10 },\n { label: 'Paragraph Font Size', varName: '--cide-theme-font-size-p', value: '1', type: 'number', min: 0.5, max: 5 },\n { label: 'SM Font Size', varName: '--cide-theme-font-size-sm', value: '0.9', type: 'number', min: 0.5, max: 5 },\n { label: 'XS Font Size', varName: '--cide-theme-font-size-xs', value: '0.8', type: 'number', min: 0.5, max: 5 }\n ]\n },\n {\n label: 'Line Heights',\n items: [\n { label: 'Body Line Height', varName: '--cide-theme-line-height-body', value: '1.6', type: 'number', min: 1, max: 3 },\n { label: 'Heading Line Height', varName: '--cide-theme-line-height-heading', value: '1.2', type: 'number', min: 1, max: 3 }\n ]\n }\n ];\n\n constructor(\n private themeService: CideLytThemeService,\n @Inject(PLATFORM_ID) private platformId: object\n ) { }\n\n ngOnInit(): void {\n // Modern Angular v20 pattern: Use Signals directly\n this.selectedTheme = this.themeService.selectedTheme();\n\n // fetch the system themes list\n this.isLoadingThemes = true;\n this.themeService.fetchSystemThemesList().subscribe({\n next: (res: SystemThemesListControllerRespoonse) => {\n const themes: ICoreSyth[] = res?.data?.core_system_themes || [];\n this.presetThemes = themes.map((theme: ICoreSyth) => ({\n value: theme._id || '',\n label: theme.syth_theme_name || theme.syth_theme_id || '',\n theme\n }));\n this.isLoadingThemes = false;\n // If user has no theme set, select and apply the default theme\n if (!this.selectedTheme) {\n const defaultTheme = this.presetThemes.find(t => t.theme.syth_is_default);\n if (defaultTheme) {\n this.selectedTheme = defaultTheme.value;\n // Apply the default theme as CSS variables\n if (defaultTheme.theme.syth_properties) {\n Object.entries(defaultTheme.theme.syth_properties).forEach(([varName, value]) => {\n this.updateVar(varName, value as string);\n });\n }\n }\n }\n },\n error: () => {\n this.themeLoadError = 'Failed to load themes';\n this.isLoadingThemes = false;\n }\n });\n this.loadAndApplyUserTheme();\n }\n\n loadAndApplyUserTheme(): void {\n this.themeService.loadTheme().subscribe({\n next: (res: SystemThemeControllerRespoonse) => {\n const base: ICoreSyth | undefined = res?.data?.core_system_themes;\n const org: ICoreSyoth | undefined = res?.data?.core_system_organization_themes;\n const user: ICoreSyupth | undefined = res?.data?.core_system_theme_user_preferences;\n // Start with base theme properties\n let merged = { ...(base?.syth_properties || {}) };\n // Override with org overrides\n if (org?.syoth_overrides) {\n merged = { ...merged, ...org.syoth_overrides };\n }\n // Override with user overrides\n if (user?.syupth_overrides) {\n merged = { ...merged, ...user.syupth_overrides };\n }\n this.mergedTheme = merged;\n\n // Store original API values for reset functionality\n this.originalApiThemeValues = { ...merged };\n\n // Apply merged theme as CSS variables\n Object.entries(this.mergedTheme).forEach(([varName, value]) => {\n this.updateVar(varName, value as string);\n });\n\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n item.value = merged[item.varName] || merged[key] || item.value;\n\n if (key.includes('font_size') || key.includes('line_height')) {\n item.value = parseFloat(item.value) as unknown as string;\n }\n }\n }\n // Store a deep copy of the current values for reset\n this.originalThemeGroupValues = cloneDeep(this.themeGroups);\n },\n error: () => {\n // handle error if needed\n }\n });\n }\n\n // Update CSS variable in real time\n updateVar(varName: string, value: string) {\n // You can use either the utility function directly or the service method\n setCSSVariable(varName, value, this.platformId);\n // Alternative: this.themeService.updateCSSVariable(varName, value);\n }\n\n onThemeChange(event: SelectOption) {\n this.selectedTheme = event.value as string;\n const selected = this.presetThemes.find(t => t.value === this.selectedTheme);\n if (selected && selected.theme && selected.theme.syth_properties) {\n // here we will check the theme selected by organization is same if yes then overide also for user preferences\n if (this.themeService.selectedTheme() === selected.theme._id) {\n this.loadAndApplyUserTheme();\n } else {\n // Store original API values for the selected theme\n this.originalApiThemeValues = _.cloneDeep(selected.theme.syth_properties);\n\n // Update all group values from the selected theme\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n item.value = selected.theme.syth_properties[item.varName] ||\n selected.theme.syth_properties[key] ||\n item.value;\n\n this.updateVar(item.varName, item.value);\n\n if (key.includes('font_size') || key.includes('line_height')) {\n item.value = parseFloat(item.value) as unknown as string;\n }\n }\n }\n // Store a deep copy of the current values for reset\n this.originalThemeGroupValues = cloneDeep(this.themeGroups);\n }\n }\n }\n\n onReset() {\n // Restore all values from the original API values\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n // Get the original API value\n const originalValue = this.originalApiThemeValues[item.varName] ||\n this.originalApiThemeValues[key] ||\n item.value;\n\n // Update the item value\n item.value = originalValue;\n\n // Apply the CSS variable\n this.updateVar(item.varName, item.value);\n\n if (key.includes('font_size') || key.includes('line_height')) {\n item.value = parseFloat(item.value) as unknown as string;\n }\n }\n }\n\n // Update the originalThemeGroupValues to reflect the reset state\n this.originalThemeGroupValues = cloneDeep(this.themeGroups);\n }\n\n onSave() {\n // Collect all current values\n const themeVars: Theme = {\n\n };\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n themeVars[item.varName?.replaceAll('-', '_')] = item.value;\n }\n }\n\n const systemThemePreferences: MSystemThemeUserPreferencesRequest = {\n syupth_overrides: {\n ...themeVars\n },\n syupth_system_theme_id_syth: this.selectedTheme, // LATER: need to upadate LATER\n syupth_user_id_user: this.appState.currentUser()?._id || '', // LATER: need to get user id from user\n syupth_entity_id_syen: this.appState.getActiveEntityId() || '', // LATER: need to get entity id from user\n syth_theme_id: \"\" // need to upadate LATER\n };\n\n // TODO: Send themeVars to backend or emit event by designConfigRoutesUrl?.systemThemeUserPreferences\n this.themeService.saveSystemThemeUserPreferences(systemThemePreferences).subscribe({\n next: (res: SystemThemeUserPreferencesControllerRespoonse) => {\n console.log('Theme saved:', res);\n // Modern Angular v20 pattern: Update Signal through service method\n // Note: The theme service should provide a method to update the selected theme\n // For now, we'll just log the change since the service doesn't expose a setter\n console.log('Theme selected:', this.selectedTheme);\n },\n error: (error) => {\n console.error('Error saving theme:', error);\n }\n });\n }\n\n hasUnsavedChanges(): boolean {\n // chec selected theme is different\n if (this.themeService.selectedTheme() !== this.selectedTheme) {\n return true;\n }\n // check the theme groups are different\n return !isEqual(this.themeGroups, this.originalThemeGroupValues);\n }\n\n /**\n * Check if current values differ from the original API values\n * This is useful for determining if reset should be enabled\n */\n hasChangesFromOriginal(): boolean {\n for (const group of this.themeGroups) {\n for (const item of group.items) {\n const key = item.varName.replace(/-/g, '_');\n const originalValue = this.originalApiThemeValues[item.varName] ||\n this.originalApiThemeValues[key];\n\n if (originalValue !== undefined && item.value !== originalValue) {\n return true;\n }\n }\n }\n return false;\n }\n\n onColorChange(event: Event, color: ThemeColor) {\n const input = event.target as HTMLInputElement;\n color.value = input.value;\n this.updateVar(color.varName, color.value);\n }\n\n onTypographyChange(event: Event, setting: TypographySetting) {\n const input = event.target as HTMLInputElement;\n setting.value = input.value;\n this.updateVar(setting.varName, setting.type === 'number' ? setting.value : setting.value);\n }\n\n onLayoutChange(event: Event, setting: TypographySetting) {\n const input = event.target as HTMLInputElement;\n setting.value = input.value;\n // For layout dimensions, append 'px' unit to the value\n this.updateVar(setting.varName, setting.value + 'px');\n }\n\n onDirectionToggle(event: Event) {\n this.isRTL = (event.target as HTMLInputElement).checked;\n document.documentElement.dir = this.isRTL ? 'rtl' : 'ltr';\n }\n}\n","<div class=\"tw-relative tw-h-full tw-bg-white tw-overflow-hidden tw-flex tw-flex-col\">\n <!-- STICKY HEADER SECTION -->\n <div class=\"tw-bg-white tw-sticky tw-top-0 tw-border-b tw-border-gray-200 tw-z-10 tw-flex-shrink-0\">\n <!-- DYNAMIC HEADING -->\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-2 tw-bg-white tw-border-b tw-border-gray-200\">\n <h6 class=\"tw-font-semibold tw-text-gray-800\">Preset Theme</h6>\n </div>\n </div>\n\n <!-- SCROLLABLE CONTENT AREA -->\n <div class=\"tw-flex-1 tw-overflow-y-auto tw-scroll-smooth tw-p-2 tw-flex tw-flex-col tw-gap-5 tw-text-sm tw-pb-3 theme-scroll-container\">\n <!-- Preset Theme -->\n <section>\n <cide-ele-select id=\"theme-selector\" [(ngModel)]=\"selectedTheme\" (change)=\"onThemeChange($event)\"\n [options]=\"presetThemes\" [size]=\"'sm'\"></cide-ele-select>\n </section>\n\n <!-- Direction Toggle -->\n <section>\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-2\">\n <h2 class=\"tw-text-md tw-font-semibold tw-text-gray-800\">Text Direction</h2>\n <div class=\"tw-flex tw-items-center tw-gap-1\">\n <span class=\"tw-text-xs tw-text-gray-500\">LTR</span>\n <label for=\"direction-toggle\" class=\"tw-relative tw-inline-block tw-w-9 tw-h-5\">\n <input type=\"checkbox\" id=\"direction-toggle\" class=\"tw-opacity-0 tw-w-0 tw-h-0\" [(ngModel)]=\"isRTL\"\n (change)=\"onDirectionToggle($event)\">\n <span\n class=\"tw-absolute tw-cursor-pointer tw-top-0 tw-left-0 tw-right-0 tw-bottom-0 tw-bg-gray-300 tw-rounded-full tw-transition-colors checked:tw-bg-blue-500 before:tw-absolute before:tw-content-[''] before:tw-h-4 before:tw-w-4 before:tw-left-0.5 before:tw-bottom-0.5 before:tw-bg-white before:tw-rounded-full before:tw-transition-transform checked:before:tw-translate-x-4\"></span>\n </label>\n <span class=\"tw-text-xs tw-text-gray-500\">RTL</span>\n </div>\n </div>\n </section>\n\n <!-- Theme Property Groups (Brand, Text, Background, Font Sizes, Line Heights) -->\n <section *ngFor=\"let group of themeGroups\" class=\"theme-section\">\n <h2 class=\"tw-text-md tw-font-semibold tw-mb-2 tw-text-gray-800\">{{ group.label }}</h2>\n <div class=\"tw-grid tw-grid-cols-2 tw-gap-2 tw-gap-x-4\">\n <div *ngFor=\"let item of group.items\"\n class=\"tw-flex tw-items-center tw-gap-2 tw-p-1 tw-rounded-lg tw-bg-gray-50\"\n [ngClass]=\"{'tw-flex-col tw-items-stretch': (group.label === 'Font Sizes' || group.label === 'Line Heights' || group.label === 'Layout Dimensions')}\">\n <!-- Font Sizes: label on top, input in middle, unit at bottom -->\n <ng-container *ngIf=\"group.label === 'Font Sizes'\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700 tw-text-left\">{{ item.label\n }}</label>\n <div class=\"tw-flex tw-items-start\">\n <input [id]=\"item.varName\" type=\"number\" step=\"0.001\" [min]=\"item.min ?? null\" [max]=\"item.max ?? null\"\n [(ngModel)]=\"item.value\" (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-18 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\">rem</span>\n </div>\n </ng-container>\n <!-- Line Heights: label on top, input and unit on same line -->\n <ng-container *ngIf=\"group.label === 'Line Heights'\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700 tw-text-left\">{{ item.label\n }}</label>\n <div class=\"tw-flex tw-items-start\">\n <input [id]=\"item.varName\" type=\"number\" step=\"0.1\" [min]=\"item.min ?? null\" [max]=\"item.max ?? null\"\n [(ngModel)]=\"item.value\" (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-18 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\">unitless</span>\n </div>\n </ng-container>\n <!-- Layout Dimensions: label on top, input in middle, px unit at bottom -->\n <ng-container *ngIf=\"group.label === 'Layout Dimensions'\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700 tw-text-left\">{{ item.label\n }}</label>\n <div class=\"tw-flex tw-items-start\">\n <input [id]=\"item.varName\" type=\"number\" step=\"1\" [min]=\"item.min ?? null\" [max]=\"item.max ?? null\"\n [(ngModel)]=\"item.value\" (input)=\"onLayoutChange($event, item)\"\n class=\"tw-w-18 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\">px</span>\n </div>\n </ng-container>\n <!-- Other groups: keep previous layout -->\n <ng-container *ngIf=\"group.label !== 'Font Sizes' && group.label !== 'Line Heights' && group.label !== 'Layout Dimensions'\">\n <!-- Color input for color variables -->\n <ng-container *ngIf=\"item.varName.includes('color')\">\n <input [id]=\"item.varName\" [attr.data-variable]=\"item.varName\" type=\"color\" [(ngModel)]=\"item.value\"\n (input)=\"onColorChange($event, item)\"\n class=\"tw-appearance-none tw-border-2 tw-border-gray-200 tw-rounded tw-w-8 tw-h-8 tw-p-0 tw-bg-none tw-shadow-none tw-cursor-pointer tw-transition-colors focus:tw-border-blue-500 color-input\">\n </ng-container>\n <!-- Number input for line heights -->\n <ng-container\n *ngIf=\"!item.varName.includes('color') && item.type === 'number' && group.label !== 'Font Sizes'\">\n <input [id]=\"item.varName\" type=\"number\" [step]=\"item.varName.includes('line-height') ? 0.1 : 0.001\"\n [min]=\"item.min ?? null\" [max]=\"item.max ?? null\" [(ngModel)]=\"item.value\"\n (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-16 tw-text-right tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n <span class=\"tw-text-xs tw-text-gray-400\" *ngIf=\"!item.varName.includes('line-height')\">rem</span>\n </ng-container>\n <!-- Text input fallback (if needed) -->\n <ng-container *ngIf=\"!item.varName.includes('color') && item.type !== 'number'\">\n <input [id]=\"item.varName\" type=\"text\" [(ngModel)]=\"item.value\" (input)=\"onTypographyChange($event, item)\"\n class=\"tw-w-24 tw-text-sm tw-border tw-border-gray-300 tw-rounded tw-px-2 tw-py-1 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-border-transparent theme-input\">\n </ng-container>\n <div class=\"tw-flex tw-flex-col tw-gap-0.5\">\n <label [for]=\"item.varName\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">{{ item.label }}</label>\n <span class=\"tw-text-xs tw-text-gray-500 tw-font-mono\">{{ item.value }}</span>\n </div>\n </ng-container>\n </div>\n </div>\n </section>\n </div>\n\n <!-- STICKY ACTION BUTTONS SECTION -->\n <div class=\"tw-bg-white tw-sticky tw-bottom-0 tw-border-t tw-border-gray-200 tw-z-10 tw-flex-shrink-0 tw-p-3 tw-shadow-lg sticky-action-buttons\">\n <div class=\"tw-flex tw-gap-2 tw-justify-end\">\n <button cideEleButton \n variant=\"outline\" \n size=\"sm\" \n (btnClick)=\"onReset()\" \n [disabled]=\"!hasChangesFromOriginal()\"\n class=\"tw-transition-all tw-duration-200 hover:tw-scale-105 action-button\">\n Reset to Original\n </button>\n <button cideEleButton \n variant=\"primary\" \n size=\"sm\" \n (btnClick)=\"onSave()\" \n [disabled]=\"!hasUnsavedChanges()\"\n class=\"tw-transition-all tw-duration-200 hover:tw-scale-105 action-button\">\n Save Changes\n </button>\n </div>\n </div>\n</div>"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { inject, signal, computed, ChangeDetectionStrategy, Component } from '@a
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { CideEleFloatingContainerService, CideEleButtonComponent, CideIconComponent, CideSpinnerComponent, CideEleFileImageDirective } from 'cloud-ide-element';
5
5
  import { CideCoreEntityManagementService } from 'cloud-ide-core';
6
- import { e as AppStateService } from './cloud-ide-layout-cloud-ide-layout-BaoaTej4.mjs';
6
+ import { b as AppStateService } from './cloud-ide-layout-cloud-ide-layout-CAo1_7zl.mjs';
7
7
  import { firstValueFrom } from 'rxjs';
8
8
 
9
9
  class CideLytFloatingEntitySelectionComponent {
@@ -514,4 +514,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
514
514
  }] });
515
515
 
516
516
  export { CideLytFloatingEntitySelectionComponent };
517
- //# sourceMappingURL=cloud-ide-layout-floating-entity-selection.component-S1tVyhH_.mjs.map
517
+ //# sourceMappingURL=cloud-ide-layout-floating-entity-selection.component-B7fxTYAX.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-ide-layout-floating-entity-selection.component-S1tVyhH_.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/components/floating-entity-selection/floating-entity-selection.component.ts"],"sourcesContent":["import { Component, OnInit, inject, signal, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CideEleButtonComponent } from 'cloud-ide-element';\nimport { CideIconComponent } from 'cloud-ide-element';\nimport { CideSpinnerComponent } from 'cloud-ide-element';\nimport { CideEleFileImageDirective } from 'cloud-ide-element';\nimport { CideCoreEntityManagementService } from 'cloud-ide-core';\nimport { AppStateService } from '../../services/app-state/app-state.service';\nimport { CideEleFloatingContainerService } from 'cloud-ide-element';\nimport { firstValueFrom } from 'rxjs';\n\n// Interface for hierarchical entity structure\ninterface EntityHierarchy {\n _id?: string;\n syen_name?: string;\n syen_entity_code?: string;\n syen_isactive?: boolean;\n syen_photo_id_cyfm?: string;\n syen_id_syen?: string;\n children: EntityHierarchy[];\n level: number;\n isExpanded?: boolean;\n entity_type_details?: {\n _id: string;\n sygms_title: string;\n sygms_code: string;\n };\n}\n\n@Component({\n selector: 'cide-lyt-floating-entity-selection',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n CideEleButtonComponent,\n CideIconComponent,\n CideSpinnerComponent,\n CideEleFileImageDirective\n ],\n template: `\n <!-- Entity Selection Content -->\n <div class=\"tw-flex tw-flex-col tw-h-full\">\n <!-- Main Content Area -->\n <div class=\"tw-flex-1 tw-p-4 tw-overflow-y-auto tw-scrollbar-thin tw-scrollbar-thumb-gray-300 tw-scrollbar-track-transparent tw-select-none tw-bg-gray-100\">\n @if (loading()) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-6\">\n <cide-ele-spinner size=\"sm\"></cide-ele-spinner>\n <span class=\"tw-ml-3 tw-text-gray-600 tw-text-sm\">Loading entities...</span>\n </div>\n } @else if (entityHierarchy().length === 0) {\n <div class=\"tw-text-center tw-py-6\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-gray-100 tw-rounded-xl tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-2\">\n <cide-ele-icon class=\"tw-w-5 tw-h-5 tw-text-gray-400\">business</cide-ele-icon>\n </div>\n <p class=\"tw-text-gray-500 tw-text-sm\">No entities available</p>\n </div>\n } @else {\n <div class=\"tw-space-y-3\">\n @for (entity of entityHierarchy(); track entity._id) {\n <ng-container>\n <!-- Root Entity Card -->\n <div class=\"tw-relative\">\n <!-- Root Entity Card -->\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-blue-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48 tw-mx-auto\"\n [class.tw-border-blue-500]=\"isCurrentEntity(entity._id || '')\"\n [class.tw-bg-blue-50]=\"isCurrentEntity(entity._id || '')\"\n (click)=\"selectEntity(entity)\">\n <div class=\"tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2\">\n <!-- Entity Image -->\n <div class=\"tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200\">\n @if (entity.syen_photo_id_cyfm) {\n <img cideEleFileImage \n [fileId]=\"entity.syen_photo_id_cyfm\"\n [altText]=\"'Entity Logo'\"\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n } @else {\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n }\n </div>\n \n <!-- Entity Info -->\n <div class=\"tw-w-full\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <h4 class=\"tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900\">{{ entity.syen_name }}</h4>\n @if (isCurrentEntity(entity._id || '')) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <cide-ele-icon class=\"tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-ml-0.5\">Current</span>\n </div>\n }\n </div>\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <cide-ele-icon class=\"tw-text-gray-500 tw-w-5 tw-h-4\">code</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-gray-600\">{{ entity.syen_entity_code }}</span>\n </div>\n \n @if (entity.entity_type_details) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-blue-500 tw-rounded-full\"></div>\n <span class=\"tw-text-xs tw-text-blue-600 tw-font-medium\">{{ entity.entity_type_details.sygms_title }}</span>\n </div>\n }\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2\">\n @if (entity.syen_isactive) {\n <cide-ele-icon class=\"tw-text-green-500 tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-medium\">Active</span>\n } @else {\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-4\">block</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-red-500 tw-font-medium\">Inactive</span>\n }\n </div>\n \n @if (entity.children && entity.children.length > 0) {\n <button class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200\"\n (click)=\"toggleExpansion(entity._id || ''); $event.stopPropagation()\">\n <span>{{ entity.children.length }} entities</span>\n <cide-ele-icon class=\"tw-w-5 tw-h-4 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-180]=\"isExpanded(entity._id || '')\">expand_more</cide-ele-icon>\n </button>\n }\n </div>\n </div>\n </div>\n \n <!-- Curved Connection Lines -->\n @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {\n <div class=\"tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500\"></div>\n <div class=\"tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-20 tw-h-px tw-bg-blue-500 tw-mt-4\"></div>\n }\n </div>\n \n <!-- Children Row -->\n @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {\n <div class=\"tw-flex tw-justify-center tw-space-x-4 tw-mt-4\">\n @for (child of entity.children; track child._id) {\n <div class=\"tw-relative\">\n <!-- Vertical Line from Parent -->\n <div class=\"tw-absolute tw-top-0 tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500 tw--mt-4\"></div>\n \n <!-- Child Entity Card -->\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-orange-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48\"\n [class.tw-border-orange-500]=\"isCurrentEntity(child._id || '')\"\n [class.tw-bg-orange-50]=\"isCurrentEntity(child._id || '')\"\n (click)=\"selectEntity(child)\">\n <div class=\"tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2\">\n <!-- Child Entity Image -->\n <div class=\"tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200\">\n @if (child.syen_photo_id_cyfm) {\n <img cideEleFileImage \n [fileId]=\"child.syen_photo_id_cyfm\"\n [altText]=\"'Entity Logo'\"\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n } @else {\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n }\n </div>\n \n <!-- Child Entity Info -->\n <div class=\"tw-w-full\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <h4 class=\"tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900\">{{ child.syen_name }}</h4>\n @if (isCurrentEntity(child._id || '')) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <cide-ele-icon class=\"tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-ml-0.5\">Current</span>\n </div>\n }\n </div>\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <cide-ele-icon class=\"tw-text-gray-500 tw-w-5 tw-h-4\">code</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-gray-600\">{{ child.syen_entity_code }}</span>\n </div>\n \n @if (child.entity_type_details) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-orange-500 tw-rounded-full\"></div>\n <span class=\"tw-text-xs tw-text-orange-600 tw-font-medium\">{{ child.entity_type_details.sygms_title }}</span>\n </div>\n }\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2\">\n @if (child.syen_isactive) {\n <cide-ele-icon class=\"tw-text-green-500 tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-medium\">Active</span>\n } @else {\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-4\">block</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-red-500 tw-font-medium\">Inactive</span>\n }\n </div>\n \n @if (child.children && child.children.length > 0) {\n <button class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200\"\n (click)=\"toggleExpansion(child._id || ''); $event.stopPropagation()\">\n <span>{{ child.children.length }} entities</span>\n <cide-ele-icon class=\"tw-w-5 tw-h-4 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-180]=\"isExpanded(child._id || '')\">expand_more</cide-ele-icon>\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </ng-container>\n }\n </div>\n }\n </div>\n \n <!-- Fixed Footer -->\n <div class=\"tw-bg-white tw-px-4 tw-py-3 tw-border-t tw-border-gray-300 tw-flex tw-justify-end tw-space-x-2 tw-flex-shrink-0\">\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"onCancel()\">\n Cancel\n </button>\n </div>\n </div>\n `,\n styles: [`\n .tw-dashed {\n border-style: dashed;\n }\n .tw-bg-gray-300 {\n background-color: #d1d5db;\n }\n `]\n})\nexport class CideLytFloatingEntitySelectionComponent implements OnInit {\n // Service injections\n private entityService = inject(CideCoreEntityManagementService);\n private appStateService = inject(AppStateService);\n private floatingContainerService = inject(CideEleFloatingContainerService);\n\n // Signals\n entities = signal<EntityHierarchy[]>([]);\n loading = signal<boolean>(true);\n \n // Computed hierarchy\n entityHierarchy = computed(() => this.buildHierarchy(this.entities()));\n \n // Expanded state for tree view\n expandedEntities = signal<Set<string>>(new Set());\n\n ngOnInit() {\n this.loadEntities();\n }\n\n /**\n * Build hierarchical structure from flat entity list\n */\n private buildHierarchy(entities: EntityHierarchy[]): EntityHierarchy[] {\n const entityMap = new Map<string, EntityHierarchy>();\n const rootEntities: EntityHierarchy[] = [];\n\n // First pass: create hierarchy objects\n entities.forEach(entity => {\n entityMap.set(entity._id || '', {\n ...entity,\n children: [],\n level: 0,\n isExpanded: false\n });\n });\n\n // Second pass: build parent-child relationships\n entities.forEach(entity => {\n const hierarchyEntity = entityMap.get(entity._id || '');\n if (!hierarchyEntity) return;\n\n if (entity.syen_id_syen && entityMap.has(entity.syen_id_syen)) {\n // This entity has a parent\n const parent = entityMap.get(entity.syen_id_syen);\n if (parent) {\n parent.children.push(hierarchyEntity);\n hierarchyEntity.level = parent.level + 1;\n }\n } else {\n // This is a root entity\n rootEntities.push(hierarchyEntity);\n }\n });\n\n return rootEntities;\n }\n\n /**\n * Load entities from API\n */\n private async loadEntities(): Promise<void> {\n try {\n this.loading.set(true);\n const response = await firstValueFrom(this.entityService.getEntityList({}));\n console.log('🔍 Entities response:', response);\n if (response?.data) {\n // Convert the response data to EntityHierarchy format\n const hierarchyEntities: EntityHierarchy[] = response.data.map(entity => ({\n _id: entity._id,\n syen_name: entity.syen_name,\n syen_entity_code: entity.syen_entity_code,\n syen_isactive: entity.syen_isactive,\n syen_photo_id_cyfm: entity.syen_photo_id_cyfm,\n syen_id_syen: entity.syen_id_syen,\n children: [],\n level: 0,\n isExpanded: false,\n entity_type_details: (entity as any).entity_type_details\n }));\n this.entities.set(hierarchyEntities);\n }\n } catch (error) {\n console.error('Error loading entities:', error);\n } finally {\n this.loading.set(false);\n }\n }\n\n /**\n * Check if entity is currently active\n */\n isCurrentEntity(entityId: string): boolean {\n const currentEntity = this.appStateService.activeEntity();\n return currentEntity?._id === entityId;\n }\n\n /**\n * Toggle entity expansion state\n */\n toggleExpansion(entityId: string): void {\n const expanded = this.expandedEntities();\n if (expanded.has(entityId)) {\n expanded.delete(entityId);\n } else {\n expanded.add(entityId);\n }\n this.expandedEntities.set(new Set(expanded));\n }\n\n /**\n * Check if entity is expanded\n */\n isExpanded(entityId: string): boolean {\n return this.expandedEntities().has(entityId);\n }\n\n /**\n * Select an entity\n */\n selectEntity(entity: EntityHierarchy): void {\n console.log('🏢 Selected entity:', entity);\n this.appStateService.setActiveEntity(entity);\n this.closeContainer();\n }\n\n /**\n * Cancel selection\n */\n onCancel(): void {\n console.log('❌ Entity selection cancelled');\n this.closeContainer();\n }\n\n /**\n * Close floating container\n */\n private closeContainer(): void {\n this.floatingContainerService.hideAll();\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-ide-layout-floating-entity-selection.component-B7fxTYAX.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/components/floating-entity-selection/floating-entity-selection.component.ts"],"sourcesContent":["import { Component, OnInit, inject, signal, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CideEleButtonComponent } from 'cloud-ide-element';\nimport { CideIconComponent } from 'cloud-ide-element';\nimport { CideSpinnerComponent } from 'cloud-ide-element';\nimport { CideEleFileImageDirective } from 'cloud-ide-element';\nimport { CideCoreEntityManagementService } from 'cloud-ide-core';\nimport { AppStateService } from '../../services/app-state/app-state.service';\nimport { CideEleFloatingContainerService } from 'cloud-ide-element';\nimport { firstValueFrom } from 'rxjs';\n\n// Interface for hierarchical entity structure\ninterface EntityHierarchy {\n _id?: string;\n syen_name?: string;\n syen_entity_code?: string;\n syen_isactive?: boolean;\n syen_photo_id_cyfm?: string;\n syen_id_syen?: string;\n children: EntityHierarchy[];\n level: number;\n isExpanded?: boolean;\n entity_type_details?: {\n _id: string;\n sygms_title: string;\n sygms_code: string;\n };\n}\n\n@Component({\n selector: 'cide-lyt-floating-entity-selection',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n CideEleButtonComponent,\n CideIconComponent,\n CideSpinnerComponent,\n CideEleFileImageDirective\n ],\n template: `\n <!-- Entity Selection Content -->\n <div class=\"tw-flex tw-flex-col tw-h-full\">\n <!-- Main Content Area -->\n <div class=\"tw-flex-1 tw-p-4 tw-overflow-y-auto tw-scrollbar-thin tw-scrollbar-thumb-gray-300 tw-scrollbar-track-transparent tw-select-none tw-bg-gray-100\">\n @if (loading()) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-6\">\n <cide-ele-spinner size=\"sm\"></cide-ele-spinner>\n <span class=\"tw-ml-3 tw-text-gray-600 tw-text-sm\">Loading entities...</span>\n </div>\n } @else if (entityHierarchy().length === 0) {\n <div class=\"tw-text-center tw-py-6\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-gray-100 tw-rounded-xl tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-2\">\n <cide-ele-icon class=\"tw-w-5 tw-h-5 tw-text-gray-400\">business</cide-ele-icon>\n </div>\n <p class=\"tw-text-gray-500 tw-text-sm\">No entities available</p>\n </div>\n } @else {\n <div class=\"tw-space-y-3\">\n @for (entity of entityHierarchy(); track entity._id) {\n <ng-container>\n <!-- Root Entity Card -->\n <div class=\"tw-relative\">\n <!-- Root Entity Card -->\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-blue-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48 tw-mx-auto\"\n [class.tw-border-blue-500]=\"isCurrentEntity(entity._id || '')\"\n [class.tw-bg-blue-50]=\"isCurrentEntity(entity._id || '')\"\n (click)=\"selectEntity(entity)\">\n <div class=\"tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2\">\n <!-- Entity Image -->\n <div class=\"tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200\">\n @if (entity.syen_photo_id_cyfm) {\n <img cideEleFileImage \n [fileId]=\"entity.syen_photo_id_cyfm\"\n [altText]=\"'Entity Logo'\"\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n } @else {\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n }\n </div>\n \n <!-- Entity Info -->\n <div class=\"tw-w-full\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <h4 class=\"tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900\">{{ entity.syen_name }}</h4>\n @if (isCurrentEntity(entity._id || '')) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <cide-ele-icon class=\"tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-ml-0.5\">Current</span>\n </div>\n }\n </div>\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <cide-ele-icon class=\"tw-text-gray-500 tw-w-5 tw-h-4\">code</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-gray-600\">{{ entity.syen_entity_code }}</span>\n </div>\n \n @if (entity.entity_type_details) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-blue-500 tw-rounded-full\"></div>\n <span class=\"tw-text-xs tw-text-blue-600 tw-font-medium\">{{ entity.entity_type_details.sygms_title }}</span>\n </div>\n }\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2\">\n @if (entity.syen_isactive) {\n <cide-ele-icon class=\"tw-text-green-500 tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-medium\">Active</span>\n } @else {\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-4\">block</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-red-500 tw-font-medium\">Inactive</span>\n }\n </div>\n \n @if (entity.children && entity.children.length > 0) {\n <button class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200\"\n (click)=\"toggleExpansion(entity._id || ''); $event.stopPropagation()\">\n <span>{{ entity.children.length }} entities</span>\n <cide-ele-icon class=\"tw-w-5 tw-h-4 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-180]=\"isExpanded(entity._id || '')\">expand_more</cide-ele-icon>\n </button>\n }\n </div>\n </div>\n </div>\n \n <!-- Curved Connection Lines -->\n @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {\n <div class=\"tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500\"></div>\n <div class=\"tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-20 tw-h-px tw-bg-blue-500 tw-mt-4\"></div>\n }\n </div>\n \n <!-- Children Row -->\n @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {\n <div class=\"tw-flex tw-justify-center tw-space-x-4 tw-mt-4\">\n @for (child of entity.children; track child._id) {\n <div class=\"tw-relative\">\n <!-- Vertical Line from Parent -->\n <div class=\"tw-absolute tw-top-0 tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500 tw--mt-4\"></div>\n \n <!-- Child Entity Card -->\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-orange-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48\"\n [class.tw-border-orange-500]=\"isCurrentEntity(child._id || '')\"\n [class.tw-bg-orange-50]=\"isCurrentEntity(child._id || '')\"\n (click)=\"selectEntity(child)\">\n <div class=\"tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2\">\n <!-- Child Entity Image -->\n <div class=\"tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200\">\n @if (child.syen_photo_id_cyfm) {\n <img cideEleFileImage \n [fileId]=\"child.syen_photo_id_cyfm\"\n [altText]=\"'Entity Logo'\"\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n } @else {\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n }\n </div>\n \n <!-- Child Entity Info -->\n <div class=\"tw-w-full\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <h4 class=\"tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900\">{{ child.syen_name }}</h4>\n @if (isCurrentEntity(child._id || '')) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <cide-ele-icon class=\"tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-ml-0.5\">Current</span>\n </div>\n }\n </div>\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <cide-ele-icon class=\"tw-text-gray-500 tw-w-5 tw-h-4\">code</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-gray-600\">{{ child.syen_entity_code }}</span>\n </div>\n \n @if (child.entity_type_details) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-orange-500 tw-rounded-full\"></div>\n <span class=\"tw-text-xs tw-text-orange-600 tw-font-medium\">{{ child.entity_type_details.sygms_title }}</span>\n </div>\n }\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2\">\n @if (child.syen_isactive) {\n <cide-ele-icon class=\"tw-text-green-500 tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-medium\">Active</span>\n } @else {\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-4\">block</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-red-500 tw-font-medium\">Inactive</span>\n }\n </div>\n \n @if (child.children && child.children.length > 0) {\n <button class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200\"\n (click)=\"toggleExpansion(child._id || ''); $event.stopPropagation()\">\n <span>{{ child.children.length }} entities</span>\n <cide-ele-icon class=\"tw-w-5 tw-h-4 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-180]=\"isExpanded(child._id || '')\">expand_more</cide-ele-icon>\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </ng-container>\n }\n </div>\n }\n </div>\n \n <!-- Fixed Footer -->\n <div class=\"tw-bg-white tw-px-4 tw-py-3 tw-border-t tw-border-gray-300 tw-flex tw-justify-end tw-space-x-2 tw-flex-shrink-0\">\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"onCancel()\">\n Cancel\n </button>\n </div>\n </div>\n `,\n styles: [`\n .tw-dashed {\n border-style: dashed;\n }\n .tw-bg-gray-300 {\n background-color: #d1d5db;\n }\n `]\n})\nexport class CideLytFloatingEntitySelectionComponent implements OnInit {\n // Service injections\n private entityService = inject(CideCoreEntityManagementService);\n private appStateService = inject(AppStateService);\n private floatingContainerService = inject(CideEleFloatingContainerService);\n\n // Signals\n entities = signal<EntityHierarchy[]>([]);\n loading = signal<boolean>(true);\n \n // Computed hierarchy\n entityHierarchy = computed(() => this.buildHierarchy(this.entities()));\n \n // Expanded state for tree view\n expandedEntities = signal<Set<string>>(new Set());\n\n ngOnInit() {\n this.loadEntities();\n }\n\n /**\n * Build hierarchical structure from flat entity list\n */\n private buildHierarchy(entities: EntityHierarchy[]): EntityHierarchy[] {\n const entityMap = new Map<string, EntityHierarchy>();\n const rootEntities: EntityHierarchy[] = [];\n\n // First pass: create hierarchy objects\n entities.forEach(entity => {\n entityMap.set(entity._id || '', {\n ...entity,\n children: [],\n level: 0,\n isExpanded: false\n });\n });\n\n // Second pass: build parent-child relationships\n entities.forEach(entity => {\n const hierarchyEntity = entityMap.get(entity._id || '');\n if (!hierarchyEntity) return;\n\n if (entity.syen_id_syen && entityMap.has(entity.syen_id_syen)) {\n // This entity has a parent\n const parent = entityMap.get(entity.syen_id_syen);\n if (parent) {\n parent.children.push(hierarchyEntity);\n hierarchyEntity.level = parent.level + 1;\n }\n } else {\n // This is a root entity\n rootEntities.push(hierarchyEntity);\n }\n });\n\n return rootEntities;\n }\n\n /**\n * Load entities from API\n */\n private async loadEntities(): Promise<void> {\n try {\n this.loading.set(true);\n const response = await firstValueFrom(this.entityService.getEntityList({}));\n console.log('🔍 Entities response:', response);\n if (response?.data) {\n // Convert the response data to EntityHierarchy format\n const hierarchyEntities: EntityHierarchy[] = response.data.map(entity => ({\n _id: entity._id,\n syen_name: entity.syen_name,\n syen_entity_code: entity.syen_entity_code,\n syen_isactive: entity.syen_isactive,\n syen_photo_id_cyfm: entity.syen_photo_id_cyfm,\n syen_id_syen: entity.syen_id_syen,\n children: [],\n level: 0,\n isExpanded: false,\n entity_type_details: (entity as any).entity_type_details\n }));\n this.entities.set(hierarchyEntities);\n }\n } catch (error) {\n console.error('Error loading entities:', error);\n } finally {\n this.loading.set(false);\n }\n }\n\n /**\n * Check if entity is currently active\n */\n isCurrentEntity(entityId: string): boolean {\n const currentEntity = this.appStateService.activeEntity();\n return currentEntity?._id === entityId;\n }\n\n /**\n * Toggle entity expansion state\n */\n toggleExpansion(entityId: string): void {\n const expanded = this.expandedEntities();\n if (expanded.has(entityId)) {\n expanded.delete(entityId);\n } else {\n expanded.add(entityId);\n }\n this.expandedEntities.set(new Set(expanded));\n }\n\n /**\n * Check if entity is expanded\n */\n isExpanded(entityId: string): boolean {\n return this.expandedEntities().has(entityId);\n }\n\n /**\n * Select an entity\n */\n selectEntity(entity: EntityHierarchy): void {\n console.log('🏢 Selected entity:', entity);\n this.appStateService.setActiveEntity(entity);\n this.closeContainer();\n }\n\n /**\n * Cancel selection\n */\n onCancel(): void {\n console.log('❌ Entity selection cancelled');\n this.closeContainer();\n }\n\n /**\n * Close floating container\n */\n private closeContainer(): void {\n this.floatingContainerService.hideAll();\n }\n}"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { cidePath, hostManagerRoutesUrl, coreRoutesUrl } from 'cloud-ide-lms-mod
9
9
  import { of } from 'rxjs';
10
10
  import { map } from 'rxjs/operators';
11
11
  import { CideInputComponent, CideEleButtonComponent, CideTextareaComponent } from 'cloud-ide-element';
12
- import { c as CideLytSidedrawerService, A as AppStateHelperService } from './cloud-ide-layout-cloud-ide-layout-BaoaTej4.mjs';
12
+ import { C as CideLytSidedrawerService, A as AppStateHelperService } from './cloud-ide-layout-cloud-ide-layout-CAo1_7zl.mjs';
13
13
 
14
14
  class CideLytDrawerNotesService {
15
15
  // Modern Angular v20 dependency injection pattern
@@ -253,4 +253,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
253
253
  }] });
254
254
 
255
255
  export { CideLytSidedrawerNotesComponent };
256
- //# sourceMappingURL=cloud-ide-layout-sidedrawer-notes.component-CcsBI9XO.mjs.map
256
+ //# sourceMappingURL=cloud-ide-layout-sidedrawer-notes.component-D1mljSc0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-ide-layout-sidedrawer-notes.component-CcsBI9XO.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/cide-lyt-drawer-base.class.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.html"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { ICoreSypn, IPageNotesManagerCreateUpdateControllerRespoonse, IPageNotesManagerListControllerRespoonse, cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideLytDrawerNotesService {\n // Modern Angular v20 dependency injection pattern\n private http = inject(HttpClient);\n\n constructor() {\n // Modern Angular v20 pattern: Use constructor for initialization only\n }\n\n getNotes(): Observable<ICoreSypn[]> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.systemPageNotesManager\n ]);\n return this.http.get<IPageNotesManagerListControllerRespoonse>(url).pipe(map((res) => res.data || []));\n }\n\n addNote(note: ICoreSypn): Observable<unknown> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.systemPageNotesManager\n ]);\n return this.http.post<IPageNotesManagerCreateUpdateControllerRespoonse>(url, note).pipe(map((res) => res.data));\n }\n\n updateNote(note: ICoreSypn): Observable<unknown> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.systemPageNotesManager\n ]);\n return this.http.post<IPageNotesManagerCreateUpdateControllerRespoonse>(url, note).pipe(map((res) => res.data));\n }\n\n deleteNote(noteId: string): Observable<unknown> {\n // Mock implementation: simulate deleting a note.\n console.log('Deleting note with ID:', noteId);\n return of({ success: true });\n }\n\n // Additional methods for updating and deleting notes could be added here.\n // You might also include error handling or more complex data manipulation.\n}","import { Directive, OnInit, inject } from '@angular/core';\nimport { CideLytSidedrawerService } from './sidedrawer.service';\n\n@Directive()\nexport abstract class CideLytDrawerBase implements OnInit {\n private _pageId: string | null = null;\n private _themeId: string | null = null;\n protected sidedrawerService = inject(CideLytSidedrawerService);\n\n ngOnInit(): void {\n // Automatically initialize context from the service\n const pageId = this.sidedrawerService.pageId;\n const themeId = this.sidedrawerService.themeId;\n if (pageId && themeId) {\n this.setContext(pageId, themeId);\n }\n this.afterContextInit();\n }\n\n // Child classes can override this for additional setup\n protected afterContextInit(): void {}\n\n setContext(pageId: string, themeId: string) {\n this._pageId = pageId;\n this._themeId = themeId;\n }\n\n get pageId(): string | null {\n return this._pageId;\n }\n\n get themeId(): string | null {\n return this._themeId;\n }\n\n protected getStorageKey(suffix: string): string {\n return `drawer_${suffix}_${this._pageId || 'unknown'}`;\n }\n} ","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, signal } from '@angular/core';\nimport { ReactiveFormsModule, FormBuilder, FormGroup } from '@angular/forms';\nimport { CideLytDrawerNotesService } from './sidedrawer-notes.service';\nimport { ICoreSypn } from 'cloud-ide-lms-model';\nimport { CideInputComponent } from 'cloud-ide-element';\nimport { CideEleButtonComponent } from 'cloud-ide-element';\nimport { CideTextareaComponent } from 'cloud-ide-element';\nimport { AppStateHelperService } from '../../../services/app-state/app-state-helper.service';\nimport { CideLytDrawerBase } from '../cide-lyt-drawer-base.class';\n\nexport interface NewNoteModel {\n title: string;\n description: string;\n isPageSpecific: boolean;\n isUserSpecific: boolean;\n isEntitySpecific: boolean;\n isThemeSpecific: boolean;\n}\n\nexport interface NotesComponentState {\n newNoteModel: NewNoteModel;\n isFormVisible: boolean;\n scrollTop: number;\n}\n\n@Component({\n selector: 'cide-lyt-sidedrawer-notes',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, CideInputComponent, CideEleButtonComponent, CideTextareaComponent],\n templateUrl: './sidedrawer-notes.component.html',\n styleUrl: './sidedrawer-notes.component.css'\n})\nexport class CideLytSidedrawerNotesComponent extends CideLytDrawerBase implements OnInit {\n private notesSignal = signal<ICoreSypn[]>([]);\n notes = this.notesSignal.asReadonly();\n isFormVisible = false;\n isEditing = false;\n editingNoteId: string | null = null;\n hoveredNoteIndex: number | null = null;\n noteForm!: FormGroup;\n private notesService = inject(CideLytDrawerNotesService);\n private fb = inject(FormBuilder);\n private appState = inject(AppStateHelperService);\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.initForm();\n this.notesService.getNotes().subscribe({\n next: (notes) => {\n this.notesSignal.set(notes);\n },\n error: (error) => {\n console.error('Error loading notes:', error);\n }\n });\n }\n\n protected override afterContextInit(): void {\n // Any additional setup after context is ready can go here\n }\n\n private initForm(): void {\n this.noteForm = this.fb.group({\n sypn_title: [''],\n sypn_desc: [''],\n sypn_is_page_specific: [true],\n sypn_is_user_specific: [true],\n sypn_is_entity_specific: [false],\n sypn_is_theme_specific: [false]\n });\n }\n\n showAddForm(): void {\n this.isFormVisible = true;\n }\n\n hideAddForm(): void {\n this.isFormVisible = false;\n this.isEditing = false;\n this.editingNoteId = null;\n }\n\n startEdit(note: ICoreSypn): void {\n this.isEditing = true;\n this.editingNoteId = note._id || '';\n this.noteForm.patchValue({\n sypn_title: note.sypn_title || '',\n sypn_desc: note.sypn_desc || '',\n sypn_is_page_specific: note.sypn_is_page_specific || false,\n sypn_is_user_specific: note.sypn_is_user_specific || false,\n sypn_is_entity_specific: note.sypn_is_entity_specific || false,\n sypn_is_theme_specific: note.sypn_is_theme_specific || false\n });\n this.isFormVisible = true;\n }\n\n cancelEdit(): void {\n this.isEditing = false;\n this.editingNoteId = null;\n this.resetForm();\n this.isFormVisible = false;\n }\n\n onNoteHover(index: number): void {\n this.hoveredNoteIndex = index;\n }\n\n onNoteLeave(): void {\n this.hoveredNoteIndex = null;\n }\n\n onSubmit(): void {\n if (this.noteForm.invalid || !this.noteForm.get('sypn_title')?.value?.trim()) {\n return;\n }\n const formValue = this.noteForm.value;\n if (this.isEditing && this.editingNoteId) {\n console.log('formValue', this.appState.currentUser());\n const noteToUpdate: ICoreSypn = {\n _id: this.editingNoteId,\n sypn_title: formValue.sypn_title,\n sypn_desc: formValue.sypn_desc,\n sypn_page_id_sypg: this.pageId || \"\",\n sypn_user_id_user: this.appState.currentUser()?._id || \"\",\n sypn_entity_id_sype: this.appState.getActiveEntityId() || \"\",\n sypn_page_them_id_sytm: this.themeId || \"\",\n sypn_is_page_specific: formValue.sypn_is_page_specific,\n sypn_is_user_specific: formValue.sypn_is_user_specific,\n sypn_is_entity_specific: formValue.sypn_is_entity_specific,\n sypn_is_theme_specific: formValue.sypn_is_theme_specific,\n };\n this.notesService.updateNote(noteToUpdate).subscribe({\n next: () => {\n const currentNotes = this.notesSignal();\n const updatedNotes = currentNotes.map((note: ICoreSypn) =>\n note._id === this.editingNoteId ? noteToUpdate : note\n );\n this.notesSignal.set(updatedNotes);\n this.resetForm();\n this.isFormVisible = false;\n this.isEditing = false;\n this.editingNoteId = null;\n },\n error: (err: unknown) => console.error('Failed to update note', err)\n });\n } else {\n const noteToAdd: ICoreSypn = {\n sypn_title: formValue.sypn_title,\n sypn_desc: formValue.sypn_desc,\n sypn_page_id_sypg: this.pageId || \"\",\n sypn_user_id_user: this.appState.currentUser()?._id || \"\",\n sypn_entity_id_sype: this.appState.getActiveEntityId() || \"\",\n sypn_page_them_id_sytm: this.themeId || \"\",\n sypn_is_page_specific: formValue.sypn_is_page_specific,\n sypn_is_user_specific: formValue.sypn_is_user_specific,\n sypn_is_entity_specific: formValue.sypn_is_entity_specific,\n sypn_is_theme_specific: formValue.sypn_is_theme_specific,\n };\n this.notesService.addNote(noteToAdd).subscribe({\n next: (response: unknown) => {\n const responseData = response as { _id?: string; id?: string };\n const newNoteWithId: ICoreSypn = {\n ...noteToAdd,\n _id: responseData._id || responseData.id || Date.now().toString()\n };\n const currentNotes = this.notesSignal();\n this.notesSignal.set([newNoteWithId, ...currentNotes]);\n this.resetForm();\n this.isFormVisible = false;\n },\n error: (err: unknown) => console.error('Failed to add note', err)\n });\n }\n }\n\n private resetForm(): void {\n this.noteForm.reset({\n sypn_title: '',\n sypn_desc: '',\n sypn_is_page_specific: true,\n sypn_is_user_specific: true,\n sypn_is_entity_specific: false,\n sypn_is_theme_specific: false\n });\n }\n\n public getState() {\n return {\n newNoteModel: { ...(this.noteForm?.value ? this.noteForm?.value : {}) },\n isFormVisible: this.isFormVisible,\n };\n }\n\n public setState(state: NotesComponentState) {\n if (state) {\n this.noteForm.patchValue(state.newNoteModel);\n this.isFormVisible = state.isFormVisible;\n }\n }\n}","<div class=\"tw-relative tw-h-full tw-bg-white tw-overflow-hidden tw-flex tw-flex-col\">\n <!-- FIXED HEADER SECTION (ABSOLUTE POSITIONED) -->\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200\">\n <!-- DYNAMIC HEADING -->\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-2 tw-bg-white tw-border-b tw-border-gray-200\">\n <h6 class=\"tw-font-semibold tw-text-gray-800\">\n {{ isFormVisible ? (isEditing ? 'Edit Note' : 'Add a New Note') : 'Notes' }}\n </h6>\n <button *ngIf=\"!isFormVisible\" (click)=\"showAddForm()\" cideEleButton variant=\"primary\"\n class=\"tw-p-2 !tw-w-7 !tw-px-0 !tw-rounded-full tw-animate-pulse\" title=\"Add New Note\">\n <!-- Using inline SVG for the plus icon for simplicity -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n </button>\n </div>\n\n <!-- ADD NOTE FORM (ANIMATED WRAPPER) -->\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out tw-animate-fade-in\" [class.tw-opacity-100]=\"isFormVisible\"\n [class.tw-opacity-0]=\"!isFormVisible\" [class.tw-max-h-0]=\"!isFormVisible\">\n <form [formGroup]=\"noteForm\" (ngSubmit)=\"onSubmit()\" class=\"tw-p-3 tw-space-y-4\" *ngIf=\"isFormVisible\">\n <!-- Title Input -->\n <cide-ele-input name=\"sypn_title\" formControlName=\"sypn_title\" placeholder=\"Note Title\" label=\"Note Title\"\n [required]=\"true\" [type]=\"'text'\" class=\"tw-w-full tw-transition-all tw-duration-200 focus:tw-scale-[1.02]\"></cide-ele-input>\n\n <!-- Description Textarea -->\n <cide-ele-textarea placeholder=\"What's on your mind? (Optional)\" id=\"sypn_desc\" formControlName=\"sypn_desc\"\n rows=\"4\" label=\"Description\" class=\"tw-transition-all tw-duration-200 focus:tw-scale-[1.02]\"></cide-ele-textarea>\n\n <!-- Toggle Switches -->\n <div class=\"tw-grid tw-grid-cols-2 tw-gap-4\">\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_page_specific\" label=\"Page Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_user_specific\" label=\"User Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_entity_specific\" label=\"Entity Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_theme_specific\" label=\"Theme Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-space-x-3 tw-pt-4\">\n <button cideEleButton size=\"xs\" variant=\"primary\" type=\"submit\" [disabled]=\"noteForm.invalid\">\n {{ isEditing ? 'Update Note' : 'Add Note' }}\n </button>\n <button cideEleButton size=\"xs\" variant=\"secondary\" type=\"button\"\n (click)=\"isEditing ? cancelEdit() : hideAddForm()\">\n {{ isEditing ? 'Cancel Edit' : 'Cancel' }}\n </button>\n </div>\n </form>\n </div>\n </div>\n\n <!-- SCROLLABLE NOTES SECTION (BELOW FIXED HEADER) -->\n <div class=\"tw-overflow-y-auto tw-scroll-smooth notes-scroll-container\">\n <!-- Modern Angular v20 pattern: Use Signals directly -->\n <div class=\"\" *ngIf=\"notes() as notes; else loading\">\n <!-- Show notes if the array is not empty -->\n <div *ngIf=\"notes.length > 0; else noNotes\">\n <div *ngFor=\"let note of notes; let i = index\"\n class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-p-4 tw-shadow-sm hover:tw-shadow-md tw-transition-all tw-duration-300 tw-ease-in-out tw-relative tw-transform hover:tw-translate-y-[-2px] hover:tw-shadow-lg\"\n (mouseenter)=\"onNoteHover(i)\" (mouseleave)=\"onNoteLeave()\">\n <!-- Edit Button (visible on hover) -->\n <button (click)=\"startEdit(note)\" [class.tw-opacity-100]=\"hoveredNoteIndex === i\"\n [class.tw-opacity-0]=\"hoveredNoteIndex !== i\"\n class=\"tw-absolute tw-top-2 tw-right-2 tw-transition-all tw-duration-200 tw-p-1 tw-rounded tw-bg-gray-100 hover:tw-bg-gray-200 hover:tw-scale-110 tw-z-10\"\n title=\"Edit Note\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path>\n <path d=\"m18.5 2.5 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>\n </svg>\n </button>\n\n <h6 class=\"tw-font-medium tw-text-gray-900 tw-mb-2 tw-pr-8\">{{ note.sypn_title }}</h6>\n <p class=\"tw-text-gray-600 tw-text-sm tw-mb-3\">{{ note.sypn_desc }}</p>\n <div class=\"tw-flex tw-flex-wrap tw-gap-2\">\n <span *ngIf=\"note.sypn_is_page_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-blue-100 tw-text-blue-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-blue-200\">Page Specific</span>\n <span *ngIf=\"note.sypn_is_user_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-green-200\">User Specific</span>\n <span *ngIf=\"note.sypn_is_entity_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-purple-100 tw-text-purple-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-purple-200\">Entity\n Specific</span>\n <span *ngIf=\"note.sypn_is_theme_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-orange-100 tw-text-orange-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-orange-200\">Theme\n Specific</span>\n </div>\n <!-- <p class=\"note-date\">{{ note.createdAt | date:'short' }}</p> -->\n </div>\n </div>\n </div>\n\n <!-- Template to show when there are no notes -->\n <ng-template #noNotes>\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-p-8 tw-text-center\">\n <div class=\"tw-w-12 tw-h-12 tw-bg-gray-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mb-4 tw-animate-bounce\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"tw-text-gray-400\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14,2 14,8 20,8\"></polyline>\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line>\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line>\n <polyline points=\"10,9 9,9 8,9\"></polyline>\n </svg>\n </div>\n <p class=\"tw-text-gray-500 tw-mb-2\">No notes found.</p>\n <p class=\"tw-text-sm tw-text-gray-400\">Click the '+' to add one!</p>\n </div>\n </ng-template>\n\n <!-- Template to show while notes are loading -->\n <ng-template #loading>\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-p-8\">\n <div class=\"tw-w-8 tw-h-8 tw-border-4 tw-border-blue-200 tw-border-t-blue-600 tw-rounded-full tw-animate-spin tw-mb-4\"></div>\n <p class=\"tw-text-gray-500 tw-text-sm\">Loading notes...</p>\n </div>\n </ng-template>\n </div>\n</div>"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-ide-layout-sidedrawer-notes.component-D1mljSc0.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/cide-lyt-drawer-base.class.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.ts","../../../projects/cloud-ide-layout/src/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.html"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { ICoreSypn, IPageNotesManagerCreateUpdateControllerRespoonse, IPageNotesManagerListControllerRespoonse, cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideLytDrawerNotesService {\n // Modern Angular v20 dependency injection pattern\n private http = inject(HttpClient);\n\n constructor() {\n // Modern Angular v20 pattern: Use constructor for initialization only\n }\n\n getNotes(): Observable<ICoreSypn[]> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.systemPageNotesManager\n ]);\n return this.http.get<IPageNotesManagerListControllerRespoonse>(url).pipe(map((res) => res.data || []));\n }\n\n addNote(note: ICoreSypn): Observable<unknown> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.systemPageNotesManager\n ]);\n return this.http.post<IPageNotesManagerCreateUpdateControllerRespoonse>(url, note).pipe(map((res) => res.data));\n }\n\n updateNote(note: ICoreSypn): Observable<unknown> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.systemPageNotesManager\n ]);\n return this.http.post<IPageNotesManagerCreateUpdateControllerRespoonse>(url, note).pipe(map((res) => res.data));\n }\n\n deleteNote(noteId: string): Observable<unknown> {\n // Mock implementation: simulate deleting a note.\n console.log('Deleting note with ID:', noteId);\n return of({ success: true });\n }\n\n // Additional methods for updating and deleting notes could be added here.\n // You might also include error handling or more complex data manipulation.\n}","import { Directive, OnInit, inject } from '@angular/core';\nimport { CideLytSidedrawerService } from './sidedrawer.service';\n\n@Directive()\nexport abstract class CideLytDrawerBase implements OnInit {\n private _pageId: string | null = null;\n private _themeId: string | null = null;\n protected sidedrawerService = inject(CideLytSidedrawerService);\n\n ngOnInit(): void {\n // Automatically initialize context from the service\n const pageId = this.sidedrawerService.pageId;\n const themeId = this.sidedrawerService.themeId;\n if (pageId && themeId) {\n this.setContext(pageId, themeId);\n }\n this.afterContextInit();\n }\n\n // Child classes can override this for additional setup\n protected afterContextInit(): void {}\n\n setContext(pageId: string, themeId: string) {\n this._pageId = pageId;\n this._themeId = themeId;\n }\n\n get pageId(): string | null {\n return this._pageId;\n }\n\n get themeId(): string | null {\n return this._themeId;\n }\n\n protected getStorageKey(suffix: string): string {\n return `drawer_${suffix}_${this._pageId || 'unknown'}`;\n }\n} ","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, signal } from '@angular/core';\nimport { ReactiveFormsModule, FormBuilder, FormGroup } from '@angular/forms';\nimport { CideLytDrawerNotesService } from './sidedrawer-notes.service';\nimport { ICoreSypn } from 'cloud-ide-lms-model';\nimport { CideInputComponent } from 'cloud-ide-element';\nimport { CideEleButtonComponent } from 'cloud-ide-element';\nimport { CideTextareaComponent } from 'cloud-ide-element';\nimport { AppStateHelperService } from '../../../services/app-state/app-state-helper.service';\nimport { CideLytDrawerBase } from '../cide-lyt-drawer-base.class';\n\nexport interface NewNoteModel {\n title: string;\n description: string;\n isPageSpecific: boolean;\n isUserSpecific: boolean;\n isEntitySpecific: boolean;\n isThemeSpecific: boolean;\n}\n\nexport interface NotesComponentState {\n newNoteModel: NewNoteModel;\n isFormVisible: boolean;\n scrollTop: number;\n}\n\n@Component({\n selector: 'cide-lyt-sidedrawer-notes',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, CideInputComponent, CideEleButtonComponent, CideTextareaComponent],\n templateUrl: './sidedrawer-notes.component.html',\n styleUrl: './sidedrawer-notes.component.css'\n})\nexport class CideLytSidedrawerNotesComponent extends CideLytDrawerBase implements OnInit {\n private notesSignal = signal<ICoreSypn[]>([]);\n notes = this.notesSignal.asReadonly();\n isFormVisible = false;\n isEditing = false;\n editingNoteId: string | null = null;\n hoveredNoteIndex: number | null = null;\n noteForm!: FormGroup;\n private notesService = inject(CideLytDrawerNotesService);\n private fb = inject(FormBuilder);\n private appState = inject(AppStateHelperService);\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.initForm();\n this.notesService.getNotes().subscribe({\n next: (notes) => {\n this.notesSignal.set(notes);\n },\n error: (error) => {\n console.error('Error loading notes:', error);\n }\n });\n }\n\n protected override afterContextInit(): void {\n // Any additional setup after context is ready can go here\n }\n\n private initForm(): void {\n this.noteForm = this.fb.group({\n sypn_title: [''],\n sypn_desc: [''],\n sypn_is_page_specific: [true],\n sypn_is_user_specific: [true],\n sypn_is_entity_specific: [false],\n sypn_is_theme_specific: [false]\n });\n }\n\n showAddForm(): void {\n this.isFormVisible = true;\n }\n\n hideAddForm(): void {\n this.isFormVisible = false;\n this.isEditing = false;\n this.editingNoteId = null;\n }\n\n startEdit(note: ICoreSypn): void {\n this.isEditing = true;\n this.editingNoteId = note._id || '';\n this.noteForm.patchValue({\n sypn_title: note.sypn_title || '',\n sypn_desc: note.sypn_desc || '',\n sypn_is_page_specific: note.sypn_is_page_specific || false,\n sypn_is_user_specific: note.sypn_is_user_specific || false,\n sypn_is_entity_specific: note.sypn_is_entity_specific || false,\n sypn_is_theme_specific: note.sypn_is_theme_specific || false\n });\n this.isFormVisible = true;\n }\n\n cancelEdit(): void {\n this.isEditing = false;\n this.editingNoteId = null;\n this.resetForm();\n this.isFormVisible = false;\n }\n\n onNoteHover(index: number): void {\n this.hoveredNoteIndex = index;\n }\n\n onNoteLeave(): void {\n this.hoveredNoteIndex = null;\n }\n\n onSubmit(): void {\n if (this.noteForm.invalid || !this.noteForm.get('sypn_title')?.value?.trim()) {\n return;\n }\n const formValue = this.noteForm.value;\n if (this.isEditing && this.editingNoteId) {\n console.log('formValue', this.appState.currentUser());\n const noteToUpdate: ICoreSypn = {\n _id: this.editingNoteId,\n sypn_title: formValue.sypn_title,\n sypn_desc: formValue.sypn_desc,\n sypn_page_id_sypg: this.pageId || \"\",\n sypn_user_id_user: this.appState.currentUser()?._id || \"\",\n sypn_entity_id_sype: this.appState.getActiveEntityId() || \"\",\n sypn_page_them_id_sytm: this.themeId || \"\",\n sypn_is_page_specific: formValue.sypn_is_page_specific,\n sypn_is_user_specific: formValue.sypn_is_user_specific,\n sypn_is_entity_specific: formValue.sypn_is_entity_specific,\n sypn_is_theme_specific: formValue.sypn_is_theme_specific,\n };\n this.notesService.updateNote(noteToUpdate).subscribe({\n next: () => {\n const currentNotes = this.notesSignal();\n const updatedNotes = currentNotes.map((note: ICoreSypn) =>\n note._id === this.editingNoteId ? noteToUpdate : note\n );\n this.notesSignal.set(updatedNotes);\n this.resetForm();\n this.isFormVisible = false;\n this.isEditing = false;\n this.editingNoteId = null;\n },\n error: (err: unknown) => console.error('Failed to update note', err)\n });\n } else {\n const noteToAdd: ICoreSypn = {\n sypn_title: formValue.sypn_title,\n sypn_desc: formValue.sypn_desc,\n sypn_page_id_sypg: this.pageId || \"\",\n sypn_user_id_user: this.appState.currentUser()?._id || \"\",\n sypn_entity_id_sype: this.appState.getActiveEntityId() || \"\",\n sypn_page_them_id_sytm: this.themeId || \"\",\n sypn_is_page_specific: formValue.sypn_is_page_specific,\n sypn_is_user_specific: formValue.sypn_is_user_specific,\n sypn_is_entity_specific: formValue.sypn_is_entity_specific,\n sypn_is_theme_specific: formValue.sypn_is_theme_specific,\n };\n this.notesService.addNote(noteToAdd).subscribe({\n next: (response: unknown) => {\n const responseData = response as { _id?: string; id?: string };\n const newNoteWithId: ICoreSypn = {\n ...noteToAdd,\n _id: responseData._id || responseData.id || Date.now().toString()\n };\n const currentNotes = this.notesSignal();\n this.notesSignal.set([newNoteWithId, ...currentNotes]);\n this.resetForm();\n this.isFormVisible = false;\n },\n error: (err: unknown) => console.error('Failed to add note', err)\n });\n }\n }\n\n private resetForm(): void {\n this.noteForm.reset({\n sypn_title: '',\n sypn_desc: '',\n sypn_is_page_specific: true,\n sypn_is_user_specific: true,\n sypn_is_entity_specific: false,\n sypn_is_theme_specific: false\n });\n }\n\n public getState() {\n return {\n newNoteModel: { ...(this.noteForm?.value ? this.noteForm?.value : {}) },\n isFormVisible: this.isFormVisible,\n };\n }\n\n public setState(state: NotesComponentState) {\n if (state) {\n this.noteForm.patchValue(state.newNoteModel);\n this.isFormVisible = state.isFormVisible;\n }\n }\n}","<div class=\"tw-relative tw-h-full tw-bg-white tw-overflow-hidden tw-flex tw-flex-col\">\n <!-- FIXED HEADER SECTION (ABSOLUTE POSITIONED) -->\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200\">\n <!-- DYNAMIC HEADING -->\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-2 tw-bg-white tw-border-b tw-border-gray-200\">\n <h6 class=\"tw-font-semibold tw-text-gray-800\">\n {{ isFormVisible ? (isEditing ? 'Edit Note' : 'Add a New Note') : 'Notes' }}\n </h6>\n <button *ngIf=\"!isFormVisible\" (click)=\"showAddForm()\" cideEleButton variant=\"primary\"\n class=\"tw-p-2 !tw-w-7 !tw-px-0 !tw-rounded-full tw-animate-pulse\" title=\"Add New Note\">\n <!-- Using inline SVG for the plus icon for simplicity -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n </button>\n </div>\n\n <!-- ADD NOTE FORM (ANIMATED WRAPPER) -->\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out tw-animate-fade-in\" [class.tw-opacity-100]=\"isFormVisible\"\n [class.tw-opacity-0]=\"!isFormVisible\" [class.tw-max-h-0]=\"!isFormVisible\">\n <form [formGroup]=\"noteForm\" (ngSubmit)=\"onSubmit()\" class=\"tw-p-3 tw-space-y-4\" *ngIf=\"isFormVisible\">\n <!-- Title Input -->\n <cide-ele-input name=\"sypn_title\" formControlName=\"sypn_title\" placeholder=\"Note Title\" label=\"Note Title\"\n [required]=\"true\" [type]=\"'text'\" class=\"tw-w-full tw-transition-all tw-duration-200 focus:tw-scale-[1.02]\"></cide-ele-input>\n\n <!-- Description Textarea -->\n <cide-ele-textarea placeholder=\"What's on your mind? (Optional)\" id=\"sypn_desc\" formControlName=\"sypn_desc\"\n rows=\"4\" label=\"Description\" class=\"tw-transition-all tw-duration-200 focus:tw-scale-[1.02]\"></cide-ele-textarea>\n\n <!-- Toggle Switches -->\n <div class=\"tw-grid tw-grid-cols-2 tw-gap-4\">\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_page_specific\" label=\"Page Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_user_specific\" label=\"User Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_entity_specific\" label=\"Entity Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n\n <cide-ele-input [type]=\"'checkbox'\" formControlName=\"sypn_is_theme_specific\" label=\"Theme Specific\"\n class=\"tw-flex tw-items-center tw-space-x-2\"></cide-ele-input>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-space-x-3 tw-pt-4\">\n <button cideEleButton size=\"xs\" variant=\"primary\" type=\"submit\" [disabled]=\"noteForm.invalid\">\n {{ isEditing ? 'Update Note' : 'Add Note' }}\n </button>\n <button cideEleButton size=\"xs\" variant=\"secondary\" type=\"button\"\n (click)=\"isEditing ? cancelEdit() : hideAddForm()\">\n {{ isEditing ? 'Cancel Edit' : 'Cancel' }}\n </button>\n </div>\n </form>\n </div>\n </div>\n\n <!-- SCROLLABLE NOTES SECTION (BELOW FIXED HEADER) -->\n <div class=\"tw-overflow-y-auto tw-scroll-smooth notes-scroll-container\">\n <!-- Modern Angular v20 pattern: Use Signals directly -->\n <div class=\"\" *ngIf=\"notes() as notes; else loading\">\n <!-- Show notes if the array is not empty -->\n <div *ngIf=\"notes.length > 0; else noNotes\">\n <div *ngFor=\"let note of notes; let i = index\"\n class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-p-4 tw-shadow-sm hover:tw-shadow-md tw-transition-all tw-duration-300 tw-ease-in-out tw-relative tw-transform hover:tw-translate-y-[-2px] hover:tw-shadow-lg\"\n (mouseenter)=\"onNoteHover(i)\" (mouseleave)=\"onNoteLeave()\">\n <!-- Edit Button (visible on hover) -->\n <button (click)=\"startEdit(note)\" [class.tw-opacity-100]=\"hoveredNoteIndex === i\"\n [class.tw-opacity-0]=\"hoveredNoteIndex !== i\"\n class=\"tw-absolute tw-top-2 tw-right-2 tw-transition-all tw-duration-200 tw-p-1 tw-rounded tw-bg-gray-100 hover:tw-bg-gray-200 hover:tw-scale-110 tw-z-10\"\n title=\"Edit Note\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path>\n <path d=\"m18.5 2.5 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>\n </svg>\n </button>\n\n <h6 class=\"tw-font-medium tw-text-gray-900 tw-mb-2 tw-pr-8\">{{ note.sypn_title }}</h6>\n <p class=\"tw-text-gray-600 tw-text-sm tw-mb-3\">{{ note.sypn_desc }}</p>\n <div class=\"tw-flex tw-flex-wrap tw-gap-2\">\n <span *ngIf=\"note.sypn_is_page_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-blue-100 tw-text-blue-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-blue-200\">Page Specific</span>\n <span *ngIf=\"note.sypn_is_user_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-green-200\">User Specific</span>\n <span *ngIf=\"note.sypn_is_entity_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-purple-100 tw-text-purple-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-purple-200\">Entity\n Specific</span>\n <span *ngIf=\"note.sypn_is_theme_specific\"\n class=\"tw-px-2 tw-py-1 tw-bg-orange-100 tw-text-orange-800 tw-text-xs tw-rounded-full tw-transition-all tw-duration-200 hover:tw-scale-105 hover:tw-bg-orange-200\">Theme\n Specific</span>\n </div>\n <!-- <p class=\"note-date\">{{ note.createdAt | date:'short' }}</p> -->\n </div>\n </div>\n </div>\n\n <!-- Template to show when there are no notes -->\n <ng-template #noNotes>\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-p-8 tw-text-center\">\n <div class=\"tw-w-12 tw-h-12 tw-bg-gray-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mb-4 tw-animate-bounce\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"tw-text-gray-400\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14,2 14,8 20,8\"></polyline>\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line>\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line>\n <polyline points=\"10,9 9,9 8,9\"></polyline>\n </svg>\n </div>\n <p class=\"tw-text-gray-500 tw-mb-2\">No notes found.</p>\n <p class=\"tw-text-sm tw-text-gray-400\">Click the '+' to add one!</p>\n </div>\n </ng-template>\n\n <!-- Template to show while notes are loading -->\n <ng-template #loading>\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-p-8\">\n <div class=\"tw-w-8 tw-h-8 tw-border-4 tw-border-blue-200 tw-border-t-blue-600 tw-rounded-full tw-animate-spin tw-mb-4\"></div>\n <p class=\"tw-text-gray-500 tw-text-sm\">Loading notes...</p>\n </div>\n </ng-template>\n </div>\n</div>"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { A as AppStateHelperService, e as AppStateService, m as CacheManagerService, n as CideLytFileManagerService, o as CideLytFloatingEntityRightsSharingComponent, q as CideLytFloatingEntityRightsSharingService, h as CideLytSharedService, C as CideLytSharedWrapperComponent, d as CideLytThemeService, k as CideLytUserStatusService, g as CloudIdeLayoutComponent, f as CloudIdeLayoutService, j as CustomRouteReuseStrategy, E as ENVIRONMENT_CONFIG, i as layoutControlPannelChildRoutes, l as layoutRoutes, p as processThemeVariable, s as setCSSVariable, t as themeFactory } from './cloud-ide-layout-cloud-ide-layout-BaoaTej4.mjs';
1
+ export { A as AppStateHelperService, b as AppStateService, j as CacheManagerService, k as CideLytFileManagerService, m as CideLytFloatingEntityRightsSharingComponent, n as CideLytFloatingEntityRightsSharingService, f as CideLytSharedService, e as CideLytSharedWrapperComponent, a as CideLytThemeService, i as CideLytUserStatusService, d as CloudIdeLayoutComponent, c as CloudIdeLayoutService, h as CustomRouteReuseStrategy, E as ENVIRONMENT_CONFIG, g as layoutControlPannelChildRoutes, l as layoutRoutes, p as processThemeVariable, s as setCSSVariable, t as themeFactory } from './cloud-ide-layout-cloud-ide-layout-CAo1_7zl.mjs';
2
2
  //# sourceMappingURL=cloud-ide-layout.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloud-ide-layout",
3
- "version": "1.0.34",
3
+ "version": "1.0.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.0",
6
6
  "@angular/core": "^20.1.0"