@foxeltech/angular-ui 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/fesm2022/foxeltech-angular-ui-chart.mjs +392 -0
  2. package/fesm2022/foxeltech-angular-ui-chart.mjs.map +1 -0
  3. package/fesm2022/foxeltech-angular-ui-flow.mjs +38 -0
  4. package/fesm2022/foxeltech-angular-ui-flow.mjs.map +1 -0
  5. package/fesm2022/foxeltech-angular-ui-rich-text.mjs +156 -0
  6. package/fesm2022/foxeltech-angular-ui-rich-text.mjs.map +1 -0
  7. package/fesm2022/foxeltech-angular-ui.mjs +890 -1499
  8. package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
  9. package/fx-icons.svg +97 -0
  10. package/package.json +23 -16
  11. package/src/lib/styles/tailwind.css +0 -1
  12. package/src/lib/ui/components/button/button.component.html +14 -14
  13. package/src/lib/ui/components/checkbox/checkbox.component.html +2 -2
  14. package/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.html +2 -2
  15. package/src/lib/ui/components/datetime-picker/datetime-picker.component.html +54 -28
  16. package/src/lib/ui/components/datetime-picker/datetime-picker.component.scss +25 -137
  17. package/src/lib/ui/components/dnd-upload/dnd-upload.component.html +3 -3
  18. package/src/lib/ui/components/drawer/drawer.component.html +75 -61
  19. package/src/lib/ui/components/empty-state/empty-state.component.html +2 -2
  20. package/src/lib/ui/components/hero-icon/hero-icon.component.html +10 -9
  21. package/src/lib/ui/components/info-field/info-field.component.html +1 -1
  22. package/src/lib/ui/components/input/input.component.html +6 -6
  23. package/src/lib/ui/components/kanban-board/kanban-board.component.html +1 -1
  24. package/src/lib/ui/components/loading-panel/loading-panel.component.html +53 -53
  25. package/src/lib/ui/components/master-detail/master-detail.component.html +9 -9
  26. package/src/lib/ui/components/menu/menu.component.html +27 -0
  27. package/src/lib/ui/components/radio-button/radio-button.component.html +26 -26
  28. package/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html +3 -3
  29. package/src/lib/ui/components/search-bar/search-bar.component.html +12 -11
  30. package/src/lib/ui/components/section-card/section-card.component.html +1 -1
  31. package/src/lib/ui/components/select/select.component.html +14 -12
  32. package/src/lib/ui/components/skeleton-detail/skeleton-detail.component.html +2 -2
  33. package/src/lib/ui/components/skeleton-list/skeleton-list.component.html +1 -1
  34. package/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html +5 -5
  35. package/src/lib/ui/components/slider/slider.component.html +22 -20
  36. package/src/lib/ui/components/stat-cards/stat-cards.component.html +1 -1
  37. package/src/lib/ui/components/switch/switch.component.html +1 -1
  38. package/src/lib/ui/components/tab-group/tab-group.component.html +35 -32
  39. package/src/lib/ui/components/table-cell/table-cell.component.html +2 -2
  40. package/src/lib/ui/components/tag/tag.component.html +4 -4
  41. package/src/lib/ui/components/toast/toast.component.html +42 -40
  42. package/src/lib/ui/components/toast-container/toast-container.component.html +1 -0
  43. package/src/lib/ui/components/tree-diagram/tree-diagram.component.html +22 -20
  44. package/tailwind.css +0 -1
  45. package/types/foxeltech-angular-ui-chart.d.ts +53 -0
  46. package/types/foxeltech-angular-ui-flow.d.ts +14 -0
  47. package/types/foxeltech-angular-ui-rich-text.d.ts +35 -0
  48. package/{index.d.ts → types/foxeltech-angular-ui.d.ts} +394 -387
  49. package/src/lib/ui/components/chart/chart.component.html +0 -20
  50. package/src/lib/ui/components/chart/chart.component.scss +0 -49
  51. package/src/lib/ui/components/flow-connection/flow-connection.component.html +0 -10
  52. package/src/lib/ui/components/flow-connection/flow-connection.component.scss +0 -0
  53. package/src/lib/ui/components/rich-text-area/rich-text-area.component.html +0 -3
  54. package/src/lib/ui/components/rich-text-area/rich-text-area.component.scss +0 -18
@@ -1,46 +1,21 @@
1
- import * as i0 from '@angular/core';
2
- import { OnDestroy, Injector, DestroyRef, ApplicationRef, OnInit, AfterViewInit, ChangeDetectorRef, Type, EventEmitter, Provider, ModuleWithProviders, TemplateRef, ViewContainerRef, ElementRef, RendererFactory2, OnChanges, SimpleChanges, AfterContentInit, QueryList, Renderer2, NgZone } from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, Injector, DestroyRef, ApplicationRef, OnInit, AfterViewInit, ChangeDetectorRef, Type, EventEmitter, Provider, ModuleWithProviders, TemplateRef, ViewContainerRef, ElementRef, RendererFactory2, OnChanges, SimpleChanges, AfterContentInit, Renderer2, InjectionToken, QueryList, NgZone } from '@angular/core';
3
3
  import * as _foxeltech_angular_ui from '@foxeltech/angular-ui';
4
- import * as i53 from '@angular/material/paginator';
5
- import { MatPaginator } from '@angular/material/paginator';
6
- import * as i54 from '@angular/material/table';
4
+ import { MatDialog, MatDialogRef, MatDialogConfig } from '@angular/material/dialog';
5
+ import { MatPaginator, PageEvent } from '@angular/material/paginator';
7
6
  import { MatTableDataSource, MatTable } from '@angular/material/table';
