cloud-ide-layout 1.0.308 → 1.0.310
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{cloud-ide-layout-api-endpoint-manager.component-CKsbEngi.mjs → cloud-ide-layout-api-endpoint-manager.component-BoP-1zNl.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-api-endpoint-manager.component-CKsbEngi.mjs.map → cloud-ide-layout-api-endpoint-manager.component-BoP-1zNl.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-cloud-ide-layout-DO-mTsy5.mjs → cloud-ide-layout-cloud-ide-layout-CtwH_gd2.mjs} +60 -60
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-CtwH_gd2.mjs.map +1 -0
- package/fesm2022/{cloud-ide-layout-dashboard-manager.component-CRhpfrMY.mjs → cloud-ide-layout-dashboard-manager.component-DWI877xM.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-dashboard-manager.component-CRhpfrMY.mjs.map → cloud-ide-layout-dashboard-manager.component-DWI877xM.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-drawer-theme.component-CGS5dpOV.mjs → cloud-ide-layout-drawer-theme.component-CXPGGtwn.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-drawer-theme.component-CGS5dpOV.mjs.map → cloud-ide-layout-drawer-theme.component-CXPGGtwn.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-home-wrapper.component-DBrzSVS1.mjs → cloud-ide-layout-home-wrapper.component-Ck2BJXHI.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-home-wrapper.component-DBrzSVS1.mjs.map → cloud-ide-layout-home-wrapper.component-Ck2BJXHI.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-B4R6PKJ6.mjs → cloud-ide-layout-sidedrawer-notes.component-Hn2nrgKY.mjs} +2 -2
- package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-B4R6PKJ6.mjs.map → cloud-ide-layout-sidedrawer-notes.component-Hn2nrgKY.mjs.map} +1 -1
- package/fesm2022/cloud-ide-layout.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-DO-mTsy5.mjs.map +0 -1
|
@@ -7,7 +7,7 @@ import { FormBuilder, Validators, ReactiveFormsModule, FormsModule } from '@angu
|
|
|
7
7
|
import { generateStringFromObject, cidePath, hostManagerRoutesUrl, coreRoutesUrl, MApiEndpointMasterGetByIdPayload, MApiEndpointMasterDeletePayload, ApiEndpointMasterSaveUpdatePayload, MApiEndpointMaster } from 'cloud-ide-lms-model';
|
|
8
8
|
import { HttpClient } from '@angular/common/http';
|
|
9
9
|
import { CideEleFloatingContainerService } from 'cloud-ide-element';
|
|
10
|
-
import { C as CideLytSharedWrapperComponent } from './cloud-ide-layout-cloud-ide-layout-
|
|
10
|
+
import { C as CideLytSharedWrapperComponent } from './cloud-ide-layout-cloud-ide-layout-CtwH_gd2.mjs';
|
|
11
11
|
|
|
12
12
|
class ApiEndpointMasterService {
|
|
13
13
|
http = inject(HttpClient);
|
|
@@ -285,4 +285,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
285
285
|
}], ctorParameters: () => [] });
|
|
286
286
|
|
|
287
287
|
export { ApiEndpointManagerComponent };
|
|
288
|
-
//# sourceMappingURL=cloud-ide-layout-api-endpoint-manager.component-
|
|
288
|
+
//# sourceMappingURL=cloud-ide-layout-api-endpoint-manager.component-BoP-1zNl.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-layout-api-endpoint-manager.component-CKsbEngi.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/services/api-endpoint-master.service.ts","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-form.component.ts","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-form.component.html","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-manager.component.ts","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-manager.component.html"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n coreRoutesUrl,\r\n hostManagerRoutesUrl,\r\n apiEndpointMasterControllerResponse,\r\n apiEndpointMasterByIdControllerResponse,\r\n apiEndpointMasterInsertUpdateControllerResponse,\r\n controllerResponse,\r\n MApiEndpointMaster,\r\n ApiEndpointMasterSaveUpdatePayload,\r\n generateStringFromObject,\r\n MApiEndpointMasterGetByIdPayload,\r\n MApiEndpointMasterDeletePayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ApiEndpointMasterService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get API endpoint master list\r\n * @param payload - MApiEndpointMaster payload for filtering\r\n * @returns Observable of API endpoints list response\r\n */\r\n getApiEndpointMasterList(payload: Partial<MApiEndpointMaster>): Observable<apiEndpointMasterControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster,\r\n query\r\n ]);\r\n\r\n return this.http.get(url) as Observable<apiEndpointMasterControllerResponse>;\r\n }\r\n\r\n /**\r\n * Get API endpoint by ID\r\n * @param api_id - API ID\r\n * @returns Observable of API endpoint response\r\n */\r\n getApiEndpointById(api_id: string): Observable<apiEndpointMasterByIdControllerResponse> {\r\n const payload = new MApiEndpointMasterGetByIdPayload({ api_id });\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url) as Observable<apiEndpointMasterByIdControllerResponse>;\r\n }\r\n\r\n /**\r\n * Create or update API endpoint\r\n * @param payload - ApiEndpointMasterSaveUpdatePayload\r\n * @returns Observable of insert/update response\r\n */\r\n saveUpdateApiEndpoint(payload: ApiEndpointMasterSaveUpdatePayload): Observable<apiEndpointMasterInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster\r\n ]);\r\n\r\n return this.http.post(url, payload) as Observable<apiEndpointMasterInsertUpdateControllerResponse>;\r\n }\r\n\r\n /**\r\n * Delete API endpoint\r\n * @param api_id - API ID\r\n * @returns Observable of delete response\r\n */\r\n deleteApiEndpoint(api_id: string): Observable<controllerResponse> {\r\n const payload = new MApiEndpointMasterDeletePayload({ api_id });\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url) as Observable<controllerResponse>;\r\n }\r\n}\r\n","import { Component, inject, signal, input, output, OnInit, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { CoreApiEndpointMaster, ApiEndpointMasterSaveUpdatePayload } from 'cloud-ide-lms-model';\r\nimport { ApiEndpointMasterService } from '../../services/api-endpoint-master.service';\r\nimport { CideEleFloatingContainerService } from 'cloud-ide-element';\r\n\r\n@Component({\r\n selector: 'app-api-endpoint-form',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './api-endpoint-form.component.html',\r\n styleUrls: ['./api-endpoint-form.component.css']\r\n})\r\nexport class ApiEndpointFormComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private apiService = inject(ApiEndpointMasterService);\r\n private floatingContainerService = inject(CideEleFloatingContainerService);\r\n\r\n // Inputs\r\n containerId = input<string>('');\r\n editApiData = input<CoreApiEndpointMaster | null>(null);\r\n\r\n // Outputs\r\n saved = output<void>();\r\n cancelled = output<void>();\r\n\r\n // State\r\n apiForm!: FormGroup;\r\n isSubmitting = signal<boolean>(false);\r\n errorMessage = signal<string>('');\r\n\r\n constructor() {\r\n this.initForm();\r\n\r\n // React to input changes\r\n effect(() => {\r\n const data = this.editApiData();\r\n if (data) {\r\n this.apiForm.patchValue({\r\n api_endpoint: data.api_endpoint,\r\n api_method: data.api_method,\r\n api_description: data.api_description,\r\n api_category: data.api_category,\r\n api_requires_auth: data.api_requires_auth\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n // Form already initialized in constructor\r\n }\r\n\r\n private initForm() {\r\n this.apiForm = this.fb.group({\r\n api_endpoint: ['', [Validators.required]],\r\n api_method: ['GET', [Validators.required]],\r\n api_description: ['', [Validators.required]],\r\n api_category: ['', [Validators.required]],\r\n api_requires_auth: [true]\r\n });\r\n }\r\n\r\n onSubmit() {\r\n if (this.apiForm.invalid) {\r\n this.apiForm.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.isSubmitting.set(true);\r\n this.errorMessage.set('');\r\n\r\n const formValue = this.apiForm.value;\r\n const apiData: CoreApiEndpointMaster = {\r\n ...formValue\r\n };\r\n\r\n if (this.editApiData()) {\r\n apiData._id = this.editApiData()!._id;\r\n }\r\n\r\n const payload = new ApiEndpointMasterSaveUpdatePayload({\r\n core_api_endpoint_master: apiData\r\n });\r\n\r\n this.apiService.saveUpdateApiEndpoint(payload).subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.saved.emit();\r\n this.closeContainer();\r\n } else {\r\n this.errorMessage.set(response.message || 'Failed to save API endpoint');\r\n }\r\n this.isSubmitting.set(false);\r\n },\r\n error: (err) => {\r\n console.error('Error saving API endpoint:', err);\r\n this.errorMessage.set('An error occurred while saving');\r\n this.isSubmitting.set(false);\r\n }\r\n });\r\n }\r\n\r\n onCancel() {\r\n this.cancelled.emit();\r\n this.closeContainer();\r\n }\r\n\r\n private closeContainer() {\r\n if (this.containerId()) {\r\n this.floatingContainerService.hide(this.containerId());\r\n }\r\n }\r\n}\r\n","<div class=\"h-full flex flex-col bg-white dark:bg-gray-800\">\r\n <form [formGroup]=\"apiForm\" (ngSubmit)=\"onSubmit()\" class=\"flex-1 flex flex-col h-full\">\r\n <!-- Form Body -->\r\n <div class=\"flex-1 overflow-y-auto p-6 space-y-6\">\r\n\r\n <!-- Error Message -->\r\n <div *ngIf=\"errorMessage()\"\r\n class=\"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-600 dark:text-red-400 p-3 rounded-lg text-sm\">\r\n {{ errorMessage() }}\r\n </div>\r\n\r\n <!-- Endpoint -->\r\n <div>\r\n <label for=\"api_endpoint\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n Endpoint Path <span class=\"text-red-500\">*</span>\r\n </label>\r\n <input type=\"text\" id=\"api_endpoint\" formControlName=\"api_endpoint\" placeholder=\"/core/example/:id\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 hover:border-blue-400 outline-none transition-all font-mono text-sm\"\r\n [class.border-red-500]=\"apiForm.get('api_endpoint')?.invalid && apiForm.get('api_endpoint')?.touched\">\r\n <p *ngIf=\"apiForm.get('api_endpoint')?.invalid && apiForm.get('api_endpoint')?.touched\"\r\n class=\"mt-1 text-xs text-red-500\">\r\n Endpoint path is required\r\n </p>\r\n </div>\r\n\r\n <!-- Method -->\r\n <div>\r\n <label for=\"api_method\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n HTTP Method\r\n </label>\r\n <select id=\"api_method\" formControlName=\"api_method\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 outline-none transition-all\">\r\n <option value=\"GET\">GET</option>\r\n <option value=\"POST\">POST</option>\r\n <option value=\"PUT\">PUT</option>\r\n <option value=\"DELETE\">DELETE</option>\r\n <option value=\"PATCH\">PATCH</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Category -->\r\n <div>\r\n <label for=\"api_category\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n Category <span class=\"text-red-500\">*</span>\r\n </label>\r\n <input type=\"text\" id=\"api_category\" formControlName=\"api_category\"\r\n placeholder=\"e.g. Dashboard, User Management\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 hover:border-blue-400 outline-none transition-all\"\r\n [class.border-red-500]=\"apiForm.get('api_category')?.invalid && apiForm.get('api_category')?.touched\">\r\n <p *ngIf=\"apiForm.get('api_category')?.invalid && apiForm.get('api_category')?.touched\"\r\n class=\"mt-1 text-xs text-red-500\">\r\n Category is required\r\n </p>\r\n </div>\r\n\r\n <!-- Description -->\r\n <div>\r\n <label for=\"api_description\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n Description <span class=\"text-red-500\">*</span>\r\n </label>\r\n <textarea id=\"api_description\" formControlName=\"api_description\" rows=\"3\"\r\n placeholder=\"What does this endpoint do?\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 hover:border-blue-400 outline-none transition-all resize-none\"\r\n [class.border-red-500]=\"apiForm.get('api_description')?.invalid && apiForm.get('api_description')?.touched\"></textarea>\r\n <p *ngIf=\"apiForm.get('api_description')?.invalid && apiForm.get('api_description')?.touched\"\r\n class=\"mt-1 text-xs text-red-500\">\r\n Description is required\r\n </p>\r\n </div>\r\n\r\n <!-- Auth Required -->\r\n <div class=\"flex items-center\">\r\n <input type=\"checkbox\" id=\"api_requires_auth\" formControlName=\"api_requires_auth\"\r\n class=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700\">\r\n <label for=\"api_requires_auth\" class=\"ml-2 block text-sm text-gray-700 dark:text-gray-300\">\r\n Requires Authentication\r\n </label>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Footer Actions -->\r\n <div\r\n class=\"p-4 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900/50 flex justify-end gap-3\">\r\n <button type=\"button\" (click)=\"onCancel()\"\r\n class=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 transition-colors\">\r\n Cancel\r\n </button>\r\n <button type=\"submit\" [disabled]=\"isSubmitting() || apiForm.invalid || apiForm.pristine\"\r\n class=\"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors flex items-center gap-2\">\r\n <span *ngIf=\"isSubmitting()\"\r\n class=\"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin\"></span>\r\n {{ editApiData() ? 'Update' : 'Create' }}\r\n </button>\r\n </div>\r\n </form>\r\n</div>","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport {\r\n CoreApiEndpointMaster,\r\n MApiEndpointMaster,\r\n ApiEndpointMasterListResponse\r\n} from 'cloud-ide-lms-model';\r\nimport { ApiEndpointMasterService } from '../../services/api-endpoint-master.service';\r\nimport { CideEleFloatingContainerService, FloatingContainerConfig } from 'cloud-ide-element';\r\nimport { ApiEndpointFormComponent } from './api-endpoint-form.component';\r\nimport { CideLytSharedWrapperComponent } from '../../layout/shared/shared-wrapper/shared-wrapper.component';\r\n\r\n@Component({\r\n selector: 'app-api-endpoint-manager',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, CideLytSharedWrapperComponent],\r\n templateUrl: './api-endpoint-manager.component.html',\r\n styleUrls: ['./api-endpoint-manager.component.css']\r\n})\r\nexport class ApiEndpointManagerComponent implements OnInit {\r\n private apiService = inject(ApiEndpointMasterService);\r\n private floatingContainerService = inject(CideEleFloatingContainerService);\r\n\r\n shared_wrapper_setup_param = {\r\n sypg_page_code: \"cide_lyt_api_endpoint_manager\"\r\n };\r\n\r\n // Signals\r\n apiList = signal<ApiEndpointMasterListResponse[]>([]);\r\n totalRecords = signal<number>(0);\r\n loading = signal<boolean>(false);\r\n searchQuery = signal<string>('');\r\n\r\n // Pagination\r\n pageSize = signal<number>(20);\r\n pageIndex = signal<number>(1);\r\n\r\n constructor() {\r\n // Register the form component with the floating container service\r\n this.floatingContainerService.registerComponent('api-endpoint-form', ApiEndpointFormComponent);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadApiList();\r\n }\r\n\r\n loadApiList() {\r\n this.loading.set(true);\r\n const payload = new MApiEndpointMaster({\r\n query: this.searchQuery(),\r\n pageSize: this.pageSize(),\r\n pageIndex: this.pageIndex()\r\n });\r\n\r\n this.apiService.getApiEndpointMasterList(payload).subscribe({\r\n next: (response) => {\r\n if (response.success && response.data) {\r\n this.apiList.set(response.data);\r\n this.totalRecords.set(response.total || 0);\r\n } else {\r\n this.apiList.set([]);\r\n this.totalRecords.set(0);\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (err) => {\r\n console.error('Error fetching API list:', err);\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onSearch(query: string) {\r\n this.searchQuery.set(query);\r\n this.pageIndex.set(1);\r\n this.loadApiList();\r\n }\r\n\r\n onPageChange(page: number) {\r\n this.pageIndex.set(page);\r\n this.loadApiList();\r\n }\r\n\r\n openApiForm(apiData?: CoreApiEndpointMaster | ApiEndpointMasterListResponse) {\r\n const config: FloatingContainerConfig = {\r\n id: apiData ? `edit-api-${apiData._id}` : 'new-api-endpoint',\r\n title: apiData ? 'Edit API Endpoint' : 'Add New API Endpoint',\r\n width: '500px',\r\n height: 'auto',\r\n minWidth: '400px',\r\n minHeight: '300px',\r\n backdrop: true,\r\n componentId: 'api-endpoint-form',\r\n componentConfig: {\r\n inputs: {\r\n containerId: signal(apiData ? `edit-api-${apiData._id}` : 'new-api-endpoint'),\r\n editApiData: signal(apiData || null)\r\n },\r\n outputs: {\r\n saved: () => {\r\n this.loadApiList();\r\n },\r\n cancelled: () => {\r\n // Container handles closing\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.floatingContainerService.show(config);\r\n }\r\n\r\n deleteApi(apiId?: string) {\r\n if (!apiId) {\r\n console.error('API endpoint id is missing');\r\n return;\r\n }\r\n\r\n if (confirm('Are you sure you want to delete this API endpoint?')) {\r\n this.apiService.deleteApiEndpoint(apiId).subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadApiList();\r\n }\r\n },\r\n error: (err) => {\r\n console.error('Error deleting API endpoint:', err);\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"shared_wrapper_setup_param\">\r\n <!-- Breadcrumb Actions -->\r\n <div breadcrumb-actions>\r\n <button (click)=\"openApiForm()\"\r\n class=\"bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg flex items-center gap-2 transition-colors\">\r\n <i class=\"cide-icon-plus\"></i>\r\n <span>Add New Endpoint</span>\r\n </button>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"h-full flex flex-col bg-gray-50 dark:bg-gray-900 p-4\">\r\n\r\n <!-- Search & Filter -->\r\n <div class=\"mb-6\">\r\n <div class=\"relative max-w-md\">\r\n <input type=\"text\" [ngModel]=\"searchQuery()\" (ngModelChange)=\"onSearch($event)\"\r\n placeholder=\"Search endpoints, descriptions...\"\r\n class=\"w-full pl-10 pr-4 py-2 rounded-lg border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all\">\r\n <i class=\"cide-icon-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Table -->\r\n <div\r\n class=\"flex-1 overflow-hidden bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 flex flex-col\">\r\n <div class=\"overflow-x-auto flex-1\">\r\n <table class=\"w-full text-left border-collapse\">\r\n <thead class=\"bg-gray-50 dark:bg-gray-900/50 sticky top-0 z-10\">\r\n <tr>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Method</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Endpoint</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Description</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Category</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 text-center\">\r\n Auth</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 text-right\">\r\n Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"divide-y divide-gray-200 dark:divide-gray-700\">\r\n <tr *ngFor=\"let api of apiList()\"\r\n class=\"hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors\">\r\n <td class=\"p-4 whitespace-nowrap\">\r\n <span class=\"px-2 py-1 text-xs font-bold rounded\" [ngClass]=\"{\r\n 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400': api.api_method === 'GET',\r\n 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400': api.api_method === 'POST',\r\n 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400': api.api_method === 'PUT',\r\n 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400': api.api_method === 'DELETE',\r\n 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400': api.api_method === 'PATCH'\r\n }\">\r\n {{ api.api_method }}\r\n </span>\r\n </td>\r\n <td class=\"p-4 text-sm font-medium text-gray-900 dark:text-gray-100 font-mono\">{{\r\n api.api_endpoint }}</td>\r\n <td class=\"p-4 text-sm text-gray-500 dark:text-gray-400 max-w-xs truncate\"\r\n title=\"{{ api.api_description }}\">{{ api.api_description }}</td>\r\n <td class=\"p-4 text-sm text-gray-500 dark:text-gray-400\">\r\n <span\r\n class=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300\">\r\n {{ api.api_category }}\r\n </span>\r\n </td>\r\n <td class=\"p-4 text-center\">\r\n <i class=\"text-sm\"\r\n [ngClass]=\"api.api_requires_auth ? 'cide-icon-lock text-green-500' : 'cide-icon-unlock text-gray-400'\"></i>\r\n </td>\r\n <td class=\"p-4 text-right whitespace-nowrap\">\r\n <button (click)=\"openApiForm(api)\"\r\n class=\"text-blue-600 hover:text-blue-800 p-1 mr-2 transition-colors\" title=\"Edit\">\r\n <i class=\"cide-icon-edit\"></i>\r\n </button>\r\n <button (click)=\"deleteApi(api._id)\"\r\n class=\"text-red-600 hover:text-red-800 p-1 transition-colors\" title=\"Delete\">\r\n <i class=\"cide-icon-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"apiList().length === 0 && !loading()\">\r\n <td colspan=\"6\" class=\"p-8 text-center text-gray-500 dark:text-gray-400\">\r\n <div class=\"flex flex-col items-center\">\r\n <i class=\"cide-icon-database text-4xl mb-3 opacity-50\"></i>\r\n <p>No API endpoints found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"loading()\">\r\n <td colspan=\"6\" class=\"p-8 text-center\">\r\n <div class=\"flex justify-center\">\r\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <!-- Footer / Pagination -->\r\n <div\r\n class=\"p-4 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900/50 flex justify-between items-center text-sm text-gray-600 dark:text-gray-400\">\r\n <span>Showing {{ apiList().length }} of {{ totalRecords() }} endpoints</span>\r\n <div class=\"flex gap-2\">\r\n <button [disabled]=\"pageIndex() <= 1\" (click)=\"onPageChange(pageIndex() - 1)\"\r\n class=\"px-3 py-1 rounded border border-gray-300 dark:border-gray-600 disabled:opacity-50 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\">\r\n Previous\r\n </button>\r\n <button [disabled]=\"apiList().length < pageSize()\" (click)=\"onPageChange(pageIndex() + 1)\"\r\n class=\"px-3 py-1 rounded border border-gray-300 dark:border-gray-600 disabled:opacity-50 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\">\r\n Next\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-layout-api-endpoint-manager.component-BoP-1zNl.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/services/api-endpoint-master.service.ts","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-form.component.ts","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-form.component.html","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-manager.component.ts","../../../projects/cloud-ide-layout/src/lib/components/api-endpoint-manager/api-endpoint-manager.component.html"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n coreRoutesUrl,\r\n hostManagerRoutesUrl,\r\n apiEndpointMasterControllerResponse,\r\n apiEndpointMasterByIdControllerResponse,\r\n apiEndpointMasterInsertUpdateControllerResponse,\r\n controllerResponse,\r\n MApiEndpointMaster,\r\n ApiEndpointMasterSaveUpdatePayload,\r\n generateStringFromObject,\r\n MApiEndpointMasterGetByIdPayload,\r\n MApiEndpointMasterDeletePayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ApiEndpointMasterService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get API endpoint master list\r\n * @param payload - MApiEndpointMaster payload for filtering\r\n * @returns Observable of API endpoints list response\r\n */\r\n getApiEndpointMasterList(payload: Partial<MApiEndpointMaster>): Observable<apiEndpointMasterControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster,\r\n query\r\n ]);\r\n\r\n return this.http.get(url) as Observable<apiEndpointMasterControllerResponse>;\r\n }\r\n\r\n /**\r\n * Get API endpoint by ID\r\n * @param api_id - API ID\r\n * @returns Observable of API endpoint response\r\n */\r\n getApiEndpointById(api_id: string): Observable<apiEndpointMasterByIdControllerResponse> {\r\n const payload = new MApiEndpointMasterGetByIdPayload({ api_id });\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url) as Observable<apiEndpointMasterByIdControllerResponse>;\r\n }\r\n\r\n /**\r\n * Create or update API endpoint\r\n * @param payload - ApiEndpointMasterSaveUpdatePayload\r\n * @returns Observable of insert/update response\r\n */\r\n saveUpdateApiEndpoint(payload: ApiEndpointMasterSaveUpdatePayload): Observable<apiEndpointMasterInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster\r\n ]);\r\n\r\n return this.http.post(url, payload) as Observable<apiEndpointMasterInsertUpdateControllerResponse>;\r\n }\r\n\r\n /**\r\n * Delete API endpoint\r\n * @param api_id - API ID\r\n * @returns Observable of delete response\r\n */\r\n deleteApiEndpoint(api_id: string): Observable<controllerResponse> {\r\n const payload = new MApiEndpointMasterDeletePayload({ api_id });\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.apiEndpointMaster,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url) as Observable<controllerResponse>;\r\n }\r\n}\r\n","import { Component, inject, signal, input, output, OnInit, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { CoreApiEndpointMaster, ApiEndpointMasterSaveUpdatePayload } from 'cloud-ide-lms-model';\r\nimport { ApiEndpointMasterService } from '../../services/api-endpoint-master.service';\r\nimport { CideEleFloatingContainerService } from 'cloud-ide-element';\r\n\r\n@Component({\r\n selector: 'app-api-endpoint-form',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './api-endpoint-form.component.html',\r\n styleUrls: ['./api-endpoint-form.component.css']\r\n})\r\nexport class ApiEndpointFormComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private apiService = inject(ApiEndpointMasterService);\r\n private floatingContainerService = inject(CideEleFloatingContainerService);\r\n\r\n // Inputs\r\n containerId = input<string>('');\r\n editApiData = input<CoreApiEndpointMaster | null>(null);\r\n\r\n // Outputs\r\n saved = output<void>();\r\n cancelled = output<void>();\r\n\r\n // State\r\n apiForm!: FormGroup;\r\n isSubmitting = signal<boolean>(false);\r\n errorMessage = signal<string>('');\r\n\r\n constructor() {\r\n this.initForm();\r\n\r\n // React to input changes\r\n effect(() => {\r\n const data = this.editApiData();\r\n if (data) {\r\n this.apiForm.patchValue({\r\n api_endpoint: data.api_endpoint,\r\n api_method: data.api_method,\r\n api_description: data.api_description,\r\n api_category: data.api_category,\r\n api_requires_auth: data.api_requires_auth\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n // Form already initialized in constructor\r\n }\r\n\r\n private initForm() {\r\n this.apiForm = this.fb.group({\r\n api_endpoint: ['', [Validators.required]],\r\n api_method: ['GET', [Validators.required]],\r\n api_description: ['', [Validators.required]],\r\n api_category: ['', [Validators.required]],\r\n api_requires_auth: [true]\r\n });\r\n }\r\n\r\n onSubmit() {\r\n if (this.apiForm.invalid) {\r\n this.apiForm.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.isSubmitting.set(true);\r\n this.errorMessage.set('');\r\n\r\n const formValue = this.apiForm.value;\r\n const apiData: CoreApiEndpointMaster = {\r\n ...formValue\r\n };\r\n\r\n if (this.editApiData()) {\r\n apiData._id = this.editApiData()!._id;\r\n }\r\n\r\n const payload = new ApiEndpointMasterSaveUpdatePayload({\r\n core_api_endpoint_master: apiData\r\n });\r\n\r\n this.apiService.saveUpdateApiEndpoint(payload).subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.saved.emit();\r\n this.closeContainer();\r\n } else {\r\n this.errorMessage.set(response.message || 'Failed to save API endpoint');\r\n }\r\n this.isSubmitting.set(false);\r\n },\r\n error: (err) => {\r\n console.error('Error saving API endpoint:', err);\r\n this.errorMessage.set('An error occurred while saving');\r\n this.isSubmitting.set(false);\r\n }\r\n });\r\n }\r\n\r\n onCancel() {\r\n this.cancelled.emit();\r\n this.closeContainer();\r\n }\r\n\r\n private closeContainer() {\r\n if (this.containerId()) {\r\n this.floatingContainerService.hide(this.containerId());\r\n }\r\n }\r\n}\r\n","<div class=\"h-full flex flex-col bg-white dark:bg-gray-800\">\r\n <form [formGroup]=\"apiForm\" (ngSubmit)=\"onSubmit()\" class=\"flex-1 flex flex-col h-full\">\r\n <!-- Form Body -->\r\n <div class=\"flex-1 overflow-y-auto p-6 space-y-6\">\r\n\r\n <!-- Error Message -->\r\n <div *ngIf=\"errorMessage()\"\r\n class=\"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-600 dark:text-red-400 p-3 rounded-lg text-sm\">\r\n {{ errorMessage() }}\r\n </div>\r\n\r\n <!-- Endpoint -->\r\n <div>\r\n <label for=\"api_endpoint\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n Endpoint Path <span class=\"text-red-500\">*</span>\r\n </label>\r\n <input type=\"text\" id=\"api_endpoint\" formControlName=\"api_endpoint\" placeholder=\"/core/example/:id\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 hover:border-blue-400 outline-none transition-all font-mono text-sm\"\r\n [class.border-red-500]=\"apiForm.get('api_endpoint')?.invalid && apiForm.get('api_endpoint')?.touched\">\r\n <p *ngIf=\"apiForm.get('api_endpoint')?.invalid && apiForm.get('api_endpoint')?.touched\"\r\n class=\"mt-1 text-xs text-red-500\">\r\n Endpoint path is required\r\n </p>\r\n </div>\r\n\r\n <!-- Method -->\r\n <div>\r\n <label for=\"api_method\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n HTTP Method\r\n </label>\r\n <select id=\"api_method\" formControlName=\"api_method\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 outline-none transition-all\">\r\n <option value=\"GET\">GET</option>\r\n <option value=\"POST\">POST</option>\r\n <option value=\"PUT\">PUT</option>\r\n <option value=\"DELETE\">DELETE</option>\r\n <option value=\"PATCH\">PATCH</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Category -->\r\n <div>\r\n <label for=\"api_category\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n Category <span class=\"text-red-500\">*</span>\r\n </label>\r\n <input type=\"text\" id=\"api_category\" formControlName=\"api_category\"\r\n placeholder=\"e.g. Dashboard, User Management\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 hover:border-blue-400 outline-none transition-all\"\r\n [class.border-red-500]=\"apiForm.get('api_category')?.invalid && apiForm.get('api_category')?.touched\">\r\n <p *ngIf=\"apiForm.get('api_category')?.invalid && apiForm.get('api_category')?.touched\"\r\n class=\"mt-1 text-xs text-red-500\">\r\n Category is required\r\n </p>\r\n </div>\r\n\r\n <!-- Description -->\r\n <div>\r\n <label for=\"api_description\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n Description <span class=\"text-red-500\">*</span>\r\n </label>\r\n <textarea id=\"api_description\" formControlName=\"api_description\" rows=\"3\"\r\n placeholder=\"What does this endpoint do?\"\r\n class=\"w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 hover:border-blue-400 outline-none transition-all resize-none\"\r\n [class.border-red-500]=\"apiForm.get('api_description')?.invalid && apiForm.get('api_description')?.touched\"></textarea>\r\n <p *ngIf=\"apiForm.get('api_description')?.invalid && apiForm.get('api_description')?.touched\"\r\n class=\"mt-1 text-xs text-red-500\">\r\n Description is required\r\n </p>\r\n </div>\r\n\r\n <!-- Auth Required -->\r\n <div class=\"flex items-center\">\r\n <input type=\"checkbox\" id=\"api_requires_auth\" formControlName=\"api_requires_auth\"\r\n class=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700\">\r\n <label for=\"api_requires_auth\" class=\"ml-2 block text-sm text-gray-700 dark:text-gray-300\">\r\n Requires Authentication\r\n </label>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Footer Actions -->\r\n <div\r\n class=\"p-4 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900/50 flex justify-end gap-3\">\r\n <button type=\"button\" (click)=\"onCancel()\"\r\n class=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 transition-colors\">\r\n Cancel\r\n </button>\r\n <button type=\"submit\" [disabled]=\"isSubmitting() || apiForm.invalid || apiForm.pristine\"\r\n class=\"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors flex items-center gap-2\">\r\n <span *ngIf=\"isSubmitting()\"\r\n class=\"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin\"></span>\r\n {{ editApiData() ? 'Update' : 'Create' }}\r\n </button>\r\n </div>\r\n </form>\r\n</div>","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport {\r\n CoreApiEndpointMaster,\r\n MApiEndpointMaster,\r\n ApiEndpointMasterListResponse\r\n} from 'cloud-ide-lms-model';\r\nimport { ApiEndpointMasterService } from '../../services/api-endpoint-master.service';\r\nimport { CideEleFloatingContainerService, FloatingContainerConfig } from 'cloud-ide-element';\r\nimport { ApiEndpointFormComponent } from './api-endpoint-form.component';\r\nimport { CideLytSharedWrapperComponent } from '../../layout/shared/shared-wrapper/shared-wrapper.component';\r\n\r\n@Component({\r\n selector: 'app-api-endpoint-manager',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, CideLytSharedWrapperComponent],\r\n templateUrl: './api-endpoint-manager.component.html',\r\n styleUrls: ['./api-endpoint-manager.component.css']\r\n})\r\nexport class ApiEndpointManagerComponent implements OnInit {\r\n private apiService = inject(ApiEndpointMasterService);\r\n private floatingContainerService = inject(CideEleFloatingContainerService);\r\n\r\n shared_wrapper_setup_param = {\r\n sypg_page_code: \"cide_lyt_api_endpoint_manager\"\r\n };\r\n\r\n // Signals\r\n apiList = signal<ApiEndpointMasterListResponse[]>([]);\r\n totalRecords = signal<number>(0);\r\n loading = signal<boolean>(false);\r\n searchQuery = signal<string>('');\r\n\r\n // Pagination\r\n pageSize = signal<number>(20);\r\n pageIndex = signal<number>(1);\r\n\r\n constructor() {\r\n // Register the form component with the floating container service\r\n this.floatingContainerService.registerComponent('api-endpoint-form', ApiEndpointFormComponent);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadApiList();\r\n }\r\n\r\n loadApiList() {\r\n this.loading.set(true);\r\n const payload = new MApiEndpointMaster({\r\n query: this.searchQuery(),\r\n pageSize: this.pageSize(),\r\n pageIndex: this.pageIndex()\r\n });\r\n\r\n this.apiService.getApiEndpointMasterList(payload).subscribe({\r\n next: (response) => {\r\n if (response.success && response.data) {\r\n this.apiList.set(response.data);\r\n this.totalRecords.set(response.total || 0);\r\n } else {\r\n this.apiList.set([]);\r\n this.totalRecords.set(0);\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (err) => {\r\n console.error('Error fetching API list:', err);\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onSearch(query: string) {\r\n this.searchQuery.set(query);\r\n this.pageIndex.set(1);\r\n this.loadApiList();\r\n }\r\n\r\n onPageChange(page: number) {\r\n this.pageIndex.set(page);\r\n this.loadApiList();\r\n }\r\n\r\n openApiForm(apiData?: CoreApiEndpointMaster | ApiEndpointMasterListResponse) {\r\n const config: FloatingContainerConfig = {\r\n id: apiData ? `edit-api-${apiData._id}` : 'new-api-endpoint',\r\n title: apiData ? 'Edit API Endpoint' : 'Add New API Endpoint',\r\n width: '500px',\r\n height: 'auto',\r\n minWidth: '400px',\r\n minHeight: '300px',\r\n backdrop: true,\r\n componentId: 'api-endpoint-form',\r\n componentConfig: {\r\n inputs: {\r\n containerId: signal(apiData ? `edit-api-${apiData._id}` : 'new-api-endpoint'),\r\n editApiData: signal(apiData || null)\r\n },\r\n outputs: {\r\n saved: () => {\r\n this.loadApiList();\r\n },\r\n cancelled: () => {\r\n // Container handles closing\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.floatingContainerService.show(config);\r\n }\r\n\r\n deleteApi(apiId?: string) {\r\n if (!apiId) {\r\n console.error('API endpoint id is missing');\r\n return;\r\n }\r\n\r\n if (confirm('Are you sure you want to delete this API endpoint?')) {\r\n this.apiService.deleteApiEndpoint(apiId).subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadApiList();\r\n }\r\n },\r\n error: (err) => {\r\n console.error('Error deleting API endpoint:', err);\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"shared_wrapper_setup_param\">\r\n <!-- Breadcrumb Actions -->\r\n <div breadcrumb-actions>\r\n <button (click)=\"openApiForm()\"\r\n class=\"bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg flex items-center gap-2 transition-colors\">\r\n <i class=\"cide-icon-plus\"></i>\r\n <span>Add New Endpoint</span>\r\n </button>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"h-full flex flex-col bg-gray-50 dark:bg-gray-900 p-4\">\r\n\r\n <!-- Search & Filter -->\r\n <div class=\"mb-6\">\r\n <div class=\"relative max-w-md\">\r\n <input type=\"text\" [ngModel]=\"searchQuery()\" (ngModelChange)=\"onSearch($event)\"\r\n placeholder=\"Search endpoints, descriptions...\"\r\n class=\"w-full pl-10 pr-4 py-2 rounded-lg border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all\">\r\n <i class=\"cide-icon-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Table -->\r\n <div\r\n class=\"flex-1 overflow-hidden bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 flex flex-col\">\r\n <div class=\"overflow-x-auto flex-1\">\r\n <table class=\"w-full text-left border-collapse\">\r\n <thead class=\"bg-gray-50 dark:bg-gray-900/50 sticky top-0 z-10\">\r\n <tr>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Method</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Endpoint</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Description</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700\">\r\n Category</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 text-center\">\r\n Auth</th>\r\n <th\r\n class=\"p-4 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 text-right\">\r\n Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"divide-y divide-gray-200 dark:divide-gray-700\">\r\n <tr *ngFor=\"let api of apiList()\"\r\n class=\"hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors\">\r\n <td class=\"p-4 whitespace-nowrap\">\r\n <span class=\"px-2 py-1 text-xs font-bold rounded\" [ngClass]=\"{\r\n 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400': api.api_method === 'GET',\r\n 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400': api.api_method === 'POST',\r\n 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400': api.api_method === 'PUT',\r\n 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400': api.api_method === 'DELETE',\r\n 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400': api.api_method === 'PATCH'\r\n }\">\r\n {{ api.api_method }}\r\n </span>\r\n </td>\r\n <td class=\"p-4 text-sm font-medium text-gray-900 dark:text-gray-100 font-mono\">{{\r\n api.api_endpoint }}</td>\r\n <td class=\"p-4 text-sm text-gray-500 dark:text-gray-400 max-w-xs truncate\"\r\n title=\"{{ api.api_description }}\">{{ api.api_description }}</td>\r\n <td class=\"p-4 text-sm text-gray-500 dark:text-gray-400\">\r\n <span\r\n class=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300\">\r\n {{ api.api_category }}\r\n </span>\r\n </td>\r\n <td class=\"p-4 text-center\">\r\n <i class=\"text-sm\"\r\n [ngClass]=\"api.api_requires_auth ? 'cide-icon-lock text-green-500' : 'cide-icon-unlock text-gray-400'\"></i>\r\n </td>\r\n <td class=\"p-4 text-right whitespace-nowrap\">\r\n <button (click)=\"openApiForm(api)\"\r\n class=\"text-blue-600 hover:text-blue-800 p-1 mr-2 transition-colors\" title=\"Edit\">\r\n <i class=\"cide-icon-edit\"></i>\r\n </button>\r\n <button (click)=\"deleteApi(api._id)\"\r\n class=\"text-red-600 hover:text-red-800 p-1 transition-colors\" title=\"Delete\">\r\n <i class=\"cide-icon-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"apiList().length === 0 && !loading()\">\r\n <td colspan=\"6\" class=\"p-8 text-center text-gray-500 dark:text-gray-400\">\r\n <div class=\"flex flex-col items-center\">\r\n <i class=\"cide-icon-database text-4xl mb-3 opacity-50\"></i>\r\n <p>No API endpoints found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"loading()\">\r\n <td colspan=\"6\" class=\"p-8 text-center\">\r\n <div class=\"flex justify-center\">\r\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <!-- Footer / Pagination -->\r\n <div\r\n class=\"p-4 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900/50 flex justify-between items-center text-sm text-gray-600 dark:text-gray-400\">\r\n <span>Showing {{ apiList().length }} of {{ totalRecords() }} endpoints</span>\r\n <div class=\"flex gap-2\">\r\n <button [disabled]=\"pageIndex() <= 1\" (click)=\"onPageChange(pageIndex() - 1)\"\r\n class=\"px-3 py-1 rounded border border-gray-300 dark:border-gray-600 disabled:opacity-50 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\">\r\n Previous\r\n </button>\r\n <button [disabled]=\"apiList().length < pageSize()\" (click)=\"onPageChange(pageIndex() + 1)\"\r\n class=\"px-3 py-1 rounded border border-gray-300 dark:border-gray-600 disabled:opacity-50 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\">\r\n Next\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>"],"names":[],"mappings":"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"}
|
|
@@ -1973,17 +1973,17 @@ class NotificationSettingsComponent {
|
|
|
1973
1973
|
}
|
|
1974
1974
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NotificationSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1975
1975
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: NotificationSettingsComponent, isStandalone: true, selector: "cide-lyt-notification-settings", ngImport: i0, template: `
|
|
1976
|
-
<div class="notification-settings-container tw-p-6 tw-space-y-6 tw-bg-[var(--cide-ele-bg-primary)] tw-text-[var(--cide-ele-text-primary)]">
|
|
1977
|
-
<form [formGroup]="settingsForm" class="tw-space-y-8">
|
|
1976
|
+
<div class="notification-settings-container tw-p-3 md:tw-p-6 tw-space-y-4 md:tw-space-y-6 tw-bg-[var(--cide-ele-bg-primary)] tw-text-[var(--cide-ele-text-primary)]">
|
|
1977
|
+
<form [formGroup]="settingsForm" class="tw-space-y-5 md:tw-space-y-8">
|
|
1978
1978
|
<!-- Notification Channels -->
|
|
1979
1979
|
<div class="tw-space-y-4">
|
|
1980
|
-
<h4 class="tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-widest">Notification Channels</h4>
|
|
1980
|
+
<h4 class="tw-text-[10px] md:tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-wider md:tw-tracking-widest">Notification Channels</h4>
|
|
1981
1981
|
|
|
1982
|
-
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4">
|
|
1982
|
+
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-2 md:tw-gap-4">
|
|
1983
1983
|
<!-- In-App Notifications -->
|
|
1984
|
-
<div class="tw-flex tw-flex-col tw-justify-between tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
1985
|
-
<div class="tw-flex tw-items-center tw-gap-3 tw-mb-4">
|
|
1986
|
-
<div class="tw-p-2 tw-bg-blue-500/10 tw-rounded-lg">
|
|
1984
|
+
<div class="tw-flex tw-flex-col tw-justify-between tw-p-3 md:tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
1985
|
+
<div class="tw-flex tw-items-center tw-gap-2 md:tw-gap-3 tw-mb-3 md:tw-mb-4">
|
|
1986
|
+
<div class="tw-p-1.5 md:tw-p-2 tw-bg-blue-500/10 tw-rounded-lg">
|
|
1987
1987
|
<cide-ele-icon class="tw-text-blue-500">notifications</cide-ele-icon>
|
|
1988
1988
|
</div>
|
|
1989
1989
|
<div>
|
|
@@ -2000,9 +2000,9 @@ class NotificationSettingsComponent {
|
|
|
2000
2000
|
</div>
|
|
2001
2001
|
|
|
2002
2002
|
<!-- Email Notifications -->
|
|
2003
|
-
<div class="tw-flex tw-flex-col tw-justify-between tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2004
|
-
<div class="tw-flex tw-items-center tw-gap-3 tw-mb-4">
|
|
2005
|
-
<div class="tw-p-2 tw-bg-purple-500/10 tw-rounded-lg">
|
|
2003
|
+
<div class="tw-flex tw-flex-col tw-justify-between tw-p-3 md:tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2004
|
+
<div class="tw-flex tw-items-center tw-gap-2 md:tw-gap-3 tw-mb-3 md:tw-mb-4">
|
|
2005
|
+
<div class="tw-p-1.5 md:tw-p-2 tw-bg-purple-500/10 tw-rounded-lg">
|
|
2006
2006
|
<cide-ele-icon class="tw-text-purple-500">mail</cide-ele-icon>
|
|
2007
2007
|
</div>
|
|
2008
2008
|
<div>
|
|
@@ -2019,9 +2019,9 @@ class NotificationSettingsComponent {
|
|
|
2019
2019
|
</div>
|
|
2020
2020
|
|
|
2021
2021
|
<!-- SMS Notifications -->
|
|
2022
|
-
<div class="tw-flex tw-flex-col tw-justify-between tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2023
|
-
<div class="tw-flex tw-items-center tw-gap-3 tw-mb-4">
|
|
2024
|
-
<div class="tw-p-2 tw-bg-orange-500/10 tw-rounded-lg">
|
|
2022
|
+
<div class="tw-flex tw-flex-col tw-justify-between tw-p-3 md:tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2023
|
+
<div class="tw-flex tw-items-center tw-gap-2 md:tw-gap-3 tw-mb-3 md:tw-mb-4">
|
|
2024
|
+
<div class="tw-p-1.5 md:tw-p-2 tw-bg-orange-500/10 tw-rounded-lg">
|
|
2025
2025
|
<cide-ele-icon class="tw-text-orange-500">sms</cide-ele-icon>
|
|
2026
2026
|
</div>
|
|
2027
2027
|
<div>
|
|
@@ -2039,12 +2039,12 @@ class NotificationSettingsComponent {
|
|
|
2039
2039
|
</div>
|
|
2040
2040
|
</div>
|
|
2041
2041
|
|
|
2042
|
-
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-8">
|
|
2042
|
+
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 md:tw-gap-8">
|
|
2043
2043
|
<!-- Sound Settings -->
|
|
2044
2044
|
<div class="tw-space-y-4">
|
|
2045
|
-
<h4 class="tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-widest">Sound Preferences</h4>
|
|
2045
|
+
<h4 class="tw-text-[10px] md:tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-wider md:tw-tracking-widest">Sound Preferences</h4>
|
|
2046
2046
|
|
|
2047
|
-
<div class="tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-5">
|
|
2047
|
+
<div class="tw-p-3 md:tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-4 md:tw-space-y-5">
|
|
2048
2048
|
<div class="tw-flex tw-items-center tw-justify-between">
|
|
2049
2049
|
<div class="tw-flex tw-items-center tw-gap-3">
|
|
2050
2050
|
<div class="tw-p-1.5 tw-bg-blue-500/10 tw-rounded-lg">
|
|
@@ -2087,9 +2087,9 @@ class NotificationSettingsComponent {
|
|
|
2087
2087
|
<!-- Schedule & Snooze -->
|
|
2088
2088
|
<div class="tw-space-y-6">
|
|
2089
2089
|
<!-- Quiet Hours -->
|
|
2090
|
-
<div class="tw-space-y-4">
|
|
2091
|
-
<h4 class="tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-widest">Do Not Disturb</h4>
|
|
2092
|
-
<div class="tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-4">
|
|
2090
|
+
<div class="tw-space-y-3 md:tw-space-y-4">
|
|
2091
|
+
<h4 class="tw-text-[10px] md:tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-wider md:tw-tracking-widest">Do Not Disturb</h4>
|
|
2092
|
+
<div class="tw-p-3 md:tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-3 md:tw-space-y-4">
|
|
2093
2093
|
<div class="tw-flex tw-items-center tw-justify-between">
|
|
2094
2094
|
<div class="tw-flex tw-items-center tw-gap-3">
|
|
2095
2095
|
<div class="tw-p-1.5 tw-bg-amber-500/10 tw-rounded-lg">
|
|
@@ -2104,7 +2104,7 @@ class NotificationSettingsComponent {
|
|
|
2104
2104
|
</div>
|
|
2105
2105
|
|
|
2106
2106
|
@if (settingsForm.get('quietHoursEnabled')?.value) {
|
|
2107
|
-
<div class="tw-grid tw-grid-cols-2 tw-gap-4 tw-pt-2">
|
|
2107
|
+
<div class="tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 tw-gap-3 md:tw-gap-4 tw-pt-2">
|
|
2108
2108
|
<div>
|
|
2109
2109
|
<label class="tw-block tw-text-[10px] tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-mb-1 tw-uppercase">START</label>
|
|
2110
2110
|
<cide-ele-input type="time" formControlName="quietHoursStart"></cide-ele-input>
|
|
@@ -2119,8 +2119,8 @@ class NotificationSettingsComponent {
|
|
|
2119
2119
|
</div>
|
|
2120
2120
|
|
|
2121
2121
|
<!-- Snooze -->
|
|
2122
|
-
<div class="tw-space-y-4">
|
|
2123
|
-
<div class="tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-4">
|
|
2122
|
+
<div class="tw-space-y-3 md:tw-space-y-4">
|
|
2123
|
+
<div class="tw-p-3 md:tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-3 md:tw-space-y-4">
|
|
2124
2124
|
<div class="tw-flex tw-items-center tw-justify-between">
|
|
2125
2125
|
<div class="tw-flex tw-items-center tw-gap-3">
|
|
2126
2126
|
<div class="tw-p-1.5 tw-bg-rose-500/10 tw-rounded-lg">
|
|
@@ -2146,14 +2146,14 @@ class NotificationSettingsComponent {
|
|
|
2146
2146
|
</div>
|
|
2147
2147
|
|
|
2148
2148
|
<!-- Footer Actions -->
|
|
2149
|
-
<div class="tw-flex tw-items-center tw-justify-end tw-gap-3 tw-pt-6 tw-border-t tw-border-[var(--cide-ele-border-primary)]">
|
|
2150
|
-
<button type="button" cideEleButton variant="ghost" (click)="reset()" class="tw-text-[var(--cide-ele-text-secondary)] tw-font-medium">Discard Changes</button>
|
|
2151
|
-
<button type="button" cideEleButton variant="primary" (click)="save()" [disabled]="settingsForm.pristine || settingsForm.invalid" class="tw-px-8 tw-shadow-lg tw-shadow-blue-500/20">Apply Settings</button>
|
|
2149
|
+
<div class="tw-flex tw-flex-col-reverse sm:tw-flex-row tw-items-stretch sm:tw-items-center tw-justify-end tw-gap-2 sm:tw-gap-3 tw-pt-4 md:tw-pt-6 tw-border-t tw-border-[var(--cide-ele-border-primary)]">
|
|
2150
|
+
<button type="button" cideEleButton variant="ghost" (click)="reset()" class="tw-w-full sm:tw-w-auto tw-text-[var(--cide-ele-text-secondary)] tw-font-medium">Discard Changes</button>
|
|
2151
|
+
<button type="button" cideEleButton variant="primary" (click)="save()" [disabled]="settingsForm.pristine || settingsForm.invalid" class="tw-w-full sm:tw-w-auto tw-px-5 md:tw-px-8 tw-shadow-lg tw-shadow-blue-500/20">Apply Settings</button>
|
|
2152
2152
|
</div>
|
|
2153
2153
|
</form>
|
|
2154
2154
|
</div>
|
|
2155
2155
|
|
|
2156
|
-
`, isInline: true, styles: [".volume-slider-container{position:relative;width:100%;--slider-fill: #2563eb;--slider-track: #e5e7eb}:host-context(.dark-mode) .volume-slider-container{--slider-fill: #3b82f6;--slider-track: #374151}.volume-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;outline:none;cursor:pointer;transition:all .2s ease}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#2563eb;cursor:pointer;border:2px solid #ffffff;box-shadow:0 2px 4px #0003;transition:all .2s ease}.volume-slider::-webkit-slider-thumb:hover{background:#1d4ed8;transform:scale(1.1);box-shadow:0 3px 6px #0000004d}:host-context(.dark-mode) .volume-slider::-webkit-slider-thumb{background:#3b82f6;border-color:#1e293b}.volume-slider{background-size:var(--slider-value, 0%) 100%;background-repeat:no-repeat}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated", "adaptive"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }] });
|
|
2156
|
+
`, isInline: true, styles: ["@media (max-width: 768px){.notification-settings-container{max-width:100%}}.volume-slider-container{position:relative;width:100%;--slider-fill: #2563eb;--slider-track: #e5e7eb}:host-context(.dark-mode) .volume-slider-container{--slider-fill: #3b82f6;--slider-track: #374151}.volume-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;outline:none;cursor:pointer;transition:all .2s ease}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#2563eb;cursor:pointer;border:2px solid #ffffff;box-shadow:0 2px 4px #0003;transition:all .2s ease}.volume-slider::-webkit-slider-thumb:hover{background:#1d4ed8;transform:scale(1.1);box-shadow:0 3px 6px #0000004d}:host-context(.dark-mode) .volume-slider::-webkit-slider-thumb{background:#3b82f6;border-color:#1e293b}.volume-slider{background-size:var(--slider-value, 0%) 100%;background-repeat:no-repeat}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated", "adaptive"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }] });
|
|
2157
2157
|
}
|
|
2158
2158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NotificationSettingsComponent, decorators: [{
|
|
2159
2159
|
type: Component,
|
|
@@ -2165,17 +2165,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2165
2165
|
CideInputComponent,
|
|
2166
2166
|
CideSelectComponent
|
|
2167
2167
|
], template: `
|
|
2168
|
-
<div class="notification-settings-container tw-p-6 tw-space-y-6 tw-bg-[var(--cide-ele-bg-primary)] tw-text-[var(--cide-ele-text-primary)]">
|
|
2169
|
-
<form [formGroup]="settingsForm" class="tw-space-y-8">
|
|
2168
|
+
<div class="notification-settings-container tw-p-3 md:tw-p-6 tw-space-y-4 md:tw-space-y-6 tw-bg-[var(--cide-ele-bg-primary)] tw-text-[var(--cide-ele-text-primary)]">
|
|
2169
|
+
<form [formGroup]="settingsForm" class="tw-space-y-5 md:tw-space-y-8">
|
|
2170
2170
|
<!-- Notification Channels -->
|
|
2171
2171
|
<div class="tw-space-y-4">
|
|
2172
|
-
<h4 class="tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-widest">Notification Channels</h4>
|
|
2172
|
+
<h4 class="tw-text-[10px] md:tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-wider md:tw-tracking-widest">Notification Channels</h4>
|
|
2173
2173
|
|
|
2174
|
-
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4">
|
|
2174
|
+
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-2 md:tw-gap-4">
|
|
2175
2175
|
<!-- In-App Notifications -->
|
|
2176
|
-
<div class="tw-flex tw-flex-col tw-justify-between tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2177
|
-
<div class="tw-flex tw-items-center tw-gap-3 tw-mb-4">
|
|
2178
|
-
<div class="tw-p-2 tw-bg-blue-500/10 tw-rounded-lg">
|
|
2176
|
+
<div class="tw-flex tw-flex-col tw-justify-between tw-p-3 md:tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2177
|
+
<div class="tw-flex tw-items-center tw-gap-2 md:tw-gap-3 tw-mb-3 md:tw-mb-4">
|
|
2178
|
+
<div class="tw-p-1.5 md:tw-p-2 tw-bg-blue-500/10 tw-rounded-lg">
|
|
2179
2179
|
<cide-ele-icon class="tw-text-blue-500">notifications</cide-ele-icon>
|
|
2180
2180
|
</div>
|
|
2181
2181
|
<div>
|
|
@@ -2192,9 +2192,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2192
2192
|
</div>
|
|
2193
2193
|
|
|
2194
2194
|
<!-- Email Notifications -->
|
|
2195
|
-
<div class="tw-flex tw-flex-col tw-justify-between tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2196
|
-
<div class="tw-flex tw-items-center tw-gap-3 tw-mb-4">
|
|
2197
|
-
<div class="tw-p-2 tw-bg-purple-500/10 tw-rounded-lg">
|
|
2195
|
+
<div class="tw-flex tw-flex-col tw-justify-between tw-p-3 md:tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2196
|
+
<div class="tw-flex tw-items-center tw-gap-2 md:tw-gap-3 tw-mb-3 md:tw-mb-4">
|
|
2197
|
+
<div class="tw-p-1.5 md:tw-p-2 tw-bg-purple-500/10 tw-rounded-lg">
|
|
2198
2198
|
<cide-ele-icon class="tw-text-purple-500">mail</cide-ele-icon>
|
|
2199
2199
|
</div>
|
|
2200
2200
|
<div>
|
|
@@ -2211,9 +2211,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2211
2211
|
</div>
|
|
2212
2212
|
|
|
2213
2213
|
<!-- SMS Notifications -->
|
|
2214
|
-
<div class="tw-flex tw-flex-col tw-justify-between tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2215
|
-
<div class="tw-flex tw-items-center tw-gap-3 tw-mb-4">
|
|
2216
|
-
<div class="tw-p-2 tw-bg-orange-500/10 tw-rounded-lg">
|
|
2214
|
+
<div class="tw-flex tw-flex-col tw-justify-between tw-p-3 md:tw-p-4 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-xl tw-border tw-border-[var(--cide-ele-border-primary)] hover:tw-border-[var(--cide-ele-border-active)] tw-transition-all">
|
|
2215
|
+
<div class="tw-flex tw-items-center tw-gap-2 md:tw-gap-3 tw-mb-3 md:tw-mb-4">
|
|
2216
|
+
<div class="tw-p-1.5 md:tw-p-2 tw-bg-orange-500/10 tw-rounded-lg">
|
|
2217
2217
|
<cide-ele-icon class="tw-text-orange-500">sms</cide-ele-icon>
|
|
2218
2218
|
</div>
|
|
2219
2219
|
<div>
|
|
@@ -2231,12 +2231,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2231
2231
|
</div>
|
|
2232
2232
|
</div>
|
|
2233
2233
|
|
|
2234
|
-
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-8">
|
|
2234
|
+
<div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 md:tw-gap-8">
|
|
2235
2235
|
<!-- Sound Settings -->
|
|
2236
2236
|
<div class="tw-space-y-4">
|
|
2237
|
-
<h4 class="tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-widest">Sound Preferences</h4>
|
|
2237
|
+
<h4 class="tw-text-[10px] md:tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-wider md:tw-tracking-widest">Sound Preferences</h4>
|
|
2238
2238
|
|
|
2239
|
-
<div class="tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-5">
|
|
2239
|
+
<div class="tw-p-3 md:tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-4 md:tw-space-y-5">
|
|
2240
2240
|
<div class="tw-flex tw-items-center tw-justify-between">
|
|
2241
2241
|
<div class="tw-flex tw-items-center tw-gap-3">
|
|
2242
2242
|
<div class="tw-p-1.5 tw-bg-blue-500/10 tw-rounded-lg">
|
|
@@ -2279,9 +2279,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2279
2279
|
<!-- Schedule & Snooze -->
|
|
2280
2280
|
<div class="tw-space-y-6">
|
|
2281
2281
|
<!-- Quiet Hours -->
|
|
2282
|
-
<div class="tw-space-y-4">
|
|
2283
|
-
<h4 class="tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-widest">Do Not Disturb</h4>
|
|
2284
|
-
<div class="tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-4">
|
|
2282
|
+
<div class="tw-space-y-3 md:tw-space-y-4">
|
|
2283
|
+
<h4 class="tw-text-[10px] md:tw-text-xs tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-uppercase tw-tracking-wider md:tw-tracking-widest">Do Not Disturb</h4>
|
|
2284
|
+
<div class="tw-p-3 md:tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-3 md:tw-space-y-4">
|
|
2285
2285
|
<div class="tw-flex tw-items-center tw-justify-between">
|
|
2286
2286
|
<div class="tw-flex tw-items-center tw-gap-3">
|
|
2287
2287
|
<div class="tw-p-1.5 tw-bg-amber-500/10 tw-rounded-lg">
|
|
@@ -2296,7 +2296,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2296
2296
|
</div>
|
|
2297
2297
|
|
|
2298
2298
|
@if (settingsForm.get('quietHoursEnabled')?.value) {
|
|
2299
|
-
<div class="tw-grid tw-grid-cols-2 tw-gap-4 tw-pt-2">
|
|
2299
|
+
<div class="tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 tw-gap-3 md:tw-gap-4 tw-pt-2">
|
|
2300
2300
|
<div>
|
|
2301
2301
|
<label class="tw-block tw-text-[10px] tw-font-bold tw-text-[var(--cide-ele-text-tertiary)] tw-mb-1 tw-uppercase">START</label>
|
|
2302
2302
|
<cide-ele-input type="time" formControlName="quietHoursStart"></cide-ele-input>
|
|
@@ -2311,8 +2311,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2311
2311
|
</div>
|
|
2312
2312
|
|
|
2313
2313
|
<!-- Snooze -->
|
|
2314
|
-
<div class="tw-space-y-4">
|
|
2315
|
-
<div class="tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-4">
|
|
2314
|
+
<div class="tw-space-y-3 md:tw-space-y-4">
|
|
2315
|
+
<div class="tw-p-3 md:tw-p-5 tw-bg-[var(--cide-ele-bg-secondary)] tw-rounded-2xl tw-border tw-border-[var(--cide-ele-border-primary)] tw-space-y-3 md:tw-space-y-4">
|
|
2316
2316
|
<div class="tw-flex tw-items-center tw-justify-between">
|
|
2317
2317
|
<div class="tw-flex tw-items-center tw-gap-3">
|
|
2318
2318
|
<div class="tw-p-1.5 tw-bg-rose-500/10 tw-rounded-lg">
|
|
@@ -2338,14 +2338,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
2338
2338
|
</div>
|
|
2339
2339
|
|
|
2340
2340
|
<!-- Footer Actions -->
|
|
2341
|
-
<div class="tw-flex tw-items-center tw-justify-end tw-gap-3 tw-pt-6 tw-border-t tw-border-[var(--cide-ele-border-primary)]">
|
|
2342
|
-
<button type="button" cideEleButton variant="ghost" (click)="reset()" class="tw-text-[var(--cide-ele-text-secondary)] tw-font-medium">Discard Changes</button>
|
|
2343
|
-
<button type="button" cideEleButton variant="primary" (click)="save()" [disabled]="settingsForm.pristine || settingsForm.invalid" class="tw-px-8 tw-shadow-lg tw-shadow-blue-500/20">Apply Settings</button>
|
|
2341
|
+
<div class="tw-flex tw-flex-col-reverse sm:tw-flex-row tw-items-stretch sm:tw-items-center tw-justify-end tw-gap-2 sm:tw-gap-3 tw-pt-4 md:tw-pt-6 tw-border-t tw-border-[var(--cide-ele-border-primary)]">
|
|
2342
|
+
<button type="button" cideEleButton variant="ghost" (click)="reset()" class="tw-w-full sm:tw-w-auto tw-text-[var(--cide-ele-text-secondary)] tw-font-medium">Discard Changes</button>
|
|
2343
|
+
<button type="button" cideEleButton variant="primary" (click)="save()" [disabled]="settingsForm.pristine || settingsForm.invalid" class="tw-w-full sm:tw-w-auto tw-px-5 md:tw-px-8 tw-shadow-lg tw-shadow-blue-500/20">Apply Settings</button>
|
|
2344
2344
|
</div>
|
|
2345
2345
|
</form>
|
|
2346
2346
|
</div>
|
|
2347
2347
|
|
|
2348
|
-
`, styles: [".volume-slider-container{position:relative;width:100%;--slider-fill: #2563eb;--slider-track: #e5e7eb}:host-context(.dark-mode) .volume-slider-container{--slider-fill: #3b82f6;--slider-track: #374151}.volume-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;outline:none;cursor:pointer;transition:all .2s ease}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#2563eb;cursor:pointer;border:2px solid #ffffff;box-shadow:0 2px 4px #0003;transition:all .2s ease}.volume-slider::-webkit-slider-thumb:hover{background:#1d4ed8;transform:scale(1.1);box-shadow:0 3px 6px #0000004d}:host-context(.dark-mode) .volume-slider::-webkit-slider-thumb{background:#3b82f6;border-color:#1e293b}.volume-slider{background-size:var(--slider-value, 0%) 100%;background-repeat:no-repeat}\n"] }]
|
|
2348
|
+
`, styles: ["@media (max-width: 768px){.notification-settings-container{max-width:100%}}.volume-slider-container{position:relative;width:100%;--slider-fill: #2563eb;--slider-track: #e5e7eb}:host-context(.dark-mode) .volume-slider-container{--slider-fill: #3b82f6;--slider-track: #374151}.volume-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;outline:none;cursor:pointer;transition:all .2s ease}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#2563eb;cursor:pointer;border:2px solid #ffffff;box-shadow:0 2px 4px #0003;transition:all .2s ease}.volume-slider::-webkit-slider-thumb:hover{background:#1d4ed8;transform:scale(1.1);box-shadow:0 3px 6px #0000004d}:host-context(.dark-mode) .volume-slider::-webkit-slider-thumb{background:#3b82f6;border-color:#1e293b}.volume-slider{background-size:var(--slider-value, 0%) 100%;background-repeat:no-repeat}\n"] }]
|
|
2349
2349
|
}] });
|
|
2350
2350
|
|
|
2351
2351
|
class CideLytHeaderWrapperComponent {
|
|
@@ -5569,8 +5569,8 @@ class CideLytSidedrawerWrapperComponent {
|
|
|
5569
5569
|
}
|
|
5570
5570
|
ngOnInit() {
|
|
5571
5571
|
// Initialize the component map (You'd likely populate this from a config or service)
|
|
5572
|
-
this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-
|
|
5573
|
-
this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-
|
|
5572
|
+
this.componentMap['drowar_notes'] = () => import('./cloud-ide-layout-sidedrawer-notes.component-Hn2nrgKY.mjs').then(m => m.CideLytSidedrawerNotesComponent);
|
|
5573
|
+
this.componentMap['drawer_theme'] = () => import('./cloud-ide-layout-drawer-theme.component-CXPGGtwn.mjs').then(m => m.CideLytDrawerThemeComponent);
|
|
5574
5574
|
}
|
|
5575
5575
|
async loadComponent(configFor) {
|
|
5576
5576
|
console.log('🔍 SIDEDRAWER - Loading component:', configFor, 'Current tab:', this.currentTabId);
|
|
@@ -6974,11 +6974,11 @@ class CideLytSharedWrapperComponent {
|
|
|
6974
6974
|
this.componentContextService.close(fallbackRoute, containerId);
|
|
6975
6975
|
}
|
|
6976
6976
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideLytSharedWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6977
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: CideLytSharedWrapperComponent, isStandalone: true, selector: "cide-lyt-shared-wrapper", inputs: { shared_wrapper_setup_param: { classPropertyName: "shared_wrapper_setup_param", publicName: "shared_wrapper_setup_param", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb_data: { classPropertyName: "breadcrumb_data", publicName: "breadcrumb_data", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "breadcrumb", first: true, predicate: CideEleBreadcrumbComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-max-w-full tw-overflow-hidden\">\n <div\n class=\"tw-sticky tw-w-full tw-max-w-full tw-top-0 tw-z-10 tw-bg-white tw-border-b tw-border-gray-200 tw-shadow-sm\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-1 tw-px-1 tw-py-0 tw-min-w-0 tw-overflow-hidden\">\n <!-- Breadcrumb - Compact on all screens -->\n <div class=\"tw-flex-1 tw-min-w-0 tw-overflow-hidden tw-order-1\">\n <cide-ele-breadcrumb [style]=\"'modern'\" [compact]=\"true\"\n (homeClick)=\"onBreadcrumbHomeClick()\"></cide-ele-breadcrumb>\n </div>\n <!-- Breadcrumb Actions - Inline and compact -->\n <div class=\"tw-w-auto tw-flex-shrink-0 tw-order-2\">\n <ng-content select=\"[breadcrumb-actions]\"></ng-content>\n </div>\n </div>\n\n </div>\n\n <div class=\"tw-flex-1 tw-w-full tw-max-w-full tw-overflow-y-auto tw-overflow-x-hidden tw-min-h-0 tw-pr-1\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [":host{display:block;height:100%;width:100%}:host>div{display:flex;flex-direction:column;height:100%;width:100%}::ng-deep cide-lyt-shared-wrapper{height:100%!important;display:block!important;width:100%!important}@media (max-width: 479px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.5625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center;gap:.1rem!important}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden;text-overflow:ellipsis}}@media (min-width: 480px) and (max-width: 640px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden}}@media (min-width: 641px) and (max-width: 1024px){::ng-deep [breadcrumb-actions]{flex-shrink:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.6875rem;width:100%}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:wrap;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:100%;overflow:visible}}@media (min-width: 1025px){::ng-deep [breadcrumb-actions]{flex-shrink:0;width:auto;margin-top:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.75rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap;align-items:center;gap:.25rem}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:visible}}\n"], dependencies: [{ kind: "component", type: CideEleBreadcrumbComponent, selector: "cide-ele-breadcrumb", inputs: ["items", "style", "separator", "showHomeIcon", "homeIcon", "maxItems", "showDropdownOnOverflow", "dropdownOptions", "clickableItems", "showTooltips", "responsive", "compact", "animated", "loadingInput", "disabled", "contextId", "pageCode"], outputs: ["itemClick", "dropdownOptionClick", "homeClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6977
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: CideLytSharedWrapperComponent, isStandalone: true, selector: "cide-lyt-shared-wrapper", inputs: { shared_wrapper_setup_param: { classPropertyName: "shared_wrapper_setup_param", publicName: "shared_wrapper_setup_param", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb_data: { classPropertyName: "breadcrumb_data", publicName: "breadcrumb_data", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "breadcrumb", first: true, predicate: CideEleBreadcrumbComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-max-w-full tw-overflow-hidden\">\n <div\n class=\"tw-sticky tw-w-full tw-max-w-full tw-top-0 tw-z-10 tw-bg-white tw-border-b tw-border-gray-200 tw-shadow-sm breadcrumb-bar\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-0.5 md:tw-gap-1 tw-px-0.5 md:tw-px-1 tw-py-0 tw-min-w-0 tw-overflow-hidden tw-min-h-[24px] md:tw-min-h-0\">\n <!-- Breadcrumb - Compact on all screens -->\n <div class=\"tw-flex-1 tw-min-w-0 tw-overflow-hidden tw-order-1\">\n <cide-ele-breadcrumb [style]=\"'modern'\" [compact]=\"true\"\n (homeClick)=\"onBreadcrumbHomeClick()\"></cide-ele-breadcrumb>\n </div>\n <!-- Breadcrumb Actions - Inline and compact -->\n <div class=\"tw-w-auto tw-flex-shrink-0 tw-order-2\">\n <ng-content select=\"[breadcrumb-actions]\"></ng-content>\n </div>\n </div>\n\n </div>\n\n <div class=\"tw-flex-1 tw-w-full tw-max-w-full tw-overflow-y-auto tw-overflow-x-hidden tw-min-h-0 tw-pr-1\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [":host{display:block;height:100%;width:100%}:host>div{display:flex;flex-direction:column;height:100%;width:100%}::ng-deep cide-lyt-shared-wrapper{height:100%!important;display:block!important;width:100%!important}@media (max-width: 768px){.breadcrumb-bar{min-height:0}.breadcrumb-bar>div{min-height:22px;padding-top:1px;padding-bottom:1px}}@media (max-width: 479px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.5625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center;gap:.1rem!important}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden;text-overflow:ellipsis}}@media (min-width: 480px) and (max-width: 640px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden}}@media (min-width: 641px) and (max-width: 1024px){::ng-deep [breadcrumb-actions]{flex-shrink:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.6875rem;width:100%}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:wrap;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:100%;overflow:visible}}@media (min-width: 1025px){::ng-deep [breadcrumb-actions]{flex-shrink:0;width:auto;margin-top:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.75rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap;align-items:center;gap:.25rem}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:visible}}\n"], dependencies: [{ kind: "component", type: CideEleBreadcrumbComponent, selector: "cide-ele-breadcrumb", inputs: ["items", "style", "separator", "showHomeIcon", "homeIcon", "maxItems", "showDropdownOnOverflow", "dropdownOptions", "clickableItems", "showTooltips", "responsive", "compact", "animated", "loadingInput", "disabled", "contextId", "pageCode"], outputs: ["itemClick", "dropdownOptionClick", "homeClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6978
6978
|
}
|
|
6979
6979
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideLytSharedWrapperComponent, decorators: [{
|
|
6980
6980
|
type: Component,
|
|
6981
|
-
args: [{ selector: 'cide-lyt-shared-wrapper', standalone: true, imports: [CideEleBreadcrumbComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-max-w-full tw-overflow-hidden\">\n <div\n class=\"tw-sticky tw-w-full tw-max-w-full tw-top-0 tw-z-10 tw-bg-white tw-border-b tw-border-gray-200 tw-shadow-sm\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-1 tw-px-1 tw-py-0 tw-min-w-0 tw-overflow-hidden\">\n <!-- Breadcrumb - Compact on all screens -->\n <div class=\"tw-flex-1 tw-min-w-0 tw-overflow-hidden tw-order-1\">\n <cide-ele-breadcrumb [style]=\"'modern'\" [compact]=\"true\"\n (homeClick)=\"onBreadcrumbHomeClick()\"></cide-ele-breadcrumb>\n </div>\n <!-- Breadcrumb Actions - Inline and compact -->\n <div class=\"tw-w-auto tw-flex-shrink-0 tw-order-2\">\n <ng-content select=\"[breadcrumb-actions]\"></ng-content>\n </div>\n </div>\n\n </div>\n\n <div class=\"tw-flex-1 tw-w-full tw-max-w-full tw-overflow-y-auto tw-overflow-x-hidden tw-min-h-0 tw-pr-1\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [":host{display:block;height:100%;width:100%}:host>div{display:flex;flex-direction:column;height:100%;width:100%}::ng-deep cide-lyt-shared-wrapper{height:100%!important;display:block!important;width:100%!important}@media (max-width: 479px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.5625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center;gap:.1rem!important}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden;text-overflow:ellipsis}}@media (min-width: 480px) and (max-width: 640px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden}}@media (min-width: 641px) and (max-width: 1024px){::ng-deep [breadcrumb-actions]{flex-shrink:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.6875rem;width:100%}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:wrap;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:100%;overflow:visible}}@media (min-width: 1025px){::ng-deep [breadcrumb-actions]{flex-shrink:0;width:auto;margin-top:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.75rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap;align-items:center;gap:.25rem}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:visible}}\n"] }]
|
|
6981
|
+
args: [{ selector: 'cide-lyt-shared-wrapper', standalone: true, imports: [CideEleBreadcrumbComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-max-w-full tw-overflow-hidden\">\n <div\n class=\"tw-sticky tw-w-full tw-max-w-full tw-top-0 tw-z-10 tw-bg-white tw-border-b tw-border-gray-200 tw-shadow-sm breadcrumb-bar\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-0.5 md:tw-gap-1 tw-px-0.5 md:tw-px-1 tw-py-0 tw-min-w-0 tw-overflow-hidden tw-min-h-[24px] md:tw-min-h-0\">\n <!-- Breadcrumb - Compact on all screens -->\n <div class=\"tw-flex-1 tw-min-w-0 tw-overflow-hidden tw-order-1\">\n <cide-ele-breadcrumb [style]=\"'modern'\" [compact]=\"true\"\n (homeClick)=\"onBreadcrumbHomeClick()\"></cide-ele-breadcrumb>\n </div>\n <!-- Breadcrumb Actions - Inline and compact -->\n <div class=\"tw-w-auto tw-flex-shrink-0 tw-order-2\">\n <ng-content select=\"[breadcrumb-actions]\"></ng-content>\n </div>\n </div>\n\n </div>\n\n <div class=\"tw-flex-1 tw-w-full tw-max-w-full tw-overflow-y-auto tw-overflow-x-hidden tw-min-h-0 tw-pr-1\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [":host{display:block;height:100%;width:100%}:host>div{display:flex;flex-direction:column;height:100%;width:100%}::ng-deep cide-lyt-shared-wrapper{height:100%!important;display:block!important;width:100%!important}@media (max-width: 768px){.breadcrumb-bar{min-height:0}.breadcrumb-bar>div{min-height:22px;padding-top:1px;padding-bottom:1px}}@media (max-width: 479px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.5625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center;gap:.1rem!important}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden;text-overflow:ellipsis}}@media (min-width: 480px) and (max-width: 640px){::ng-deep [breadcrumb-actions]{flex-shrink:0;display:flex;justify-content:flex-end;margin-top:0}::ng-deep cide-ele-breadcrumb{font-size:.625rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap!important;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:hidden}}@media (min-width: 641px) and (max-width: 1024px){::ng-deep [breadcrumb-actions]{flex-shrink:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.6875rem;width:100%}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:wrap;align-items:center}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:100%;overflow:visible}}@media (min-width: 1025px){::ng-deep [breadcrumb-actions]{flex-shrink:0;width:auto;margin-top:0;margin-left:1rem}::ng-deep cide-ele-breadcrumb{font-size:.75rem;width:auto}::ng-deep cide-ele-breadcrumb nav ol{flex-wrap:nowrap;align-items:center;gap:.25rem}::ng-deep cide-ele-breadcrumb .breadcrumb-container{width:auto;overflow:visible}}\n"] }]
|
|
6982
6982
|
}], ctorParameters: () => [], propDecorators: { breadcrumb: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CideEleBreadcrumbComponent), { isSignal: true }] }], shared_wrapper_setup_param: [{ type: i0.Input, args: [{ isSignal: true, alias: "shared_wrapper_setup_param", required: false }] }], breadcrumb_data: [{ type: i0.Input, args: [{ isSignal: true, alias: "breadcrumb_data", required: false }] }] } });
|
|
6983
6983
|
|
|
6984
6984
|
/**
|
|
@@ -7301,7 +7301,7 @@ const layoutControlPannelChildRoutes = [{
|
|
|
7301
7301
|
},
|
|
7302
7302
|
{
|
|
7303
7303
|
path: "home",
|
|
7304
|
-
loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-
|
|
7304
|
+
loadComponent: () => import('./cloud-ide-layout-home-wrapper.component-Ck2BJXHI.mjs').then(c => c.CideLytHomeWrapperComponent),
|
|
7305
7305
|
canActivate: [authGuard],
|
|
7306
7306
|
data: {
|
|
7307
7307
|
sypg_page_code: "cide_lyt_home" // Used by RequestService to fetch tab properties
|
|
@@ -7309,7 +7309,7 @@ const layoutControlPannelChildRoutes = [{
|
|
|
7309
7309
|
},
|
|
7310
7310
|
{
|
|
7311
7311
|
path: "dashboard-manager",
|
|
7312
|
-
loadComponent: () => import('./cloud-ide-layout-dashboard-manager.component-
|
|
7312
|
+
loadComponent: () => import('./cloud-ide-layout-dashboard-manager.component-DWI877xM.mjs').then(c => c.DashboardManagerComponent),
|
|
7313
7313
|
canActivate: [authGuard],
|
|
7314
7314
|
data: {
|
|
7315
7315
|
sypg_page_code: "cide_lyt_dashboard_manager"
|
|
@@ -7317,7 +7317,7 @@ const layoutControlPannelChildRoutes = [{
|
|
|
7317
7317
|
},
|
|
7318
7318
|
{
|
|
7319
7319
|
path: "api-endpoint-manager",
|
|
7320
|
-
loadComponent: () => import('./cloud-ide-layout-api-endpoint-manager.component-
|
|
7320
|
+
loadComponent: () => import('./cloud-ide-layout-api-endpoint-manager.component-BoP-1zNl.mjs').then(c => c.ApiEndpointManagerComponent),
|
|
7321
7321
|
canActivate: [authGuard],
|
|
7322
7322
|
data: {
|
|
7323
7323
|
sypg_page_code: "cide_lyt_api_endpoint_manager"
|
|
@@ -9143,4 +9143,4 @@ var floatingEntitySelection_component = /*#__PURE__*/Object.freeze({
|
|
|
9143
9143
|
*/
|
|
9144
9144
|
|
|
9145
9145
|
export { AppStateHelperService as A, CideLytSharedWrapperComponent as C, ENVIRONMENT_CONFIG as E, NotificationSettingsService as N, RightsService as R, CideLytSidebarService as a, CideLytSidedrawerService as b, CideLytThemeService as c, CloudIdeLayoutService as d, CloudIdeLayoutComponent as e, CideLytSharedService as f, ComponentContextService as g, layoutControlPannelChildRoutes as h, CustomRouteReuseStrategy as i, CideLytRequestService as j, AppStateService as k, layoutRoutes as l, CideLytUserStatusService as m, CacheManagerService as n, CideLytFileManagerService as o, processThemeVariable as p, CideLytFloatingEntityRightsSharingComponent as q, CideLytFloatingEntityRightsSharingService as r, setCSSVariable as s, themeFactory as t, CideLytFloatingEntitySelectionComponent as u, CideLytFloatingEntitySelectionService as v };
|
|
9146
|
-
//# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-
|
|
9146
|
+
//# sourceMappingURL=cloud-ide-layout-cloud-ide-layout-CtwH_gd2.mjs.map
|