@c8y/ngx-components 1024.5.1 → 1024.8.3

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 (37) hide show
  1. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-DhfJagxU.mjs → c8y-ngx-components-asset-property-grid.component-Ddva2QJW.mjs} +35 -19
  2. package/fesm2022/c8y-ngx-components-asset-property-grid.component-Ddva2QJW.mjs.map +1 -0
  3. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +28 -14
  4. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  5. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -2
  6. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  7. package/fesm2022/c8y-ngx-components-icon-selector.mjs +1538 -59
  8. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +9 -2
  10. package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +6 -1
  12. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +94 -49
  14. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components.mjs +1 -1
  16. package/locales/de.po +266 -3
  17. package/locales/es.po +266 -3
  18. package/locales/fr.po +266 -3
  19. package/locales/ja_JP.po +265 -3
  20. package/locales/ko.po +266 -3
  21. package/locales/locales.pot +266 -3
  22. package/locales/nl.po +266 -3
  23. package/locales/pl.po +266 -3
  24. package/locales/pt_BR.po +266 -3
  25. package/locales/zh_CN.po +266 -3
  26. package/locales/zh_TW.po +266 -3
  27. package/package.json +1 -1
  28. package/types/c8y-ngx-components-context-dashboard.d.ts +7 -3
  29. package/types/c8y-ngx-components-context-dashboard.d.ts.map +1 -1
  30. package/types/c8y-ngx-components-icon-selector.d.ts +286 -32
  31. package/types/c8y-ngx-components-icon-selector.d.ts.map +1 -1
  32. package/types/c8y-ngx-components-remote-access-data.d.ts +8 -1
  33. package/types/c8y-ngx-components-remote-access-data.d.ts.map +1 -1
  34. package/types/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -1
  35. package/types/c8y-ngx-components-repository-configuration.d.ts +20 -10
  36. package/types/c8y-ngx-components-repository-configuration.d.ts.map +1 -1
  37. package/fesm2022/c8y-ngx-components-asset-property-grid.component-DhfJagxU.mjs.map +0 -1
@@ -1,49 +1,129 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, PipeTransform } from '@angular/core';
3
- import * as i1 from '@c8y/ngx-components';
4
- import { GainsightService } from '@c8y/ngx-components';
5
- import * as i2 from '@angular/forms';
2
+ import { OnInit, OnDestroy, EventEmitter, PipeTransform } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
6
4
  import { ControlValueAccessor } from '@angular/forms';
5
+ import * as i2 from '@c8y/ngx-components';
7
6
  import * as i3 from 'ngx-bootstrap/tooltip';
8
7
  import { Observable, BehaviorSubject } from 'rxjs';
