cloud-ide-layout 1.0.38 → 1.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (15) hide show
  1. package/fesm2022/{cloud-ide-layout-cloud-ide-layout-DtCgDYTS.mjs → cloud-ide-layout-cloud-ide-layout-0JoVgmO5.mjs} +242 -15
  2. package/fesm2022/cloud-ide-layout-cloud-ide-layout-0JoVgmO5.mjs.map +1 -0
  3. package/fesm2022/{cloud-ide-layout-drawer-theme.component-B66faUTx.mjs → cloud-ide-layout-drawer-theme.component-m0CGyRGb.mjs} +2 -2
  4. package/fesm2022/{cloud-ide-layout-drawer-theme.component-B66faUTx.mjs.map → cloud-ide-layout-drawer-theme.component-m0CGyRGb.mjs.map} +1 -1
  5. package/fesm2022/cloud-ide-layout-floating-entity-selection.component-DEY8ONSW.mjs +130 -0
  6. package/fesm2022/cloud-ide-layout-floating-entity-selection.component-DEY8ONSW.mjs.map +1 -0
  7. package/fesm2022/{cloud-ide-layout-home-wrapper.component-CghUKtmf.mjs → cloud-ide-layout-home-wrapper.component-lE-U3-5G.mjs} +2 -2
  8. package/fesm2022/{cloud-ide-layout-home-wrapper.component-CghUKtmf.mjs.map → cloud-ide-layout-home-wrapper.component-lE-U3-5G.mjs.map} +1 -1
  9. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-3lcKuski.mjs → cloud-ide-layout-sidedrawer-notes.component-Dw-aN66C.mjs} +2 -2
  10. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-3lcKuski.mjs.map → cloud-ide-layout-sidedrawer-notes.component-Dw-aN66C.mjs.map} +1 -1
  11. package/fesm2022/cloud-ide-layout.mjs +1 -1
  12. package/package.json +1 -1
  13. package/fesm2022/cloud-ide-layout-cloud-ide-layout-DtCgDYTS.mjs.map +0 -1
  14. package/fesm2022/cloud-ide-layout-floating-entity-selection.component-DYX0p5so.mjs +0 -517
  15. package/fesm2022/cloud-ide-layout-floating-entity-selection.component-DYX0p5so.mjs.map +0 -1
