@ncim/sdk 0.1.0 → 0.2.4

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.
@@ -1 +1,3128 @@
1
- export * from '@libs/ui-components';
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef, AfterContentInit, AfterViewInit, OnDestroy, TemplateRef, DestroyRef } from '@angular/core';
3
+ import { IconName, InputType, TrendDirection, MarkerStatus, MapLegendStatus } from './ncim-sdk-core';
4
+ import { PopupModalBase as PopupModalBase$1 } from './ncim-sdk-ui';
5
+ import { ControlValueAccessor, FormControl, FormGroup, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
6
+ import { QuickFilterTag as QuickFilterTag$1 } from './ncim-sdk-ui';
7
+ import { SelectOption as SelectOption$1 } from './ncim-sdk-ui';
8
+ import { InputFilter as InputFilter$1 } from './ncim-sdk-ui';
9
+ import * as _libs_core from './ncim-sdk-core';
10
+ import { ExportPdfOptions } from './ncim-sdk-core';
11
+ import { ViolationFine, ViolationBusiness, ViolationCorrectionPeriod } from './ncim-sdk-core';
12
+ import { EChartsOption } from 'echarts';
13
+ import { MapMarkerData as MapMarkerData$1 } from './ncim-sdk-ui';
14
+ import { TranslateService } from '@ngx-translate/core';
15
+ import { MenuItem } from 'primeng/api';
16
+ import { BreadcrumbItem as BreadcrumbItem$1 } from './ncim-sdk-ui';
17
+ import { AccordionItem as AccordionItem$1 } from './ncim-sdk-ui';
18
+ import { ButtonSeverity } from 'primeng/button';
19
+ import * as _angular_platform_browser from '@angular/platform-browser';
20
+ import { Popup as Popup$1 } from './ncim-sdk-ui';
21
+ import { LoadingService } from './ncim-sdk-core';
22
+
23
+ interface NavItem {
24
+ label: string;
25
+ icon: string;
26
+ route?: string;
27
+ badge?: number | string;
28
+ children?: {
29
+ label: string;
30
+ route: string;
31
+ }[];
32
+ }
33
+ interface NavSection {
34
+ title: string;
35
+ items: NavItem[];
36
+ }
37
+ interface FooterAction {
38
+ id: string;
39
+ label: string;
40
+ icon: IconName | 'avatar';
41
+ active?: boolean;
42
+ route?: string;
43
+ }
44
+ interface SidebarBrand {
45
+ /** Translation key or plain text for the app/platform name. */
46
+ title: string;
47
+ logoSrc?: string;
48
+ /** Translation key or plain text for the user role. When omitted, falls back to PROFILE.ROLE. */
49
+ role?: string;
50
+ }
51
+
52
+ declare class Sidebar {
53
+ private readonly router;
54
+ private readonly destroyRef;
55
+ brand: _angular_core.InputSignal<SidebarBrand>;
56
+ sections: _angular_core.InputSignal<NavSection[]>;
57
+ notificationCount: _angular_core.InputSignal<number>;
58
+ userAvatar: _angular_core.InputSignal<string | null>;
59
+ showCompleteTraining: _angular_core.InputSignal<boolean>;
60
+ showAppsMenu: _angular_core.InputSignal<boolean>;
61
+ activeActionId: _angular_core.InputSignal<string | null>;
62
+ isOpen: _angular_core.ModelSignal<boolean>;
63
+ panelOpen: _angular_core.ModelSignal<boolean>;
64
+ footerActionClick: _angular_core.OutputEmitterRef<string>;
65
+ menuToggle: _angular_core.OutputEmitterRef<void>;
66
+ protected readonly expandedItems: _angular_core.WritableSignal<Set<string>>;
67
+ constructor();
68
+ protected toggleExpand(label: string): void;
69
+ protected isExpanded(label: string): boolean;
70
+ protected onFooterAction(actionId: string): void;
71
+ protected close(): void;
72
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Sidebar, never>;
73
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Sidebar, "ncim-sidebar", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "notificationCount": { "alias": "notificationCount"; "required": false; "isSignal": true; }; "userAvatar": { "alias": "userAvatar"; "required": false; "isSignal": true; }; "showCompleteTraining": { "alias": "showCompleteTraining"; "required": false; "isSignal": true; }; "showAppsMenu": { "alias": "showAppsMenu"; "required": false; "isSignal": true; }; "activeActionId": { "alias": "activeActionId"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "panelOpen": { "alias": "panelOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "panelOpen": "panelOpenChange"; "footerActionClick": "footerActionClick"; "menuToggle": "menuToggle"; }, never, never, true, never>;
74
+ }
75
+
76
+ declare class LogoutModal extends PopupModalBase$1 {
77
+ readonly confirmed: _angular_core.OutputEmitterRef<void>;
78
+ protected onConfirm(): void;
79
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LogoutModal, never>;
80
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LogoutModal, "ncim-logout-modal", never, {}, { "confirmed": "confirmed"; }, never, never, true, never>;
81
+ }
82
+
83
+ /** Shared sidebar toggle and footer action logic for layouts. */
84
+ declare abstract class BaseSidebarLayout {
85
+ readonly sidebarOpen: _angular_core.WritableSignal<boolean>;
86
+ toggleSidebar(): void;
87
+ onFooterAction(_actionId: string): void;
88
+ }
89
+
90
+ /** Main app shell with sidebar and router outlet. Dumb/presentational — receives all config via inputs. */
91
+ declare class DashboardLayout extends BaseSidebarLayout {
92
+ readonly sectionsMap: _angular_core.InputSignal<Record<string, NavSection[]>>;
93
+ readonly brand: _angular_core.InputSignal<SidebarBrand>;
94
+ readonly userAvatar: _angular_core.InputSignal<string | null>;
95
+ readonly notificationCount: _angular_core.InputSignal<number>;
96
+ readonly showCompleteTraining: _angular_core.InputSignal<boolean>;
97
+ readonly showAppsMenu: _angular_core.InputSignal<boolean>;
98
+ readonly footerNavigate: _angular_core.OutputEmitterRef<string>;
99
+ readonly logoutConfirmed: _angular_core.OutputEmitterRef<void>;
100
+ private readonly router;
101
+ protected readonly logoutModal: _angular_core.Signal<LogoutModal>;
102
+ private readonly currentUrl;
103
+ private readonly activeMenuKey;
104
+ constructor();
105
+ private readonly lastOpenKey;
106
+ readonly isPanelOpen: _angular_core.Signal<boolean>;
107
+ readonly panelSections: _angular_core.Signal<NavSection[]>;
108
+ readonly activeActionId: _angular_core.Signal<"settings" | "layers" | "profile">;
109
+ onFooterAction(actionId: string): void;
110
+ protected togglePanel(): void;
111
+ protected onLogoutConfirmed(): void;
112
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardLayout, never>;
113
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardLayout, "ncim-dashboard-layout", never, { "sectionsMap": { "alias": "sectionsMap"; "required": false; "isSignal": true; }; "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "userAvatar": { "alias": "userAvatar"; "required": false; "isSignal": true; }; "notificationCount": { "alias": "notificationCount"; "required": false; "isSignal": true; }; "showCompleteTraining": { "alias": "showCompleteTraining"; "required": false; "isSignal": true; }; "showAppsMenu": { "alias": "showAppsMenu"; "required": false; "isSignal": true; }; }, { "footerNavigate": "footerNavigate"; "logoutConfirmed": "logoutConfirmed"; }, never, never, true, never>;
114
+ }
115
+
116
+ declare enum NavSectionKey {
117
+ BASICS = "SIDEBAR.SECTIONS.BASICS",
118
+ HELP = "SIDEBAR.SECTIONS.HELP"
119
+ }
120
+ declare enum NavItemKey {
121
+ HOME = "SIDEBAR.ITEMS.HOME",
122
+ REGULATORY_DASHBOARD = "SIDEBAR.ITEMS.REGULATORY_DASHBOARD",
123
+ VIOLATIONS = "SIDEBAR.ITEMS.VIOLATIONS",
124
+ OBJECTIONS = "SIDEBAR.ITEMS.OBJECTIONS",
125
+ LICENSES = "SIDEBAR.ITEMS.LICENSES",
126
+ COMPLIANCE_PROGRAM = "SIDEBAR.ITEMS.COMPLIANCE_PROGRAM",
127
+ SMART_ADVISOR = "SIDEBAR.ITEMS.SMART_ADVISOR",
128
+ KNOWLEDGE_CENTER = "SIDEBAR.ITEMS.KNOWLEDGE_CENTER",
129
+ SUPPORTER = "SIDEBAR.ITEMS.SUPPORTER",
130
+ USERS_ROLES = "USERS_ROLES.TITLE",
131
+ SYSTEM_SETTINGS = "SIDEBAR.ITEMS.SYSTEM_SETTINGS",
132
+ MY_FACILITIES = "SIDEBAR.ITEMS.MY_FACILITIES"
133
+ }
134
+
135
+ /** Centered layout for login, forgot-password, OTP, reset-password. */
136
+ declare class AuthLayout {
137
+ readonly width: _angular_core.InputSignal<"small" | "full">;
138
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthLayout, never>;
139
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AuthLayout, "ncim-auth-layout", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
140
+ }
141
+
142
+ /** Item for settings sidebar navigation. */
143
+ interface SettingsNavItem {
144
+ label: string;
145
+ route: string;
146
+ icon?: IconName;
147
+ }
148
+ /** App shell for settings area (profile, users & roles) with sidebar. */
149
+ declare class SettingsLayout extends BaseSidebarLayout {
150
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SettingsLayout, never>;
151
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SettingsLayout, "ncim-settings-layout", never, {}, {}, never, never, true, never>;
152
+ }
153
+
154
+ declare class OtpInput implements ControlValueAccessor {
155
+ readonly length: _angular_core.InputSignal<number>;
156
+ readonly submitted: _angular_core.InputSignal<boolean>;
157
+ readonly digits: _angular_core.WritableSignal<string[]>;
158
+ readonly disabled: _angular_core.WritableSignal<boolean>;
159
+ readonly touched: _angular_core.WritableSignal<boolean>;
160
+ readonly focused: _angular_core.WritableSignal<boolean>;
161
+ readonly inputs: _angular_core.Signal<readonly ElementRef<any>[]>;
162
+ private readonly ngControl;
163
+ private onChange;
164
+ private onTouched;
165
+ constructor();
166
+ readonly errorKey: _angular_core.Signal<string>;
167
+ readonly showError: _angular_core.Signal<boolean>;
168
+ onDigitInput(event: Event, index: number): void;
169
+ onFocus(): void;
170
+ onBlur(): void;
171
+ onKeyDown(event: KeyboardEvent, index: number): void;
172
+ onPaste(event: ClipboardEvent): void;
173
+ writeValue(value: string): void;
174
+ registerOnChange(fn: (value: string) => void): void;
175
+ registerOnTouched(fn: () => void): void;
176
+ setDisabledState(isDisabled: boolean): void;
177
+ private emitValue;
178
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OtpInput, never>;
179
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OtpInput, "ncim-otp-input", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
180
+ }
181
+
182
+ declare class Button {
183
+ readonly variant: _angular_core.InputSignal<"primary" | "black" | "neutral" | "secondary" | "transparent" | "outline" | "link">;
184
+ readonly type: _angular_core.InputSignal<"button" | "submit">;
185
+ readonly fullWidth: _angular_core.InputSignal<boolean>;
186
+ readonly disabled: _angular_core.InputSignal<boolean>;
187
+ readonly loading: _angular_core.InputSignal<boolean>;
188
+ readonly size: _angular_core.InputSignal<"small" | "medium" | "large" | "compact" | "mini" | "extra-small" | "small-icon-only">;
189
+ readonly icon: _angular_core.InputSignal<string>;
190
+ readonly iconPosition: _angular_core.InputSignal<"start" | "end">;
191
+ readonly iconSize: _angular_core.InputSignal<number>;
192
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Button, never>;
193
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Button, "ncim-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
194
+ }
195
+
196
+ declare class Divider {
197
+ readonly text: _angular_core.InputSignal<string>;
198
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Divider, never>;
199
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Divider, "ncim-divider", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
200
+ }
201
+
202
+ interface StepItem {
203
+ id: string;
204
+ label?: string;
205
+ state: 'completed' | 'active' | 'upcoming' | 'disabled';
206
+ }
207
+ declare class Stepper {
208
+ readonly steps: _angular_core.InputSignal<StepItem[]>;
209
+ readonly variant: _angular_core.InputSignal<"progress" | "steps" | "pills">;
210
+ readonly linear: _angular_core.InputSignal<boolean>;
211
+ readonly width: _angular_core.InputSignal<number>;
212
+ readonly stepChange: _angular_core.OutputEmitterRef<string>;
213
+ readonly progressPercentage: _angular_core.Signal<number>;
214
+ onStepClick(step: StepItem): void;
215
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Stepper, never>;
216
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stepper, "ncim-stepper", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "stepChange": "stepChange"; }, never, never, true, never>;
217
+ }
218
+
219
+ declare class RegisterLayout {
220
+ readonly sidebarTitle: _angular_core.InputSignal<string>;
221
+ readonly sidebarDescription: _angular_core.InputSignal<string>;
222
+ readonly sidebarImage: _angular_core.InputSignal<string>;
223
+ readonly steps: _angular_core.InputSignal<StepItem[]>;
224
+ readonly stepperVariant: _angular_core.InputSignal<"progress" | "steps">;
225
+ readonly linear: _angular_core.InputSignal<boolean>;
226
+ readonly stepChange: _angular_core.OutputEmitterRef<string>;
227
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RegisterLayout, never>;
228
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RegisterLayout, "ncim-register-layout", never, { "sidebarTitle": { "alias": "sidebarTitle"; "required": false; "isSignal": true; }; "sidebarDescription": { "alias": "sidebarDescription"; "required": false; "isSignal": true; }; "sidebarImage": { "alias": "sidebarImage"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "stepperVariant": { "alias": "stepperVariant"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; }, { "stepChange": "stepChange"; }, never, ["*"], true, never>;
229
+ }
230
+
231
+ declare class CopyRight {
232
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CopyRight, never>;
233
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CopyRight, "ncim-copy-right", never, {}, {}, never, never, true, never>;
234
+ }
235
+
236
+ interface OptionItem {
237
+ value: string;
238
+ label?: string;
239
+ disabled?: boolean;
240
+ }
241
+ declare class OptionGroup implements ControlValueAccessor {
242
+ readonly label: _angular_core.InputSignal<string>;
243
+ readonly options: _angular_core.InputSignal<OptionItem[]>;
244
+ readonly columns: _angular_core.InputSignal<number>;
245
+ readonly selectedValue: _angular_core.InputSignal<string | null>;
246
+ readonly submitted: _angular_core.InputSignal<boolean>;
247
+ readonly selectionChange: _angular_core.OutputEmitterRef<string>;
248
+ readonly disabled: _angular_core.WritableSignal<boolean>;
249
+ readonly touched: _angular_core.WritableSignal<boolean>;
250
+ readonly value: _angular_core.WritableSignal<string | null>;
251
+ readonly activeValue: _angular_core.Signal<string | null>;
252
+ readonly errorKey: "ERRORS.REQUIRED";
253
+ readonly showError: _angular_core.Signal<boolean>;
254
+ private onChange;
255
+ private onTouched;
256
+ onSelect(option: OptionItem): void;
257
+ writeValue(value: string | null): void;
258
+ registerOnChange(fn: (value: string | null) => void): void;
259
+ registerOnTouched(fn: () => void): void;
260
+ setDisabledState(isDisabled: boolean): void;
261
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OptionGroup, never>;
262
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OptionGroup, "ncim-option-group", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "selectedValue": { "alias": "selectedValue"; "required": false; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
263
+ }
264
+
265
+ declare class RadioButton {
266
+ readonly value: _angular_core.InputSignal<string>;
267
+ readonly disabled: _angular_core.InputSignal<boolean>;
268
+ readonly checked: _angular_core.InputSignal<boolean | undefined>;
269
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
270
+ readonly isChecked: _angular_core.WritableSignal<boolean | undefined>;
271
+ readonly isDisabled: _angular_core.WritableSignal<boolean>;
272
+ readonly name: _angular_core.WritableSignal<string>;
273
+ readonly inputId: _angular_core.WritableSignal<string>;
274
+ readonly ariaChecked: _angular_core.Signal<"true" | "false">;
275
+ readonly ariaDisabled: _angular_core.Signal<"true" | "false">;
276
+ onRadioChange(): void;
277
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioButton, never>;
278
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioButton, "ncim-radio-button", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, ["*"], true, never>;
279
+ }
280
+
281
+ declare class SelectionButton extends RadioButton {
282
+ readonly size: _angular_core.InputSignal<"small" | "medium" | "large">;
283
+ readonly variant: _angular_core.InputSignal<"primary" | "secondary" | "outline">;
284
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectionButton, never>;
285
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectionButton, "ncim-selection-button", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
286
+ }
287
+
288
+ declare class RadioGroup implements ControlValueAccessor, AfterContentInit {
289
+ private readonly cdr;
290
+ private optionButtons;
291
+ readonly name: _angular_core.InputSignal<string>;
292
+ readonly disabled: _angular_core.InputSignal<boolean>;
293
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
294
+ private selectedValue;
295
+ private onChange;
296
+ private onTouched;
297
+ ngAfterContentInit(): void;
298
+ writeValue(value: string): void;
299
+ registerOnChange(fn: (value: string) => void): void;
300
+ registerOnTouched(fn: () => void): void;
301
+ private handleValueChange;
302
+ private syncChildrenState;
303
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioGroup, never>;
304
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroup, "ncim-radio-group", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, ["optionButtons"], ["*"], true, never>;
305
+ }
306
+
307
+ declare class ProgressBar {
308
+ private readonly languageService;
309
+ /** Matches app language: Arabic → rtl (fill from the right), English → ltr (fill from the left). */
310
+ readonly barDir: _angular_core.Signal<"rtl" | "ltr">;
311
+ readonly progress: _angular_core.InputSignal<number>;
312
+ readonly max: _angular_core.InputSignal<number>;
313
+ readonly color: _angular_core.InputSignal<string>;
314
+ readonly showLabel: _angular_core.InputSignal<boolean>;
315
+ /** Rounded knob at the leading edge of the fill (design system default: on). */
316
+ readonly showThumb: _angular_core.InputSignal<boolean>;
317
+ readonly percentage: _angular_core.Signal<number>;
318
+ readonly roundedPercentage: _angular_core.Signal<number>;
319
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressBar, never>;
320
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProgressBar, "ncim-progress-bar", never, { "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "showThumb": { "alias": "showThumb"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
321
+ }
322
+
323
+ declare class CircularProgress {
324
+ /** Current step (1-based). */
325
+ readonly current: _angular_core.InputSignal<number>;
326
+ /** Total steps. */
327
+ readonly total: _angular_core.InputSignal<number>;
328
+ /** Size in pixels. */
329
+ readonly size: _angular_core.InputSignal<number>;
330
+ /** Stroke width of the ring. */
331
+ readonly strokeWidth: _angular_core.InputSignal<number>;
332
+ /** Color of the progress segment. */
333
+ readonly progressColor: _angular_core.InputSignal<string>;
334
+ /** Color of the background ring. */
335
+ readonly trackColor: _angular_core.InputSignal<string>;
336
+ /** Custom label (e.g. "1 من 4"). If not set, uses current/total. */
337
+ readonly label: _angular_core.InputSignal<string>;
338
+ readonly percentage: _angular_core.Signal<number>;
339
+ readonly displayLabel: _angular_core.Signal<string>;
340
+ /** Translation params for COMMON.STEP_OF. */
341
+ readonly stepOfParams: _angular_core.Signal<{
342
+ current: number;
343
+ total: number;
344
+ }>;
345
+ /** SVG circle circumference for stroke-dasharray. */
346
+ readonly circumference: _angular_core.Signal<number>;
347
+ readonly strokeDashOffset: _angular_core.Signal<number>;
348
+ readonly radius: _angular_core.Signal<number>;
349
+ readonly viewBox: _angular_core.Signal<string>;
350
+ readonly center: _angular_core.Signal<number>;
351
+ /** Label font size scales with circle size for readability. */
352
+ readonly labelFontSize: _angular_core.Signal<number>;
353
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CircularProgress, never>;
354
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CircularProgress, "ncim-circular-progress", never, { "current": { "alias": "current"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "progressColor": { "alias": "progressColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
355
+ }
356
+
357
+ /**
358
+ * Fixes PrimeNG tabs active bar (inkbar) positioning in RTL.
359
+ * PrimeNG uses `left` which misaligns in RTL; we recalculate using `inset-inline-start`.
360
+ */
361
+ declare class TabsInkbarRtlDirective implements AfterViewInit {
362
+ private readonly el;
363
+ private readonly destroyRef;
364
+ private readonly injector;
365
+ ngAfterViewInit(): void;
366
+ private setupInkbarSync;
367
+ private isRtl;
368
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsInkbarRtlDirective, never>;
369
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TabsInkbarRtlDirective, "[ncimTabsInkbarRtl]", never, {}, {}, never, never, true, never>;
370
+ }
371
+
372
+ interface TabItem {
373
+ id: string;
374
+ label: string;
375
+ disabled?: boolean;
376
+ icon?: string;
377
+ badge?: string | number;
378
+ }
379
+ declare class Tabs {
380
+ readonly items: _angular_core.InputSignal<TabItem[]>;
381
+ readonly activeId: _angular_core.InputSignal<string>;
382
+ readonly variant: _angular_core.InputSignal<"default" | "pills" | "underline">;
383
+ readonly size: _angular_core.InputSignal<"small" | "medium" | "large">;
384
+ readonly justify: _angular_core.InputSignal<"start" | "end" | "center" | "between">;
385
+ readonly tabChange: _angular_core.OutputEmitterRef<string>;
386
+ readonly underlineStyle: _angular_core.InputSignal<"text" | "full">;
387
+ protected readonly activeValue: _angular_core.WritableSignal<string | number | undefined>;
388
+ protected onValueChange(value: string | number | undefined): void;
389
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tabs, never>;
390
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tabs, "ncim-tabs", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; "underlineStyle": { "alias": "underlineStyle"; "required": false; "isSignal": true; }; }, { "tabChange": "tabChange"; }, never, ["*"], true, [{ directive: typeof TabsInkbarRtlDirective; inputs: {}; outputs: {}; }]>;
391
+ }
392
+
393
+ declare class TabPanel {
394
+ readonly id: _angular_core.InputSignal<string>;
395
+ readonly activeId: _angular_core.InputSignal<string>;
396
+ readonly title: _angular_core.InputSignal<string>;
397
+ readonly isActive: _angular_core.Signal<boolean>;
398
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabPanel, never>;
399
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabPanel, "ncim-tab-panel", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
400
+ }
401
+
402
+ interface SelectOption {
403
+ value: string;
404
+ label: string;
405
+ count?: number;
406
+ disabled?: boolean;
407
+ }
408
+
409
+ type FieldSize = 'small' | 'medium' | 'large';
410
+ type InputFilter = 'numeric' | 'phone' | 'noComma' | null;
411
+ /** Restricts input characters via core directives (arabicOnly, englishOnly, numbersOnly, phoneOnly, trimInput). */
412
+ type RestrictInput = 'arabicOnly' | 'englishOnly' | 'numbersOnly' | 'phoneOnly' | 'trimInput' | null;
413
+
414
+ declare class FormInput implements ControlValueAccessor {
415
+ readonly phoneConfig: {
416
+ readonly COUNTRY_CODE: "+966";
417
+ readonly FLAG_ICON: "saudi-flag";
418
+ };
419
+ readonly label: _angular_core.InputSignal<string>;
420
+ readonly subText: _angular_core.InputSignal<string>;
421
+ readonly placeholder: _angular_core.InputSignal<string>;
422
+ readonly type: _angular_core.InputSignal<InputType>;
423
+ readonly size: _angular_core.InputSignal<FieldSize>;
424
+ readonly submitted: _angular_core.InputSignal<boolean>;
425
+ readonly options: _angular_core.InputSignal<SelectOption[]>;
426
+ readonly minDate: _angular_core.InputSignal<Date | null>;
427
+ readonly maxDate: _angular_core.InputSignal<Date | null>;
428
+ /** When true, date picker overlay is appended to `document.body` (avoids clipping inside popups/dialogs). */
429
+ readonly dateAppendToBody: _angular_core.InputSignal<boolean>;
430
+ readonly dateSelectionMode: _angular_core.InputSignal<"single" | "multiple" | "range" | undefined>;
431
+ readonly dateShowDropdownIcon: _angular_core.InputSignal<boolean>;
432
+ readonly dateFormat: _angular_core.InputSignal<string>;
433
+ readonly rows: _angular_core.InputSignal<number>;
434
+ readonly layout: _angular_core.InputSignal<"vertical" | "horizontal">;
435
+ readonly radioName: _angular_core.InputSignal<string>;
436
+ readonly selectShowFilter: _angular_core.InputSignal<boolean>;
437
+ readonly selectAppendToBody: _angular_core.InputSignal<boolean>;
438
+ /** PrimeNG icon class e.g. 'pi pi-search'. Empty string means no icon. */
439
+ readonly icon: _angular_core.InputSignal<string>;
440
+ /** Whether the icon appears before or after the input. Defaults to 'end'. */
441
+ readonly iconPosition: _angular_core.InputSignal<"start" | "end">;
442
+ /** Restricts input via core directives (arabicOnly, englishOnly, numbersOnly, phoneOnly, trimInput). */
443
+ readonly restrictInput: _angular_core.InputSignal<RestrictInput>;
444
+ /** Optional filter override for text input sanitization (e.g. 'noComma'). */
445
+ readonly filterOverride: _angular_core.InputSignal<InputFilter>;
446
+ /** Overrides the default maxlength on the HTML input element (does not affect validator logic). */
447
+ readonly maxLengthOverride: _angular_core.InputSignal<number | null>;
448
+ /** Per-field error message overrides: maps a validator error key to an i18n translation key.
449
+ * Example: [errorMessages]="{ pattern: 'ENTITIES.ERRORS.INVALID_NATIONAL_NUMBER' }" */
450
+ readonly errorMessages: _angular_core.InputSignal<Record<string, string>>;
451
+ readonly value: _angular_core.ModelSignal<string>;
452
+ readonly multiValue: _angular_core.ModelSignal<string[]>;
453
+ readonly showPassword: _angular_core.WritableSignal<boolean>;
454
+ readonly disabled: _angular_core.ModelSignal<boolean>;
455
+ readonly focused: _angular_core.WritableSignal<boolean>;
456
+ readonly touched: _angular_core.WritableSignal<boolean>;
457
+ private readonly ngControl;
458
+ private readonly destroyRef;
459
+ /** Incremented on control `statusChanges` so cross-field validators trigger `errorKey` re-evaluation. */
460
+ private readonly errorVersion;
461
+ constructor();
462
+ private onChange;
463
+ private onTouched;
464
+ readonly isPassword: _angular_core.Signal<boolean>;
465
+ readonly isSelect: _angular_core.Signal<boolean>;
466
+ readonly isMultiSelect: _angular_core.Signal<boolean>;
467
+ readonly isPhone: _angular_core.Signal<boolean>;
468
+ readonly isDate: _angular_core.Signal<boolean>;
469
+ readonly isDateTime: _angular_core.Signal<boolean>;
470
+ readonly isDatePicker: _angular_core.Signal<boolean>;
471
+ readonly datePickerAppendTo: _angular_core.Signal<"body" | HTMLElement | "self" | null | undefined>;
472
+ readonly isTextarea: _angular_core.Signal<boolean>;
473
+ readonly isCheckboxRadio: _angular_core.Signal<boolean>;
474
+ readonly maxLength: _angular_core.Signal<10 | 255>;
475
+ readonly inputType: _angular_core.Signal<InputType | "tel" | "datetime-local">;
476
+ readonly inputMode: _angular_core.Signal<"numeric" | "tel" | null>;
477
+ readonly autocomplete: _angular_core.Signal<"off" | "tel">;
478
+ readonly inputFilter: _angular_core.Signal<"phone" | "numeric" | "noComma" | null>;
479
+ private static readonly ERROR_MAP;
480
+ readonly errorKey: _angular_core.Signal<string>;
481
+ readonly showError: _angular_core.Signal<boolean>;
482
+ togglePassword(): void;
483
+ onInput(value: string): void;
484
+ onDateChange(value: string): void;
485
+ onSelectChange(value: string): void;
486
+ onRadioChange(value: string): void;
487
+ onCheckboxChange(value: string[]): void;
488
+ onMultiSelectChange(value: string[]): void;
489
+ private updateValue;
490
+ onFocus(): void;
491
+ onBlur(): void;
492
+ writeValue(value: string): void;
493
+ registerOnChange(fn: (value: string) => void): void;
494
+ registerOnTouched(fn: () => void): void;
495
+ setDisabledState(isDisabled: boolean): void;
496
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormInput, never>;
497
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormInput, "ncim-form-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "subText": { "alias": "subText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateAppendToBody": { "alias": "dateAppendToBody"; "required": false; "isSignal": true; }; "dateSelectionMode": { "alias": "dateSelectionMode"; "required": false; "isSignal": true; }; "dateShowDropdownIcon": { "alias": "dateShowDropdownIcon"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "radioName": { "alias": "radioName"; "required": false; "isSignal": true; }; "selectShowFilter": { "alias": "selectShowFilter"; "required": false; "isSignal": true; }; "selectAppendToBody": { "alias": "selectAppendToBody"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "restrictInput": { "alias": "restrictInput"; "required": false; "isSignal": true; }; "filterOverride": { "alias": "filterOverride"; "required": false; "isSignal": true; }; "maxLengthOverride": { "alias": "maxLengthOverride"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multiValue": { "alias": "multiValue"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "multiValue": "multiValueChange"; "disabled": "disabledChange"; }, never, never, true, never>;
498
+ }
499
+
500
+ declare class FormMultiSelect {
501
+ private readonly translate;
502
+ readonly value: _angular_core.InputSignal<string[]>;
503
+ readonly options: _angular_core.InputSignal<SelectOption[]>;
504
+ readonly disabled: _angular_core.InputSignal<boolean>;
505
+ readonly placeholder: _angular_core.InputSignal<string>;
506
+ readonly size: _angular_core.InputSignal<FieldSize>;
507
+ readonly filter: _angular_core.InputSignal<boolean>;
508
+ readonly showSelectAll: _angular_core.InputSignal<boolean>;
509
+ /** 'comma' = no chips, selections shown as text; checkmarks only in dropdown */
510
+ readonly display: _angular_core.InputSignal<"comma" | "chip">;
511
+ readonly maxSelectedLabels: _angular_core.InputSignal<number>;
512
+ readonly icon: _angular_core.InputSignal<string>;
513
+ readonly iconPosition: _angular_core.InputSignal<"start" | "end">;
514
+ private readonly currentLang;
515
+ protected readonly selectSize: _angular_core.Signal<"small" | "large" | undefined>;
516
+ protected readonly selectedValues: _angular_core.WritableSignal<string[]>;
517
+ protected readonly translatedPlaceholder: _angular_core.Signal<any>;
518
+ protected readonly translatedOptions: _angular_core.Signal<SelectOption[]>;
519
+ readonly valueChange: _angular_core.OutputEmitterRef<string[]>;
520
+ readonly focusEvent: _angular_core.OutputEmitterRef<void>;
521
+ readonly blurEvent: _angular_core.OutputEmitterRef<void>;
522
+ onValueChange(val: string[] | null | undefined): void;
523
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormMultiSelect, never>;
524
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormMultiSelect, "ncim-form-multi-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "maxSelectedLabels": { "alias": "maxSelectedLabels"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "focusEvent": "focusEvent"; "blurEvent": "blurEvent"; }, never, never, true, never>;
525
+ }
526
+
527
+ type FilterFieldType = 'text' | 'select' | 'multiselect' | 'date' | 'datetime' | 'date-range' | 'number' | 'search' | 'checkbox' | 'radio' | 'checkbox-search' | 'divider';
528
+ interface FilterFieldConfig {
529
+ /** Unique key — maps directly to the signal model property */
530
+ key: string;
531
+ /** Field type */
532
+ type: FilterFieldType;
533
+ /** Placeholder text */
534
+ placeholder?: string;
535
+ /** Optional visible label above the field */
536
+ label?: string;
537
+ /** Optional sub-label displayed next to the main label */
538
+ subLabel?: string;
539
+ /** PrimeNG icon class e.g. 'pi pi-search' */
540
+ icon?: string;
541
+ /** Icon position — defaults to 'end' */
542
+ iconPosition?: 'start' | 'end';
543
+ /** Options list — required when type === 'select' | 'multiselect' | 'checkbox' | 'checkbox-search' | 'radio' */
544
+ options?: SelectOption$1[];
545
+ /**
546
+ * CSS track size for this field's column.
547
+ * Used only in auto layout (when FilterFormConfig.columns is NOT set).
548
+ */
549
+ width?: string;
550
+ /**
551
+ * Column span in the filter grid.
552
+ * Used only in manual layout (when FilterFormConfig.columns IS set).
553
+ * Defaults to 1.
554
+ */
555
+ colspan?: number;
556
+ /**
557
+ * Default/initial value.
558
+ * - string for text/select/date/radio
559
+ * - JSON.stringify(string[]) for checkbox / checkbox-search e.g. '["riyadh","jeddah"]'
560
+ */
561
+ defaultValue?: string;
562
+ /** Whether field is disabled */
563
+ disabled?: boolean;
564
+ /** Layout for checkbox / radio groups. Defaults to 'vertical'. */
565
+ layout?: 'vertical' | 'horizontal';
566
+ /** Name attribute for radio groups — auto-generated if omitted */
567
+ radioName?: string;
568
+ /** Optional input filter override (e.g. 'noComma' for search fields). */
569
+ inputFilter?: InputFilter$1;
570
+ }
571
+ interface FilterFormConfig {
572
+ /** All field definitions */
573
+ fields: FilterFieldConfig[];
574
+ /**
575
+ * Manual layout mode: explicit number of equal-width grid columns.
576
+ * Omit to use auto layout (field widths drive the track list).
577
+ */
578
+ columns?: number;
579
+ /** Debounce time in ms for live filtering. Defaults to 300. */
580
+ debounceMs?: number;
581
+ showReset?: boolean;
582
+ showSubmit?: boolean;
583
+ showQuickFilterBar?: boolean;
584
+ showSaveFilter?: boolean;
585
+ showClearAll?: boolean;
586
+ showRemoveOnTag?: boolean;
587
+ quickFilterTagGap?: string;
588
+ quickFilterRowJustify?: string;
589
+ showDivider?: boolean;
590
+ }
591
+
592
+ type FieldValue = any | string | string[];
593
+ type FilterValues = Record<string, FieldValue>;
594
+ declare class FilterForm implements OnDestroy {
595
+ readonly config: _angular_core.InputSignal<FilterFormConfig>;
596
+ readonly quickFilterTitle: _angular_core.InputSignal<string>;
597
+ readonly quickFilterCounter: _angular_core.InputSignal<number>;
598
+ readonly filterChange: _angular_core.OutputEmitterRef<FilterValues>;
599
+ readonly filterSubmit: _angular_core.OutputEmitterRef<FilterValues>;
600
+ readonly filterReset: _angular_core.OutputEmitterRef<void>;
601
+ readonly saveFilterClick: _angular_core.OutputEmitterRef<void>;
602
+ readonly model: _angular_core.WritableSignal<FilterValues>;
603
+ readonly showReset: _angular_core.Signal<boolean>;
604
+ readonly showSubmit: _angular_core.Signal<boolean>;
605
+ readonly showQuickFilterBar: _angular_core.Signal<boolean>;
606
+ readonly showSaveFilter: _angular_core.Signal<boolean>;
607
+ readonly showClearAll: _angular_core.Signal<boolean>;
608
+ readonly showRemoveOnTag: _angular_core.Signal<boolean>;
609
+ readonly quickFilterTagGap: _angular_core.Signal<string>;
610
+ readonly quickFilterRowJustify: _angular_core.Signal<string>;
611
+ readonly showDivider: _angular_core.Signal<boolean>;
612
+ readonly gridTemplateColumns: _angular_core.Signal<string>;
613
+ readonly hasActiveFilters: _angular_core.Signal<boolean>;
614
+ readonly fieldStringValues: _angular_core.Signal<Record<string, string>>;
615
+ readonly fieldMultiValues: _angular_core.Signal<Record<string, string[]>>;
616
+ readonly activeFilterTags: _angular_core.Signal<QuickFilterTag$1[]>;
617
+ private _debounceTimer;
618
+ constructor();
619
+ ngOnDestroy(): void;
620
+ isMultiField(field: FilterFieldConfig): boolean;
621
+ resolveInputType(field: FilterFieldConfig): InputType;
622
+ stringValue(field: FilterFieldConfig): string;
623
+ multiValue(field: FilterFieldConfig): string[];
624
+ onFieldChange(key: string, value: string): void;
625
+ private sanitizeText;
626
+ onMultiChange(key: string, value: string[]): void;
627
+ onSubmit(): void;
628
+ onReset(): void;
629
+ onClearAll(): void;
630
+ onFilterTagClick(tag: QuickFilterTag$1): void;
631
+ private defaultFor;
632
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterForm, never>;
633
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterForm, "ncim-filter-form", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "quickFilterTitle": { "alias": "quickFilterTitle"; "required": false; "isSignal": true; }; "quickFilterCounter": { "alias": "quickFilterCounter"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; "filterSubmit": "filterSubmit"; "filterReset": "filterReset"; "saveFilterClick": "saveFilterClick"; }, never, never, true, never>;
634
+ }
635
+
636
+ declare class PackageFeatureCard {
637
+ title: _angular_core.InputSignal<string>;
638
+ description: _angular_core.InputSignal<string>;
639
+ popular: _angular_core.InputSignal<boolean>;
640
+ special: _angular_core.InputSignal<boolean>;
641
+ price: _angular_core.InputSignal<string | number | null>;
642
+ period: _angular_core.InputSignal<"monthly" | "yearly">;
643
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PackageFeatureCard, never>;
644
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PackageFeatureCard, "ncim-package-feature-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "popular": { "alias": "popular"; "required": false; "isSignal": true; }; "special": { "alias": "special"; "required": false; "isSignal": true; }; "price": { "alias": "price"; "required": false; "isSignal": true; }; "period": { "alias": "period"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[confirmation]"], true, never>;
645
+ }
646
+
647
+ declare class BulletList {
648
+ items: _angular_core.InputSignal<string[]>;
649
+ maxColumns: _angular_core.InputSignal<number>;
650
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BulletList, never>;
651
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BulletList, "ncim-bullet-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "maxColumns": { "alias": "maxColumns"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
652
+ }
653
+
654
+ declare class Checkbox implements ControlValueAccessor {
655
+ readonly label: _angular_core.InputSignal<string>;
656
+ readonly inputId: _angular_core.InputSignal<string | undefined>;
657
+ readonly checked: _angular_core.WritableSignal<boolean>;
658
+ readonly disabled: _angular_core.WritableSignal<boolean>;
659
+ private readonly ngControl;
660
+ constructor();
661
+ get disabledClass(): boolean;
662
+ changed: _angular_core.OutputEmitterRef<boolean>;
663
+ private onChange;
664
+ private onTouched;
665
+ onToggle(): void;
666
+ writeValue(value: boolean): void;
667
+ registerOnChange(fn: (value: boolean) => void): void;
668
+ registerOnTouched(fn: () => void): void;
669
+ setDisabledState(isDisabled: boolean): void;
670
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Checkbox, never>;
671
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Checkbox, "ncim-checkbox", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
672
+ }
673
+
674
+ declare class CardsStatistics {
675
+ readonly title: _angular_core.InputSignal<string>;
676
+ readonly totalNumber: _angular_core.InputSignal<string | number>;
677
+ readonly icon: _angular_core.InputSignal<string>;
678
+ readonly iconColor: _angular_core.InputSignal<string>;
679
+ readonly iconBackgroundColor: _angular_core.InputSignal<string>;
680
+ readonly trendPercentage: _angular_core.InputSignal<number>;
681
+ readonly trendLabel: _angular_core.InputSignal<string>;
682
+ readonly bgImage: _angular_core.InputSignal<string>;
683
+ readonly progressIcon: _angular_core.InputSignal<string>;
684
+ readonly loading: _angular_core.InputSignal<boolean>;
685
+ readonly loadingDelay: _angular_core.InputSignal<number>;
686
+ readonly showSkeleton: _angular_core.WritableSignal<boolean>;
687
+ constructor();
688
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardsStatistics, never>;
689
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardsStatistics, "ncim-cards-statistics", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "totalNumber": { "alias": "totalNumber"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "iconBackgroundColor": { "alias": "iconBackgroundColor"; "required": false; "isSignal": true; }; "trendPercentage": { "alias": "trendPercentage"; "required": false; "isSignal": true; }; "trendLabel": { "alias": "trendLabel"; "required": false; "isSignal": true; }; "bgImage": { "alias": "bgImage"; "required": false; "isSignal": true; }; "progressIcon": { "alias": "progressIcon"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingDelay": { "alias": "loadingDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
690
+ }
691
+
692
+ declare class CaptchaInput {
693
+ readonly label: _angular_core.InputSignal<string>;
694
+ readonly placeholder: _angular_core.InputSignal<string>;
695
+ readonly imageSrc: _angular_core.InputSignal<string>;
696
+ readonly submitted: _angular_core.InputSignal<boolean>;
697
+ readonly control: _angular_core.InputSignal<FormControl<string | null>>;
698
+ readonly refresh: _angular_core.OutputEmitterRef<void>;
699
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CaptchaInput, never>;
700
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CaptchaInput, "ncim-captcha-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": true; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; "control": { "alias": "control"; "required": true; "isSignal": true; }; }, { "refresh": "refresh"; }, never, never, true, never>;
701
+ }
702
+
703
+ declare class EntityTypeCard {
704
+ readonly title: _angular_core.InputSignal<string>;
705
+ readonly description: _angular_core.InputSignal<string>;
706
+ readonly icon: _angular_core.InputSignal<IconName>;
707
+ readonly isSelected: _angular_core.InputSignal<boolean>;
708
+ readonly selectionMade: _angular_core.OutputEmitterRef<void>;
709
+ readonly isDisabled: _angular_core.InputSignal<boolean>;
710
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityTypeCard, never>;
711
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityTypeCard, "ncim-entity-type-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "isSelected": { "alias": "isSelected"; "required": false; "isSignal": true; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; }, { "selectionMade": "selectionMade"; }, never, never, true, never>;
712
+ }
713
+
714
+ type EntityInfoCardBadgeTone = 'success' | 'info';
715
+ declare class EntityInfoCard {
716
+ /** i18n key for the top pill (e.g. office role label). */
717
+ readonly labelKey: _angular_core.InputSignal<string>;
718
+ /** i18n key for the primary title (company / office name). */
719
+ readonly nameKey: _angular_core.InputSignal<string>;
720
+ /** i18n key for the ID line label (e.g. commercial register / national ID). */
721
+ readonly idLabelKey: _angular_core.InputSignal<string>;
722
+ /** Raw identifier value (digits); not passed through translate. */
723
+ readonly idValue: _angular_core.InputSignal<string>;
724
+ /** Optional image URL for logo; when set, overrides `iconName`. */
725
+ readonly logoSrc: _angular_core.InputSignal<string | null>;
726
+ /** Accessible label for logo image (plain text, not a key). */
727
+ readonly logoAlt: _angular_core.InputSignal<string>;
728
+ /** Icon when `logoSrc` is not set. */
729
+ readonly iconName: _angular_core.InputSignal<IconName>;
730
+ /** Icon size inside the framed logo area (px). */
731
+ readonly iconSize: _angular_core.InputSignal<number>;
732
+ /** Pill background: mint (supervising) vs light blue (designer). */
733
+ readonly badgeTone: _angular_core.InputSignal<EntityInfoCardBadgeTone>;
734
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityInfoCard, never>;
735
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityInfoCard, "ncim-entity-info-card", never, { "labelKey": { "alias": "labelKey"; "required": true; "isSignal": true; }; "nameKey": { "alias": "nameKey"; "required": true; "isSignal": true; }; "idLabelKey": { "alias": "idLabelKey"; "required": true; "isSignal": true; }; "idValue": { "alias": "idValue"; "required": true; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "logoAlt": { "alias": "logoAlt"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "badgeTone": { "alias": "badgeTone"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
736
+ }
737
+
738
+ declare class SummaryCard {
739
+ readonly icon: _angular_core.InputSignal<IconName>;
740
+ readonly label: _angular_core.InputSignal<string>;
741
+ readonly value: _angular_core.InputSignal<string>;
742
+ readonly subValue: _angular_core.InputSignal<string>;
743
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SummaryCard, never>;
744
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SummaryCard, "ncim-summary-card", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "subValue": { "alias": "subValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
745
+ }
746
+
747
+ declare class LicenseStatusCard {
748
+ /** Display text for the status pill (pass translated string from parent). */
749
+ readonly status: _angular_core.InputSignal<string>;
750
+ /** Date segment for the issued line (translated / formatted). */
751
+ readonly issueDate: _angular_core.InputSignal<string>;
752
+ readonly licenseNumber: _angular_core.InputSignal<string>;
753
+ readonly city: _angular_core.InputSignal<string>;
754
+ readonly municipality: _angular_core.InputSignal<string>;
755
+ readonly expiryDate: _angular_core.InputSignal<string>;
756
+ /** i18n key for "Issued {{date}}" style line; date is passed as `issueDate`. */
757
+ readonly issuedLineKey: _angular_core.InputSignal<string>;
758
+ readonly licenseNumberLabelKey: _angular_core.InputSignal<string>;
759
+ readonly amanahLabelKey: _angular_core.InputSignal<string>;
760
+ readonly municipalityLabelKey: _angular_core.InputSignal<string>;
761
+ readonly expiresLabelKey: _angular_core.InputSignal<string>;
762
+ /** Watermark image URL (served from app `core/assets`). */
763
+ readonly watermarkSrc: _angular_core.InputSignal<string>;
764
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LicenseStatusCard, never>;
765
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LicenseStatusCard, "ncim-license-status-card", never, { "status": { "alias": "status"; "required": true; "isSignal": true; }; "issueDate": { "alias": "issueDate"; "required": true; "isSignal": true; }; "licenseNumber": { "alias": "licenseNumber"; "required": true; "isSignal": true; }; "city": { "alias": "city"; "required": true; "isSignal": true; }; "municipality": { "alias": "municipality"; "required": true; "isSignal": true; }; "expiryDate": { "alias": "expiryDate"; "required": true; "isSignal": true; }; "issuedLineKey": { "alias": "issuedLineKey"; "required": false; "isSignal": true; }; "licenseNumberLabelKey": { "alias": "licenseNumberLabelKey"; "required": false; "isSignal": true; }; "amanahLabelKey": { "alias": "amanahLabelKey"; "required": false; "isSignal": true; }; "municipalityLabelKey": { "alias": "municipalityLabelKey"; "required": false; "isSignal": true; }; "expiresLabelKey": { "alias": "expiresLabelKey"; "required": false; "isSignal": true; }; "watermarkSrc": { "alias": "watermarkSrc"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
766
+ }
767
+
768
+ declare class StatsAnalyticsCard {
769
+ /** Card heading (pass translated string from parent). */
770
+ readonly title: _angular_core.InputSignal<string>;
771
+ /** Optional action label (e.g. “All reports”) on the same row as the title (LTR: link left, title right). */
772
+ readonly titleLinkText: _angular_core.InputSignal<string>;
773
+ readonly value: _angular_core.InputSignal<string | number>;
774
+ /** Shown after the main value, e.g. 8.2 for "8.2%". Omit when null to hide the percentage. */
775
+ readonly percentage: _angular_core.InputSignal<number | null>;
776
+ readonly trend: _angular_core.InputSignal<"up" | "down">;
777
+ /** Short label after the percentage (e.g. "New" / "جديدة"). */
778
+ readonly trendLabel: _angular_core.InputSignal<string>;
779
+ /** When false, hides the trend arrow (e.g. compact KPI row). */
780
+ readonly showTrendIcon: _angular_core.InputSignal<boolean>;
781
+ /** Sparkline series; omit or pass [] to hide the chart area. */
782
+ readonly chartData: _angular_core.InputSignal<readonly number[]>;
783
+ readonly chartColor: _angular_core.InputSignal<string>;
784
+ /** Figma chart box height; composed from spacing scale (40 + 6 px). */
785
+ readonly chartHeight: _angular_core.InputSignal<number>;
786
+ readonly chartLineWidth: _angular_core.InputSignal<number>;
787
+ readonly chartSmooth: _angular_core.InputSignal<boolean>;
788
+ readonly chartShowArea: _angular_core.InputSignal<boolean>;
789
+ /** Sparkline ↔ text gap: `sm` 12px (first KPI card), `md` 16px (second). */
790
+ readonly surfaceGap: _angular_core.InputSignal<"sm" | "md">;
791
+ readonly trendIcon: _angular_core.Signal<"trend-down-arrow" | "trend-up-arrow">;
792
+ readonly showChart: _angular_core.Signal<boolean>;
793
+ /** Mutable series for `ncim-sparkline` — satisfies template assignability to `number[]`. */
794
+ readonly sparklineData: _angular_core.Signal<number[]>;
795
+ readonly titleLinkUrl: _angular_core.InputSignal<string>;
796
+ readonly titleLinkTarget: _angular_core.InputSignal<string>;
797
+ readonly percentageLabel: _angular_core.InputSignal<string>;
798
+ readonly percentageValue: _angular_core.InputSignal<number>;
799
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatsAnalyticsCard, never>;
800
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatsAnalyticsCard, "ncim-stats-analytics-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleLinkText": { "alias": "titleLinkText"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "percentage": { "alias": "percentage"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendLabel": { "alias": "trendLabel"; "required": false; "isSignal": true; }; "showTrendIcon": { "alias": "showTrendIcon"; "required": false; "isSignal": true; }; "chartData": { "alias": "chartData"; "required": false; "isSignal": true; }; "chartColor": { "alias": "chartColor"; "required": false; "isSignal": true; }; "chartHeight": { "alias": "chartHeight"; "required": false; "isSignal": true; }; "chartLineWidth": { "alias": "chartLineWidth"; "required": false; "isSignal": true; }; "chartSmooth": { "alias": "chartSmooth"; "required": false; "isSignal": true; }; "chartShowArea": { "alias": "chartShowArea"; "required": false; "isSignal": true; }; "surfaceGap": { "alias": "surfaceGap"; "required": false; "isSignal": true; }; "titleLinkUrl": { "alias": "titleLinkUrl"; "required": false; "isSignal": true; }; "titleLinkTarget": { "alias": "titleLinkTarget"; "required": false; "isSignal": true; }; "percentageLabel": { "alias": "percentageLabel"; "required": false; "isSignal": true; }; "percentageValue": { "alias": "percentageValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
801
+ }
802
+
803
+ interface AIChatAction {
804
+ type: string;
805
+ icon: string;
806
+ }
807
+ declare class AiChating {
808
+ readonly recommendationText: _angular_core.InputSignal<string>;
809
+ readonly recommendationLinkText: _angular_core.InputSignal<string>;
810
+ readonly recommendationLinkUrl: _angular_core.InputSignal<string>;
811
+ readonly actions: _angular_core.InputSignal<AIChatAction[]>;
812
+ readonly environment: _libs_core.Environment;
813
+ readonly actionClick: _angular_core.OutputEmitterRef<string>;
814
+ onAction(action: AIChatAction | string): void;
815
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiChating, never>;
816
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiChating, "ncim-ai-chating", never, { "recommendationText": { "alias": "recommendationText"; "required": false; "isSignal": true; }; "recommendationLinkText": { "alias": "recommendationLinkText"; "required": false; "isSignal": true; }; "recommendationLinkUrl": { "alias": "recommendationLinkUrl"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, never, true, never>;
817
+ }
818
+
819
+ interface ContestedViolationStatus {
820
+ label: string;
821
+ color: 'warning' | 'success' | 'danger' | 'neutral';
822
+ /** Optional custom text & indicator color — overrides the CSS modifier class */
823
+ textColor?: string;
824
+ /** Optional custom background color — overrides the CSS modifier class */
825
+ backgroundColor?: string;
826
+ }
827
+ interface ContestedViolationData {
828
+ title: string;
829
+ violationId: string;
830
+ date: string;
831
+ status: ContestedViolationStatus;
832
+ description: string;
833
+ entity: string;
834
+ penalty: string;
835
+ }
836
+ declare class ContestedViolation {
837
+ data: _angular_core.InputSignal<ContestedViolationData>;
838
+ detailsClick: _angular_core.OutputEmitterRef<void>;
839
+ readonly ICONS: {
840
+ readonly PAGES_ICONS: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M19.002 1.25977C20.5198 1.26086 21.7498 2.49192 21.75 4.00977V19.999C21.7497 21.5176 20.5186 22.749 19 22.749H5C3.48137 22.749 2.25025 21.5176 2.25 19.999V4C2.25 2.48045 3.48241 1.24892 5.00195 1.25L19.002 1.25977ZM5.00098 2.75C4.31027 2.7495 3.75 3.30929 3.75 4V19.999C3.75025 20.6892 4.3098 21.249 5 21.249H19C19.6902 21.249 20.2497 20.6892 20.25 19.999V4.00977C20.2498 3.31995 19.6908 2.7603 19.001 2.75977L5.00098 2.75ZM10.5557 13.75C10.9698 13.7501 11.3057 14.0858 11.3057 14.5C11.3057 14.9142 10.9698 15.2499 10.5557 15.25H7C6.58579 15.25 6.25 14.9142 6.25 14.5C6.25 14.0858 6.58579 13.75 7 13.75H10.5557ZM15 8.75C15.4142 8.75 15.75 9.08579 15.75 9.5C15.75 9.91421 15.4142 10.25 15 10.25H7C6.58579 10.25 6.25 9.91421 6.25 9.5C6.25 9.08579 6.58579 8.75 7 8.75H15Z\" fill=\"currentColor\"/></svg>";
841
+ readonly PRINT_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\"><path d=\"M14.25 0C15.4926 0 16.5 1.00736 16.5 2.25V6H17.75C19.8211 6 21.5 7.67893 21.5 9.75V15.75C21.5 16.7165 20.7165 17.5 19.75 17.5H16.5V18.75C16.5 20.2688 15.2688 21.5 13.75 21.5H7.75C6.23122 21.5 5 20.2688 5 18.75V17.5H1.75C0.783502 17.5 0 16.7165 0 15.75V9.75C0 7.67893 1.67893 6 3.75 6H5V2.25C5 1.00736 6.00736 0 7.25 0H14.25ZM6.5 18.75C6.5 19.4404 7.05964 20 7.75 20H13.75C14.4404 20 15 19.4404 15 18.75V15.5H6.5V18.75ZM3.75 7.5C2.50736 7.5 1.5 8.50736 1.5 9.75V15.75C1.5 15.8881 1.61193 16 1.75 16H5V14.75C5 14.3358 5.33579 14 5.75 14H15.75C16.1642 14 16.5 14.3358 16.5 14.75V16H19.75C19.8881 16 20 15.8881 20 15.75V9.75C20 8.50736 18.9926 7.5 17.75 7.5H3.75ZM17.2588 9.25C17.8111 9.25 18.2588 9.69771 18.2588 10.25C18.2588 10.8023 17.8111 11.25 17.2588 11.25H17.25C16.6977 11.25 16.25 10.8023 16.25 10.25C16.25 9.69771 16.6977 9.25 17.25 9.25H17.2588ZM7.25 1.5C6.83579 1.5 6.5 1.83579 6.5 2.25V6H15V2.25C15 1.83579 14.6642 1.5 14.25 1.5H7.25Z\" fill=\"currentColor\"/></svg>";
842
+ readonly DELETE_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"22\" viewBox=\"0 0 20 22\" fill=\"none\"><path d=\"M11.5908 0C12.2908 8.59975e-05 12.9235 0.41719 13.1992 1.06055L14.2441 3.5H18.75C19.1642 3.5 19.5 3.83579 19.5 4.25C19.5 4.66421 19.1642 5 18.75 5H17.9561L17.1123 18.916C17.0243 20.3675 15.8214 21.5 14.3672 21.5H5.13281C3.67864 21.5 2.47567 20.3675 2.3877 18.916L1.54395 5H0.75C0.335786 5 0 4.66421 0 4.25C0 3.83579 0.335786 3.5 0.75 3.5H5.25586L6.30078 1.06055C6.57652 0.41719 7.20923 8.59974e-05 7.90918 0H11.5908ZM3.88477 18.8252C3.92475 19.485 4.47182 20 5.13281 20H14.3672C15.0282 20 15.5752 19.485 15.6152 18.8252L16.4531 5H3.04688L3.88477 18.8252ZM11.25 13.5C11.6642 13.5 12 13.8358 12 14.25C12 14.6642 11.6642 15 11.25 15H8.25C7.83579 15 7.5 14.6642 7.5 14.25C7.5 13.8358 7.83579 13.5 8.25 13.5H11.25ZM12.75 9.5C13.1642 9.5 13.5 9.83579 13.5 10.25C13.5 10.6642 13.1642 11 12.75 11H6.75C6.33579 11 6 10.6642 6 10.25C6 9.83579 6.33579 9.5 6.75 9.5H12.75ZM7.90918 1.5C7.80932 1.50009 7.71909 1.5596 7.67969 1.65137L6.8877 3.5H12.6123L11.8203 1.65137C11.7809 1.5596 11.6907 1.50009 11.5908 1.5H7.90918Z\" fill=\"currentColor\"/></svg>";
843
+ readonly COPY_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><g clip-path=\"url(#clip0_5613_101839)\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M13.335 0.841797C14.3468 0.842691 15.1669 1.66294 15.167 2.67481V9.33496C15.167 10.3475 14.3455 11.1689 13.333 11.1689H12.5V13.334C12.5 14.3464 11.6794 15.1678 10.667 15.168H2.66699C1.65447 15.168 0.833008 14.3465 0.833008 13.334V6.00293C0.833008 4.9895 1.65556 4.16866 2.66895 4.16992L3.5 4.1709V2.66992C3.5 1.65692 4.32196 0.835265 5.33496 0.835938L13.335 0.841797ZM2.66797 5.16992C2.20727 5.16927 1.83301 5.54223 1.83301 6.00293V13.334C1.83301 13.7942 2.20675 14.168 2.66699 14.168H10.667C11.1271 14.1678 11.5 13.7941 11.5 13.334V11.1689H5.33301C4.32064 11.1688 3.5 10.3474 3.5 9.33496V5.1709L2.66797 5.16992ZM5.33398 1.83594C4.87353 1.83563 4.5 2.20947 4.5 2.66992V9.33496C4.5 9.79509 4.87292 10.1688 5.33301 10.1689H13.333C13.7932 10.1689 14.167 9.7952 14.167 9.33496V2.67481C14.1669 2.21487 13.7939 1.84216 13.334 1.8418L5.33398 1.83594Z\" fill=\"#384250\"/></g><defs><clipPath id=\"clip0_5613_101839\"><rect width=\"16\" height=\"16\" fill=\"white\"/></clipPath></defs></svg>";
844
+ readonly MESSAGE_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"96\" height=\"94\" fill=\"none\" viewBox=\"0 0 96 94\"><g filter=\"url(#a)\"><path fill=\"url(#b)\" d=\"M23.47 44.623c2.974 2.337 6.679 3.59 10.415 4.204q.49.085.983.147 1.134.158 2.275.255a3.85 3.85 0 0 1 3.519 3.836v5.255c0 .794.984 1.184 1.51.588 1.878-2.134 4.901-3.994 8.069-5.517.925-.451 1.867-.868 2.801-1.253 5.212-2.18 10.038-3.409 10.038-3.409q1.206-.28 2.377-.673c.048-.016.09-.024.13-.04q.331-.111.647-.22l.09-.034v-.008c3.287-1.205 6.31-3.073 8.547-5.736 3.147-3.753 4.474-8.71 4.974-13.577.64-6.294-.05-13.103-3.531-18.527C72.78 4.4 66.882 1.416 60.524.474c-5.425-.811-10.939-.36-16.43-.246C37.4.376 30.207.146 24.61 3.833c-3.195 2.106-5.548 5.352-6.973 8.908-1.434 3.556-1.983 7.408-2.065 11.242-.171 7.637 1.877 15.92 7.9 20.64\"/><path fill=\"url(#c)\" d=\"M62.292 37.959c-1.77 1.389-3.974 2.135-6.196 2.501a13 13 0 0 1-.62.092c-1.94.27-3.413 1.872-3.413 3.83v.863c0 .754-.9 1.16-1.452.647-1.112-1.035-2.65-1.948-4.248-2.717-.55-.268-1.11-.517-1.667-.745-3.1-1.297-5.972-2.029-5.972-2.029q-.72-.166-1.415-.4c-.029-.01-.053-.015-.077-.024l-.44-.152v-.004c-1.954-.717-3.754-1.829-5.084-3.414-1.873-2.232-2.662-5.181-2.96-8.078-.38-3.744.03-7.797 2.1-11.024 2.102-3.281 5.613-5.056 9.397-5.616 3.227-.483 6.509-.215 9.775-.147 3.983.088 8.264-.049 11.594 2.145 1.901 1.253 3.301 3.185 4.15 5.3.853 2.117 1.18 4.407 1.228 6.69.102 4.544-1.116 9.473-4.7 12.282\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#d)\" d=\"m44.799 49.56 5.44 3.828a50 50 0 0 1 2.802-1.253c5.212-2.18 10.038-3.408 10.038-3.408s-5.162 1.35-18.28.833\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"#fff\" d=\"M62.292 35.817c-1.77 1.39-3.974 2.136-6.196 2.501q-.294.052-.586.088l-.034.005c-1.94.27-3.413 1.872-3.413 3.83v.863c0 .754-.9 1.16-1.452.647-1.112-1.035-2.65-1.948-4.248-2.716-.55-.269-1.11-.517-1.667-.747-3.1-1.297-5.972-2.028-5.972-2.028q-.72-.167-1.415-.4c-.029-.01-.053-.015-.077-.024l-.44-.151v-.005c-1.954-.716-3.754-1.828-5.084-3.413-1.873-2.233-2.662-5.183-2.96-8.079-.38-3.745.03-7.796 2.1-11.023 2.102-3.282 5.613-5.056 9.397-5.617 3.227-.483 6.509-.215 9.775-.147 3.983.088 8.264-.048 11.594 2.146 1.901 1.253 3.301 3.183 4.15 5.3.853 2.116 1.18 4.407 1.228 6.688.102 4.544-1.116 9.474-4.7 12.282\"/><path fill=\"url(#e)\" d=\"m49.6 38.754-3.237 2.278c-.55-.268-1.11-.517-1.667-.747-3.101-1.297-5.972-2.027-5.972-2.027s3.07.803 10.877.496\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#f)\" d=\"M54.255 24.653a3.707 3.707 0 1 0 7.414 0 3.707 3.707 0 0 0-7.414 0\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#g)\" d=\"M44.103 24.653a3.707 3.707 0 1 0 7.414 0 3.707 3.707 0 0 0-7.414 0\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/><path fill=\"url(#h)\" d=\"M33.95 24.653a3.707 3.707 0 1 0 7.415 0 3.707 3.707 0 0 0-7.415 0\" opacity=\".51\" style=\"mix-blend-mode:multiply\"/></g><defs><linearGradient id=\"b\" x1=\"108.145\" x2=\"75.64\" y1=\"95.649\" y2=\"1.916\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#19004d\"/><stop offset=\"1\" stop-color=\"#54c08a\"/></linearGradient><linearGradient id=\"c\" x1=\"31.993\" x2=\"31.312\" y1=\"17.063\" y2=\"50.677\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".606\" stop-color=\"#19004d\" stop-opacity=\".91\"/><stop offset=\".746\" stop-color=\"#a58cf4\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"d\" x1=\"54.82\" x2=\"50.338\" y1=\"44.667\" y2=\"56.993\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".512\" stop-color=\"#19004d\" stop-opacity=\".91\"/><stop offset=\".76\" stop-color=\"#a58cf4\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"e\" x1=\"43.638\" x2=\"46.304\" y1=\"35.842\" y2=\"43.176\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".512\" stop-color=\"#1b8354\"/><stop offset=\".76\" stop-color=\"#1b8354\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"f\" x1=\"66.672\" x2=\"56.235\" y1=\"32.49\" y2=\"8.404\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".267\" stop-color=\"#1b8354\"/><stop offset=\".63\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"g\" x1=\"56.52\" x2=\"46.083\" y1=\"32.49\" y2=\"8.404\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".267\" stop-color=\"#1b8354\"/><stop offset=\".63\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"h\" x1=\"46.368\" x2=\"35.931\" y1=\"32.49\" y2=\"8.404\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".267\" stop-color=\"#1b8354\"/><stop offset=\".63\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><filter id=\"a\" width=\"95.62\" height=\"93.256\" x=\"0\" y=\"0\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/><feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/><feMorphology in=\"SourceAlpha\" radius=\"14.439\" result=\"effect1_dropShadow_6167_40545\"/><feOffset dy=\"18.5\"/><feGaussianBlur stdDeviation=\"15\"/><feComposite in2=\"hardAlpha\" operator=\"out\"/><feColorMatrix values=\"0 0 0 0 0.105882 0 0 0 0 0.513726 0 0 0 0 0.329412 0 0 0 0.24 0\"/><feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_6167_40545\"/><feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_6167_40545\" result=\"shape\"/></filter></defs></svg>";
845
+ readonly SAR_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" fill=\"none\" viewBox=\"0 0 16 17\"><path fill=\"#161616\" d=\"M15.213 13.022a6.7 6.7 0 0 0 .558-2.084l-4.807 1.022V9.995l4.249-.903a6.7 6.7 0 0 0 .558-2.084l-4.807 1.021V.961A6.8 6.8 0 0 0 9.04 2.575v5.863l-1.922.409V0a6.8 6.8 0 0 0-1.923 1.613v7.642l-4.301.914a6.7 6.7 0 0 0-.559 2.084l4.86-1.032v2.475l-5.208 1.106a6.7 6.7 0 0 0-.558 2.085l5.452-1.159a1.73 1.73 0 0 0 1.073-.716l1-1.482a.96.96 0 0 0 .164-.538v-2.18l1.922-.409v3.931z\"/></svg>";
846
+ readonly LAYERS_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"18\" fill=\"none\" viewBox=\"0 0 17 18\"><path fill=\"#1f2a37\" d=\"M14.296 11.785c.28-.36.79-.42 1.142-.133.435.356.812.846.812 1.529 0 .862-.593 1.408-1.173 1.79-.583.385-1.426.779-2.44 1.253l-1.447.675-.156.074c-1.19.557-2.016.943-2.909.943s-1.718-.386-2.91-.943l-.154-.074-1.448-.675c-1.014-.474-1.857-.868-2.44-1.252C.593 14.589 0 14.042 0 13.18c0-.683.377-1.173.813-1.529a.8.8 0 0 1 1.141.133c.28.36.222.884-.129 1.171a.8.8 0 0 0-.19.197c-.01.019-.01.024-.01.027l.001.008a.2.2 0 0 0 .03.05c.053.07.165.18.396.331.472.311 1.206.657 2.298 1.167l1.384.647c1.41.659 1.895.866 2.391.866s.981-.207 2.39-.866l1.385-.647c1.092-.51 1.826-.856 2.298-1.167.23-.152.343-.261.396-.33a.2.2 0 0 0 .03-.05l.001-.008v-.001c0-.003 0-.008-.01-.027a.8.8 0 0 0-.19-.197.85.85 0 0 1-.13-1.17m0-4.27c.28-.36.79-.42 1.142-.133.435.356.812.846.812 1.528 0 .862-.593 1.408-1.173 1.79-.583.384-1.426.78-2.44 1.253l-1.447.676-.156.073c-1.19.557-2.016.944-2.909.944s-1.718-.387-2.91-.944l-.154-.073-1.448-.676c-1.014-.474-1.857-.869-2.44-1.253C.593 10.318 0 9.772 0 8.91c0-.682.377-1.172.813-1.528a.8.8 0 0 1 1.141.133c.28.36.222.884-.129 1.17a.8.8 0 0 0-.19.198c-.01.018-.01.022-.01.025v.002l.001.008c.001.003.008.02.03.05.053.07.165.18.396.33.472.312 1.206.657 2.298 1.167l1.384.647c1.41.659 1.895.867 2.391.867s.981-.208 2.39-.867l1.385-.647c1.092-.51 1.826-.855 2.298-1.166.23-.152.343-.262.396-.331a.2.2 0 0 0 .03-.05l.001-.008v-.002c0-.003 0-.007-.01-.025a.8.8 0 0 0-.19-.197.85.85 0 0 1-.13-1.171M8.125 0c.871 0 1.68.374 2.928.951l.132.06 1.47.68c1.052.486 1.905.882 2.49 1.263.586.382 1.105.879 1.105 1.629s-.519 1.247-1.104 1.629-1.44.777-2.49 1.263l-1.471.68-.132.06c-1.249.577-2.057.951-2.928.951s-1.68-.374-2.928-.951l-.132-.06-1.47-.68c-1.052-.486-1.905-.882-2.49-1.263C.518 5.83 0 5.334 0 4.583c0-.75.519-1.247 1.104-1.629s1.44-.777 2.49-1.263l1.471-.68.132-.06C6.446.374 7.254 0 8.125 0\"/></svg>";
847
+ readonly FILE_ICON: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"17\" fill=\"none\" viewBox=\"0 0 18 17\"><path fill=\"#1b8354\" d=\"M6.904 0a1.63 1.63 0 0 1 1.348.705l1.14 1.67h4.428c1.342 0 2.43 1.063 2.43 2.375v1.917h.184c.97 0 1.715.922 1.419 1.882l-2.059 6.667a1.48 1.48 0 0 1-1.418 1.034H2.855c-.694 0-1.311-.477-1.454-1.169L.031 8.414c-.19-.925.537-1.747 1.452-1.747h.183V1.583C1.666.709 2.392 0 3.286 0zM3.286 6.667H14.63V4.75a.8.8 0 0 0-.81-.792H8.96a.82.82 0 0 1-.676-.353L6.904 1.583H3.286z\"/></svg>";
848
+ readonly INFO_CIRCLE: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>";
849
+ readonly SAND_GLASS: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 22h14\"/><path d=\"M5 2h14\"/><path d=\"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22\"/><path d=\"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2\"/></svg>";
850
+ };
851
+ onDetailsClick(): void;
852
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContestedViolation, never>;
853
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContestedViolation, "ncim-contested-violation", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, { "detailsClick": "detailsClick"; }, never, never, true, never>;
854
+ }
855
+
856
+ declare class RangeBar implements ControlValueAccessor {
857
+ readonly min: _angular_core.InputSignal<number>;
858
+ readonly max: _angular_core.InputSignal<number>;
859
+ readonly step: _angular_core.InputSignal<number>;
860
+ readonly label: _angular_core.InputSignal<string>;
861
+ readonly disabled: _angular_core.InputSignal<boolean>;
862
+ readonly showValues: _angular_core.InputSignal<boolean>;
863
+ readonly value: _angular_core.InputSignal<number | [number, number]>;
864
+ readonly valueChange: _angular_core.OutputEmitterRef<number | [number, number]>;
865
+ protected readonly internalValue: _angular_core.WritableSignal<number | [number, number]>;
866
+ protected readonly isRange: _angular_core.Signal<boolean>;
867
+ protected startValue: _angular_core.Signal<number | [number, number]>;
868
+ protected endValue: _angular_core.Signal<number>;
869
+ protected isDisabled: _angular_core.WritableSignal<boolean>;
870
+ private readonly ngControl;
871
+ constructor();
872
+ writeValue(value: number | [number, number]): void;
873
+ registerOnChange(fn: (value: number | [number, number]) => void): void;
874
+ registerOnTouched(fn: () => void): void;
875
+ setDisabledState(isDisabled: boolean): void;
876
+ protected onChange(): void;
877
+ protected onTouched(): void;
878
+ private onChangeFn;
879
+ private onTouchedFn;
880
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RangeBar, never>;
881
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RangeBar, "ncim-range-bar", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
882
+ }
883
+
884
+ interface SearchableUserListItem {
885
+ id: string;
886
+ name: string;
887
+ }
888
+ declare class SearchableUsersList {
889
+ readonly title: _angular_core.InputSignal<string>;
890
+ readonly users: _angular_core.InputSignal<SearchableUserListItem[]>;
891
+ readonly searchPlaceholder: _angular_core.InputSignal<string>;
892
+ readonly deleteUser: _angular_core.OutputEmitterRef<SearchableUserListItem>;
893
+ protected readonly searchQuery: _angular_core.WritableSignal<string>;
894
+ protected readonly filteredUsers: _angular_core.Signal<SearchableUserListItem[]>;
895
+ protected onSearchInput(event: Event): void;
896
+ protected onDeleteClick(user: SearchableUserListItem): void;
897
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchableUsersList, never>;
898
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchableUsersList, "ncim-searchable-users-list", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "users": { "alias": "users"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; }, { "deleteUser": "deleteUser"; }, never, never, true, never>;
899
+ }
900
+
901
+ declare class CompleteTraining {
902
+ readonly illustration: _angular_core.InputSignal<string>;
903
+ readonly title: _angular_core.InputSignal<string>;
904
+ readonly description: _angular_core.InputSignal<string>;
905
+ readonly progress: _angular_core.InputSignal<number>;
906
+ readonly buttonLabel: _angular_core.InputSignal<string>;
907
+ readonly nextStep: _angular_core.OutputEmitterRef<void>;
908
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CompleteTraining, never>;
909
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CompleteTraining, "ncim-complete-training", never, { "illustration": { "alias": "illustration"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; "isSignal": true; }; }, { "nextStep": "nextStep"; }, never, never, true, never>;
910
+ }
911
+
912
+ declare class BasicCard {
913
+ label: _angular_core.InputSignal<string>;
914
+ value: _angular_core.InputSignal<string>;
915
+ fullWidth: _angular_core.InputSignal<boolean>;
916
+ /** `field`: label/value row inside a parent panel (no own surface); `card`: standalone padded tile. */
917
+ layout: _angular_core.InputSignal<"field" | "card">;
918
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BasicCard, never>;
919
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BasicCard, "ncim-basic-card", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
920
+ }
921
+
922
+ interface RequestStatus {
923
+ label: string;
924
+ color: 'warning' | 'success' | 'danger' | 'neutral';
925
+ }
926
+ interface RequestHeaderMetaItem {
927
+ label: string;
928
+ value: string;
929
+ icon: string;
930
+ }
931
+ declare class RequestHeader {
932
+ title: _angular_core.InputSignal<string>;
933
+ requestId: _angular_core.InputSignal<string>;
934
+ status: _angular_core.InputSignal<RequestStatus>;
935
+ metaItems: _angular_core.InputSignal<RequestHeaderMetaItem[]>;
936
+ data: _angular_core.InputSignal<string | undefined>;
937
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RequestHeader, never>;
938
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RequestHeader, "ncim-request-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "requestId": { "alias": "requestId"; "required": true; "isSignal": true; }; "status": { "alias": "status"; "required": true; "isSignal": true; }; "metaItems": { "alias": "metaItems"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
939
+ }
940
+
941
+ declare class RequestDetailsCard {
942
+ title: _angular_core.InputSignal<string>;
943
+ requestId: _angular_core.InputSignal<string>;
944
+ status: _angular_core.InputSignal<RequestStatus>;
945
+ metaItems: _angular_core.InputSignal<RequestHeaderMetaItem[]>;
946
+ data: _angular_core.InputSignal<string | undefined>;
947
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RequestDetailsCard, never>;
948
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RequestDetailsCard, "ncim-request-details-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "requestId": { "alias": "requestId"; "required": true; "isSignal": true; }; "status": { "alias": "status"; "required": true; "isSignal": true; }; "metaItems": { "alias": "metaItems"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
949
+ }
950
+
951
+ interface ViolationBreadcrumbItem {
952
+ label: string;
953
+ url?: string;
954
+ }
955
+ interface ActionButton {
956
+ label: string;
957
+ icon: string;
958
+ action: string;
959
+ disabled?: boolean;
960
+ /** When true, shows a spinner on this button and disables it. */
961
+ loading?: boolean;
962
+ }
963
+ declare class ViolationHeader {
964
+ readonly title: _angular_core.InputSignal<string>;
965
+ readonly breadcrumbs: _angular_core.InputSignal<ViolationBreadcrumbItem[]>;
966
+ readonly actions: _angular_core.InputSignal<ActionButton[]>;
967
+ readonly actionClick: _angular_core.OutputEmitterRef<string>;
968
+ readonly data: _angular_core.InputSignal<string | undefined>;
969
+ onActionClick(action: string): void;
970
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViolationHeader, never>;
971
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViolationHeader, "ncim-violation-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, never, true, never>;
972
+ }
973
+
974
+ interface Attachment {
975
+ id: string;
976
+ name: string;
977
+ type?: 'pdf' | 'image';
978
+ url: string;
979
+ previewUrl?: string;
980
+ }
981
+ declare class Attachments {
982
+ attachments: _angular_core.InputSignal<Attachment[]>;
983
+ title: _angular_core.InputSignal<string>;
984
+ downloadFile: _angular_core.OutputEmitterRef<string>;
985
+ violation: _angular_core.InputSignal<boolean>;
986
+ /** When true, PDF rows use a responsive 2-column grid (license-style layout). */
987
+ twoColumnGrid: _angular_core.InputSignal<boolean>;
988
+ /** Icon asset under assets/ncim-icons (e.g. stack, pdf). */
989
+ pdfIconName: _angular_core.InputSignal<string>;
990
+ pdfIconSize: _angular_core.InputSignal<number>;
991
+ getAttachmentType(attachment: Attachment): 'pdf' | 'image';
992
+ onDownload(fileId: string): void;
993
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Attachments, never>;
994
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Attachments, "ncim-attachments", never, { "attachments": { "alias": "attachments"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "violation": { "alias": "violation"; "required": false; "isSignal": true; }; "twoColumnGrid": { "alias": "twoColumnGrid"; "required": false; "isSignal": true; }; "pdfIconName": { "alias": "pdfIconName"; "required": false; "isSignal": true; }; "pdfIconSize": { "alias": "pdfIconSize"; "required": false; "isSignal": true; }; }, { "downloadFile": "downloadFile"; }, never, never, true, never>;
995
+ }
996
+
997
+ interface InspectorObservation {
998
+ reason?: string;
999
+ notes: string;
1000
+ attachments: Attachment[];
1001
+ }
1002
+ interface Recommendation {
1003
+ text: string;
1004
+ linkText: string;
1005
+ linkUrl: string;
1006
+ actions: {
1007
+ type: 'like' | 'dislike' | 'chat';
1008
+ label?: string;
1009
+ icon: string;
1010
+ }[];
1011
+ }
1012
+ interface CriteriaItem {
1013
+ id: number;
1014
+ title: string;
1015
+ tag: string;
1016
+ status?: 'success' | 'warning' | 'info' | 'danger';
1017
+ score: string;
1018
+ description: string;
1019
+ inspectorObservation: InspectorObservation;
1020
+ }
1021
+ interface CriteriaSectionData {
1022
+ title: string;
1023
+ criteria: CriteriaItem[];
1024
+ }
1025
+ declare class CriteriaSection {
1026
+ criteriaData: _angular_core.InputSignal<CriteriaSectionData | null>;
1027
+ recommendation: _angular_core.InputSignal<Recommendation | null>;
1028
+ actionClick: _angular_core.OutputEmitterRef<string>;
1029
+ downloadFile: _angular_core.OutputEmitterRef<string>;
1030
+ aiActionClick: _angular_core.OutputEmitterRef<string>;
1031
+ activeAccordionIndex: _angular_core.InputSignal<number>;
1032
+ onActionClick(actionType: string): void;
1033
+ onDownload(fileId: string): void;
1034
+ onAiAction(actionType: string): void;
1035
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CriteriaSection, never>;
1036
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CriteriaSection, "ncim-criteria-section", never, { "criteriaData": { "alias": "criteriaData"; "required": false; "isSignal": true; }; "recommendation": { "alias": "recommendation"; "required": false; "isSignal": true; }; "activeAccordionIndex": { "alias": "activeAccordionIndex"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; "downloadFile": "downloadFile"; "aiActionClick": "aiActionClick"; }, never, never, true, never>;
1037
+ }
1038
+
1039
+ declare enum ViolationStatusType {
1040
+ PendingPayment = 1,
1041
+ Paid = 2,
1042
+ ConfirmedViolation = 3,
1043
+ UnderAppeal = 4
1044
+ }
1045
+ interface ViolationStatus {
1046
+ label: string;
1047
+ type: any;
1048
+ /** Optional custom text & dot color — overrides the CSS class color */
1049
+ color?: string;
1050
+ /** Optional custom background color — overrides the CSS class background */
1051
+ backgroundColor?: string;
1052
+ }
1053
+ interface ViolationInfoLabels {
1054
+ title?: string;
1055
+ violatorLabel?: string;
1056
+ nationalNumberLabel?: string;
1057
+ activityLabel?: string;
1058
+ entityLabel?: string;
1059
+ createdDateLabel?: string;
1060
+ referenceNumberLabel?: string;
1061
+ }
1062
+ interface Violation {
1063
+ id: number;
1064
+ entity: string;
1065
+ fine: ViolationFine;
1066
+ business: ViolationBusiness;
1067
+ correctionPeriod: ViolationCorrectionPeriod;
1068
+ /** ISO date string e.g. '2025-11-03' */
1069
+ date: string;
1070
+ status: ViolationStatus;
1071
+ }
1072
+ interface ViolationInfo {
1073
+ violationNumber: string;
1074
+ referenceNumber: string;
1075
+ status: ViolationStatus;
1076
+ entityName: string;
1077
+ entityLogo: string;
1078
+ location: string;
1079
+ emirate: string;
1080
+ activity: string;
1081
+ nationalNumber: string;
1082
+ createdDate: Date;
1083
+ labels?: ViolationInfoLabels;
1084
+ violation?: boolean;
1085
+ applicant?: string;
1086
+ violatorName?: string;
1087
+ }
1088
+ declare class ViolationInfoCard {
1089
+ readonly violationInfo: _angular_core.InputSignal<ViolationInfo | null>;
1090
+ readonly environment: _libs_core.Environment;
1091
+ readonly copied: _angular_core.OutputEmitterRef<string>;
1092
+ private readonly defaultLabels;
1093
+ readonly labels: _angular_core.Signal<ViolationInfoLabels>;
1094
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViolationInfoCard, never>;
1095
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViolationInfoCard, "ncim-violation-info-card", never, { "violationInfo": { "alias": "violationInfo"; "required": false; "isSignal": true; }; }, { "copied": "copied"; }, never, never, true, never>;
1096
+ }
1097
+
1098
+ /**
1099
+ * Configuration for correction period display.
1100
+ */
1101
+ interface CorrectionPeriodConfig {
1102
+ barColor: string;
1103
+ textColor: string;
1104
+ iconName: string;
1105
+ }
1106
+
1107
+ interface ViolationSummaryLabels {
1108
+ violationDegreeLabel?: string;
1109
+ repeatCountLabel?: string;
1110
+ unitsLabel?: string;
1111
+ progressLabel?: string;
1112
+ dayLabel?: string;
1113
+ typeOfObjectionLabel?: string;
1114
+ }
1115
+ interface ViolationSummary {
1116
+ title?: string;
1117
+ violationDegree?: string;
1118
+ violationType?: string;
1119
+ repeatCount?: string;
1120
+ units?: string;
1121
+ daysRemaining?: number;
1122
+ totalDays?: number;
1123
+ progressLabel?: string;
1124
+ endDate?: Date;
1125
+ labels?: ViolationSummaryLabels;
1126
+ typeOfObjection?: string;
1127
+ }
1128
+ declare class ViolationSummaryCard {
1129
+ readonly summary: _angular_core.InputSignal<ViolationSummary | null>;
1130
+ private readonly defaultLabels;
1131
+ readonly labels: _angular_core.Signal<ViolationSummaryLabels>;
1132
+ readonly calculatedDaysRemaining: _angular_core.Signal<number>;
1133
+ readonly calculatedTotalDays: _angular_core.Signal<number | null>;
1134
+ readonly progressPercentage: _angular_core.Signal<number>;
1135
+ readonly progressConfig: _angular_core.Signal<CorrectionPeriodConfig>;
1136
+ readonly progressColor: _angular_core.Signal<string>;
1137
+ readonly progressTextColor: _angular_core.Signal<string>;
1138
+ readonly progressIconName: _angular_core.Signal<string>;
1139
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViolationSummaryCard, never>;
1140
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViolationSummaryCard, "ncim-violation-summary-card", never, { "summary": { "alias": "summary"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1141
+ }
1142
+
1143
+ interface PenaltyBadgeLabels {
1144
+ title?: string;
1145
+ durationLabel?: string;
1146
+ fineLabel?: string;
1147
+ objectionText?: string;
1148
+ objectionLink?: string;
1149
+ deadlineLabel?: string;
1150
+ }
1151
+ interface PenaltyInfo {
1152
+ penaltyType?: string;
1153
+ duration?: string;
1154
+ amount?: number;
1155
+ stampText?: string;
1156
+ stampDate?: Date;
1157
+ objectionDeadline?: string;
1158
+ objectionEndDate?: Date;
1159
+ labels?: PenaltyBadgeLabels;
1160
+ state?: boolean;
1161
+ image?: string;
1162
+ successMessage?: string;
1163
+ resolution?: string;
1164
+ }
1165
+ declare class PenaltyBadge {
1166
+ penalty: _angular_core.InputSignal<PenaltyInfo | null>;
1167
+ customStamp: _angular_core.InputSignal<boolean | undefined>;
1168
+ objectionLinkClick: _angular_core.OutputEmitterRef<void>;
1169
+ defaultLabels: PenaltyBadgeLabels;
1170
+ get labels(): PenaltyBadgeLabels;
1171
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PenaltyBadge, never>;
1172
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PenaltyBadge, "ncim-penalty-badge", never, { "penalty": { "alias": "penalty"; "required": false; "isSignal": true; }; "customStamp": { "alias": "customStamp"; "required": false; "isSignal": true; }; }, { "objectionLinkClick": "objectionLinkClick"; }, never, ["[stamp]"], true, never>;
1173
+ }
1174
+
1175
+ type DgaTagVariant = 'neutral' | 'success' | 'danger' | 'warning' | 'info' | 'purple';
1176
+ type DgaTagStyle = 'subtle' | 'inverted' | 'outline';
1177
+ type DgaTagSize = 'default' | 'sm' | 'xs';
1178
+ declare class DgaTag {
1179
+ readonly variant: _angular_core.InputSignal<DgaTagVariant>;
1180
+ readonly style: _angular_core.InputSignal<DgaTagStyle>;
1181
+ readonly size: _angular_core.InputSignal<DgaTagSize>;
1182
+ readonly textDark: _angular_core.InputSignal<boolean>;
1183
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
1184
+ readonly tagClasses: _angular_core.Signal<string>;
1185
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTag, never>;
1186
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTag, "ncim-dga-tag", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "style": { "alias": "style"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "textDark": { "alias": "textDark"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1187
+ }
1188
+
1189
+ interface TimelineStep {
1190
+ /** Label or i18n key for the step */
1191
+ label: string;
1192
+ /** Date for formatting. Ignored when dateDisplay is set. */
1193
+ date: Date;
1194
+ /** Whether this step is the active/latest one */
1195
+ isActive?: boolean;
1196
+ /** Optional pre-formatted date string. When set, used instead of date pipe. */
1197
+ dateDisplay?: string;
1198
+ }
1199
+ interface TimelineData {
1200
+ title: string;
1201
+ timelineSteps: TimelineStep[];
1202
+ }
1203
+ declare class ViolationTimeline {
1204
+ timeline: _angular_core.InputSignal<TimelineData | null>;
1205
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViolationTimeline, never>;
1206
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViolationTimeline, "ncim-violation-timeline", never, { "timeline": { "alias": "timeline"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1207
+ }
1208
+
1209
+ interface Permit {
1210
+ title: string;
1211
+ number: string;
1212
+ startDate: string;
1213
+ endDate: string;
1214
+ status: 'valid' | 'expiring' | 'expired';
1215
+ statusLabel: string;
1216
+ }
1217
+ interface VisitDetailsData {
1218
+ visitNumber: string;
1219
+ visitDate: string;
1220
+ supervisionType: string;
1221
+ licenseStatus: 'valid' | 'expired' | string;
1222
+ licenseStatusLabel: string;
1223
+ permits: Permit[];
1224
+ }
1225
+ declare class VisitDetails {
1226
+ data: _angular_core.InputSignal<VisitDetailsData>;
1227
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<VisitDetails, never>;
1228
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<VisitDetails, "ncim-visit-details", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1229
+ }
1230
+
1231
+ /**
1232
+ * Represents a single status box within the summary card.
1233
+ */
1234
+ interface SummaryStatusItem {
1235
+ /** Label for the status (e.g., 'ممتثل') */
1236
+ label: string;
1237
+ /** Numerical value to display */
1238
+ value: number;
1239
+ /** Status type for styling: 'success' | 'warning' | 'info' | 'danger' */
1240
+ status: 'success' | 'warning' | 'info' | 'danger';
1241
+ /** Icon name from the ncim-icon set */
1242
+ icon: string;
1243
+ }
1244
+ /**
1245
+ * Complete data structure for the Inspection Summary Card.
1246
+ */
1247
+ interface InspectionSummaryData {
1248
+ itemsCount: string | null | undefined;
1249
+ /** Main card title (e.g., 'نتيجة الفحص الفني') */
1250
+ title: string;
1251
+ /** Total items count */
1252
+ totalCount: number;
1253
+ /** Label for total items (e.g., 'بند') */
1254
+ totalCountLabel: string;
1255
+ /** List of individual status summaries */
1256
+ stats: SummaryStatusItem[];
1257
+ /** Latest approval/visit date */
1258
+ approvalDate: string;
1259
+ }
1260
+ declare class InspectionSummaryCard {
1261
+ data: _angular_core.InputSignal<InspectionSummaryData | null>;
1262
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InspectionSummaryCard, never>;
1263
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InspectionSummaryCard, "ncim-inspection-summary-card", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1264
+ }
1265
+
1266
+ declare class IconCard {
1267
+ readonly title: _angular_core.InputSignal<string>;
1268
+ readonly subTitle: _angular_core.InputSignal<string>;
1269
+ readonly icon: _angular_core.InputSignal<IconName>;
1270
+ readonly backgroundColor: _angular_core.InputSignal<string>;
1271
+ readonly iconSize: _angular_core.InputSignal<number>;
1272
+ readonly isSelected: _angular_core.InputSignal<boolean>;
1273
+ readonly isDisabled: _angular_core.InputSignal<boolean>;
1274
+ readonly useTranslate: _angular_core.InputSignal<boolean>;
1275
+ readonly clickable: _angular_core.InputSignal<boolean>;
1276
+ readonly clicked: _angular_core.OutputEmitterRef<void>;
1277
+ onSpaceKey(event: Event): void;
1278
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconCard, never>;
1279
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconCard, "ncim-icon-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subTitle": { "alias": "subTitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "isSelected": { "alias": "isSelected"; "required": false; "isSignal": true; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; "useTranslate": { "alias": "useTranslate"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
1280
+ }
1281
+
1282
+ declare class FormError {
1283
+ readonly show: _angular_core.InputSignal<boolean>;
1284
+ readonly messageKey: _angular_core.InputSignal<string>;
1285
+ readonly id: _angular_core.InputSignal<string | null>;
1286
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormError, never>;
1287
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormError, "ncim-form-error", never, { "show": { "alias": "show"; "required": true; "isSignal": true; }; "messageKey": { "alias": "messageKey"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1288
+ }
1289
+
1290
+ declare class FormLabel {
1291
+ readonly text: _angular_core.InputSignal<string>;
1292
+ readonly subText: _angular_core.InputSignal<string | undefined>;
1293
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormLabel, never>;
1294
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormLabel, "ncim-form-label", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "subText": { "alias": "subText"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1295
+ }
1296
+
1297
+ type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded' | 'avatar' | 'button' | 'chip' | 'card' | 'image' | 'header' | 'paragraph' | 'divider' | 'badge' | 'input';
1298
+ type SkeletonAnimation = 'pulse' | 'wave' | 'none';
1299
+ declare class Skeleton {
1300
+ /** Shape variant of the skeleton */
1301
+ readonly variant: _angular_core.InputSignal<SkeletonVariant>;
1302
+ /** Animation style */
1303
+ readonly animation: _angular_core.InputSignal<SkeletonAnimation>;
1304
+ /** Width — accepts any CSS value (px, %, rem, etc.). Defaults to 100% for most variants. */
1305
+ readonly width: _angular_core.InputSignal<string>;
1306
+ /** Height — accepts any CSS value. Auto-calculated for text variant if not set. */
1307
+ readonly height: _angular_core.InputSignal<string>;
1308
+ /** Border radius — override the variant's default radius */
1309
+ readonly borderRadius: _angular_core.InputSignal<string>;
1310
+ /** Number of skeleton lines to render (useful for paragraph placeholders) */
1311
+ readonly count: _angular_core.InputSignal<number>;
1312
+ /** Gap between repeated lines */
1313
+ readonly gap: _angular_core.InputSignal<string>;
1314
+ /** Whether the last line in a multi-line skeleton should be shorter */
1315
+ readonly shrinkLastLine: _angular_core.InputSignal<boolean>;
1316
+ /** Custom aspect ratio (e.g. '16/9', '1/1') — sets height automatically via CSS */
1317
+ readonly aspectRatio: _angular_core.InputSignal<string>;
1318
+ /** Lines array derived from count */
1319
+ readonly lines: _angular_core.Signal<number[]>;
1320
+ /** Whether this is a multi-line skeleton */
1321
+ readonly isMultiLine: _angular_core.Signal<boolean>;
1322
+ /** Computed inline styles for the skeleton element */
1323
+ readonly skeletonStyles: _angular_core.Signal<Record<string, string>>;
1324
+ /** Computed container styles (gap for multi-line) */
1325
+ readonly containerStyles: _angular_core.Signal<Record<string, string>>;
1326
+ /** Whether a specific line is the last and should shrink */
1327
+ isLastLine(index: number): boolean;
1328
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Skeleton, never>;
1329
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Skeleton, "ncim-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "count": { "alias": "count"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "shrinkLastLine": { "alias": "shrinkLastLine"; "required": false; "isSignal": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1330
+ }
1331
+
1332
+ /**
1333
+ * Indeterminate loading spinner. Use for loading states (e.g. SSO redirect, form submission).
1334
+ */
1335
+ declare class Spinner {
1336
+ /** Size in pixels. Default 48. */
1337
+ readonly size: _angular_core.InputSignal<number>;
1338
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Spinner, never>;
1339
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Spinner, "ncim-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1340
+ }
1341
+
1342
+ /**
1343
+ * Presentational component for SSO error display.
1344
+ * Receives all data via inputs — no route, router, or business logic.
1345
+ *
1346
+ * Use from a smart container that reads route params and passes the data.
1347
+ */
1348
+ declare class SsoErrorDisplay {
1349
+ /** SSO error code (e.g. 'access_denied'). */
1350
+ readonly errorCode: _angular_core.InputSignal<string>;
1351
+ /** Server-provided description, or null to use errorMessageKey. */
1352
+ readonly errorDescription: _angular_core.InputSignal<string | null>;
1353
+ /** i18n key for message when errorDescription is null (e.g. AUTH.SSO.ERROR.CODES.access_denied). */
1354
+ readonly errorMessageKey: _angular_core.InputSignal<string>;
1355
+ /** Whether to show the error code badge. */
1356
+ readonly showCodeBadge: _angular_core.InputSignal<boolean>;
1357
+ /** Whether to show the "Try Again" retry button (for recoverable errors). */
1358
+ readonly showRetryButton: _angular_core.InputSignal<boolean>;
1359
+ /** Router path for the "Back to login" link. */
1360
+ readonly loginPath: _angular_core.InputSignal<string>;
1361
+ /** i18n key for the page title. */
1362
+ readonly titleKey: _angular_core.InputSignal<string>;
1363
+ /** i18n key for the code label. */
1364
+ readonly codeLabelKey: _angular_core.InputSignal<string>;
1365
+ /** i18n key for the back button. */
1366
+ readonly backToLoginKey: _angular_core.InputSignal<string>;
1367
+ /** i18n key for the retry button. */
1368
+ readonly retryLabelKey: _angular_core.InputSignal<string>;
1369
+ /** Emitted when the user clicks the retry button. */
1370
+ readonly retryClick: _angular_core.OutputEmitterRef<void>;
1371
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SsoErrorDisplay, never>;
1372
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SsoErrorDisplay, "ncim-sso-error-display", never, { "errorCode": { "alias": "errorCode"; "required": true; "isSignal": true; }; "errorDescription": { "alias": "errorDescription"; "required": false; "isSignal": true; }; "errorMessageKey": { "alias": "errorMessageKey"; "required": true; "isSignal": true; }; "showCodeBadge": { "alias": "showCodeBadge"; "required": false; "isSignal": true; }; "showRetryButton": { "alias": "showRetryButton"; "required": false; "isSignal": true; }; "loginPath": { "alias": "loginPath"; "required": true; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "codeLabelKey": { "alias": "codeLabelKey"; "required": false; "isSignal": true; }; "backToLoginKey": { "alias": "backToLoginKey"; "required": false; "isSignal": true; }; "retryLabelKey": { "alias": "retryLabelKey"; "required": false; "isSignal": true; }; }, { "retryClick": "retryClick"; }, never, never, true, never>;
1373
+ }
1374
+
1375
+ /**
1376
+ * Presentational component for SSO callback loading state.
1377
+ * Shows spinner and redirect message — no redirect logic.
1378
+ *
1379
+ * Use from a smart container that handles the actual redirect.
1380
+ */
1381
+ declare class SsoCallbackView {
1382
+ /** i18n key for the title (e.g. "Redirecting..."). */
1383
+ readonly titleKey: _angular_core.InputSignal<string>;
1384
+ /** i18n key for the description message. */
1385
+ readonly messageKey: _angular_core.InputSignal<string>;
1386
+ /** Spinner size in pixels. */
1387
+ readonly spinnerSize: _angular_core.InputSignal<number>;
1388
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SsoCallbackView, never>;
1389
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SsoCallbackView, "ncim-sso-callback-view", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "messageKey": { "alias": "messageKey"; "required": false; "isSignal": true; }; "spinnerSize": { "alias": "spinnerSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1390
+ }
1391
+
1392
+ declare class Icon {
1393
+ name: _angular_core.InputSignal<string>;
1394
+ size: _angular_core.InputSignal<number>;
1395
+ height: _angular_core.InputSignal<number | null | undefined>;
1396
+ iconSrc: _angular_core.Signal<string>;
1397
+ private getIconSrc;
1398
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Icon, never>;
1399
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Icon, "ncim-icon", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1400
+ }
1401
+
1402
+ interface IconItem {
1403
+ name: string;
1404
+ displayName: string;
1405
+ }
1406
+ declare class IconsDocument {
1407
+ private readonly messageService;
1408
+ readonly searchTerm: _angular_core.WritableSignal<string>;
1409
+ readonly icons: IconItem[];
1410
+ readonly filteredIcons: _angular_core.Signal<IconItem[]>;
1411
+ onSearchInput(event: Event): void;
1412
+ copyToClipboard(iconName: string): void;
1413
+ private toDisplayName;
1414
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconsDocument, never>;
1415
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconsDocument, "ncim-icons-document", never, {}, {}, never, never, true, never>;
1416
+ }
1417
+
1418
+ /** Sector shape for entity summary card; compatible with RegulatedSectorType from features. */
1419
+ interface EntitySummarySector {
1420
+ id: string | number;
1421
+ name: string;
1422
+ label: string;
1423
+ icon: string;
1424
+ routerLink?: string;
1425
+ }
1426
+ declare class EntitySummaryCard {
1427
+ readonly logo: _angular_core.InputSignal<string>;
1428
+ readonly name: _angular_core.InputSignal<string>;
1429
+ readonly description: _angular_core.InputSignal<string>;
1430
+ readonly sectors: _angular_core.InputSignal<EntitySummarySector[]>;
1431
+ readonly sectorClick: _angular_core.OutputEmitterRef<string>;
1432
+ readonly infoClick: _angular_core.OutputEmitterRef<void>;
1433
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySummaryCard, never>;
1434
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitySummaryCard, "ncim-entity-summary-card", never, { "logo": { "alias": "logo"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "sectors": { "alias": "sectors"; "required": true; "isSignal": true; }; }, { "sectorClick": "sectorClick"; "infoClick": "infoClick"; }, never, never, true, never>;
1435
+ }
1436
+
1437
+ declare class CategoryTile {
1438
+ readonly icon: _angular_core.InputSignal<string>;
1439
+ readonly label: _angular_core.InputSignal<string>;
1440
+ readonly routerLink: _angular_core.InputSignal<string | undefined>;
1441
+ readonly description: _angular_core.InputSignal<string | null>;
1442
+ readonly variant: _angular_core.InputSignal<"narrow" | "wide">;
1443
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CategoryTile, never>;
1444
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CategoryTile, "ncim-category-tile", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1445
+ }
1446
+
1447
+ declare class CreateCategoryTile {
1448
+ title: _angular_core.InputSignal<string>;
1449
+ description: _angular_core.InputSignal<string>;
1450
+ createButtonLabel: _angular_core.InputSignal<string>;
1451
+ createClick: _angular_core.OutputEmitterRef<void>;
1452
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CreateCategoryTile, never>;
1453
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CreateCategoryTile, "ncim-create-category-tile", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "createButtonLabel": { "alias": "createButtonLabel"; "required": true; "isSignal": true; }; }, { "createClick": "createClick"; }, never, never, true, never>;
1454
+ }
1455
+
1456
+ /** ECharts tooltip callback parameter shape for axis-triggered tooltips. */
1457
+ interface EChartTooltipParam {
1458
+ axisValueLabel?: string;
1459
+ name: string;
1460
+ marker: string;
1461
+ seriesName: string;
1462
+ value: number | null;
1463
+ }
1464
+ /** Single series point (e.g. for pie/donut). */
1465
+ interface ChartSeriesItem {
1466
+ name: string;
1467
+ value: number;
1468
+ color?: string;
1469
+ }
1470
+ /** Line/area series with multiple data points. */
1471
+ interface ChartLineSeriesData {
1472
+ name: string;
1473
+ data: number[];
1474
+ color?: string;
1475
+ accentColor?: string;
1476
+ }
1477
+ /** Legend entry for chart legends. */
1478
+ interface ChartLegendItem {
1479
+ name: string;
1480
+ color: string;
1481
+ }
1482
+ /** Tooltip row (label + value). */
1483
+ interface ChartTooltipData {
1484
+ label: string;
1485
+ value: string | number;
1486
+ color?: string;
1487
+ }
1488
+ /** Badge icon for map card status. Use MapLegendStatus enum values. */
1489
+ type MapMarkerBadgeIcon = MapLegendStatus;
1490
+ /** Marker for map view (lat/lng, title, score, trend). */
1491
+ interface MapMarkerData {
1492
+ lat: number;
1493
+ lng: number;
1494
+ title: string;
1495
+ subtitle: string;
1496
+ score: number;
1497
+ violations: number;
1498
+ trendValue?: number;
1499
+ trendDirection?: TrendDirection;
1500
+ statusText?: string;
1501
+ /** i18n key for status (e.g. REGULATORY_DASHBOARD.STATUS_CONFIRMED). Used when statusText is not provided. */
1502
+ statusKey?: string;
1503
+ statusType?: MarkerStatus;
1504
+ /** Override badge icon/colors when statusType alone is ambiguous. Uses MapLegendStatus. */
1505
+ statusBadgeIcon?: MapMarkerBadgeIcon;
1506
+ }
1507
+
1508
+ declare class LineChart {
1509
+ /** Array of series data to display */
1510
+ readonly series: _angular_core.InputSignal<ChartLineSeriesData[]>;
1511
+ /** X-axis category labels */
1512
+ readonly categories: _angular_core.InputSignal<string[]>;
1513
+ /** Chart height in pixels */
1514
+ readonly height: _angular_core.InputSignal<number | null>;
1515
+ /** Chart width in pixels */
1516
+ readonly width: _angular_core.InputSignal<number | null>;
1517
+ /** Whether to show the area fill under lines */
1518
+ readonly showArea: _angular_core.InputSignal<boolean>;
1519
+ /** Whether to show smooth curves */
1520
+ readonly smooth: _angular_core.InputSignal<boolean>;
1521
+ /** Whether to show legend */
1522
+ readonly showLegend: _angular_core.InputSignal<boolean>;
1523
+ /** Whether to show grid lines */
1524
+ readonly showGrid: _angular_core.InputSignal<boolean>;
1525
+ /** Whether to show X-axis labels */
1526
+ readonly showXAxisLabels: _angular_core.InputSignal<boolean>;
1527
+ /** Index of data point to highlight with a vertical bar (-1 for none) */
1528
+ readonly highlightIndex: _angular_core.InputSignal<number>;
1529
+ readonly legendItems: _angular_core.Signal<ChartLegendItem[]>;
1530
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1531
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LineChart, never>;
1532
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LineChart, "ncim-line-chart", never, { "series": { "alias": "series"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "showArea": { "alias": "showArea"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showXAxisLabels": { "alias": "showXAxisLabels"; "required": false; "isSignal": true; }; "highlightIndex": { "alias": "highlightIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1533
+ }
1534
+
1535
+ declare class AreaChart {
1536
+ /** Data points for the chart */
1537
+ readonly data: _angular_core.InputSignal<number[]>;
1538
+ /** X-axis category labels */
1539
+ readonly categories: _angular_core.InputSignal<string[]>;
1540
+ /** Chart height in pixels */
1541
+ readonly height: _angular_core.InputSignal<number>;
1542
+ /** Chart width in pixels */
1543
+ readonly width: _angular_core.InputSignal<number | null>;
1544
+ /** Start color of the gradient (green area) */
1545
+ readonly startColor: _angular_core.InputSignal<string>;
1546
+ /** End color of the gradient (red area) */
1547
+ readonly endColor: _angular_core.InputSignal<string>;
1548
+ /** Whether to show smooth curves */
1549
+ readonly smooth: _angular_core.InputSignal<boolean>;
1550
+ /** Tooltip formatter label — falls back to the translated CHARTS.AREA_CHART.TOOLTIP_LABEL key */
1551
+ readonly tooltipLabel: _angular_core.InputSignal<string>;
1552
+ /** Index of the highlighted point (-1 for none) */
1553
+ readonly highlightIndex: _angular_core.InputSignal<number>;
1554
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1555
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AreaChart, never>;
1556
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AreaChart, "ncim-area-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "startColor": { "alias": "startColor"; "required": false; "isSignal": true; }; "endColor": { "alias": "endColor"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "tooltipLabel": { "alias": "tooltipLabel"; "required": false; "isSignal": true; }; "highlightIndex": { "alias": "highlightIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1557
+ }
1558
+
1559
+ declare class DonutChart {
1560
+ /** Data items for the donut rings */
1561
+ readonly data: _angular_core.InputSignal<ChartSeriesItem[]>;
1562
+ /** Chart height in pixels */
1563
+ readonly height: _angular_core.InputSignal<number | null>;
1564
+ /** Center text (main value) */
1565
+ readonly centerValue: _angular_core.InputSignal<string | number | null>;
1566
+ /** Center sub label */
1567
+ readonly centerLabel: _angular_core.InputSignal<string | null>;
1568
+ /** Inner radius percentage */
1569
+ readonly innerRadius: _angular_core.InputSignal<string>;
1570
+ /** Outer radius percentage */
1571
+ readonly outerRadius: _angular_core.InputSignal<string>;
1572
+ /** Whether to show legend */
1573
+ readonly showLegend: _angular_core.InputSignal<boolean>;
1574
+ /** Whether to show the gap between items */
1575
+ readonly showGap: _angular_core.InputSignal<boolean>;
1576
+ /** Start angle of the donut */
1577
+ readonly startAngle: _angular_core.InputSignal<number>;
1578
+ /** Total value for computing arc proportions */
1579
+ readonly total: _angular_core.InputSignal<number>;
1580
+ /**
1581
+ * Maximum value per ring — each ring's arc = (value / maxRingValue) x 360.
1582
+ * If 0, the max value from the data is used.
1583
+ */
1584
+ readonly maxRingValue: _angular_core.InputSignal<number>;
1585
+ readonly legendItems: _angular_core.Signal<ChartLegendItem[]>;
1586
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1587
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DonutChart, never>;
1588
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DonutChart, "ncim-donut-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "innerRadius": { "alias": "innerRadius"; "required": false; "isSignal": true; }; "outerRadius": { "alias": "outerRadius"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showGap": { "alias": "showGap"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "maxRingValue": { "alias": "maxRingValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1589
+ }
1590
+
1591
+ declare class PieChart {
1592
+ /** Data items for the pie segments */
1593
+ readonly data: _angular_core.InputSignal<ChartSeriesItem[]>;
1594
+ /** Chart height in pixels */
1595
+ readonly height: _angular_core.InputSignal<number | null>;
1596
+ /** Chart width in pixels */
1597
+ readonly width: _angular_core.InputSignal<number>;
1598
+ /** Radius percentage */
1599
+ readonly radius: _angular_core.InputSignal<string>;
1600
+ /** Whether to show percentage labels inside slices */
1601
+ readonly showLabels: _angular_core.InputSignal<boolean>;
1602
+ /** Whether to show legend */
1603
+ readonly showLegend: _angular_core.InputSignal<boolean>;
1604
+ /** Start angle of the pie */
1605
+ readonly startAngle: _angular_core.InputSignal<number>;
1606
+ /** Whether to show a small hole in the center */
1607
+ readonly showCenterHole: _angular_core.InputSignal<boolean>;
1608
+ /** Inner radius percentage (if center hole is shown) */
1609
+ readonly innerRadius: _angular_core.InputSignal<string>;
1610
+ /** Border radius of each pie slice in pixels */
1611
+ readonly itemRadius: _angular_core.InputSignal<number>;
1612
+ readonly legendItems: _angular_core.Signal<ChartLegendItem[]>;
1613
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1614
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieChart, never>;
1615
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieChart, "ncim-pie-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; "showCenterHole": { "alias": "showCenterHole"; "required": false; "isSignal": true; }; "innerRadius": { "alias": "innerRadius"; "required": false; "isSignal": true; }; "itemRadius": { "alias": "itemRadius"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1616
+ }
1617
+
1618
+ declare class GaugeChart {
1619
+ /** Current value (0-100) */
1620
+ readonly value: _angular_core.InputSignal<number>;
1621
+ /** Chart height in pixels */
1622
+ readonly height: _angular_core.InputSignal<number>;
1623
+ /** Chart width in pixels (optional) */
1624
+ readonly width: _angular_core.InputSignal<number | null>;
1625
+ /** Main color for the filled portion */
1626
+ readonly color: _angular_core.InputSignal<string>;
1627
+ /** Background color for the unfilled portion */
1628
+ readonly backgroundColor: _angular_core.InputSignal<string>;
1629
+ /** Label text below the percentage */
1630
+ readonly label: _angular_core.InputSignal<string>;
1631
+ /** Whether to show the percentage text */
1632
+ readonly showValue: _angular_core.InputSignal<boolean>;
1633
+ /** Start angle of the gauge */
1634
+ readonly startAngle: _angular_core.InputSignal<number>;
1635
+ /** End angle of the gauge */
1636
+ readonly endAngle: _angular_core.InputSignal<number>;
1637
+ /**
1638
+ * Whether the layout is right-to-left.
1639
+ * In RTL mode the chart text is hidden and rendered as an overlay to avoid mirroring.
1640
+ */
1641
+ readonly isRtl: _angular_core.InputSignal<boolean>;
1642
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1643
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GaugeChart, never>;
1644
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GaugeChart, "ncim-gauge-chart", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; "endAngle": { "alias": "endAngle"; "required": false; "isSignal": true; }; "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1645
+ }
1646
+
1647
+ interface ScaleIndicatorLabels {
1648
+ low: string;
1649
+ mid: string;
1650
+ high: string;
1651
+ }
1652
+ declare class ScaleIndicator {
1653
+ /** Title displayed above the scale */
1654
+ readonly title: _angular_core.InputSignal<string>;
1655
+ /** Current value (used when start/end not provided, for backward compat) */
1656
+ readonly value: _angular_core.InputSignal<number>;
1657
+ /** Scale minimum (full track range) */
1658
+ readonly min: _angular_core.InputSignal<number>;
1659
+ /** Scale maximum (full track range) */
1660
+ readonly max: _angular_core.InputSignal<number>;
1661
+ /** Highlighted range start (when provided with end, shows range bar instead of thumb) */
1662
+ readonly start: _angular_core.InputSignal<number | undefined>;
1663
+ /** Highlighted range end (when provided with start, shows range bar instead of thumb) */
1664
+ readonly end: _angular_core.InputSignal<number | undefined>;
1665
+ /** Labels for the three segments (right-to-left in RTL: high, mid, low) */
1666
+ readonly labels: _angular_core.InputSignal<ScaleIndicatorLabels>;
1667
+ /** Active indicator color */
1668
+ readonly activeColor: _angular_core.InputSignal<string>;
1669
+ /** Track background color */
1670
+ readonly trackColor: _angular_core.InputSignal<string>;
1671
+ readonly barHeight: _angular_core.InputSignal<number>;
1672
+ private readonly rangeScale;
1673
+ /** Range mode: start and end provided. Single-value mode: use value. */
1674
+ readonly isRangeMode: _angular_core.Signal<boolean>;
1675
+ /** Start and end positions as percentage (0–100), normalized so start ≤ end */
1676
+ readonly rangePercent: _angular_core.Signal<{
1677
+ start: number;
1678
+ end: number;
1679
+ }>;
1680
+ /** Start position as percentage (0–100) */
1681
+ readonly rangeStartPercent: _angular_core.Signal<number>;
1682
+ /** End position as percentage (0–100) */
1683
+ readonly rangeEndPercent: _angular_core.Signal<number>;
1684
+ /** Range width as percentage (min 4% when start=end for visibility) */
1685
+ readonly rangeWidthPercent: _angular_core.Signal<number>;
1686
+ /** Thumb position (for single-value mode, backward compat) */
1687
+ readonly thumbPercent: _angular_core.Signal<number>;
1688
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScaleIndicator, never>;
1689
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScaleIndicator, "ncim-scale-indicator", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "activeColor": { "alias": "activeColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "barHeight": { "alias": "barHeight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1690
+ }
1691
+
1692
+ interface HorizontalBarItem {
1693
+ label: string;
1694
+ value: number;
1695
+ maxValue?: number;
1696
+ color?: string;
1697
+ }
1698
+ interface ComputedBarItem extends HorizontalBarItem {
1699
+ percentage: number;
1700
+ barColor: string;
1701
+ segmentFills: number[];
1702
+ }
1703
+ declare class HorizontalBarChart {
1704
+ /** Data items for horizontal bars */
1705
+ readonly data: _angular_core.InputSignal<HorizontalBarItem[]>;
1706
+ /** Maximum value for all bars (auto-calculated if not provided) */
1707
+ readonly maxValue: _angular_core.InputSignal<number>;
1708
+ /** Whether to show value labels */
1709
+ readonly showValues: _angular_core.InputSignal<boolean>;
1710
+ /** Default bar color (used when item has no color) */
1711
+ readonly defaultColor: _angular_core.InputSignal<string>;
1712
+ /** Track background color */
1713
+ readonly trackColor: _angular_core.InputSignal<string>;
1714
+ /** Bar height in pixels */
1715
+ readonly barHeight: _angular_core.InputSignal<number>;
1716
+ /** Gap between bars in pixels */
1717
+ readonly gap: _angular_core.InputSignal<number>;
1718
+ /** Number of segments per bar */
1719
+ readonly segments: _angular_core.InputSignal<number>;
1720
+ readonly computedItems: _angular_core.Signal<ComputedBarItem[]>;
1721
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HorizontalBarChart, never>;
1722
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HorizontalBarChart, "ncim-horizontal-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "defaultColor": { "alias": "defaultColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "barHeight": { "alias": "barHeight"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "segments": { "alias": "segments"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1723
+ }
1724
+
1725
+ declare class Sparkline {
1726
+ /** Data points for the sparkline */
1727
+ readonly data: _angular_core.InputSignal<readonly number[]>;
1728
+ /** Chart height in pixels */
1729
+ readonly height: _angular_core.InputSignal<number>;
1730
+ /** Chart width in pixels */
1731
+ readonly width: _angular_core.InputSignal<number | null>;
1732
+ /** Line color */
1733
+ readonly color: _angular_core.InputSignal<string>;
1734
+ /** Whether to show area fill */
1735
+ readonly showArea: _angular_core.InputSignal<boolean>;
1736
+ /** Line width */
1737
+ readonly lineWidth: _angular_core.InputSignal<number>;
1738
+ /** Whether to use smooth curves */
1739
+ readonly smooth: _angular_core.InputSignal<boolean>;
1740
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1741
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Sparkline, never>;
1742
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Sparkline, "ncim-sparkline", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "showArea": { "alias": "showArea"; "required": false; "isSignal": true; }; "lineWidth": { "alias": "lineWidth"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1743
+ }
1744
+
1745
+ declare class MapView implements OnDestroy {
1746
+ readonly markers: _angular_core.InputSignal<MapMarkerData[]>;
1747
+ readonly centerLat: _angular_core.InputSignal<number>;
1748
+ readonly centerLng: _angular_core.InputSignal<number>;
1749
+ readonly zoom: _angular_core.InputSignal<number>;
1750
+ readonly height: _angular_core.InputSignal<number>;
1751
+ private readonly http;
1752
+ private readonly doc;
1753
+ private readonly translate;
1754
+ private readonly mapContainer;
1755
+ private map;
1756
+ private markerLayer;
1757
+ private leaflet;
1758
+ private readonly mapReady;
1759
+ private iconCache;
1760
+ readonly legendItems: {
1761
+ icon: string;
1762
+ labelKey: string;
1763
+ }[];
1764
+ readonly legendOpen: _angular_core.WritableSignal<boolean>;
1765
+ private readonly legendPopup;
1766
+ private readonly legendBtn;
1767
+ constructor();
1768
+ ngOnDestroy(): void;
1769
+ toggleLegend(): void;
1770
+ closeLegend(): void;
1771
+ onDocumentClick(event: MouseEvent): void;
1772
+ private injectLeafletCss;
1773
+ private initMap;
1774
+ private preloadIcons;
1775
+ private loadIcon;
1776
+ private sizedIcon;
1777
+ private updateMarkers;
1778
+ private buildMarkerHtml;
1779
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MapView, never>;
1780
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MapView, "ncim-map-view", never, { "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "centerLat": { "alias": "centerLat"; "required": false; "isSignal": true; }; "centerLng": { "alias": "centerLng"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1781
+ }
1782
+
1783
+ declare class StoreLocations {
1784
+ readonly showHeader: _angular_core.InputSignal<boolean>;
1785
+ readonly height: _angular_core.InputSignal<number>;
1786
+ readonly zoom: _angular_core.InputSignal<number>;
1787
+ readonly centerLat: _angular_core.InputSignal<number>;
1788
+ readonly centerLng: _angular_core.InputSignal<number>;
1789
+ readonly markers: _angular_core.InputSignal<MapMarkerData$1[]>;
1790
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StoreLocations, never>;
1791
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StoreLocations, "ncim-store-locations", never, { "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "centerLat": { "alias": "centerLat"; "required": false; "isSignal": true; }; "centerLng": { "alias": "centerLng"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1792
+ }
1793
+
1794
+ interface BarSeriesData {
1795
+ name: string;
1796
+ data: number[];
1797
+ color?: string;
1798
+ stack?: string;
1799
+ }
1800
+ interface OverlayLineSeries {
1801
+ name: string;
1802
+ data: number[];
1803
+ color?: string;
1804
+ }
1805
+ declare class BarChart {
1806
+ /** Array of bar series data to display */
1807
+ readonly series: _angular_core.InputSignal<BarSeriesData[]>;
1808
+ /** Optional line series to overlay on top of bars */
1809
+ readonly overlayLineSeries: _angular_core.InputSignal<OverlayLineSeries[]>;
1810
+ /** X-axis category labels */
1811
+ readonly categories: _angular_core.InputSignal<any[]>;
1812
+ /** Chart height in pixels */
1813
+ readonly height: _angular_core.InputSignal<number | null>;
1814
+ /** Chart width in pixels */
1815
+ readonly width: _angular_core.InputSignal<number | null>;
1816
+ /** Bar width in pixels */
1817
+ readonly barWidth: _angular_core.InputSignal<string | number>;
1818
+ /** Bar border radius */
1819
+ readonly borderRadius: _angular_core.InputSignal<number>;
1820
+ /** Whether to show legend */
1821
+ readonly showLegend: _angular_core.InputSignal<boolean>;
1822
+ /** Whether to show grid lines */
1823
+ readonly showGrid: _angular_core.InputSignal<boolean>;
1824
+ readonly legendItems: _angular_core.Signal<ChartLegendItem[]>;
1825
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1826
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChart, never>;
1827
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BarChart, "ncim-bar-chart", never, { "series": { "alias": "series"; "required": false; "isSignal": true; }; "overlayLineSeries": { "alias": "overlayLineSeries"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "barWidth": { "alias": "barWidth"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1828
+ }
1829
+
1830
+ declare class ChartLegend {
1831
+ /** List of legend items to display */
1832
+ readonly items: _angular_core.InputSignal<ChartLegendItem[]>;
1833
+ /** Layout direction */
1834
+ readonly direction: _angular_core.InputSignal<"column" | "row">;
1835
+ /** Size of the color marker in pixels */
1836
+ readonly iconSize: _angular_core.InputSignal<number>;
1837
+ /** Font size of the labels in pixels */
1838
+ readonly fontSize: _angular_core.InputSignal<number>;
1839
+ /** Gap between legend items in pixels */
1840
+ readonly gap: _angular_core.InputSignal<number>;
1841
+ /** Gap between marker and label in pixels */
1842
+ readonly itemGap: _angular_core.InputSignal<number>;
1843
+ /** Flex justify content alignment */
1844
+ readonly justifyContent: _angular_core.InputSignal<string>;
1845
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartLegend, never>;
1846
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartLegend, "ncim-chart-legend", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "fontSize": { "alias": "fontSize"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "itemGap": { "alias": "itemGap"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1847
+ }
1848
+
1849
+ declare class MultiSegmentGauge {
1850
+ /** Segments to display on the gauge arc */
1851
+ readonly segments: _angular_core.InputSignal<ChartSeriesItem[]>;
1852
+ /** Label shown above the center value */
1853
+ readonly centerLabel: _angular_core.InputSignal<string>;
1854
+ /** Value displayed in the center of the gauge */
1855
+ readonly centerValue: _angular_core.InputSignal<string | number | null>;
1856
+ /** Whether to show a legend below the chart */
1857
+ readonly showLegend: _angular_core.InputSignal<boolean>;
1858
+ /** Chart canvas height in pixels */
1859
+ readonly height: _angular_core.InputSignal<number>;
1860
+ /** Color for the unfilled portion of the arc */
1861
+ readonly backgroundColor: _angular_core.InputSignal<string>;
1862
+ readonly legendItems: _angular_core.Signal<ChartLegendItem[]>;
1863
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1864
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiSegmentGauge, never>;
1865
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiSegmentGauge, "ncim-multi-segment-gauge", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1866
+ }
1867
+
1868
+ /** A single stat row displayed below the gauge */
1869
+ interface StatGaugeRow {
1870
+ label: string;
1871
+ value: string | number;
1872
+ }
1873
+ declare class StatGauge {
1874
+ /** Current (numerator) value, e.g. 120 */
1875
+ readonly value: _angular_core.InputSignal<number>;
1876
+ /** Total (denominator) value, e.g. 300 */
1877
+ readonly total: _angular_core.InputSignal<number>;
1878
+ /** Subtitle shown below the percentage, e.g. "120 من 300 مستخدم" */
1879
+ readonly subtitle: _angular_core.InputSignal<string>;
1880
+ /** Stat rows displayed below the gauge */
1881
+ readonly stats: _angular_core.InputSignal<StatGaugeRow[]>;
1882
+ /** Color for the filled portion of the arc */
1883
+ readonly color: _angular_core.InputSignal<string>;
1884
+ /** Color for the unfilled portion of the arc */
1885
+ readonly backgroundColor: _angular_core.InputSignal<string>;
1886
+ /** Chart canvas height in pixels */
1887
+ readonly height: _angular_core.InputSignal<number>;
1888
+ readonly percentage: _angular_core.Signal<number>;
1889
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1890
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatGauge, never>;
1891
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatGauge, "ncim-stat-gauge", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "stats": { "alias": "stats"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1892
+ }
1893
+
1894
+ /** Legend item that includes a displayable value */
1895
+ interface RingChartLegendItem {
1896
+ name: string;
1897
+ color: string;
1898
+ value: string | number;
1899
+ }
1900
+ declare class RingChart {
1901
+ /** Data items for the ring segments */
1902
+ readonly data: _angular_core.InputSignal<ChartSeriesItem[]>;
1903
+ /** Label displayed above the center value */
1904
+ readonly centerLabel: _angular_core.InputSignal<string | null>;
1905
+ /** Value displayed in the center of the ring */
1906
+ readonly centerValue: _angular_core.InputSignal<string | number | null>;
1907
+ /** Inner radius of the ring */
1908
+ readonly innerRadius: _angular_core.InputSignal<string>;
1909
+ /** Outer radius of the ring */
1910
+ readonly outerRadius: _angular_core.InputSignal<string>;
1911
+ /** Whether to show the legend below the chart */
1912
+ readonly showLegend: _angular_core.InputSignal<boolean>;
1913
+ /** Chart height in pixels */
1914
+ readonly height: _angular_core.InputSignal<number>;
1915
+ /** Start angle of the ring */
1916
+ readonly startAngle: _angular_core.InputSignal<number>;
1917
+ readonly legendItems: _angular_core.Signal<RingChartLegendItem[]>;
1918
+ readonly chartOptions: _angular_core.Signal<EChartsOption>;
1919
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RingChart, never>;
1920
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RingChart, "ncim-ring-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "innerRadius": { "alias": "innerRadius"; "required": false; "isSignal": true; }; "outerRadius": { "alias": "outerRadius"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1921
+ }
1922
+
1923
+ interface StackedDistributionChartItem {
1924
+ label: string;
1925
+ value: number;
1926
+ barValue?: number;
1927
+ color?: string;
1928
+ patterned?: boolean;
1929
+ /** Number of sub-segments to divide this item into in the bar. Defaults to 1. */
1930
+ segments?: number;
1931
+ }
1932
+ interface ComputedStackedDistributionChartItem extends StackedDistributionChartItem {
1933
+ color: string;
1934
+ normalizedValue: number;
1935
+ percentage: number;
1936
+ subSegments: number[];
1937
+ }
1938
+ declare class StackedDistributionChart {
1939
+ private readonly el;
1940
+ /** Segments rendered in the distribution bar and legend rows */
1941
+ readonly data: _angular_core.InputSignal<StackedDistributionChartItem[]>;
1942
+ /** Segment height in pixels */
1943
+ readonly barHeight: _angular_core.InputSignal<number>;
1944
+ /** Gap between top bar segments in pixels */
1945
+ readonly segmentGap: _angular_core.InputSignal<number>;
1946
+ /** Gap between legend rows in pixels */
1947
+ readonly rowGap: _angular_core.InputSignal<number>;
1948
+ /** Marker size in pixels */
1949
+ readonly markerSize: _angular_core.InputSignal<number>;
1950
+ /** Fallback color when an item does not provide one */
1951
+ readonly defaultColor: _angular_core.InputSignal<string>;
1952
+ /** Placeholder color used when there is no positive data */
1953
+ readonly emptyColor: _angular_core.InputSignal<string>;
1954
+ /** Manual override for RTL. Detected from parent if not provided. */
1955
+ readonly isRtl: _angular_core.InputSignal<boolean | null>;
1956
+ private readonly detectedIsRtl;
1957
+ constructor();
1958
+ readonly computedIsRtl: _angular_core.Signal<boolean>;
1959
+ readonly total: _angular_core.Signal<number>;
1960
+ readonly computedItems: _angular_core.Signal<ComputedStackedDistributionChartItem[]>;
1961
+ readonly ariaLabel: _angular_core.Signal<string>;
1962
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackedDistributionChart, never>;
1963
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StackedDistributionChart, "ncim-stacked-distribution-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "barHeight": { "alias": "barHeight"; "required": false; "isSignal": true; }; "segmentGap": { "alias": "segmentGap"; "required": false; "isSignal": true; }; "rowGap": { "alias": "rowGap"; "required": false; "isSignal": true; }; "markerSize": { "alias": "markerSize"; "required": false; "isSignal": true; }; "defaultColor": { "alias": "defaultColor"; "required": false; "isSignal": true; }; "emptyColor": { "alias": "emptyColor"; "required": false; "isSignal": true; }; "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1964
+ }
1965
+
1966
+ declare class StatRing {
1967
+ private readonly el;
1968
+ /** Center label shown above the value */
1969
+ readonly label: _angular_core.InputSignal<string>;
1970
+ /** Center value shown inside the ring */
1971
+ readonly value: _angular_core.InputSignal<string | number>;
1972
+ /** Progress arc length as a percentage (can exceed 100) */
1973
+ readonly progress: _angular_core.InputSignal<number>;
1974
+ /** Ring size in pixels */
1975
+ readonly size: _angular_core.InputSignal<number>;
1976
+ /** Progress arc stroke width in pixels */
1977
+ readonly strokeWidth: _angular_core.InputSignal<number>;
1978
+ /** Background track stroke width in pixels */
1979
+ readonly trackStrokeWidth: _angular_core.InputSignal<number>;
1980
+ /** Progress arc color (fallback if gradient is not used) */
1981
+ readonly color: _angular_core.InputSignal<string>;
1982
+ /** Start color for the linear gradient */
1983
+ readonly gradientStartColor: _angular_core.InputSignal<string>;
1984
+ /** End color for the linear gradient */
1985
+ readonly gradientEndColor: _angular_core.InputSignal<string>;
1986
+ /** Background ring color */
1987
+ readonly trackColor: _angular_core.InputSignal<string>;
1988
+ /**
1989
+ * Rotation of the progress arc in degrees.
1990
+ * Default is 0 (Right/3 o'clock).
1991
+ */
1992
+ readonly startAngle: _angular_core.InputSignal<number>;
1993
+ /** Whether to use a linear gradient for the progress arc */
1994
+ readonly useGradient: _angular_core.InputSignal<boolean>;
1995
+ /** Manual override for RTL. Detected from parent if not provided. */
1996
+ readonly isRtl: _angular_core.InputSignal<boolean | null>;
1997
+ private readonly detectedIsRtl;
1998
+ readonly gradientId: _angular_core.WritableSignal<string>;
1999
+ constructor();
2000
+ /** Final RTL status (prop override or detected) */
2001
+ readonly computedIsRtl: _angular_core.Signal<boolean>;
2002
+ /** Normalized progress (can exceed 100) */
2003
+ readonly normalizedProgress: _angular_core.Signal<number>;
2004
+ /** Radius calculation based on the largest stroke to avoid clipping */
2005
+ readonly radius: _angular_core.Signal<number>;
2006
+ readonly center: _angular_core.Signal<number>;
2007
+ readonly circumference: _angular_core.Signal<number>;
2008
+ /**
2009
+ * Calculate stroke dash offset.
2010
+ */
2011
+ readonly strokeDashOffset: _angular_core.Signal<number>;
2012
+ readonly viewBox: _angular_core.Signal<string>;
2013
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatRing, never>;
2014
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatRing, "ncim-stat-ring", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "trackStrokeWidth": { "alias": "trackStrokeWidth"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "gradientStartColor": { "alias": "gradientStartColor"; "required": false; "isSignal": true; }; "gradientEndColor": { "alias": "gradientEndColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; "useGradient": { "alias": "useGradient"; "required": false; "isSignal": true; }; "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2015
+ }
2016
+
2017
+ interface BreadcrumbItem {
2018
+ label?: string;
2019
+ url?: string;
2020
+ icon?: string;
2021
+ command?: () => void;
2022
+ translateKey?: string;
2023
+ }
2024
+ declare class Breadcrumb {
2025
+ private readonly router;
2026
+ private readonly destroyRef;
2027
+ readonly translateService: TranslateService;
2028
+ readonly items: _angular_core.InputSignal<BreadcrumbItem[]>;
2029
+ readonly home: _angular_core.InputSignal<BreadcrumbItem | null>;
2030
+ readonly showHomeIcon: _angular_core.InputSignal<boolean>;
2031
+ readonly rtl: _angular_core.InputSignal<boolean>;
2032
+ readonly separatorItem: _angular_core.InputSignal<string>;
2033
+ readonly itemClicked: _angular_core.OutputEmitterRef<BreadcrumbItem>;
2034
+ private readonly langChange;
2035
+ constructor();
2036
+ readonly menuItems: _angular_core.Signal<MenuItem[]>;
2037
+ readonly homeMenuItem: _angular_core.Signal<MenuItem | undefined>;
2038
+ onBreadcrumbItemClick(event: {
2039
+ originalEvent: Event;
2040
+ item: MenuItem;
2041
+ }): void;
2042
+ private findOriginalItem;
2043
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Breadcrumb, never>;
2044
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Breadcrumb, "ncim-breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "home": { "alias": "home"; "required": false; "isSignal": true; }; "showHomeIcon": { "alias": "showHomeIcon"; "required": false; "isSignal": true; }; "rtl": { "alias": "rtl"; "required": false; "isSignal": true; }; "separatorItem": { "alias": "separatorItem"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
2045
+ }
2046
+
2047
+ declare class PageHeader {
2048
+ readonly titleKey: _angular_core.InputSignal<string>;
2049
+ readonly title: _angular_core.InputSignal<string>;
2050
+ readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem$1[]>;
2051
+ readonly showBreadcrumb: _angular_core.InputSignal<boolean>;
2052
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageHeader, never>;
2053
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageHeader, "ncim-page-header", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": false; "isSignal": true; }; "showBreadcrumb": { "alias": "showBreadcrumb"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2054
+ }
2055
+
2056
+ declare class Card {
2057
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Card, never>;
2058
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Card, "ncim-card", never, {}, {}, never, ["*"], true, never>;
2059
+ }
2060
+
2061
+ interface AccordionItem {
2062
+ questionKey: string;
2063
+ answerKey: string;
2064
+ }
2065
+ declare class Accordion {
2066
+ readonly items: _angular_core.InputSignal<AccordionItem[]>;
2067
+ readonly titleKey: _angular_core.InputSignal<string>;
2068
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Accordion, never>;
2069
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Accordion, "ncim-accordion", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2070
+ }
2071
+
2072
+ declare class ProgressCard {
2073
+ readonly titleKey: _angular_core.InputSignal<string>;
2074
+ readonly descriptionKey: _angular_core.InputSignal<string>;
2075
+ readonly buttonKey: _angular_core.InputSignal<string>;
2076
+ readonly progress: _angular_core.InputSignal<number>;
2077
+ readonly illustrationSrc: _angular_core.InputSignal<string>;
2078
+ readonly nextStep: _angular_core.OutputEmitterRef<void>;
2079
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressCard, never>;
2080
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProgressCard, "ncim-progress-card", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "descriptionKey": { "alias": "descriptionKey"; "required": false; "isSignal": true; }; "buttonKey": { "alias": "buttonKey"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "illustrationSrc": { "alias": "illustrationSrc"; "required": false; "isSignal": true; }; }, { "nextStep": "nextStep"; }, never, never, true, never>;
2081
+ }
2082
+
2083
+ declare class NavCard {
2084
+ readonly title: _angular_core.InputSignal<string>;
2085
+ readonly description: _angular_core.InputSignal<string>;
2086
+ readonly thumbnailSrc: _angular_core.InputSignal<string>;
2087
+ readonly route: _angular_core.InputSignal<string | string[] | null>;
2088
+ readonly compact: _angular_core.InputSignal<boolean>;
2089
+ readonly cardClick: _angular_core.OutputEmitterRef<void>;
2090
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavCard, never>;
2091
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavCard, "ncim-nav-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "thumbnailSrc": { "alias": "thumbnailSrc"; "required": false; "isSignal": true; }; "route": { "alias": "route"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, { "cardClick": "cardClick"; }, never, never, true, never>;
2092
+ }
2093
+
2094
+ declare class ContentBlock {
2095
+ readonly contentKey: _angular_core.InputSignal<string>;
2096
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentBlock, never>;
2097
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentBlock, "ncim-content-block", never, { "contentKey": { "alias": "contentKey"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
2098
+ }
2099
+
2100
+ interface RelatedCardItem {
2101
+ title?: string;
2102
+ titleKey?: string;
2103
+ description?: string;
2104
+ descriptionKey?: string;
2105
+ thumbnailSrc?: string;
2106
+ route: string | string[];
2107
+ }
2108
+ declare class RelatedCardsList {
2109
+ readonly items: _angular_core.InputSignal<RelatedCardItem[]>;
2110
+ readonly titleKey: _angular_core.InputSignal<string>;
2111
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RelatedCardsList, never>;
2112
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RelatedCardsList, "ncim-related-cards-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2113
+ }
2114
+
2115
+ interface NavCardItem {
2116
+ slug: string;
2117
+ titleKey: string;
2118
+ descriptionKey: string;
2119
+ thumbnailSrc: string;
2120
+ }
2121
+ declare class NavCardsList {
2122
+ readonly items: _angular_core.InputSignal<NavCardItem[]>;
2123
+ readonly getItemRoute: _angular_core.InputSignal<(slug: string) => string[]>;
2124
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavCardsList, never>;
2125
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavCardsList, "ncim-nav-cards-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "getItemRoute": { "alias": "getItemRoute"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
2126
+ }
2127
+
2128
+ declare class ArticleDetail {
2129
+ readonly videoSrc: _angular_core.InputSignal<string>;
2130
+ readonly titleKey: _angular_core.InputSignal<string>;
2131
+ readonly contentKey: _angular_core.InputSignal<string>;
2132
+ readonly accordionItems: _angular_core.InputSignal<AccordionItem$1[]>;
2133
+ readonly accordionTitleKey: _angular_core.InputSignal<string>;
2134
+ readonly feedback: _angular_core.OutputEmitterRef<"yes" | "no">;
2135
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ArticleDetail, never>;
2136
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ArticleDetail, "ncim-article-detail", never, { "videoSrc": { "alias": "videoSrc"; "required": true; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "contentKey": { "alias": "contentKey"; "required": true; "isSignal": true; }; "accordionItems": { "alias": "accordionItems"; "required": false; "isSignal": true; }; "accordionTitleKey": { "alias": "accordionTitleKey"; "required": false; "isSignal": true; }; }, { "feedback": "feedback"; }, never, never, true, never>;
2137
+ }
2138
+
2139
+ declare class ArticleLayout {
2140
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ArticleLayout, never>;
2141
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ArticleLayout, "ncim-article-layout", never, {}, {}, never, ["[data-main]", "[data-sidebar]"], true, never>;
2142
+ }
2143
+
2144
+ interface ResourceItem {
2145
+ label?: string;
2146
+ labelKey?: string;
2147
+ url: string;
2148
+ icon?: string;
2149
+ }
2150
+ declare class ResourcesList {
2151
+ readonly items: _angular_core.InputSignal<ResourceItem[]>;
2152
+ readonly titleKey: _angular_core.InputSignal<string>;
2153
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ResourcesList, never>;
2154
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResourcesList, "ncim-resources-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2155
+ }
2156
+
2157
+ declare class ArticleSidebar {
2158
+ readonly resources: _angular_core.InputSignal<ResourceItem[]>;
2159
+ readonly relatedItems: _angular_core.InputSignal<RelatedCardItem[]>;
2160
+ readonly resourcesTitleKey: _angular_core.InputSignal<string>;
2161
+ readonly relatedTitleKey: _angular_core.InputSignal<string>;
2162
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ArticleSidebar, never>;
2163
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ArticleSidebar, "ncim-article-sidebar", never, { "resources": { "alias": "resources"; "required": true; "isSignal": true; }; "relatedItems": { "alias": "relatedItems"; "required": true; "isSignal": true; }; "resourcesTitleKey": { "alias": "resourcesTitleKey"; "required": false; "isSignal": true; }; "relatedTitleKey": { "alias": "relatedTitleKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2164
+ }
2165
+
2166
+ declare class CardsListPage {
2167
+ readonly titleKey: _angular_core.InputSignal<string>;
2168
+ readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem$1[]>;
2169
+ readonly items: _angular_core.InputSignal<NavCardItem[]>;
2170
+ readonly getItemRoute: _angular_core.InputSignal<(slug: string) => string[]>;
2171
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardsListPage, never>;
2172
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardsListPage, "ncim-cards-list-page", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "getItemRoute": { "alias": "getItemRoute"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
2173
+ }
2174
+
2175
+ declare class ArticlePage {
2176
+ readonly titleKey: _angular_core.InputSignal<string>;
2177
+ readonly breadcrumbItems: _angular_core.InputSignal<BreadcrumbItem$1[]>;
2178
+ readonly videoSrc: _angular_core.InputSignal<string>;
2179
+ readonly contentKey: _angular_core.InputSignal<string>;
2180
+ readonly accordionItems: _angular_core.InputSignal<AccordionItem$1[]>;
2181
+ readonly accordionTitleKey: _angular_core.InputSignal<string>;
2182
+ readonly resources: _angular_core.InputSignal<ResourceItem[]>;
2183
+ readonly relatedItems: _angular_core.InputSignal<RelatedCardItem[]>;
2184
+ readonly relatedTitleKey: _angular_core.InputSignal<string>;
2185
+ readonly feedback: _angular_core.OutputEmitterRef<"yes" | "no">;
2186
+ readonly newTicket: _angular_core.OutputEmitterRef<void>;
2187
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ArticlePage, never>;
2188
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ArticlePage, "ncim-article-page", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": true; "isSignal": true; }; "videoSrc": { "alias": "videoSrc"; "required": true; "isSignal": true; }; "contentKey": { "alias": "contentKey"; "required": true; "isSignal": true; }; "accordionItems": { "alias": "accordionItems"; "required": false; "isSignal": true; }; "accordionTitleKey": { "alias": "accordionTitleKey"; "required": false; "isSignal": true; }; "resources": { "alias": "resources"; "required": true; "isSignal": true; }; "relatedItems": { "alias": "relatedItems"; "required": true; "isSignal": true; }; "relatedTitleKey": { "alias": "relatedTitleKey"; "required": false; "isSignal": true; }; }, { "feedback": "feedback"; "newTicket": "newTicket"; }, never, never, true, never>;
2189
+ }
2190
+
2191
+ declare class InfoRow {
2192
+ readonly title: _angular_core.InputSignal<string>;
2193
+ readonly description: _angular_core.InputSignal<string>;
2194
+ readonly editLabel: _angular_core.InputSignal<string>;
2195
+ readonly showEdit: _angular_core.InputSignal<boolean>;
2196
+ readonly editClick: _angular_core.OutputEmitterRef<void>;
2197
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InfoRow, never>;
2198
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InfoRow, "ncim-info-row", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "editLabel": { "alias": "editLabel"; "required": false; "isSignal": true; }; "showEdit": { "alias": "showEdit"; "required": false; "isSignal": true; }; }, { "editClick": "editClick"; }, never, never, true, never>;
2199
+ }
2200
+
2201
+ declare class EmptyState {
2202
+ /** Translation key for the title (e.g. COMMON.NO_DATA). Used when title is not provided. */
2203
+ readonly titleKey: _angular_core.InputSignal<string | undefined>;
2204
+ /** Plain text for the title. When provided, overrides titleKey. */
2205
+ readonly title: _angular_core.InputSignal<string | undefined>;
2206
+ /** Optional translation key for subtitle/description. Used when subtitle is not provided. */
2207
+ readonly subtitleKey: _angular_core.InputSignal<string | undefined>;
2208
+ /** Plain text for the subtitle. When provided, overrides subtitleKey. */
2209
+ readonly subtitle: _angular_core.InputSignal<string | undefined>;
2210
+ /**
2211
+ * Illustration image URL. Defaults to the shared empty.svg asset.
2212
+ * When truthy, renders an <img> instead of the icon.
2213
+ * Pass an empty string to disable the image and fall back to the icon input.
2214
+ */
2215
+ readonly imageSrc: _angular_core.InputSignal<string>;
2216
+ /** Accessible alt text for the illustration. Defaults to empty (decorative). */
2217
+ readonly imageAlt: _angular_core.InputSignal<string>;
2218
+ /** Icon name from ncim icon set — used only when imageSrc is empty. */
2219
+ readonly icon: _angular_core.InputSignal<string>;
2220
+ /** Size in pixels applied to both the illustration width and icon size. */
2221
+ readonly iconSize: _angular_core.InputSignal<number>;
2222
+ /** Compact variant for inline use (e.g. inside cards, smaller padding) */
2223
+ readonly compact: _angular_core.InputSignal<boolean>;
2224
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyState, never>;
2225
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyState, "ncim-empty-state", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2226
+ }
2227
+
2228
+ declare class PageNotFound {
2229
+ /** i18n key for the empty-state title. */
2230
+ readonly titleKey: _angular_core.InputSignal<string>;
2231
+ /** i18n key for the empty-state subtitle/description. */
2232
+ readonly subtitleKey: _angular_core.InputSignal<string | undefined>;
2233
+ /** Icon name from the ncim icon set shown in the empty-state. */
2234
+ readonly icon: _angular_core.InputSignal<string>;
2235
+ /** i18n key for the back button label. Defaults to COMMON.BACK. */
2236
+ readonly backLabelKey: _angular_core.InputSignal<string>;
2237
+ /** Emitted when the user clicks the back button. */
2238
+ readonly back: _angular_core.OutputEmitterRef<void>;
2239
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageNotFound, never>;
2240
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageNotFound, "ncim-page-not-found", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "backLabelKey": { "alias": "backLabelKey"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, never, true, never>;
2241
+ }
2242
+
2243
+ declare class PageError {
2244
+ /** i18n key for the error title. */
2245
+ readonly titleKey: _angular_core.InputSignal<string>;
2246
+ /** i18n key for the optional subtitle/description. */
2247
+ readonly subtitleKey: _angular_core.InputSignal<string | undefined>;
2248
+ /** Icon name from the ncim icon set. */
2249
+ readonly icon: _angular_core.InputSignal<string>;
2250
+ /** i18n key for the retry button label. Defaults to COMMON.RETRY. */
2251
+ readonly retryLabelKey: _angular_core.InputSignal<string>;
2252
+ /** Emitted when the user clicks the retry button. */
2253
+ readonly retry: _angular_core.OutputEmitterRef<void>;
2254
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageError, never>;
2255
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageError, "ncim-page-error", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "retryLabelKey": { "alias": "retryLabelKey"; "required": false; "isSignal": true; }; }, { "retry": "retry"; }, never, never, true, never>;
2256
+ }
2257
+
2258
+ declare enum ColumnsEnum {
2259
+ TOGGLE = "toggle",
2260
+ TEXT = "text",
2261
+ CUSTOM = "custom",
2262
+ BUTTON = "button",
2263
+ LINK = "link",
2264
+ COMMAND = "command",
2265
+ CHECKBOX = "checkbox",
2266
+ STATUS = "status",
2267
+ PROGRESS = "progress",
2268
+ BADGE = "badge",
2269
+ MULTILINE = "multiline",
2270
+ MENU = "menu",
2271
+ DATE = "date",
2272
+ HASH_ID = "hashId"
2273
+ }
2274
+
2275
+ declare class CustomColsDirective {
2276
+ readonly ncimCustomCol: _angular_core.InputSignal<string>;
2277
+ readonly templateRef: TemplateRef<any>;
2278
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CustomColsDirective, never>;
2279
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CustomColsDirective, "ng-template[ncimCustomCol]", never, { "ncimCustomCol": { "alias": "ncimCustomCol"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
2280
+ }
2281
+
2282
+ /** DgaTag variant when using ncim-dga-tag for status display */
2283
+ type StatusVariant = 'success' | 'danger' | 'warning' | 'info' | 'neutral' | 'purple';
2284
+ interface StatusConfig {
2285
+ label: string;
2286
+ color?: string;
2287
+ bgColor?: string;
2288
+ /** When set, grid-table uses ncim-dga-tag with this variant (recommended for consistent design) */
2289
+ variant?: StatusVariant;
2290
+ }
2291
+
2292
+ type GridRow = Record<string, unknown>;
2293
+ /** Emitted by GridTable when the user clicks a sortable column header. */
2294
+ interface GridSortEvent {
2295
+ field: string;
2296
+ order: 'asc' | 'desc';
2297
+ }
2298
+
2299
+ /** Emitted by GridTable when paginator page changes. */
2300
+ interface GridPageEvent {
2301
+ page: number;
2302
+ rows: number;
2303
+ first: number;
2304
+ }
2305
+ interface ProgressConfig {
2306
+ value: number;
2307
+ max: number;
2308
+ label: string;
2309
+ color?: string;
2310
+ }
2311
+ type GridActionType = 'link' | 'command' | 'menu';
2312
+ interface GridAction<T extends GridRow = GridRow> {
2313
+ type: Exclude<GridActionType, 'menu'>;
2314
+ label: string;
2315
+ icon?: string;
2316
+ iconOnly?: boolean;
2317
+ severity?: ButtonSeverity;
2318
+ link?: (row: T) => string;
2319
+ command?: (row: T) => void;
2320
+ }
2321
+ interface GridAction<T extends GridRow = GridRow> {
2322
+ type: Exclude<GridActionType, 'menu'>;
2323
+ label: string;
2324
+ icon?: string;
2325
+ iconOnly?: boolean;
2326
+ severity?: ButtonSeverity;
2327
+ link?: (row: T) => string;
2328
+ command?: (row: T) => void;
2329
+ }
2330
+ interface GridMenuItem<T extends GridRow = GridRow> {
2331
+ label?: string;
2332
+ icon?: string;
2333
+ command?: (row: T) => void;
2334
+ class?: string;
2335
+ separator?: boolean;
2336
+ }
2337
+ interface GridMenuAction<T extends GridRow = GridRow> {
2338
+ type: 'menu';
2339
+ label: string;
2340
+ icon?: string;
2341
+ iconOnly?: boolean;
2342
+ severity?: ButtonSeverity;
2343
+ items: GridMenuItem<T>[];
2344
+ }
2345
+ type GridColumnAction<T extends GridRow = GridRow> = GridAction<T> | GridMenuAction<T>;
2346
+ interface GridColumn<T extends GridRow = GridRow> {
2347
+ header: string;
2348
+ isSorted: boolean;
2349
+ field?: string;
2350
+ type?: ColumnsEnum;
2351
+ display?: any;
2352
+ onChange?: (row: any, ...args: any[]) => void;
2353
+ actions?: GridColumnAction<T>[];
2354
+ statusMap?: Record<string, StatusConfig>;
2355
+ progressField?: string;
2356
+ getProgress?: (row: any) => ProgressConfig;
2357
+ getBadgeColor?: (row: any) => string;
2358
+ columnDef?: string;
2359
+ cellValue?: (row: any) => any;
2360
+ pipeArgs?: any;
2361
+ cssStyle?: string;
2362
+ }
2363
+ declare class GridTable<T extends GridRow = GridRow> {
2364
+ private readonly router;
2365
+ readonly showSelect: _angular_core.InputSignal<boolean>;
2366
+ readonly btnLabel: _angular_core.InputSignal<string>;
2367
+ readonly selectedItems: _angular_core.ModelSignal<T[]>;
2368
+ readonly searchPipeKey: _angular_core.InputSignal<string>;
2369
+ readonly data: _angular_core.InputSignal<T[]>;
2370
+ readonly columns: _angular_core.InputSignal<GridColumn<T>[]>;
2371
+ readonly showAddButton: _angular_core.InputSignal<boolean>;
2372
+ readonly loading: _angular_core.InputSignal<boolean>;
2373
+ readonly loadingDelay: _angular_core.InputSignal<number>;
2374
+ readonly rows: _angular_core.InputSignal<number>;
2375
+ readonly rowsPerPageOptions: _angular_core.InputSignal<number[]>;
2376
+ /**
2377
+ * When false, the footer paginator is hidden (e.g. static read-only tables with few rows).
2378
+ */
2379
+ readonly pagination: _angular_core.InputSignal<boolean>;
2380
+ readonly lazy: _angular_core.InputSignal<boolean>;
2381
+ readonly totalRecords: _angular_core.InputSignal<number>;
2382
+ readonly first: _angular_core.InputSignal<number>;
2383
+ readonly tableMinWidth: _angular_core.InputSignal<string>;
2384
+ /** When provided with emptyStateTitleKey, shows ncim-empty-state with icon in empty table body */
2385
+ readonly emptyStateIcon: _angular_core.InputSignal<string | undefined>;
2386
+ readonly emptyStateTitleKey: _angular_core.InputSignal<string | undefined>;
2387
+ readonly emptyStateSubtitleKey: _angular_core.InputSignal<string | undefined>;
2388
+ /** When true, shows an error state instead of empty state in the table body */
2389
+ readonly error: _angular_core.InputSignal<boolean>;
2390
+ /**
2391
+ * Active sort field — restores the sort arrow after a loading cycle.
2392
+ * Must match the `field` property of the sorted column.
2393
+ */
2394
+ readonly sortField: _angular_core.InputSignal<string | undefined>;
2395
+ /**
2396
+ * Active sort direction — restores the sort arrow after a loading cycle.
2397
+ * Pass the same value emitted by sortChange.
2398
+ */
2399
+ readonly sortOrder: _angular_core.InputSignal<"desc" | "asc" | undefined>;
2400
+ /** PrimeNG expects 1 (asc) / -1 (desc). Converts from the string union. */
2401
+ readonly primeNgSortOrder: _angular_core.Signal<1 | -1>;
2402
+ /**
2403
+ * Optional row-click navigation.
2404
+ * Provide a function that returns an absolute route string for the given row,
2405
+ * or `null` / `undefined` to make a specific row non-navigable.
2406
+ *
2407
+ * @example
2408
+ * [rowRoute]="(row) => '/dashboard/violations/violation-details/' + row['id']"
2409
+ */
2410
+ readonly rowRoute: _angular_core.InputSignal<((row: T) => string | null | undefined) | undefined>;
2411
+ readonly hasRowRoute: _angular_core.Signal<boolean>;
2412
+ /** True when skeleton should be shown (loading or within delay after loading ends) */
2413
+ readonly showSkeleton: _angular_core.WritableSignal<boolean>;
2414
+ private lastPageEvent;
2415
+ constructor();
2416
+ readonly addActionEvent: _angular_core.OutputEmitterRef<{
2417
+ show: boolean;
2418
+ }>;
2419
+ readonly searchQuery: _angular_core.OutputEmitterRef<unknown>;
2420
+ readonly selectItems: _angular_core.OutputEmitterRef<T[]>;
2421
+ /** Fires when a sortable column header is clicked — use this to call the API with updated sort params. */
2422
+ readonly sortChange: _angular_core.OutputEmitterRef<GridSortEvent>;
2423
+ /** Fires when paginator page changes. */
2424
+ readonly pageChange: _angular_core.OutputEmitterRef<GridPageEvent>;
2425
+ customColumnTemplates: _angular_core.Signal<readonly CustomColsDirective[]>;
2426
+ protected readonly ColumnsEnum: typeof ColumnsEnum;
2427
+ readonly normalizedColumns: _angular_core.Signal<{
2428
+ isSorted: boolean;
2429
+ type: ColumnsEnum;
2430
+ header: string;
2431
+ field?: string;
2432
+ display?: any;
2433
+ onChange?: (row: any, ...args: any[]) => void;
2434
+ actions?: GridColumnAction<T>[] | undefined;
2435
+ statusMap?: Record<string, StatusConfig>;
2436
+ progressField?: string;
2437
+ getProgress?: (row: any) => ProgressConfig;
2438
+ getBadgeColor?: (row: any) => string;
2439
+ columnDef?: string;
2440
+ cellValue?: (row: any) => any;
2441
+ pipeArgs?: any;
2442
+ cssStyle?: string;
2443
+ }[]>;
2444
+ readonly globalFilterFields: _angular_core.Signal<string[]>;
2445
+ /** Skeleton uses same columns and row count as table (data length or rows per page) */
2446
+ readonly skeletonRows: _angular_core.Signal<number[]>;
2447
+ readonly showPaginator: _angular_core.Signal<boolean>;
2448
+ /** Varying widths for skeleton cells to mimic table layout */
2449
+ colWidth(index: number): string;
2450
+ setNestedValue(obj: T, path: string | undefined, value: unknown): void;
2451
+ getCustomTemplate(columnDef: string | undefined): _angular_core.TemplateRef<any> | null;
2452
+ /**
2453
+ * Get the cell value using priority:
2454
+ * 1. cellValue function (most flexible)
2455
+ * 2. field path with NestedValuePipe
2456
+ * 3. null/undefined
2457
+ */
2458
+ getCellValue(row: any, column: GridColumn): any;
2459
+ /** Called by PrimeNG (customSort=true) — maps PrimeNG order (1/-1) to 'asc'/'desc'. */
2460
+ onTableSort(event: {
2461
+ field: string;
2462
+ order: number;
2463
+ }): void;
2464
+ onRowClick(row: T, event: MouseEvent): void;
2465
+ onSelectChange(items: T[]): void;
2466
+ onPage(event: {
2467
+ first?: number | null;
2468
+ rows?: number | null;
2469
+ page?: number | null;
2470
+ }): void;
2471
+ onLazyLoad(event: {
2472
+ first?: number | null;
2473
+ rows?: number | null;
2474
+ }): void;
2475
+ onFilterList(query: unknown): void;
2476
+ addActionEmit(): void;
2477
+ buildMenuItems(action: GridMenuAction<T>, row: T): MenuItem[];
2478
+ isMenuAction(action: GridColumnAction<T>): action is GridMenuAction<T>;
2479
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridTable<any>, never>;
2480
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridTable<any>, "ncim-grid-table", never, { "showSelect": { "alias": "showSelect"; "required": false; "isSignal": true; }; "btnLabel": { "alias": "btnLabel"; "required": false; "isSignal": true; }; "selectedItems": { "alias": "selectedItems"; "required": false; "isSignal": true; }; "searchPipeKey": { "alias": "searchPipeKey"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "showAddButton": { "alias": "showAddButton"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingDelay": { "alias": "loadingDelay"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "first": { "alias": "first"; "required": false; "isSignal": true; }; "tableMinWidth": { "alias": "tableMinWidth"; "required": false; "isSignal": true; }; "emptyStateIcon": { "alias": "emptyStateIcon"; "required": false; "isSignal": true; }; "emptyStateTitleKey": { "alias": "emptyStateTitleKey"; "required": false; "isSignal": true; }; "emptyStateSubtitleKey": { "alias": "emptyStateSubtitleKey"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "sortField": { "alias": "sortField"; "required": false; "isSignal": true; }; "sortOrder": { "alias": "sortOrder"; "required": false; "isSignal": true; }; "rowRoute": { "alias": "rowRoute"; "required": false; "isSignal": true; }; }, { "selectedItems": "selectedItemsChange"; "addActionEvent": "addActionEvent"; "searchQuery": "searchQuery"; "selectItems": "selectItems"; "sortChange": "sortChange"; "pageChange": "pageChange"; }, ["customColumnTemplates"], never, true, never>;
2481
+ }
2482
+
2483
+ type NotificationType = 'monitoring' | 'commercial' | 'objection' | 'violation' | 'info' | 'warning' | 'success';
2484
+ type NotificationCategory = 'regulatory-dashboard' | 'violations' | 'objections' | 'general' | 'monitoring-board';
2485
+ interface NotificationAction {
2486
+ label: string;
2487
+ action: () => void;
2488
+ variant?: 'primary' | 'secondary';
2489
+ }
2490
+ interface Notification {
2491
+ id: string;
2492
+ title: string;
2493
+ subject?: string;
2494
+ description: string;
2495
+ type: NotificationType;
2496
+ category: NotificationCategory;
2497
+ date: Date;
2498
+ isRead: boolean;
2499
+ icon?: string;
2500
+ actions?: NotificationAction[];
2501
+ }
2502
+ type NotificationFilter = 'all' | 'unread';
2503
+
2504
+ declare class NotificationListComponent {
2505
+ readonly visible: _angular_core.InputSignal<boolean>;
2506
+ readonly notifications: _angular_core.InputSignal<Notification[]>;
2507
+ readonly position: _angular_core.InputSignal<"left" | "right">;
2508
+ readonly rtl: _angular_core.InputSignal<boolean>;
2509
+ readonly visibleChange: _angular_core.OutputEmitterRef<boolean>;
2510
+ readonly notificationClick: _angular_core.OutputEmitterRef<Notification>;
2511
+ readonly markAsRead: _angular_core.OutputEmitterRef<string>;
2512
+ readonly markAllAsRead: _angular_core.OutputEmitterRef<void>;
2513
+ readonly activeFilter: _angular_core.WritableSignal<NotificationFilter>;
2514
+ readonly filteredNotifications: _angular_core.Signal<Notification[]>;
2515
+ readonly unreadCount: _angular_core.Signal<number>;
2516
+ readonly hasUnread: _angular_core.Signal<boolean>;
2517
+ setFilter(filter: NotificationFilter): void;
2518
+ onVisibleChange(visible: boolean): void;
2519
+ onNotificationClick(notification: Notification): void;
2520
+ onActionClick(event: Event, action: NotificationAction): void;
2521
+ onMarkAllAsRead(): void;
2522
+ getNotificationIcon(notification: Notification): string;
2523
+ private static readonly CATEGORY_KEY_MAP;
2524
+ /** Returns days elapsed since the given date (for use with translate pipe in template). */
2525
+ protected getDaysAgo(date: Date): number;
2526
+ /** Returns the i18n key for the given category (for use with translate pipe in template). */
2527
+ protected getCategoryI18nKey(category: string): string;
2528
+ trackByNotificationId(index: number, notification: Notification): string;
2529
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationListComponent, never>;
2530
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NotificationListComponent, "ncim-notification-list", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "notifications": { "alias": "notifications"; "required": true; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "rtl": { "alias": "rtl"; "required": false; "isSignal": true; }; }, { "visibleChange": "visibleChange"; "notificationClick": "notificationClick"; "markAsRead": "markAsRead"; "markAllAsRead": "markAllAsRead"; }, never, never, true, never>;
2531
+ }
2532
+
2533
+ type VideoSourceType = 'embed' | 'html5';
2534
+ declare class VideoPlayer {
2535
+ private readonly sanitizer;
2536
+ readonly src: _angular_core.InputSignal<string>;
2537
+ readonly poster: _angular_core.InputSignal<string>;
2538
+ readonly title: _angular_core.InputSignal<string>;
2539
+ readonly autoplay: _angular_core.InputSignal<boolean>;
2540
+ readonly embedStarted: _angular_core.WritableSignal<boolean>;
2541
+ readonly isPlaying: _angular_core.WritableSignal<boolean>;
2542
+ startEmbed(): void;
2543
+ onVideoPlay(): void;
2544
+ onVideoPause(): void;
2545
+ /** YouTube/Vimeo → embed, else HTML5 */
2546
+ readonly sourceType: _angular_core.Signal<VideoSourceType>;
2547
+ /** Embed URL for YouTube/Vimeo iframe */
2548
+ readonly embedUrl: _angular_core.Signal<string>;
2549
+ readonly safeEmbedUrl: _angular_core.Signal<_angular_platform_browser.SafeResourceUrl>;
2550
+ readonly videoType: _angular_core.Signal<string>;
2551
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<VideoPlayer, never>;
2552
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<VideoPlayer, "ncim-video-player", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "poster": { "alias": "poster"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2553
+ }
2554
+
2555
+ declare class FeedbackSection {
2556
+ readonly questionKey: _angular_core.InputSignal<string>;
2557
+ readonly yesKey: _angular_core.InputSignal<string>;
2558
+ readonly noKey: _angular_core.InputSignal<string>;
2559
+ readonly feedback: _angular_core.OutputEmitterRef<"yes" | "no">;
2560
+ readonly selected: _angular_core.WritableSignal<"yes" | "no" | null>;
2561
+ onYes(): void;
2562
+ onNo(): void;
2563
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FeedbackSection, never>;
2564
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FeedbackSection, "ncim-feedback-section", never, { "questionKey": { "alias": "questionKey"; "required": false; "isSignal": true; }; "yesKey": { "alias": "yesKey"; "required": false; "isSignal": true; }; "noKey": { "alias": "noKey"; "required": false; "isSignal": true; }; }, { "feedback": "feedback"; }, never, never, true, never>;
2565
+ }
2566
+
2567
+ declare class Popup {
2568
+ readonly open: _angular_core.InputSignal<boolean>;
2569
+ readonly title: _angular_core.InputSignal<string>;
2570
+ readonly footerBorder: _angular_core.InputSignal<boolean>;
2571
+ readonly footerStyle: _angular_core.InputSignal<boolean>;
2572
+ readonly showCloseButton: _angular_core.InputSignal<boolean>;
2573
+ readonly showBackButton: _angular_core.InputSignal<boolean>;
2574
+ readonly largeHeader: _angular_core.InputSignal<boolean>;
2575
+ readonly closeOnBackdropClick: _angular_core.InputSignal<boolean>;
2576
+ readonly size: _angular_core.InputSignal<"small" | "medium" | "large" | "extra-large">;
2577
+ readonly width: _angular_core.InputSignal<string>;
2578
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
2579
+ readonly backClicked: _angular_core.OutputEmitterRef<void>;
2580
+ protected readonly titleId: string;
2581
+ protected readonly dialogStyle: _angular_core.Signal<{
2582
+ width: string;
2583
+ maxWidth: string;
2584
+ }>;
2585
+ /**
2586
+ * Guard against double-emission: when the close button is clicked,
2587
+ * `close()` emits `dismissed` directly. PrimeNG then hides the dialog
2588
+ * and fires `onHide` — we skip that second emission.
2589
+ */
2590
+ private _closedByButton;
2591
+ /** Called by the × button in the header. */
2592
+ close(): void;
2593
+ /**
2594
+ * Called by PrimeNG when the dialog hides — covers dismissableMask
2595
+ * (backdrop click) and ESC key. The close-button path is guarded above.
2596
+ */
2597
+ onHide(): void;
2598
+ back(): void;
2599
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Popup, never>;
2600
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Popup, "ncim-popup", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "footerBorder": { "alias": "footerBorder"; "required": false; "isSignal": true; }; "footerStyle": { "alias": "footerStyle"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "largeHeader": { "alias": "largeHeader"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; "backClicked": "backClicked"; }, never, ["[subTitle]", "*", "[popupFooter]"], true, never>;
2601
+ }
2602
+
2603
+ declare abstract class PopupModalBase<T = unknown> implements AfterViewInit {
2604
+ protected readonly destroyRef: DestroyRef;
2605
+ readonly modalData: _angular_core.WritableSignal<T | null>;
2606
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
2607
+ readonly popup: _angular_core.Signal<Popup$1>;
2608
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
2609
+ openModal(data?: T): void;
2610
+ closeModal(): void;
2611
+ ngAfterViewInit(): void;
2612
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopupModalBase<any>, never>;
2613
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PopupModalBase<any>, "ng-component", never, {}, { "dismissed": "dismissed"; }, never, never, true, never>;
2614
+ }
2615
+
2616
+ declare class SaveFilterPopup extends PopupModalBase$1 {
2617
+ readonly mode: _angular_core.InputSignal<"edit" | "add">;
2618
+ readonly initialTitle: _angular_core.InputSignal<string>;
2619
+ readonly saveLoading: _angular_core.InputSignal<boolean>;
2620
+ readonly saved: _angular_core.OutputEmitterRef<{
2621
+ title: string;
2622
+ }>;
2623
+ readonly deleted: _angular_core.OutputEmitterRef<void>;
2624
+ readonly form: FormGroup<{
2625
+ title: FormControl<string | null>;
2626
+ }>;
2627
+ readonly isEditMode: _angular_core.Signal<boolean>;
2628
+ readonly saveAttempted: _angular_core.WritableSignal<boolean>;
2629
+ readonly isSubmitting: _angular_core.WritableSignal<boolean>;
2630
+ private closeTimer;
2631
+ constructor();
2632
+ onSave(): void;
2633
+ onDelete(): void;
2634
+ private cancelClose;
2635
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SaveFilterPopup, never>;
2636
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SaveFilterPopup, "ncim-save-filter-popup", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "initialTitle": { "alias": "initialTitle"; "required": false; "isSignal": true; }; "saveLoading": { "alias": "saveLoading"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "deleted": "deleted"; }, never, never, true, never>;
2637
+ }
2638
+
2639
+ /** A single active filter tag (e.g. "الحالة (1): جسيمة") */
2640
+ interface QuickFilterTag {
2641
+ /** Filter label (e.g. "الحالة", "المدينة") */
2642
+ label: string;
2643
+ /** Number of selected items */
2644
+ count: number;
2645
+ /** Display value for single-value tags */
2646
+ value: string;
2647
+ /** Individual display values for multi-value tags — renders separate removable badges */
2648
+ values?: string[];
2649
+ /** Optional key for removal */
2650
+ key?: string;
2651
+ }
2652
+
2653
+ declare class QuickFilterBar {
2654
+ readonly activeFilters: _angular_core.InputSignal<QuickFilterTag[]>;
2655
+ readonly showSaveFilter: _angular_core.InputSignal<boolean>;
2656
+ readonly showClearAll: _angular_core.InputSignal<boolean>;
2657
+ readonly quickFilterCounter: _angular_core.InputSignal<number>;
2658
+ /** Dynamic title rendered as plain text (caller handles translation) */
2659
+ readonly title: _angular_core.InputSignal<string>;
2660
+ /** CSS gap value for the tags row (e.g. "8px", "var(--space-sm)"). Defaults to SCSS variable. */
2661
+ readonly tagGap: _angular_core.InputSignal<string>;
2662
+ /** Show an × remove button on each tag */
2663
+ readonly showRemoveButton: _angular_core.InputSignal<boolean>;
2664
+ /** justify-content for the row containing tags + actions. Defaults to 'space-between'. */
2665
+ readonly rowJustify: _angular_core.InputSignal<string>;
2666
+ readonly saveFilterClick: _angular_core.OutputEmitterRef<void>;
2667
+ readonly clearAllClick: _angular_core.OutputEmitterRef<void>;
2668
+ readonly filterTagClick: _angular_core.OutputEmitterRef<QuickFilterTag>;
2669
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuickFilterBar, never>;
2670
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuickFilterBar, "ncim-quick-filter-bar", never, { "activeFilters": { "alias": "activeFilters"; "required": false; "isSignal": true; }; "showSaveFilter": { "alias": "showSaveFilter"; "required": false; "isSignal": true; }; "showClearAll": { "alias": "showClearAll"; "required": false; "isSignal": true; }; "quickFilterCounter": { "alias": "quickFilterCounter"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "tagGap": { "alias": "tagGap"; "required": false; "isSignal": true; }; "showRemoveButton": { "alias": "showRemoveButton"; "required": false; "isSignal": true; }; "rowJustify": { "alias": "rowJustify"; "required": false; "isSignal": true; }; }, { "saveFilterClick": "saveFilterClick"; "clearAllClick": "clearAllClick"; "filterTagClick": "filterTagClick"; }, never, never, true, never>;
2671
+ }
2672
+
2673
+ interface SelectableListItem<T = any> {
2674
+ /** Unique value for the item */
2675
+ value: string;
2676
+ /** Primary label (e.g. "سوق التجارة - حي النزهة") */
2677
+ label: string;
2678
+ /** Secondary label (e.g. "453745339") */
2679
+ subLabel?: string;
2680
+ /** Whether the item is disabled */
2681
+ disabled?: boolean;
2682
+ metadata?: T;
2683
+ }
2684
+
2685
+ declare class SelectableListWithSearch {
2686
+ readonly title: _angular_core.InputSignal<string>;
2687
+ readonly items: _angular_core.InputSignal<SelectableListItem<any>[]>;
2688
+ readonly itemTemplate: _angular_core.Signal<TemplateRef<{
2689
+ $implicit: SelectableListItem;
2690
+ index: number;
2691
+ }> | null | undefined>;
2692
+ readonly selectedValues: _angular_core.InputSignal<string[]>;
2693
+ readonly variant: _angular_core.InputSignal<"primary" | "black">;
2694
+ readonly searchPlaceholder: _angular_core.InputSignal<string>;
2695
+ readonly multiSelect: _angular_core.InputSignal<boolean>;
2696
+ readonly rtl: _angular_core.InputSignal<boolean>;
2697
+ readonly selectionChange: _angular_core.OutputEmitterRef<string[]>;
2698
+ protected readonly searchQuery: _angular_core.WritableSignal<string>;
2699
+ protected readonly filteredItems: _angular_core.Signal<SelectableListItem<any>[]>;
2700
+ protected readonly selectedSet: _angular_core.Signal<Set<string>>;
2701
+ protected isSelected(value: string): boolean;
2702
+ protected onSearchInput(event: Event): void;
2703
+ protected toggleItem(item: SelectableListItem): void;
2704
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectableListWithSearch, never>;
2705
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectableListWithSearch, "ncim-selectable-list-with-search", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "multiSelect": { "alias": "multiSelect"; "required": false; "isSignal": true; }; "rtl": { "alias": "rtl"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, ["itemTemplate"], never, true, never>;
2706
+ }
2707
+
2708
+ /**
2709
+ * Thin animated progress bar fixed to the top of the viewport.
2710
+ * Automatically visible whenever the LoadingService reports in-flight HTTP requests.
2711
+ */
2712
+ declare class GlobalLoadingBar {
2713
+ protected readonly loading: LoadingService;
2714
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GlobalLoadingBar, never>;
2715
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GlobalLoadingBar, "ncim-global-loading-bar", never, {}, {}, never, never, true, never>;
2716
+ }
2717
+
2718
+ type ImagePickerErrorType = 'type' | 'size';
2719
+ declare class ImagePicker implements ControlValueAccessor, Validator {
2720
+ private readonly destroyRef;
2721
+ readonly placeholder: _angular_core.InputSignal<string>;
2722
+ readonly disabled: _angular_core.InputSignal<boolean>;
2723
+ readonly required: _angular_core.InputSignal<boolean>;
2724
+ readonly maxSizeMb: _angular_core.InputSignal<number>;
2725
+ readonly value: _angular_core.InputSignal<string | File | null>;
2726
+ readonly fileSelected: _angular_core.OutputEmitterRef<File>;
2727
+ readonly cleared: _angular_core.OutputEmitterRef<void>;
2728
+ readonly validationError: _angular_core.OutputEmitterRef<ImagePickerErrorType>;
2729
+ readonly dragging: _angular_core.WritableSignal<boolean>;
2730
+ readonly previewUrl: _angular_core.WritableSignal<string | null>;
2731
+ readonly error: _angular_core.WritableSignal<ImagePickerErrorType | null>;
2732
+ protected readonly isTouched: _angular_core.WritableSignal<boolean>;
2733
+ readonly showRequiredError: _angular_core.Signal<boolean>;
2734
+ private objectUrl;
2735
+ private readonly cvdDisabled;
2736
+ readonly isDisabled: _angular_core.Signal<boolean>;
2737
+ private onChange;
2738
+ private onTouchedFn;
2739
+ private onValidatorChangeFn;
2740
+ constructor();
2741
+ writeValue(value: string | File | null): void;
2742
+ registerOnChange(fn: (value: File | string | null) => void): void;
2743
+ registerOnTouched(fn: () => void): void;
2744
+ setDisabledState(isDisabled: boolean): void;
2745
+ validate(_control: AbstractControl): ValidationErrors | null;
2746
+ registerOnValidatorChange(fn: () => void): void;
2747
+ openFile(fileInput: HTMLInputElement): void;
2748
+ onFileChange(event: Event): void;
2749
+ onDrop(e: DragEvent): void;
2750
+ onDragOver(e: DragEvent): void;
2751
+ onDragLeave(e: DragEvent): void;
2752
+ clear(e: Event): void;
2753
+ private markTouched;
2754
+ private handleValueChange;
2755
+ private setPreview;
2756
+ private clearPreview;
2757
+ private handleIncomingFile;
2758
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImagePicker, never>;
2759
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ImagePicker, "ncim-image-picker", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "maxSizeMb": { "alias": "maxSizeMb"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "fileSelected": "fileSelected"; "cleared": "cleared"; "validationError": "validationError"; }, never, never, true, never>;
2760
+ }
2761
+
2762
+ declare class ButtonWithSelectionCount implements ControlValueAccessor {
2763
+ readonly label: _angular_core.InputSignal<string>;
2764
+ readonly submitted: _angular_core.InputSignal<boolean>;
2765
+ readonly text: _angular_core.InputSignal<string | undefined>;
2766
+ readonly clicked: _angular_core.OutputEmitterRef<void>;
2767
+ readonly value: _angular_core.InputSignal<any[]>;
2768
+ readonly touched: _angular_core.WritableSignal<boolean>;
2769
+ readonly displayCount: _angular_core.Signal<number>;
2770
+ private readonly ngControl;
2771
+ constructor();
2772
+ private onChange;
2773
+ private onTouched;
2774
+ readonly errorKey: _angular_core.Signal<string>;
2775
+ readonly showError: _angular_core.Signal<boolean>;
2776
+ onButtonClick(): void;
2777
+ writeValue: (value: any[]) => void;
2778
+ registerOnChange(fn: (value: any[]) => void): void;
2779
+ registerOnTouched(fn: () => void): void;
2780
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonWithSelectionCount, never>;
2781
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonWithSelectionCount, "ncim-button-with-selection-count", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
2782
+ }
2783
+
2784
+ declare class ProfileHero {
2785
+ name: _angular_core.InputSignal<string>;
2786
+ role: _angular_core.InputSignal<string>;
2787
+ avatarUrl: _angular_core.InputSignal<string>;
2788
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProfileHero, never>;
2789
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProfileHero, "ncim-profile-hero", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2790
+ }
2791
+
2792
+ interface UploadedFile {
2793
+ id: string;
2794
+ file: File;
2795
+ name: string;
2796
+ sizeFormatted: string;
2797
+ }
2798
+ type RejectionReason = 'size' | 'type' | 'duplicate' | 'max_files';
2799
+ interface RejectedFile {
2800
+ name: string;
2801
+ reason: RejectionReason;
2802
+ }
2803
+ declare class FileUpload implements ControlValueAccessor, Validator {
2804
+ private readonly destroyRef;
2805
+ readonly maxSizeMB: _angular_core.InputSignal<number>;
2806
+ readonly acceptedTypes: _angular_core.InputSignal<string[]>;
2807
+ readonly multiple: _angular_core.InputSignal<boolean>;
2808
+ readonly maxFiles: _angular_core.InputSignal<number>;
2809
+ readonly required: _angular_core.InputSignal<boolean>;
2810
+ readonly filesChanged: _angular_core.OutputEmitterRef<File[]>;
2811
+ readonly filesRejected: _angular_core.OutputEmitterRef<RejectedFile[]>;
2812
+ readonly isDragOver: _angular_core.WritableSignal<boolean>;
2813
+ readonly uploadedFiles: _angular_core.WritableSignal<UploadedFile[]>;
2814
+ readonly rejectedFiles: _angular_core.WritableSignal<RejectedFile[]>;
2815
+ protected readonly isTouched: _angular_core.WritableSignal<boolean>;
2816
+ readonly showRequiredError: _angular_core.Signal<boolean>;
2817
+ readonly typesString: _angular_core.Signal<string>;
2818
+ readonly acceptAttr: _angular_core.Signal<string>;
2819
+ /** Stored reference so removeEventListener can target the same function */
2820
+ private readonly boundFileHandler;
2821
+ private fileInputEl;
2822
+ private onChangeFn;
2823
+ private onTouchedFn;
2824
+ private onValidatorChangeFn;
2825
+ constructor();
2826
+ writeValue(files: File[] | null): void;
2827
+ registerOnChange(fn: (files: File[]) => void): void;
2828
+ registerOnTouched(fn: () => void): void;
2829
+ setDisabledState(_isDisabled: boolean): void;
2830
+ validate(_control: AbstractControl): ValidationErrors | null;
2831
+ registerOnValidatorChange(fn: () => void): void;
2832
+ openFilePicker(): void;
2833
+ onDragOver(event: DragEvent): void;
2834
+ onDragLeave(event: DragEvent): void;
2835
+ onDrop(event: DragEvent): void;
2836
+ removeFile(id: string): void;
2837
+ dismissRejected(): void;
2838
+ private markTouched;
2839
+ private notifyChange;
2840
+ private onFileSelected;
2841
+ private processFiles;
2842
+ private formatSize;
2843
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUpload, never>;
2844
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUpload, "ncim-file-upload", never, { "maxSizeMB": { "alias": "maxSizeMB"; "required": false; "isSignal": true; }; "acceptedTypes": { "alias": "acceptedTypes"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, { "filesChanged": "filesChanged"; "filesRejected": "filesRejected"; }, never, never, true, never>;
2845
+ }
2846
+
2847
+ type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
2848
+ declare class Tooltip {
2849
+ readonly text: _angular_core.InputSignal<string>;
2850
+ readonly position: _angular_core.InputSignal<TooltipPosition>;
2851
+ readonly disabled: _angular_core.InputSignal<boolean>;
2852
+ /** Z-index for the tooltip overlay. Default 1100. */
2853
+ readonly zIndex: _angular_core.InputSignal<string>;
2854
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tooltip, never>;
2855
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tooltip, "ncim-tooltip", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2856
+ }
2857
+
2858
+ declare class CopyNumber {
2859
+ private readonly destroyRef;
2860
+ readonly value: _angular_core.InputSignal<string>;
2861
+ readonly iconSize: _angular_core.InputSignal<number>;
2862
+ readonly copied: _angular_core.WritableSignal<boolean>;
2863
+ copy(): Promise<void>;
2864
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CopyNumber, never>;
2865
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CopyNumber, "ncim-copy-number", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2866
+ }
2867
+
2868
+ declare class ClipboardButton {
2869
+ private readonly destroyRef;
2870
+ readonly value: _angular_core.InputSignal<string>;
2871
+ readonly size: _angular_core.InputSignal<number>;
2872
+ readonly copied: _angular_core.OutputEmitterRef<void>;
2873
+ readonly isCopied: _angular_core.WritableSignal<boolean>;
2874
+ copy(): Promise<void>;
2875
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClipboardButton, never>;
2876
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClipboardButton, "ncim-clipboard-button", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "copied": "copied"; }, never, never, true, never>;
2877
+ }
2878
+
2879
+ /**
2880
+ * Dumb atom: a button that emits a `clicked` event when the user triggers PDF export.
2881
+ * Contains no service logic — the parent decides what to export and when.
2882
+ */
2883
+ declare class ExportPdfButton {
2884
+ /** Translation key for the button label. */
2885
+ readonly labelKey: _angular_core.InputSignal<string>;
2886
+ /** When true, shows a spinner and disables the button. */
2887
+ readonly loading: _angular_core.InputSignal<boolean>;
2888
+ /** When true, disables the button entirely. */
2889
+ readonly disabled: _angular_core.InputSignal<boolean>;
2890
+ /** Button style variant. */
2891
+ readonly variant: _angular_core.InputSignal<"primary" | "outline">;
2892
+ /** Emitted when the user clicks the export button. */
2893
+ readonly clicked: _angular_core.OutputEmitterRef<void>;
2894
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ExportPdfButton, never>;
2895
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ExportPdfButton, "ncim-export-pdf-button", never, { "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
2896
+ }
2897
+
2898
+ /**
2899
+ * Smart organism: wraps any content region and provides PDF export capability.
2900
+ * The export button lives in the parent — wire it via a template reference variable.
2901
+ *
2902
+ * The filename can be provided in two ways:
2903
+ * 1. Static input: `[filename]="'violations-report'"`
2904
+ * 2. At call time: `pdfContainer.triggerExport('violations-report')`
2905
+ * — the call-time value takes priority over the input.
2906
+ *
2907
+ * Usage:
2908
+ * ```html
2909
+ * <ncim-export-pdf-container #pdfContainer [filename]="reportName()"
2910
+ * (exportComplete)="onPdfReady()">
2911
+ * <ncim-page-header titleKey="VIOLATIONS.TITLE" />
2912
+ * <ncim-grid-table [columns]="cols()" [data]="rows()" />
2913
+ * </ncim-export-pdf-container>
2914
+ *
2915
+ * <ncim-export-pdf-button
2916
+ * [loading]="pdfContainer.loading()"
2917
+ * (clicked)="pdfContainer.triggerExport()"
2918
+ * />
2919
+ * ```
2920
+ */
2921
+ declare class ExportPdfContainer {
2922
+ private readonly exportService;
2923
+ private readonly contentRef;
2924
+ /**
2925
+ * Default PDF filename (without extension).
2926
+ * Can be overridden per-call by passing a name to `triggerExport()`.
2927
+ */
2928
+ readonly filename: _angular_core.InputSignal<string>;
2929
+ /**
2930
+ * When true, generates multi-page A4 PDF with page numbers.
2931
+ * When false (default), generates a single-page PDF whose height
2932
+ * exactly matches the content — no white space at the bottom.
2933
+ */
2934
+ readonly pageNumbers: _angular_core.InputSignal<boolean>;
2935
+ /** Emitted when export starts. */
2936
+ readonly exportStarted: _angular_core.OutputEmitterRef<void>;
2937
+ /** Emitted when PDF has been saved successfully. */
2938
+ readonly exportComplete: _angular_core.OutputEmitterRef<void>;
2939
+ /** Emitted with an error message if PDF generation fails. */
2940
+ readonly exportError: _angular_core.OutputEmitterRef<string>;
2941
+ /** True while PDF generation is in progress. Bind to button's [loading] input. */
2942
+ readonly loading: _angular_core.WritableSignal<boolean>;
2943
+ /**
2944
+ * Triggers PDF export.
2945
+ *
2946
+ * @param filename - Optional filename override from the parent. When provided,
2947
+ * takes priority over the `[filename]` input. Useful when the
2948
+ * name depends on runtime data (e.g. entity name, current date).
2949
+ * @param options - Optional PDF options (orientation, scale, pageNumbers, jpegQuality).
2950
+ *
2951
+ * @example
2952
+ * // Static name from input
2953
+ * pdfContainer.triggerExport()
2954
+ *
2955
+ * // Dynamic name from parent
2956
+ * pdfContainer.triggerExport(`violation-${this.id()}-report`)
2957
+ *
2958
+ * // With options
2959
+ * pdfContainer.triggerExport('report', { orientation: 'landscape', jpegQuality: 0.85 })
2960
+ */
2961
+ triggerExport(filename?: string, options?: ExportPdfOptions): Promise<void>;
2962
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ExportPdfContainer, never>;
2963
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ExportPdfContainer, "ncim-export-pdf-container", never, { "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "pageNumbers": { "alias": "pageNumbers"; "required": false; "isSignal": true; }; }, { "exportStarted": "exportStarted"; "exportComplete": "exportComplete"; "exportError": "exportError"; }, never, ["*"], true, never>;
2964
+ }
2965
+
2966
+ interface LicenseComplianceStats {
2967
+ name: string;
2968
+ id: string;
2969
+ city: string;
2970
+ trendData: number[];
2971
+ value: number;
2972
+ isUp: boolean;
2973
+ lastVisit: string;
2974
+ color: string;
2975
+ }
2976
+ interface ScaleIndicatorConfig {
2977
+ title: string;
2978
+ value: number;
2979
+ activeColor: string;
2980
+ labels?: ScaleIndicatorLabels;
2981
+ /** Scale range min (default 0) */
2982
+ min?: number;
2983
+ /** Scale range max (default 100) */
2984
+ max?: number;
2985
+ /** Highlighted range start (with end, shows range bar) */
2986
+ start?: number;
2987
+ /** Highlighted range end (with start, shows range bar) */
2988
+ end?: number;
2989
+ }
2990
+ declare const MARKET_CARDS: LicenseComplianceStats[];
2991
+ declare const COMPLIANCE_VS_VIOLATIONS_SERIES: ChartLineSeriesData[];
2992
+ declare const COMPLIANCE_CATEGORIES: string[];
2993
+ declare const COMPLIANCE_TREND_SERIES: ChartLineSeriesData[];
2994
+ declare const STACKED_BAR_SERIES: BarSeriesData[];
2995
+ declare const BAR_CATEGORIES: string[];
2996
+ declare const GROUPED_BAR_SERIES: BarSeriesData[];
2997
+ declare const INSPECTION_SERIES: ChartLineSeriesData[];
2998
+ declare const INSPECTION_CATEGORIES: string[];
2999
+ declare const MONTHLY_COMPLIANCE_SERIES: ChartLineSeriesData[];
3000
+ declare const AREA_CHART_DATA: number[];
3001
+ declare const AREA_CHART_CATEGORIES: string[];
3002
+ declare const DONUT_CHART_DATA: ChartSeriesItem[];
3003
+ declare const PIE_CHART_DATA: ChartSeriesItem[];
3004
+ declare const GAUGE_VALUE = 20;
3005
+ declare const SCALE_INDICATORS: ScaleIndicatorConfig[];
3006
+ declare const HORIZONTAL_BAR_DATA: HorizontalBarItem[];
3007
+ declare const MAP_MARKERS: MapMarkerData[];
3008
+
3009
+ type StatusPageVariant = 'error' | 'warning' | 'info' | 'success' | 'neutral';
3010
+ /**
3011
+ * Generic full-page status component for error, maintenance, permission, and empty states.
3012
+ *
3013
+ * Place action buttons (anchors, router links, retry buttons) via `ng-content`.
3014
+ *
3015
+ * @example
3016
+ * <ncim-status-page icon="shield" iconVariant="error" code="403"
3017
+ * titleKey="STATUS_PAGES.403.TITLE" subtitleKey="STATUS_PAGES.403.SUBTITLE">
3018
+ * <ncim-button label="Back to Home" (click)="goHome()" />
3019
+ * </ncim-status-page>
3020
+ */
3021
+ declare class StatusPage {
3022
+ /** Icon name from the ncim icon set. */
3023
+ readonly icon: _angular_core.InputSignal<string>;
3024
+ /** Background/foreground color variant for the icon wrapper. */
3025
+ readonly iconVariant: _angular_core.InputSignal<StatusPageVariant>;
3026
+ /** Optional image URL. When provided, renders an <img> instead of the icon wrapper. */
3027
+ readonly imageSrc: _angular_core.InputSignal<string | undefined>;
3028
+ /** Alt text for the image (accessibility). Defaults to empty string for decorative images. */
3029
+ readonly imageAlt: _angular_core.InputSignal<string>;
3030
+ /** Optional HTTP status code displayed as a badge (e.g. '403', '404'). */
3031
+ readonly code: _angular_core.InputSignal<string | undefined>;
3032
+ /** Required i18n key for the page title. */
3033
+ readonly titleKey: _angular_core.InputSignal<string>;
3034
+ /** Optional i18n key for the descriptive subtitle. */
3035
+ readonly subtitleKey: _angular_core.InputSignal<string | undefined>;
3036
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusPage, never>;
3037
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusPage, "ncim-status-page", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconVariant": { "alias": "iconVariant"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; "code": { "alias": "code"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3038
+ }
3039
+
3040
+ /**
3041
+ * Inline error state for data-loading failures inside tables, cards, and sections.
3042
+ *
3043
+ * @example
3044
+ * @if (tableError()) {
3045
+ * <ncim-api-error-state (retry)="loadData()" />
3046
+ * }
3047
+ */
3048
+ declare class ApiErrorState {
3049
+ /** Custom i18n title key. Defaults to STATUS_PAGES.API_ERROR.TITLE. */
3050
+ readonly titleKey: _angular_core.InputSignal<string>;
3051
+ /** Custom i18n subtitle key. Defaults to STATUS_PAGES.API_ERROR.SUBTITLE. */
3052
+ readonly subtitleKey: _angular_core.InputSignal<string>;
3053
+ /** Show the retry button. */
3054
+ readonly retryable: _angular_core.InputSignal<boolean>;
3055
+ /** Emitted when the user clicks retry. */
3056
+ readonly retry: _angular_core.OutputEmitterRef<void>;
3057
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ApiErrorState, never>;
3058
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ApiErrorState, "ncim-api-error-state", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "retryable": { "alias": "retryable"; "required": false; "isSignal": true; }; }, { "retry": "retry"; }, never, never, true, never>;
3059
+ }
3060
+
3061
+ declare class Stamp {
3062
+ readonly color: _angular_core.InputSignal<string>;
3063
+ readonly title: _angular_core.InputSignal<string>;
3064
+ readonly id: _angular_core.InputSignal<string>;
3065
+ readonly date: _angular_core.InputSignal<string>;
3066
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Stamp, never>;
3067
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stamp, "ncim-stamp", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3068
+ }
3069
+
3070
+ interface MultiSegmentBarItem {
3071
+ label: string;
3072
+ value: number;
3073
+ maxValue: number;
3074
+ color?: string;
3075
+ }
3076
+ declare class MultiSegmentBarChart {
3077
+ private readonly el;
3078
+ /** Data items for the bar chart */
3079
+ readonly data: _angular_core.InputSignal<MultiSegmentBarItem[]>;
3080
+ /** Bar height in pixels */
3081
+ readonly barHeight: _angular_core.InputSignal<number>;
3082
+ /** Number of segments to divide the bar into */
3083
+ readonly segmentCount: _angular_core.InputSignal<number>;
3084
+ /** Gap between bar segments in pixels */
3085
+ readonly segmentGap: _angular_core.InputSignal<number>;
3086
+ /** Gap between bar rows in pixels */
3087
+ readonly rowGap: _angular_core.InputSignal<number>;
3088
+ /** Default bar color if not provided in item */
3089
+ readonly defaultColor: _angular_core.InputSignal<string>;
3090
+ /** Track background color */
3091
+ readonly trackColor: _angular_core.InputSignal<string>;
3092
+ /** Manual override for RTL. Detected from parent if not provided. */
3093
+ readonly isRtl: _angular_core.InputSignal<boolean | null>;
3094
+ private readonly detectedIsRtl;
3095
+ constructor();
3096
+ readonly computedIsRtl: _angular_core.Signal<boolean>;
3097
+ readonly computedBars: _angular_core.Signal<{
3098
+ color: string;
3099
+ segments: {
3100
+ fill: number;
3101
+ }[];
3102
+ label: string;
3103
+ value: number;
3104
+ maxValue: number;
3105
+ }[]>;
3106
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiSegmentBarChart, never>;
3107
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiSegmentBarChart, "ncim-multi-segment-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "barHeight": { "alias": "barHeight"; "required": false; "isSignal": true; }; "segmentCount": { "alias": "segmentCount"; "required": false; "isSignal": true; }; "segmentGap": { "alias": "segmentGap"; "required": false; "isSignal": true; }; "rowGap": { "alias": "rowGap"; "required": false; "isSignal": true; }; "defaultColor": { "alias": "defaultColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3108
+ }
3109
+
3110
+ declare class FormPasswordToggle {
3111
+ readonly showPassword: _angular_core.InputSignal<boolean>;
3112
+ readonly togglePassword: _angular_core.OutputEmitterRef<void>;
3113
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormPasswordToggle, never>;
3114
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormPasswordToggle, "ncim-form-password-toggle", never, { "showPassword": { "alias": "showPassword"; "required": true; "isSignal": true; }; }, { "togglePassword": "togglePassword"; }, never, never, true, never>;
3115
+ }
3116
+
3117
+ declare class SupportContactCard {
3118
+ readonly title: _angular_core.InputSignal<string>;
3119
+ readonly description: _angular_core.InputSignal<string>;
3120
+ readonly buttonLabel: _angular_core.InputSignal<string>;
3121
+ readonly visible: _angular_core.InputSignal<boolean>;
3122
+ readonly newTicket: _angular_core.OutputEmitterRef<void>;
3123
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SupportContactCard, never>;
3124
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SupportContactCard, "ncim-support-contact-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "buttonLabel": { "alias": "buttonLabel"; "required": true; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; }, { "newTicket": "newTicket"; }, never, never, true, never>;
3125
+ }
3126
+
3127
+ export { AREA_CHART_CATEGORIES, AREA_CHART_DATA, Accordion, AiChating, ApiErrorState, AreaChart, ArticleDetail, ArticleLayout, ArticlePage, ArticleSidebar, Attachments, AuthLayout, BAR_CATEGORIES, BarChart, BasicCard, Breadcrumb, BulletList, Button, ButtonWithSelectionCount, COMPLIANCE_CATEGORIES, COMPLIANCE_TREND_SERIES, COMPLIANCE_VS_VIOLATIONS_SERIES, CaptchaInput, Card, CardsListPage, CardsStatistics, CategoryTile, ChartLegend, Checkbox, CircularProgress, ClipboardButton, ColumnsEnum, CompleteTraining, ContentBlock, ContestedViolation, CopyNumber, CopyRight, CreateCategoryTile, CriteriaSection, DONUT_CHART_DATA, DashboardLayout, DgaTag, Divider, DonutChart, EmptyState, EntityInfoCard, EntitySummaryCard, EntityTypeCard, ExportPdfButton, ExportPdfContainer, Accordion as FaqAccordion, FeedbackSection, FileUpload, FilterForm, FormError, FormInput, FormLabel, FormMultiSelect, FormPasswordToggle, GAUGE_VALUE, GROUPED_BAR_SERIES, GaugeChart, GlobalLoadingBar, GridTable, HORIZONTAL_BAR_DATA, HorizontalBarChart, INSPECTION_CATEGORIES, INSPECTION_SERIES, Icon, IconCard, IconsDocument, ImagePicker, InfoRow, InspectionSummaryCard, ArticleLayout as KnowledgeArticleLayout, CardsListPage as KnowledgeListPage, ArticleSidebar as KnowledgeSidebar, NavCard as KnowledgeTopicCard, ContentBlock as KnowledgeTopicContent, ArticleDetail as KnowledgeTopicDetail, ArticlePage as KnowledgeTopicPage, NavCardsList as KnowledgeTopicsList, LicenseStatusCard, LineChart, LogoutModal, MAP_MARKERS, MARKET_CARDS, MONTHLY_COMPLIANCE_SERIES, MapView, MultiSegmentBarChart, MultiSegmentGauge, NavCard, NavCardsList, NavItemKey, NavSectionKey, NotificationListComponent, OptionGroup, OtpInput, PIE_CHART_DATA, PackageFeatureCard, PageError, PageHeader, PageNotFound, PenaltyBadge, PieChart, Popup, PopupModalBase, ProfileHero, ProgressBar, ProgressCard, QuickFilterBar, RadioButton, RadioGroup, RangeBar, RegisterLayout, RelatedCardsList, RelatedCardsList as RelatedTopicsList, RequestDetailsCard, RequestHeader, ResourcesList, RingChart, SCALE_INDICATORS, STACKED_BAR_SERIES, SaveFilterPopup, ScaleIndicator, SearchableUsersList, SelectableListWithSearch, SelectionButton, SettingsLayout, Sidebar, Skeleton, Sparkline, Spinner, SsoCallbackView, SsoErrorDisplay, StackedDistributionChart, Stamp, StatGauge, StatRing, StatsAnalyticsCard, StatusPage, Stepper, StoreLocations, SummaryCard, SupportContactCard, TabPanel, Tabs, TabsInkbarRtlDirective, Tooltip, ProgressCard as TrainingCard, VideoPlayer, ViolationHeader, ViolationInfoCard, ViolationStatusType, ViolationSummaryCard, ViolationTimeline, VisitDetails };
3128
+ export type { AIChatAction, AccordionItem, ActionButton, Attachment, BarSeriesData, BreadcrumbItem, ChartLegendItem, ChartLineSeriesData, ChartSeriesItem, ChartTooltipData, ContestedViolationData, ContestedViolationStatus, CriteriaItem, CriteriaSectionData, DgaTagSize, DgaTagStyle, DgaTagVariant, EChartTooltipParam, EntityInfoCardBadgeTone, EntitySummarySector, AccordionItem as FaqItem, FieldSize, FilterFieldConfig, FilterFieldType, FilterFormConfig, FooterAction, GridAction, GridActionType, GridColumn, GridColumnAction, GridMenuAction, GridMenuItem, GridPageEvent, GridRow, GridSortEvent, HorizontalBarItem, ImagePickerErrorType, InputFilter, InspectionSummaryData, InspectorObservation, NavCardItem as KnowledgeTopicListItem, LicenseComplianceStats, MapMarkerBadgeIcon, MapMarkerData, MultiSegmentBarItem, NavCardItem, NavItem, NavSection, Notification, NotificationAction, NotificationCategory, NotificationFilter, NotificationType, OptionItem, OverlayLineSeries, PenaltyBadgeLabels, PenaltyInfo, Permit, ProgressConfig, QuickFilterTag, Recommendation, RejectedFile, RejectionReason, RelatedCardItem, RelatedCardItem as RelatedTopicItem, RequestHeaderMetaItem, RequestStatus, ResourceItem, RestrictInput, RingChartLegendItem, ScaleIndicatorConfig, ScaleIndicatorLabels, SearchableUserListItem, SelectOption, SelectableListItem, SettingsNavItem, SidebarBrand, SkeletonAnimation, SkeletonVariant, StackedDistributionChartItem, StatGaugeRow, StatusConfig, StatusPageVariant, StepItem, TabItem, TimelineData, TimelineStep, TooltipPosition, UploadedFile, VideoSourceType, Violation, ViolationBreadcrumbItem, ViolationInfo, ViolationInfoLabels, ViolationStatus, ViolationSummary, ViolationSummaryLabels, VisitDetailsData };