@c8y/ngx-components 1024.5.1 → 1024.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-DhfJagxU.mjs → c8y-ngx-components-asset-property-grid.component-Ddva2QJW.mjs} +35 -19
- package/fesm2022/c8y-ngx-components-asset-property-grid.component-Ddva2QJW.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +28 -14
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +1538 -59
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +2 -2
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +9 -2
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +6 -1
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-reports.mjs +3 -5
- package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +94 -49
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +1 -1
- package/locales/de.po +266 -3
- package/locales/es.po +266 -3
- package/locales/fr.po +266 -3
- package/locales/ja_JP.po +265 -3
- package/locales/ko.po +266 -3
- package/locales/locales.pot +294 -7
- package/locales/nl.po +266 -3
- package/locales/pl.po +266 -3
- package/locales/pt_BR.po +266 -3
- package/locales/zh_CN.po +266 -3
- package/locales/zh_TW.po +266 -3
- package/package.json +1 -1
- package/types/c8y-ngx-components-context-dashboard.d.ts +7 -3
- package/types/c8y-ngx-components-context-dashboard.d.ts.map +1 -1
- package/types/c8y-ngx-components-icon-selector.d.ts +286 -32
- package/types/c8y-ngx-components-icon-selector.d.ts.map +1 -1
- package/types/c8y-ngx-components-platform-configuration.d.ts +2 -2
- package/types/c8y-ngx-components-remote-access-data.d.ts +8 -1
- package/types/c8y-ngx-components-remote-access-data.d.ts.map +1 -1
- package/types/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -1
- package/types/c8y-ngx-components-reports.d.ts.map +1 -1
- package/types/c8y-ngx-components-repository-configuration.d.ts +20 -10
- package/types/c8y-ngx-components-repository-configuration.d.ts.map +1 -1
- 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 '@
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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-
|
|
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"]}
|
|
@@ -159,7 +159,7 @@ declare class PlatformConfigurationFormProviderService {
|
|
|
159
159
|
'export.data.mail.subject': {
|
|
160
160
|
formId: string;
|
|
161
161
|
title: "Email subject";
|
|
162
|
-
description: "Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/
|
|
162
|
+
description: "Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/apps/public/login/index.html#/?download={binaryId}";
|
|
163
163
|
type: string;
|
|
164
164
|
control: FormControl<string>;
|
|
165
165
|
};
|
|
@@ -450,7 +450,7 @@ declare class PlatformConfigurationFormProviderService {
|
|
|
450
450
|
items: ({
|
|
451
451
|
formId: string;
|
|
452
452
|
title: "Email subject";
|
|
453
|
-
description: "Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/
|
|
453
|
+
description: "Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/apps/public/login/index.html#/?download={binaryId}";
|
|
454
454
|
type: string;
|
|
455
455
|
control: FormControl<string>;
|
|
456
456
|
} | {
|
|
@@ -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
|
|
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
|
|
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;
|
|
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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-reports.d.ts","sources":["../../reports/export-schedules.interface.ts","../../reports/reports.service.ts","../../reports/cron.service.ts","../../reports/export-schedules.component.ts","../../reports/schedule-modal.component.ts","../../reports/cron.component.ts","../../reports/reports.module.ts","../../reports/ng1/downgraded.components.ts","../../reports/ng1/downgraded.services.ts","../../reports/ng1/index.ts"],"mappings":";;;;;;;;;;AAEM,UAAW,MAAO,SAAQ,cAAc;+BACjB,QAAQ;AACpC;UAEgB,QAAQ;;iBAEV,WAAW;gBACZ,UAAU;AACvB;UAEgB,WAAW;;;;;;;AAO3B;UAEgB,UAAU;;;;;;AAM1B;UAEgB,WAAW;;;AAG3B;UAEgB,cAAc;;;cAGnB,QAAQ;AACnB;AAED,aAAY,UAAU;AACpB;AACA;AACA;AACD;AAED,aAAY,IAAI;AACd;AACA;AACA;AACA;AACA;AACA;AACD;;ACvCD,cACa,cAAc;AAOvB;AACA;AACA;AACA;;;;;AAHQ,8BAAc,YAAY,oBACR,gBAAgB,UAC1B,WAAW,oBACD,gBAAgB;wBAQlB,WAAW,GAAA,OAAA,CAAA,MAAA;8BAaL,WAAW,GAAA,OAAA;uCAMR,MAAM;AAQnC,0BAAsB,QAAQ,YAAY,WAAW,GAAA,OAAA;gCAIzB,QAAQ,YAAY,QAAQ,YAAY,WAAW,GAAA,OAAA;AAI/E,8BACM,WAAW,sBACF,QAAQ,qBACX,QAAQ,KAAO,OAAA;yBAqBN,WAAW,GAAA,OAAA;AAYhC,6BAAyB,QAAQ,YAAY,WAAW,GAAA,OAAA;AAI9D;;;;;;;AAOG;gCAC+B,WAAW,GAAG,OAAO,CAAC,cAAc;uCAqB7B,WAAW,GAAG,OAAO,CAAC,cAAc;yCAKlC,WAAW,GAAG,OAAO,CAAC,cAAc;0BAYnD,WAAW,GAAG,OAAO;yCA3ItC,cAAc;6CAAd,cAAc;AAmJ1B;;AC5JD,cACa,WAAW;AA6CV;;;;;AAXV;;;;;;;;;;;;;;;;;;;AAUA;AACkB,kCAAkB,gBAAgB;6BAuB7B,UAAU;sCAWJ,UAAA;wBAaX,UAAU,GAAA,IAAA;AAkD9B,yBAAqB,IAAI,cAAc,UAAU;AAqDjD,0BAAsB,IAAI,cAAc,UAAU;+BAuDvB,UAAU;gCAOT,UAAU;6BAWb,UAAU;yCA5QxB,WAAW;6CAAX,WAAW;AAiRvB;;AC9PD,
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-reports.d.ts","sources":["../../reports/export-schedules.interface.ts","../../reports/reports.service.ts","../../reports/cron.service.ts","../../reports/export-schedules.component.ts","../../reports/schedule-modal.component.ts","../../reports/cron.component.ts","../../reports/reports.module.ts","../../reports/ng1/downgraded.components.ts","../../reports/ng1/downgraded.services.ts","../../reports/ng1/index.ts"],"mappings":"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","names":["i4.ExportSchedulesComponent","i5.ScheduleModalComponent","i6.CronComponent"]}
|
|
@@ -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 {
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;AAKA,cACa,0BAA0B;AAGzB;AAFZ,2BAAqB,YAAA;AAED,qCAAqB,mBAAmB;AAE5D;AAIA;;;;AAIG;;AACuC,gBAAQ,OAAO;AAAW,kBACvD,IAAI,mBACD,OAAO,MACpB,OAAO;iCAeJ,cAAc,aACP,4BAA4B,GAAG,4BAA4B;yCAjC7D,0BAA0B;6CAA1B,0BAA0B;AA4CtC;;
|
|
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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"}
|