@@ -1,517 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { CideEleFloatingContainerService, CideEleButtonComponent, CideIconComponent, CideSpinnerComponent, CideEleFileImageDirective } from 'cloud-ide-element';
5
- import { CideCoreEntityManagementService } from 'cloud-ide-core';
6
- import { e as AppStateService } from './cloud-ide-layout-cloud-ide-layout-DtCgDYTS.mjs';
7
- import { firstValueFrom } from 'rxjs';
8
-
9
- class CideLytFloatingEntitySelectionComponent {
10
- // Service injections
11
- entityService = inject(CideCoreEntityManagementService);
12
- appStateService = inject(AppStateService);
13
- floatingContainerService = inject(CideEleFloatingContainerService);
14
- // Signals
15
- entities = signal([], ...(ngDevMode ? [{ debugName: "entities" }] : []));
16
- loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
17
- // Computed hierarchy
18
- entityHierarchy = computed(() => this.buildHierarchy(this.entities()), ...(ngDevMode ? [{ debugName: "entityHierarchy" }] : []));
19
- // Expanded state for tree view
20
- expandedEntities = signal(new Set(), ...(ngDevMode ? [{ debugName: "expandedEntities" }] : []));
21
- ngOnInit() {
22
- this.loadEntities();
23
- }
24
- /**
25
- * Build hierarchical structure from flat entity list
26
- */
27
- buildHierarchy(entities) {
28
- const entityMap = new Map();
29
- const rootEntities = [];
30
- // First pass: create hierarchy objects
31
- entities.forEach(entity => {
32
- entityMap.set(entity._id || '', {
33
- ...entity,
34
- children: [],
35
- level: 0,
36
- isExpanded: false
37
- });
38
- });
39
- // Second pass: build parent-child relationships
40
- entities.forEach(entity => {
41
- const hierarchyEntity = entityMap.get(entity._id || '');
42
- if (!hierarchyEntity)
43
- return;
44
- if (entity.syen_id_syen && entityMap.has(entity.syen_id_syen)) {
45
- // This entity has a parent
46
- const parent = entityMap.get(entity.syen_id_syen);
47
- if (parent) {
48
- parent.children.push(hierarchyEntity);
49
- hierarchyEntity.level = parent.level + 1;
50
- }
51
- }
52
- else {
53
- // This is a root entity
54
- rootEntities.push(hierarchyEntity);
55
- }
56
- });
57
- return rootEntities;
58
- }
59
- /**
60
- * Load entities from API
61
- */
62
- async loadEntities() {
63
- try {
64
- this.loading.set(true);
65
- const response = await firstValueFrom(this.entityService.getEntityList({}));
66
- console.log('🔍 Entities response:', response);
67
- if (response?.data) {
68
- // Convert the response data to EntityHierarchy format
69
- const hierarchyEntities = response.data.map(entity => ({
70
- _id: entity._id,
71
- syen_name: entity.syen_name,
72
- syen_entity_code: entity.syen_entity_code,
73
- syen_isactive: entity.syen_isactive,
74
- syen_photo_id_cyfm: entity.syen_photo_id_cyfm,
75
- syen_id_syen: entity.syen_id_syen,
76
- children: [],
77
- level: 0,
78
- isExpanded: false,
79
- entity_type_details: entity.entity_type_details
80
- }));
81
- this.entities.set(hierarchyEntities);
82
- }
83
- }
84
- catch (error) {
85
- console.error('Error loading entities:', error);
86
- }
87
- finally {
88
- this.loading.set(false);
89
- }
90
- }
91
- /**
92
- * Check if entity is currently active
93
- */
94
- isCurrentEntity(entityId) {
95
- const currentEntity = this.appStateService.activeEntity();
96
- return currentEntity?._id === entityId;
97
- }
98
- /**
99
- * Toggle entity expansion state
100
- */
101
- toggleExpansion(entityId) {
102
- const expanded = this.expandedEntities();
103
- if (expanded.has(entityId)) {
104
- expanded.delete(entityId);
105
- }
106
- else {
107
- expanded.add(entityId);
108
- }
109
- this.expandedEntities.set(new Set(expanded));
110
- }
111
- /**
112
- * Check if entity is expanded
113
- */
114
- isExpanded(entityId) {
115
- return this.expandedEntities().has(entityId);
116
- }
117
- /**
118
- * Select an entity
119
- */
120
- selectEntity(entity) {
121
- console.log('🏢 Selected entity:', entity);
122
- this.appStateService.setActiveEntity(entity);
123
- this.closeContainer();
124
- }
125
- /**
126
- * Cancel selection
127
- */
128
- onCancel() {
129
- console.log('❌ Entity selection cancelled');
130
- this.closeContainer();
131
- }
132
- /**
133
- * Close floating container
134
- */
135
- closeContainer() {
136
- this.floatingContainerService.hideAll();
137
- }
138
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytFloatingEntitySelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
139
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytFloatingEntitySelectionComponent, isStandalone: true, selector: "cide-lyt-floating-entity-selection", ngImport: i0, template: `
140
- <!-- Entity Selection Content -->
141
- <div class="tw-flex tw-flex-col tw-h-full">
142
- <!-- Main Content Area -->
143
- <div class="tw-flex-1 tw-p-4 tw-overflow-y-auto tw-scrollbar-thin tw-scrollbar-thumb-gray-300 tw-scrollbar-track-transparent tw-select-none tw-bg-gray-100">
144
- @if (loading()) {
145
- <div class="tw-flex tw-items-center tw-justify-center tw-py-6">
146
- <cide-ele-spinner size="sm"></cide-ele-spinner>
147
- <span class="tw-ml-3 tw-text-gray-600 tw-text-sm">Loading entities...</span>
148
- </div>
149
- } @else if (entityHierarchy().length === 0) {
150
- <div class="tw-text-center tw-py-6">
151
- <div class="tw-w-10 tw-h-10 tw-bg-gray-100 tw-rounded-xl tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-2">
152
- <cide-ele-icon class="tw-w-5 tw-h-5 tw-text-gray-400">business</cide-ele-icon>
153
- </div>
154
- <p class="tw-text-gray-500 tw-text-sm">No entities available</p>
155
- </div>
156
- } @else {
157
- <div class="tw-space-y-3">
158
- @for (entity of entityHierarchy(); track entity._id) {
159
- <ng-container>
160
- <!-- Root Entity Card -->
161
- <div class="tw-relative">
162
- <!-- Root Entity Card -->
163
- <div class="tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-blue-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48 tw-mx-auto"
164
- [class.tw-border-blue-500]="isCurrentEntity(entity._id || '')"
165
- [class.tw-bg-blue-50]="isCurrentEntity(entity._id || '')"
166
- (click)="selectEntity(entity)">
167
- <div class="tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2">
168
- <!-- Entity Image -->
169
- <div class="tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200">
170
- @if (entity.syen_photo_id_cyfm) {
171
- <img cideEleFileImage
172
- [fileId]="entity.syen_photo_id_cyfm"
173
- [altText]="'Entity Logo'"
174
- class="tw-w-full tw-h-full tw-object-cover tw-rounded-full">
175
- } @else {
176
- <cide-ele-icon class="tw-text-gray-600 tw-w-5 tw-h-5">business</cide-ele-icon>
177
- }
178
- </div>
179
-
180
- <!-- Entity Info -->
181
- <div class="tw-w-full">
182
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
183
- <h4 class="tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900">{{ entity.syen_name }}</h4>
184
- @if (isCurrentEntity(entity._id || '')) {
185
- <div class="tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800">
186
- <cide-ele-icon class="tw-w-5 tw-h-4">check_circle</cide-ele-icon>
187
- <span class="tw-ml-0.5">Current</span>
188
- </div>
189
- }
190
- </div>
191
-
192
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
193
- <cide-ele-icon class="tw-text-gray-500 tw-w-5 tw-h-4">code</cide-ele-icon>
194
- <span class="tw-text-xs tw-text-gray-600">{{ entity.syen_entity_code }}</span>
195
- </div>
196
-
197
- @if (entity.entity_type_details) {
198
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
199
- <div class="tw-w-1.5 tw-h-1.5 tw-bg-blue-500 tw-rounded-full"></div>
200
- <span class="tw-text-xs tw-text-blue-600 tw-font-medium">{{ entity.entity_type_details.sygms_title }}</span>
201
- </div>
202
- }
203
-
204
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2">
205
- @if (entity.syen_isactive) {
206
- <cide-ele-icon class="tw-text-green-500 tw-w-5 tw-h-4">check_circle</cide-ele-icon>
207
- <span class="tw-text-xs tw-text-green-600 tw-font-medium">Active</span>
208
- } @else {
209
- <cide-ele-icon class="tw-text-red-400 tw-w-5 tw-h-4">block</cide-ele-icon>
210
- <span class="tw-text-xs tw-text-red-500 tw-font-medium">Inactive</span>
211
- }
212
- </div>
213
-
214
- @if (entity.children && entity.children.length > 0) {
215
- <button class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200"
216
- (click)="toggleExpansion(entity._id || ''); $event.stopPropagation()">
217
- <span>{{ entity.children.length }} entities</span>
218
- <cide-ele-icon class="tw-w-5 tw-h-4 tw-transition-transform tw-duration-200"
219
- [class.tw-rotate-180]="isExpanded(entity._id || '')">expand_more</cide-ele-icon>
220
- </button>
221
- }
222
- </div>
223
- </div>
224
- </div>
225
-
226
- <!-- Curved Connection Lines -->
227
- @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {
228
- <div class="tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500"></div>
229
- <div class="tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-20 tw-h-px tw-bg-blue-500 tw-mt-4"></div>
230
- }
231
- </div>
232
-
233
- <!-- Children Row -->
234
- @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {
235
- <div class="tw-flex tw-justify-center tw-space-x-4 tw-mt-4">
236
- @for (child of entity.children; track child._id) {
237
- <div class="tw-relative">
238
- <!-- Vertical Line from Parent -->
239
- <div class="tw-absolute tw-top-0 tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500 tw--mt-4"></div>
240
-
241
- <!-- Child Entity Card -->
242
- <div class="tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-orange-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48"
243
- [class.tw-border-orange-500]="isCurrentEntity(child._id || '')"
244
- [class.tw-bg-orange-50]="isCurrentEntity(child._id || '')"
245
- (click)="selectEntity(child)">
246
- <div class="tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2">
247
- <!-- Child Entity Image -->
248
- <div class="tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200">
249
- @if (child.syen_photo_id_cyfm) {
250
- <img cideEleFileImage
251
- [fileId]="child.syen_photo_id_cyfm"
252
- [altText]="'Entity Logo'"
253
- class="tw-w-full tw-h-full tw-object-cover tw-rounded-full">
254
- } @else {
255
- <cide-ele-icon class="tw-text-gray-600 tw-w-5 tw-h-5">business</cide-ele-icon>
256
- }
257
- </div>
258
-
259
- <!-- Child Entity Info -->
260
- <div class="tw-w-full">
261
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
262
- <h4 class="tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900">{{ child.syen_name }}</h4>
263
- @if (isCurrentEntity(child._id || '')) {
264
- <div class="tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800">
265
- <cide-ele-icon class="tw-w-5 tw-h-4">check_circle</cide-ele-icon>
266
- <span class="tw-ml-0.5">Current</span>
267
- </div>
268
- }
269
- </div>
270
-
271
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
272
- <cide-ele-icon class="tw-text-gray-500 tw-w-5 tw-h-4">code</cide-ele-icon>
273
- <span class="tw-text-xs tw-text-gray-600">{{ child.syen_entity_code }}</span>
274
- </div>
275
-
276
- @if (child.entity_type_details) {
277
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
278
- <div class="tw-w-1.5 tw-h-1.5 tw-bg-orange-500 tw-rounded-full"></div>
279
- <span class="tw-text-xs tw-text-orange-600 tw-font-medium">{{ child.entity_type_details.sygms_title }}</span>
280
- </div>
281
- }
282
-
283
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2">
284
- @if (child.syen_isactive) {
285
- <cide-ele-icon class="tw-text-green-500 tw-w-5 tw-h-4">check_circle</cide-ele-icon>
286
- <span class="tw-text-xs tw-text-green-600 tw-font-medium">Active</span>
287
- } @else {
288
- <cide-ele-icon class="tw-text-red-400 tw-w-5 tw-h-4">block</cide-ele-icon>
289
- <span class="tw-text-xs tw-text-red-500 tw-font-medium">Inactive</span>
290
- }
291
- </div>
292
-
293
- @if (child.children && child.children.length > 0) {
294
- <button class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200"
295
- (click)="toggleExpansion(child._id || ''); $event.stopPropagation()">
296
- <span>{{ child.children.length }} entities</span>
297
- <cide-ele-icon class="tw-w-5 tw-h-4 tw-transition-transform tw-duration-200"
298
- [class.tw-rotate-180]="isExpanded(child._id || '')">expand_more</cide-ele-icon>
299
- </button>
300
- }
301
- </div>
302
- </div>
303
- </div>
304
- </div>
305
- }
306
- </div>
307
- }
308
- </ng-container>
309
- }
310
- </div>
311
- }
312
- </div>
313
-
314
- <!-- Fixed Footer -->
315
- <div class="tw-bg-white tw-px-4 tw-py-3 tw-border-t tw-border-gray-300 tw-flex tw-justify-end tw-space-x-2 tw-flex-shrink-0">
316
- <button cideEleButton variant="secondary" size="xs" type="button" (click)="onCancel()">
317
- Cancel
318
- </button>
319
- </div>
320
- </div>
321
- `, isInline: true, styles: [".tw-dashed{border-style:dashed}.tw-bg-gray-300{background-color:#d1d5db}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideSpinnerComponent, selector: "cide-ele-spinner", inputs: ["size", "type"] }, { kind: "directive", type: CideEleFileImageDirective, selector: "[cideEleFileImage]", inputs: ["fileId", "altText"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
322
- }
323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytFloatingEntitySelectionComponent, decorators: [{
324
- type: Component,
325
- args: [{ selector: 'cide-lyt-floating-entity-selection', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
326
- CommonModule,
327
- CideEleButtonComponent,
328
- CideIconComponent,
329
- CideSpinnerComponent,
330
- CideEleFileImageDirective
331
- ], template: `
332
- <!-- Entity Selection Content -->
333
- <div class="tw-flex tw-flex-col tw-h-full">
334
- <!-- Main Content Area -->
335
- <div class="tw-flex-1 tw-p-4 tw-overflow-y-auto tw-scrollbar-thin tw-scrollbar-thumb-gray-300 tw-scrollbar-track-transparent tw-select-none tw-bg-gray-100">
336
- @if (loading()) {
337
- <div class="tw-flex tw-items-center tw-justify-center tw-py-6">
338
- <cide-ele-spinner size="sm"></cide-ele-spinner>
339
- <span class="tw-ml-3 tw-text-gray-600 tw-text-sm">Loading entities...</span>
340
- </div>
341
- } @else if (entityHierarchy().length === 0) {
342
- <div class="tw-text-center tw-py-6">
343
- <div class="tw-w-10 tw-h-10 tw-bg-gray-100 tw-rounded-xl tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-2">
344
- <cide-ele-icon class="tw-w-5 tw-h-5 tw-text-gray-400">business</cide-ele-icon>
345
- </div>
346
- <p class="tw-text-gray-500 tw-text-sm">No entities available</p>
347
- </div>
348
- } @else {
349
- <div class="tw-space-y-3">
350
- @for (entity of entityHierarchy(); track entity._id) {
351
- <ng-container>
352
- <!-- Root Entity Card -->
353
- <div class="tw-relative">
354
- <!-- Root Entity Card -->
355
- <div class="tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-blue-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48 tw-mx-auto"
356
- [class.tw-border-blue-500]="isCurrentEntity(entity._id || '')"
357
- [class.tw-bg-blue-50]="isCurrentEntity(entity._id || '')"
358
- (click)="selectEntity(entity)">
359
- <div class="tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2">
360
- <!-- Entity Image -->
361
- <div class="tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200">
362
- @if (entity.syen_photo_id_cyfm) {
363
- <img cideEleFileImage
364
- [fileId]="entity.syen_photo_id_cyfm"
365
- [altText]="'Entity Logo'"
366
- class="tw-w-full tw-h-full tw-object-cover tw-rounded-full">
367
- } @else {
368
- <cide-ele-icon class="tw-text-gray-600 tw-w-5 tw-h-5">business</cide-ele-icon>
369
- }
370
- </div>
371
-
372
- <!-- Entity Info -->
373
- <div class="tw-w-full">
374
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
375
- <h4 class="tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900">{{ entity.syen_name }}</h4>
376
- @if (isCurrentEntity(entity._id || '')) {
377
- <div class="tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800">
378
- <cide-ele-icon class="tw-w-5 tw-h-4">check_circle</cide-ele-icon>
379
- <span class="tw-ml-0.5">Current</span>
380
- </div>
381
- }
382
- </div>
383
-
384
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
385
- <cide-ele-icon class="tw-text-gray-500 tw-w-5 tw-h-4">code</cide-ele-icon>
386
- <span class="tw-text-xs tw-text-gray-600">{{ entity.syen_entity_code }}</span>
387
- </div>
388
-
389
- @if (entity.entity_type_details) {
390
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
391
- <div class="tw-w-1.5 tw-h-1.5 tw-bg-blue-500 tw-rounded-full"></div>
392
- <span class="tw-text-xs tw-text-blue-600 tw-font-medium">{{ entity.entity_type_details.sygms_title }}</span>
393
- </div>
394
- }
395
-
396
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2">
397
- @if (entity.syen_isactive) {
398
- <cide-ele-icon class="tw-text-green-500 tw-w-5 tw-h-4">check_circle</cide-ele-icon>
399
- <span class="tw-text-xs tw-text-green-600 tw-font-medium">Active</span>
400
- } @else {
401
- <cide-ele-icon class="tw-text-red-400 tw-w-5 tw-h-4">block</cide-ele-icon>
402
- <span class="tw-text-xs tw-text-red-500 tw-font-medium">Inactive</span>
403
- }
404
- </div>
405
-
406
- @if (entity.children && entity.children.length > 0) {
407
- <button class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200"
408
- (click)="toggleExpansion(entity._id || ''); $event.stopPropagation()">
409
- <span>{{ entity.children.length }} entities</span>
410
- <cide-ele-icon class="tw-w-5 tw-h-4 tw-transition-transform tw-duration-200"
411
- [class.tw-rotate-180]="isExpanded(entity._id || '')">expand_more</cide-ele-icon>
412
- </button>
413
- }
414
- </div>
415
- </div>
416
- </div>
417
-
418
- <!-- Curved Connection Lines -->
419
- @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {
420
- <div class="tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500"></div>
421
- <div class="tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-20 tw-h-px tw-bg-blue-500 tw-mt-4"></div>
422
- }
423
- </div>
424
-
425
- <!-- Children Row -->
426
- @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {
427
- <div class="tw-flex tw-justify-center tw-space-x-4 tw-mt-4">
428
- @for (child of entity.children; track child._id) {
429
- <div class="tw-relative">
430
- <!-- Vertical Line from Parent -->
431
- <div class="tw-absolute tw-top-0 tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500 tw--mt-4"></div>
432
-
433
- <!-- Child Entity Card -->
434
- <div class="tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-orange-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48"
435
- [class.tw-border-orange-500]="isCurrentEntity(child._id || '')"
436
- [class.tw-bg-orange-50]="isCurrentEntity(child._id || '')"
437
- (click)="selectEntity(child)">
438
- <div class="tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2">
439
- <!-- Child Entity Image -->
440
- <div class="tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200">
441
- @if (child.syen_photo_id_cyfm) {
442
- <img cideEleFileImage
443
- [fileId]="child.syen_photo_id_cyfm"
444
- [altText]="'Entity Logo'"
445
- class="tw-w-full tw-h-full tw-object-cover tw-rounded-full">
446
- } @else {
447
- <cide-ele-icon class="tw-text-gray-600 tw-w-5 tw-h-5">business</cide-ele-icon>
448
- }
449
- </div>
450
-
451
- <!-- Child Entity Info -->
452
- <div class="tw-w-full">
453
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
454
- <h4 class="tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900">{{ child.syen_name }}</h4>
455
- @if (isCurrentEntity(child._id || '')) {
456
- <div class="tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800">
457
- <cide-ele-icon class="tw-w-5 tw-h-4">check_circle</cide-ele-icon>
458
- <span class="tw-ml-0.5">Current</span>
459
- </div>
460
- }
461
- </div>
462
-
463
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
464
- <cide-ele-icon class="tw-text-gray-500 tw-w-5 tw-h-4">code</cide-ele-icon>
465
- <span class="tw-text-xs tw-text-gray-600">{{ child.syen_entity_code }}</span>
466
- </div>
467
-
468
- @if (child.entity_type_details) {
469
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1">
470
- <div class="tw-w-1.5 tw-h-1.5 tw-bg-orange-500 tw-rounded-full"></div>
471
- <span class="tw-text-xs tw-text-orange-600 tw-font-medium">{{ child.entity_type_details.sygms_title }}</span>
472
- </div>
473
- }
474
-
475
- <div class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2">
476
- @if (child.syen_isactive) {
477
- <cide-ele-icon class="tw-text-green-500 tw-w-5 tw-h-4">check_circle</cide-ele-icon>
478
- <span class="tw-text-xs tw-text-green-600 tw-font-medium">Active</span>
479
- } @else {
480
- <cide-ele-icon class="tw-text-red-400 tw-w-5 tw-h-4">block</cide-ele-icon>
481
- <span class="tw-text-xs tw-text-red-500 tw-font-medium">Inactive</span>
482
- }
483
- </div>
484
-
485
- @if (child.children && child.children.length > 0) {
486
- <button class="tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200"
487
- (click)="toggleExpansion(child._id || ''); $event.stopPropagation()">
488
- <span>{{ child.children.length }} entities</span>
489
- <cide-ele-icon class="tw-w-5 tw-h-4 tw-transition-transform tw-duration-200"
490
- [class.tw-rotate-180]="isExpanded(child._id || '')">expand_more</cide-ele-icon>
491
- </button>
492
- }
493
- </div>
494
- </div>
495
- </div>
496
- </div>
497
- }
498
- </div>
499
- }
500
- </ng-container>
501
- }
502
- </div>
503
- }
504
- </div>
505
-
506
- <!-- Fixed Footer -->
507
- <div class="tw-bg-white tw-px-4 tw-py-3 tw-border-t tw-border-gray-300 tw-flex tw-justify-end tw-space-x-2 tw-flex-shrink-0">
508
- <button cideEleButton variant="secondary" size="xs" type="button" (click)="onCancel()">
509
- Cancel
510
- </button>
511
- </div>
512
- </div>
513
- `, styles: [".tw-dashed{border-style:dashed}.tw-bg-gray-300{background-color:#d1d5db}\n"] }]
514
- }] });
515
-
516
- export { CideLytFloatingEntitySelectionComponent };
517
- //# sourceMappingURL=cloud-ide-layout-floating-entity-selection.component-DYX0p5so.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloud-ide-layout-floating-entity-selection.component-DYX0p5so.mjs","sources":["../../../projects/cloud-ide-layout/src/lib/components/floating-entity-selection/floating-entity-selection.component.ts"],"sourcesContent":["import { Component, OnInit, inject, signal, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CideEleButtonComponent } from 'cloud-ide-element';\nimport { CideIconComponent } from 'cloud-ide-element';\nimport { CideSpinnerComponent } from 'cloud-ide-element';\nimport { CideEleFileImageDirective } from 'cloud-ide-element';\nimport { CideCoreEntityManagementService } from 'cloud-ide-core';\nimport { AppStateService } from '../../services/app-state/app-state.service';\nimport { CideEleFloatingContainerService } from 'cloud-ide-element';\nimport { firstValueFrom } from 'rxjs';\n\n// Interface for hierarchical entity structure\ninterface EntityHierarchy {\n _id?: string;\n syen_name?: string;\n syen_entity_code?: string;\n syen_isactive?: boolean;\n syen_photo_id_cyfm?: string;\n syen_id_syen?: string;\n children: EntityHierarchy[];\n level: number;\n isExpanded?: boolean;\n entity_type_details?: {\n _id: string;\n sygms_title: string;\n sygms_code: string;\n };\n}\n\n@Component({\n selector: 'cide-lyt-floating-entity-selection',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n CideEleButtonComponent,\n CideIconComponent,\n CideSpinnerComponent,\n CideEleFileImageDirective\n ],\n template: `\n <!-- Entity Selection Content -->\n <div class=\"tw-flex tw-flex-col tw-h-full\">\n <!-- Main Content Area -->\n <div class=\"tw-flex-1 tw-p-4 tw-overflow-y-auto tw-scrollbar-thin tw-scrollbar-thumb-gray-300 tw-scrollbar-track-transparent tw-select-none tw-bg-gray-100\">\n @if (loading()) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-6\">\n <cide-ele-spinner size=\"sm\"></cide-ele-spinner>\n <span class=\"tw-ml-3 tw-text-gray-600 tw-text-sm\">Loading entities...</span>\n </div>\n } @else if (entityHierarchy().length === 0) {\n <div class=\"tw-text-center tw-py-6\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-gray-100 tw-rounded-xl tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-2\">\n <cide-ele-icon class=\"tw-w-5 tw-h-5 tw-text-gray-400\">business</cide-ele-icon>\n </div>\n <p class=\"tw-text-gray-500 tw-text-sm\">No entities available</p>\n </div>\n } @else {\n <div class=\"tw-space-y-3\">\n @for (entity of entityHierarchy(); track entity._id) {\n <ng-container>\n <!-- Root Entity Card -->\n <div class=\"tw-relative\">\n <!-- Root Entity Card -->\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-blue-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48 tw-mx-auto\"\n [class.tw-border-blue-500]=\"isCurrentEntity(entity._id || '')\"\n [class.tw-bg-blue-50]=\"isCurrentEntity(entity._id || '')\"\n (click)=\"selectEntity(entity)\">\n <div class=\"tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2\">\n <!-- Entity Image -->\n <div class=\"tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200\">\n @if (entity.syen_photo_id_cyfm) {\n <img cideEleFileImage \n [fileId]=\"entity.syen_photo_id_cyfm\"\n [altText]=\"'Entity Logo'\"\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n } @else {\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n }\n </div>\n \n <!-- Entity Info -->\n <div class=\"tw-w-full\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <h4 class=\"tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900\">{{ entity.syen_name }}</h4>\n @if (isCurrentEntity(entity._id || '')) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <cide-ele-icon class=\"tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-ml-0.5\">Current</span>\n </div>\n }\n </div>\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <cide-ele-icon class=\"tw-text-gray-500 tw-w-5 tw-h-4\">code</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-gray-600\">{{ entity.syen_entity_code }}</span>\n </div>\n \n @if (entity.entity_type_details) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-blue-500 tw-rounded-full\"></div>\n <span class=\"tw-text-xs tw-text-blue-600 tw-font-medium\">{{ entity.entity_type_details.sygms_title }}</span>\n </div>\n }\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2\">\n @if (entity.syen_isactive) {\n <cide-ele-icon class=\"tw-text-green-500 tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-medium\">Active</span>\n } @else {\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-4\">block</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-red-500 tw-font-medium\">Inactive</span>\n }\n </div>\n \n @if (entity.children && entity.children.length > 0) {\n <button class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200\"\n (click)=\"toggleExpansion(entity._id || ''); $event.stopPropagation()\">\n <span>{{ entity.children.length }} entities</span>\n <cide-ele-icon class=\"tw-w-5 tw-h-4 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-180]=\"isExpanded(entity._id || '')\">expand_more</cide-ele-icon>\n </button>\n }\n </div>\n </div>\n </div>\n \n <!-- Curved Connection Lines -->\n @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {\n <div class=\"tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500\"></div>\n <div class=\"tw-absolute tw-top-full tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-20 tw-h-px tw-bg-blue-500 tw-mt-4\"></div>\n }\n </div>\n \n <!-- Children Row -->\n @if (entity.children && entity.children.length > 0 && isExpanded(entity._id || '')) {\n <div class=\"tw-flex tw-justify-center tw-space-x-4 tw-mt-4\">\n @for (child of entity.children; track child._id) {\n <div class=\"tw-relative\">\n <!-- Vertical Line from Parent -->\n <div class=\"tw-absolute tw-top-0 tw-left-1/2 tw-transform tw--translate-x-1/2 tw-w-px tw-h-4 tw-bg-blue-500 tw--mt-4\"></div>\n \n <!-- Child Entity Card -->\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-orange-400 hover:tw-scale-[1.01] tw-select-none tw-shadow-sm tw-w-48\"\n [class.tw-border-orange-500]=\"isCurrentEntity(child._id || '')\"\n [class.tw-bg-orange-50]=\"isCurrentEntity(child._id || '')\"\n (click)=\"selectEntity(child)\">\n <div class=\"tw-flex tw-flex-col tw-items-center tw-text-center tw-space-y-2\">\n <!-- Child Entity Image -->\n <div class=\"tw-w-10 tw-h-10 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0 tw-bg-gray-100 tw-overflow-hidden tw-border tw-border-gray-200\">\n @if (child.syen_photo_id_cyfm) {\n <img cideEleFileImage \n [fileId]=\"child.syen_photo_id_cyfm\"\n [altText]=\"'Entity Logo'\"\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-full\">\n } @else {\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-5 tw-h-5\">business</cide-ele-icon>\n }\n </div>\n \n <!-- Child Entity Info -->\n <div class=\"tw-w-full\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <h4 class=\"tw-text-xs tw-font-semibold tw-truncate tw-text-gray-900\">{{ child.syen_name }}</h4>\n @if (isCurrentEntity(child._id || '')) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <cide-ele-icon class=\"tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-ml-0.5\">Current</span>\n </div>\n }\n </div>\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <cide-ele-icon class=\"tw-text-gray-500 tw-w-5 tw-h-4\">code</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-gray-600\">{{ child.syen_entity_code }}</span>\n </div>\n \n @if (child.entity_type_details) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-orange-500 tw-rounded-full\"></div>\n <span class=\"tw-text-xs tw-text-orange-600 tw-font-medium\">{{ child.entity_type_details.sygms_title }}</span>\n </div>\n }\n \n <div class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-mb-2\">\n @if (child.syen_isactive) {\n <cide-ele-icon class=\"tw-text-green-500 tw-w-5 tw-h-4\">check_circle</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-medium\">Active</span>\n } @else {\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-4\">block</cide-ele-icon>\n <span class=\"tw-text-xs tw-text-red-500 tw-font-medium\">Inactive</span>\n }\n </div>\n \n @if (child.children && child.children.length > 0) {\n <button class=\"tw-flex tw-items-center tw-justify-center tw-space-x-1 tw-text-xs tw-text-gray-500 hover:tw-text-gray-700 tw-transition-colors tw-w-full tw-py-1 tw-border-t tw-border-gray-200\"\n (click)=\"toggleExpansion(child._id || ''); $event.stopPropagation()\">\n <span>{{ child.children.length }} entities</span>\n <cide-ele-icon class=\"tw-w-5 tw-h-4 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-180]=\"isExpanded(child._id || '')\">expand_more</cide-ele-icon>\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </ng-container>\n }\n </div>\n }\n </div>\n \n <!-- Fixed Footer -->\n <div class=\"tw-bg-white tw-px-4 tw-py-3 tw-border-t tw-border-gray-300 tw-flex tw-justify-end tw-space-x-2 tw-flex-shrink-0\">\n <button cideEleButton variant=\"secondary\" size=\"xs\" type=\"button\" (click)=\"onCancel()\">\n Cancel\n </button>\n </div>\n </div>\n `,\n styles: [`\n .tw-dashed {\n border-style: dashed;\n }\n .tw-bg-gray-300 {\n background-color: #d1d5db;\n }\n `]\n})\nexport class CideLytFloatingEntitySelectionComponent implements OnInit {\n // Service injections\n private entityService = inject(CideCoreEntityManagementService);\n private appStateService = inject(AppStateService);\n private floatingContainerService = inject(CideEleFloatingContainerService);\n\n // Signals\n entities = signal<EntityHierarchy[]>([]);\n loading = signal<boolean>(true);\n \n // Computed hierarchy\n entityHierarchy = computed(() => this.buildHierarchy(this.entities()));\n \n // Expanded state for tree view\n expandedEntities = signal<Set<string>>(new Set());\n\n ngOnInit() {\n this.loadEntities();\n }\n\n /**\n * Build hierarchical structure from flat entity list\n */\n private buildHierarchy(entities: EntityHierarchy[]): EntityHierarchy[] {\n const entityMap = new Map<string, EntityHierarchy>();\n const rootEntities: EntityHierarchy[] = [];\n\n // First pass: create hierarchy objects\n entities.forEach(entity => {\n entityMap.set(entity._id || '', {\n ...entity,\n children: [],\n level: 0,\n isExpanded: false\n });\n });\n\n // Second pass: build parent-child relationships\n entities.forEach(entity => {\n const hierarchyEntity = entityMap.get(entity._id || '');\n if (!hierarchyEntity) return;\n\n if (entity.syen_id_syen && entityMap.has(entity.syen_id_syen)) {\n // This entity has a parent\n const parent = entityMap.get(entity.syen_id_syen);\n if (parent) {\n parent.children.push(hierarchyEntity);\n hierarchyEntity.level = parent.level + 1;\n }\n } else {\n // This is a root entity\n rootEntities.push(hierarchyEntity);\n }\n });\n\n return rootEntities;\n }\n\n /**\n * Load entities from API\n */\n private async loadEntities(): Promise<void> {\n try {\n this.loading.set(true);\n const response = await firstValueFrom(this.entityService.getEntityList({}));\n console.log('🔍 Entities response:', response);\n if (response?.data) {\n // Convert the response data to EntityHierarchy format\n const hierarchyEntities: EntityHierarchy[] = response.data.map(entity => ({\n _id: entity._id,\n syen_name: entity.syen_name,\n syen_entity_code: entity.syen_entity_code,\n syen_isactive: entity.syen_isactive,\n syen_photo_id_cyfm: entity.syen_photo_id_cyfm,\n syen_id_syen: entity.syen_id_syen,\n children: [],\n level: 0,\n isExpanded: false,\n entity_type_details: (entity as any).entity_type_details\n }));\n this.entities.set(hierarchyEntities);\n }\n } catch (error) {\n console.error('Error loading entities:', error);\n } finally {\n this.loading.set(false);\n }\n }\n\n /**\n * Check if entity is currently active\n */\n isCurrentEntity(entityId: string): boolean {\n const currentEntity = this.appStateService.activeEntity();\n return currentEntity?._id === entityId;\n }\n\n /**\n * Toggle entity expansion state\n */\n toggleExpansion(entityId: string): void {\n const expanded = this.expandedEntities();\n if (expanded.has(entityId)) {\n expanded.delete(entityId);\n } else {\n expanded.add(entityId);\n }\n this.expandedEntities.set(new Set(expanded));\n }\n\n /**\n * Check if entity is expanded\n */\n isExpanded(entityId: string): boolean {\n return this.expandedEntities().has(entityId);\n }\n\n /**\n * Select an entity\n */\n selectEntity(entity: EntityHierarchy): void {\n console.log('🏢 Selected entity:', entity);\n this.appStateService.setActiveEntity(entity);\n this.closeContainer();\n }\n\n /**\n * Cancel selection\n */\n onCancel(): void {\n console.log('❌ Entity selection cancelled');\n this.closeContainer();\n }\n\n /**\n * Close floating container\n */\n private closeContainer(): void {\n this.floatingContainerService.hideAll();\n }\n}"],"names":[],"mappings":"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"}