8
7
  import { HttpClient, HttpEvent, HttpErrorResponse, HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';
9
8
  import * as rxjs from 'rxjs';
10
9
  import { Observable, Subject } from 'rxjs';
11
- import * as i40 from '@angular/forms';
12
- import { NgForm, ValidationErrors, NgControl, ControlValueAccessor } from '@angular/forms';
13
- import * as i56 from '@angular/material/dialog';
14
- import { MatDialogRef, MatDialog } from '@angular/material/dialog';
15
- import * as i41 from '@angular/router';
10
+ import * as i1$1 from '@angular/forms';
11
+ import { NgForm, ValidationErrors, ControlValueAccessor, NgControl } from '@angular/forms';
12
+ import * as i2 from '@angular/router';
16
13
  import { ActivatedRouteSnapshot, RouterStateSnapshot, ResolveFn, CanActivate, Router } from '@angular/router';
17
14
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
18
15
  import * as i1 from '@ngx-translate/core';
19
16
  import { TranslateService } from '@ngx-translate/core';
20
- import { EChartsOption, ECharts } from 'echarts';
21
- import * as i47 from 'ngx-vflow';
22
- import { Node, Edge, Connection } from 'ngx-vflow';
23
- import * as i66 from '@angular/cdk/drag-drop';
17
+ import { ComponentType } from '@angular/cdk/portal';
24
18
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
25
- import * as i39 from '@angular/common';
26
- import * as i42 from '@danielmoncada/angular-datetime-picker';
27
- import * as i43 from '@danielmoncada/angular-datetime-picker-moment-adapter';
28
- import * as i46 from '@dimaslz/ng-heroicons';
29
- import * as i48 from 'ngx-echarts';
30
- import * as i49 from '@angular/material/select';
31
- import * as i50 from '@angular/material/radio';
32
- import * as i51 from '@angular/material/button';
33
- import * as i52 from '@angular/material/icon';
34
- import * as i55 from '@angular/material/snack-bar';
35
- import * as i57 from '@angular/material/checkbox';
36
- import * as i58 from '@angular/material/card';
37
- import * as i59 from '@angular/material/datepicker';
38
- import * as i60 from '@angular/material/timepicker';
39
- import * as i61 from '@angular/material/badge';
40
- import * as i62 from '@angular/material/expansion';
41
- import * as i63 from '@angular/material/form-field';
42
- import * as i64 from '@angular/material/menu';
43
- import * as i65 from '@angular/material/tooltip';
44
19
 
45
20
  declare abstract class BaseComponent implements OnDestroy {
46
21
  protected injector: Injector;
@@ -48,8 +23,8 @@ declare abstract class BaseComponent implements OnDestroy {
48
23
  protected destroyRef: DestroyRef;
49
24
  constructor(injector?: Injector);
50
25
  ngOnDestroy(): void;
51
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseComponent, never>;
52
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseComponent, never, never, {}, {}, never, never, true, never>;
26
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseComponent, never>;
27
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseComponent, never, never, {}, {}, never, never, true, never>;
53
28
  }
54
29
 
55
30
  declare class HttpWrapper {
@@ -103,26 +78,45 @@ declare class FxToastrService {
103
78
  error(message: string, title?: string): void;
104
79
  info(message: string, title?: string): void;
105
80
  warning(message: string, title?: string): void;
106
- static ɵfac: i0.ɵɵFactoryDeclaration<FxToastrService, never>;
107
- static ɵprov: i0.ɵɵInjectableDeclaration<FxToastrService>;
81
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxToastrService, never>;
82
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FxToastrService>;
108
83
  }
109
84
 
110
85
  interface TableResult<T> {
111
86
  data: T[];
112
87
  total: number;
113
88
  }
89
+ /**
90
+ * Filter bag for BaseTable screens. The platform-wide keys are declared so
91
+ * templates keep dot access under noPropertyAccessFromIndexSignature;
92
+ * screen-specific keys ride on the index signature (bracket access).
93
+ */
94
+ interface FxTableFilters {
95
+ keyword?: string;
96
+ status?: string;
97
+ statuses?: string[];
98
+ severity?: string;
99
+ riskLevel?: string;
100
+ priority?: string;
101
+ category?: string;
102
+ integrityLevel?: string;
103
+ tags?: string[];
104
+ name?: string;
105
+ groupId?: string;
106
+ [key: string]: any;
107
+ }
114
108
  declare class BaseTableComponent<T = any> extends BaseComponent implements OnInit, AfterViewInit {
115
109
  api: HttpWrapper;
116
- modal: any;
110
+ modal: MatDialog;
117
111
  ref: ChangeDetectorRef;
118
112
  dataSource: MatTableDataSource<T, MatPaginator>;
119
113
  cols: string[];
120
114
  total: number;
121
115
  page: number;
122
116
  pageSize: number;
123
- filters: any;
117
+ filters: FxTableFilters;
124
118
  loading: boolean;
125
- expandedElement: any | null;
119
+ expandedElement: T | null;
126
120
  toastr: FxToastrService;
127
121
  _lock: boolean;
128
122
  keywordChange$: Subject<string>;
@@ -164,8 +158,8 @@ declare class BaseTableComponent<T = any> extends BaseComponent implements OnIni
164
158
  };
165
159
  };
166
160
  paginator: MatPaginator;
167
- table: MatTable<T>;
168
- constructor(injector: Injector, api: HttpWrapper, modal: any, ref: ChangeDetectorRef);
161
+ readonly table: _angular_core.Signal<MatTable<any>>;
162
+ constructor(injector: Injector, api: HttpWrapper, modal: MatDialog, ref: ChangeDetectorRef);
169
163
  ngOnInit(): void;
170
164
  init(): void;
171
165
  ngAfterViewInit(): void;
@@ -186,22 +180,22 @@ declare class BaseTableComponent<T = any> extends BaseComponent implements OnIni
186
180
  setDataSource(result: any): void;
187
181
  private _fetchSeq;
188
182
  fetch(): Promise<void>;
189
- onPageChange(event: any): Promise<void>;
183
+ onPageChange(event: PageEvent): Promise<void>;
190
184
  resolve(): {};
191
185
  empty(): {};
192
186
  onKeywordChange(keyword: string): void;
193
187
  create(): Promise<void>;
194
- update(model: any): Promise<void>;
195
- view(model: any): Promise<void>;
196
- delete(model: any): Promise<void>;
197
- remove(model: any): Promise<any>;
188
+ update(model: T): Promise<void>;
189
+ view(model: T): Promise<void>;
190
+ delete(model: T): Promise<void>;
191
+ remove(model: T): Promise<any>;
198
192
  tagClass(tag: string): _foxeltech_angular_ui.TagType;
199
193
  capitalize(label: string): string;
200
194
  value(model: any, key: string, defaultValue?: any): any;
201
195
  toggleExpand(element: any): void;
202
196
  updateStatus(params: any): Promise<void>;
203
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseTableComponent<any>, never>;
204
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseTableComponent<any>, never, never, {}, {}, never, never, true, never>;
197
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseTableComponent<any>, never>;
198
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseTableComponent<any>, never, never, {}, {}, never, never, true, never>;
205
199
  }
206
200
 
207
201
  /**
@@ -221,10 +215,10 @@ declare class BaseMasterDetailComponent<T = any> extends BaseTableComponent<T> {
221
215
  selected: T | null;
222
216
  detailMap: Map<string, any>;
223
217
  detailLoading: Set<string>;
224
- constructor(injector: Injector, api: HttpWrapper, modal: any, ref: ChangeDetectorRef);
218
+ constructor(injector: Injector, api: HttpWrapper, modal: MatDialog, ref: ChangeDetectorRef);
225
219
  /** Key the row id is read from. Override idOf() instead for composite ids. */
226
220
  protected idKey: string;
227
- idOf(row: any): string | null;
221
+ idOf(row: T): string | null;
228
222
  protected detailUrl(id: string): string | null;
229
223
  /** What the detail pane shows: the fetched detail when cached, else the row. */
230
224
  get detail(): any;
@@ -234,8 +228,8 @@ declare class BaseMasterDetailComponent<T = any> extends BaseTableComponent<T> {
234
228
  autoSelectFirst(): void;
235
229
  selectItem(row: T): void;
236
230
  fetchDetail(id: string): void;
237
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseMasterDetailComponent<any>, never>;
238
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseMasterDetailComponent<any>, never, never, {}, {}, never, never, true, never>;
231
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseMasterDetailComponent<any>, never>;
232
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseMasterDetailComponent<any>, never, never, {}, {}, never, never, true, never>;
239
233
  }
240
234
 
241
235
  declare class BaseDialogComponent<T = any> extends BaseComponent implements AfterViewInit, OnInit {
@@ -244,7 +238,7 @@ declare class BaseDialogComponent<T = any> extends BaseComponent implements Afte
244
238
  toastr: FxToastrService;
245
239
  api: HttpWrapper;
246
240
  dialog: MatDialog;
247
- ngForm: NgForm;
241
+ readonly ngForm: _angular_core.Signal<NgForm | undefined>;
248
242
  method: string;
249
243
  title: string;
250
244
  model: any;
@@ -263,8 +257,8 @@ declare class BaseDialogComponent<T = any> extends BaseComponent implements Afte
263
257
  updateInfo(params?: any): Promise<void>;
264
258
  cancel(): void;
265
259
  validate(): boolean;
266
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseDialogComponent<any>, never>;
267
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseDialogComponent<any>, never, never, {}, {}, never, never, true, never>;
260
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseDialogComponent<any>, never>;
261
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseDialogComponent<any>, never, never, {}, {}, never, never, true, never>;
268
262
  }
269
263
 
270
264
  declare class FxLoadingService {
@@ -274,8 +268,8 @@ declare class FxLoadingService {
274
268
  stop(): void;
275
269
  startAction(): void;
276
270
  stopAction(): void;
277
- static ɵfac: i0.ɵɵFactoryDeclaration<FxLoadingService, never>;
278
- static ɵprov: i0.ɵɵInjectableDeclaration<FxLoadingService>;
271
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxLoadingService, never>;
272
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FxLoadingService>;
279
273
  }
280
274
 
281
275
  declare class BaseResolver {
@@ -402,8 +396,8 @@ declare class NotificationService {
402
396
  * Get connection ID
403
397
  */
404
398
  getConnectionId(): string | null;
405
- static ɵfac: i0.ɵɵFactoryDeclaration<NotificationService, never>;
406
- static ɵprov: i0.ɵɵInjectableDeclaration<NotificationService>;
399
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationService, never>;
400
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<NotificationService>;
407
401
  }
408
402
 
409
403
  interface RealtimeTableEvent<T> {
@@ -482,6 +476,14 @@ declare class RealtimeTableSync<T = any> {
482
476
  }
483
477
 
484
478
  declare class FxUtils {
479
+ /** Dot-path accessor (lodash _.get replacement — supports 'a.b.c'). */
480
+ static get(obj: any, path: string, defaultValue?: any): any;
481
+ /** Dot-path setter (lodash _.set replacement — creates missing objects). */
482
+ static set(obj: any, path: string, value: any): any;
483
+ /** Structural equality (lodash _.isEqual replacement for plain data). */
484
+ static deepEqual(a: any, b: any): boolean;
485
+ /** Deep clone for plain data (objects/arrays/Date); functions stay by reference. */
486
+ static cloneDeep<T>(v: T): T;
485
487
  private static preresolve;
486
488
  static resolve(value: object): Promise<{}>;
487
489
  static isNotNull(obj: any): boolean;
@@ -639,9 +641,9 @@ declare function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader;
639
641
  declare class TranslationModule {
640
642
  static forRoot(): ModuleWithProviders<TranslationModule>;
641
643
  static forChild(): ModuleWithProviders<TranslationModule>;
642
- static ɵfac: i0.ɵɵFactoryDeclaration<TranslationModule, never>;
643
- static ɵmod: i0.ɵɵNgModuleDeclaration<TranslationModule, never, [typeof i1.TranslateModule], [typeof i1.TranslateModule]>;
644
- static ɵinj: i0.ɵɵInjectorDeclaration<TranslationModule>;
644
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TranslationModule, never>;
645
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<TranslationModule, never, [typeof i1.TranslateModule], [typeof i1.TranslateModule]>;
646
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<TranslationModule>;
645
647
  }
646
648
 
647
649
  declare class TranslationService {
@@ -655,8 +657,8 @@ declare class TranslationService {
655
657
  setLanguage(lang: string): void;
656
658
  loadTranslations(lang: string, path: string): void;
657
659
  onLanguageChange(callback: (lang: string) => void): void;
658
- static ɵfac: i0.ɵɵFactoryDeclaration<TranslationService, never>;
659
- static ɵprov: i0.ɵɵInjectableDeclaration<TranslationService>;
660
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TranslationService, never>;
661
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TranslationService>;
660
662
  }
661
663
 
662
664
  declare class PermissionService {
@@ -664,8 +666,8 @@ declare class PermissionService {
664
666
  setPermissions(perms: string[]): void;
665
667
  hasPermission(requiredPermissions: string[]): boolean;
666
668
  getPermissions(): string[];
667
- static ɵfac: i0.ɵɵFactoryDeclaration<PermissionService, never>;
668
- static ɵprov: i0.ɵɵInjectableDeclaration<PermissionService>;
669
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionService, never>;
670
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PermissionService>;
669
671
  }
670
672
 
671
673
  declare class HasPermissionDirective {
@@ -674,18 +676,18 @@ declare class HasPermissionDirective {
674
676
  private permissionService;
675
677
  constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef, permissionService: PermissionService);
676
678
  set hasPermission(required: string | string[]);
677
- static ɵfac: i0.ɵɵFactoryDeclaration<HasPermissionDirective, never>;
678
- static ɵdir: i0.ɵɵDirectiveDeclaration<HasPermissionDirective, "[hasPermission]", never, { "hasPermission": { "alias": "hasPermission"; "required": false; }; }, {}, never, never, true, never>;
679
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HasPermissionDirective, never>;
680
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<HasPermissionDirective, "[hasPermission]", never, { "hasPermission": { "alias": "hasPermission"; "required": false; }; }, {}, never, never, true, never>;
679
681
  }
680
682
 
681
683
  declare class TrimOnBlurDirective {
682
684
  private el;
685
+ readonly collapseWhitespace: _angular_core.InputSignal<boolean>;
683
686
  private ngControl;
684
- collapseWhitespace: boolean;
685
- constructor(el: ElementRef<HTMLInputElement>, ngControl: NgControl);
687
+ constructor(el: ElementRef<HTMLInputElement>);
686
688
  onBlur(): void;
687
- static ɵfac: i0.ɵɵFactoryDeclaration<TrimOnBlurDirective, never>;
688
- static ɵdir: i0.ɵɵDirectiveDeclaration<TrimOnBlurDirective, "[appTrimOnBlur]", never, { "collapseWhitespace": { "alias": "appTrimOnBlurCollapse"; "required": false; }; }, {}, never, never, true, never>;
689
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TrimOnBlurDirective, never>;
690
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TrimOnBlurDirective, "[appTrimOnBlur]", never, { "collapseWhitespace": { "alias": "appTrimOnBlurCollapse"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
689
691
  }
690
692
 
691
693
  declare class PermissionGuard implements CanActivate {
@@ -693,15 +695,15 @@ declare class PermissionGuard implements CanActivate {
693
695
  private router;
694
696
  constructor(permissionService: PermissionService, router: Router);
695
697
  canActivate(route: any): boolean;
696
- static ɵfac: i0.ɵɵFactoryDeclaration<PermissionGuard, never>;
697
- static ɵprov: i0.ɵɵInjectableDeclaration<PermissionGuard>;
698
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionGuard, never>;
699
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PermissionGuard>;
698
700
  }
699
701
 
700
702
  declare class FxStorageService {
701
703
  resolve(key: string, value?: any): any;
702
704
  remove(key: string): void;
703
- static ɵfac: i0.ɵɵFactoryDeclaration<FxStorageService, never>;
704
- static ɵprov: i0.ɵɵInjectableDeclaration<FxStorageService>;
705
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxStorageService, never>;
706
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FxStorageService>;
705
707
  }
706
708
 
707
709
  declare class AuthStateService {
@@ -712,8 +714,8 @@ declare class AuthStateService {
712
714
  setLoggedIn(value: boolean): void;
713
715
  get isLoggedIn(): boolean;
714
716
  handleUnauthorized(): void;
715
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthStateService, never>;
716
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthStateService>;
717
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthStateService, never>;
718
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthStateService>;
717
719
  }
718
720
 
719
721
  declare class AuthInterceptor implements HttpInterceptor {
@@ -721,8 +723,8 @@ declare class AuthInterceptor implements HttpInterceptor {
721
723
  private handlingUnauthorized;
722
724
  constructor(authState: AuthStateService);
723
725
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
724
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthInterceptor, never>;
725
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthInterceptor>;
726
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthInterceptor, never>;
727
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthInterceptor>;
726
728
  }
727
729
 
728
730
  interface Breadcrumb {
@@ -735,22 +737,8 @@ declare class BreadcrumbService {
735
737
  set(breadcrumbs: Breadcrumb[]): void;
736
738
  get(): rxjs.Observable<Breadcrumb[]>;
737
739
  clear(): void;
738
- static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbService, never>;
739
- static ɵprov: i0.ɵɵInjectableDeclaration<BreadcrumbService>;
740
- }
741
-
742
- declare class QuillStyleLoaderService {
743
- private platformId;
744
- private loaded;
745
- private loadingPromise;
746
- constructor(platformId: object);
747
- /**
748
- * Load Quill CSS (only in browser). Returns a promise that resolves when
749
- * the CSS links have been appended.
750
- */
751
- load(): Promise<void>;
752
- static ɵfac: i0.ɵɵFactoryDeclaration<QuillStyleLoaderService, never>;
753
- static ɵprov: i0.ɵɵInjectableDeclaration<QuillStyleLoaderService>;
740
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbService, never>;
741
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<BreadcrumbService>;
754
742
  }
755
743
 
756
744
  declare class ThemeService {
@@ -765,8 +753,29 @@ declare class ThemeService {
765
753
  getCurrentTheme(): 'light' | 'dark';
766
754
  isLight(): boolean;
767
755
  getLogoPath(): string;
768
- static ɵfac: i0.ɵɵFactoryDeclaration<ThemeService, never>;
769
- static ɵprov: i0.ɵɵInjectableDeclaration<ThemeService>;
756
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
757
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
758
+ }
759
+
760
+ interface FxConfirmOptions {
761
+ title?: string;
762
+ message?: string;
763
+ confirmLabel?: string;
764
+ cancelLabel?: string;
765
+ }
766
+ /**
767
+ * Thin façade over MatDialog so app code never imports @angular/material
768
+ * directly (behavior-layer rule, Playbook §5.1). Same semantics — the
769
+ * returned ref is the Material one, typed through this service.
770
+ */
771
+ declare class FxDialogService {
772
+ private dialog;
773
+ open<T, D = any, R = any>(component: ComponentType<T> | TemplateRef<T>, config?: MatDialogConfig<D>): MatDialogRef<T, R>;
774
+ /** Standard confirmation flow — resolves true when the user confirms. */
775
+ confirm(options?: FxConfirmOptions): Promise<boolean>;
776
+ closeAll(): void;
777
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxDialogService, never>;
778
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FxDialogService>;
770
779
  }
771
780
 
772
781
  type ErrorMessages = Record<string, any>;
@@ -778,6 +787,9 @@ declare abstract class FxComponent<T> implements ControlValueAccessor {
778
787
  * bind to an ancestor's NgControl.
779
788
  */
780
789
  ngControl: NgControl | null;
790
+ /** With OnPush, programmatic writes (form.setValue / setDisabledState) must
791
+ * mark the view — CVA calls come from outside the component's own events. */
792
+ protected cdr: ChangeDetectorRef;
781
793
  disabled: boolean;
782
794
  value: T;
783
795
  onChange: (value: T) => void;
@@ -802,8 +814,8 @@ declare abstract class FxComponent<T> implements ControlValueAccessor {
802
814
  */
803
815
  clearErrors(): void;
804
816
  getErrorMessage(label?: string): string | null;
805
- static ɵfac: i0.ɵɵFactoryDeclaration<FxComponent<any>, never>;
806
- static ɵdir: i0.ɵɵDirectiveDeclaration<FxComponent<any>, never, never, { "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
817
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxComponent<any>, never>;
818
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FxComponent<any>, never, never, { "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
807
819
  }
808
820
 
809
821
  declare class InputComponent extends FxComponent<string> implements AfterViewInit {
@@ -811,18 +823,18 @@ declare class InputComponent extends FxComponent<string> implements AfterViewIni
811
823
  label: string;
812
824
  tooltip: string;
813
825
  type: string;
814
- placeholder: string;
826
+ readonly placeholder: _angular_core.InputSignal<string>;
815
827
  errorMessages: Record<string, string>;
816
- required: string | boolean;
828
+ readonly required: _angular_core.InputSignal<string | boolean>;
817
829
  suffixIcon?: string;
818
- class?: any;
819
- maxlength?: number;
820
- validateFn?: (value: string) => ValidationErrors | null;
821
- blurred: EventEmitter<void>;
822
- focused: EventEmitter<void>;
823
- suffixClick: EventEmitter<void>;
830
+ readonly class: _angular_core.InputSignal<any>;
831
+ readonly maxlength: _angular_core.InputSignal<number | undefined>;
832
+ readonly validateFn: _angular_core.InputSignal<((value: string) => ValidationErrors | null) | undefined>;
833
+ readonly blurred: _angular_core.OutputEmitterRef<void>;
834
+ readonly focused: _angular_core.OutputEmitterRef<void>;
835
+ readonly suffixClick: _angular_core.OutputEmitterRef<void>;
824
836
  /** Accessible name for the suffix icon button (it renders no text). */
825
- suffixAriaLabel: string;
837
+ readonly suffixAriaLabel: _angular_core.InputSignal<string>;
826
838
  readonly fieldId: string;
827
839
  showPassword: boolean;
828
840
  validateError: ValidationErrors | null;
@@ -835,30 +847,30 @@ declare class InputComponent extends FxComponent<string> implements AfterViewIni
835
847
  togglePassword(): void;
836
848
  onSuffixClick(): void;
837
849
  get displayType(): string;
838
- static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
839
- static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "fx-ui-input", never, { "label": { "alias": "label"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "required": { "alias": "required"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "class": { "alias": "class"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "validateFn": { "alias": "validateFn"; "required": false; }; "suffixAriaLabel": { "alias": "suffixAriaLabel"; "required": false; }; }, { "blurred": "blurred"; "focused": "focused"; "suffixClick": "suffixClick"; }, never, never, false, never>;
850
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
851
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "fx-ui-input", never, { "label": { "alias": "label"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "validateFn": { "alias": "validateFn"; "required": false; "isSignal": true; }; "suffixAriaLabel": { "alias": "suffixAriaLabel"; "required": false; "isSignal": true; }; }, { "blurred": "blurred"; "focused": "focused"; "suffixClick": "suffixClick"; }, never, never, true, never>;
840
852
  }
841
853
 
842
854
  declare class SelectComponent extends FxComponent<string | string[]> implements AfterViewInit, OnInit, OnChanges {
843
855
  private ref;
844
856
  label: string;
845
857
  tooltip: string;
846
- placeholder: string;
847
- options: {
858
+ readonly placeholder: _angular_core.InputSignal<string>;
859
+ readonly options: _angular_core.InputSignal<{
848
860
  label: string;
849
861
  value: string;
850
- }[];
851
- multiple: boolean;
862
+ }[]>;
863
+ readonly multiple: _angular_core.InputSignal<boolean>;
852
864
  errorMessages: Record<string, string>;
853
- required: boolean;
854
- class?: any;
855
- enableSearch: boolean;
856
- searchFn?: (query: string) => Promise<{
865
+ readonly required: _angular_core.InputSignal<boolean>;
866
+ readonly class: _angular_core.InputSignal<any>;
867
+ readonly enableSearch: _angular_core.InputSignal<boolean>;
868
+ readonly searchFn: _angular_core.InputSignal<((query: string) => Promise<{
857
869
  label: string;
858
870
  value: string;
859
- }[]>;
871
+ }[]>) | undefined>;
860
872
  /** Emits the current value when the select panel closes (useful for multiple mode). */
861
- closed: EventEmitter<string | string[]>;
873
+ readonly closed: _angular_core.OutputEmitterRef<string | string[]>;
862
874
  readonly fieldId: string;
863
875
  searchTerm: string;
864
876
  filteredOptions: {
@@ -877,8 +889,8 @@ declare class SelectComponent extends FxComponent<string | string[]> implements
877
889
  performSearch(term: string): Promise<void>;
878
890
  onSelectionChange(value: any): void;
879
891
  isSelected(value: string): boolean;
880
- static ɵfac: i0.ɵɵFactoryDeclaration<SelectComponent, never>;
881
- static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "fx-ui-select", never, { "label": { "alias": "label"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "required": { "alias": "required"; "required": false; }; "class": { "alias": "class"; "required": false; }; "enableSearch": { "alias": "enableSearch"; "required": false; }; "searchFn": { "alias": "searchFn"; "required": false; }; }, { "closed": "closed"; }, never, never, false, never>;
892
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
893
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "fx-ui-select", never, { "label": { "alias": "label"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "enableSearch": { "alias": "enableSearch"; "required": false; "isSignal": true; }; "searchFn": { "alias": "searchFn"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
882
894
  }
883
895
 
884
896
  interface IRadioButton {
@@ -892,34 +904,34 @@ declare class RadioButtonComponent extends FxComponent<IRadioButton> implements
892
904
  readonly groupId: string;
893
905
  label?: string;
894
906
  tooltip: string;
895
- required?: boolean;
896
- options: {
907
+ readonly required: _angular_core.InputSignal<boolean | undefined>;
908
+ readonly options: _angular_core.InputSignal<{
897
909
  label: string;
898
910
  value: any;
899
911
  icon?: any;
900
912
  tooltip?: string;
901
- }[];
913
+ }[]>;
902
914
  errorMessages: ErrorMessages;
903
- class?: any;
915
+ readonly class: _angular_core.InputSignal<any>;
904
916
  constructor(ref: ChangeDetectorRef);
905
917
  ngAfterViewInit(): void;
906
918
  onSelectValue(value: any): void;
907
- static ɵfac: i0.ɵɵFactoryDeclaration<RadioButtonComponent, never>;
908
- static ɵcmp: i0.ɵɵComponentDeclaration<RadioButtonComponent, "fx-ui-radio", never, { "label": { "alias": "label"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "required": { "alias": "required"; "required": false; }; "options": { "alias": "options"; "required": false; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, never, false, never>;
919
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioButtonComponent, never>;
920
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioButtonComponent, "fx-ui-radio", never, { "label": { "alias": "label"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
909
921
  }
910
922
 
911
923
  declare class CheckboxComponent extends FxComponent<any> implements AfterViewInit {
912
924
  private ref;
913
925
  label: string;
914
- rounded: boolean;
915
- valueChange: EventEmitter<boolean>;
926
+ readonly rounded: _angular_core.InputSignal<boolean | undefined>;
927
+ readonly valueChange: _angular_core.OutputEmitterRef<boolean>;
916
928
  constructor(ref: ChangeDetectorRef);
917
929
  ngAfterViewInit(): void;
918
930
  writeValue(value: any): void;
919
931
  onInputChange(event: Event): void;
920
932
  markTouched(): void;
921
- static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
922
- static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "fx-ui-checkbox", never, { "label": { "alias": "label"; "required": false; }; "rounded": { "alias": "rounded"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
933
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxComponent, never>;
934
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "fx-ui-checkbox", never, { "label": { "alias": "label"; "required": false; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
923
935
  }
924
936
 
925
937
  interface UploadResult {
@@ -931,18 +943,19 @@ interface UploadResult {
931
943
  }[];
932
944
  }
933
945
  declare class DndUploadComponent {
934
- multiple: boolean;
946
+ private cdr;
947
+ readonly multiple: _angular_core.InputSignal<boolean>;
935
948
  accept: string;
936
- maxSizeMB: number;
937
- strictSize: boolean;
949
+ readonly maxSizeMB: _angular_core.InputSignal<number>;
950
+ readonly strictSize: _angular_core.InputSignal<boolean>;
938
951
  /** Icon name from heroicons (outline). Default: 'arrow-up-tray' */
939
- icon: string;
952
+ readonly icon: _angular_core.InputSignal<string>;
940
953
  /** CSS color value for accent (border, icon, link). Default uses --gradient-primary-start */
941
- accentColor: string;
942
- fileDrop: EventEmitter<File[]>;
943
- fileClick: EventEmitter<void>;
944
- uploadComplete: EventEmitter<File[]>;
945
- uploadError: EventEmitter<{
954
+ readonly accentColor: _angular_core.InputSignal<string>;
955
+ readonly fileDrop: _angular_core.OutputEmitterRef<File[]>;
956
+ readonly fileClick: _angular_core.OutputEmitterRef<void>;
957
+ readonly uploadComplete: _angular_core.OutputEmitterRef<File[]>;
958
+ readonly uploadError: _angular_core.OutputEmitterRef<{
946
959
  file: File;
947
960
  reason: string;
948
961
  }>;
@@ -957,103 +970,123 @@ declare class DndUploadComponent {
957
970
  private processFiles;
958
971
  private onUpload;
959
972
  private isAccepted;
960
- static ɵfac: i0.ɵɵFactoryDeclaration<DndUploadComponent, never>;
961
- static ɵcmp: i0.ɵɵComponentDeclaration<DndUploadComponent, "fx-ui-dnd-upload", never, { "multiple": { "alias": "multiple"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "maxSizeMB": { "alias": "maxSizeMB"; "required": false; }; "strictSize": { "alias": "strictSize"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "accentColor": { "alias": "accentColor"; "required": false; }; }, { "fileDrop": "fileDrop"; "fileClick": "fileClick"; "uploadComplete": "uploadComplete"; "uploadError": "uploadError"; }, never, never, false, never>;
973
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DndUploadComponent, never>;
974
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DndUploadComponent, "fx-ui-dnd-upload", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; }; "maxSizeMB": { "alias": "maxSizeMB"; "required": false; "isSignal": true; }; "strictSize": { "alias": "strictSize"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "accentColor": { "alias": "accentColor"; "required": false; "isSignal": true; }; }, { "fileDrop": "fileDrop"; "fileClick": "fileClick"; "uploadComplete": "uploadComplete"; "uploadError": "uploadError"; }, never, never, true, never>;
962
975
  }
963
976
 
964
977
  declare class ButtonComponent {
965
978
  label: string;
966
- disabled: boolean;
967
- buttonVariant: 'default' | 'primary' | 'success' | 'alternative';
979
+ readonly disabled: _angular_core.InputSignal<boolean>;
980
+ readonly buttonVariant: _angular_core.InputSignal<"default" | "success" | "primary" | "alternative">;
968
981
  icon?: any;
969
- class?: any;
970
- loading: boolean;
982
+ readonly class: _angular_core.InputSignal<any>;
983
+ readonly loading: _angular_core.InputSignal<boolean>;
971
984
  /** Native button type. Defaults to 'button' so it never implicitly submits a form. */
972
- type: 'button' | 'submit' | 'reset';
985
+ readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
973
986
  /** Accessible name for icon-only usage (icon set, no label). */
974
- ariaLabel: string;
975
- clicked: EventEmitter<void>;
987
+ readonly ariaLabel: _angular_core.InputSignal<string>;
988
+ readonly clicked: _angular_core.OutputEmitterRef<void>;
976
989
  onClick(): void;
977
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
978
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "fx-ui-button", never, { "label": { "alias": "label"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "buttonVariant": { "alias": "buttonVariant"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "class": { "alias": "class"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "type": { "alias": "type"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, { "clicked": "clicked"; }, never, never, false, never>;
990
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonComponent, never>;
991
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "fx-ui-button", never, { "label": { "alias": "label"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "buttonVariant": { "alias": "buttonVariant"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
979
992
  }
980
993
 
981
994
  declare class RadioButtonToggleComponent extends FxComponent<any> implements AfterViewInit {
982
995
  private ref;
983
996
  readonly groupId: string;
984
997
  label?: string;
985
- required?: boolean;
986
- options: {
998
+ readonly required: _angular_core.InputSignal<boolean | undefined>;
999
+ readonly options: _angular_core.InputSignal<{
987
1000
  label: string;
988
1001
  value: any;
989
1002
  icon?: any;
990
- }[];
1003
+ }[]>;
991
1004
  errorMessages: ErrorMessages;
992
- class?: any;
1005
+ readonly class: _angular_core.InputSignal<any>;
993
1006
  constructor(ref: ChangeDetectorRef);
994
1007
  ngAfterViewInit(): void;
995
1008
  onSelectValue(value: any): void;
996
- static ɵfac: i0.ɵɵFactoryDeclaration<RadioButtonToggleComponent, never>;
997
- static ɵcmp: i0.ɵɵComponentDeclaration<RadioButtonToggleComponent, "fx-ui-radio-toggle, [fx-ui-radio-toggle]", never, { "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "options": { "alias": "options"; "required": false; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, never, false, never>;
1009
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioButtonToggleComponent, never>;
1010
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioButtonToggleComponent, "fx-ui-radio-toggle, [fx-ui-radio-toggle]", never, { "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
998
1011
  }
999
1012
 
1013
+ /**
1014
+ * Date/time field backed by first-party Material pickers (mat-datepicker +
1015
+ * mat-timepicker, the latter first-party since Material 19) — replaces the
1016
+ * former @danielmoncada/angular-datetime-picker + moment adapter stack.
1017
+ *
1018
+ * The public contract is unchanged: the CVA value is a plain string
1019
+ * ('YYYY-MM-DD HH:mm' for type 'both', 'YYYY-MM-DD' for 'calendar',
1020
+ * 'HH:mm' for 'timer'), so existing forms keep working as-is.
1021
+ */
1000
1022
  declare class DatetimePicker extends FxComponent<any> implements AfterViewInit {
1001
1023
  private ref;
1002
1024
  label?: string;
1003
- placeholder: string;
1004
- required: boolean;
1005
- type: any;
1006
- minDate?: any;
1007
- maxDate?: any;
1025
+ readonly placeholder: _angular_core.InputSignal<string>;
1026
+ readonly required: _angular_core.InputSignal<boolean>;
1027
+ /** 'both' | 'calendar' | 'timer' — same values the Owl picker accepted. */
1028
+ readonly type: _angular_core.InputSignal<"both" | "calendar" | "timer">;
1029
+ readonly minDate: _angular_core.InputSignal<any>;
1030
+ readonly maxDate: _angular_core.InputSignal<any>;
1008
1031
  errorMessages: ErrorMessages;
1009
- validateFn: (date: string) => ValidationErrors | null;
1032
+ readonly validateFn: _angular_core.InputSignal<((date: string) => ValidationErrors | null) | undefined>;
1010
1033
  readonly fieldId: string;
1011
- startAt: any;
1034
+ /** Internal Date the Material pickers operate on; `value` stays a string. */
1035
+ dateValue: Date | null;
1012
1036
  constructor(ref: ChangeDetectorRef);
1013
1037
  ngAfterViewInit(): void;
1038
+ get showDate(): boolean;
1039
+ get showTime(): boolean;
1040
+ get min(): Date | null;
1041
+ get max(): Date | null;
1014
1042
  onBlur(): void;
1015
1043
  writeValue(value: any): void;
1016
- onValueChange(date: any): void;
1017
- static ɵfac: i0.ɵɵFactoryDeclaration<DatetimePicker, never>;
1018
- static ɵcmp: i0.ɵɵComponentDeclaration<DatetimePicker, "fx-ui-datetime-picker", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "type": { "alias": "type"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "validateFn": { "alias": "validateFn"; "required": false; }; }, {}, never, never, false, never>;
1044
+ onDateChange(date: Date | null): void;
1045
+ onTimeChange(time: Date | null): void;
1046
+ private commit;
1047
+ private toDate;
1048
+ private format;
1049
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatetimePicker, never>;
1050
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatetimePicker, "fx-ui-datetime-picker", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "validateFn": { "alias": "validateFn"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1019
1051
  }
1020
1052
 
1021
1053
  declare class LoadingPanel {
1022
- show: boolean;
1054
+ readonly show: _angular_core.InputSignal<boolean>;
1023
1055
  message?: string;
1024
- static ɵfac: i0.ɵɵFactoryDeclaration<LoadingPanel, never>;
1025
- static ɵcmp: i0.ɵɵComponentDeclaration<LoadingPanel, "fx-ui-loading-panel", never, { "show": { "alias": "show"; "required": false; }; "message": { "alias": "message"; "required": false; }; }, {}, never, never, false, never>;
1056
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LoadingPanel, never>;
1057
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LoadingPanel, "fx-ui-loading-panel", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; }; }, {}, never, never, true, never>;
1026
1058
  }
1027
1059
 
1028
1060
  declare class SearchBarComponent extends FxComponent<string> implements AfterViewInit {
1029
1061
  private ref;
1030
- placeholder: string;
1031
- search: EventEmitter<string>;
1032
- valueChange: EventEmitter<string>;
1062
+ readonly placeholder: _angular_core.InputSignal<string>;
1063
+ readonly search: _angular_core.OutputEmitterRef<string>;
1064
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
1033
1065
  constructor(ref: ChangeDetectorRef);
1034
1066
  ngAfterViewInit(): void;
1035
1067
  writeValue(value: string): void;
1036
1068
  onValueChange(value: string): void;
1037
1069
  onEnterKey(): void;
1038
1070
  clear(): void;
1039
- static ɵfac: i0.ɵɵFactoryDeclaration<SearchBarComponent, never>;
1040
- static ɵcmp: i0.ɵɵComponentDeclaration<SearchBarComponent, "fx-ui-search-bar", never, { "placeholder": { "alias": "placeholder"; "required": false; }; }, { "search": "search"; "valueChange": "valueChange"; }, never, never, false, never>;
1071
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchBarComponent, never>;
1072
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchBarComponent, "fx-ui-search-bar", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "search": "search"; "valueChange": "valueChange"; }, never, never, true, never>;
1041
1073
  }
1042
1074
 
1043
1075
  declare class TabComponent {
1044
- label: string;
1076
+ readonly label: _angular_core.InputSignal<string>;
1045
1077
  icon?: string;
1046
- content: TemplateRef<any>;
1047
- static ɵfac: i0.ɵɵFactoryDeclaration<TabComponent, never>;
1048
- static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "fx-ui-tab", never, { "label": { "alias": "label"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; }, {}, never, ["*"], false, never>;
1078
+ readonly content: _angular_core.Signal<TemplateRef<any>>;
1079
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabComponent, never>;
1080
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabComponent, "fx-ui-tab", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; }, {}, never, ["*"], true, never>;
1049
1081
  }
1050
1082
 
1051
1083
  declare class TabGroupComponent implements AfterContentInit {
1052
1084
  private renderer;
1053
- tabs: QueryList<TabComponent>;
1085
+ private cdr;
1086
+ readonly tabs: _angular_core.Signal<readonly TabComponent[]>;
1054
1087
  activeIndex: number;
1055
- tabListRef: ElementRef<HTMLElement>;
1056
- underlineRef: ElementRef<HTMLElement>;
1088
+ readonly tabListRef: _angular_core.Signal<ElementRef<HTMLElement>>;
1089
+ readonly underlineRef: _angular_core.Signal<ElementRef<HTMLElement>>;
1057
1090
  canScrollLeft: boolean;
1058
1091
  canScrollRight: boolean;
1059
1092
  private animateDelay;
@@ -1070,29 +1103,45 @@ declare class TabGroupComponent implements AfterContentInit {
1070
1103
  onScroll(): void;
1071
1104
  private updateScrollButtons;
1072
1105
  onResize(): void;
1073
- static ɵfac: i0.ɵɵFactoryDeclaration<TabGroupComponent, never>;
1074
- static ɵcmp: i0.ɵɵComponentDeclaration<TabGroupComponent, "fx-ui-tab-group", never, { "activeIndex": { "alias": "activeIndex"; "required": false; }; }, {}, ["tabs"], never, false, never>;
1106
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabGroupComponent, never>;
1107
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabGroupComponent, "fx-ui-tab-group", never, { "activeIndex": { "alias": "activeIndex"; "required": false; }; }, {}, ["tabs"], never, true, never>;
1075
1108
  }
1076
1109
 
1110
+ /**
1111
+ * Where the generated Heroicons sprite is served from. Defaults to
1112
+ * 'fx-icons.svg' at the app base — consumers copy it from the package via an
1113
+ * angular.json assets glob (same pattern as the lib fonts):
1114
+ * { "input": "node_modules/@foxeltech/angular-ui", "glob": "fx-icons.svg", "output": "." }
1115
+ */
1116
+ declare const FX_ICON_SPRITE_URL: InjectionToken<string>;
1117
+ /**
1118
+ * Heroicons rendered from the self-hosted sprite (see
1119
+ * scripts/generate-icon-sprite.mjs) — every 24px outline/solid icon is
1120
+ * available by name with no per-icon registration and no runtime icon
1121
+ * library. API kept compatible with the old @dimaslz/ng-heroicons wrapper.
1122
+ */
1077
1123
  declare class HeroIconComponent {
1078
- stroke: number;
1079
- icon: any;
1080
- solid: boolean;
1081
- outline: boolean;
1082
- size: number;
1083
- color: any;
1084
- class?: any;
1085
- static ɵfac: i0.ɵɵFactoryDeclaration<HeroIconComponent, never>;
1086
- static ɵcmp: i0.ɵɵComponentDeclaration<HeroIconComponent, "fx-ui-hero-icon", never, { "stroke": { "alias": "stroke"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "solid": { "alias": "solid"; "required": false; }; "outline": { "alias": "outline"; "required": false; }; "size": { "alias": "size"; "required": false; }; "color": { "alias": "color"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, never, false, never>;
1124
+ readonly stroke: _angular_core.InputSignal<number>;
1125
+ readonly icon: _angular_core.InputSignal<string | undefined>;
1126
+ readonly solid: _angular_core.InputSignal<boolean | undefined>;
1127
+ readonly outline: _angular_core.InputSignal<boolean | undefined>;
1128
+ readonly size: _angular_core.InputSignal<number | undefined>;
1129
+ readonly color: _angular_core.InputSignal<string | undefined>;
1130
+ readonly class: _angular_core.InputSignal<string | undefined>;
1131
+ readonly spriteUrl: string;
1132
+ constructor();
1133
+ get href(): string;
1134
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeroIconComponent, never>;
1135
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeroIconComponent, "fx-ui-hero-icon", never, { "stroke": { "alias": "stroke"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "solid": { "alias": "solid"; "required": false; "isSignal": true; }; "outline": { "alias": "outline"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1087
1136
  }
1088
1137
 
1089
1138
  declare class ToastComponent {
1090
- toastId: number;
1139
+ readonly toastId: _angular_core.InputSignal<number>;
1091
1140
  title?: string;
1092
- message: string;
1093
- type: 'success' | 'error' | 'info' | 'warning';
1094
- static ɵfac: i0.ɵɵFactoryDeclaration<ToastComponent, never>;
1095
- static ɵcmp: i0.ɵɵComponentDeclaration<ToastComponent, "fx-ui-toast", never, { "toastId": { "alias": "toastId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, {}, never, never, false, never>;
1141
+ readonly message: _angular_core.InputSignal<string>;
1142
+ readonly type: _angular_core.InputSignal<"error" | "success" | "info" | "warning" | undefined>;
1143
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastComponent, never>;
1144
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastComponent, "fx-ui-toast", never, { "toastId": { "alias": "toastId"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1096
1145
  }
1097
1146
 
1098
1147
  declare class ToastContainerComponent {
@@ -1101,79 +1150,32 @@ declare class ToastContainerComponent {
1101
1150
  constructor(ref: ChangeDetectorRef);
1102
1151
  addToast(toast: any): void;
1103
1152
  removeToast(id: number): void;
1104
- static ɵfac: i0.ɵɵFactoryDeclaration<ToastContainerComponent, never>;
1105
- static ɵcmp: i0.ɵɵComponentDeclaration<ToastContainerComponent, "fx-ui-toast-container", never, {}, {}, never, never, false, never>;
1153
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastContainerComponent, never>;
1154
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastContainerComponent, "fx-ui-toast-container", never, {}, {}, never, never, true, never>;
1106
1155
  }
1107
1156
 
1108
1157
  type TagType = 'success' | 'warning' | 'critical' | 'information' | 'discovery' | 'default' | 'danger';
1109
1158
  declare class TagComponent {
1110
- label: string;
1111
- type: TagType;
1112
- rounded: boolean;
1113
- icon?: any;
1114
- solid: boolean;
1159
+ readonly label: _angular_core.InputSignal<string | undefined>;
1160
+ readonly type: _angular_core.InputSignal<TagType>;
1161
+ readonly rounded: _angular_core.InputSignal<boolean>;
1162
+ icon?: string;
1163
+ readonly solid: _angular_core.InputSignal<boolean>;
1115
1164
  clicked: EventEmitter<void>;
1116
1165
  onClick(): void;
1117
- static ɵfac: i0.ɵɵFactoryDeclaration<TagComponent, never>;
1118
- static ɵcmp: i0.ɵɵComponentDeclaration<TagComponent, "fx-ui-tag", never, { "label": { "alias": "label"; "required": false; }; "type": { "alias": "type"; "required": false; }; "rounded": { "alias": "rounded"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "solid": { "alias": "solid"; "required": false; }; }, { "clicked": "clicked"; }, never, never, false, never>;
1119
- }
1120
-
1121
- type IChartType = 'bar' | 'pie' | 'sunburst' | 'auto';
1122
- declare class ChartComponent implements OnChanges, AfterViewInit, OnDestroy {
1123
- private ref;
1124
- private cdr;
1125
- type: IChartType;
1126
- data: any;
1127
- options?: EChartsOption;
1128
- palette?: string[];
1129
- height: string;
1130
- loading: boolean;
1131
- pieLegendAlign: string | number;
1132
- pieLegendPosition: string | number;
1133
- showPieLabel: boolean;
1134
- mobileWidth: number;
1135
- labelFontFamily: string;
1136
- emptyText: string;
1137
- chartClick: EventEmitter<any>;
1138
- chartInit: EventEmitter<ECharts>;
1139
- chartOptions: EChartsOption;
1140
- isEmpty: boolean;
1141
- labelFontSize: number;
1142
- private chartInstance?;
1143
- private resizeObserver?;
1144
- private intersectionObserver?;
1145
- private canInit;
1146
- private isMobile;
1147
- private containerWidth;
1148
- constructor(ref: ElementRef<HTMLElement>, cdr: ChangeDetectorRef);
1149
- ngAfterViewInit(): void;
1150
- ngOnChanges(): void;
1151
- ngOnDestroy(): void;
1152
- onThemeChange(): void;
1153
- onChartClick(event: any): void;
1154
- onChartInit(chart: any): void;
1155
- private updateResponsiveState;
1156
- private forceMediaRecalc;
1157
- private rebuildChart;
1158
- private checkEmpty;
1159
- private registry;
1160
- private calcPieLayout;
1161
- private detectType;
1162
- private buildOptions;
1163
- private resolvePalette;
1164
- static ɵfac: i0.ɵɵFactoryDeclaration<ChartComponent, never>;
1165
- static ɵcmp: i0.ɵɵComponentDeclaration<ChartComponent, "fx-ui-chart", never, { "type": { "alias": "type"; "required": false; }; "data": { "alias": "data"; "required": false; }; "options": { "alias": "options"; "required": false; }; "palette": { "alias": "palette"; "required": false; }; "height": { "alias": "height"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "pieLegendAlign": { "alias": "pieLegendAlign"; "required": false; }; "pieLegendPosition": { "alias": "pieLegendPosition"; "required": false; }; "showPieLabel": { "alias": "showPieLabel"; "required": false; }; "mobileWidth": { "alias": "mobileWidth"; "required": false; }; "labelFontFamily": { "alias": "labelFontFamily"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; }, { "chartClick": "chartClick"; "chartInit": "chartInit"; }, never, never, false, never>;
1166
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagComponent, never>;
1167
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagComponent, "fx-ui-tag", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; "solid": { "alias": "solid"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
1166
1168
  }
1167
1169
 
1168
1170
  declare class SliderComponent extends FxComponent<any> implements AfterViewInit {
1169
1171
  private ref;
1170
- trackRef: ElementRef<HTMLElement>;
1171
- thumbRef: ElementRef<HTMLElement>;
1172
- min: number;
1173
- max: number;
1174
- step: number;
1175
- vertical: boolean;
1176
- valueChange: EventEmitter<number>;
1172
+ readonly trackRef: _angular_core.Signal<ElementRef<HTMLElement>>;
1173
+ readonly thumbRef: _angular_core.Signal<ElementRef<HTMLElement>>;
1174
+ readonly min: _angular_core.InputSignal<number>;
1175
+ readonly max: _angular_core.InputSignal<number>;
1176
+ readonly step: _angular_core.InputSignal<number>;
1177
+ readonly vertical: _angular_core.InputSignal<boolean>;
1178
+ readonly valueChange: _angular_core.OutputEmitterRef<number>;
1177
1179
  dragging: boolean;
1178
1180
  constructor(ref: ChangeDetectorRef);
1179
1181
  ngAfterViewInit(): void;
@@ -1200,68 +1202,39 @@ declare class SliderComponent extends FxComponent<any> implements AfterViewInit
1200
1202
  transform: string;
1201
1203
  bottom?: undefined;
1202
1204
  };
1203
- static ɵfac: i0.ɵɵFactoryDeclaration<SliderComponent, never>;
1204
- static ɵcmp: i0.ɵɵComponentDeclaration<SliderComponent, "fx-ui-slider", never, { "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "vertical": { "alias": "vertical"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
1205
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SliderComponent, never>;
1206
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SliderComponent, "fx-ui-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1205
1207
  }
1206
1208
 
1207
1209
  declare class SwitchComponent extends FxComponent<any> implements AfterViewInit {
1208
- private cdr;
1209
- onSwitch: EventEmitter<boolean>;
1210
+ readonly onSwitch: _angular_core.OutputEmitterRef<boolean>;
1210
1211
  /** Accessible name — the switch renders no visible text of its own. */
1211
- ariaLabel: string;
1212
+ readonly ariaLabel: _angular_core.InputSignal<string>;
1212
1213
  ngAfterViewInit(): void;
1213
- constructor(cdr: ChangeDetectorRef);
1214
1214
  writeValue(value: any): void;
1215
1215
  toggle(): void;
1216
- static ɵfac: i0.ɵɵFactoryDeclaration<SwitchComponent, never>;
1217
- static ɵcmp: i0.ɵɵComponentDeclaration<SwitchComponent, "fx-ui-switch", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, { "onSwitch": "onSwitch"; }, never, never, false, never>;
1218
- }
1219
-
1220
- declare class RichTextAreaComponent extends FxComponent<any> implements AfterViewInit {
1221
- private cdr;
1222
- private styleLoader;
1223
- private platformId;
1224
- editorContainer: ElementRef<HTMLDivElement>;
1225
- placeholder: string;
1226
- toolbarOptions: any;
1227
- contentChange: EventEmitter<string>;
1228
- private quillInstance;
1229
- constructor(cdr: ChangeDetectorRef, styleLoader: QuillStyleLoaderService, platformId: object);
1230
- ngAfterViewInit(): Promise<void>;
1231
- writeValue(value: any): void;
1232
- setDisabledState(isDisabled: boolean): void;
1233
- static ɵfac: i0.ɵɵFactoryDeclaration<RichTextAreaComponent, never>;
1234
- static ɵcmp: i0.ɵɵComponentDeclaration<RichTextAreaComponent, "fx-ui-rich-text-area", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "toolbarOptions": { "alias": "toolbarOptions"; "required": false; }; }, { "contentChange": "contentChange"; }, never, never, false, never>;
1216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SwitchComponent, never>;
1217
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SwitchComponent, "fx-ui-switch", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "onSwitch": "onSwitch"; }, never, never, true, never>;
1235
1218
  }
1236
1219
 
1237
1220
  declare class SkeletonTableLoadingComponent {
1238
- columns: number;
1239
- rows: number;
1240
- static ɵfac: i0.ɵɵFactoryDeclaration<SkeletonTableLoadingComponent, never>;
1241
- static ɵcmp: i0.ɵɵComponentDeclaration<SkeletonTableLoadingComponent, "fx-ui-skeleton-table-loading", never, { "columns": { "alias": "columns"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, false, never>;
1242
- }
1243
-
1244
- declare class FlowConnection {
1245
- nodes: Node[];
1246
- edges: Edge[];
1247
- backgroundColor: any;
1248
- view: any;
1249
- handleConnection(connection: Connection): void;
1250
- static ɵfac: i0.ɵɵFactoryDeclaration<FlowConnection, never>;
1251
- static ɵcmp: i0.ɵɵComponentDeclaration<FlowConnection, "fx-ui-flow-connection", never, { "nodes": { "alias": "nodes"; "required": false; }; "edges": { "alias": "edges"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "view": { "alias": "view"; "required": false; }; }, {}, never, never, false, never>;
1221
+ readonly columns: _angular_core.InputSignal<number>;
1222
+ readonly rows: _angular_core.InputSignal<number>;
1223
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonTableLoadingComponent, never>;
1224
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonTableLoadingComponent, "fx-ui-skeleton-table-loading", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1252
1225
  }
1253
1226
 
1254
1227
  declare class CircleProgressBar {
1255
- percent: number;
1256
- showPercent: boolean;
1228
+ readonly percent: _angular_core.InputSignal<number>;
1229
+ readonly showPercent: _angular_core.InputSignal<boolean>;
1257
1230
  readonly radius = 35;
1258
1231
  readonly stroke = 10;
1259
1232
  readonly normalizedRadius: number;
1260
1233
  readonly circumference: number;
1261
1234
  get dashOffset(): number;
1262
1235
  get ariaLabel(): string;
1263
- static ɵfac: i0.ɵɵFactoryDeclaration<CircleProgressBar, never>;
1264
- static ɵcmp: i0.ɵɵComponentDeclaration<CircleProgressBar, "fx-ui-circle-progress-bar", never, { "percent": { "alias": "percent"; "required": false; }; "showPercent": { "alias": "showPercent"; "required": false; }; }, {}, never, never, false, never>;
1236
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CircleProgressBar, never>;
1237
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CircleProgressBar, "fx-ui-circle-progress-bar", never, { "percent": { "alias": "percent"; "required": false; "isSignal": true; }; "showPercent": { "alias": "showPercent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1265
1238
  }
1266
1239
 
1267
1240
  interface TreeNode {
@@ -1273,9 +1246,9 @@ interface TreeNode {
1273
1246
  declare class TreeDiagram implements AfterViewInit, OnDestroy {
1274
1247
  private zone;
1275
1248
  private cdr;
1276
- data: any;
1277
- container: ElementRef;
1278
- root: ElementRef;
1249
+ readonly data: _angular_core.InputSignal<any>;
1250
+ readonly container: _angular_core.Signal<ElementRef<any>>;
1251
+ readonly root: _angular_core.Signal<ElementRef<any>>;
1279
1252
  children: QueryList<ElementRef>;
1280
1253
  lines: any[];
1281
1254
  svgWidth: number;
@@ -1287,15 +1260,15 @@ declare class TreeDiagram implements AfterViewInit, OnDestroy {
1287
1260
  ngOnDestroy(): void;
1288
1261
  private scheduleDraw;
1289
1262
  private drawLines;
1290
- static ɵfac: i0.ɵɵFactoryDeclaration<TreeDiagram, never>;
1291
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeDiagram, "fx-ui-tree-diagram", never, { "data": { "alias": "data"; "required": false; }; }, {}, never, never, false, never>;
1263
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeDiagram, never>;
1264
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeDiagram, "fx-ui-tree-diagram", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1292
1265
  }
1293
1266
 
1294
1267
  declare class TableCell {
1295
- loading: boolean;
1296
- skeletonClass: string;
1297
- static ɵfac: i0.ɵɵFactoryDeclaration<TableCell, never>;
1298
- static ɵcmp: i0.ɵɵComponentDeclaration<TableCell, "fx-ui-table-cell", never, { "loading": { "alias": "loading"; "required": true; }; "skeletonClass": { "alias": "skeletonClass"; "required": false; }; }, {}, never, ["*"], false, never>;
1268
+ readonly loading: _angular_core.InputSignal<boolean>;
1269
+ readonly skeletonClass: _angular_core.InputSignal<string>;
1270
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCell, never>;
1271
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCell, "fx-ui-table-cell", never, { "loading": { "alias": "loading"; "required": true; "isSignal": true; }; "skeletonClass": { "alias": "skeletonClass"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1299
1272
  }
1300
1273
 
1301
1274
  interface KanbanColumn<T = any> {
@@ -1312,9 +1285,9 @@ interface ColumnChangedEvent<T = any> {
1312
1285
  }
1313
1286
 
1314
1287
  declare class KanbanBoardComponent<T = any> {
1315
- columns: KanbanColumn<T>[];
1288
+ readonly columns: _angular_core.InputSignal<KanbanColumn<T>[]>;
1316
1289
  itemTemplate?: TemplateRef<any>;
1317
- columnChanged: EventEmitter<ColumnChangedEvent<T>>;
1290
+ readonly columnChanged: _angular_core.OutputEmitterRef<ColumnChangedEvent<T>>;
1318
1291
  /**
1319
1292
  * Get all column IDs for connecting drop lists
1320
1293
  */
@@ -1323,8 +1296,8 @@ declare class KanbanBoardComponent<T = any> {
1323
1296
  * Handle drop event when item is moved
1324
1297
  */
1325
1298
  onDrop(event: CdkDragDrop<T[]>, columnId: string): void;
1326
- static ɵfac: i0.ɵɵFactoryDeclaration<KanbanBoardComponent<any>, never>;
1327
- static ɵcmp: i0.ɵɵComponentDeclaration<KanbanBoardComponent<any>, "fx-ui-kanban-board", never, { "columns": { "alias": "columns"; "required": false; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; }; }, { "columnChanged": "columnChanged"; }, never, never, false, never>;
1299
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KanbanBoardComponent<any>, never>;
1300
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KanbanBoardComponent<any>, "fx-ui-kanban-board", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; }; }, { "columnChanged": "columnChanged"; }, never, never, true, never>;
1328
1301
  }
1329
1302
 
1330
1303
  interface DrawerItem {
@@ -1338,12 +1311,13 @@ interface DrawerItem {
1338
1311
 
1339
1312
  declare class DrawerComponent implements OnInit, OnDestroy {
1340
1313
  private router;
1341
- items: DrawerItem[];
1314
+ private cdr;
1315
+ readonly items: _angular_core.InputSignal<DrawerItem[]>;
1342
1316
  isExpanded: boolean;
1343
1317
  logo?: string;
1344
1318
  version?: string;
1345
- toggleExpanded: EventEmitter<boolean>;
1346
- itemClicked: EventEmitter<DrawerItem>;
1319
+ readonly toggleExpanded: _angular_core.OutputEmitterRef<boolean>;
1320
+ readonly itemClicked: _angular_core.OutputEmitterRef<DrawerItem>;
1347
1321
  expandedItems: Set<string>;
1348
1322
  currentRoute: string;
1349
1323
  private destroy$;
@@ -1359,28 +1333,28 @@ declare class DrawerComponent implements OnInit, OnDestroy {
1359
1333
  private autoExpandActiveParents;
1360
1334
  getAccordionState(itemId: string): string;
1361
1335
  getDrawerState(): string;
1362
- static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent, never>;
1363
- static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent, "fx-ui-drawer", never, { "items": { "alias": "items"; "required": false; }; "isExpanded": { "alias": "isExpanded"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "version": { "alias": "version"; "required": false; }; }, { "toggleExpanded": "toggleExpanded"; "itemClicked": "itemClicked"; }, never, never, false, never>;
1336
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawerComponent, never>;
1337
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawerComponent, "fx-ui-drawer", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "version": { "alias": "version"; "required": false; }; }, { "toggleExpanded": "toggleExpanded"; "itemClicked": "itemClicked"; }, never, never, true, never>;
1364
1338
  }
1365
1339
 
1366
1340
  /** Row-card skeleton placeholder for master-detail list panes. */
1367
1341
  declare class SkeletonListComponent {
1368
- rows: number;
1342
+ readonly rows: _angular_core.InputSignal<number>;
1369
1343
  range(n: number): number[];
1370
- static ɵfac: i0.ɵɵFactoryDeclaration<SkeletonListComponent, never>;
1371
- static ɵcmp: i0.ɵɵComponentDeclaration<SkeletonListComponent, "fx-ui-skeleton-list", never, { "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, false, never>;
1344
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonListComponent, never>;
1345
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonListComponent, "fx-ui-skeleton-list", never, { "rows": { "alias": "rows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1372
1346
  }
1373
1347
 
1374
1348
  /** Card-shaped skeleton placeholder for detail panels. */
1375
1349
  declare class SkeletonDetailComponent {
1376
1350
  /** Number of content cards rendered below the header card. */
1377
- cards: number;
1351
+ readonly cards: _angular_core.InputSignal<number>;
1378
1352
  /** Rows per content card. */
1379
- rows: number;
1353
+ readonly rows: _angular_core.InputSignal<number>;
1380
1354
  range(n: number): number[];
1381
1355
  rowWidth(i: number): number;
1382
- static ɵfac: i0.ɵɵFactoryDeclaration<SkeletonDetailComponent, never>;
1383
- static ɵcmp: i0.ɵɵComponentDeclaration<SkeletonDetailComponent, "fx-ui-skeleton-detail", never, { "cards": { "alias": "cards"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, false, never>;
1356
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonDetailComponent, never>;
1357
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonDetailComponent, "fx-ui-skeleton-detail", never, { "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1384
1358
  }
1385
1359
 
1386
1360
  interface FxStatCard {
@@ -1388,31 +1362,31 @@ interface FxStatCard {
1388
1362
  label: string;
1389
1363
  value: string | number;
1390
1364
  /** hero-icon name shown in the tinted box. */
1391
- icon?: any;
1365
+ icon?: string;
1392
1366
  /** Colours the number and the icon box; null/undefined renders neutral. */
1393
1367
  tone?: Tone | null;
1394
1368
  }
1395
1369
  /** KPI tile row: big number + tinted icon box + caption, in a responsive grid. */
1396
1370
  declare class StatCardsComponent {
1397
- cards: FxStatCard[];
1371
+ readonly cards: _angular_core.InputSignal<FxStatCard[]>;
1398
1372
  /** Grid columns; defaults to one column per card. */
1399
1373
  cols?: number;
1400
1374
  get gridColumns(): string;
1401
1375
  numClass(card: FxStatCard): string;
1402
1376
  boxClass(card: FxStatCard): string;
1403
- static ɵfac: i0.ɵɵFactoryDeclaration<StatCardsComponent, never>;
1404
- static ɵcmp: i0.ɵɵComponentDeclaration<StatCardsComponent, "fx-ui-stat-cards", never, { "cards": { "alias": "cards"; "required": false; }; "cols": { "alias": "cols"; "required": false; }; }, {}, never, never, false, never>;
1377
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatCardsComponent, never>;
1378
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatCardsComponent, "fx-ui-stat-cards", never, { "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; }; }, {}, never, never, true, never>;
1405
1379
  }
1406
1380
 
1407
1381
  /** Centered "no data" block. The message is caller-translated (no i18n in lib). */
1408
1382
  declare class EmptyStateComponent {
1409
- message: string;
1383
+ readonly message: _angular_core.InputSignal<string>;
1410
1384
  /** Optional icon (hero-icon name). */
1411
1385
  icon?: any;
1412
1386
  /** Min height of the block, CSS length. */
1413
- height: string;
1414
- static ɵfac: i0.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
1415
- static ɵcmp: i0.ɵɵComponentDeclaration<EmptyStateComponent, "fx-ui-empty-state", never, { "message": { "alias": "message"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "height": { "alias": "height"; "required": false; }; }, {}, never, never, false, never>;
1387
+ readonly height: _angular_core.InputSignal<string>;
1388
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
1389
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "fx-ui-empty-state", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1416
1390
  }
1417
1391
 
1418
1392
  interface FxFilterChipOption {
@@ -1428,40 +1402,40 @@ interface FxFilterChipOption {
1428
1402
  */
1429
1403
  declare class FilterChipsComponent {
1430
1404
  options: FxFilterChipOption[];
1431
- value: string;
1432
- valueChange: EventEmitter<string>;
1405
+ value: string | undefined;
1406
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
1433
1407
  /** Per-value tone overrides (e.g. { Safe: 'information', Protected: 'discovery' as any }). */
1434
1408
  toneOverrides: Record<string, Tone | null>;
1435
1409
  select(option: FxFilterChipOption): void;
1436
1410
  chipClass(option: FxFilterChipOption): string;
1437
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterChipsComponent, never>;
1438
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterChipsComponent, "fx-ui-filter-chips", never, { "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "toneOverrides": { "alias": "toneOverrides"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
1411
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterChipsComponent, never>;
1412
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterChipsComponent, "fx-ui-filter-chips", never, { "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "toneOverrides": { "alias": "toneOverrides"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1439
1413
  }
1440
1414
 
1441
1415
  /** Thin tone-coloured progress/score bar with optional label and caption. */
1442
1416
  declare class MeterComponent {
1443
1417
  value: number;
1444
1418
  max: number;
1445
- tone: Tone | null;
1419
+ readonly tone: _angular_core.InputSignal<Tone | null>;
1446
1420
  /** Caller-translated texts; omitted → bar only. */
1447
1421
  label?: string;
1448
1422
  caption?: string;
1449
1423
  get percent(): number;
1450
1424
  get fillClass(): string;
1451
- static ɵfac: i0.ɵɵFactoryDeclaration<MeterComponent, never>;
1452
- static ɵcmp: i0.ɵɵComponentDeclaration<MeterComponent, "fx-ui-meter", never, { "value": { "alias": "value"; "required": false; }; "max": { "alias": "max"; "required": false; }; "tone": { "alias": "tone"; "required": false; }; "label": { "alias": "label"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; }, {}, never, never, false, never>;
1425
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MeterComponent, never>;
1426
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MeterComponent, "fx-ui-meter", never, { "value": { "alias": "value"; "required": false; }; "max": { "alias": "max"; "required": false; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; }, {}, never, never, true, never>;
1453
1427
  }
1454
1428
 
1455
1429
  /** Detail-panel section: card with an icon + heading header and projected body. */
1456
1430
  declare class SectionCardComponent {
1457
1431
  /** Caller-translated heading. */
1458
- title: string;
1432
+ readonly title: _angular_core.InputSignal<string>;
1459
1433
  /** hero-icon name; omitted → text-only header. */
1460
1434
  icon?: any;
1461
- iconTone: Tone | null;
1435
+ readonly iconTone: _angular_core.InputSignal<Tone | null>;
1462
1436
  get iconClass(): string;
1463
- static ɵfac: i0.ɵɵFactoryDeclaration<SectionCardComponent, never>;
1464
- static ɵcmp: i0.ɵɵComponentDeclaration<SectionCardComponent, "fx-ui-section-card", never, { "title": { "alias": "title"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconTone": { "alias": "iconTone"; "required": false; }; }, {}, never, ["*"], false, never>;
1437
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SectionCardComponent, never>;
1438
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SectionCardComponent, "fx-ui-section-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; "iconTone": { "alias": "iconTone"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1465
1439
  }
1466
1440
 
1467
1441
  /**
@@ -1471,18 +1445,18 @@ declare class SectionCardComponent {
1471
1445
  */
1472
1446
  declare class InfoFieldComponent {
1473
1447
  /** Caller-translated label. */
1474
- label: string;
1448
+ readonly label: _angular_core.InputSignal<string>;
1475
1449
  value: string | number | null | undefined;
1476
1450
  /** Colours the value; null/undefined renders the primary text colour. */
1477
1451
  tone: Tone | null;
1478
1452
  /** Monospace value (hashes, paths). */
1479
1453
  mono: boolean;
1480
1454
  /** Placeholder when value is empty. */
1481
- placeholder: string;
1455
+ readonly placeholder: _angular_core.InputSignal<string>;
1482
1456
  get displayValue(): string;
1483
1457
  get valueClass(): string;
1484
- static ɵfac: i0.ɵɵFactoryDeclaration<InfoFieldComponent, never>;
1485
- static ɵcmp: i0.ɵɵComponentDeclaration<InfoFieldComponent, "fx-ui-info-field", never, { "label": { "alias": "label"; "required": false; }; "value": { "alias": "value"; "required": false; }; "tone": { "alias": "tone"; "required": false; }; "mono": { "alias": "mono"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; }, {}, never, never, false, never>;
1458
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InfoFieldComponent, never>;
1459
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InfoFieldComponent, "fx-ui-info-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; }; "tone": { "alias": "tone"; "required": false; }; "mono": { "alias": "mono"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1486
1460
  }
1487
1461
 
1488
1462
  interface FxSeverityBadge {
@@ -1507,12 +1481,12 @@ declare class SeverityBadgesComponent {
1507
1481
  showZero: boolean;
1508
1482
  /** Append the severity letter to counts ("3C", "5H", "2M") per the report design. */
1509
1483
  suffixed: boolean;
1510
- badgeClick: EventEmitter<string>;
1484
+ readonly badgeClick: _angular_core.OutputEmitterRef<string>;
1511
1485
  private static readonly TONES;
1512
1486
  get badges(): FxSeverityBadge[];
1513
1487
  badgeClass(badge: FxSeverityBadge): string;
1514
- static ɵfac: i0.ɵɵFactoryDeclaration<SeverityBadgesComponent, never>;
1515
- static ɵcmp: i0.ɵɵComponentDeclaration<SeverityBadgesComponent, "fx-ui-severity-badges", never, { "stats": { "alias": "stats"; "required": false; }; "showZero": { "alias": "showZero"; "required": false; }; "suffixed": { "alias": "suffixed"; "required": false; }; }, { "badgeClick": "badgeClick"; }, never, never, false, never>;
1488
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SeverityBadgesComponent, never>;
1489
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SeverityBadgesComponent, "fx-ui-severity-badges", never, { "stats": { "alias": "stats"; "required": false; }; "showZero": { "alias": "showZero"; "required": false; }; "suffixed": { "alias": "suffixed"; "required": false; }; }, { "badgeClick": "badgeClick"; }, never, never, true, never>;
1516
1490
  }
1517
1491
 
1518
1492
  /**
@@ -1533,23 +1507,54 @@ declare class SeverityBadgesComponent {
1533
1507
  declare class MasterDetailComponent implements AfterViewInit {
1534
1508
  table: BaseMasterDetailComponent<any>;
1535
1509
  /** Fixed list-pane width on lg+ viewports (stacked full-width below). */
1536
- listWidth: string;
1537
- maxListHeight: string;
1538
- pageSizeOptions: number[];
1510
+ readonly listWidth: _angular_core.InputSignal<string>;
1511
+ readonly maxListHeight: _angular_core.InputSignal<string>;
1512
+ readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
1539
1513
  /** Labels come in via inputs — the lib carries no i18n. */
1540
- emptyMessage: string;
1541
- listLabel: string;
1542
- skeletonCards: number;
1543
- rowTemplate: TemplateRef<any>;
1544
- detailTemplate: TemplateRef<any>;
1545
- paginator: MatPaginator;
1514
+ readonly emptyMessage: _angular_core.InputSignal<string>;
1515
+ readonly listLabel: _angular_core.InputSignal<string>;
1516
+ readonly skeletonCards: _angular_core.InputSignal<number>;
1517
+ readonly rowTemplate: _angular_core.Signal<TemplateRef<any>>;
1518
+ readonly detailTemplate: _angular_core.Signal<TemplateRef<any>>;
1519
+ readonly paginator: _angular_core.Signal<MatPaginator>;
1546
1520
  readonly uid: string;
1547
1521
  ngAfterViewInit(): void;
1548
1522
  isSelected(row: any): boolean;
1549
1523
  optionId(index: number): string;
1550
1524
  onKeydown(event: KeyboardEvent, index: number): void;
1551
- static ɵfac: i0.ɵɵFactoryDeclaration<MasterDetailComponent, never>;
1552
- static ɵcmp: i0.ɵɵComponentDeclaration<MasterDetailComponent, "fx-ui-master-detail", never, { "table": { "alias": "table"; "required": false; }; "listWidth": { "alias": "listWidth"; "required": false; }; "maxListHeight": { "alias": "maxListHeight"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "listLabel": { "alias": "listLabel"; "required": false; }; "skeletonCards": { "alias": "skeletonCards"; "required": false; }; }, {}, ["rowTemplate", "detailTemplate"], ["[mdHeader]", "[mdFilters]"], false, never>;
1525
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MasterDetailComponent, never>;
1526
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MasterDetailComponent, "fx-ui-master-detail", never, { "table": { "alias": "table"; "required": false; }; "listWidth": { "alias": "listWidth"; "required": false; "isSignal": true; }; "maxListHeight": { "alias": "maxListHeight"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "listLabel": { "alias": "listLabel"; "required": false; "isSignal": true; }; "skeletonCards": { "alias": "skeletonCards"; "required": false; "isSignal": true; }; }, {}, ["rowTemplate", "detailTemplate"], ["[mdHeader]", "[mdFilters]"], true, never>;
1527
+ }
1528
+
1529
+ interface FxMenuItem {
1530
+ /** Caller-translated label. */
1531
+ label: string;
1532
+ /** Optional hero-icon name shown before the label. */
1533
+ icon?: string;
1534
+ /** Danger/warning items get the matching text tone. */
1535
+ tone?: Tone | null;
1536
+ disabled?: boolean;
1537
+ /** Free-form identifier handed back on (select). */
1538
+ value?: any;
1539
+ }
1540
+ /**
1541
+ * Row-action dropdown wrapper over mat-menu (behavior-layer rule, Playbook
1542
+ * §5.1 — apps never import @angular/material directly). Project the trigger
1543
+ * content; items render from [items] and come back through (select).
1544
+ *
1545
+ * <fx-ui-menu [items]="actions" (select)="onAction($event)">
1546
+ * <fx-ui-hero-icon icon="ellipsis-vertical" [size]="20" />
1547
+ * </fx-ui-menu>
1548
+ */
1549
+ declare class MenuComponent {
1550
+ readonly items: _angular_core.InputSignal<FxMenuItem[]>;
1551
+ readonly disabled: _angular_core.InputSignal<boolean>;
1552
+ /** Accessible name for the trigger button. */
1553
+ readonly ariaLabel: _angular_core.InputSignal<string>;
1554
+ readonly select: _angular_core.OutputEmitterRef<FxMenuItem>;
1555
+ toneClass(item: FxMenuItem): string;
1556
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuComponent, never>;
1557
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuComponent, "fx-ui-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, ["*"], true, never>;
1553
1558
  }
1554
1559
 
1555
1560
  declare class ConfirmationDialogComponent {
@@ -1563,24 +1568,26 @@ declare class ConfirmationDialogComponent {
1563
1568
  constructor(ref: MatDialogRef<ConfirmationDialogComponent>, bindings: any);
1564
1569
  accept(): Promise<void>;
1565
1570
  cancel(): void;
1566
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationDialogComponent, never>;
1567
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmationDialogComponent, "fx-ui-confirmation-dialog", never, {}, {}, never, never, false, never>;
1568
- }
1569
-
1570
- declare const MY_MOMENT_FORMATS: {
1571
- parseInput: string;
1572
- fullPickerInput: string;
1573
- datePickerInput: string;
1574
- timePickerInput: string;
1575
- monthYearLabel: string;
1576
- dateA11yLabel: string;
1577
- monthYearA11yLabel: string;
1578
- };
1571
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationDialogComponent, never>;
1572
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationDialogComponent, "fx-ui-confirmation-dialog", never, {}, {}, never, never, true, never>;
1573
+ }
1574
+
1575
+ /**
1576
+ * Compatibility barrel over the (now standalone) core components.
1577
+ *
1578
+ * Deliberately NOT re-exported anymore: Angular Material —
1579
+ * Material is a behavior layer that stays an
1580
+ * implementation detail of this lib (Playbook §5.1); each standalone
1581
+ * component imports what it needs itself. Apps consume fx-ui-* only.
1582
+ *
1583
+ * Heavy components live in secondary entry points and are not part of this
1584
+ * barrel: @foxeltech/angular-ui/chart, /flow, /rich-text.
1585
+ */
1579
1586
  declare class UiModule {
1580
- static ɵfac: i0.ɵɵFactoryDeclaration<UiModule, never>;
1581
- static ɵmod: i0.ɵɵNgModuleDeclaration<UiModule, [typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof ChartComponent, typeof SliderComponent, typeof SwitchComponent, typeof RichTextAreaComponent, typeof SkeletonTableLoadingComponent, typeof FlowConnection, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof ConfirmationDialogComponent], [typeof i39.CommonModule, typeof i40.FormsModule, typeof i40.ReactiveFormsModule, typeof i41.RouterModule, typeof i42.OwlDateTimeModule, typeof i42.OwlNativeDateTimeModule, typeof i43.OwlMomentDateTimeModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective, typeof i46.NgHeroiconsModule, typeof i47.VflowComponent, typeof i47.HandleComponent, typeof i47.ResizableComponent, typeof i47.SelectableDirective, typeof i47.MiniMapComponent, typeof i47.NodeToolbarComponent, typeof i47.CustomTemplateEdgeComponent, typeof i47.DragHandleDirective, typeof i47.ConnectionControllerDirective, typeof i47.NodeHtmlTemplateDirective, typeof i47.NodeSvgTemplateDirective, typeof i47.GroupNodeTemplateDirective, typeof i47.EdgeLabelHtmlTemplateDirective, typeof i47.EdgeTemplateDirective, typeof i47.ConnectionTemplateDirective, typeof i47.HandleTemplateDirective, typeof i48.NgxEchartsModule, typeof i49.MatSelectModule, typeof i50.MatRadioModule, typeof i51.MatButtonModule, typeof i52.MatIconModule, typeof i53.MatPaginatorModule, typeof i54.MatTableModule, typeof i55.MatSnackBarModule, typeof i56.MatDialogModule, typeof i57.MatCheckboxModule, typeof i58.MatCardModule, typeof i59.MatDatepickerModule, typeof i60.MatTimepickerModule, typeof i61.MatBadgeModule, typeof i62.MatExpansionModule, typeof i63.MatFormFieldModule, typeof i64.MatMenuModule, typeof i65.MatTooltipModule, typeof i66.DragDropModule], [typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof ChartComponent, typeof SliderComponent, typeof SwitchComponent, typeof RichTextAreaComponent, typeof SkeletonTableLoadingComponent, typeof FlowConnection, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof ConfirmationDialogComponent, typeof i40.FormsModule, typeof i40.ReactiveFormsModule, typeof i41.RouterModule, typeof i42.OwlDateTimeModule, typeof i42.OwlNativeDateTimeModule, typeof HasPermissionDirective, typeof i46.NgHeroiconsModule, typeof i49.MatSelectModule, typeof i50.MatRadioModule, typeof i51.MatButtonModule, typeof i52.MatIconModule, typeof i53.MatPaginatorModule, typeof i54.MatTableModule, typeof i55.MatSnackBarModule, typeof i56.MatDialogModule, typeof i57.MatCheckboxModule, typeof i58.MatCardModule, typeof i59.MatDatepickerModule, typeof i60.MatTimepickerModule, typeof i61.MatBadgeModule, typeof i62.MatExpansionModule, typeof i63.MatFormFieldModule, typeof i64.MatMenuModule, typeof i65.MatTooltipModule, typeof i66.DragDropModule]>;
1582
- static ɵinj: i0.ɵɵInjectorDeclaration<UiModule>;
1587
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiModule, never>;
1588
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<UiModule, never, [typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective, typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof SliderComponent, typeof SwitchComponent, typeof SkeletonTableLoadingComponent, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof MenuComponent, typeof ConfirmationDialogComponent], [typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof SliderComponent, typeof SwitchComponent, typeof SkeletonTableLoadingComponent, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof MenuComponent, typeof ConfirmationDialogComponent, typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective]>;
1589
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<UiModule>;
1583
1590
  }
1584
1591
 
1585
- export { AuthInterceptor, AuthStateService, BaseComponent, BaseDialogComponent, BaseMasterDetailComponent, BaseResolver, BaseTableComponent, BreadcrumbService, ButtonComponent, ChartComponent, CheckboxComponent, CircleProgressBar, ConfirmationDialogComponent, DatetimePicker, DndUploadComponent, DrawerComponent, EmptyStateComponent, FilterChipsComponent, FlowConnection, FxLoadingService, FxStorageService, FxToastrService, FxUtils, FxValidators, HasPermissionDirective, HeroIconComponent, HttpLoaderFactory, HttpWrapper, InfoFieldComponent, InputComponent, KanbanBoardComponent, LoadingPanel, MY_MOMENT_FORMATS, MasterDetailComponent, MeterComponent, NotificationService, PermissionGuard, PermissionService, QuillStyleLoaderService, RadioButtonComponent, RadioButtonToggleComponent, RealtimeTableSync, RichTextAreaComponent, SearchBarComponent, SectionCardComponent, SelectComponent, SeverityBadgesComponent, SkeletonDetailComponent, SkeletonListComponent, SkeletonTableLoadingComponent, SliderComponent, StatCardsComponent, SwitchComponent, TabComponent, TabGroupComponent, TableCell, TagComponent, ThemeService, ToastComponent, ToastContainerComponent, TranslationModule, TranslationService, TreeDiagram, TrimOnBlurDirective, UiModule, countTone, createApi, fxListResolver, scoreTone, severityTone, toneBadge, toneBg, toneColor, toneText };
1586
- export type { Breadcrumb, ColumnChangedEvent, FxApiClass, FxFilterChipOption, FxListRequest, FxListResolverContext, FxSeverityBadge, FxStatCard, IChartType, IRadioButton, KanbanColumn, NotificationCallback, NotificationConnectOptions, RealtimeTableEvent, RealtimeTableSyncOptions, TableResult, TagType, ToastData, Tone, TreeNode, UploadResult };
1592
+ export { AuthInterceptor, AuthStateService, BaseComponent, BaseDialogComponent, BaseMasterDetailComponent, BaseResolver, BaseTableComponent, BreadcrumbService, ButtonComponent, CheckboxComponent, CircleProgressBar, ConfirmationDialogComponent, DatetimePicker, DndUploadComponent, DrawerComponent, EmptyStateComponent, FX_ICON_SPRITE_URL, FilterChipsComponent, FxComponent, FxDialogService, FxLoadingService, FxStorageService, FxToastrService, FxUtils, FxValidators, HasPermissionDirective, HeroIconComponent, HttpLoaderFactory, HttpWrapper, InfoFieldComponent, InputComponent, KanbanBoardComponent, LoadingPanel, MasterDetailComponent, MenuComponent, MeterComponent, NotificationService, PermissionGuard, PermissionService, RadioButtonComponent, RadioButtonToggleComponent, RealtimeTableSync, SearchBarComponent, SectionCardComponent, SelectComponent, SeverityBadgesComponent, SkeletonDetailComponent, SkeletonListComponent, SkeletonTableLoadingComponent, SliderComponent, StatCardsComponent, SwitchComponent, TabComponent, TabGroupComponent, TableCell, TagComponent, ThemeService, ToastComponent, ToastContainerComponent, TranslationModule, TranslationService, TreeDiagram, TrimOnBlurDirective, UiModule, countTone, createApi, fxListResolver, scoreTone, severityTone, toneBadge, toneBg, toneColor, toneText };
1593
+ export type { Breadcrumb, ColumnChangedEvent, ErrorMessages, FxApiClass, FxConfirmOptions, FxFilterChipOption, FxListRequest, FxListResolverContext, FxMenuItem, FxSeverityBadge, FxStatCard, FxTableFilters, IRadioButton, KanbanColumn, NotificationCallback, NotificationConnectOptions, RealtimeTableEvent, RealtimeTableSyncOptions, TableResult, TagType, ToastData, Tone, TreeNode, UploadResult };