@pecb-ui/components 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ElementRef, ChangeDetectorRef, TemplateRef, Type, OnInit, OnDestroy, AfterViewInit, QueryList, OnChanges } from '@angular/core';
2
+ import { ElementRef, ChangeDetectorRef, TemplateRef, Type, OnDestroy, AfterViewInit, QueryList, OnInit, OnChanges } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import * as _angular_platform_browser from '@angular/platform-browser';
5
5
  import { SafeHtml, DomSanitizer } from '@angular/platform-browser';
@@ -7,10 +7,11 @@ import { ControlValueAccessor } from '@angular/forms';
7
7
  import { Observable } from 'rxjs';
8
8
 
9
9
  type ButtonVariant = 'primary' | 'primary-outline' | 'primary-2' | 'primary-2-outline' | 'neutral' | 'neutral-outline' | 'secondary' | 'text' | 'text-muted' | 'text-brand' | 'destructive' | 'destructive-outline';
10
- type ButtonSize = 'sm' | 'md' | 'lg';
10
+ type ButtonSize = 'sm' | 'md' | 'lg' | 'xl';
11
11
  type ButtonIconStyle = 'none' | 'leading' | 'trailing' | 'icon-only';
12
12
  declare class ButtonComponent {
13
13
  private readonly sanitizer;
14
+ private readonly registry;
14
15
  id: _angular_core.InputSignal<string>;
15
16
  /**
16
17
  * The visual style variant of the button
@@ -25,7 +26,14 @@ declare class ButtonComponent {
25
26
  */
26
27
  iconStyle: _angular_core.InputSignal<ButtonIconStyle>;
27
28
  /**
28
- * Icon to display (used with iconStyle)
29
+ * Icon to display (used with `iconStyle`).
30
+ *
31
+ * Accepts either:
32
+ * - a **registered icon name** (e.g. `"refresh-01"`), resolved from the
33
+ * {@link IconRegistry} — the built-in PECB icon set is available by default; or
34
+ * - a **raw inline SVG string** (anything starting with `<`).
35
+ *
36
+ * An unrecognised value renders nothing (no icon).
29
37
  */
30
38
  icon: _angular_core.InputSignal<string | undefined>;
31
39
  /**
@@ -88,7 +96,12 @@ declare class ButtonComponent {
88
96
  get showTrailingIcon(): boolean;
89
97
  get isIconOnly(): boolean;
90
98
  get loadingText(): string;
91
- get isSvgIcon(): boolean;
99
+ /**
100
+ * Resolve the `icon` input to an SVG string. A value starting with `<` is
101
+ * treated as a raw inline SVG and passed through; otherwise it is looked up
102
+ * as a registered icon name. Returns `''` when unset or unresolved.
103
+ */
104
+ get resolvedIconSvg(): string;
92
105
  get safeIconHtml(): SafeHtml;
93
106
  onClick(event: MouseEvent): void;
94
107
  onKeyDown(event: KeyboardEvent): void;
@@ -203,8 +216,24 @@ declare class PaginationComponent {
203
216
  maxVisiblePages: _angular_core.InputSignal<number>;
204
217
  disabled: _angular_core.InputSignal<boolean>;
205
218
  ariaLabel: _angular_core.InputSignal<string>;
219
+ /** Aria-label for the "previous page" button. */
220
+ previousPageAriaLabel: _angular_core.InputSignal<string>;
221
+ /** Aria-label for the "next page" button. */
222
+ nextPageAriaLabel: _angular_core.InputSignal<string>;
223
+ /** Aria-label for the page-number button group (`role="group"`). */
224
+ pageNavigationAriaLabel: _angular_core.InputSignal<string>;
225
+ /** Aria-label prefix for each page-number button. Rendered as `<this> <n>`. */
226
+ pageAriaLabel: _angular_core.InputSignal<string>;
227
+ /** Aria-label for the page-size listbox menu. */
228
+ pageSizeListboxAriaLabel: _angular_core.InputSignal<string>;
229
+ /** Visible "items per page" label next to the size selector. */
230
+ itemsPerPageLabel: _angular_core.InputSignal<string>;
231
+ /** Template for the items-info text (full/compact variants). Placeholders:
232
+ * `{start}`, `{end}`, `{total}` — replaced with the current values. */
233
+ itemsInfoTemplate: _angular_core.InputSignal<string>;
234
+ /** Template for the items-info text in the `minimal`/`centered` variants. */
235
+ itemsInfoCompactTemplate: _angular_core.InputSignal<string>;
206
236
  pageChange: _angular_core.OutputEmitterRef<PageChangeEvent>;
207
- pageSizeChange: _angular_core.OutputEmitterRef<number>;
208
237
  readonly totalPages: _angular_core.Signal<number>;
209
238
  readonly visiblePages: _angular_core.Signal<(string | number)[]>;
210
239
  isDropdownOpen: _angular_core.WritableSignal<boolean>;
@@ -229,7 +258,7 @@ declare class PaginationComponent {
229
258
  private emitPageChange;
230
259
  private computeVisiblePages;
231
260
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PaginationComponent, never>;
232
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PaginationComponent, "pecb-pagination", never, { "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "showItemsInfo": { "alias": "showItemsInfo"; "required": false; "isSignal": true; }; "maxVisiblePages": { "alias": "maxVisiblePages"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "pageSize": "pageSizeChange"; "currentPage": "currentPageChange"; "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, never>;
261
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PaginationComponent, "pecb-pagination", never, { "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "showItemsInfo": { "alias": "showItemsInfo"; "required": false; "isSignal": true; }; "maxVisiblePages": { "alias": "maxVisiblePages"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "previousPageAriaLabel": { "alias": "previousPageAriaLabel"; "required": false; "isSignal": true; }; "nextPageAriaLabel": { "alias": "nextPageAriaLabel"; "required": false; "isSignal": true; }; "pageNavigationAriaLabel": { "alias": "pageNavigationAriaLabel"; "required": false; "isSignal": true; }; "pageAriaLabel": { "alias": "pageAriaLabel"; "required": false; "isSignal": true; }; "pageSizeListboxAriaLabel": { "alias": "pageSizeListboxAriaLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; "itemsInfoTemplate": { "alias": "itemsInfoTemplate"; "required": false; "isSignal": true; }; "itemsInfoCompactTemplate": { "alias": "itemsInfoCompactTemplate"; "required": false; "isSignal": true; }; }, { "pageSize": "pageSizeChange"; "currentPage": "currentPageChange"; "pageChange": "pageChange"; }, never, never, true, never>;
233
262
  }
234
263
 
235
264
  type TableSize = 'sm' | 'md' | 'lg';
@@ -399,14 +428,16 @@ declare class TableComponent {
399
428
  * ARIA label for the table
400
429
  */
401
430
  ariaLabel: _angular_core.InputSignal<string>;
431
+ /** Visible "Loading..." text shown while data is loading. */
432
+ loadingText: _angular_core.InputSignal<string>;
433
+ /** Aria-label for the header-row "select all" checkbox. */
434
+ selectAllAriaLabel: _angular_core.InputSignal<string>;
435
+ /** Aria-label prefix for each row's selection checkbox. Rendered as `<this> <n>`. */
436
+ selectRowAriaLabel: _angular_core.InputSignal<string>;
402
437
  /**
403
438
  * Emitted when a page change occurs
404
439
  */
405
440
  pageChange: _angular_core.OutputEmitterRef<PageChangeEvent>;
406
- /**
407
- * Emitted when page size changes
408
- */
409
- pageSizeChange: _angular_core.OutputEmitterRef<number>;
410
441
  /**
411
442
  * Emitted when a row is clicked
412
443
  */
@@ -466,31 +497,38 @@ declare class TableComponent {
466
497
  getLinkHref(value: string): string;
467
498
  private emitSelectionChange;
468
499
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent, never>;
469
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent, "pecb-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "paginationVariant": { "alias": "paginationVariant"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "selectedIndices": { "alias": "selectedIndices"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "sortColumn": { "alias": "sortColumn"; "required": false; "isSignal": true; }; "sortDirection": { "alias": "sortDirection"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "currentPage": "currentPageChange"; "pageSize": "pageSizeChange"; "selectedIndices": "selectedIndicesChange"; "sortColumn": "sortColumnChange"; "sortDirection": "sortDirectionChange"; "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; "rowClick": "rowClick"; "rowAction": "rowAction"; "sortChange": "sortChange"; "selectionChange": "selectionChange"; }, ["emptyTemplate", "loadingTemplate"], never, true, never>;
500
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent, "pecb-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "paginationVariant": { "alias": "paginationVariant"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "selectedIndices": { "alias": "selectedIndices"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "sortColumn": { "alias": "sortColumn"; "required": false; "isSignal": true; }; "sortDirection": { "alias": "sortDirection"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "selectAllAriaLabel": { "alias": "selectAllAriaLabel"; "required": false; "isSignal": true; }; "selectRowAriaLabel": { "alias": "selectRowAriaLabel"; "required": false; "isSignal": true; }; }, { "currentPage": "currentPageChange"; "pageSize": "pageSizeChange"; "selectedIndices": "selectedIndicesChange"; "sortColumn": "sortColumnChange"; "sortDirection": "sortDirectionChange"; "pageChange": "pageChange"; "rowClick": "rowClick"; "rowAction": "rowAction"; "sortChange": "sortChange"; "selectionChange": "selectionChange"; }, ["emptyTemplate", "loadingTemplate"], never, true, never>;
470
501
  }
471
502
 
472
503
  type TabStyle = 'rounded' | 'line';
473
504
  type TabSize = 'sm' | 'md';
474
505
  declare class TabComponent {
506
+ private readonly registry;
507
+ private readonly sanitizer;
475
508
  id: _angular_core.InputSignal<string>;
476
509
  tabStyle: _angular_core.InputSignal<TabStyle>;
477
510
  size: _angular_core.InputSignal<TabSize>;
478
511
  label: _angular_core.InputSignal<string>;
479
- icon: _angular_core.InputSignal<number | undefined>;
512
+ /** Icon name resolved through the IconRegistry, or a raw SVG string. */
513
+ icon: _angular_core.InputSignal<string | undefined>;
480
514
  active: _angular_core.InputSignal<boolean>;
481
515
  disabled: _angular_core.InputSignal<boolean>;
482
516
  closable: _angular_core.InputSignal<boolean>;
483
517
  ariaLabel: _angular_core.InputSignal<string | undefined>;
484
518
  ariaControls: _angular_core.InputSignal<string | undefined>;
485
519
  ariaSelected: _angular_core.InputSignal<boolean | undefined>;
520
+ /** Aria-label prefix for the close (×) button. Rendered as `<this> <label>`. */
521
+ closeAriaLabel: _angular_core.InputSignal<string>;
486
522
  clicked: _angular_core.OutputEmitterRef<string>;
487
523
  closed: _angular_core.OutputEmitterRef<string>;
524
+ /** Resolved icon SVG — looks the name up in the IconRegistry, or falls back to a raw SVG string. */
525
+ iconSvg: _angular_core.Signal<SafeHtml>;
488
526
  get tabClasses(): string[];
489
527
  onClick(event: MouseEvent): void;
490
528
  onClose(event: MouseEvent): void;
491
529
  onKeyDown(event: KeyboardEvent): void;
492
530
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabComponent, never>;
493
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabComponent, "pecb-tab", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "tabStyle": { "alias": "tabStyle"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; "ariaSelected": { "alias": "ariaSelected"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "closed": "closed"; }, never, never, true, never>;
531
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabComponent, "pecb-tab", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "tabStyle": { "alias": "tabStyle"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; "ariaSelected": { "alias": "ariaSelected"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "closed": "closed"; }, never, never, true, never>;
494
532
  }
495
533
 
496
534
  type DatepickerSize = 'sm' | 'md' | 'lg' | 'xl';
@@ -545,6 +583,16 @@ declare class DatepickerComponent implements ControlValueAccessor {
545
583
  * Maximum selectable date
546
584
  */
547
585
  maxDate: _angular_core.InputSignal<Date | undefined>;
586
+ /** Aria-label for the "clear date" (×) button. */
587
+ clearDateAriaLabel: _angular_core.InputSignal<string>;
588
+ /** Aria-label for the "open calendar" button. */
589
+ openCalendarAriaLabel: _angular_core.InputSignal<string>;
590
+ /** Aria-label for the calendar popup dialog. */
591
+ calendarAriaLabel: _angular_core.InputSignal<string>;
592
+ /** Aria-label for the "previous month" navigation button. */
593
+ previousMonthAriaLabel: _angular_core.InputSignal<string>;
594
+ /** Aria-label for the "next month" navigation button. */
595
+ nextMonthAriaLabel: _angular_core.InputSignal<string>;
548
596
  /**
549
597
  * Event emitted when date is selected
550
598
  */
@@ -584,7 +632,7 @@ declare class DatepickerComponent implements ControlValueAccessor {
584
632
  registerOnTouched(fn: () => void): void;
585
633
  setDisabledState(isDisabled: boolean): void;
586
634
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerComponent, never>;
587
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerComponent, "pecb-datepicker", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "dateChange": "dateChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
635
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerComponent, "pecb-datepicker", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "clearDateAriaLabel": { "alias": "clearDateAriaLabel"; "required": false; "isSignal": true; }; "openCalendarAriaLabel": { "alias": "openCalendarAriaLabel"; "required": false; "isSignal": true; }; "calendarAriaLabel": { "alias": "calendarAriaLabel"; "required": false; "isSignal": true; }; "previousMonthAriaLabel": { "alias": "previousMonthAriaLabel"; "required": false; "isSignal": true; }; "nextMonthAriaLabel": { "alias": "nextMonthAriaLabel"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "dateChange": "dateChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
588
636
  }
589
637
 
590
638
  type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';
@@ -681,6 +729,12 @@ declare class InputComponent implements ControlValueAccessor {
681
729
  * Helper text to display below input
682
730
  */
683
731
  helperText: _angular_core.InputSignal<string | undefined>;
732
+ /** Aria-label for the "clear input" (×) button. */
733
+ clearAriaLabel: _angular_core.InputSignal<string>;
734
+ /** Aria-label for the password-toggle button when password is hidden. */
735
+ showPasswordAriaLabel: _angular_core.InputSignal<string>;
736
+ /** Aria-label for the password-toggle button when password is visible. */
737
+ hidePasswordAriaLabel: _angular_core.InputSignal<string>;
684
738
  /**
685
739
  * Icon to display - can be a predefined name ('email', 'search', 'user') or custom SVG string
686
740
  */
@@ -764,7 +818,7 @@ declare class InputComponent implements ControlValueAccessor {
764
818
  registerOnTouched(fn: () => void): void;
765
819
  setDisabledState(isDisabled: boolean): void;
766
820
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
767
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "pecb-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "rightIcon": { "alias": "rightIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "showInfoIcon": { "alias": "showInfoIcon"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "valueChange": "valueChange"; "blurred": "blurred"; "focused": "focused"; "cleared": "cleared"; }, never, never, true, never>;
821
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "pecb-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "showPasswordAriaLabel": { "alias": "showPasswordAriaLabel"; "required": false; "isSignal": true; }; "hidePasswordAriaLabel": { "alias": "hidePasswordAriaLabel"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "rightIcon": { "alias": "rightIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "showInfoIcon": { "alias": "showInfoIcon"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "valueChange": "valueChange"; "blurred": "blurred"; "focused": "focused"; "cleared": "cleared"; }, never, never, true, never>;
768
822
  }
769
823
 
770
824
  type RadioVariant = 'dot' | 'filled';
@@ -817,7 +871,8 @@ declare class CheckboxComponent implements ControlValueAccessor {
817
871
  }
818
872
 
819
873
  type ToggleLabelPosition = 'right' | 'left';
820
- type ToggleSize = 'sm';
874
+ /** `'md'` is the default size; `'sm'` renders a compact toggle. */
875
+ type ToggleSize = 'sm' | 'md';
821
876
  declare class ToggleComponent implements ControlValueAccessor {
822
877
  id: _angular_core.InputSignal<string>;
823
878
  name: _angular_core.InputSignal<string | undefined>;
@@ -832,8 +887,8 @@ declare class ToggleComponent implements ControlValueAccessor {
832
887
  thumbColor: _angular_core.InputSignal<string | undefined>;
833
888
  /** Show a check icon when on and an X icon when off, on the side opposite the thumb. */
834
889
  showStatusIcons: _angular_core.InputSignal<boolean>;
835
- /** Optional size override. Leave unset for the default size. */
836
- size: _angular_core.InputSignal<"sm" | undefined>;
890
+ /** Size variant. Leave unset (or `'md'`) for the default size; `'sm'` is compact. */
891
+ size: _angular_core.InputSignal<ToggleSize | undefined>;
837
892
  /** Drop shadow on the track. */
838
893
  shadow: _angular_core.InputSignal<boolean>;
839
894
  disabled: _angular_core.ModelSignal<boolean>;
@@ -863,6 +918,8 @@ declare class DropdownComponent implements ControlValueAccessor {
863
918
  private readonly elementRef;
864
919
  id: _angular_core.InputSignal<string>;
865
920
  label: _angular_core.InputSignal<string | undefined>;
921
+ /** Placeholder shown in the trigger when no option is selected. */
922
+ placeholder: _angular_core.InputSignal<string>;
866
923
  size: _angular_core.InputSignal<DropdownSize>;
867
924
  options: _angular_core.InputSignal<DropdownOption[]>;
868
925
  multiple: _angular_core.InputSignal<boolean>;
@@ -873,6 +930,12 @@ declare class DropdownComponent implements ControlValueAccessor {
873
930
  error: _angular_core.InputSignal<boolean>;
874
931
  errorMessage: _angular_core.InputSignal<string | undefined>;
875
932
  helperText: _angular_core.InputSignal<string | undefined>;
933
+ /** Placeholder shown in the in-dropdown search input. */
934
+ searchPlaceholder: _angular_core.InputSignal<string>;
935
+ /** Aria-label for the "clear selection" (×) button (multi-select only). */
936
+ clearSelectionAriaLabel: _angular_core.InputSignal<string>;
937
+ /** Visible text shown when the search filter returns no options. */
938
+ noResultsText: _angular_core.InputSignal<string>;
876
939
  selectionChange: _angular_core.OutputEmitterRef<unknown>;
877
940
  isOpen: _angular_core.WritableSignal<boolean>;
878
941
  searchQuery: _angular_core.WritableSignal<string>;
@@ -896,28 +959,30 @@ declare class DropdownComponent implements ControlValueAccessor {
896
959
  registerOnTouched(fn: () => void): void;
897
960
  setDisabledState(isDisabled: boolean): void;
898
961
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownComponent, never>;
899
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownComponent, "pecb-dropdown", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
962
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownComponent, "pecb-dropdown", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "clearSelectionAriaLabel": { "alias": "clearSelectionAriaLabel"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
900
963
  }
901
964
 
902
965
  type RightModalSize = 'sm' | 'md' | 'lg';
903
- declare class RightModalComponent implements OnInit, OnDestroy, AfterViewInit {
966
+ declare class RightModalComponent implements OnDestroy {
904
967
  id: _angular_core.InputSignal<string>;
905
- isOpen: _angular_core.InputSignal<boolean>;
968
+ isOpen: _angular_core.ModelSignal<boolean>;
906
969
  size: _angular_core.InputSignal<RightModalSize>;
907
970
  closeOnBackdropClick: _angular_core.InputSignal<boolean>;
908
971
  closeOnEscape: _angular_core.InputSignal<boolean>;
909
972
  showCloseButton: _angular_core.InputSignal<boolean>;
973
+ /** Accessible label for the close (×) button. Override to localize. */
974
+ closeAriaLabel: _angular_core.InputSignal<string>;
910
975
  ariaLabel: _angular_core.InputSignal<string | undefined>;
911
976
  ariaLabelledBy: _angular_core.InputSignal<string | undefined>;
912
977
  ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
913
978
  closed: _angular_core.OutputEmitterRef<void>;
914
979
  opened: _angular_core.OutputEmitterRef<void>;
915
- modalPanel: ElementRef<HTMLElement>;
980
+ private modalPanel;
916
981
  private cleanupFocusTrap;
917
982
  private cleanupBodyScroll;
918
983
  private previousActiveElement;
919
- ngOnInit(): void;
920
- ngAfterViewInit(): void;
984
+ private currentlyOpen;
985
+ constructor();
921
986
  ngOnDestroy(): void;
922
987
  get modalClasses(): string[];
923
988
  get panelClasses(): string[];
@@ -928,7 +993,7 @@ declare class RightModalComponent implements OnInit, OnDestroy, AfterViewInit {
928
993
  private setupFocusTrap;
929
994
  private cleanup;
930
995
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RightModalComponent, never>;
931
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RightModalComponent, "pecb-right-modal", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "opened": "opened"; }, never, ["[pecbRightModalHeader]", "[pecbRightModalContent]", "*", "[pecbRightModalFooter]"], true, never>;
996
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RightModalComponent, "pecb-right-modal", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "closed": "closed"; "opened": "opened"; }, never, ["[pecbRightModalHeader]", "[pecbRightModalContent]", "*", "[pecbRightModalFooter]"], true, never>;
932
997
  }
933
998
  declare class RightModalHeaderDirective {
934
999
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RightModalHeaderDirective, never>;
@@ -966,6 +1031,10 @@ declare class SidebarComponent {
966
1031
  collapsedLogo: _angular_core.InputSignal<string | undefined>;
967
1032
  showFooter: _angular_core.InputSignal<boolean>;
968
1033
  collapsed: _angular_core.ModelSignal<boolean>;
1034
+ /** Aria-label for the collapse-toggle button when sidebar is collapsed. */
1035
+ expandSidebarAriaLabel: _angular_core.InputSignal<string>;
1036
+ /** Aria-label for the collapse-toggle button when sidebar is expanded. */
1037
+ collapseSidebarAriaLabel: _angular_core.InputSignal<string>;
969
1038
  itemClick: _angular_core.OutputEmitterRef<SidebarMenuItem>;
970
1039
  collapseChange: _angular_core.OutputEmitterRef<boolean>;
971
1040
  activePopupItem: _angular_core.WritableSignal<SidebarMenuItem | null>;
@@ -980,7 +1049,7 @@ declare class SidebarComponent {
980
1049
  hasActiveDescendant(item: SidebarMenuItem): boolean;
981
1050
  getItemClasses(item: SidebarMenuItem, isChild?: boolean, isNested?: boolean): string[];
982
1051
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarComponent, never>;
983
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarComponent, "pecb-sidebar", never, { "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "sidebarLogo": { "alias": "sidebarLogo"; "required": false; "isSignal": true; }; "collapsedLogo": { "alias": "collapsedLogo"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "itemClick": "itemClick"; "collapseChange": "collapseChange"; }, never, ["[sidebar-header]", "[sidebar-footer]"], true, never>;
1052
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarComponent, "pecb-sidebar", never, { "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "sidebarLogo": { "alias": "sidebarLogo"; "required": false; "isSignal": true; }; "collapsedLogo": { "alias": "collapsedLogo"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "expandSidebarAriaLabel": { "alias": "expandSidebarAriaLabel"; "required": false; "isSignal": true; }; "collapseSidebarAriaLabel": { "alias": "collapseSidebarAriaLabel"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "itemClick": "itemClick"; "collapseChange": "collapseChange"; }, never, ["[sidebar-header]", "[sidebar-footer]"], true, never>;
984
1053
  }
985
1054
 
986
1055
  type ConfirmationIconType = 'success' | 'warning' | 'error' | 'info';
@@ -997,6 +1066,8 @@ declare class ConfirmationComponent implements OnDestroy, AfterViewInit {
997
1066
  cancelText: _angular_core.InputSignal<string>;
998
1067
  iconType: _angular_core.InputSignal<ConfirmationIconType>;
999
1068
  showCloseButton: _angular_core.InputSignal<boolean>;
1069
+ /** Accessible label for the close (×) button. Override to localize. */
1070
+ closeAriaLabel: _angular_core.InputSignal<string>;
1000
1071
  closeOnBackdropClick: _angular_core.InputSignal<boolean>;
1001
1072
  closeOnEscape: _angular_core.InputSignal<boolean>;
1002
1073
  ariaLabel: _angular_core.InputSignal<string | undefined>;
@@ -1024,7 +1095,7 @@ declare class ConfirmationComponent implements OnDestroy, AfterViewInit {
1024
1095
  private setupFocusTrap;
1025
1096
  private cleanup;
1026
1097
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationComponent, never>;
1027
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationComponent, "pecb-confirmation", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "confirmText": { "alias": "confirmText"; "required": false; "isSignal": true; }; "cancelText": { "alias": "cancelText"; "required": false; "isSignal": true; }; "iconType": { "alias": "iconType"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "confirmed": "confirmed"; "cancelled": "cancelled"; "closed": "closed"; }, never, never, true, never>;
1098
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationComponent, "pecb-confirmation", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "confirmText": { "alias": "confirmText"; "required": false; "isSignal": true; }; "cancelText": { "alias": "cancelText"; "required": false; "isSignal": true; }; "iconType": { "alias": "iconType"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "confirmed": "confirmed"; "cancelled": "cancelled"; "closed": "closed"; }, never, never, true, never>;
1028
1099
  }
1029
1100
 
1030
1101
  declare class BottomSheetComponent implements OnDestroy, AfterViewInit {
@@ -1038,6 +1109,8 @@ declare class BottomSheetComponent implements OnDestroy, AfterViewInit {
1038
1109
  primaryText: _angular_core.InputSignal<string>;
1039
1110
  secondaryText: _angular_core.InputSignal<string>;
1040
1111
  showCloseButton: _angular_core.InputSignal<boolean>;
1112
+ /** Accessible label for the close (×) button. Override to localize. */
1113
+ closeAriaLabel: _angular_core.InputSignal<string>;
1041
1114
  closeOnBackdropClick: _angular_core.InputSignal<boolean>;
1042
1115
  closeOnEscape: _angular_core.InputSignal<boolean>;
1043
1116
  primaryClicked: _angular_core.OutputEmitterRef<void>;
@@ -1058,7 +1131,7 @@ declare class BottomSheetComponent implements OnDestroy, AfterViewInit {
1058
1131
  private setupFocusTrap;
1059
1132
  private cleanup;
1060
1133
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BottomSheetComponent, never>;
1061
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BottomSheetComponent, "pecb-bottom-sheet", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "primaryText": { "alias": "primaryText"; "required": false; "isSignal": true; }; "secondaryText": { "alias": "secondaryText"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "primaryClicked": "primaryClicked"; "secondaryClicked": "secondaryClicked"; "closed": "closed"; }, never, ["*"], true, never>;
1134
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BottomSheetComponent, "pecb-bottom-sheet", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "primaryText": { "alias": "primaryText"; "required": false; "isSignal": true; }; "secondaryText": { "alias": "secondaryText"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "primaryClicked": "primaryClicked"; "secondaryClicked": "secondaryClicked"; "closed": "closed"; }, never, ["*"], true, never>;
1062
1135
  }
1063
1136
 
1064
1137
  type QuizType = 'Multiple Choice' | 'True/False' | 'Scenario' | 'Essay' | string;
@@ -1254,6 +1327,8 @@ declare class TooltipDirective implements OnDestroy {
1254
1327
  private appRef;
1255
1328
  private injector;
1256
1329
  private ref?;
1330
+ /** Keeps the tooltip pinned to its trigger while the page scrolls or resizes. */
1331
+ private readonly reposition;
1257
1332
  onMouseEnter(): void;
1258
1333
  onMouseLeave(): void;
1259
1334
  onClick(): void;
@@ -1287,12 +1362,20 @@ declare class MessageItemComponent {
1287
1362
  unreadCount: _angular_core.InputSignal<number>;
1288
1363
  /** Whether this item is currently selected / active */
1289
1364
  selected: _angular_core.InputSignal<boolean>;
1365
+ /** Visible "is typing" text shown when status is `typing`. */
1366
+ typingText: _angular_core.InputSignal<string>;
1367
+ /** Suffix appended to the unread badge's aria-label (e.g. `5 unread messages`). */
1368
+ unreadAriaSuffix: _angular_core.InputSignal<string>;
1369
+ /** Aria-label for the warning status icon. */
1370
+ warningAriaLabel: _angular_core.InputSignal<string>;
1371
+ /** Aria-label for the read status icon. */
1372
+ readAriaLabel: _angular_core.InputSignal<string>;
1290
1373
  /** Emitted when the item is clicked */
1291
1374
  itemClicked: _angular_core.OutputEmitterRef<void>;
1292
1375
  initials: _angular_core.Signal<string>;
1293
1376
  get hostClasses(): string;
1294
1377
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageItemComponent, never>;
1295
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageItemComponent, "pecb-message-item", never, { "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; "preview": { "alias": "preview"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "unreadCount": { "alias": "unreadCount"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
1378
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageItemComponent, "pecb-message-item", never, { "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; "preview": { "alias": "preview"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "unreadCount": { "alias": "unreadCount"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "typingText": { "alias": "typingText"; "required": false; "isSignal": true; }; "unreadAriaSuffix": { "alias": "unreadAriaSuffix"; "required": false; "isSignal": true; }; "warningAriaLabel": { "alias": "warningAriaLabel"; "required": false; "isSignal": true; }; "readAriaLabel": { "alias": "readAriaLabel"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
1296
1379
  }
1297
1380
  declare class MessageBubbleComponent {
1298
1381
  /** Visual type of the message */
@@ -1312,6 +1395,12 @@ declare class MessageBubbleComponent {
1312
1395
  time: _angular_core.InputSignal<string>;
1313
1396
  /** Show read-receipt checkmark below the bubble (outgoing only) */
1314
1397
  showReadReceipt: _angular_core.InputSignal<boolean>;
1398
+ /** Aria-label prefix for the document download button. Rendered as `<this> <fileName>`. */
1399
+ downloadAriaLabel: _angular_core.InputSignal<string>;
1400
+ /** Aria-label for the audio "play" button. */
1401
+ playAudioAriaLabel: _angular_core.InputSignal<string>;
1402
+ /** Aria-label for the read-receipt checkmark. */
1403
+ readReceiptAriaLabel: _angular_core.InputSignal<string>;
1315
1404
  /** Avatar image URL */
1316
1405
  avatarSrc: _angular_core.InputSignal<string>;
1317
1406
  /** Explicit initials override — auto-derived from senderName when empty */
@@ -1343,9 +1432,13 @@ declare class MessageBubbleComponent {
1343
1432
  get hostClasses(): string;
1344
1433
  get senderLabel(): string;
1345
1434
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageBubbleComponent, never>;
1346
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageBubbleComponent, "pecb-message-bubble", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "senderName": { "alias": "senderName"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; "showReadReceipt": { "alias": "showReadReceipt"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "fileMeta": { "alias": "fileMeta"; "required": false; "isSignal": true; }; "thumbnailSrc": { "alias": "thumbnailSrc"; "required": false; "isSignal": true; }; "audioDuration": { "alias": "audioDuration"; "required": false; "isSignal": true; }; "waveformData": { "alias": "waveformData"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; }, { "downloadClicked": "downloadClicked"; "playClicked": "playClicked"; }, never, never, true, never>;
1435
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageBubbleComponent, "pecb-message-bubble", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "senderName": { "alias": "senderName"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; "showReadReceipt": { "alias": "showReadReceipt"; "required": false; "isSignal": true; }; "downloadAriaLabel": { "alias": "downloadAriaLabel"; "required": false; "isSignal": true; }; "playAudioAriaLabel": { "alias": "playAudioAriaLabel"; "required": false; "isSignal": true; }; "readReceiptAriaLabel": { "alias": "readReceiptAriaLabel"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "fileMeta": { "alias": "fileMeta"; "required": false; "isSignal": true; }; "thumbnailSrc": { "alias": "thumbnailSrc"; "required": false; "isSignal": true; }; "audioDuration": { "alias": "audioDuration"; "required": false; "isSignal": true; }; "waveformData": { "alias": "waveformData"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; }, { "downloadClicked": "downloadClicked"; "playClicked": "playClicked"; }, never, never, true, never>;
1347
1436
  }
1348
1437
 
1438
+ declare class FullscreenModalHeaderDirective {
1439
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FullscreenModalHeaderDirective, never>;
1440
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FullscreenModalHeaderDirective, "[pecbFullscreenModalHeader]", never, {}, {}, never, never, true, never>;
1441
+ }
1349
1442
  declare class FullscreenModalContentDirective {
1350
1443
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FullscreenModalContentDirective, never>;
1351
1444
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FullscreenModalContentDirective, "[pecbFullscreenModalContent]", never, {}, {}, never, never, true, never>;
@@ -1354,7 +1447,7 @@ declare class FullscreenModalFooterDirective {
1354
1447
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FullscreenModalFooterDirective, never>;
1355
1448
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FullscreenModalFooterDirective, "[pecbFullscreenModalFooter]", never, {}, {}, never, never, true, never>;
1356
1449
  }
1357
- declare class FullscreenModalComponent implements OnInit, OnDestroy, AfterViewInit {
1450
+ declare class FullscreenModalComponent implements OnDestroy {
1358
1451
  /** Unique id forwarded to the dialog element */
1359
1452
  id: _angular_core.InputSignal<string>;
1360
1453
  /** Controls visibility */
@@ -1363,6 +1456,8 @@ declare class FullscreenModalComponent implements OnInit, OnDestroy, AfterViewIn
1363
1456
  title: _angular_core.InputSignal<string>;
1364
1457
  /** Show or hide the built-in close (×) button */
1365
1458
  showCloseButton: _angular_core.InputSignal<boolean>;
1459
+ /** Accessible label for the close (×) button. Override to localize. */
1460
+ closeAriaLabel: _angular_core.InputSignal<string>;
1366
1461
  /** Close modal when clicking the backdrop */
1367
1462
  closeOnBackdropClick: _angular_core.InputSignal<boolean>;
1368
1463
  /** Close modal when pressing Escape */
@@ -1377,12 +1472,12 @@ declare class FullscreenModalComponent implements OnInit, OnDestroy, AfterViewIn
1377
1472
  closed: _angular_core.OutputEmitterRef<void>;
1378
1473
  /** Emitted when the modal has been opened */
1379
1474
  opened: _angular_core.OutputEmitterRef<void>;
1380
- modalPanel: ElementRef<HTMLElement>;
1475
+ private modalPanel;
1381
1476
  private cleanupFocusTrap;
1382
1477
  private cleanupBodyScroll;
1383
1478
  private previousActiveElement;
1384
- ngOnInit(): void;
1385
- ngAfterViewInit(): void;
1479
+ private currentlyOpen;
1480
+ constructor();
1386
1481
  ngOnDestroy(): void;
1387
1482
  onBackdropClick(event: MouseEvent): void;
1388
1483
  onKeydown(event: KeyboardEvent): void;
@@ -1394,7 +1489,7 @@ declare class FullscreenModalComponent implements OnInit, OnDestroy, AfterViewIn
1394
1489
  private setupFocusTrap;
1395
1490
  private cleanup;
1396
1491
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FullscreenModalComponent, never>;
1397
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FullscreenModalComponent, "pecb-fullscreen-modal", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "closed": "closed"; "opened": "opened"; }, never, ["[pecbFullscreenModalHeader]", "[pecbFullscreenModalContent]", "*", "[pecbFullscreenModalFooter]"], true, never>;
1492
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FullscreenModalComponent, "pecb-fullscreen-modal", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "closed": "closed"; "opened": "opened"; }, never, ["[pecbFullscreenModalHeader]", "[pecbFullscreenModalContent]", "*", "[pecbFullscreenModalFooter]"], true, never>;
1398
1493
  }
1399
1494
 
1400
1495
  type StepperType = 'basic' | 'dot' | 'custom-icon' | 'navigation' | 'inline';
@@ -1654,8 +1749,12 @@ declare class CodeInputComponent implements ControlValueAccessor {
1654
1749
  state: _angular_core.InputSignal<CodeInputState>;
1655
1750
  errorMessage: _angular_core.InputSignal<string>;
1656
1751
  showClearAll: _angular_core.InputSignal<boolean>;
1657
- disabled: _angular_core.InputSignal<boolean>;
1752
+ disabled: _angular_core.ModelSignal<boolean>;
1658
1753
  ariaLabel: _angular_core.InputSignal<string>;
1754
+ /** Visible "Clear all" button text. */
1755
+ clearAllText: _angular_core.InputSignal<string>;
1756
+ /** Template for each cell's aria-label. Placeholders: `{index}` (1-based), `{total}`. */
1757
+ cellAriaLabelTemplate: _angular_core.InputSignal<string>;
1659
1758
  completed: _angular_core.OutputEmitterRef<string>;
1660
1759
  cleared: _angular_core.OutputEmitterRef<void>;
1661
1760
  cells: _angular_core.WritableSignal<string[]>;
@@ -1667,6 +1766,8 @@ declare class CodeInputComponent implements ControlValueAccessor {
1667
1766
  writeValue(value: string | null): void;
1668
1767
  registerOnChange(fn: (value: string) => void): void;
1669
1768
  registerOnTouched(fn: () => void): void;
1769
+ setDisabledState(isDisabled: boolean): void;
1770
+ getCellAriaLabel(index: number): string;
1670
1771
  getCellClasses(index: number): string[];
1671
1772
  onCellInput(event: Event, index: number): void;
1672
1773
  onCellKeyDown(event: KeyboardEvent, index: number): void;
@@ -1679,7 +1780,7 @@ declare class CodeInputComponent implements ControlValueAccessor {
1679
1780
  private syncInputValues;
1680
1781
  private emitValue;
1681
1782
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeInputComponent, never>;
1682
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeInputComponent, "pecb-code-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "length": { "alias": "length"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "showClearAll": { "alias": "showClearAll"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "completed": "completed"; "cleared": "cleared"; }, never, never, true, never>;
1783
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeInputComponent, "pecb-code-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "length": { "alias": "length"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "showClearAll": { "alias": "showClearAll"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "clearAllText": { "alias": "clearAllText"; "required": false; "isSignal": true; }; "cellAriaLabelTemplate": { "alias": "cellAriaLabelTemplate"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "completed": "completed"; "cleared": "cleared"; }, never, never, true, never>;
1683
1784
  }
1684
1785
 
1685
1786
  /**
@@ -1850,6 +1951,16 @@ declare class CodeSnippetComponent {
1850
1951
  showCopy: _angular_core.InputSignal<boolean>;
1851
1952
  showFooter: _angular_core.InputSignal<boolean>;
1852
1953
  ariaLabel: _angular_core.InputSignal<string>;
1954
+ /** Aria-label for the "copy code" buttons. */
1955
+ copyAriaLabel: _angular_core.InputSignal<string>;
1956
+ /** Aria-label for the secondary "more actions" button in `filename-actions` variant. */
1957
+ moreActionsAriaLabel: _angular_core.InputSignal<string>;
1958
+ /** Visible text and aria-label for the "Click to copy the code" banner button in `copy-banner` variant. */
1959
+ clickToCopyText: _angular_core.InputSignal<string>;
1960
+ /** Suffix appended to the character count in the footer (e.g. `100 chars`). */
1961
+ charsSuffix: _angular_core.InputSignal<string>;
1962
+ /** Suffix appended to the line count in the footer (e.g. `5 lines`). */
1963
+ linesSuffix: _angular_core.InputSignal<string>;
1853
1964
  copied: _angular_core.OutputEmitterRef<string>;
1854
1965
  copyLabel: _angular_core.WritableSignal<string>;
1855
1966
  codeLines: _angular_core.Signal<string[]>;
@@ -1860,7 +1971,7 @@ declare class CodeSnippetComponent {
1860
1971
  get snippetClasses(): string[];
1861
1972
  onCopy(): void;
1862
1973
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeSnippetComponent, never>;
1863
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeSnippetComponent, "pecb-code-snippet", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "code": { "alias": "code"; "required": false; "isSignal": true; }; "highlightedCode": { "alias": "highlightedCode"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "showLineNumbers": { "alias": "showLineNumbers"; "required": false; "isSignal": true; }; "showCopy": { "alias": "showCopy"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "copied": "copied"; }, never, ["[codeActions]"], true, never>;
1974
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeSnippetComponent, "pecb-code-snippet", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "code": { "alias": "code"; "required": false; "isSignal": true; }; "highlightedCode": { "alias": "highlightedCode"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "showLineNumbers": { "alias": "showLineNumbers"; "required": false; "isSignal": true; }; "showCopy": { "alias": "showCopy"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "copyAriaLabel": { "alias": "copyAriaLabel"; "required": false; "isSignal": true; }; "moreActionsAriaLabel": { "alias": "moreActionsAriaLabel"; "required": false; "isSignal": true; }; "clickToCopyText": { "alias": "clickToCopyText"; "required": false; "isSignal": true; }; "charsSuffix": { "alias": "charsSuffix"; "required": false; "isSignal": true; }; "linesSuffix": { "alias": "linesSuffix"; "required": false; "isSignal": true; }; }, { "copied": "copied"; }, never, ["[codeActions]"], true, never>;
1864
1975
  }
1865
1976
 
1866
1977
  /**
@@ -2070,7 +2181,12 @@ interface ClosableWithHooks {
2070
2181
  afterClose?: () => void;
2071
2182
  }
2072
2183
  /**
2073
- * Interface for table column definition
2184
+ * Interface for table column definition.
2185
+ *
2186
+ * @deprecated Not consumed by `TableComponent` — its column input is typed as
2187
+ * `PecbTableColumn[]` (exported from `table.component.ts`). Define table columns
2188
+ * with `PecbTableColumn` instead. This interface is retained for backward
2189
+ * compatibility and is scheduled for removal in a future major release.
2074
2190
  */
2075
2191
  interface TableColumn<T = unknown> {
2076
2192
  /** Unique column key */
@@ -2325,6 +2441,10 @@ declare class HeaderSearchComponent {
2325
2441
  private readonly sanitizer;
2326
2442
  /** Search placeholder text */
2327
2443
  placeholder: _angular_core.InputSignal<string>;
2444
+ /** Aria-label for the mobile search-toggle button. */
2445
+ openSearchAriaLabel: _angular_core.InputSignal<string>;
2446
+ /** Aria-label for the search input itself. */
2447
+ searchAriaLabel: _angular_core.InputSignal<string>;
2328
2448
  /** Category options. When provided, embeds a category dropdown. */
2329
2449
  categories: _angular_core.InputSignal<HeaderSearchCategory[]>;
2330
2450
  /** Emits the search query as the user types */
@@ -2347,7 +2467,7 @@ declare class HeaderSearchComponent {
2347
2467
  toggleCategory(): void;
2348
2468
  onCategorySelect(cat: HeaderSearchCategory): void;
2349
2469
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderSearchComponent, never>;
2350
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderSearchComponent, "pecb-header-search", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; }, { "searchChange": "searchChange"; "searchSubmit": "searchSubmit"; "categoryChange": "categoryChange"; }, never, never, true, never>;
2470
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderSearchComponent, "pecb-header-search", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "openSearchAriaLabel": { "alias": "openSearchAriaLabel"; "required": false; "isSignal": true; }; "searchAriaLabel": { "alias": "searchAriaLabel"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; }, { "searchChange": "searchChange"; "searchSubmit": "searchSubmit"; "categoryChange": "categoryChange"; }, never, never, true, never>;
2351
2471
  }
2352
2472
  declare class HeaderLanguageComponent {
2353
2473
  private readonly el;
@@ -2394,12 +2514,14 @@ declare class HeaderUserComponent {
2394
2514
  avatarInitials: _angular_core.InputSignal<string | undefined>;
2395
2515
  /** Avatar shape — `'circle'` for users, `'square'` for companies */
2396
2516
  avatarShape: _angular_core.InputSignal<"circle" | "square">;
2517
+ /** Prefix for the user button's aria-label. Rendered as `<this> <name>`. */
2518
+ userMenuAriaLabelPrefix: _angular_core.InputSignal<string>;
2397
2519
  /** Emits when the user profile area is clicked */
2398
2520
  userClick: _angular_core.OutputEmitterRef<void>;
2399
2521
  hostClasses: _angular_core.Signal<string>;
2400
2522
  onUserClick(): void;
2401
2523
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderUserComponent, never>;
2402
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderUserComponent, "pecb-header-user", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "role": { "alias": "role"; "required": true; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarShape": { "alias": "avatarShape"; "required": false; "isSignal": true; }; }, { "userClick": "userClick"; }, never, never, true, never>;
2524
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderUserComponent, "pecb-header-user", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "role": { "alias": "role"; "required": true; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarShape": { "alias": "avatarShape"; "required": false; "isSignal": true; }; "userMenuAriaLabelPrefix": { "alias": "userMenuAriaLabelPrefix"; "required": false; "isSignal": true; }; }, { "userClick": "userClick"; }, never, never, true, never>;
2403
2525
  }
2404
2526
  declare class HeaderDividerComponent {
2405
2527
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderDividerComponent, never>;
@@ -2439,6 +2561,24 @@ declare class VirtualTableComponent {
2439
2561
  currentPage: _angular_core.InputSignal<number>;
2440
2562
  showPagination: _angular_core.InputSignal<boolean>;
2441
2563
  ariaLabel: _angular_core.InputSignal<string>;
2564
+ /** Aria-label for the filter button. */
2565
+ filterAriaLabel: _angular_core.InputSignal<string>;
2566
+ /** Visually-hidden "Expand" text in the expand-column header. */
2567
+ expandHeaderLabel: _angular_core.InputSignal<string>;
2568
+ /** Aria-label for the row-expand toggle when row is collapsed. */
2569
+ expandRowAriaLabel: _angular_core.InputSignal<string>;
2570
+ /** Aria-label for the row-expand toggle when row is expanded. */
2571
+ collapseRowAriaLabel: _angular_core.InputSignal<string>;
2572
+ /** Aria-label for the "previous page" pagination button. */
2573
+ previousPageAriaLabel: _angular_core.InputSignal<string>;
2574
+ /** Aria-label for the "next page" pagination button. */
2575
+ nextPageAriaLabel: _angular_core.InputSignal<string>;
2576
+ /** Aria-label prefix for each page-number button. Rendered as `<this> <n>`. */
2577
+ pageAriaLabel: _angular_core.InputSignal<string>;
2578
+ /** Visible "Items per page:" label next to the page-size indicator. */
2579
+ itemsPerPageLabel: _angular_core.InputSignal<string>;
2580
+ /** Template for the pagination range text. Placeholders: `{start}`, `{end}`, `{total}`. */
2581
+ itemsInfoTemplate: _angular_core.InputSignal<string>;
2442
2582
  rowToggled: _angular_core.OutputEmitterRef<{
2443
2583
  row: any;
2444
2584
  index: number;
@@ -2451,6 +2591,7 @@ declare class VirtualTableComponent {
2451
2591
  expandedRows: _angular_core.WritableSignal<Set<number>>;
2452
2592
  paginationStart: _angular_core.Signal<number>;
2453
2593
  paginationEnd: _angular_core.Signal<number>;
2594
+ paginationInfoText: _angular_core.Signal<string>;
2454
2595
  totalPages: _angular_core.Signal<number>;
2455
2596
  visiblePages: _angular_core.Signal<(number | "...")[]>;
2456
2597
  isExpanded(index: number): boolean;
@@ -2462,7 +2603,7 @@ declare class VirtualTableComponent {
2462
2603
  getProgressColor(row: any): string;
2463
2604
  onPageChange(page: number): void;
2464
2605
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<VirtualTableComponent, never>;
2465
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<VirtualTableComponent, "pecb-virtual-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "progressConfig": { "alias": "progressConfig"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "rowToggled": "rowToggled"; "actionClicked": "actionClicked"; "searchChanged": "searchChanged"; "filterClicked": "filterClicked"; "pageChanged": "pageChanged"; }, ["expandedRowTemplate"], ["[toolbarLeft]", "[toolbarRight]"], true, never>;
2606
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<VirtualTableComponent, "pecb-virtual-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "progressConfig": { "alias": "progressConfig"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "filterAriaLabel": { "alias": "filterAriaLabel"; "required": false; "isSignal": true; }; "expandHeaderLabel": { "alias": "expandHeaderLabel"; "required": false; "isSignal": true; }; "expandRowAriaLabel": { "alias": "expandRowAriaLabel"; "required": false; "isSignal": true; }; "collapseRowAriaLabel": { "alias": "collapseRowAriaLabel"; "required": false; "isSignal": true; }; "previousPageAriaLabel": { "alias": "previousPageAriaLabel"; "required": false; "isSignal": true; }; "nextPageAriaLabel": { "alias": "nextPageAriaLabel"; "required": false; "isSignal": true; }; "pageAriaLabel": { "alias": "pageAriaLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; "itemsInfoTemplate": { "alias": "itemsInfoTemplate"; "required": false; "isSignal": true; }; }, { "rowToggled": "rowToggled"; "actionClicked": "actionClicked"; "searchChanged": "searchChanged"; "filterClicked": "filterClicked"; "pageChanged": "pageChanged"; }, ["expandedRowTemplate"], ["[toolbarLeft]", "[toolbarRight]"], true, never>;
2466
2607
  }
2467
2608
 
2468
2609
  /**
@@ -2675,6 +2816,18 @@ declare class HierarchicalTableComponent implements AfterViewInit, OnDestroy {
2675
2816
  pageSize: _angular_core.InputSignal<number>;
2676
2817
  currentPage: _angular_core.InputSignal<number>;
2677
2818
  ariaLabel: _angular_core.InputSignal<string>;
2819
+ /** Aria-label for the filter button. */
2820
+ filterAriaLabel: _angular_core.InputSignal<string>;
2821
+ /** Aria-label for the "previous page" pagination button. */
2822
+ previousPageAriaLabel: _angular_core.InputSignal<string>;
2823
+ /** Aria-label for the "next page" pagination button. */
2824
+ nextPageAriaLabel: _angular_core.InputSignal<string>;
2825
+ /** Aria-label prefix for each page-number button. Rendered as `<this> <n>`. */
2826
+ pageAriaLabel: _angular_core.InputSignal<string>;
2827
+ /** Visible "Items per page:" label next to the page-size indicator. */
2828
+ itemsPerPageLabel: _angular_core.InputSignal<string>;
2829
+ /** Template for the pagination range text. Placeholders: `{start}`, `{end}`, `{total}`. */
2830
+ itemsInfoTemplate: _angular_core.InputSignal<string>;
2678
2831
  actionButtonClicked: _angular_core.OutputEmitterRef<void>;
2679
2832
  searchChanged: _angular_core.OutputEmitterRef<string>;
2680
2833
  filterClicked: _angular_core.OutputEmitterRef<void>;
@@ -2686,6 +2839,7 @@ declare class HierarchicalTableComponent implements AfterViewInit, OnDestroy {
2686
2839
  pageChanged: _angular_core.OutputEmitterRef<HierarchicalTablePageEvent>;
2687
2840
  paginationStart: _angular_core.Signal<number>;
2688
2841
  paginationEnd: _angular_core.Signal<number>;
2842
+ paginationInfoText: _angular_core.Signal<string>;
2689
2843
  totalPages: _angular_core.Signal<number>;
2690
2844
  visiblePages: _angular_core.Signal<(number | "...")[]>;
2691
2845
  getCellValue(row: Record<string, unknown>, key: string): unknown;
@@ -2708,7 +2862,7 @@ declare class HierarchicalTableComponent implements AfterViewInit, OnDestroy {
2708
2862
  private removeDragListeners;
2709
2863
  private updateScrollbar;
2710
2864
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HierarchicalTableComponent, never>;
2711
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HierarchicalTableComponent, "pecb-hierarchical-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "actionButtonClicked": "actionButtonClicked"; "searchChanged": "searchChanged"; "filterClicked": "filterClicked"; "rowActionClicked": "rowActionClicked"; "pageChanged": "pageChanged"; }, never, ["[toolbarLeft]", "[toolbarRight]"], true, never>;
2865
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HierarchicalTableComponent, "pecb-hierarchical-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "filterAriaLabel": { "alias": "filterAriaLabel"; "required": false; "isSignal": true; }; "previousPageAriaLabel": { "alias": "previousPageAriaLabel"; "required": false; "isSignal": true; }; "nextPageAriaLabel": { "alias": "nextPageAriaLabel"; "required": false; "isSignal": true; }; "pageAriaLabel": { "alias": "pageAriaLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; "itemsInfoTemplate": { "alias": "itemsInfoTemplate"; "required": false; "isSignal": true; }; }, { "actionButtonClicked": "actionButtonClicked"; "searchChanged": "searchChanged"; "filterClicked": "filterClicked"; "rowActionClicked": "rowActionClicked"; "pageChanged": "pageChanged"; }, never, ["[toolbarLeft]", "[toolbarRight]"], true, never>;
2712
2866
  }
2713
2867
 
2714
2868
  /**
@@ -2825,6 +2979,8 @@ declare class BackToTopComponent implements OnInit, OnDestroy {
2825
2979
  rightOffset: _angular_core.InputSignal<number>;
2826
2980
  /** Time in ms after scroll stops to transition to full opacity. Default: 1000 */
2827
2981
  scrollIdleDelay: _angular_core.InputSignal<number>;
2982
+ /** Aria-label for the button. */
2983
+ ariaLabel: _angular_core.InputSignal<string>;
2828
2984
  /** Whether the button is visible (scroll past threshold) */
2829
2985
  visible: _angular_core.WritableSignal<boolean>;
2830
2986
  /** Whether the user is actively scrolling (50% opacity) */
@@ -2839,7 +2995,7 @@ declare class BackToTopComponent implements OnInit, OnDestroy {
2839
2995
  scrollToTop(): void;
2840
2996
  private onScroll;
2841
2997
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BackToTopComponent, never>;
2842
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BackToTopComponent, "pecb-back-to-top", never, { "scrollThreshold": { "alias": "scrollThreshold"; "required": false; "isSignal": true; }; "bottomOffset": { "alias": "bottomOffset"; "required": false; "isSignal": true; }; "rightOffset": { "alias": "rightOffset"; "required": false; "isSignal": true; }; "scrollIdleDelay": { "alias": "scrollIdleDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2998
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BackToTopComponent, "pecb-back-to-top", never, { "scrollThreshold": { "alias": "scrollThreshold"; "required": false; "isSignal": true; }; "bottomOffset": { "alias": "bottomOffset"; "required": false; "isSignal": true; }; "rightOffset": { "alias": "rightOffset"; "required": false; "isSignal": true; }; "scrollIdleDelay": { "alias": "scrollIdleDelay"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2843
2999
  }
2844
3000
 
2845
3001
  interface ExpandableRowColumn {
@@ -2875,6 +3031,24 @@ declare class ExpandableRowTableComponent {
2875
3031
  pageSize: _angular_core.InputSignal<number>;
2876
3032
  currentPage: _angular_core.InputSignal<number>;
2877
3033
  ariaLabel: _angular_core.InputSignal<string>;
3034
+ /** Aria-label for the filter button. */
3035
+ filterAriaLabel: _angular_core.InputSignal<string>;
3036
+ /** Visually-hidden "Expand" text in the expand-column header. */
3037
+ expandHeaderLabel: _angular_core.InputSignal<string>;
3038
+ /** Aria-label for the row-expand toggle when row is collapsed. */
3039
+ expandRowAriaLabel: _angular_core.InputSignal<string>;
3040
+ /** Aria-label for the row-expand toggle when row is expanded. */
3041
+ collapseRowAriaLabel: _angular_core.InputSignal<string>;
3042
+ /** Aria-label for the "previous page" pagination button. */
3043
+ previousPageAriaLabel: _angular_core.InputSignal<string>;
3044
+ /** Aria-label for the "next page" pagination button. */
3045
+ nextPageAriaLabel: _angular_core.InputSignal<string>;
3046
+ /** Aria-label prefix for each page-number button. Rendered as `<this> <n>`. */
3047
+ pageAriaLabel: _angular_core.InputSignal<string>;
3048
+ /** Visible "Items per page:" label next to the page-size indicator. */
3049
+ itemsPerPageLabel: _angular_core.InputSignal<string>;
3050
+ /** Template for the pagination range text. Placeholders: `{start}`, `{end}`, `{total}`. */
3051
+ itemsInfoTemplate: _angular_core.InputSignal<string>;
2878
3052
  rowToggled: _angular_core.OutputEmitterRef<{
2879
3053
  row: Record<string, unknown>;
2880
3054
  index: number;
@@ -2887,6 +3061,7 @@ declare class ExpandableRowTableComponent {
2887
3061
  expandedRows: _angular_core.WritableSignal<Set<number>>;
2888
3062
  paginationStart: _angular_core.Signal<number>;
2889
3063
  paginationEnd: _angular_core.Signal<number>;
3064
+ paginationInfoText: _angular_core.Signal<string>;
2890
3065
  totalPages: _angular_core.Signal<number>;
2891
3066
  visiblePages: _angular_core.Signal<(number | "...")[]>;
2892
3067
  isExpanded(index: number): boolean;
@@ -2898,7 +3073,7 @@ declare class ExpandableRowTableComponent {
2898
3073
  getProgressColor(row: Record<string, unknown>): string;
2899
3074
  onPageChange(page: number): void;
2900
3075
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ExpandableRowTableComponent, never>;
2901
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ExpandableRowTableComponent, "pecb-expandable-row-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "progressConfig": { "alias": "progressConfig"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "rowToggled": "rowToggled"; "actionClicked": "actionClicked"; "searchChanged": "searchChanged"; "filterClicked": "filterClicked"; "pageChanged": "pageChanged"; }, ["expandedRowTemplate"], ["[toolbarLeft]", "[toolbarRight]"], true, never>;
3076
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ExpandableRowTableComponent, "pecb-expandable-row-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "progressConfig": { "alias": "progressConfig"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "showPagination": { "alias": "showPagination"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "filterAriaLabel": { "alias": "filterAriaLabel"; "required": false; "isSignal": true; }; "expandHeaderLabel": { "alias": "expandHeaderLabel"; "required": false; "isSignal": true; }; "expandRowAriaLabel": { "alias": "expandRowAriaLabel"; "required": false; "isSignal": true; }; "collapseRowAriaLabel": { "alias": "collapseRowAriaLabel"; "required": false; "isSignal": true; }; "previousPageAriaLabel": { "alias": "previousPageAriaLabel"; "required": false; "isSignal": true; }; "nextPageAriaLabel": { "alias": "nextPageAriaLabel"; "required": false; "isSignal": true; }; "pageAriaLabel": { "alias": "pageAriaLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; "itemsInfoTemplate": { "alias": "itemsInfoTemplate"; "required": false; "isSignal": true; }; }, { "rowToggled": "rowToggled"; "actionClicked": "actionClicked"; "searchChanged": "searchChanged"; "filterClicked": "filterClicked"; "pageChanged": "pageChanged"; }, ["expandedRowTemplate"], ["[toolbarLeft]", "[toolbarRight]"], true, never>;
2902
3077
  }
2903
3078
 
2904
3079
  /**
@@ -3126,48 +3301,66 @@ declare class LanguageDropdownComponent {
3126
3301
  */
3127
3302
  type EmptyStateIconTheme = 'default' | 'info' | 'error' | 'warning' | 'success' | 'gray';
3128
3303
  /**
3129
- * Configuration for a button in the empty state.
3304
+ * Maximum number of action buttons an empty state will render. An empty state
3305
+ * should offer at most a primary action plus one secondary action — anything
3306
+ * beyond that is dropped (and is a usability smell).
3307
+ */
3308
+ declare const EMPTY_STATE_MAX_BUTTONS = 2;
3309
+ /**
3310
+ * Configuration for a single empty-state action button. Rendered with the
3311
+ * shared `<pecb-button>` so it inherits the library's button styling/states.
3130
3312
  */
3131
3313
  interface EmptyStateButton {
3132
- /** Button label text */
3314
+ /** Button label text. */
3133
3315
  label: string;
3134
- /** Button style: primary (dark bg) or secondary (outline) */
3135
- variant: 'primary' | 'secondary';
3316
+ /**
3317
+ * Action style. `'primary'` is the dark call-to-action, `'secondary'` is the
3318
+ * outline button. When omitted, the first button defaults to `'primary'` and
3319
+ * any subsequent button to `'secondary'`.
3320
+ */
3321
+ variant?: 'primary' | 'secondary';
3322
+ /** Optional leading icon — a registered `IconRegistry` name. */
3323
+ icon?: string;
3324
+ /** Whether the button is disabled. */
3325
+ disabled?: boolean;
3326
+ /**
3327
+ * Optional identifier echoed back on `(buttonClick)` so the caller can tell
3328
+ * which action fired without comparing labels.
3329
+ */
3330
+ id?: string;
3136
3331
  }
3137
3332
  /**
3138
3333
  * Empty state component matching the PECB Figma design system.
3139
3334
  *
3140
- * Displays a centered message with an icon, title, description, and
3141
- * optional action buttons when there is no data to show.
3142
- *
3143
- * **Figma specs (node 6458:49629):**
3144
- * - Container: white bg, #ececec border, 12px radius, 64px v-pad, 220px h-pad
3145
- * - Gap between elements: 16px
3146
- * - Icon circle: 56px, 28px border-radius
3147
- * - default bg: #f4f4f4 (neutral-7)
3148
- * - info bg: #e6f0fa (new-bg)
3149
- * - error bg: #fdecea (cancelled-bg)
3150
- * - Title: Bold 24px, #212427, line-height 1.2
3151
- * - Description: Medium 14px, #919191, text-center
3152
- * - Primary button: #212427 bg, white text, 6px radius, 40px h, 16px h-pad
3153
- * - Secondary button: white bg, #c2c2c2 border, #212427 text, 6px radius, 40px h
3154
- * - Button gap: 16px
3335
+ * Displays a centered message with an icon, title, description, and optional
3336
+ * action buttons when there is no data to show.
3337
+ *
3338
+ * **Icon** pass a registered icon name via `[icon]`, or project a custom SVG
3339
+ * into the `[emptyStateIcon]` slot. A registered `[icon]` name takes precedence.
3340
+ *
3341
+ * **Buttons** supply up to {@link EMPTY_STATE_MAX_BUTTONS} actions via
3342
+ * `[buttons]`; they render with `<pecb-button>`.
3155
3343
  *
3156
3344
  * @example
3157
3345
  * ```html
3346
+ * <!-- Icon by registered name -->
3158
3347
  * <pecb-empty-state
3159
- * title="No Certifications Yet"
3160
- * description="Start your professional development..."
3161
- * iconTheme="default"
3162
- * [buttons]="[
3163
- * { label: 'Explore Certifications', variant: 'primary' },
3164
- * { label: 'Learn More', variant: 'secondary' }
3165
- * ]"
3348
+ * icon="layout-grid"
3349
+ * title="No Workflows Yet"
3350
+ * description="No workflows yet. They will appear here once created."
3351
+ * [buttons]="[{ label: 'Create Workflow', icon: 'plus' }]"
3166
3352
  * (buttonClick)="onAction($event)"
3167
3353
  * ></pecb-empty-state>
3354
+ *
3355
+ * <!-- Icon by content projection -->
3356
+ * <pecb-empty-state title="No Data Found" iconTheme="error">
3357
+ * <svg emptyStateIcon ...></svg>
3358
+ * </pecb-empty-state>
3168
3359
  * ```
3169
3360
  */
3170
3361
  declare class EmptyStateComponent {
3362
+ private readonly registry;
3363
+ private readonly sanitizer;
3171
3364
  /** Unique element ID */
3172
3365
  id: _angular_core.InputSignal<string>;
3173
3366
  /** Title text */
@@ -3176,7 +3369,13 @@ declare class EmptyStateComponent {
3176
3369
  description: _angular_core.InputSignal<string>;
3177
3370
  /** Icon background color theme */
3178
3371
  iconTheme: _angular_core.InputSignal<EmptyStateIconTheme>;
3179
- /** Action buttons to display */
3372
+ /**
3373
+ * Icon shown in the circle, by registered `IconRegistry` name. When set (and
3374
+ * the name resolves), it takes precedence over any `[emptyStateIcon]`
3375
+ * projected content. Leave empty to use content projection instead.
3376
+ */
3377
+ icon: _angular_core.InputSignal<string>;
3378
+ /** Action buttons to display (capped at {@link EMPTY_STATE_MAX_BUTTONS}). */
3180
3379
  buttons: _angular_core.InputSignal<EmptyStateButton[]>;
3181
3380
  /** Whether to show the title */
3182
3381
  showTitle: _angular_core.InputSignal<boolean>;
@@ -3186,12 +3385,31 @@ declare class EmptyStateComponent {
3186
3385
  buttonClick: _angular_core.OutputEmitterRef<EmptyStateButton>;
3187
3386
  /** CSS class for the icon circle background */
3188
3387
  iconBgClass: _angular_core.Signal<string>;
3189
- /** Whether any buttons are configured */
3388
+ /** Raw SVG for the `icon` name input — empty when unset or unknown. */
3389
+ private readonly resolvedIcon;
3390
+ /** Sanitized SVG for the `icon` name input, bound via [innerHTML]. */
3391
+ iconSvg: _angular_core.Signal<SafeHtml>;
3392
+ /** True when a registered `icon` name is set — drives icon vs. projection. */
3393
+ hasIconName: _angular_core.Signal<boolean>;
3394
+ /**
3395
+ * Buttons actually rendered: capped at {@link EMPTY_STATE_MAX_BUTTONS} and
3396
+ * pre-resolved to the props `<pecb-button>` needs. `source` carries the
3397
+ * original config back out through `(buttonClick)`.
3398
+ */
3399
+ renderButtons: _angular_core.Signal<{
3400
+ source: EmptyStateButton;
3401
+ label: string;
3402
+ variant: ButtonVariant;
3403
+ iconSvg: string;
3404
+ iconStyle: ButtonIconStyle;
3405
+ disabled: boolean;
3406
+ }[]>;
3407
+ /** Whether any buttons will be rendered. */
3190
3408
  hasButtons: _angular_core.Signal<boolean>;
3191
- /** Handle button click */
3409
+ /** Handle button click — re-emits the original button config. */
3192
3410
  onButtonClick(button: EmptyStateButton): void;
3193
3411
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
3194
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "pecb-empty-state", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "iconTheme": { "alias": "iconTheme"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "showTitle": { "alias": "showTitle"; "required": false; "isSignal": true; }; "showDescription": { "alias": "showDescription"; "required": false; "isSignal": true; }; }, { "buttonClick": "buttonClick"; }, never, ["[emptyStateIcon]"], true, never>;
3412
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "pecb-empty-state", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "iconTheme": { "alias": "iconTheme"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "showTitle": { "alias": "showTitle"; "required": false; "isSignal": true; }; "showDescription": { "alias": "showDescription"; "required": false; "isSignal": true; }; }, { "buttonClick": "buttonClick"; }, never, ["[emptyStateIcon]"], true, never>;
3195
3413
  }
3196
3414
 
3197
3415
  /**
@@ -3257,45 +3475,64 @@ declare class TestimonialComponent {
3257
3475
  type TagStyle = 'light' | 'dark';
3258
3476
  type TagAction = 'none' | 'close' | 'plus';
3259
3477
  declare class TagComponent {
3260
- tagId: _angular_core.InputSignal<string>;
3478
+ id: _angular_core.InputSignal<string>;
3261
3479
  label: _angular_core.InputSignal<string>;
3262
3480
  tagStyle: _angular_core.InputSignal<TagStyle>;
3263
3481
  action: _angular_core.InputSignal<TagAction>;
3482
+ /** Aria-label for the close (×) action — override to localize (audit F20). */
3483
+ removeAriaLabel: _angular_core.InputSignal<string>;
3264
3484
  tagClose: _angular_core.OutputEmitterRef<void>;
3265
3485
  tagClasses: _angular_core.Signal<string[]>;
3266
3486
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagComponent, never>;
3267
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagComponent, "pecb-tag", never, { "tagId": { "alias": "tagId"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tagStyle": { "alias": "tagStyle"; "required": false; "isSignal": true; }; "action": { "alias": "action"; "required": false; "isSignal": true; }; }, { "tagClose": "tagClose"; }, never, never, true, never>;
3487
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagComponent, "pecb-tag", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tagStyle": { "alias": "tagStyle"; "required": false; "isSignal": true; }; "action": { "alias": "action"; "required": false; "isSignal": true; }; "removeAriaLabel": { "alias": "removeAriaLabel"; "required": false; "isSignal": true; }; }, { "tagClose": "tagClose"; }, never, never, true, never>;
3268
3488
  }
3489
+
3269
3490
  type LinkButtonType = 'go-back' | 'view-details' | 'read-more' | 'show-credential';
3270
3491
  declare class LinkButtonComponent {
3271
- linkId: _angular_core.InputSignal<string>;
3492
+ id: _angular_core.InputSignal<string>;
3272
3493
  type: _angular_core.InputSignal<LinkButtonType>;
3494
+ /** Optional explicit label override. When set, takes precedence over the
3495
+ * type-driven default — use this to localize (audit F20). */
3496
+ label: _angular_core.InputSignal<string>;
3273
3497
  clicked: _angular_core.OutputEmitterRef<void>;
3274
3498
  displayText: _angular_core.Signal<string>;
3275
3499
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LinkButtonComponent, never>;
3276
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LinkButtonComponent, "pecb-link-button", never, { "linkId": { "alias": "linkId"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
3500
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LinkButtonComponent, "pecb-link-button", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
3277
3501
  }
3502
+
3278
3503
  declare class SlidePointsComponent {
3279
3504
  total: _angular_core.InputSignal<number>;
3505
+ /** Template for the container's aria-label. Placeholders: `{current}` (1-based), `{total}`. */
3506
+ containerAriaLabelTemplate: _angular_core.InputSignal<string>;
3507
+ /** Prefix for each dot's aria-label. Rendered as `<this> <n>`. */
3508
+ slideAriaLabelPrefix: _angular_core.InputSignal<string>;
3280
3509
  dotClick: _angular_core.OutputEmitterRef<number>;
3281
3510
  currentIndex: _angular_core.WritableSignal<number>;
3282
3511
  dotsArray: _angular_core.Signal<number[]>;
3512
+ containerAriaLabel: _angular_core.Signal<string>;
3283
3513
  selectDot(index: number): void;
3284
3514
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlidePointsComponent, never>;
3285
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlidePointsComponent, "pecb-slide-points", never, { "total": { "alias": "total"; "required": false; "isSignal": true; }; }, { "dotClick": "dotClick"; }, never, never, true, never>;
3515
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlidePointsComponent, "pecb-slide-points", never, { "total": { "alias": "total"; "required": false; "isSignal": true; }; "containerAriaLabelTemplate": { "alias": "containerAriaLabelTemplate"; "required": false; "isSignal": true; }; "slideAriaLabelPrefix": { "alias": "slideAriaLabelPrefix"; "required": false; "isSignal": true; }; }, { "dotClick": "dotClick"; }, never, never, true, never>;
3286
3516
  }
3517
+
3287
3518
  declare class QuantitySelectorComponent {
3288
- qtyId: _angular_core.InputSignal<string>;
3289
- value: _angular_core.WritableSignal<number>;
3519
+ id: _angular_core.InputSignal<string>;
3520
+ /** Two-way bindable current value. External writes are clamped to [min, max]. */
3521
+ value: _angular_core.ModelSignal<number>;
3290
3522
  min: _angular_core.InputSignal<number>;
3291
3523
  max: _angular_core.InputSignal<number>;
3292
3524
  showFraction: _angular_core.InputSignal<boolean>;
3293
- valueChange: _angular_core.OutputEmitterRef<number>;
3525
+ /** Aria-label for the decrement button. */
3526
+ decreaseAriaLabel: _angular_core.InputSignal<string>;
3527
+ /** Aria-label for the increment button. */
3528
+ increaseAriaLabel: _angular_core.InputSignal<string>;
3529
+ constructor();
3294
3530
  increment(): void;
3295
3531
  decrement(): void;
3296
3532
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuantitySelectorComponent, never>;
3297
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuantitySelectorComponent, "pecb-quantity-selector", never, { "qtyId": { "alias": "qtyId"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "showFraction": { "alias": "showFraction"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
3533
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuantitySelectorComponent, "pecb-quantity-selector", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "showFraction": { "alias": "showFraction"; "required": false; "isSignal": true; }; "decreaseAriaLabel": { "alias": "decreaseAriaLabel"; "required": false; "isSignal": true; }; "increaseAriaLabel": { "alias": "increaseAriaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
3298
3534
  }
3535
+
3299
3536
  type AuditorStatusType = 'trainee' | 'auditor' | 'member';
3300
3537
  declare class AuditorStatusComponent {
3301
3538
  type: _angular_core.InputSignal<AuditorStatusType>;
@@ -3305,6 +3542,7 @@ declare class AuditorStatusComponent {
3305
3542
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuditorStatusComponent, never>;
3306
3543
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AuditorStatusComponent, "pecb-auditor-status", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3307
3544
  }
3545
+
3308
3546
  type RatingStyle = 'black' | 'white';
3309
3547
  declare class RatingNumberComponent {
3310
3548
  value: _angular_core.InputSignal<number>;
@@ -3314,17 +3552,22 @@ declare class RatingNumberComponent {
3314
3552
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RatingNumberComponent, never>;
3315
3553
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RatingNumberComponent, "pecb-rating-number", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "ratingStyle": { "alias": "ratingStyle"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, never, never, true, never>;
3316
3554
  }
3555
+
3317
3556
  type IconTagType = 'important' | 'question' | 'review';
3318
3557
  declare class IconTagComponent {
3319
3558
  type: _angular_core.InputSignal<IconTagType>;
3320
3559
  active: _angular_core.InputSignal<boolean>;
3560
+ /** Optional explicit label override. When set, takes precedence over the
3561
+ * type-driven default — use this to localize (audit F20). */
3562
+ label: _angular_core.InputSignal<string>;
3321
3563
  clicked: _angular_core.OutputEmitterRef<void>;
3322
3564
  iconTagClasses: _angular_core.Signal<string[]>;
3323
3565
  iconBgClass: _angular_core.Signal<string>;
3324
3566
  displayLabel: _angular_core.Signal<string>;
3325
3567
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconTagComponent, never>;
3326
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconTagComponent, "pecb-icon-tag", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
3568
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconTagComponent, "pecb-icon-tag", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
3327
3569
  }
3570
+
3328
3571
  type TranscriptLineState = 'default' | 'active' | 'hover';
3329
3572
  declare class TranscriptLineComponent {
3330
3573
  time: _angular_core.InputSignal<string>;
@@ -3337,6 +3580,7 @@ declare class TranscriptLineComponent {
3337
3580
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TranscriptLineComponent, never>;
3338
3581
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TranscriptLineComponent, "pecb-transcript-line", never, { "time": { "alias": "time"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
3339
3582
  }
3583
+
3340
3584
  type MiniIconAction = 'edit' | 'delete';
3341
3585
  declare class MiniIconButtonComponent {
3342
3586
  action: _angular_core.InputSignal<MiniIconAction>;
@@ -3344,39 +3588,48 @@ declare class MiniIconButtonComponent {
3344
3588
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MiniIconButtonComponent, never>;
3345
3589
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MiniIconButtonComponent, "pecb-mini-icon-button", never, { "action": { "alias": "action"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
3346
3590
  }
3591
+
3347
3592
  declare class NoResultsComponent {
3348
- noResultsId: _angular_core.InputSignal<string>;
3593
+ id: _angular_core.InputSignal<string>;
3349
3594
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NoResultsComponent, never>;
3350
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NoResultsComponent, "pecb-no-results", never, { "noResultsId": { "alias": "noResultsId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3595
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NoResultsComponent, "pecb-no-results", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3351
3596
  }
3597
+
3352
3598
  declare class CertificateUploadBarComponent {
3353
- certUploadId: _angular_core.InputSignal<string>;
3599
+ id: _angular_core.InputSignal<string>;
3354
3600
  filename: _angular_core.InputSignal<string>;
3355
3601
  showClose: _angular_core.InputSignal<boolean>;
3602
+ /** Aria-label for the remove button — override to localize (audit F20). */
3603
+ removeAriaLabel: _angular_core.InputSignal<string>;
3356
3604
  closeClick: _angular_core.OutputEmitterRef<void>;
3357
3605
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CertificateUploadBarComponent, never>;
3358
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CertificateUploadBarComponent, "pecb-certificate-upload-bar", never, { "certUploadId": { "alias": "certUploadId"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; }, { "closeClick": "closeClick"; }, never, never, true, never>;
3606
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CertificateUploadBarComponent, "pecb-certificate-upload-bar", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "removeAriaLabel": { "alias": "removeAriaLabel"; "required": false; "isSignal": true; }; }, { "closeClick": "closeClick"; }, never, never, true, never>;
3359
3607
  }
3608
+
3360
3609
  declare class VideoUploadBarComponent {
3361
- videoUploadId: _angular_core.InputSignal<string>;
3610
+ id: _angular_core.InputSignal<string>;
3362
3611
  filename: _angular_core.InputSignal<string>;
3363
3612
  fileSize: _angular_core.InputSignal<string>;
3613
+ /** Aria-label for the delete button — override to localize (audit F20). */
3614
+ deleteAriaLabel: _angular_core.InputSignal<string>;
3364
3615
  deleteClick: _angular_core.OutputEmitterRef<void>;
3365
3616
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<VideoUploadBarComponent, never>;
3366
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<VideoUploadBarComponent, "pecb-video-upload-bar", never, { "videoUploadId": { "alias": "videoUploadId"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "fileSize": { "alias": "fileSize"; "required": false; "isSignal": true; }; }, { "deleteClick": "deleteClick"; }, never, never, true, never>;
3617
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<VideoUploadBarComponent, "pecb-video-upload-bar", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "fileSize": { "alias": "fileSize"; "required": false; "isSignal": true; }; "deleteAriaLabel": { "alias": "deleteAriaLabel"; "required": false; "isSignal": true; }; }, { "deleteClick": "deleteClick"; }, never, never, true, never>;
3367
3618
  }
3619
+
3368
3620
  type StatisticsIconColor = 'blue' | 'green' | 'orange' | 'red' | 'gray';
3369
3621
  declare class StatisticsCardComponent {
3370
- statsId: _angular_core.InputSignal<string>;
3622
+ id: _angular_core.InputSignal<string>;
3371
3623
  value: _angular_core.InputSignal<number>;
3372
3624
  label: _angular_core.InputSignal<string>;
3373
3625
  iconColor: _angular_core.InputSignal<StatisticsIconColor>;
3374
3626
  iconClasses: _angular_core.Signal<string[]>;
3375
3627
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatisticsCardComponent, never>;
3376
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatisticsCardComponent, "pecb-statistics-card", never, { "statsId": { "alias": "statsId"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3628
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatisticsCardComponent, "pecb-statistics-card", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3377
3629
  }
3630
+
3378
3631
  declare class PriceMethodComponent {
3379
- priceMethodId: _angular_core.InputSignal<string>;
3632
+ id: _angular_core.InputSignal<string>;
3380
3633
  leftLabel: _angular_core.InputSignal<string>;
3381
3634
  rightLabel: _angular_core.InputSignal<string>;
3382
3635
  selectionChange: _angular_core.OutputEmitterRef<number>;
@@ -3384,11 +3637,12 @@ declare class PriceMethodComponent {
3384
3637
  pillClasses(index: number): string[];
3385
3638
  select(index: number): void;
3386
3639
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PriceMethodComponent, never>;
3387
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PriceMethodComponent, "pecb-price-method", never, { "priceMethodId": { "alias": "priceMethodId"; "required": false; "isSignal": true; }; "leftLabel": { "alias": "leftLabel"; "required": false; "isSignal": true; }; "rightLabel": { "alias": "rightLabel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
3640
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PriceMethodComponent, "pecb-price-method", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "leftLabel": { "alias": "leftLabel"; "required": false; "isSignal": true; }; "rightLabel": { "alias": "rightLabel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
3388
3641
  }
3642
+
3389
3643
  type AppStatusColor = 'warning' | 'success' | 'error' | 'info';
3390
3644
  declare class ApplicationStatusBarComponent {
3391
- appStatusId: _angular_core.InputSignal<string>;
3645
+ id: _angular_core.InputSignal<string>;
3392
3646
  message: _angular_core.InputSignal<string>;
3393
3647
  statusLabel: _angular_core.InputSignal<string>;
3394
3648
  statusColor: _angular_core.InputSignal<AppStatusColor>;
@@ -3396,38 +3650,49 @@ declare class ApplicationStatusBarComponent {
3396
3650
  color: string;
3397
3651
  }>;
3398
3652
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ApplicationStatusBarComponent, never>;
3399
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ApplicationStatusBarComponent, "pecb-application-status-bar", never, { "appStatusId": { "alias": "appStatusId"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "statusColor": { "alias": "statusColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3653
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ApplicationStatusBarComponent, "pecb-application-status-bar", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "statusColor": { "alias": "statusColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3400
3654
  }
3655
+
3401
3656
  declare class ReasonForReturnComponent {
3402
- reasonId: _angular_core.InputSignal<string>;
3657
+ id: _angular_core.InputSignal<string>;
3403
3658
  message: _angular_core.InputSignal<string>;
3404
3659
  linkText: _angular_core.InputSignal<string>;
3405
3660
  linkUrl: _angular_core.InputSignal<string>;
3406
3661
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReasonForReturnComponent, never>;
3407
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReasonForReturnComponent, "pecb-reason-for-return", never, { "reasonId": { "alias": "reasonId"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "linkText": { "alias": "linkText"; "required": false; "isSignal": true; }; "linkUrl": { "alias": "linkUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3662
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReasonForReturnComponent, "pecb-reason-for-return", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "linkText": { "alias": "linkText"; "required": false; "isSignal": true; }; "linkUrl": { "alias": "linkUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3408
3663
  }
3664
+
3409
3665
  type ContentTagType = 'quiz' | 'video';
3410
3666
  type ContentTagDisplay = 'full' | 'icon-only';
3411
3667
  declare class ContentTypeTagComponent {
3412
3668
  type: _angular_core.InputSignal<ContentTagType>;
3413
3669
  displayMode: _angular_core.InputSignal<ContentTagDisplay>;
3670
+ /** Optional explicit label override. When set, takes precedence over the
3671
+ * type-driven default — use this to localize (audit F20). */
3672
+ label: _angular_core.InputSignal<string>;
3414
3673
  tagClasses: _angular_core.Signal<string[]>;
3674
+ displayLabel: _angular_core.Signal<string>;
3415
3675
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentTypeTagComponent, never>;
3416
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentTypeTagComponent, "pecb-content-type-tag", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3676
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentTypeTagComponent, "pecb-content-type-tag", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3417
3677
  }
3678
+
3418
3679
  type QuestionTagType = 'scenario' | 'true-false' | 'essay' | 'multiple-choice';
3419
3680
  type QuestionTagDisplay = 'full' | 'icon-only';
3420
3681
  declare class QuestionTypeTagComponent {
3421
3682
  type: _angular_core.InputSignal<QuestionTagType>;
3422
3683
  displayMode: _angular_core.InputSignal<QuestionTagDisplay>;
3684
+ /** Optional explicit label override. When set, takes precedence over the
3685
+ * type-driven default — use this to localize (audit F20). */
3686
+ label: _angular_core.InputSignal<string>;
3423
3687
  tagClasses: _angular_core.Signal<string[]>;
3424
3688
  displayLabel: _angular_core.Signal<string>;
3425
3689
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuestionTypeTagComponent, never>;
3426
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuestionTypeTagComponent, "pecb-question-type-tag", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3690
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuestionTypeTagComponent, "pecb-question-type-tag", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3427
3691
  }
3692
+
3428
3693
  type PdfCardVariant = 'default' | 'hover' | 'compact';
3429
3694
  declare class StandardsPdfCardComponent {
3430
- pdfCardId: _angular_core.InputSignal<string>;
3695
+ id: _angular_core.InputSignal<string>;
3431
3696
  filename: _angular_core.InputSignal<string>;
3432
3697
  variant: _angular_core.InputSignal<PdfCardVariant>;
3433
3698
  showViewButton: _angular_core.InputSignal<boolean>;
@@ -3435,8 +3700,9 @@ declare class StandardsPdfCardComponent {
3435
3700
  cardClasses: _angular_core.Signal<string[]>;
3436
3701
  buttonClasses: _angular_core.Signal<string[]>;
3437
3702
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StandardsPdfCardComponent, never>;
3438
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StandardsPdfCardComponent, "pecb-standards-pdf-card", never, { "pdfCardId": { "alias": "pdfCardId"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showViewButton": { "alias": "showViewButton"; "required": false; "isSignal": true; }; }, { "viewClick": "viewClick"; }, never, never, true, never>;
3703
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StandardsPdfCardComponent, "pecb-standards-pdf-card", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showViewButton": { "alias": "showViewButton"; "required": false; "isSignal": true; }; }, { "viewClick": "viewClick"; }, never, never, true, never>;
3439
3704
  }
3705
+
3440
3706
  type NoteSidebarState = 'default' | 'unread' | 'active';
3441
3707
  type NoteSidebarPosition = 'top' | 'middle' | 'bottom' | 'single';
3442
3708
  declare class NoteSidebarItemComponent {
@@ -3454,22 +3720,25 @@ declare class NoteSidebarItemComponent {
3454
3720
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NoteSidebarItemComponent, never>;
3455
3721
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NoteSidebarItemComponent, "pecb-note-sidebar-item", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3456
3722
  }
3723
+
3457
3724
  declare class AuthorDateTimeComponent {
3458
- authorDtId: _angular_core.InputSignal<string>;
3725
+ id: _angular_core.InputSignal<string>;
3459
3726
  author: _angular_core.InputSignal<string>;
3460
3727
  date: _angular_core.InputSignal<string>;
3461
3728
  time: _angular_core.InputSignal<string>;
3462
3729
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthorDateTimeComponent, never>;
3463
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AuthorDateTimeComponent, "pecb-author-date-time", never, { "authorDtId": { "alias": "authorDtId"; "required": false; "isSignal": true; }; "author": { "alias": "author"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3730
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AuthorDateTimeComponent, "pecb-author-date-time", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "author": { "alias": "author"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3464
3731
  }
3732
+
3465
3733
  type CheckDeleteType = 'check' | 'delete';
3466
3734
  declare class CheckDeleteIconComponent {
3467
3735
  type: _angular_core.InputSignal<CheckDeleteType>;
3468
3736
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckDeleteIconComponent, never>;
3469
3737
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckDeleteIconComponent, "pecb-check-delete-icon", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3470
3738
  }
3739
+
3471
3740
  declare class ProfileElementsCardComponent {
3472
- profileCardId: _angular_core.InputSignal<string>;
3741
+ id: _angular_core.InputSignal<string>;
3473
3742
  name: _angular_core.InputSignal<string>;
3474
3743
  email: _angular_core.InputSignal<string>;
3475
3744
  userId: _angular_core.InputSignal<string>;
@@ -3477,28 +3746,31 @@ declare class ProfileElementsCardComponent {
3477
3746
  badgeLabel: _angular_core.InputSignal<string>;
3478
3747
  avatarUrl: _angular_core.InputSignal<string>;
3479
3748
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProfileElementsCardComponent, never>;
3480
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProfileElementsCardComponent, "pecb-profile-elements-card", never, { "profileCardId": { "alias": "profileCardId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "email": { "alias": "email"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; "statusText": { "alias": "statusText"; "required": false; "isSignal": true; }; "badgeLabel": { "alias": "badgeLabel"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3749
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProfileElementsCardComponent, "pecb-profile-elements-card", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "email": { "alias": "email"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; "statusText": { "alias": "statusText"; "required": false; "isSignal": true; }; "badgeLabel": { "alias": "badgeLabel"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3481
3750
  }
3751
+
3482
3752
  declare class UserWithEmailComponent {
3483
- userEmailId: _angular_core.InputSignal<string>;
3753
+ id: _angular_core.InputSignal<string>;
3484
3754
  name: _angular_core.InputSignal<string>;
3485
3755
  email: _angular_core.InputSignal<string>;
3486
3756
  avatarUrl: _angular_core.InputSignal<string>;
3487
3757
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserWithEmailComponent, never>;
3488
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserWithEmailComponent, "pecb-user-with-email", never, { "userEmailId": { "alias": "userEmailId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "email": { "alias": "email"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3758
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserWithEmailComponent, "pecb-user-with-email", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "email": { "alias": "email"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3489
3759
  }
3760
+
3490
3761
  declare class CancelUpdateButtonsComponent {
3491
- cancelUpdateId: _angular_core.InputSignal<string>;
3762
+ id: _angular_core.InputSignal<string>;
3492
3763
  cancelLabel: _angular_core.InputSignal<string>;
3493
3764
  updateLabel: _angular_core.InputSignal<string>;
3494
3765
  cancelClick: _angular_core.OutputEmitterRef<void>;
3495
3766
  updateClick: _angular_core.OutputEmitterRef<void>;
3496
3767
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CancelUpdateButtonsComponent, never>;
3497
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CancelUpdateButtonsComponent, "pecb-cancel-update-buttons", never, { "cancelUpdateId": { "alias": "cancelUpdateId"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "updateLabel": { "alias": "updateLabel"; "required": false; "isSignal": true; }; }, { "cancelClick": "cancelClick"; "updateClick": "updateClick"; }, never, never, true, never>;
3768
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CancelUpdateButtonsComponent, "pecb-cancel-update-buttons", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "updateLabel": { "alias": "updateLabel"; "required": false; "isSignal": true; }; }, { "cancelClick": "cancelClick"; "updateClick": "updateClick"; }, never, never, true, never>;
3498
3769
  }
3770
+
3499
3771
  type InformationBoxVariant = 'default' | 'developer';
3500
3772
  declare class InformationBoxComponent {
3501
- infoBoxId: _angular_core.InputSignal<string>;
3773
+ id: _angular_core.InputSignal<string>;
3502
3774
  variant: _angular_core.InputSignal<InformationBoxVariant>;
3503
3775
  text: _angular_core.InputSignal<string>;
3504
3776
  title: _angular_core.InputSignal<string>;
@@ -3508,70 +3780,85 @@ declare class InformationBoxComponent {
3508
3780
  'pecb-info-box--developer': boolean;
3509
3781
  }>;
3510
3782
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InformationBoxComponent, never>;
3511
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InformationBoxComponent, "pecb-information-box", never, { "infoBoxId": { "alias": "infoBoxId"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3783
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InformationBoxComponent, "pecb-information-box", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3512
3784
  }
3785
+
3513
3786
  declare class RequestSentByComponent {
3514
- requestSentId: _angular_core.InputSignal<string>;
3787
+ id: _angular_core.InputSignal<string>;
3515
3788
  name: _angular_core.InputSignal<string>;
3516
3789
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RequestSentByComponent, never>;
3517
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RequestSentByComponent, "pecb-request-sent-by", never, { "requestSentId": { "alias": "requestSentId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3790
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RequestSentByComponent, "pecb-request-sent-by", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3518
3791
  }
3792
+
3519
3793
  type NotificationStatusType = 'read' | 'unread';
3520
3794
  declare class NotificationStatusLinkComponent {
3521
- notifLinkId: _angular_core.InputSignal<string>;
3795
+ id: _angular_core.InputSignal<string>;
3522
3796
  type: _angular_core.InputSignal<NotificationStatusType>;
3797
+ /** Optional explicit label override. When set, takes precedence over the
3798
+ * type-driven default — use this to localize (audit F20). */
3799
+ label: _angular_core.InputSignal<string>;
3523
3800
  statusClick: _angular_core.OutputEmitterRef<void>;
3524
- linkLabel: _angular_core.Signal<"Mark as Read" | "Mark as Unread">;
3801
+ linkLabel: _angular_core.Signal<string>;
3525
3802
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationStatusLinkComponent, never>;
3526
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NotificationStatusLinkComponent, "pecb-notification-status-link", never, { "notifLinkId": { "alias": "notifLinkId"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "statusClick": "statusClick"; }, never, never, true, never>;
3803
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NotificationStatusLinkComponent, "pecb-notification-status-link", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "statusClick": "statusClick"; }, never, never, true, never>;
3527
3804
  }
3805
+
3528
3806
  declare class EditCoverPhotoComponent {
3529
- editCoverId: _angular_core.InputSignal<string>;
3807
+ id: _angular_core.InputSignal<string>;
3530
3808
  editClick: _angular_core.OutputEmitterRef<void>;
3531
3809
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EditCoverPhotoComponent, never>;
3532
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditCoverPhotoComponent, "pecb-edit-cover-photo", never, { "editCoverId": { "alias": "editCoverId"; "required": false; "isSignal": true; }; }, { "editClick": "editClick"; }, never, never, true, never>;
3810
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditCoverPhotoComponent, "pecb-edit-cover-photo", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, { "editClick": "editClick"; }, never, never, true, never>;
3533
3811
  }
3812
+
3534
3813
  type RequestStatusIconType = 'warning' | 'success';
3535
3814
  declare class RequestStatusBarComponent {
3536
- requestStatusId: _angular_core.InputSignal<string>;
3815
+ id: _angular_core.InputSignal<string>;
3537
3816
  message: _angular_core.InputSignal<string>;
3538
3817
  linkText: _angular_core.InputSignal<string>;
3539
3818
  iconType: _angular_core.InputSignal<RequestStatusIconType>;
3540
3819
  linkClick: _angular_core.OutputEmitterRef<void>;
3541
3820
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RequestStatusBarComponent, never>;
3542
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RequestStatusBarComponent, "pecb-request-status-bar", never, { "requestStatusId": { "alias": "requestStatusId"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "linkText": { "alias": "linkText"; "required": false; "isSignal": true; }; "iconType": { "alias": "iconType"; "required": false; "isSignal": true; }; }, { "linkClick": "linkClick"; }, never, never, true, never>;
3821
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RequestStatusBarComponent, "pecb-request-status-bar", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "linkText": { "alias": "linkText"; "required": false; "isSignal": true; }; "iconType": { "alias": "iconType"; "required": false; "isSignal": true; }; }, { "linkClick": "linkClick"; }, never, never, true, never>;
3543
3822
  }
3823
+
3544
3824
  type VerifyItemStatus = 'pending' | 'verified' | 'rejected' | 'warning';
3545
3825
  interface VerifyChecklistItem {
3546
3826
  text: string;
3547
3827
  status: VerifyItemStatus;
3548
3828
  }
3549
3829
  declare class VerifyChecklistComponent {
3550
- verifyChecklistId: _angular_core.InputSignal<string>;
3830
+ id: _angular_core.InputSignal<string>;
3551
3831
  items: _angular_core.InputSignal<VerifyChecklistItem[]>;
3552
3832
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<VerifyChecklistComponent, never>;
3553
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<VerifyChecklistComponent, "pecb-verify-checklist", never, { "verifyChecklistId": { "alias": "verifyChecklistId"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3833
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<VerifyChecklistComponent, "pecb-verify-checklist", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3554
3834
  }
3835
+
3555
3836
  type EditButtonVariant = 'default' | 'black';
3556
3837
  declare class EditButtonComponent {
3557
- editBtnId: _angular_core.InputSignal<string>;
3838
+ id: _angular_core.InputSignal<string>;
3558
3839
  variant: _angular_core.InputSignal<EditButtonVariant>;
3840
+ /** Aria-label for the button — override to localize (audit F20). */
3841
+ ariaLabel: _angular_core.InputSignal<string>;
3559
3842
  editBtnClick: _angular_core.OutputEmitterRef<void>;
3560
3843
  btnClasses: _angular_core.Signal<string[]>;
3561
3844
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EditButtonComponent, never>;
3562
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditButtonComponent, "pecb-edit-button", never, { "editBtnId": { "alias": "editBtnId"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "editBtnClick": "editBtnClick"; }, never, never, true, never>;
3845
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditButtonComponent, "pecb-edit-button", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "editBtnClick": "editBtnClick"; }, never, never, true, never>;
3563
3846
  }
3847
+
3564
3848
  type AddButtonVariant = 'default' | 'dark';
3565
3849
  declare class AddButtonComponent {
3566
- addBtnId: _angular_core.InputSignal<string>;
3850
+ id: _angular_core.InputSignal<string>;
3567
3851
  variant: _angular_core.InputSignal<AddButtonVariant>;
3852
+ /** Aria-label for the button — override to localize (audit F20). */
3853
+ ariaLabel: _angular_core.InputSignal<string>;
3568
3854
  addBtnClick: _angular_core.OutputEmitterRef<void>;
3569
3855
  btnClasses: _angular_core.Signal<string[]>;
3570
3856
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AddButtonComponent, never>;
3571
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AddButtonComponent, "pecb-add-button", never, { "addBtnId": { "alias": "addBtnId"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "addBtnClick": "addBtnClick"; }, never, never, true, never>;
3857
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AddButtonComponent, "pecb-add-button", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "addBtnClick": "addBtnClick"; }, never, never, true, never>;
3572
3858
  }
3859
+
3573
3860
  declare class HorizontalStepsComponent {
3574
- hStepsId: _angular_core.InputSignal<string>;
3861
+ id: _angular_core.InputSignal<string>;
3575
3862
  totalSteps: _angular_core.InputSignal<number>;
3576
3863
  activeStep: _angular_core.InputSignal<number>;
3577
3864
  stepLabels: _angular_core.InputSignal<string[]>;
@@ -3580,25 +3867,27 @@ declare class HorizontalStepsComponent {
3580
3867
  label: string;
3581
3868
  }[]>;
3582
3869
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HorizontalStepsComponent, never>;
3583
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HorizontalStepsComponent, "pecb-horizontal-steps", never, { "hStepsId": { "alias": "hStepsId"; "required": false; "isSignal": true; }; "totalSteps": { "alias": "totalSteps"; "required": false; "isSignal": true; }; "activeStep": { "alias": "activeStep"; "required": false; "isSignal": true; }; "stepLabels": { "alias": "stepLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3870
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HorizontalStepsComponent, "pecb-horizontal-steps", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "totalSteps": { "alias": "totalSteps"; "required": false; "isSignal": true; }; "activeStep": { "alias": "activeStep"; "required": false; "isSignal": true; }; "stepLabels": { "alias": "stepLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3584
3871
  }
3872
+
3585
3873
  type RadioDisplayState = 'deactivated' | 'activated';
3586
3874
  declare class RadioDisplayComponent {
3587
- radioDisplayId: _angular_core.InputSignal<string>;
3875
+ id: _angular_core.InputSignal<string>;
3588
3876
  state: _angular_core.InputSignal<RadioDisplayState>;
3589
3877
  label: _angular_core.InputSignal<string>;
3590
3878
  radioClasses: _angular_core.Signal<string[]>;
3591
3879
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioDisplayComponent, never>;
3592
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioDisplayComponent, "pecb-radio-display", never, { "radioDisplayId": { "alias": "radioDisplayId"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3880
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioDisplayComponent, "pecb-radio-display", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3593
3881
  }
3882
+
3594
3883
  type CheckboxDisplayState = 'deactivated' | 'activated' | 'gray';
3595
3884
  declare class CheckboxDisplayComponent {
3596
- checkboxDisplayId: _angular_core.InputSignal<string>;
3885
+ id: _angular_core.InputSignal<string>;
3597
3886
  state: _angular_core.InputSignal<CheckboxDisplayState>;
3598
3887
  label: _angular_core.InputSignal<string>;
3599
3888
  checkboxClasses: _angular_core.Signal<string[]>;
3600
3889
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxDisplayComponent, never>;
3601
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxDisplayComponent, "pecb-checkbox-display", never, { "checkboxDisplayId": { "alias": "checkboxDisplayId"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3890
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxDisplayComponent, "pecb-checkbox-display", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3602
3891
  }
3603
3892
 
3604
3893
  type FilterFieldType = 'dropdown' | 'input' | 'number' | 'date-range' | 'number-range';
@@ -3632,7 +3921,7 @@ declare class FilterColumnsComponent implements OnInit, OnChanges, OnDestroy, Af
3632
3921
  modalPanel?: ElementRef<HTMLElement>;
3633
3922
  id: _angular_core.InputSignal<string>;
3634
3923
  /** Whether the modal is open */
3635
- isOpen: _angular_core.InputSignal<boolean>;
3924
+ isOpen: _angular_core.ModelSignal<boolean>;
3636
3925
  /** Whether clicking the backdrop closes the modal */
3637
3926
  closeOnBackdropClick: _angular_core.InputSignal<boolean>;
3638
3927
  /** Whether pressing Escape closes the modal */
@@ -3698,7 +3987,7 @@ declare class FilterColumnsComponent implements OnInit, OnChanges, OnDestroy, Af
3698
3987
  onViewNameChange(value: string): void;
3699
3988
  onDefaultViewChange(checked: boolean): void;
3700
3989
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterColumnsComponent, never>;
3701
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterColumnsComponent, "pecb-filter-columns", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "filterFields": { "alias": "filterFields"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; "showSaveAsView": { "alias": "showSaveAsView"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; }, { "applied": "applied"; "cancelled": "cancelled"; "closed": "closed"; }, never, never, true, never>;
3990
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterColumnsComponent, "pecb-filter-columns", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "filterFields": { "alias": "filterFields"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; "showSaveAsView": { "alias": "showSaveAsView"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "applied": "applied"; "cancelled": "cancelled"; "closed": "closed"; }, never, never, true, never>;
3702
3991
  }
3703
3992
 
3704
3993
  type FileUploadVariant = 'dropzone' | 'inline';
@@ -3742,6 +4031,38 @@ declare class FileUploadComponent implements OnInit {
3742
4031
  browseLabel: _angular_core.InputSignal<string>;
3743
4032
  /** Upload button label (inline variant) */
3744
4033
  uploadLabel: _angular_core.InputSignal<string>;
4034
+ /** Visible "Click to upload" link in the dropzone. */
4035
+ clickToUploadText: _angular_core.InputSignal<string>;
4036
+ /** Visible "or drag and drop" subtitle in the dropzone. */
4037
+ dragAndDropText: _angular_core.InputSignal<string>;
4038
+ /** Visible "OR" divider text. */
4039
+ orDividerText: _angular_core.InputSignal<string>;
4040
+ /** Visible title shown during uploading state. */
4041
+ uploadingTitle: _angular_core.InputSignal<string>;
4042
+ /** Visible "Clear Upload" action text after a successful single upload. */
4043
+ clearUploadText: _angular_core.InputSignal<string>;
4044
+ /** Visible "Failed to Upload" title shown in error state. */
4045
+ failedToUploadText: _angular_core.InputSignal<string>;
4046
+ /** Default error message used when `file.errorMessage` is unset. */
4047
+ defaultErrorMessage: _angular_core.InputSignal<string>;
4048
+ /** Visible "Try Again" retry action text. */
4049
+ tryAgainText: _angular_core.InputSignal<string>;
4050
+ /** Visible "Uploaded Files" label above the multi-file list. */
4051
+ uploadedFilesLabel: _angular_core.InputSignal<string>;
4052
+ /** Aria-label for the header close (×) button. */
4053
+ closeAriaLabel: _angular_core.InputSignal<string>;
4054
+ /** Aria-label for the cancel-upload (×) button on each file row. */
4055
+ cancelUploadAriaLabel: _angular_core.InputSignal<string>;
4056
+ /** Aria-label for the delete-file (trash) button on each completed file row. */
4057
+ deleteFileAriaLabel: _angular_core.InputSignal<string>;
4058
+ /** Aria-label for the download-file button on each completed file row. */
4059
+ downloadFileAriaLabel: _angular_core.InputSignal<string>;
4060
+ /** Suffix for the circular progress aria-label (e.g. `42% uploaded`). */
4061
+ uploadedSuffix: _angular_core.InputSignal<string>;
4062
+ /** Aria-label prefix for the single-file dropzone. Rendered as `<this> <formats>`. */
4063
+ uploadFileAriaLabelPrefix: _angular_core.InputSignal<string>;
4064
+ /** Aria-label prefix for the multi-file dropzone. Rendered as `<this> <formats>`. */
4065
+ uploadFilesAriaLabelPrefix: _angular_core.InputSignal<string>;
3745
4066
  /** Whether the component is disabled */
3746
4067
  disabled: _angular_core.InputSignal<boolean>;
3747
4068
  /** Whether to show header with title and close button (multiple dropzone) */
@@ -3798,7 +4119,7 @@ declare class FileUploadComponent implements OnInit {
3798
4119
  formatFileDate(date: Date): string;
3799
4120
  getFileTypeColor(type: string): string;
3800
4121
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploadComponent, never>;
3801
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUploadComponent, "pecb-file-upload", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "uploadTitle": { "alias": "uploadTitle"; "required": false; "isSignal": true; }; "uploadDescription": { "alias": "uploadDescription"; "required": false; "isSignal": true; }; "maxSizeLabel": { "alias": "maxSizeLabel"; "required": false; "isSignal": true; }; "acceptedFormatsText": { "alias": "acceptedFormatsText"; "required": false; "isSignal": true; }; "browseLabel": { "alias": "browseLabel"; "required": false; "isSignal": true; }; "uploadLabel": { "alias": "uploadLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "fileCancelled": "fileCancelled"; "fileRetry": "fileRetry"; "fileDeleted": "fileDeleted"; "fileDownload": "fileDownload"; "cleared": "cleared"; "closeClicked": "closeClicked"; }, never, never, true, never>;
4122
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUploadComponent, "pecb-file-upload", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "uploadTitle": { "alias": "uploadTitle"; "required": false; "isSignal": true; }; "uploadDescription": { "alias": "uploadDescription"; "required": false; "isSignal": true; }; "maxSizeLabel": { "alias": "maxSizeLabel"; "required": false; "isSignal": true; }; "acceptedFormatsText": { "alias": "acceptedFormatsText"; "required": false; "isSignal": true; }; "browseLabel": { "alias": "browseLabel"; "required": false; "isSignal": true; }; "uploadLabel": { "alias": "uploadLabel"; "required": false; "isSignal": true; }; "clickToUploadText": { "alias": "clickToUploadText"; "required": false; "isSignal": true; }; "dragAndDropText": { "alias": "dragAndDropText"; "required": false; "isSignal": true; }; "orDividerText": { "alias": "orDividerText"; "required": false; "isSignal": true; }; "uploadingTitle": { "alias": "uploadingTitle"; "required": false; "isSignal": true; }; "clearUploadText": { "alias": "clearUploadText"; "required": false; "isSignal": true; }; "failedToUploadText": { "alias": "failedToUploadText"; "required": false; "isSignal": true; }; "defaultErrorMessage": { "alias": "defaultErrorMessage"; "required": false; "isSignal": true; }; "tryAgainText": { "alias": "tryAgainText"; "required": false; "isSignal": true; }; "uploadedFilesLabel": { "alias": "uploadedFilesLabel"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; "cancelUploadAriaLabel": { "alias": "cancelUploadAriaLabel"; "required": false; "isSignal": true; }; "deleteFileAriaLabel": { "alias": "deleteFileAriaLabel"; "required": false; "isSignal": true; }; "downloadFileAriaLabel": { "alias": "downloadFileAriaLabel"; "required": false; "isSignal": true; }; "uploadedSuffix": { "alias": "uploadedSuffix"; "required": false; "isSignal": true; }; "uploadFileAriaLabelPrefix": { "alias": "uploadFileAriaLabelPrefix"; "required": false; "isSignal": true; }; "uploadFilesAriaLabelPrefix": { "alias": "uploadFilesAriaLabelPrefix"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "fileCancelled": "fileCancelled"; "fileRetry": "fileRetry"; "fileDeleted": "fileDeleted"; "fileDownload": "fileDownload"; "cleared": "cleared"; "closeClicked": "closeClicked"; }, never, never, true, never>;
3802
4123
  }
3803
4124
 
3804
4125
  type ToolbarVariant = 'buttons' | 'tabs';
@@ -3846,6 +4167,10 @@ declare class ToolbarBarComponent {
3846
4167
  buttons: _angular_core.InputSignal<ToolbarButton[]>;
3847
4168
  /** Tabs configuration (for variant='tabs') */
3848
4169
  tabs: _angular_core.InputSignal<ToolbarTab[]>;
4170
+ /** Visible text for the "Go Back" button. */
4171
+ backText: _angular_core.InputSignal<string>;
4172
+ /** Placeholder for the search input. */
4173
+ searchPlaceholder: _angular_core.InputSignal<string>;
3849
4174
  /** Emits when Go Back is clicked */
3850
4175
  backClick: _angular_core.OutputEmitterRef<void>;
3851
4176
  /** Emits when a button is clicked */
@@ -3869,7 +4194,7 @@ declare class ToolbarBarComponent {
3869
4194
  /** Handle search input */
3870
4195
  onSearchInput(event: Event): void;
3871
4196
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToolbarBarComponent, never>;
3872
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToolbarBarComponent, "pecb-toolbar-bar", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; }, { "backClick": "backClick"; "buttonClick": "buttonClick"; "tabClick": "tabClick"; "searchChange": "searchChange"; }, never, never, true, never>;
4197
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToolbarBarComponent, "pecb-toolbar-bar", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; "backText": { "alias": "backText"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; }, { "backClick": "backClick"; "buttonClick": "buttonClick"; "tabClick": "tabClick"; "searchChange": "searchChange"; }, never, never, true, never>;
3873
4198
  }
3874
4199
 
3875
4200
  interface NoteItem {
@@ -4052,7 +4377,7 @@ declare class TourComponent implements OnInit, OnChanges {
4052
4377
  /** Tour steps configuration */
4053
4378
  steps: _angular_core.InputSignal<TourStep[]>;
4054
4379
  /** Whether the tour is visible */
4055
- isOpen: _angular_core.InputSignal<boolean>;
4380
+ isOpen: _angular_core.ModelSignal<boolean>;
4056
4381
  /** Label for the previous button */
4057
4382
  previousLabel: _angular_core.InputSignal<string>;
4058
4383
  /** Label for the next button */
@@ -4087,28 +4412,339 @@ declare class TourComponent implements OnInit, OnChanges {
4087
4412
  onClose(): void;
4088
4413
  goToStep(index: number): void;
4089
4414
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TourComponent, never>;
4090
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TourComponent, "pecb-tour", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "indicatorType": { "alias": "indicatorType"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "previousLabel": { "alias": "previousLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "finishLabel": { "alias": "finishLabel"; "required": false; "isSignal": true; }; "initialStep": { "alias": "initialStep"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "previousClicked": "previousClicked"; "nextClicked": "nextClicked"; "finished": "finished"; "stepChanged": "stepChanged"; }, never, never, true, never>;
4415
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TourComponent, "pecb-tour", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "indicatorType": { "alias": "indicatorType"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "previousLabel": { "alias": "previousLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "finishLabel": { "alias": "finishLabel"; "required": false; "isSignal": true; }; "initialStep": { "alias": "initialStep"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "closed": "closed"; "previousClicked": "previousClicked"; "nextClicked": "nextClicked"; "finished": "finished"; "stepChanged": "stepChanged"; }, never, never, true, never>;
4091
4416
  }
4092
4417
 
4418
+ type AdminHeaderFieldType = 'text' | 'badge' | 'dropdown' | 'link' | 'date' | 'profile' | 'radio' | 'checkbox' | 'paragraph' | 'progress' | 'custom';
4093
4419
  /**
4094
- * PECB UI Components Module
4420
+ * Directive to define a custom field template.
4421
+ * Use with `type: 'custom'` and a matching `templateId`.
4095
4422
  *
4096
- * A professional Angular components library with TypeScript and SCSS.
4097
- * Import this module to use all PECB UI components in your application.
4423
+ * ```html
4424
+ * <pecb-admin-header [fields]="fields">
4425
+ * <ng-template pecbAdminHeaderField="my-widget" let-field>
4426
+ * <my-custom-widget [data]="field.value"></my-custom-widget>
4427
+ * </ng-template>
4428
+ * </pecb-admin-header>
4429
+ * ```
4430
+ */
4431
+ declare class AdminHeaderFieldTemplateDirective {
4432
+ templateRef: TemplateRef<unknown>;
4433
+ pecbAdminHeaderField: _angular_core.InputSignal<string>;
4434
+ constructor(templateRef: TemplateRef<unknown>);
4435
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminHeaderFieldTemplateDirective, never>;
4436
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AdminHeaderFieldTemplateDirective, "ng-template[pecbAdminHeaderField]", never, { "pecbAdminHeaderField": { "alias": "pecbAdminHeaderField"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
4437
+ }
4438
+ type AdminHeaderBadgeVariant = 'default' | 'success' | 'error' | 'warning' | 'info' | 'accent' | 'outline';
4439
+ type AdminHeaderActionType = 'add' | 'label';
4440
+ type AdminHeaderMetadataType = 'text' | 'badge' | 'date';
4441
+ /**
4442
+ * Profile configuration for the admin header.
4443
+ * Only `name` is required — all other fields are optional and the layout adapts.
4444
+ */
4445
+ interface AdminHeaderProfile {
4446
+ /** Avatar image URL */
4447
+ src?: string;
4448
+ /** Avatar fallback initials */
4449
+ initials?: string;
4450
+ /** Display name (always shown) */
4451
+ name: string;
4452
+ /** Email address */
4453
+ email?: string;
4454
+ /** User/Entity ID */
4455
+ id?: string | number;
4456
+ /** Verification status text (e.g. "Verification is under review") */
4457
+ verificationStatus?: string;
4458
+ /** Badge label (e.g. "Member") */
4459
+ badge?: string;
4460
+ /** Badge variant */
4461
+ badgeVariant?: AdminHeaderBadgeVariant;
4462
+ }
4463
+ /**
4464
+ * Action button/chip displayed next to the profile info.
4465
+ */
4466
+ interface AdminHeaderAction {
4467
+ /** `'add'` renders a + icon button, `'label'` renders a chip */
4468
+ type: AdminHeaderActionType;
4469
+ /** Chip label text */
4470
+ label?: string;
4471
+ /** Chip variant: `'filled'` (dark) or `'outline'` */
4472
+ variant?: 'filled' | 'outline';
4473
+ /** Button variant — overrides the default mapping from `variant`. Accepts any ButtonVariant value. */
4474
+ buttonVariant?: ButtonVariant;
4475
+ /** Whether the chip shows a + icon */
4476
+ showAddIcon?: boolean;
4477
+ /** Icon name from IconRegistry (overrides the default + icon) */
4478
+ icon?: string;
4479
+ /** Position of the icon: `'left'` (default) or `'right'` */
4480
+ iconPosition?: 'left' | 'right';
4481
+ /** Whether the chip shows a x trailing remove icon */
4482
+ removable?: boolean;
4483
+ /** Unique identifier for click events */
4484
+ id?: string;
4485
+ }
4486
+ /**
4487
+ * Metadata item displayed next to the profile (alternative to actions).
4488
+ */
4489
+ interface AdminHeaderMetadata {
4490
+ /** Display label */
4491
+ label?: string;
4492
+ /** Display value */
4493
+ value?: string;
4494
+ /** Item type */
4495
+ type?: AdminHeaderMetadataType;
4496
+ /** Badge variant when type is 'badge' */
4497
+ badgeVariant?: AdminHeaderBadgeVariant;
4498
+ /** Icon name for date type */
4499
+ icon?: string;
4500
+ }
4501
+ /**
4502
+ * A single field in the data grid.
4503
+ * The `type` discriminator determines which sub-template renders.
4504
+ */
4505
+ interface AdminHeaderField {
4506
+ /** Field renderer type */
4507
+ type: AdminHeaderFieldType;
4508
+ /** Field label (shown above the value in lighter text) */
4509
+ label?: string;
4510
+ /** Field value */
4511
+ value?: string;
4512
+ /** Badge variant (for `type: 'badge'`) */
4513
+ badgeVariant?: AdminHeaderBadgeVariant;
4514
+ /** Link URL (for `type: 'link'`) */
4515
+ linkUrl?: string;
4516
+ /** Icon name from registry (for `type: 'date'`) */
4517
+ dateIcon?: string;
4518
+ /** Date status: `'success'` shows green check (for `type: 'date'`) */
4519
+ dateStatus?: 'success' | 'default';
4520
+ /** Profile image URL (for `type: 'profile'`) */
4521
+ profileSrc?: string;
4522
+ /** Profile initials fallback (for `type: 'profile'`) */
4523
+ profileInitials?: string;
4524
+ /** Profile name (for `type: 'profile'`) */
4525
+ profileName?: string;
4526
+ /** Profile email (for `type: 'profile'`) */
4527
+ profileEmail?: string;
4528
+ /** Dropdown options (for `type: 'dropdown'`) */
4529
+ options?: {
4530
+ label: string;
4531
+ value: string;
4532
+ }[];
4533
+ /** Currently selected dropdown value (for `type: 'dropdown'`) */
4534
+ selectedValue?: string;
4535
+ /** Selected radio/checkbox value: `'yes'` or `'no'` (for `type: 'radio'` | `'checkbox'`) */
4536
+ selectedOption?: 'yes' | 'no';
4537
+ /** Progress value 0–100 (for `type: 'progress'`) */
4538
+ progressValue?: number;
4539
+ /** Metadata text shown below the bar (for `type: 'progress'`) */
4540
+ progressMetadata?: string;
4541
+ /** Whether to show the percentage label (for `type: 'progress'`, default true) */
4542
+ progressShowPercentage?: boolean;
4543
+ /** Template ID to match a projected `ng-template[pecbAdminHeaderField]` (for `type: 'custom'`) */
4544
+ templateId?: string;
4545
+ /** Arbitrary data passed to custom templates via `let-data` (for `type: 'custom'`) */
4546
+ data?: Record<string, unknown>;
4547
+ }
4548
+ declare class AdminHeaderComponent {
4549
+ private readonly registry;
4550
+ private readonly sanitizer;
4551
+ /** Projected custom field templates */
4552
+ fieldTemplates: _angular_core.Signal<readonly AdminHeaderFieldTemplateDirective[]>;
4553
+ /** Unique element ID */
4554
+ id: _angular_core.InputSignal<string>;
4555
+ /** Background image URL (e.g. path to banner SVG) */
4556
+ backgroundUrl: _angular_core.InputSignal<string | undefined>;
4557
+ /** Title displayed top-left */
4558
+ title: _angular_core.InputSignal<string | undefined>;
4559
+ /**
4560
+ * Icon name for the top-right action button. Resolved through the library's
4561
+ * IconRegistry, so only library-registered (trusted) SVGs can be rendered.
4562
+ *
4563
+ * Audit F19: the previous `headerActionIconSvg` raw-SVG-string input was
4564
+ * removed — it let consumer-supplied markup reach `bypassSecurityTrustHtml()`,
4565
+ * an XSS vector. To use a custom icon, register it once via
4566
+ * `IconRegistry.register(name, svg)` and pass its name here.
4567
+ */
4568
+ headerActionIcon: _angular_core.InputSignal<string | undefined>;
4569
+ /** Accessible label for the header action button */
4570
+ headerActionLabel: _angular_core.InputSignal<string>;
4571
+ /** Profile configuration. When omitted, no profile row renders. */
4572
+ profile: _angular_core.InputSignal<AdminHeaderProfile | undefined>;
4573
+ /** Action chips/buttons displayed to the right of the profile */
4574
+ actions: _angular_core.InputSignal<AdminHeaderAction[]>;
4575
+ /** Metadata items displayed to the right of the profile (alternative to actions) */
4576
+ metadata: _angular_core.InputSignal<AdminHeaderMetadata[]>;
4577
+ /** Flat array of fields rendered in the data grid */
4578
+ fields: _angular_core.InputSignal<AdminHeaderField[]>;
4579
+ /** Number of columns in the data grid (1–4) */
4580
+ columns: _angular_core.InputSignal<2 | 1 | 3 | 4>;
4581
+ /** Emits when the top-right action button is clicked */
4582
+ headerActionClicked: _angular_core.OutputEmitterRef<void>;
4583
+ /** Emits the action id/index when an action chip is clicked */
4584
+ actionClicked: _angular_core.OutputEmitterRef<{
4585
+ action: AdminHeaderAction;
4586
+ index: number;
4587
+ }>;
4588
+ /** Emits when an action chip's remove (x) button is clicked */
4589
+ actionRemoved: _angular_core.OutputEmitterRef<{
4590
+ action: AdminHeaderAction;
4591
+ index: number;
4592
+ }>;
4593
+ /** Emits when a link field is clicked */
4594
+ linkClicked: _angular_core.OutputEmitterRef<{
4595
+ field: AdminHeaderField;
4596
+ url: string;
4597
+ }>;
4598
+ /** Emits when a dropdown field value changes */
4599
+ dropdownChanged: _angular_core.OutputEmitterRef<{
4600
+ field: AdminHeaderField;
4601
+ value: string;
4602
+ }>;
4603
+ /** Emits when a radio/checkbox field value changes */
4604
+ fieldOptionChanged: _angular_core.OutputEmitterRef<{
4605
+ field: AdminHeaderField;
4606
+ value: "yes" | "no";
4607
+ }>;
4608
+ hasTitle: _angular_core.Signal<boolean>;
4609
+ hasProfile: _angular_core.Signal<boolean>;
4610
+ hasActions: _angular_core.Signal<boolean>;
4611
+ hasMetadata: _angular_core.Signal<boolean>;
4612
+ hasFields: _angular_core.Signal<boolean>;
4613
+ hasHeaderAction: _angular_core.Signal<boolean>;
4614
+ hasTitleBar: _angular_core.Signal<boolean>;
4615
+ /** CSS class for the grid based on column count */
4616
+ gridClass: _angular_core.Signal<string>;
4617
+ /**
4618
+ * Raw SVG markup for the header action button, resolved from the IconRegistry
4619
+ * by name and passed to `<pecb-button [icon]>`. Only library-registered icons
4620
+ * can be rendered — no consumer-supplied markup is trusted here (audit F19).
4621
+ *
4622
+ * The previous `headerActionSvg` computed (which called
4623
+ * `bypassSecurityTrustHtml()` on the consumer's raw string) has been removed:
4624
+ * it was unused by the template and was the XSS vector F19 flagged.
4625
+ */
4626
+ headerActionIconRaw: _angular_core.Signal<string>;
4627
+ backgroundStyle: _angular_core.Signal<{
4628
+ 'background-image'?: undefined;
4629
+ } | {
4630
+ 'background-image': string;
4631
+ }>;
4632
+ readonly addIconSvg = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M8 3.333v9.334M3.333 8h9.334\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>";
4633
+ getActionButtonVariant(action: AdminHeaderAction): ButtonVariant;
4634
+ getActionButtonIconStyle(action: AdminHeaderAction): ButtonIconStyle;
4635
+ getActionButtonIcon(action: AdminHeaderAction): string | undefined;
4636
+ getIconSvg(iconName: string): SafeHtml;
4637
+ getBadgeClasses(variant?: AdminHeaderBadgeVariant): string;
4638
+ getProfileBadgeStatusType(variant: AdminHeaderBadgeVariant): StatusType;
4639
+ getProfileBadgeStatusVariant(variant: AdminHeaderBadgeVariant): StatusVariant;
4640
+ getFieldTemplate(templateId: string): TemplateRef<unknown> | null;
4641
+ onHeaderAction(): void;
4642
+ onActionClick(action: AdminHeaderAction, index: number): void;
4643
+ onActionRemove(event: MouseEvent, action: AdminHeaderAction, index: number): void;
4644
+ onLinkClick(field: AdminHeaderField): void;
4645
+ onDropdownChange(field: AdminHeaderField, event: Event): void;
4646
+ onFieldOptionChange(field: AdminHeaderField, value: 'yes' | 'no'): void;
4647
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminHeaderComponent, never>;
4648
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdminHeaderComponent, "pecb-admin-header", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "backgroundUrl": { "alias": "backgroundUrl"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "headerActionIcon": { "alias": "headerActionIcon"; "required": false; "isSignal": true; }; "headerActionLabel": { "alias": "headerActionLabel"; "required": false; "isSignal": true; }; "profile": { "alias": "profile"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "metadata": { "alias": "metadata"; "required": false; "isSignal": true; }; "fields": { "alias": "fields"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, { "headerActionClicked": "headerActionClicked"; "actionClicked": "actionClicked"; "actionRemoved": "actionRemoved"; "linkClicked": "linkClicked"; "dropdownChanged": "dropdownChanged"; "fieldOptionChanged": "fieldOptionChanged"; }, ["fieldTemplates"], never, true, never>;
4649
+ }
4650
+
4651
+ type SocialIconStyle = 'brand' | 'original' | 'white' | 'dark';
4652
+
4653
+ type FlagShape = 'round' | 'square';
4654
+
4655
+ /** Media type categories. */
4656
+ type MediaType = 'emoji' | 'social' | 'flag';
4657
+ /** Size of each media item in the grid. */
4658
+ type MediaSize = 'sm' | 'md' | 'lg';
4659
+ /** A single media item resolved for display. */
4660
+ interface MediaItem {
4661
+ name: string;
4662
+ content: string;
4663
+ safeHtml: SafeHtml;
4664
+ }
4665
+ /** A group of media items under a heading. */
4666
+ interface MediaGroup {
4667
+ label: string;
4668
+ items: MediaItem[];
4669
+ }
4670
+ /**
4671
+ * Displays a grid of media assets (emojis, social icons, or flags).
4672
+ *
4673
+ * Clicking any item copies its SVG to the clipboard and shows
4674
+ * a brief "Copied!" tooltip.
4675
+ *
4676
+ * @example
4677
+ * <!-- Show all emojis grouped by category -->
4678
+ * <pecb-media type="emoji"></pecb-media>
4098
4679
  *
4099
4680
  * @example
4681
+ * <!-- Show social icons in brand style -->
4682
+ * <pecb-media type="social" socialStyle="brand"></pecb-media>
4683
+ *
4684
+ * @example
4685
+ * <!-- Show all country flags -->
4686
+ * <pecb-media type="flag" size="lg"></pecb-media>
4687
+ */
4688
+ declare class MediaComponent {
4689
+ private readonly sanitizer;
4690
+ /** Which media category to display. */
4691
+ type: _angular_core.InputSignal<MediaType>;
4692
+ /** Item size in the grid. @default 'md' */
4693
+ size: _angular_core.InputSignal<MediaSize>;
4694
+ /** Style variant for social icons. @default 'brand' */
4695
+ socialStyle: _angular_core.InputSignal<SocialIconStyle>;
4696
+ /** Shape variant for flags. @default 'round' */
4697
+ flagShape: _angular_core.InputSignal<FlagShape>;
4698
+ /** Accessible label for the grid region. */
4699
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
4700
+ /** Name of the item that was just copied (drives the tooltip). */
4701
+ copiedItem: _angular_core.WritableSignal<string | null>;
4702
+ /** Pixel size for each grid item. */
4703
+ itemSize: _angular_core.Signal<number>;
4704
+ /** Resolved groups of media items for the current type. */
4705
+ groups: _angular_core.Signal<MediaGroup[]>;
4706
+ /** CSS class string for the host wrapper. */
4707
+ hostClasses: _angular_core.Signal<string>;
4708
+ /** Copy the raw SVG markup to the clipboard. */
4709
+ copyToClipboard(item: MediaItem): Promise<void>;
4710
+ /** Format display name: kebab-case → Title Case. */
4711
+ formatName(name: string): string;
4712
+ private createItem;
4713
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MediaComponent, never>;
4714
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MediaComponent, "pecb-media", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "socialStyle": { "alias": "socialStyle"; "required": false; "isSignal": true; }; "flagShape": { "alias": "flagShape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4715
+ }
4716
+
4717
+ /**
4718
+ * @deprecated Audit F12 — use per-component standalone imports instead.
4719
+ *
4720
+ * This umbrella NgModule re-exports every public component in the library
4721
+ * (~100 standalone components). Importing it pulls the entire library into
4722
+ * the consumer's compilation graph, which interferes with tree-shaking and
4723
+ * diverges from Angular's recommended standalone-component pattern.
4724
+ *
4725
+ * Migrate to per-component imports:
4100
4726
  * ```typescript
4101
- * import { PecbComponentsModule } from '@pecb-ui/components';
4727
+ * import { ButtonComponent, InputComponent } from '@pecb-ui/components';
4102
4728
  *
4103
- * @NgModule({
4104
- * imports: [PecbComponentsModule]
4729
+ * @Component({
4730
+ * standalone: true,
4731
+ * imports: [ButtonComponent, InputComponent],
4732
+ * // ...
4105
4733
  * })
4106
- * export class AppModule { }
4734
+ * export class MyComponent {}
4107
4735
  * ```
4736
+ *
4737
+ * Or, for per-feature imports (audit F18), use a secondary entry point:
4738
+ * ```typescript
4739
+ * import { InputComponent } from '@pecb-ui/components/forms';
4740
+ * ```
4741
+ *
4742
+ * Retained for one major version as a transitional convenience for legacy
4743
+ * NgModule-based consumers; scheduled for removal in a future major.
4108
4744
  */
4109
4745
  declare class PecbComponentsModule {
4110
4746
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PecbComponentsModule, never>;
4111
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<PecbComponentsModule, never, [typeof i1.CommonModule, typeof ButtonComponent, typeof CardComponent, typeof CardHeaderComponent, typeof CardBodyComponent, typeof CardFooterComponent, typeof StatusComponent, typeof PaginationComponent, typeof TableComponent, typeof TabComponent, typeof DatepickerComponent, typeof InputComponent, typeof RadioComponent, typeof CheckboxComponent, typeof ToggleComponent, typeof DropdownComponent, typeof RightModalComponent, typeof RightModalHeaderDirective, typeof RightModalContentDirective, typeof RightModalFooterDirective, typeof SidebarComponent, typeof ConfirmationComponent, typeof BottomSheetComponent, typeof AccordionItemComponent, typeof AccordionSmallComponent, typeof ButtonGroupComponent, typeof ButtonGroupItemComponent, typeof TooltipComponent, typeof TooltipDirective, typeof MessageItemComponent, typeof MessageBubbleComponent, typeof FullscreenModalComponent, typeof FullscreenModalContentDirective, typeof FullscreenModalFooterDirective, typeof StepperComponent, typeof GridComponent, typeof GridItemComponent, typeof SpacerComponent, typeof DashboardGridComponent, typeof SpinnerComponent, typeof ProgressBarComponent, typeof ProgressCircleComponent, typeof CodeInputComponent, typeof ShadowDirective, typeof BlurDirective, typeof DividerComponent, typeof CodeSnippetComponent, typeof BreadcrumbsComponent, typeof HeaderComponent, typeof HeaderSearchComponent, typeof HeaderLanguageComponent, typeof HeaderActionsComponent, typeof HeaderUserComponent, typeof HeaderDividerComponent, typeof VirtualTableComponent, typeof GeneralComponent, typeof ProjectLayoutComponent, typeof HierarchicalTableComponent, typeof AnchorComponent, typeof BackToTopComponent, typeof ExpandableRowTableComponent, typeof BadgeComponent, typeof AffixComponent, typeof LanguageDropdownComponent, typeof EmptyStateComponent, typeof TestimonialComponent, typeof TagComponent, typeof LinkButtonComponent, typeof SlidePointsComponent, typeof QuantitySelectorComponent, typeof AuditorStatusComponent, typeof RatingNumberComponent, typeof IconTagComponent, typeof TranscriptLineComponent, typeof MiniIconButtonComponent, typeof NoResultsComponent, typeof CertificateUploadBarComponent, typeof VideoUploadBarComponent, typeof StatisticsCardComponent, typeof PriceMethodComponent, typeof ApplicationStatusBarComponent, typeof ReasonForReturnComponent, typeof ContentTypeTagComponent, typeof QuestionTypeTagComponent, typeof StandardsPdfCardComponent, typeof NoteSidebarItemComponent, typeof AuthorDateTimeComponent, typeof CheckDeleteIconComponent, typeof ProfileElementsCardComponent, typeof UserWithEmailComponent, typeof CancelUpdateButtonsComponent, typeof InformationBoxComponent, typeof RequestSentByComponent, typeof NotificationStatusLinkComponent, typeof EditCoverPhotoComponent, typeof RequestStatusBarComponent, typeof VerifyChecklistComponent, typeof EditButtonComponent, typeof AddButtonComponent, typeof HorizontalStepsComponent, typeof RadioDisplayComponent, typeof CheckboxDisplayComponent, typeof FilterColumnsComponent, typeof FileUploadComponent, typeof ToolbarBarComponent, typeof NotesPanelComponent, typeof TextFormFieldComponent, typeof ResultPageComponent, typeof TourComponent], [typeof ButtonComponent, typeof CardComponent, typeof CardHeaderComponent, typeof CardBodyComponent, typeof CardFooterComponent, typeof StatusComponent, typeof PaginationComponent, typeof TableComponent, typeof TabComponent, typeof DatepickerComponent, typeof InputComponent, typeof RadioComponent, typeof CheckboxComponent, typeof ToggleComponent, typeof DropdownComponent, typeof RightModalComponent, typeof RightModalHeaderDirective, typeof RightModalContentDirective, typeof RightModalFooterDirective, typeof SidebarComponent, typeof ConfirmationComponent, typeof BottomSheetComponent, typeof AccordionItemComponent, typeof AccordionSmallComponent, typeof ButtonGroupComponent, typeof ButtonGroupItemComponent, typeof TooltipComponent, typeof TooltipDirective, typeof MessageItemComponent, typeof MessageBubbleComponent, typeof FullscreenModalComponent, typeof FullscreenModalContentDirective, typeof FullscreenModalFooterDirective, typeof StepperComponent, typeof GridComponent, typeof GridItemComponent, typeof SpacerComponent, typeof DashboardGridComponent, typeof SpinnerComponent, typeof ProgressBarComponent, typeof ProgressCircleComponent, typeof CodeInputComponent, typeof ShadowDirective, typeof BlurDirective, typeof DividerComponent, typeof CodeSnippetComponent, typeof BreadcrumbsComponent, typeof HeaderComponent, typeof HeaderSearchComponent, typeof HeaderLanguageComponent, typeof HeaderActionsComponent, typeof HeaderUserComponent, typeof HeaderDividerComponent, typeof VirtualTableComponent, typeof GeneralComponent, typeof ProjectLayoutComponent, typeof HierarchicalTableComponent, typeof AnchorComponent, typeof BackToTopComponent, typeof ExpandableRowTableComponent, typeof BadgeComponent, typeof AffixComponent, typeof LanguageDropdownComponent, typeof EmptyStateComponent, typeof TestimonialComponent, typeof TagComponent, typeof LinkButtonComponent, typeof SlidePointsComponent, typeof QuantitySelectorComponent, typeof AuditorStatusComponent, typeof RatingNumberComponent, typeof IconTagComponent, typeof TranscriptLineComponent, typeof MiniIconButtonComponent, typeof NoResultsComponent, typeof CertificateUploadBarComponent, typeof VideoUploadBarComponent, typeof StatisticsCardComponent, typeof PriceMethodComponent, typeof ApplicationStatusBarComponent, typeof ReasonForReturnComponent, typeof ContentTypeTagComponent, typeof QuestionTypeTagComponent, typeof StandardsPdfCardComponent, typeof NoteSidebarItemComponent, typeof AuthorDateTimeComponent, typeof CheckDeleteIconComponent, typeof ProfileElementsCardComponent, typeof UserWithEmailComponent, typeof CancelUpdateButtonsComponent, typeof InformationBoxComponent, typeof RequestSentByComponent, typeof NotificationStatusLinkComponent, typeof EditCoverPhotoComponent, typeof RequestStatusBarComponent, typeof VerifyChecklistComponent, typeof EditButtonComponent, typeof AddButtonComponent, typeof HorizontalStepsComponent, typeof RadioDisplayComponent, typeof CheckboxDisplayComponent, typeof FilterColumnsComponent, typeof FileUploadComponent, typeof ToolbarBarComponent, typeof NotesPanelComponent, typeof TextFormFieldComponent, typeof ResultPageComponent, typeof TourComponent]>;
4747
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<PecbComponentsModule, never, [typeof i1.CommonModule, typeof ButtonComponent, typeof CardComponent, typeof CardHeaderComponent, typeof CardBodyComponent, typeof CardFooterComponent, typeof StatusComponent, typeof PaginationComponent, typeof TableComponent, typeof TabComponent, typeof DatepickerComponent, typeof InputComponent, typeof RadioComponent, typeof CheckboxComponent, typeof ToggleComponent, typeof DropdownComponent, typeof RightModalComponent, typeof RightModalHeaderDirective, typeof RightModalContentDirective, typeof RightModalFooterDirective, typeof SidebarComponent, typeof ConfirmationComponent, typeof BottomSheetComponent, typeof AccordionItemComponent, typeof AccordionSmallComponent, typeof ButtonGroupComponent, typeof ButtonGroupItemComponent, typeof TooltipComponent, typeof TooltipDirective, typeof MessageItemComponent, typeof MessageBubbleComponent, typeof FullscreenModalComponent, typeof FullscreenModalHeaderDirective, typeof FullscreenModalContentDirective, typeof FullscreenModalFooterDirective, typeof StepperComponent, typeof GridComponent, typeof GridItemComponent, typeof SpacerComponent, typeof DashboardGridComponent, typeof SpinnerComponent, typeof ProgressBarComponent, typeof ProgressCircleComponent, typeof CodeInputComponent, typeof ShadowDirective, typeof BlurDirective, typeof DividerComponent, typeof CodeSnippetComponent, typeof BreadcrumbsComponent, typeof HeaderComponent, typeof HeaderSearchComponent, typeof HeaderLanguageComponent, typeof HeaderActionsComponent, typeof HeaderUserComponent, typeof HeaderDividerComponent, typeof VirtualTableComponent, typeof GeneralComponent, typeof ProjectLayoutComponent, typeof HierarchicalTableComponent, typeof AnchorComponent, typeof BackToTopComponent, typeof ExpandableRowTableComponent, typeof BadgeComponent, typeof AffixComponent, typeof LanguageDropdownComponent, typeof EmptyStateComponent, typeof TestimonialComponent, typeof TagComponent, typeof LinkButtonComponent, typeof SlidePointsComponent, typeof QuantitySelectorComponent, typeof AuditorStatusComponent, typeof RatingNumberComponent, typeof IconTagComponent, typeof TranscriptLineComponent, typeof MiniIconButtonComponent, typeof NoResultsComponent, typeof CertificateUploadBarComponent, typeof VideoUploadBarComponent, typeof StatisticsCardComponent, typeof PriceMethodComponent, typeof ApplicationStatusBarComponent, typeof ReasonForReturnComponent, typeof ContentTypeTagComponent, typeof QuestionTypeTagComponent, typeof StandardsPdfCardComponent, typeof NoteSidebarItemComponent, typeof AuthorDateTimeComponent, typeof CheckDeleteIconComponent, typeof ProfileElementsCardComponent, typeof UserWithEmailComponent, typeof CancelUpdateButtonsComponent, typeof InformationBoxComponent, typeof RequestSentByComponent, typeof NotificationStatusLinkComponent, typeof EditCoverPhotoComponent, typeof RequestStatusBarComponent, typeof VerifyChecklistComponent, typeof EditButtonComponent, typeof AddButtonComponent, typeof HorizontalStepsComponent, typeof RadioDisplayComponent, typeof CheckboxDisplayComponent, typeof FilterColumnsComponent, typeof FileUploadComponent, typeof ToolbarBarComponent, typeof NotesPanelComponent, typeof TextFormFieldComponent, typeof ResultPageComponent, typeof TourComponent, typeof AdminHeaderComponent, typeof AdminHeaderFieldTemplateDirective, typeof MediaComponent], [typeof ButtonComponent, typeof CardComponent, typeof CardHeaderComponent, typeof CardBodyComponent, typeof CardFooterComponent, typeof StatusComponent, typeof PaginationComponent, typeof TableComponent, typeof TabComponent, typeof DatepickerComponent, typeof InputComponent, typeof RadioComponent, typeof CheckboxComponent, typeof ToggleComponent, typeof DropdownComponent, typeof RightModalComponent, typeof RightModalHeaderDirective, typeof RightModalContentDirective, typeof RightModalFooterDirective, typeof SidebarComponent, typeof ConfirmationComponent, typeof BottomSheetComponent, typeof AccordionItemComponent, typeof AccordionSmallComponent, typeof ButtonGroupComponent, typeof ButtonGroupItemComponent, typeof TooltipComponent, typeof TooltipDirective, typeof MessageItemComponent, typeof MessageBubbleComponent, typeof FullscreenModalComponent, typeof FullscreenModalHeaderDirective, typeof FullscreenModalContentDirective, typeof FullscreenModalFooterDirective, typeof StepperComponent, typeof GridComponent, typeof GridItemComponent, typeof SpacerComponent, typeof DashboardGridComponent, typeof SpinnerComponent, typeof ProgressBarComponent, typeof ProgressCircleComponent, typeof CodeInputComponent, typeof ShadowDirective, typeof BlurDirective, typeof DividerComponent, typeof CodeSnippetComponent, typeof BreadcrumbsComponent, typeof HeaderComponent, typeof HeaderSearchComponent, typeof HeaderLanguageComponent, typeof HeaderActionsComponent, typeof HeaderUserComponent, typeof HeaderDividerComponent, typeof VirtualTableComponent, typeof GeneralComponent, typeof ProjectLayoutComponent, typeof HierarchicalTableComponent, typeof AnchorComponent, typeof BackToTopComponent, typeof ExpandableRowTableComponent, typeof BadgeComponent, typeof AffixComponent, typeof LanguageDropdownComponent, typeof EmptyStateComponent, typeof TestimonialComponent, typeof TagComponent, typeof LinkButtonComponent, typeof SlidePointsComponent, typeof QuantitySelectorComponent, typeof AuditorStatusComponent, typeof RatingNumberComponent, typeof IconTagComponent, typeof TranscriptLineComponent, typeof MiniIconButtonComponent, typeof NoResultsComponent, typeof CertificateUploadBarComponent, typeof VideoUploadBarComponent, typeof StatisticsCardComponent, typeof PriceMethodComponent, typeof ApplicationStatusBarComponent, typeof ReasonForReturnComponent, typeof ContentTypeTagComponent, typeof QuestionTypeTagComponent, typeof StandardsPdfCardComponent, typeof NoteSidebarItemComponent, typeof AuthorDateTimeComponent, typeof CheckDeleteIconComponent, typeof ProfileElementsCardComponent, typeof UserWithEmailComponent, typeof CancelUpdateButtonsComponent, typeof InformationBoxComponent, typeof RequestSentByComponent, typeof NotificationStatusLinkComponent, typeof EditCoverPhotoComponent, typeof RequestStatusBarComponent, typeof VerifyChecklistComponent, typeof EditButtonComponent, typeof AddButtonComponent, typeof HorizontalStepsComponent, typeof RadioDisplayComponent, typeof CheckboxDisplayComponent, typeof FilterColumnsComponent, typeof FileUploadComponent, typeof ToolbarBarComponent, typeof NotesPanelComponent, typeof TextFormFieldComponent, typeof ResultPageComponent, typeof TourComponent, typeof AdminHeaderComponent, typeof AdminHeaderFieldTemplateDirective, typeof MediaComponent]>;
4112
4748
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<PecbComponentsModule>;
4113
4749
  }
4114
4750
 
@@ -4429,6 +5065,14 @@ declare class ProfileComponent {
4429
5065
  size: _angular_core.InputSignal<ProfileSize>;
4430
5066
  indicator: _angular_core.InputSignal<ProfileIndicator>;
4431
5067
  badge: _angular_core.InputSignal<ProfileBadge>;
5068
+ /** Aria-label for the indicator dot when `indicator === 'online'`. */
5069
+ onlineAriaLabel: _angular_core.InputSignal<string>;
5070
+ /** Aria-label for the indicator dot when `indicator === 'offline'`. */
5071
+ offlineAriaLabel: _angular_core.InputSignal<string>;
5072
+ /** Aria-label for the verified badge when `badge === 'verified'`. */
5073
+ verifiedAriaLabel: _angular_core.InputSignal<string>;
5074
+ /** Aria-label for the camera (edit photo) button when `badge === 'camera'`. */
5075
+ editPhotoAriaLabel: _angular_core.InputSignal<string>;
4432
5076
  cameraClick: _angular_core.OutputEmitterRef<MouseEvent>;
4433
5077
  hostClass: _angular_core.Signal<string>;
4434
5078
  showImage: _angular_core.Signal<boolean>;
@@ -4437,7 +5081,7 @@ declare class ProfileComponent {
4437
5081
  imgSize: _angular_core.Signal<number>;
4438
5082
  onCameraClick(event: MouseEvent): void;
4439
5083
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProfileComponent, never>;
4440
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProfileComponent, "pecb-profile", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "indicator": { "alias": "indicator"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; }, { "cameraClick": "cameraClick"; }, never, never, true, never>;
5084
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProfileComponent, "pecb-profile", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "indicator": { "alias": "indicator"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "onlineAriaLabel": { "alias": "onlineAriaLabel"; "required": false; "isSignal": true; }; "offlineAriaLabel": { "alias": "offlineAriaLabel"; "required": false; "isSignal": true; }; "verifiedAriaLabel": { "alias": "verifiedAriaLabel"; "required": false; "isSignal": true; }; "editPhotoAriaLabel": { "alias": "editPhotoAriaLabel"; "required": false; "isSignal": true; }; }, { "cameraClick": "cameraClick"; }, never, never, true, never>;
4441
5085
  }
4442
5086
 
4443
5087
  type ProfileGroupSize = 'sm' | 'md' | 'lg';
@@ -4450,13 +5094,16 @@ declare class ProfileGroupComponent {
4450
5094
  avatars: _angular_core.InputSignal<ProfileGroupItem[]>;
4451
5095
  size: _angular_core.InputSignal<ProfileGroupSize>;
4452
5096
  max: _angular_core.InputSignal<number>;
5097
+ /** Suffix appended to the overflow count's aria-label (e.g. `5 more`). */
5098
+ overflowSuffix: _angular_core.InputSignal<string>;
4453
5099
  hostClass: _angular_core.Signal<string>;
4454
5100
  visible: _angular_core.Signal<ProfileGroupItem[]>;
4455
5101
  overflow: _angular_core.Signal<number>;
4456
5102
  overflowLabel: _angular_core.Signal<string>;
5103
+ overflowAriaLabel: _angular_core.Signal<string>;
4457
5104
  imgSize: _angular_core.Signal<number>;
4458
5105
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProfileGroupComponent, never>;
4459
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProfileGroupComponent, "pecb-profile-group", never, { "avatars": { "alias": "avatars"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5106
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProfileGroupComponent, "pecb-profile-group", never, { "avatars": { "alias": "avatars"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "overflowSuffix": { "alias": "overflowSuffix"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4460
5107
  }
4461
5108
 
4462
5109
  /**
@@ -5676,5 +6323,63 @@ declare class IconComponent {
5676
6323
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconComponent, "pecb-icon", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "svgIcon": { "alias": "svgIcon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
5677
6324
  }
5678
6325
 
5679
- export { AccordionItemComponent, AccordionSmallComponent, AddButtonComponent, AffixComponent, AlertComponent, AnchorComponent, ApplicationStatusBarComponent, AuditorStatusComponent, AuthorDateTimeComponent, BackToTopComponent, BadgeComponent, BlurDirective, BottomSheetComponent, BreadcrumbsComponent, ButtonComponent, ButtonGroupComponent, ButtonGroupItemComponent, CancelUpdateButtonsComponent, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CertificateUploadBarComponent, CheckDeleteIconComponent, CheckboxComponent, CheckboxDisplayComponent, CodeInputComponent, CodeSnippetComponent, ColorPaletteComponent, ConfirmationComponent, ContentTypeTagComponent, DEFAULT_LANGUAGES, DashboardGridComponent, DatepickerComponent, DividerComponent, DropdownComponent, EditButtonComponent, EditCoverPhotoComponent, EmptyStateComponent, ExpandableRowTableComponent, FileUploadComponent, FilterColumnsComponent, FloatButtonComponent, FloatButtonItemComponent, FullscreenModalComponent, FullscreenModalContentDirective, FullscreenModalFooterDirective, GeneralComponent, GridComponent, GridItemComponent, HeaderActionsComponent, HeaderComponent, HeaderDividerComponent, HeaderLanguageComponent, HeaderSearchComponent, HeaderUserComponent, HierarchicalTableComponent, HorizontalStepsComponent, IconComponent, IconTagComponent, InformationBoxComponent, InputComponent, LanguageDropdownComponent, LinkButtonComponent, LoadingService, MessageBubbleComponent, MessageItemComponent, MetricsCardComponent, MiniIconButtonComponent, NoResultsComponent, NoteSidebarItemComponent, NotesPanelComponent, NotificationService, NotificationStatusLinkComponent, PECB_COLOR_PALETTE, PECB_FONT_STYLES, PECB_TYPE_SCALE, PaginationComponent, PecbComponentsModule, PriceMethodComponent, ProfileComponent, ProfileElementsCardComponent, ProfileGroupComponent, ProgressBarComponent, ProgressCircleComponent, ProjectLayoutComponent, QuantitySelectorComponent, QuestionTypeTagComponent, RadioComponent, RadioDisplayComponent, RatingNumberComponent, ReasonForReturnComponent, RequestSentByComponent, RequestStatusBarComponent, ResultPageComponent, RightModalComponent, RightModalContentDirective, RightModalFooterDirective, RightModalHeaderDirective, ShadowDirective, SidebarComponent, SkeletonComponent, SlidePointsComponent, SpacerComponent, SpinnerComponent, StandardsPdfCardComponent, StatisticsCardComponent, StatusComponent, StepperComponent, TabComponent, TableComponent, TagComponent, TestimonialComponent, TextFormFieldComponent, ThemeService, ToggleComponent, ToolbarBarComponent, TooltipComponent, TooltipDirective, TourComponent, TranscriptLineComponent, TypographyComponent, UserWithEmailComponent, VerifyChecklistComponent, VideoUploadBarComponent, VirtualTableComponent, addClass, announceToScreenReader, capitalize, closestElement, copyToClipboard, createAuthError, createAuthorizationError, createConfigError, createError, createNetworkError, createValidationError, disableBodyScroll, escapeHtml, formatCount, formatErrorForLog, formatErrorMessage, generateLinkedIds, generateUniqueId, getAriaCurrent, getButtonAriaAttributes, getComputedStyleValue, getDialogAriaAttributes, getFocusableElements, getInitials, getInputAriaAttributes, getOptionAriaAttributes, getProgressAriaAttributes, getScrollParent, getTabAriaAttributes, getVisuallyHiddenStyles, handleError, hasClass, isBlank, isBrowser, isElementVisible, isNotBlank, isPecbError, isRecoverableError, matchesSelector, pluralize, prefersHighContrast, prefersReducedMotion, registerErrorHandler, removeClass, scrollIntoView, slugify, stripHtml, toCamelCase, toKebabCase, toPascalCase, toSnakeCase, toggleClass, trapFocus, truncate, tryAsync, trySync, wrapError };
5680
- export type { AccordionVariant, AddButtonVariant, AffixPosition, AlertType, AlertVariant, Alignment, AnchorDirection, AnchorItem, AnchorLevel, AnimationTiming, AppStatusColor, AriaAttributes, AriaLive, AriaRole, AuditorStatusType, BadgeSize, BadgeStatus, BadgeVariant, BlurSize, BreadcrumbItem, BreadcrumbSeparator, Breakpoint, ButtonGroupIconMode, ButtonGroupItemPosition, ButtonIconStyle, ButtonSize, ButtonVariant, Callback, CardElevation, CardRadius, CardRole, CheckDeleteType, CheckboxDisplayState, CheckboxLabelPosition, ClosableWithHooks, CodeInputDirection, CodeInputState, CodeSnippetTheme, CodeSnippetVariant, ColorPaletteGroup, ColorPaletteItem, ColorVariant, Colorable, ColumnOption, ComponentSize, ConfirmationIconType, ContentStyle, ContentTagDisplay, ContentTagType, DashboardGridGap, DashboardGridLayout, DatepickerSize, Direction, Disableable, DividerType, DropdownOption, DropdownSize, EditButtonVariant, ElevationLevel, EmptyStateButton, EmptyStateIconTheme, ErrorCategory, ErrorHandler, ErrorOptions, ErrorSeverity, EventHandler, ExpandableRowColumn, ExpandableRowPageEvent, ExpandableRowProgressConfig, ExtendedColorVariant, FieldItem, FieldStyle, FileUploadEvent, FileUploadState, FileUploadVariant, FilterColumnsActiveTab, FilterColumnsApplyEvent, FilterField, FilterFieldType, FilterState, FloatButtonAction, FloatButtonPosition, Focusable, FormControlBase, GridAlign, GridColumns, GridGap, GridItemSpan, GridPadding, GridVerticalAlign, HeaderActionButton, HeaderLanguageOption, HeaderSearchCategory, HeaderSearchType, HierarchicalTableAction, HierarchicalTableColumn, HierarchicalTablePageEvent, IconColor, IconShape, IconSize, IconTagType, InformationBoxVariant, InputSize, InputType, LanguageDisplayMode, LanguageOption, LinkButtonType, Loadable, LoadingState, MenuItem, MessageBubbleType, MessageDirection, MessageItemStatus, MetricsCardBadgeStatus, MetricsCardIconBg, MetricsCardOrientation, MetricsCardType, MetricsCardVariation, MiniIconAction, NonNullableProps, NoteGroup, NoteItem, NoteSidebarPosition, NoteSidebarState, Notification, NotificationConfig, NotificationPosition, NotificationStatusType, NotificationType, OptionalProps, Orientation, OverlayComponent, PageChangeEvent, PaginationSize, PaginationState, PaginationVariant, PdfCardVariant, PecbError, PecbTableColumn, PecbTableColumnComponent, PecbTableColumnType, Position, ProfileBadge, ProfileGroupItem, ProfileGroupSize, ProfileIndicator, ProfileSize, ProfileType, ProgressBarSize, ProgressCircleSize, ProgressType, QuestionTagDisplay, QuestionTagType, QuizType, RadioDisplayState, RadioLabelPosition, RadioVariant, RadiusScale, RatingStyle, RequestStatusIconType, RequireProps, ResultPageAction, ResultPageIcon, RibbonColor, RightModalSize, SearchMode, SelectableItem, ShadowHardSize, ShadowSize, ShadowSoftSize, ShadowType, SidebarMenuItem, SidebarSection, Size, Sizeable, SkeletonShape, SkeletonSize, SkeletonType, SortState, SpacerSize, SpacingScale, StateVariant, StatisticsIconColor, StatusColor, StatusSize, StatusType, StatusVariant, StepItem, StepOrder, StepState, StepperDirection, StepperSize, StepperTailStyle, StepperType, TabItem, TabSize, TabStyle, TableAction, TableColumn, TableRowActionEvent, TableSelectionEvent, TableSize, TableSortEvent, TableStatusConfig, TableUserConfig, TableVariant, TagAction, TagStyle, Templatable, TestimonialData, TestimonialVariant, TextFormFieldType, ThemeConfig, ThemeMode, ThemeVariables, ToggleLabelPosition, ToggleSize, ToolbarButton, ToolbarTab, ToolbarVariant, TooltipPointerPosition, TooltipTheme, TourIndicatorType, TourPlacement, TourStep, TourType, TranscriptLineState, TreeNode, TypographyScaleEntry, TypographyStyleEntry, UploadedFile, Validatable, ValidationError, ValidationState, VerifyChecklistItem, VerifyItemStatus, VirtualTableColumn, VirtualTablePageEvent, VirtualTableProgressConfig };
6326
+ /**
6327
+ * Global registry for SVG icons.
6328
+ *
6329
+ * Icons are registered as inline SVG strings keyed by their `IconName`.
6330
+ * The `IconComponent` queries this registry when a `[name]` input is used.
6331
+ *
6332
+ * The full PECB icon set (`PECB_ICONS`) and custom icon set
6333
+ * (`PECB_CUSTOM_ICONS`) are **pre-registered automatically** in the
6334
+ * constructor, so `<pecb-icon name="...">` works out of the box with no
6335
+ * consumer setup. Use {@link register} / {@link registerAll} only to add your
6336
+ * own custom icons (or to override a built-in one).
6337
+ *
6338
+ * @example
6339
+ * ```ts
6340
+ * import { IconRegistry } from '@pecb-ui/components';
6341
+ *
6342
+ * // Built-in icons need no registration. To add a custom icon:
6343
+ * constructor(private reg: IconRegistry) {
6344
+ * reg.register('my-logo', '<svg ...>...</svg>');
6345
+ * }
6346
+ * ```
6347
+ */
6348
+ declare class IconRegistry {
6349
+ private readonly icons;
6350
+ constructor();
6351
+ /** Register a single icon by name. */
6352
+ register(name: IconName | string, svg: string): void;
6353
+ /** Register many icons at once. */
6354
+ registerAll(icons: Record<string, string>): void;
6355
+ /** Retrieve an icon SVG string by name. Returns `undefined` if not found. */
6356
+ get(name: string): string | undefined;
6357
+ /** Check whether an icon is registered. */
6358
+ has(name: string): boolean;
6359
+ /** Return all registered icon names. */
6360
+ names(): string[];
6361
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconRegistry, never>;
6362
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<IconRegistry>;
6363
+ }
6364
+
6365
+ /**
6366
+ * Map of every PECB icon name to its inline SVG string.
6367
+ *
6368
+ * These are **pre-registered automatically** by `IconRegistry`, so
6369
+ * `<pecb-icon name="...">` works out of the box — you do not need to register
6370
+ * them yourself. Exported (from `@pecb-ui/components`) only for advanced use
6371
+ * cases such as inspecting the available SVGs.
6372
+ */
6373
+ declare const PECB_ICONS: Record<string, string>;
6374
+
6375
+ /**
6376
+ * Map of every PECB custom icon variant to its inline SVG string.
6377
+ *
6378
+ * These are **pre-registered automatically** by `IconRegistry` (alongside
6379
+ * `PECB_ICONS`), so custom icons resolve by name out of the box with no app
6380
+ * setup. Exported (from `@pecb-ui/components`) only for advanced use cases.
6381
+ */
6382
+ declare const PECB_CUSTOM_ICONS: Record<string, string>;
6383
+
6384
+ export { AccordionItemComponent, AccordionSmallComponent, AddButtonComponent, AdminHeaderComponent, AdminHeaderFieldTemplateDirective, AffixComponent, AlertComponent, AnchorComponent, ApplicationStatusBarComponent, AuditorStatusComponent, AuthorDateTimeComponent, BackToTopComponent, BadgeComponent, BlurDirective, BottomSheetComponent, BreadcrumbsComponent, ButtonComponent, ButtonGroupComponent, ButtonGroupItemComponent, CancelUpdateButtonsComponent, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CertificateUploadBarComponent, CheckDeleteIconComponent, CheckboxComponent, CheckboxDisplayComponent, CodeInputComponent, CodeSnippetComponent, ColorPaletteComponent, ConfirmationComponent, ContentTypeTagComponent, DEFAULT_LANGUAGES, DashboardGridComponent, DatepickerComponent, DividerComponent, DropdownComponent, EMPTY_STATE_MAX_BUTTONS, EditButtonComponent, EditCoverPhotoComponent, EmptyStateComponent, ExpandableRowTableComponent, FileUploadComponent, FilterColumnsComponent, FloatButtonComponent, FloatButtonItemComponent, FullscreenModalComponent, FullscreenModalContentDirective, FullscreenModalFooterDirective, FullscreenModalHeaderDirective, GeneralComponent, GridComponent, GridItemComponent, HeaderActionsComponent, HeaderComponent, HeaderDividerComponent, HeaderLanguageComponent, HeaderSearchComponent, HeaderUserComponent, HierarchicalTableComponent, HorizontalStepsComponent, IconComponent, IconRegistry, IconTagComponent, InformationBoxComponent, InputComponent, LanguageDropdownComponent, LinkButtonComponent, LoadingService, MediaComponent, MessageBubbleComponent, MessageItemComponent, MetricsCardComponent, MiniIconButtonComponent, NoResultsComponent, NoteSidebarItemComponent, NotesPanelComponent, NotificationService, NotificationStatusLinkComponent, PECB_COLOR_PALETTE, PECB_CUSTOM_ICONS, PECB_FONT_STYLES, PECB_ICONS, PECB_TYPE_SCALE, PaginationComponent, PecbComponentsModule, PriceMethodComponent, ProfileComponent, ProfileElementsCardComponent, ProfileGroupComponent, ProgressBarComponent, ProgressCircleComponent, ProjectLayoutComponent, QuantitySelectorComponent, QuestionTypeTagComponent, RadioComponent, RadioDisplayComponent, RatingNumberComponent, ReasonForReturnComponent, RequestSentByComponent, RequestStatusBarComponent, ResultPageComponent, RightModalComponent, RightModalContentDirective, RightModalFooterDirective, RightModalHeaderDirective, ShadowDirective, SidebarComponent, SkeletonComponent, SlidePointsComponent, SpacerComponent, SpinnerComponent, StandardsPdfCardComponent, StatisticsCardComponent, StatusComponent, StepperComponent, TabComponent, TableComponent, TagComponent, TestimonialComponent, TextFormFieldComponent, ThemeService, ToggleComponent, ToolbarBarComponent, TooltipComponent, TooltipDirective, TourComponent, TranscriptLineComponent, TypographyComponent, UserWithEmailComponent, VerifyChecklistComponent, VideoUploadBarComponent, VirtualTableComponent, addClass, announceToScreenReader, capitalize, closestElement, copyToClipboard, createAuthError, createAuthorizationError, createConfigError, createError, createNetworkError, createValidationError, disableBodyScroll, escapeHtml, formatCount, formatErrorForLog, formatErrorMessage, generateLinkedIds, generateUniqueId, getAriaCurrent, getButtonAriaAttributes, getComputedStyleValue, getDialogAriaAttributes, getFocusableElements, getInitials, getInputAriaAttributes, getOptionAriaAttributes, getProgressAriaAttributes, getScrollParent, getTabAriaAttributes, getVisuallyHiddenStyles, handleError, hasClass, isBlank, isBrowser, isElementVisible, isNotBlank, isPecbError, isRecoverableError, matchesSelector, pluralize, prefersHighContrast, prefersReducedMotion, registerErrorHandler, removeClass, scrollIntoView, slugify, stripHtml, toCamelCase, toKebabCase, toPascalCase, toSnakeCase, toggleClass, trapFocus, truncate, tryAsync, trySync, wrapError };
6385
+ export type { AccordionVariant, AddButtonVariant, AdminHeaderAction, AdminHeaderActionType, AdminHeaderBadgeVariant, AdminHeaderField, AdminHeaderFieldType, AdminHeaderMetadata, AdminHeaderMetadataType, AdminHeaderProfile, AffixPosition, AlertType, AlertVariant, Alignment, AnchorDirection, AnchorItem, AnchorLevel, AnimationTiming, AppStatusColor, AriaAttributes, AriaLive, AriaRole, AuditorStatusType, BadgeSize, BadgeStatus, BadgeVariant, BlurSize, BreadcrumbItem, BreadcrumbSeparator, Breakpoint, ButtonGroupIconMode, ButtonGroupItemPosition, ButtonIconStyle, ButtonSize, ButtonVariant, CalendarDay, Callback, CardElevation, CardRadius, CardRole, CheckDeleteType, CheckboxDisplayState, CheckboxLabelPosition, ClosableWithHooks, CodeInputDirection, CodeInputState, CodeSnippetTheme, CodeSnippetVariant, ColorPaletteGroup, ColorPaletteItem, ColorVariant, Colorable, ColumnOption, ComponentSize, ConfirmationIconType, ContentStyle, ContentTagDisplay, ContentTagType, CustomIconName, DashboardGridGap, DashboardGridLayout, DatepickerSize, Direction, Disableable, DividerType, DropdownOption, DropdownSize, EditButtonVariant, ElevationLevel, EmptyStateButton, EmptyStateIconTheme, ErrorCategory, ErrorHandler, ErrorOptions, ErrorSeverity, EventHandler, ExpandableRowColumn, ExpandableRowPageEvent, ExpandableRowProgressConfig, ExtendedColorVariant, FieldItem, FieldStyle, FileUploadEvent, FileUploadState, FileUploadVariant, FilterColumnsActiveTab, FilterColumnsApplyEvent, FilterField, FilterFieldType, FilterState, FloatButtonAction, FloatButtonPosition, Focusable, FormControlBase, GridAlign, GridColumns, GridGap, GridItemSpan, GridPadding, GridVerticalAlign, HeaderActionButton, HeaderLanguageOption, HeaderSearchCategory, HeaderSearchType, HierarchicalTableAction, HierarchicalTableColumn, HierarchicalTablePageEvent, IconColor, IconName, IconShape, IconSize, IconTagType, InformationBoxVariant, InputSize, InputType, LanguageDisplayMode, LanguageOption, LinkButtonType, Loadable, LoadingState, MediaGroup, MediaItem, MediaSize, MediaType, MenuItem, MessageBubbleType, MessageDirection, MessageItemStatus, MetricsCardBadgeStatus, MetricsCardIconBg, MetricsCardOrientation, MetricsCardType, MetricsCardVariation, MiniIconAction, NonNullableProps, NoteGroup, NoteItem, NoteSidebarPosition, NoteSidebarState, Notification, NotificationConfig, NotificationPosition, NotificationStatusType, NotificationType, OptionalProps, Orientation, OverlayComponent, PageChangeEvent, PaginationSize, PaginationState, PaginationVariant, PdfCardVariant, PecbError, PecbTableColumn, PecbTableColumnComponent, PecbTableColumnType, Position, ProfileBadge, ProfileGroupItem, ProfileGroupSize, ProfileIndicator, ProfileSize, ProfileType, ProgressBarSize, ProgressCircleSize, ProgressType, QuestionTagDisplay, QuestionTagType, QuizType, RadioDisplayState, RadioLabelPosition, RadioVariant, RadiusScale, RatingStyle, RequestStatusIconType, RequireProps, ResultPageAction, ResultPageIcon, RibbonColor, RightModalSize, SearchMode, SelectableItem, ShadowHardSize, ShadowSize, ShadowSoftSize, ShadowType, SidebarMenuItem, SidebarSection, Size, Sizeable, SkeletonShape, SkeletonSize, SkeletonType, SortState, SpacerSize, SpacingScale, StateVariant, StatisticsIconColor, StatusColor, StatusSize, StatusType, StatusVariant, StepItem, StepOrder, StepState, StepperDirection, StepperSize, StepperTailStyle, StepperType, TabItem, TabSize, TabStyle, TableAction, TableColumn, TableRowActionEvent, TableSelectionEvent, TableSize, TableSortEvent, TableStatusConfig, TableUserConfig, TableVariant, TagAction, TagStyle, Templatable, TestimonialData, TestimonialVariant, TextFormFieldType, ThemeConfig, ThemeMode, ThemeVariables, ToggleLabelPosition, ToggleSize, ToolbarButton, ToolbarTab, ToolbarVariant, TooltipPointerPosition, TooltipTheme, TourIndicatorType, TourPlacement, TourStep, TourType, TranscriptLineState, TreeNode, TypographyScaleEntry, TypographyStyleEntry, UploadedFile, Validatable, ValidationError, ValidationState, VerifyChecklistItem, VerifyItemStatus, VirtualTableColumn, VirtualTablePageEvent, VirtualTableProgressConfig };