@c8y/ngx-components 1024.2.4 → 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 (71) 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-bookmarks.mjs +33 -23
  4. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  5. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +30 -16
  6. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  7. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +3 -2
  8. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -2
  10. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-device-profile.mjs +27 -9
  12. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-icon-selector.mjs +1538 -59
  14. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +9 -11
  16. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +52 -2
  18. package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +17 -3
  20. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +184 -41
  22. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +94 -49
  24. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +5 -4
  26. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-repository-software.mjs +10 -4
  28. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +5 -4
  30. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +6 -5
  32. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components.mjs +10 -5
  34. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  35. package/locales/de.po +327 -8
  36. package/locales/es.po +327 -8
  37. package/locales/fr.po +327 -8
  38. package/locales/ja_JP.po +325 -9
  39. package/locales/ko.po +327 -8
  40. package/locales/locales.pot +326 -7
  41. package/locales/nl.po +327 -8
  42. package/locales/pl.po +327 -8
  43. package/locales/pt_BR.po +327 -8
  44. package/locales/zh_CN.po +327 -8
  45. package/locales/zh_TW.po +327 -8
  46. package/package.json +1 -1
  47. package/types/c8y-ngx-components-bookmarks.d.ts +7 -7
  48. package/types/c8y-ngx-components-bookmarks.d.ts.map +1 -1
  49. package/types/c8y-ngx-components-context-dashboard.d.ts +7 -3
  50. package/types/c8y-ngx-components-context-dashboard.d.ts.map +1 -1
  51. package/types/c8y-ngx-components-device-profile.d.ts +5 -2
  52. package/types/c8y-ngx-components-device-profile.d.ts.map +1 -1
  53. package/types/c8y-ngx-components-icon-selector.d.ts +286 -32
  54. package/types/c8y-ngx-components-icon-selector.d.ts.map +1 -1
  55. package/types/c8y-ngx-components-protocol-opcua.d.ts.map +1 -1
  56. package/types/c8y-ngx-components-remote-access-data.d.ts +27 -1
  57. package/types/c8y-ngx-components-remote-access-data.d.ts.map +1 -1
  58. package/types/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts +10 -3
  59. package/types/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts.map +1 -1
  60. package/types/c8y-ngx-components-remote-access-terminal-viewer.d.ts +20 -2
  61. package/types/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -1
  62. package/types/c8y-ngx-components-repository-configuration.d.ts +20 -10
  63. package/types/c8y-ngx-components-repository-configuration.d.ts.map +1 -1
  64. package/types/c8y-ngx-components-repository-firmware.d.ts.map +1 -1
  65. package/types/c8y-ngx-components-repository-software.d.ts +2 -0
  66. package/types/c8y-ngx-components-repository-software.d.ts.map +1 -1
  67. package/types/c8y-ngx-components-trusted-certificates.d.ts.map +1 -1
  68. package/types/c8y-ngx-components-widgets-implementations-asset-table.d.ts.map +1 -1
  69. package/types/c8y-ngx-components.d.ts +5 -1
  70. package/types/c8y-ngx-components.d.ts.map +1 -1
  71. 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":";;;;;;;;;;;;;;;UAAiB,qBAAqB;;AAEpC,wBAAoB,aAAa,CAAC,aAAa;AAChD;AAED,cAAa,gCAAgC;;;;;;;;;;;;;ACkD7C,cAkBa,qBAAsB,YAAW,MAAM,EAAE,SAAS;AAE7D,uCAA0B,OAAA;;;;AAKjB;AACC,cAAQ,YAAA;;kBAEK,yBAAyB;+BAEpB,UAAU,CAACA,uBAAqB;uCACxB,UAAU,CAACA,uBAAqB;iDACtB,UAAU;AACxD,oDAAiD,UAAU;;;AAAiC;AAC5F;;AAGA;AACA,oCAA8B,eAAA;AAC9B,8CAAwC,eAAA;AAExC,gCAA0BC,EAAA,CAAA,cAAA;AAC1B,wCAAkCA,EAAA,CAAA,cAAA,CAAA,GAAA;AAClC,4CAAsCA,EAAA,CAAA,cAAA,CAAA,GAAA;AACtC,6CAAuCA,EAAA,CAAA,cAAA,CAAA,GAAA;AACvC,qCAA+BA,EAAA,CAAA,cAAA;AAC/B,iCAA2BA,EAAA,CAAA,cAAA;;AAE3B,2CAAqCA,EAAA,CAAA,cAAA,CAAAD,uBAAA;;AAErC,0CAAoCC,EAAA,CAAA,cAAA;AACpC,uCAAiCA,EAAA,CAAA,MAAA;AAEjC;AACyF;;;AAOzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAsFM,gBAAY,OAAO;8CAgBuB,OAAO;AA0BjD,wBAAoB,OAAO;yCAqBU,OAAO;2CA0BL,OAAO;gCAyBlB,aAAa,WAAW,OAAO;AA+B3D,uBAAmB,OAAO;AAS1B,uBAAmB,OAAO;AAahC;AAIA;wBAIoB,aAAa;AAKjC;AAMA;;;;;AAKG;AACH;AA8BA;AAuBA;AAIA;;AASA;AAeA;AAMA;AACmD;AACnD;AAeA;yCAjbW,qBAAqB;2CAArB,qBAAqB;AAybjC;;AC5fD,cAMa,0BAA0B;;AAErC;AACA;;;AAGA;qBAEiB,OAAO;;;AAQxB;AACA;;AAOA;AAMA;yCA9BW,0BAA0B;2CAA1B,0BAA0B;AAmCtC;;AC7CD,cACa,YAAa,YAAW,aAAa;AAChD;yCADW,YAAY;uCAAZ,YAAY;AAOxB;;ACMD;;;;;;;;;;;;;;;;AAgBG;AAGH,cAaa,4BAA6B,YAAW,oBAAoB;AAC9D;;AAET;;AAEG;AACM;AACC,cAAU,YAAY;AAEhC;;AAEG;;AAGH;AACA;AACA;AAEA;;AAEG;AAEH;AAEA;;;AAGG;AACH;AAKA;;;AAGG;AACH;AAIA;;;AAGG;AACH;;wBAQsB,OAAA;yCArDX,4BAA4B;2CAA5B,4BAA4B;AA0ExC;;ACjHD,cAiBa,kBAAkB;yCAAlB,kBAAkB;0CAAlB,kBAAkB,iBAAA,EAAA,CAAA,WAAA,SAAA,EAAA,CAAA,cAAA,SAAA,EAAA,CAAA,aAAA,SAAAC,qBAAA,SAAAC,0BAAA,SAAAC,YAAA,SAAAC,4BAAA,WAAAH,qBAAA,SAAAC,0BAAA,SAAAC,YAAA,SAAAC,4BAAA;0CAAlB,kBAAkB;AAAG;;ACtBlC,cACa,mBAAmB;qBACD,cAAc;AAArB,uBAAO,cAAc;AAE3C;;;AAGG;8BAEa,OAAO,CACnB,IAAI,CACF,0BAA0B,qGAQ7B,OAAO;yCAlBC,mBAAmB;6CAAnB,mBAAmB;AA4B/B;;AC5BK,KAAM,mBAAmB;AAE/B;UACiB,mBAAmB;;;;;;;AAOnC;AAEK,KAAM,6BAA6B,GAAG,oBAAoB;;;;AAKhE;UACiB,iBAAiB;;;YAGxB,UAAU;;;AAGlB,iBAAa,QAAQ;;AAErB,2BAAuB,QAAQ;AAChC;AAED;AACM,UAAW,iBAAkB,SAAQ,iBAAiB;AAC1D;AACD;;ACfD,cACa,yBAAyB;;oBAEtBJ,EAAA,CAAA,cAAA,CAAA,oBAAA;;qBAECA,EAAA,CAAA,cAAA;AACf;AAC6E;AAC7E;AASA;AACA;AACA;AACA;;;AAIA;AAC+E;AAC/E,YAAQ,OAAO;AAIf;;AAE+D;kBAC3C,6BAA6B,GAAG,OAAO;AAU3D;AAC+C;AACzC,qCAAiC,UAAU,GAAG,OAAO;AAkB3D;AACuG;yBAClFD,uBAAqB;AAa1C;;;AAG6D;AACvD,mBAAe,OAAO,CAAC,IAAI;AA6CjC;;;AAG+B;yBACJ,oBAAoB,GAAG,OAAO,CAAC,6BAA6B;sBAkB/E,oBAAoB,0BAEzB,OAAO;;cAA2B,IAAI;;;AAYnC,2BAAuB,IAAI,GAAG,OAAO;;;;AA8D3C;;;;AAIqF;AACrF;;yCArOW,yBAAyB;6CAAzB,yBAAyB;AA+OrC;;ACrOD,cACa,wBAAwB;AACnC;AACA;AACA;AACA;AAEA;;AAE0C;AACpC,kBAAc,OAAO,CAAC,aAAa;AAIzC;;;;;;;;;;;AAWoE;AAC9D,uBACG,KAAK,CAAC,6BAA6B,8BAEzC,OAAO;;AAuFV;;;;;AAKgF;;;;yCAxHrE,wBAAwB;6CAAxB,wBAAwB;AAyMpC;;ACrMD,cACa,mBAAmB;;AAE9B,kCAA8B,mBAAmB;AAyEjD;AACyE;AACzE;;AAKA;;AAYA;AAIA;yCAlGW,mBAAmB;6CAAnB,mBAAmB;AA6G/B;;UC3IgB,yBAAyB;WACjC,mBAAmB;kBACZ,oBAAoB;AAClC;;AAEA,wBAAoB,GAAG;AACxB;AAED,cACa,yBAAyB;AACpC;AAEA;;;;AAIG;mBACW,yBAA8B,GAAG,OAAO,CAAC,6BAA6B;yCARzE,yBAAyB;6CAAzB,yBAAyB;AAuBrC;;ACrCD,cACa,6BAA6B;AACxC;AAEA;;;;AAIG;AACH,YAAQ,OAAO;yCARJ,6BAA6B;6CAA7B,6BAA6B;AAgBzC;;;;","names":["DefaultIconDefinition","_angular_core","i4.IconSelectorComponent","i5.IconSelectorModalComponent","i6.IconNamePipe","i7.IconSelectorWrapperComponent"]}
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-protocol-opcua.d.ts","sources":["../../protocol-opcua/address-space.service.ts","../../protocol-opcua/opcua-address-space-detail.component.ts","../../protocol-opcua/opcua-server.interface.ts","../../protocol-opcua/opcuaService.ts","../../protocol-opcua/opcua-protocol-device-type.interface.ts","../../protocol-opcua/opcua-agent.guard.ts","../../protocol-opcua/opcua-device-protocol-browse-path-validation.directive.ts","../../protocol-opcua/opcua-servers.component.ts","../../protocol-opcua/opcua-server-list.component.ts","../../protocol-opcua/opcua-server-config.component.ts","../../protocol-opcua/dynamic-data-source.ts","../../protocol-opcua/opcua-address-space.component.ts","../../protocol-opcua/opcua-address-space-tree.component.ts","../../protocol-opcua/opcua-device-protocol-description.component.ts","../../protocol-opcua/mappings/custom-action-mapping.ts","../../protocol-opcua/mappings/default-mappings.ts","../../protocol-opcua/opcua-device-protocol-mapping.component.ts","../../protocol-opcua/opcua-device-protocol-detail.component.ts","../../protocol-opcua/opcua-device-protocol-data-reporting.component.ts","../../protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.ts","../../protocol-opcua/opcua-auto-apply-settings.component.ts","../../protocol-opcua/opcua-protocol.module.ts","../../protocol-opcua/opcua-microservice.guard.ts","../../protocol-opcua/opcua-server.guard.ts","../../protocol-opcua/ng1/index.ts"],"mappings":"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","names":["_angular_core","i13.OpcuaServersComponent","i14.OpcuaServerListComponent","i15.OpcuaServerConfigComponent","i16.OpcuaAddressSpaceComponent","i17.OpcuaAddressSpaceTreeComponent","i18.OpcuaAddressSpaceDetailComponent","i19.OpcuaDeviceProtocolDescription","i20.OpcuaDeviceProtocolDetailComponent","i21.OpcuaDeviceProtocolDataReportingComponent","i22.OpcuaDeviceProtocolMapping","i23.OpcuaDeviceProtocolObjectMappingStatus","i24.OpcuaAutoApplySettingsComponent","i25.OpcuaDeviceProtocolBrowsePathValidation"]}
1
+ {"version":3,"file":"c8y-ngx-components-protocol-opcua.d.ts","sources":["../../protocol-opcua/address-space.service.ts","../../protocol-opcua/opcua-address-space-detail.component.ts","../../protocol-opcua/opcua-server.interface.ts","../../protocol-opcua/opcuaService.ts","../../protocol-opcua/opcua-protocol-device-type.interface.ts","../../protocol-opcua/opcua-agent.guard.ts","../../protocol-opcua/opcua-device-protocol-browse-path-validation.directive.ts","../../protocol-opcua/opcua-servers.component.ts","../../protocol-opcua/opcua-server-list.component.ts","../../protocol-opcua/opcua-server-config.component.ts","../../protocol-opcua/dynamic-data-source.ts","../../protocol-opcua/opcua-address-space.component.ts","../../protocol-opcua/opcua-address-space-tree.component.ts","../../protocol-opcua/opcua-device-protocol-description.component.ts","../../protocol-opcua/mappings/custom-action-mapping.ts","../../protocol-opcua/mappings/default-mappings.ts","../../protocol-opcua/opcua-device-protocol-mapping.component.ts","../../protocol-opcua/opcua-device-protocol-detail.component.ts","../../protocol-opcua/opcua-device-protocol-data-reporting.component.ts","../../protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.ts","../../protocol-opcua/opcua-auto-apply-settings.component.ts","../../protocol-opcua/opcua-protocol.module.ts","../../protocol-opcua/opcua-microservice.guard.ts","../../protocol-opcua/opcua-server.guard.ts","../../protocol-opcua/ng1/index.ts"],"mappings":"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","names":["_angular_core","i13.OpcuaServersComponent","i14.OpcuaServerListComponent","i15.OpcuaServerConfigComponent","i16.OpcuaAddressSpaceComponent","i17.OpcuaAddressSpaceTreeComponent","i18.OpcuaAddressSpaceDetailComponent","i19.OpcuaDeviceProtocolDescription","i20.OpcuaDeviceProtocolDetailComponent","i21.OpcuaDeviceProtocolDataReportingComponent","i22.OpcuaDeviceProtocolMapping","i23.OpcuaDeviceProtocolObjectMappingStatus","i24.OpcuaAutoApplySettingsComponent","i25.OpcuaDeviceProtocolBrowsePathValidation"]}
@@ -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
  */