9
- import { DefaultIconDefinition } from '@c8y/ngx-components/icon-selector/model';
8
+ import { gettext } from '@c8y/ngx-components/gettext';
9
+ import { DefaultIconDefinition as DefaultIconDefinition$1 } from '@c8y/ngx-components/icon-selector/model';
10
10
  import { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';
11
- import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';
11
+ import { BsModalService } from 'ngx-bootstrap/modal';
12
+ import { SafeHtml } from '@angular/platform-browser';
13
+ import { CustomIconDefinition, IconFamily, CustomIconSet } from '@c8y/bootstrap';
14
+ export { CustomIconDefinition, CustomIconSet, IconFamily } from '@c8y/bootstrap';
12
15
 
13
- declare class IconSelectorComponent {
16
+ interface DefaultIconDefinition {
17
+ label: string;
18
+ icons: string[][] | ReadonlyArray<ReadonlyArray<string>>;
19
+ }
20
+ declare const PRODUCT_EXPERIENCE_ICON_SELECTOR: {
21
+ EVENTS: {
22
+ ICON_SELECTOR: string;
23
+ };
24
+ COMPONENTS: {
25
+ ICON_SELECTOR_WRAPPER_COMPONENT: string;
26
+ };
27
+ ACTIONS: {
28
+ OPEN_ICON_SELECTOR: string;
29
+ ICON_SELECTED: string;
30
+ };
31
+ };
32
+
33
+ declare class IconSelectorComponent implements OnInit, OnDestroy {
34
+ protected readonly gettext: typeof gettext;
35
+ /** Category labels to hide from the grid. Values are translated category strings (e.g. `gettext('Custom\`icons-category\`')`). */
14
36
  iconCategoriesToExclude: string[];
37
+ /** When true, displays the icon's CSS class name as a label beneath each tile. */
15
38
  showIconClass: boolean;
16
39
  onSelect: EventEmitter<string>;
40
+ /** Highlights the given icon and auto-scrolls to it when changed programmatically after a save. */
17
41
  selectedIcon: SupportedIconsSuggestions;
18
- icons$: Observable<DefaultIconDefinition[]>;
19
- filteredIcons$: Observable<DefaultIconDefinition[]>;
20
- searchTerm$: BehaviorSubject<string>;
21
- selectedIconCategory$: BehaviorSubject<string>;
22
- availableIconCategories$: Observable<string[]>;
42
+ protected readonly icons$: Observable<DefaultIconDefinition$1[]>;
43
+ protected readonly filteredIcons$: Observable<DefaultIconDefinition$1[]>;
44
+ protected readonly availableIconCategories$: Observable<string[]>;
45
+ protected readonly availableIconCategoryItems$: Observable<{
46
+ label: string;
47
+ value: string;
48
+ }[]>;
49
+ protected allCategories: () => string[];
50
+ private allIconNames;
51
+ protected readonly allIconCategory: "All`icons-category`";
52
+ protected readonly searchTerm$: BehaviorSubject<string>;
53
+ protected readonly selectedIconCategory$: BehaviorSubject<string>;
54
+ protected readonly isAdmin: i0.WritableSignal<boolean>;
55
+ protected readonly customIconNames: i0.WritableSignal<Set<string>>;
56
+ protected readonly overriddenIconNames: i0.WritableSignal<Set<string>>;
57
+ protected readonly customCategoryLabels: i0.WritableSignal<Set<string>>;
58
+ protected readonly iconsLoading: i0.WritableSignal<boolean>;
59
+ protected readonly isSaving: i0.WritableSignal<boolean>;
60
+ /** Categories rendered so far; updated in chunks to keep frames short. */
61
+ protected readonly visibleDefinitions: i0.WritableSignal<DefaultIconDefinition$1[]>;
62
+ /** Icons matching the current filter — drives the screen-reader result announcement. */
63
+ protected readonly filteredIconCount: i0.WritableSignal<number>;
64
+ protected readonly hasCustomIcons: i0.Signal<boolean>;
65
+ /** Incremented on each new renderProgressively call to cancel in-flight chunks.
66
+ * Also incremented in ngOnDestroy so any pending setTimeout callbacks self-terminate. */
67
+ private progressiveRenderToken;
68
+ private scrollToIconTimer;
69
+ private readonly customIconsRefresh$;
70
+ private readonly el;
71
+ private readonly permissions;
72
+ private readonly registry;
73
+ private readonly addModal;
74
+ private readonly importModal;
75
+ private readonly modalService;
76
+ private readonly alerts;
77
+ private readonly translate;
23
78
  constructor();
24
- loadIconDefinitions(): Promise<DefaultIconDefinition[]>;
25
- filterIconsByCategoryAndSearchTerm(iconCategories: DefaultIconDefinition[], selectedCategory: string, searchTerm: string): DefaultIconDefinition[];
79
+ ngOnInit(): Promise<void>;
80
+ onResetOverrideClicked(iconName: string): Promise<void>;
81
+ onAddIconClicked(): Promise<void>;
82
+ onEditIconClicked(iconName: string): Promise<void>;
83
+ onDeleteIconClicked(iconName: string): Promise<void>;
84
+ onOverrideIconClicked(icon: ReadonlyArray<string>): Promise<void>;
85
+ onExportClicked(): Promise<void>;
86
+ onImportClicked(): Promise<void>;
26
87
  onSearchChange(searchTerm: string): void;
27
88
  onCategoryFilterChanged(categoryChange: string): void;
28
89
  onIconClicked(icon: ReadonlyArray<string>): void;
90
+ ngOnDestroy(): void;
91
+ /**
92
+ * Renders `definitions` in chunks of 3 categories per `setTimeout(0)` frame.
93
+ * This keeps individual frames short so the browser can paint after each chunk
94
+ * and Angular's change-detection cycles remain cheap (enabling fast modal opens).
95
+ * A token guards against stale chunks from a superseded render (e.g. rapid search).
96
+ */
97
+ private renderProgressively;
98
+ private filterIconsByCategoryAndSearchTerm;
99
+ protected isCustomIcon(iconName: string): boolean;
100
+ protected isIconOverridden(iconName: string): boolean;
101
+ private loadBuiltInDefinitions;
102
+ private syncCustomIconNames;
103
+ private scrollToIcon;
104
+ /** Scrolls the grid to whichever icon currently has [aria-current="true"].
105
+ * Called after a user selects or saves an icon. */
106
+ private scheduleScrollToSelected;
107
+ private triggerDownload;
29
108
  static ɵfac: i0.ɵɵFactoryDeclaration<IconSelectorComponent, never>;
30
109
  static ɵcmp: i0.ɵɵComponentDeclaration<IconSelectorComponent, "c8y-icon-selector", never, { "iconCategoriesToExclude": { "alias": "iconCategoriesToExclude"; "required": false; }; "showIconClass": { "alias": "showIconClass"; "required": false; }; "selectedIcon": { "alias": "selectedIcon"; "required": false; }; }, { "onSelect": "onSelect"; }, never, never, true, never>;
31
110
  }
32
111
 
33
112
  declare class IconSelectorModalComponent {
34
- private bsModal;
35
113
  title: string;
36
- currentSelection: string;
114
+ currentSelection: string | undefined;
115
+ selectionExplicitlySet: boolean;
37
116
  saveButtonLabel: string;
38
117
  iconCategoriesToExclude: string[];
39
118
  showIconClass: boolean;
40
- readonly result: Promise<string>;
119
+ readonly result: Promise<string | undefined>;
41
120
  private save;
42
121
  private cancel;
43
- constructor(bsModal: BsModalRef);
122
+ private readonly bsModal;
123
+ private readonly cdr;
44
124
  close(): void;
45
125
  saveChanges(): void;
46
- selectionChange(newSelection: string): void;
126
+ selectionChange(newSelection: string | undefined): void;
47
127
  static ɵfac: i0.ɵɵFactoryDeclaration<IconSelectorModalComponent, never>;
48
128
  static ɵcmp: i0.ɵɵComponentDeclaration<IconSelectorModalComponent, "c8y-icon-selector-modal", never, {}, {}, never, never, true, never>;
49
129
  }
@@ -54,14 +134,6 @@ declare class IconNamePipe implements PipeTransform {
54
134
  static ɵpipe: i0.ɵɵPipeDeclaration<IconNamePipe, "iconName", true>;
55
135
  }
56
136
 
57
- declare class IconSelectorService {
58
- protected modal: BsModalService;
59
- constructor(modal: BsModalService);
60
- selectIcon(initialState?: Partial<Pick<IconSelectorModalComponent, 'currentSelection' | 'title' | 'saveButtonLabel' | 'iconCategoriesToExclude' | 'showIconClass'>>): Promise<string>;
61
- static ɵfac: i0.ɵɵFactoryDeclaration<IconSelectorService, never>;
62
- static ɵprov: i0.ɵɵInjectableDeclaration<IconSelectorService>;
63
- }
64
-
65
137
  /**
66
138
  * A component which acts as a wrapper for the icon selector.
67
139
  *
@@ -80,8 +152,6 @@ declare class IconSelectorService {
80
152
  * ```
81
153
  */
82
154
  declare class IconSelectorWrapperComponent implements ControlValueAccessor {
83
- private iconSelector;
84
- private gainsightService;
85
155
  canRemoveIcon: boolean;
86
156
  selectedIcon: string;
87
157
  /**
@@ -93,7 +163,9 @@ declare class IconSelectorWrapperComponent implements ControlValueAccessor {
93
163
  * @ignore
94
164
  */
95
165
  onTouched: () => void;
96
- constructor(iconSelector: IconSelectorService, gainsightService: GainsightService);
166
+ private readonly iconSelector;
167
+ private readonly gainsightService;
168
+ private readonly cdr;
97
169
  /**
98
170
  * @ignore
99
171
  */
@@ -121,9 +193,191 @@ declare class IconSelectorWrapperComponent implements ControlValueAccessor {
121
193
 
122
194
  declare class IconSelectorModule {
123
195
  static ɵfac: i0.ɵɵFactoryDeclaration<IconSelectorModule, never>;
124
- static ɵmod: i0.ɵɵNgModuleDeclaration<IconSelectorModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof i1.DropAreaModule, typeof i3.TooltipModule, typeof IconSelectorComponent, typeof IconSelectorModalComponent, typeof IconNamePipe, typeof IconSelectorWrapperComponent], [typeof IconSelectorComponent, typeof IconSelectorModalComponent, typeof IconNamePipe, typeof IconSelectorWrapperComponent]>;
196
+ static ɵmod: i0.ɵɵNgModuleDeclaration<IconSelectorModule, never, [typeof i1.FormsModule, typeof i2.DropAreaModule, typeof i3.TooltipModule, typeof IconSelectorComponent, typeof IconSelectorModalComponent, typeof IconNamePipe, typeof IconSelectorWrapperComponent], [typeof IconSelectorComponent, typeof IconSelectorModalComponent, typeof IconNamePipe, typeof IconSelectorWrapperComponent]>;
125
197
  static ɵinj: i0.ɵɵInjectorDeclaration<IconSelectorModule>;
126
198
  }
127
199
 
128
- export { IconNamePipe, IconSelectorComponent, IconSelectorModalComponent, IconSelectorModule, IconSelectorService, IconSelectorWrapperComponent };
200
+ declare class IconSelectorService {
201
+ protected modal: BsModalService;
202
+ constructor(modal: BsModalService);
203
+ /**
204
+ * Opens the icon selector modal. Resolves with the selected icon CSS class string.
205
+ * Rejects when the user dismisses without selecting.
206
+ */
207
+ selectIcon(initialState?: Partial<Pick<IconSelectorModalComponent, 'currentSelection' | 'title' | 'saveButtonLabel' | 'iconCategoriesToExclude' | 'showIconClass'>>): Promise<string | undefined>;
208
+ static ɵfac: i0.ɵɵFactoryDeclaration<IconSelectorService, never>;
209
+ static ɵprov: i0.ɵɵInjectableDeclaration<IconSelectorService>;
210
+ }
211
+
212
+ type CustomIconModalMode = 'add' | 'edit' | 'override';
213
+ /** Result of SVG validation by SvgSanitizerService. Used before allowing an SVG to render or save. */
214
+ interface SvgValidationResult {
215
+ /** True when no errors were detected. */
216
+ valid: boolean;
217
+ /** Security or structural errors that block the icon from being used. */
218
+ errors: string[];
219
+ /** Non-blocking warnings (e.g. missing viewBox, hardcoded colors). */
220
+ warnings: string[];
221
+ }
222
+ type CustomIconDefinitionToBeSaved = CustomIconDefinition & {
223
+ svgContentPrimary?: string;
224
+ svgContentSecondary?: string;
225
+ };
226
+ /** One row of the import-preview list: icon metadata plus a sanitized SVG preview. */
227
+ interface ImportPreviewIcon {
228
+ name: string;
229
+ category: string;
230
+ family: IconFamily;
231
+ isOverride: boolean;
232
+ /** Sanitized primary SVG, trusted for [innerHTML]. Null when the SVG could not be read. */
233
+ previewHtml: SafeHtml | null;
234
+ /** Sanitized light-layer SVG of duocolor icons, composited over the primary preview. */
235
+ previewHtmlSecondary?: SafeHtml | null;
236
+ }
237
+ /** An icon excluded from an import, with the reason it was skipped. */
238
+ interface SkippedImportIcon extends ImportPreviewIcon {
239
+ reason: 'exists' | 'missingSvg';
240
+ }
241
+
242
+ declare class CustomIconRegistryService {
243
+ /** Reactive signal holding the current set of custom icons. Updates on load, save, delete, or import. */
244
+ readonly icons: i0.WritableSignal<CustomIconDefinition[]>;
245
+ /** True after a successful load — distinguishes "empty icons" from "never loaded or failed". */
246
+ readonly loaded: i0.WritableSignal<boolean>;
247
+ /** Shared load stream: concurrent subscribers join the in-flight request, and the reset
248
+ * flags start a fresh request once the previous one completed or errored. */
249
+ private readonly load$;
250
+ private readonly storage;
251
+ private readonly zip;
252
+ private readonly svgSanitizer;
253
+ private readonly fetch;
254
+ /** lastModified of the manifest as last written or loaded — used as the CSS cache-buster. */
255
+ private lastModified?;
256
+ /** Loads custom icons from storage and injects their CSS into the document.
257
+ * Concurrent calls share the same in-flight request — no duplicate fetches. */
258
+ load(): Promise<void>;
259
+ /** Saves or updates a custom icon (upsert by name + family) and refreshes CSS immediately.
260
+ * Matching on name alone would let e.g. a 'c8y' family entry replace a 'dlt' entry of the
261
+ * same name, silently dropping the other family's CSS rule. */
262
+ saveIcon(def: CustomIconDefinitionToBeSaved): Promise<void>;
263
+ /** Removes a custom icon by name + family, deletes its SVG files from the
264
+ * hosted app and refreshes CSS immediately. */
265
+ deleteIcon(name: string, family: IconFamily): Promise<void>;
266
+ /** Convert custom icons into DefaultIconDefinition[] grouped by category for the selector.
267
+ * Override icons are excluded — they only replace built-in CSS rendering, not add new grid entries. */
268
+ toIconDefinitions(): DefaultIconDefinition$1[];
269
+ /** Exports all custom icons as a ZIP containing icons.json and individual SVG files.
270
+ * Note: SVG content is only available in memory immediately after adding/editing icons.
271
+ * After page reload, icons loaded from storage have no svgContent in memory — those
272
+ * icons will be omitted from the SVG files in the export. */
273
+ exportAsZip(): Promise<Blob>;
274
+ /** Returns a copy of the icon with its SVG content loaded from the hosted app when
275
+ * not in memory — icons loaded from the manifest after a reload are metadata-only.
276
+ * A missing file is non-fatal: the field stays empty and the edit modal falls back
277
+ * to requiring a re-upload. */
278
+ withSvgContent(icon: CustomIconDefinition): Promise<CustomIconDefinitionToBeSaved>;
279
+ downloadSVG(icon: CustomIconDefinition, isSecondary?: boolean): Promise<{
280
+ fileName: string;
281
+ blob: Blob;
282
+ }>;
283
+ /** Imports icons from a ZIP export. Icons whose names already exist are skipped. */
284
+ importFromZip(zipFile: File): Promise<{
285
+ imported: number;
286
+ skipped: string[];
287
+ }>;
288
+ /** Injects CSS built from the in-memory icon set. The manifest is deliberately NOT
289
+ * re-fetched — right after a save the hosted app can still serve the previous
290
+ * version, which would re-inject rules for icons that were just removed. The stored
291
+ * lastModified keeps unchanged icons' cache-busted URLs stable, so the browser cache
292
+ * serves them instead of refetching while a new app version is still propagating. */
293
+ private applyStyles;
294
+ private _doLoad;
295
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomIconRegistryService, never>;
296
+ static ɵprov: i0.ɵɵInjectableDeclaration<CustomIconRegistryService>;
297
+ }
298
+
299
+ declare class CustomIconStorageService {
300
+ private readonly applicationService;
301
+ private readonly appState;
302
+ private readonly fetch;
303
+ private readonly zip;
304
+ /** Fetches the current icon set from the tenant's hosted app. Returns empty set if none exists.
305
+ * An optional fetchFn can be supplied to use global fetch (e.g. from bootstrap before Angular starts)
306
+ * instead of the injected FetchClient. */
307
+ getIconSet(): Promise<CustomIconSet>;
308
+ /** Persists the full icon set to the tenant-owned public-icon-options hosted app.
309
+ * icons.json contains metadata-only icons array + an iconCss map (name → CSS rule).
310
+ * CSS is built once per icon at save time and stored per-entry, so incremental saves
311
+ * only update the changed entry without re-encoding every icon's SVG.
312
+ *
313
+ * `filesToRemove`: SVG file names of deleted icons. The platform has no delete-file
314
+ * API (`updateFiles` only adds or replaces), so when files must go the active binary
315
+ * is rebuilt without them. The manifest is always generated client-side and never
316
+ * read back from the archive — the file-update endpoint repackages asynchronously,
317
+ * so an archive read right after a write can return stale content.
318
+ *
319
+ * @returns the `lastModified` timestamp written to the manifest. */
320
+ saveIconSet(icons: Array<CustomIconDefinitionToBeSaved>, filesToRemove?: string[]): Promise<string>;
321
+ private waitForManifestPropagation;
322
+ /** Rebuilds the app binary from scratch: the static cumulocity.json, the given
323
+ * upserts (fresh manifest + SVGs with in-memory content) and the remaining icons'
324
+ * SVGs fetched individually from the hosted app. The old archive is deliberately
325
+ * never downloaded — the file-update endpoint repackages asynchronously, so a
326
+ * read right after a write can return stale content. Per-file fetches are safe:
327
+ * kept files are unchanged, so any served version returns identical content. */
328
+ private rebuildBinary;
329
+ private ensureApp;
330
+ private findOwnedApp;
331
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomIconStorageService, never>;
332
+ static ɵprov: i0.ɵɵInjectableDeclaration<CustomIconStorageService>;
333
+ }
334
+
335
+ declare class SvgSanitizerService {
336
+ /** Validates SVG content without modifying it. Returns errors (blocking) and warnings (advisory). */
337
+ validate(svgContent: string): SvgValidationResult;
338
+ /** Removes dangerous elements and attributes from SVG using DOMPurify.
339
+ * Output is safe for use with DomSanitizer.bypassSecurityTrustHtml(). */
340
+ sanitize(svgContent: string): string;
341
+ /** Replaces hardcoded fill/stroke colors with `currentColor` so icons adapt to the theme. */
342
+ normalizeColors(svgContent: string): string;
343
+ /** Percent-encodes a sanitized SVG string for use in a CSS `url()` data URI. */
344
+ toDataUri(sanitizedSvg: string): string;
345
+ private normalizeColorsOnNode;
346
+ static ɵfac: i0.ɵɵFactoryDeclaration<SvgSanitizerService, never>;
347
+ static ɵprov: i0.ɵɵInjectableDeclaration<SvgSanitizerService>;
348
+ }
349
+
350
+ interface AddCustomIconModalOptions {
351
+ mode?: CustomIconModalMode;
352
+ editingIcon?: CustomIconDefinition;
353
+ allCategories?: string[];
354
+ /** Built-in + existing custom names to block in the name field. */
355
+ reservedIconNames?: Set<string>;
356
+ }
357
+ declare class AddCustomIconModalService {
358
+ private readonly modal;
359
+ /**
360
+ * Opens the add/edit/override custom icon modal.
361
+ * @returns Resolves with the saved icon definition, or `null` if the user cancelled.
362
+ * The `mode` option controls the modal title and which fields are editable.
363
+ */
364
+ open(options?: AddCustomIconModalOptions): Promise<CustomIconDefinitionToBeSaved | null>;
365
+ static ɵfac: i0.ɵɵFactoryDeclaration<AddCustomIconModalService, never>;
366
+ static ɵprov: i0.ɵɵInjectableDeclaration<AddCustomIconModalService>;
367
+ }
368
+
369
+ declare class ImportCustomIconsModalService {
370
+ private readonly modal;
371
+ /**
372
+ * Opens the import custom icons modal.
373
+ * @returns Resolves to `true` when at least one icon was imported, `false` when the user
374
+ * cancelled or nothing was imported.
375
+ */
376
+ open(): Promise<boolean>;
377
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImportCustomIconsModalService, never>;
378
+ static ɵprov: i0.ɵɵInjectableDeclaration<ImportCustomIconsModalService>;
379
+ }
380
+
381
+ export { AddCustomIconModalService, CustomIconRegistryService, CustomIconStorageService, IconNamePipe, IconSelectorComponent, IconSelectorModalComponent, IconSelectorModule, IconSelectorService, IconSelectorWrapperComponent, ImportCustomIconsModalService, PRODUCT_EXPERIENCE_ICON_SELECTOR, SvgSanitizerService };
382
+ export type { AddCustomIconModalOptions, CustomIconDefinitionToBeSaved, CustomIconModalMode, DefaultIconDefinition, ImportPreviewIcon, SkippedImportIcon, SvgValidationResult };
129
383
  //# sourceMappingURL=c8y-ngx-components-icon-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-icon-selector.d.ts","sources":["../../icon-selector/icon-selector.component.ts","../../icon-selector/icon-selector-modal/icon-selector-modal.component.ts","../../icon-selector/icon-name.pipe.ts","../../icon-selector/icon-selector.service.ts","../../icon-selector/icon-selector-wrapper/icon-selector-wrapper.component.ts","../../icon-selector/icon-selector.module.ts"],"mappings":";;;;;;;;;;;;AAmBA,cAea,qBAAqB;;AAEvB;AACC,cAAQ,YAAA;kBACK,yBAAyB;AAEhD,YAAQ,UAAU,CAAC,qBAAqB;AACxC,oBAAgB,UAAU,CAAC,qBAAqB;AAChD,iBAAW,eAAA;AACX,2BAAqB,eAAA;AACrB,8BAA0B,UAAU;;AAqB9B,2BAAuB,OAAO,CAAC,qBAAqB;AAK1D,uDACkB,qBAAqB,mDAGpC,qBAAqB;;AA0BxB;wBAIoB,aAAa;yCAtEtB,qBAAqB;2CAArB,qBAAqB;AA0EjC;;ACtGD,cAKa,0BAA0B;AAezB;;;;;AAVZ;AAEA,qBAAiB,OAAO;;;AAQJ,yBAAS,UAAU;;AAOvC;;yCAtBW,0BAA0B;2CAA1B,0BAA0B;AA8BtC;;ACvCD,cACa,YAAa,YAAW,aAAa;AAChD;yCADW,YAAY;uCAAZ,YAAY;AAOxB;;ACND,cACa,mBAAmB;qBACD,cAAc;AAArB,uBAAO,cAAc;8BAG3B,OAAO,CACnB,IAAI,CACF,0BAA0B,qGAQ7B,OAAO;yCAdC,mBAAmB;6CAAnB,mBAAmB;AAwB/B;;ACrBD;;;;;;;;;;;;;;;;AAgBG;AACH,cAYa,4BAA6B,YAAW,oBAAoB;AAerE;AACA;AAfO;;AAET;;AAEG;AACM;AACC,cAAU,YAAY;AAEhC;;AAEG;;AAIO,8BAAc,mBAAmB,oBACf,gBAAgB;AAG5C;;AAEG;AAEH;AAEA;;;AAGG;AACH;AAIA;;;AAGG;AACH;AAIA;;;AAGG;AACH;;wBAQsB,OAAA;yCArDX,4BAA4B;2CAA5B,4BAA4B;AAyExC;;ACrGD,cAkBa,kBAAkB;yCAAlB,kBAAkB;0CAAlB,kBAAkB,iBAAA,EAAA,CAAA,YAAA,SAAA,EAAA,CAAA,WAAA,SAAA,EAAA,CAAA,cAAA,SAAA,EAAA,CAAA,aAAA,SAAAA,qBAAA,SAAAC,0BAAA,SAAAC,YAAA,SAAAC,4BAAA,WAAAH,qBAAA,SAAAC,0BAAA,SAAAC,YAAA,SAAAC,4BAAA;0CAAlB,kBAAkB;AAAG;;;;","names":["i4.IconSelectorComponent","i5.IconSelectorModalComponent","i6.IconNamePipe","i7.IconSelectorWrapperComponent"]}
1
+ {"version":3,"file":"c8y-ngx-components-icon-selector.d.ts","sources":["../../icon-selector/model/icon-selector.model.ts","../../icon-selector/icon-selector.component.ts","../../icon-selector/icon-selector-modal/icon-selector-modal.component.ts","../../icon-selector/icon-name.pipe.ts","../../icon-selector/icon-selector-wrapper/icon-selector-wrapper.component.ts","../../icon-selector/icon-selector.module.ts","../../icon-selector/icon-selector.service.ts","../../icon-selector/custom-icon/custom-icon.model.ts","../../icon-selector/custom-icon/custom-icon-registry.service.ts","../../icon-selector/custom-icon/custom-icon-storage.service.ts","../../icon-selector/custom-icon/svg-sanitizer.service.ts","../../icon-selector/custom-icon/add-custom-icon-modal/add-custom-icon-modal.service.ts","../../icon-selector/custom-icon/import-custom-icons-modal/import-custom-icons-modal.service.ts"],"mappings":"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","names":["DefaultIconDefinition","_angular_core","i4.IconSelectorComponent","i5.IconSelectorModalComponent","i6.IconNamePipe","i7.IconSelectorWrapperComponent"]}
@@ -81,8 +81,15 @@ declare class RemoteAccessService {
81
81
  getAuthQueryParamsForWebsocketConnection(): string;
82
82
  /**
83
83
  * Returns the URI for the websocket connection to the remote access service.
84
+ *
85
+ * @param options.supportsHostKeyProbe when true, adds a `supportsHostKeyProbe=true` query parameter
86
+ * telling the backend this UI can render the first-use SSH host-key probe frame (DM-6421). A browser
87
+ * WebSocket cannot send custom headers, so the capability is negotiated via the URL. Older UIs omit
88
+ * it, so its absence keeps the backend on the backward-compatible path (no probe).
84
89
  */
85
- getWebSocketUri<K extends string, I extends string>(deviceId: K, configurationId: I): `ws://${string}/service/remoteaccess/client/${K}/configurations/${I}` | `wss://${string}/service/remoteaccess/client/${K}/configurations/${I}` | `ws://${string}/service/remoteaccess/client/${K}/configurations/${I}?${string}` | `wss://${string}/service/remoteaccess/client/${K}/configurations/${I}?${string}`;
90
+ getWebSocketUri(deviceId: string, configurationId: string, options?: {
91
+ supportsHostKeyProbe?: boolean;
92
+ }): string;
86
93
  /**
87
94
  * Retrieves all configurations for a given device.
88
95
  */
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-remote-access-data.d.ts","sources":["../../remote-access/data/remote-access-protocol-provider.ts","../../remote-access/data/remote-access.service.ts"],"mappings":";;;;;;;UAGiB,4BAA4B;AAC3C;AACA;AACA;AACA,2BAAuB,cAAc;oCAEL,OAAO,CAAC,yBAAyB;AACjE,4DAAwD,yBAAyB,GAAG,OAAO;AAC3F,2DAEyB,yBAAyB,GAC/C,OAAO,CAAC,yBAAyB;AACpC,0DAEiB,yBAAyB,GACvC,OAAO;wCAE0B,OAAO,CAAC,OAAO,CAAC,yBAAyB;AAC9E;;AAID;AAEE;AACE;sCAC4B,4BAA4B;AACvD;AACF;AACF;;UClBgB,yBAAyB;;;;;;;;;AASzC;AAED,cAAa,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9B,cAAa,uBAAuB,EAAE,aAsBrC;AAED,cAGa,mBAAmB;AAK5B;AACA;;;;AADQ,6BAAa,WAAW,mBACP,eAAe;AAG1C;;;AAGG;AACH,oBAAgB,UAAU;AAQ1B;;AAEG;;AAqBH;;AAEG;AACH;AAQA;;AAEG;0CACyC,OAAO,CAAC,yBAAyB;AAW7E;;AAEG;AACG,oEAA6D,OAAA;AAanE;;AAEG;4BACiB,4BAAA;AAIpB;;;AAGG;AACH,6CAAyC,cAAc,GAAG,4BAA4B;AActF;;AAEG;AACG,sDAEW,IAAI,CAAC,yBAAyB,UAC5C,OAAO,CAAC,yBAAyB;AAmBpC;;AAEG;AACG,yDAEW,yBAAyB,GACvC,OAAO,CAAC,yBAAyB;AAmBpC;;;;;;AAMG;AACG,+EAIH,OAAO,CAAC,yBAAyB;AAmBpC;;;;;;;;;AASG;AACG,gCAA4B,OAAO;AAazC;;AAEG;AACG,uCAAmC,OAAO;;;;;yCAxNrC,mBAAmB;6CAAnB,mBAAmB;AAwP/B;;;;","names":[]}
1
+ {"version":3,"file":"c8y-ngx-components-remote-access-data.d.ts","sources":["../../remote-access/data/remote-access-protocol-provider.ts","../../remote-access/data/remote-access.service.ts"],"mappings":";;;;;;;UAGiB,4BAA4B;AAC3C;AACA;AACA;AACA,2BAAuB,cAAc;oCAEL,OAAO,CAAC,yBAAyB;AACjE,4DAAwD,yBAAyB,GAAG,OAAO;AAC3F,2DAEyB,yBAAyB,GAC/C,OAAO,CAAC,yBAAyB;AACpC,0DAEiB,yBAAyB,GACvC,OAAO;wCAE0B,OAAO,CAAC,OAAO,CAAC,yBAAyB;AAC9E;;AAID;AAEE;AACE;sCAC4B,4BAA4B;AACvD;AACF;AACF;;UClBgB,yBAAyB;;;;;;;;;AASzC;AAED,cAAa,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9B,cAAa,uBAAuB,EAAE,aAsBrC;AAED,cAGa,mBAAmB;AAK5B;AACA;;;;AADQ,6BAAa,WAAW,mBACP,eAAe;AAG1C;;;AAGG;AACH,oBAAgB,UAAU;AAQ1B;;AAEG;;AAqBH;;;;;;;AAOG;;;AAI+C;AAUlD;;AAEG;0CACyC,OAAO,CAAC,yBAAyB;AAW7E;;AAEG;AACG,oEAA6D,OAAA;AAanE;;AAEG;4BACiB,4BAAA;AAIpB;;;AAGG;AACH,6CAAyC,cAAc,GAAG,4BAA4B;AActF;;AAEG;AACG,sDAEW,IAAI,CAAC,yBAAyB,UAC5C,OAAO,CAAC,yBAAyB;AAmBpC;;AAEG;AACG,yDAEW,yBAAyB,GACvC,OAAO,CAAC,yBAAyB;AAmBpC;;;;;;AAMG;AACG,+EAIH,OAAO,CAAC,yBAAyB;AAmBpC;;;;;;;;;AASG;AACG,gCAA4B,OAAO;AAazC;;AAEG;AACG,uCAAmC,OAAO;;;;;yCAlOrC,mBAAmB;6CAAnB,mBAAmB;AAkQ/B;;;;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-remote-access-terminal-viewer.d.ts","sources":["../../remote-access/terminal-viewer/terminal-viewer.component.ts"],"mappings":";;;;;;;;AA+BA,cAQa,uBAAwB,YAAW,aAAa,EAAE,SAAS;AAgBpE;AACA;AACA;AACA;AACA;AAnBF;AACA,eAAW,WAAW;AACtB,cAAU,QAAQ;AAClB,YAAQ,SAAS;;yCAEkBA,EAAA,CAAA,cAAA;AACnC;AACA;AACA,wBAAoB,cAAc;;;;AAOxB,8BAAc,mBAAmB,kBACjB,cAAc,gBAChB,YAAY,gBACZ,YAAY,oBACR,gBAAgB;AAM5C;AAKA;;;AAqCA;AAiDA;;;AAoDA;;AA4BA;AAWA;yCAhNW,uBAAuB;2CAAvB,uBAAuB;AAmOnC;;;;","names":["_angular_core"]}
1
+ {"version":3,"file":"c8y-ngx-components-remote-access-terminal-viewer.d.ts","sources":["../../remote-access/terminal-viewer/terminal-viewer.component.ts"],"mappings":";;;;;;;;AA+BA,cAQa,uBAAwB,YAAW,aAAa,EAAE,SAAS;AAgBpE;AACA;AACA;AACA;AACA;AAnBF;AACA,eAAW,WAAW;AACtB,cAAU,QAAQ;AAClB,YAAQ,SAAS;;yCAEkBA,EAAA,CAAA,cAAA;AACnC;AACA;AACA,wBAAoB,cAAc;;;;AAOxB,8BAAc,mBAAmB,kBACjB,cAAc,gBAChB,YAAY,gBACZ,YAAY,oBACR,gBAAgB;AAM5C;AAKA;;;AAqCA;AAqDA;;;AAoDA;;AA4BA;AAWA;yCApNW,uBAAuB;2CAAvB,uBAAuB;AAuOnC;;;;","names":["_angular_core"]}
@@ -6,11 +6,11 @@ import * as i1$1 from '@c8y/ngx-components';
6
6
  import { BottomDrawerService, AlertService, OperationRealtimeService, AppStateService, ActionControl, Column, ServerSideDataCallback, DataSourceModifier, ServerSideDataResult, ForOfFilterPipe, ValidationPattern, TextFilePicked } from '@c8y/ngx-components';
7
7
  import * as i1 from '@c8y/ngx-components/repository/shared';
8
8
  import { DeviceConfigurationOperation, RepositoryService, ConfigurationSnapshot, SupportedConfigurationItem, DeviceConfigurationListEmptyState, ModalModel } from '@c8y/ngx-components/repository/shared';
9
- import { BsModalRef } from 'ngx-bootstrap/modal';
9
+ import { FormGroup, FormControl } from '@angular/forms';
10
10
  import * as Monaco from 'monaco-editor';
11
+ import { BsModalRef } from 'ngx-bootstrap/modal';
11
12
  import * as i2 from '@c8y/ngx-components/operations/operation-details';
12
13
  import * as i3 from 'ngx-bootstrap/tabs';
13
- import { FormGroup, FormControl } from '@angular/forms';
14
14
 
15
15
  declare class DeviceConfigurationService {
16
16
  private bottomDrawerService;
@@ -30,6 +30,11 @@ declare class DeviceConfigurationService {
30
30
  static ɵprov: i0.ɵɵInjectableDeclaration<DeviceConfigurationService>;
31
31
  }
32
32
 
33
+ interface EditorLanguageOption {
34
+ value: string;
35
+ label: string;
36
+ }
37
+
33
38
  declare class TextBasedConfigurationComponent implements OnInit {
34
39
  private route;
35
40
  private alertService;
@@ -37,16 +42,25 @@ declare class TextBasedConfigurationComponent implements OnInit {
37
42
  private deviceConfigurationService;
38
43
  private inventoryService;
39
44
  device: IManagedObject;
40
- latestOperation: IOperation;
41
45
  showTextBasedConfigReload: boolean;
42
46
  showTextBasedConfigSave: boolean;
43
- reloadingConfig: boolean;
44
- config: string;
47
+ readonly reloadingConfig: i0.WritableSignal<boolean>;
48
+ readonly latestOperation: i0.WritableSignal<IOperation>;
49
+ readonly form: FormGroup<{
50
+ config: FormControl<string>;
51
+ language: FormControl<EditorLanguageOption>;
52
+ }>;
53
+ readonly editorLanguages: EditorLanguageOption[];
54
+ private readonly editorLanguageValue;
55
+ readonly editorLanguage: i0.Signal<string>;
56
+ readonly savingConfig: i0.Signal<boolean>;
57
+ readonly editorOptions: i0.Signal<Monaco.editor.IStandaloneEditorConstructionOptions>;
58
+ private readonly destroyRef;
45
59
  constructor(route: ActivatedRoute, alertService: AlertService, repositoryService: RepositoryService, deviceConfigurationService: DeviceConfigurationService, inventoryService: InventoryService);
60
+ get configControl(): FormControl<string>;
46
61
  ngOnInit(): Promise<void>;
47
62
  load(): Promise<void>;
48
63
  loadOperation(): Promise<void>;
49
- get savingConfig(): boolean;
50
64
  reloadConfiguration(): Promise<void>;
51
65
  updateConfiguration(config: any): Promise<void>;
52
66
  private onOperationReloadSuccess;
@@ -231,10 +245,6 @@ declare class ConfigurationListComponent implements OnInit {
231
245
 
232
246
  declare function detectLanguage(filename: string): string;
233
247
  type UploadChoice = 'uploadBinary' | 'uploadUrl' | 'editInline';
234
- interface EditorLanguageOption {
235
- value: string;
236
- label: string;
237
- }
238
248
  declare class ConfigurationDetailComponent implements ModalModel, OnInit {
239
249
  private readonly repositoryService;
240
250
  private readonly bottomDrawerRef;
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-repository-configuration.d.ts","sources":["../../repository/configuration/device-tab/device-configuration.service.ts","../../repository/configuration/device-tab/text-based-configuration.component.ts","../../repository/configuration/device-tab/device-configuration.guard.ts","../../repository/configuration/device-tab/configuration-filter.pipe.ts","../../repository/configuration/device-tab/configuration-preview.component.ts","../../repository/configuration/device-tab/device-configuration.component.ts","../../repository/configuration/device-tab/save-to-repository.component.ts","../../repository/configuration/device-tab/source-code-preview.component.ts","../../repository/configuration/device-tab/device-configuration-list.component.ts","../../repository/configuration/device-tab/configuration-repository-device-tab.module.ts","../../repository/configuration/list/configuration-list.component.ts","../../repository/configuration/list/configuration-detail.component.ts","../../repository/configuration/list/configuration-repository-list.module.ts","../../repository/configuration/configuration-repository.module.ts"],"mappings":"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","names":["i4.DeviceConfigurationComponent","i5.DeviceConfigurationListComponent","i6.ConfigurationPreviewComponent","i7.ConfigurationFilterPipe","i8.SaveToRepositoryComponent","i9.SourceCodePreviewComponent","i10.TextBasedConfigurationComponent","_angular_core","i2.ConfigurationListComponent","i3.ConfigurationDetailComponent","i1","i2.ConfigurationRepositoryListModule","i3.ConfigurationRepositoryDeviceTabModule"]}
1
+ {"version":3,"file":"c8y-ngx-components-repository-configuration.d.ts","sources":["../../repository/configuration/device-tab/device-configuration.service.ts","../../repository/configuration/editor-languages.ts","../../repository/configuration/device-tab/text-based-configuration.component.ts","../../repository/configuration/device-tab/device-configuration.guard.ts","../../repository/configuration/device-tab/configuration-filter.pipe.ts","../../repository/configuration/device-tab/configuration-preview.component.ts","../../repository/configuration/device-tab/device-configuration.component.ts","../../repository/configuration/device-tab/save-to-repository.component.ts","../../repository/configuration/device-tab/source-code-preview.component.ts","../../repository/configuration/device-tab/device-configuration-list.component.ts","../../repository/configuration/device-tab/configuration-repository-device-tab.module.ts","../../repository/configuration/list/configuration-list.component.ts","../../repository/configuration/list/configuration-detail.component.ts","../../repository/configuration/list/configuration-repository-list.module.ts","../../repository/configuration/configuration-repository.module.ts"],"mappings":"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","names":["_angular_core","i4.DeviceConfigurationComponent","i5.DeviceConfigurationListComponent","i6.ConfigurationPreviewComponent","i7.ConfigurationFilterPipe","i8.SaveToRepositoryComponent","i9.SourceCodePreviewComponent","i10.TextBasedConfigurationComponent","i2.ConfigurationListComponent","i3.ConfigurationDetailComponent","i1","i2.ConfigurationRepositoryListModule","i3.ConfigurationRepositoryDeviceTabModule"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-asset-property-grid.component-DhfJagxU.mjs","sources":["../../core/data-grid/configure-custom-column/columns/identifier.cell-renderer.component.ts","../../core/data-grid/configure-custom-column/columns/identifier.data-grid-column.ts","../../core/data-grid/configure-custom-column/columns/tags.cell-renderer.components.ts","../../core/data-grid/configure-custom-column/columns/tags.data-grid-column.ts","../../core/data-grid/configure-custom-column/columns/title.cell-renderer.component.ts","../../core/data-grid/configure-custom-column/columns/title.data-grid-column.ts","../../core/data-grid/configure-custom-column/asset-property-grid.component.ts","../../core/data-grid/configure-custom-column/asset-property-grid.component.html"],"sourcesContent":["import { Component } from '@angular/core';\nimport { CellRendererContext } from '../../column/cell-renderer';\n\n@Component({\n template: ` {{ context.item.id }} `,\n selector: 'c8y-identifier-cell-renderer',\n standalone: true\n})\nexport class IdentifierCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { getBasicInputArrayFormFieldConfig } from '../../../dynamic-forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn } from '../../column/base.column';\nimport { ColumnConfig } from '../../data-grid.model';\nimport { IdentifierCellRendererComponent } from './identifier.cell-renderer.component';\n\nexport class IdentifierGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n\n this.name = 'key';\n this.header = gettext('Key');\n this.cellRendererComponent = IdentifierCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'identifiers',\n label: gettext('Show items with identifier'),\n addText: gettext('Add next`identifier`'),\n placeholder: 'c8y_Position'\n }),\n getFilter(_model) {\n return _model;\n }\n };\n\n this.sortable = false;\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '../../column/cell-renderer';\n\n@Component({\n template: ` {{ context.item.tags }} `,\n selector: 'c8y-tags-cell-renderer',\n standalone: true\n})\nexport class TagsCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { getBasicInputArrayFormFieldConfig } from '../../../dynamic-forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn } from '../../column/base.column';\nimport { ColumnConfig } from '../../data-grid.model';\nimport { TagsCellRendererComponent } from './tags.cell-renderer.components';\n\nexport class TagsGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n\n this.name = 'tags';\n this.header = gettext('Tags');\n this.cellRendererComponent = TagsCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'tags',\n label: gettext('Show items with tags'),\n addText: gettext('Add next`tag`'),\n placeholder: 'tag1'\n }),\n getFilter(_model) {\n return _model;\n }\n };\n\n this.sortable = false;\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '../..';\n\n@Component({\n template: ` {{ context.item.title }} `,\n selector: 'c8y-title-cell-renderer',\n standalone: true\n})\nexport class TitleCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { getBasicInputArrayFormFieldConfig } from '../../../dynamic-forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumn } from '../../column/base.column';\nimport { ColumnConfig } from '../../data-grid.model';\nimport { TitleCellRendererComponent } from './title.cell-renderer.component';\n\nexport class TitleGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n\n this.name = 'title';\n this.header = gettext('Title');\n this.cellRendererComponent = TitleCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'titles',\n label: gettext('Show items with title'),\n addText: gettext('Add next`title`'),\n placeholder: 'location'\n }),\n getFilter(_model) {\n return _model;\n }\n };\n\n this.sortable = false;\n }\n}\n","import { Component, EventEmitter, Output } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { camelCase } from 'lodash-es';\nimport { alertOnError, AlertService } from '../../alert';\nimport {\n AssetPropertyDefinition,\n SchemaNode,\n TreeNode\n} from '../../asset-property/asset-property.model';\nimport { AssetPropertyService } from '../../asset-property/asset-property.service';\nimport { BottomDrawerRef } from '../../bottom-drawer';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { DataGridComponent } from '../data-grid.component';\nimport {\n Column,\n CustomColumnConfig,\n DataSourceModifier,\n DisplayOptions,\n Pagination,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '../data-grid.model';\nimport { IdentifierCellRendererComponent } from './columns/identifier.cell-renderer.component';\nimport { IdentifierGridColumn } from './columns/identifier.data-grid-column';\nimport { TagsCellRendererComponent } from './columns/tags.cell-renderer.components';\nimport { TagsGridColumn } from './columns/tags.data-grid-column';\nimport { TitleCellRendererComponent } from './columns/title.cell-renderer.component';\nimport { TitleGridColumn } from './columns/title.data-grid-column';\n\nconst CHILD_PAGE_SIZE = 5;\nconst ROOT_PAGE_SIZE = 25;\n\n@Component({\n selector: 'c8y-asset-property-grid',\n host: { class: 'd-contents' },\n standalone: true,\n imports: [\n C8yTranslatePipe,\n DataGridComponent,\n IdentifierCellRendererComponent,\n TitleCellRendererComponent,\n TagsCellRendererComponent\n ],\n templateUrl: './asset-property-grid.component.html'\n})\nexport class AssetPropertyGridComponent {\n columns: readonly Column[] = [\n new TitleGridColumn(),\n new IdentifierGridColumn(),\n new TagsGridColumn(),\n {\n name: 'description',\n header: gettext('Description'),\n path: 'description',\n filterable: false,\n sortable: false\n },\n {\n name: 'dataType',\n header: gettext('Data Type'),\n path: 'type',\n filterable: false,\n sortable: false\n }\n ];\n\n pagination: Pagination = { pageSize: ROOT_PAGE_SIZE, currentPage: 1 };\n childNodePagination: Pagination = { pageSize: CHILD_PAGE_SIZE, currentPage: 1 };\n serverSideDataCallback: ServerSideDataCallback = this.onDataSourceModifier.bind(this);\n loadError: string | null = null;\n\n headerActionControls = [];\n\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n\n @Output() onAddCustomColumn = new EventEmitter<CustomColumnConfig>();\n\n constructor(\n private service: AssetPropertyService,\n private bottomDrawerRef: BottomDrawerRef<AssetPropertyGridComponent>,\n private alertService: AlertService\n ) {}\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const { columns, pagination, parentRow } = dataSourceModifier;\n\n if (parentRow) {\n return this.buildChildGridData(parentRow);\n }\n\n const {\n res,\n data = [],\n paging\n } = await alertOnError(this.service.list(this.buildFilter(columns, pagination))).catch(() => {\n this.loadError = gettext('Unable to load asset properties. Please try again later.');\n return {\n res: null,\n data: [],\n paging: null,\n filteredSize: 0,\n size: 0\n };\n });\n\n const treeNodes = data.map(d => this.toTreeNode(d));\n\n return {\n res,\n data: treeNodes,\n paging,\n filteredSize: paging?.totalElements,\n size: paging?.totalElements\n };\n }\n\n async selectItem(identifiers: string[]) {\n if (this.bottomDrawerRef) {\n this.bottomDrawerRef.close();\n }\n this.addColumn(identifiers[0]);\n }\n\n async addColumn(path: string): Promise<void> {\n const [parentId, childKey] = path.split('.');\n try {\n const def = await this.service.getByIdentifier(parentId);\n const childSchema = def.jsonSchema?.properties?.[childKey];\n\n const header = childSchema?.title || childKey || def.jsonSchema?.title;\n\n this.onAddCustomColumn.emit({\n name: camelCase(path),\n header,\n path,\n type: 'property',\n custom: true,\n visible: true\n });\n } catch (err) {\n this.alertService.addServerFailure(err);\n }\n }\n\n close(): void {\n this.bottomDrawerRef?.close();\n }\n\n private buildChildGridData(parentRow) {\n const children = parentRow.children ?? [];\n const currentPage = parentRow.pagination?.currentPage ?? 1;\n\n const start = (currentPage - 1) * CHILD_PAGE_SIZE;\n const data = children.slice(start, start + CHILD_PAGE_SIZE);\n const totalPages = Math.ceil(children.length / CHILD_PAGE_SIZE);\n\n return {\n data,\n filteredSize: children.length,\n size: children.length,\n paging: {\n currentPage,\n pageSize: CHILD_PAGE_SIZE,\n totalPages,\n totalElements: children.length,\n nextPage: currentPage < totalPages ? currentPage + 1 : null,\n prevPage: currentPage > 1 ? currentPage - 1 : null\n },\n parentRow\n } as ServerSideDataResult;\n }\n\n private buildFilter(columns: Column[], pagination: Pagination) {\n const predicates = columns\n .filter(column => column.filterable && column.externalFilterQuery)\n .reduce((acc, column) => ({ ...acc, ...column.externalFilterQuery }), {});\n\n return { currentPage: pagination.currentPage, pageSize: pagination.pageSize, ...predicates };\n }\n\n private toTreeNode({ identifier, jsonSchema = {}, tags }: AssetPropertyDefinition): TreeNode {\n const { title, description, type, properties } = jsonSchema;\n\n return {\n id: identifier,\n title: title ?? identifier,\n description,\n type,\n tags,\n children: this.mapSchema(properties, identifier),\n hasChildren: !!properties\n };\n }\n\n private mapSchema(props: Record<string, SchemaNode> | undefined, base = ''): TreeNode[] {\n if (!props) return [];\n\n return Object.entries(props).map(([key, schema]) => {\n const id = base ? `${base}.${key}` : key;\n const children = this.mapSchema(schema.properties, id);\n return {\n id,\n title: schema.title ?? key,\n description: schema.description,\n type: schema.type,\n children,\n hasChildren: children.length > 0\n };\n });\n }\n}\n","<div class=\"card-block flex-no-shrink separator-bottom col-xs-12 large-padding p-t-24 p-b-24\">\n <div\n class=\"h4 text-center text-medium\"\n id=\"drawerTitle\"\n translate\n >\n Add custom column\n </div>\n</div>\n<c8y-data-grid\n class=\"min-height-0 flex-grow d-col\"\n [title]=\"'Asset properties' | translate\"\n [loadMoreItemsLabel]=\"'Load more asset properties' | translate\"\n [loadingItemsLabel]=\"'Loading asset properties…' | translate\"\n [displayOptions]=\"displayOptions\"\n [headerActionControls]=\"headerActionControls\"\n [columns]=\"columns\"\n [treeGrid]=\"true\"\n [childNodePagination]=\"childNodePagination\"\n parentNodeLabelProperty=\"title\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [selectable]=\"true\"\n [singleSelection]=\"true\"\n (itemsSelect)=\"selectItem($event)\"\n></c8y-data-grid>\n<div class=\"card-footer p-24 separator text-center\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ ' Cancel' | translate }}\n </button>\n</div>\n"],"names":["i1.CellRendererContext","i1.AssetPropertyService","i2.BottomDrawerRef","i3.AlertService"],"mappings":"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"}