@@ -108,6 +115,25 @@ declare class RemoteAccessService {
108
115
  * Updates a configuration for a given device.
109
116
  */
110
117
  updateConfiguration(deviceId: string, configuration: RemoteAccessConfiguration): Promise<RemoteAccessConfiguration>;
118
+ /**
119
+ * Persists a confirmed server host key onto a configuration (DM-6421 first-use flow). The stored
120
+ * value is an OpenSSH authorized_keys-style string (`<keyType> <base64Blob>`).
121
+ *
122
+ * Uses the dedicated host-key endpoint so only the host key is sent — the untouched credential
123
+ * secrets (password, private key, certificate) are never round-tripped through the client.
124
+ */
125
+ updateHostKey(deviceId: string, configurationId: string, hostKey: string): Promise<RemoteAccessConfiguration>;
126
+ /**
127
+ * Whether the backend auto-trusts the server host key on first connect for the current tenant. When
128
+ * enabled, the backend silently stores the key instead of prompting for confirmation.
129
+ *
130
+ * Delegates to the remote-access service rather than reading the `hostkey-autosave` tenant option
131
+ * directly: the effective value is resolved server-side from the tenant option, owner inheritance
132
+ * (a subtenant with no option set inherits the owner's) and the manifest default — none of which the
133
+ * tenant-options API exposes to the client. Defaults to `false` (secure by default) when the status
134
+ * cannot be read.
135
+ */
136
+ isHostKeyAutosaveEnabled(): Promise<boolean>;
111
137
  /**
112
138
  * Generates a SSH key pair for a given hostname.
113
139
  */
@@ -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;;AAEG;AACG,uCAAmC,OAAO;;;;;yCAnKrC,mBAAmB;6CAAnB,mBAAmB;AAmM/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,6 +1,6 @@
1
1
  import * as _angular_forms from '@angular/forms';
2
2
  import { FormBuilder } from '@angular/forms';
3
- import * as i0 from '@angular/core';
3
+ import * as _angular_core from '@angular/core';
4
4
  import { OnInit } from '@angular/core';
5
5
  import { RemoteAccessConfiguration, RemoteAccessService } from '@c8y/ngx-components/remote-access/data';
6
6
 
@@ -23,6 +23,13 @@ declare class RemoteAccessSshEndpointModalComponent implements OnInit {
23
23
  title: "Remote access endpoint";
24
24
  form: ReturnType<typeof this.initForm>;
25
25
  generating: boolean;
26
+ /**
27
+ * Whether the tenant auto-saves the server host key on first connect. When true, an empty host key
28
+ * field means the key is trusted automatically without confirmation — surfaced as a warning.
29
+ */
30
+ readonly hostKeyAutosaveEnabled: _angular_core.WritableSignal<boolean>;
31
+ /** Whether the host key field is currently empty; the autosave warning only applies when it is. */
32
+ readonly hostKeyEmpty: _angular_core.WritableSignal<boolean>;
26
33
  currentValue: Partial<RemoteAccessConfiguration>;
27
34
  result: Promise<Partial<{
28
35
  id: string;
@@ -60,8 +67,8 @@ declare class RemoteAccessSshEndpointModalComponent implements OnInit {
60
67
  generateKeys(): Promise<void>;
61
68
  cancel(): void;
62
69
  save(): void;
63
- static ɵfac: i0.ɵɵFactoryDeclaration<RemoteAccessSshEndpointModalComponent, never>;
64
- static ɵcmp: i0.ɵɵComponentDeclaration<RemoteAccessSshEndpointModalComponent, "c8y-remote-access-ssh-endpoint-modal", never, {}, {}, never, never, true, never>;
70
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RemoteAccessSshEndpointModalComponent, never>;
71
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RemoteAccessSshEndpointModalComponent, "c8y-remote-access-ssh-endpoint-modal", never, {}, {}, never, never, true, never>;
65
72
  }
66
73
 
67
74
  export { RemoteAccessSshEndpointModalComponent };
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts","sources":["../../remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.ts"],"mappings":";;;;;;AAcA,cAMa,qCAAsC,YAAW,MAAM;AAqBhE;AACA;;;;;;;;;;;;;AAjBA;AACF;UACM,UAAU;AAChB;AAEA,kBAAc,OAAO,CAAC,yBAAyB;YAEzC,OAAA,CAAA,OAAA;;;;;;;;;;;;;AAGH;;;AAMO,6BAAa,WAAW,gBACV,mBAAmB;;gBA0BnC,cAAA,CAAA,SAAA;;;;;;;;;;;;;;;oBA0BU,OAAA;;;yCA1EP,qCAAqC;2CAArC,qCAAqC;AA+FjD;;;;","names":[]}
1
+ {"version":3,"file":"c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts","sources":["../../remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.ts"],"mappings":";;;;;;AAeA,cAMa,qCAAsC,YAAW,MAAM;AA4BhE;AACA;;;;;;;;;;;;;AAxBA;AACF;UACM,UAAU;AAChB;AACA;;;AAGG;qCAC4B,aAAA,CAAA,cAAA;;2BAEV,aAAA,CAAA,cAAA;AAErB,kBAAc,OAAO,CAAC,yBAAyB;YAEzC,OAAA,CAAA,OAAA;;;;;;;;;;;;;AAGH;;;AAMO,6BAAa,WAAW,gBACV,mBAAmB;;gBAgCnC,cAAA,CAAA,SAAA;;;;;;;;;;;;;;;oBA0BU,OAAA;;;oDAvFP,qCAAqC;sDAArC,qCAAqC;AA4GjD;;;;","names":[]}
@@ -1,5 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { AfterViewInit, OnDestroy } from '@angular/core';
3
+ import { ModalService, AlertService } from '@c8y/ngx-components';
4
+ import { TranslateService } from '@ngx-translate/core';
3
5
  import { Terminal } from '@xterm/xterm';
4
6
  import { RemoteAccessService } from '@c8y/ngx-components/remote-access/data';
5
7
  import { ActivatedRoute } from '@angular/router';
@@ -7,18 +9,34 @@ import { ActivatedRoute } from '@angular/router';
7
9
  declare class TerminalViewerComponent implements AfterViewInit, OnDestroy {
8
10
  private remoteAccess;
9
11
  private activatedRoute;
12
+ private modalService;
13
+ private alertService;
14
+ private translateService;
10
15
  title: string;
11
16
  container: HTMLElement | null;
12
17
  terminal: Terminal | null;
13
18
  socket: WebSocket | null;
14
- firstDeviceMessageReceived: boolean;
19
+ /** True once real terminal bytes start flowing (not while a host-key control frame is handled). */
20
+ readonly firstDeviceMessageReceived: i0.WritableSignal<boolean>;
15
21
  readonly configurationId: string;
16
22
  readonly deviceId: string;
17
23
  protected observer: ResizeObserver;
18
- constructor(remoteAccess: RemoteAccessService, activatedRoute: ActivatedRoute);
24
+ private shellAdapter;
25
+ /** Suppresses the "device disconnected" banner while a probe socket is torn down for confirmation. */
26
+ private awaitingHostKeyConfirmation;
27
+ constructor(remoteAccess: RemoteAccessService, activatedRoute: ActivatedRoute, modalService: ModalService, alertService: AlertService, translateService: TranslateService);
19
28
  ngOnDestroy(): void;
20
29
  ngAfterViewInit(): void;
21
30
  toggleFullscreen(): void;
31
+ /** Opens (or re-opens) the remote-access WebSocket and wires up the frame handlers. */
32
+ private connect;
33
+ private handleControlFrame;
34
+ /** Shows the fingerprint confirmation dialog; on accept persists the key and reconnects. */
35
+ private confirmHostKey;
36
+ private buildConfirmBody;
37
+ /** Escapes values interpolated into the modal's HTML body to prevent markup injection. */
38
+ private escapeHtml;
39
+ private closeSocket;
22
40
  static ɵfac: i0.ɵɵFactoryDeclaration<TerminalViewerComponent, never>;
23
41
  static ɵcmp: i0.ɵɵComponentDeclaration<TerminalViewerComponent, "c8y-terminal-viewer", never, {}, {}, never, never, true, never>;
24
42
  }
@@ -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":";;;;;;AAaA,cAQa,uBAAwB,YAAW,aAAa,EAAE,SAAS;AAWpE;AACA;AAXF;AACA,eAAW,WAAW;AACtB,cAAU,QAAQ;AAClB,YAAQ,SAAS;AACjB;AACA;AACA;AACA,wBAAoB,cAAc;AAGxB,8BAAc,mBAAmB,kBACjB,cAAc;AAMxC;AAWA;;yCA7BW,uBAAuB;2CAAvB,uBAAuB;AAmGnC;;;;","names":[]}
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"]}