@pecb-ui/components 1.1.20 → 1.1.22

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
@@ -7,21 +7,32 @@ import { ControlValueAccessor } from '@angular/forms';
7
7
  import * as _pecb_ui_components from '@pecb-ui/components';
8
8
  import { Observable } from 'rxjs';
9
9
 
10
- type ButtonVariant = 'primary' | 'primary-outline' | 'primary-2' | 'primary-2-outline' | 'neutral' | 'neutral-outline' | 'secondary' | 'text' | 'text-muted' | 'text-brand' | 'success' | 'destructive' | 'destructive-outline';
10
+ type ButtonVariant = 'primary' | 'primary-outline' | 'primary-2' | 'primary-2-outline' | 'neutral' | 'neutral-outline' | 'secondary' | 'light-outline' | 'text' | 'text-muted' | 'text-brand' | 'success' | 'destructive' | 'destructive-outline' | 'segment';
11
11
  type ButtonSize = 'sm' | 'md' | 'lg' | 'xl';
12
12
  type ButtonIconStyle = 'none' | 'leading' | 'trailing' | 'icon-only';
13
+ type ButtonShape = 'default' | 'pill';
13
14
  declare class ButtonComponent {
14
15
  private readonly sanitizer;
15
16
  private readonly registry;
16
17
  id: _angular_core.InputSignal<string>;
17
18
  /**
18
- * The visual style variant of the button
19
+ * The visual style variant of the button.
20
+ *
21
+ * `segment` renders a transparent track for segmented/toggle controls; its
22
+ * active state is driven by `ariaPressed` (a light `#ECECEC` fill with ink
23
+ * text), so a segmented control is authored as a row of
24
+ * `<pecb-button variant="segment" [ariaPressed]="isActive">`.
19
25
  */
20
26
  variant: _angular_core.InputSignal<ButtonVariant>;
21
27
  /**
22
28
  * The size of the button
23
29
  */
24
30
  size: _angular_core.InputSignal<ButtonSize>;
31
+ /**
32
+ * Corner shape. `pill` fully rounds the rendered `<button>` while keeping the
33
+ * padding and height that `size` sets — use it for switcher/filter pills.
34
+ */
35
+ shape: _angular_core.InputSignal<ButtonShape>;
25
36
  /**
26
37
  * Icon placement style
27
38
  */
@@ -107,7 +118,7 @@ declare class ButtonComponent {
107
118
  onClick(event: MouseEvent): void;
108
119
  onKeyDown(event: KeyboardEvent): void;
109
120
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonComponent, never>;
110
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "pecb-button", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconStyle": { "alias": "iconStyle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "ariaExpanded"; "required": false; "isSignal": true; }; "ariaPressed": { "alias": "ariaPressed"; "required": false; "isSignal": true; }; "ariaHasPopup": { "alias": "ariaHasPopup"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
121
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "pecb-button", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "iconStyle": { "alias": "iconStyle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "ariaExpanded"; "required": false; "isSignal": true; }; "ariaPressed": { "alias": "ariaPressed"; "required": false; "isSignal": true; }; "ariaHasPopup": { "alias": "ariaHasPopup"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
111
122
  }
112
123
 
113
124
  type CardElevation = 'none' | 'sm' | 'md' | 'lg' | 'xl';
@@ -940,6 +951,20 @@ declare class InputComponent implements ControlValueAccessor {
940
951
  * Event emitted when clear button is clicked
941
952
  */
942
953
  cleared: _angular_core.OutputEmitterRef<void>;
954
+ /**
955
+ * Raw keydown from the underlying `<input>`. Use it for key-driven entry
956
+ * (committing a chip on comma/Enter, submitting on Enter, and so on) — the
957
+ * event is emitted un-modified, so the handler decides whether to
958
+ * `preventDefault()`.
959
+ *
960
+ * Named `inputKeydown` rather than `keydown` so it does not shadow the native
961
+ * DOM event on the host element.
962
+ */
963
+ inputKeydown: _angular_core.OutputEmitterRef<KeyboardEvent>;
964
+ /**
965
+ * Raw keyup from the underlying `<input>`. Companion to {@link inputKeydown}.
966
+ */
967
+ inputKeyup: _angular_core.OutputEmitterRef<KeyboardEvent>;
943
968
  value: _angular_core.WritableSignal<string>;
944
969
  isFocused: _angular_core.WritableSignal<boolean>;
945
970
  showPassword: _angular_core.WritableSignal<boolean>;
@@ -952,6 +977,8 @@ declare class InputComponent implements ControlValueAccessor {
952
977
  get computedLeftIcon(): string | undefined;
953
978
  get computedRightIcon(): string | undefined;
954
979
  onInput(event: Event): void;
980
+ onKeyDown(event: KeyboardEvent): void;
981
+ onKeyUp(event: KeyboardEvent): void;
955
982
  onFocus(): void;
956
983
  onBlur(): void;
957
984
  clearValue(event: MouseEvent): void;
@@ -963,7 +990,87 @@ declare class InputComponent implements ControlValueAccessor {
963
990
  registerOnTouched(fn: () => void): void;
964
991
  setDisabledState(isDisabled: boolean): void;
965
992
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
966
- 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>;
993
+ 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"; "inputKeydown": "inputKeydown"; "inputKeyup": "inputKeyup"; }, never, never, true, never>;
994
+ }
995
+
996
+ /**
997
+ * A bordered, floating-label multiline field — the `pecb-input` look with a
998
+ * `<textarea>` behind it. Supports optional auto-resize and a character
999
+ * counter, and works with reactive forms via `ControlValueAccessor`.
1000
+ *
1001
+ * @example
1002
+ * ```html
1003
+ * <pecb-textarea
1004
+ * label="Description"
1005
+ * [rows]="5"
1006
+ * [maxLength]="500"
1007
+ * autoResize
1008
+ * formControlName="description"
1009
+ * ></pecb-textarea>
1010
+ * ```
1011
+ *
1012
+ * @publicApi
1013
+ */
1014
+ declare class TextareaComponent implements ControlValueAccessor {
1015
+ private readonly textareaEl;
1016
+ /** Unique ID for the textarea element */
1017
+ id: _angular_core.InputSignal<string>;
1018
+ /** Floating label text */
1019
+ label: _angular_core.InputSignal<string | undefined>;
1020
+ /** Placeholder text (shown when the label is absent or floated) */
1021
+ placeholder: _angular_core.InputSignal<string>;
1022
+ /** Visible rows — the field's resting height */
1023
+ rows: _angular_core.InputSignal<number>;
1024
+ /**
1025
+ * Grow the field to fit its content instead of scrolling. The `rows` value
1026
+ * still sets the starting height.
1027
+ */
1028
+ autoResize: _angular_core.InputSignalWithTransform<boolean, unknown>;
1029
+ /**
1030
+ * Hard character limit. When set, a `used / limit` counter is shown beneath
1031
+ * the field.
1032
+ */
1033
+ maxLength: _angular_core.InputSignal<number | undefined>;
1034
+ /** Width of the wrapper — any valid CSS value. Defaults to 100%. */
1035
+ width: _angular_core.InputSignal<string | undefined>;
1036
+ /** Whether the field is required */
1037
+ required: _angular_core.InputSignalWithTransform<boolean, unknown>;
1038
+ /** Whether the field is read-only */
1039
+ readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
1040
+ /** Whether the field is disabled */
1041
+ disabled: _angular_core.ModelSignal<boolean>;
1042
+ /** Whether to show the error state */
1043
+ error: _angular_core.InputSignalWithTransform<boolean, unknown>;
1044
+ /** Error message shown beneath the field when `error` is set */
1045
+ errorMessage: _angular_core.InputSignal<string | undefined>;
1046
+ /** Helper text shown beneath the field */
1047
+ helperText: _angular_core.InputSignal<string | undefined>;
1048
+ /** Emitted whenever the value changes */
1049
+ valueChange: _angular_core.OutputEmitterRef<string>;
1050
+ /** Emitted on blur */
1051
+ blurred: _angular_core.OutputEmitterRef<void>;
1052
+ /** Emitted on focus */
1053
+ focused: _angular_core.OutputEmitterRef<void>;
1054
+ value: _angular_core.WritableSignal<string>;
1055
+ isFocused: _angular_core.WritableSignal<boolean>;
1056
+ private onChange;
1057
+ private onTouched;
1058
+ constructor();
1059
+ get wrapperClasses(): string[];
1060
+ /** The counter is only meaningful once a limit exists. */
1061
+ showCharCount: _angular_core.Signal<boolean>;
1062
+ charCount: _angular_core.Signal<number>;
1063
+ hasDescription: _angular_core.Signal<boolean>;
1064
+ onInput(event: Event): void;
1065
+ onFocus(): void;
1066
+ onBlur(): void;
1067
+ focus(): void;
1068
+ writeValue(value: string): void;
1069
+ registerOnChange(fn: (value: string) => void): void;
1070
+ registerOnTouched(fn: () => void): void;
1071
+ setDisabledState(isDisabled: boolean): void;
1072
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
1073
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "pecb-textarea", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "autoResize": { "alias": "autoResize"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "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"; "valueChange": "valueChange"; "blurred": "blurred"; "focused": "focused"; }, never, never, true, never>;
967
1074
  }
968
1075
 
969
1076
  type RadioVariant = 'dot' | 'filled';
@@ -1123,10 +1230,19 @@ declare class DropdownComponent implements ControlValueAccessor {
1123
1230
  }
1124
1231
 
1125
1232
  type RightModalSize = 'sm' | 'md' | 'lg';
1233
+ type RightModalPosition = 'right' | 'center';
1126
1234
  declare class RightModalComponent implements OnDestroy {
1127
1235
  id: _angular_core.InputSignal<string>;
1128
1236
  isOpen: _angular_core.ModelSignal<boolean>;
1129
1237
  size: _angular_core.InputSignal<RightModalSize>;
1238
+ /**
1239
+ * Where the panel sits. `right` (default) is the full-height drawer;
1240
+ * `center` is a centered dialog that sizes to its content and rounds all
1241
+ * four corners. `size` still selects the width in both.
1242
+ *
1243
+ * Read when the modal opens — change it while closed, not mid-open.
1244
+ */
1245
+ position: _angular_core.InputSignal<RightModalPosition>;
1130
1246
  closeOnBackdropClick: _angular_core.InputSignal<boolean>;
1131
1247
  closeOnEscape: _angular_core.InputSignal<boolean>;
1132
1248
  showCloseButton: _angular_core.InputSignal<boolean>;
@@ -1152,7 +1268,7 @@ declare class RightModalComponent implements OnDestroy {
1152
1268
  private closeOverlay;
1153
1269
  private destroyOverlay;
1154
1270
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RightModalComponent, never>;
1155
- 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>;
1271
+ 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; }; "position": { "alias": "position"; "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>;
1156
1272
  }
1157
1273
  declare class RightModalHeaderDirective {
1158
1274
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RightModalHeaderDirective, never>;
@@ -2519,7 +2635,7 @@ declare class MetricsCardComponent {
2519
2635
  * - `soft`: dot-less pill — tinted background + colored text (uses `status` for the tone)
2520
2636
  * - `ribbon`: colored tag with bottom-right arrow fold
2521
2637
  */
2522
- type BadgeVariant = 'dot' | 'count' | 'status' | 'soft' | 'ribbon';
2638
+ type BadgeVariant = 'dot' | 'count' | 'status' | 'soft' | 'solid' | 'inverse' | 'ribbon';
2523
2639
  /**
2524
2640
  * Count badge size.
2525
2641
  * - `default`: 20px height, 14px font
@@ -2529,7 +2645,7 @@ type BadgeSize = 'default' | 'small';
2529
2645
  /**
2530
2646
  * Status badge type — determines the dot color.
2531
2647
  */
2532
- type BadgeStatus = 'success' | 'error' | 'default' | 'processing' | 'warning';
2648
+ type BadgeStatus = 'success' | 'error' | 'default' | 'processing' | 'warning' | 'dark';
2533
2649
  /**
2534
2650
  * Ribbon badge color.
2535
2651
  */
@@ -2882,6 +2998,137 @@ declare class NestedTableComponent {
2882
2998
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NestedTableComponent, "pecb-nested-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "childColumns": { "alias": "childColumns"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "expandAriaLabel": { "alias": "expandAriaLabel"; "required": false; "isSignal": true; }; }, { "rowToggle": "rowToggle"; "childToggle": "childToggle"; }, ["childContent"], never, true, never>;
2883
2999
  }
2884
3000
 
3001
+ type StatusBannerTone = 'success' | 'warning' | 'error' | 'info' | 'neutral';
3002
+ type StatusBannerChipVariant = 'solid' | 'inverse' | 'soft';
3003
+ /** A pill rendered next to the banner title (e.g. a state and a product name). */
3004
+ interface StatusBannerChip {
3005
+ label: string;
3006
+ /** Badge colour; defaults to the banner tone's badge status. */
3007
+ status?: BadgeStatus;
3008
+ /** `solid` (filled) by default; `inverse` = white pill on the tinted surface. */
3009
+ variant?: StatusBannerChipVariant;
3010
+ }
3011
+ /**
3012
+ * Tinted, bordered banner strip: a white icon tile, a bold title with pills,
3013
+ * a one-line description and right-aligned actions (projected).
3014
+ * Used for plan / subscription states, account notices, etc.
3015
+ *
3016
+ * @example
3017
+ * <pecb-status-banner tone="success" [iconSvg]="shield" title="Annual plan"
3018
+ * [chips]="[{label: 'Active'}, {label: 'Product', variant: 'inverse'}]"
3019
+ * description="Renews on 4 Jun 2027.">
3020
+ * <pecb-button bannerActions variant="neutral-outline">Manage</pecb-button>
3021
+ * </pecb-status-banner>
3022
+ */
3023
+ declare class StatusBannerComponent {
3024
+ private readonly sanitizer;
3025
+ /** Colour family of the strip (background tint, border and text). */
3026
+ tone: _angular_core.InputSignal<StatusBannerTone>;
3027
+ /** Inline SVG for the 44px white icon tile (stroke="currentColor" inherits the tone). */
3028
+ iconSvg: _angular_core.InputSignal<string>;
3029
+ title: _angular_core.InputSignal<string>;
3030
+ description: _angular_core.InputSignal<string>;
3031
+ /** Pills shown after the title. */
3032
+ chips: _angular_core.InputSignal<StatusBannerChip[]>;
3033
+ readonly safeIconSvg: _angular_core.Signal<_angular_platform_browser.SafeHtml | null>;
3034
+ /** Badge status matching the tone (used when a chip has none). */
3035
+ readonly toneStatus: _angular_core.Signal<BadgeStatus>;
3036
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBannerComponent, never>;
3037
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusBannerComponent, "pecb-status-banner", never, { "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "iconSvg": { "alias": "iconSvg"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "chips": { "alias": "chips"; "required": false; "isSignal": true; }; }, {}, never, ["[bannerActions]"], true, never>;
3038
+ }
3039
+
3040
+ /**
3041
+ * Selectable option row: radio · icon tile · title + description · optional trailing chip.
3042
+ * A group of option cards behaves like a radio group — give them the same `name`
3043
+ * and drive `selected` from the consumer's current value.
3044
+ *
3045
+ * @example
3046
+ * <pecb-option-card name="method" [value]="1" [selected]="method === 1" [iconSvg]="card"
3047
+ * title="Card" description="Pay by card" chipLabel="Default" (selectionChange)="method = $event">
3048
+ * </pecb-option-card>
3049
+ */
3050
+ declare class OptionCardComponent {
3051
+ private readonly sanitizer;
3052
+ /** Radio group name shared by sibling cards. */
3053
+ name: _angular_core.InputSignal<string>;
3054
+ /** Value emitted when this card is chosen. */
3055
+ value: _angular_core.InputSignal<unknown>;
3056
+ selected: _angular_core.InputSignal<boolean>;
3057
+ disabled: _angular_core.InputSignal<boolean>;
3058
+ /** Inline SVG for the 42px icon tile (stroke="currentColor"). */
3059
+ iconSvg: _angular_core.InputSignal<string>;
3060
+ title: _angular_core.InputSignal<string>;
3061
+ description: _angular_core.InputSignal<string>;
3062
+ /** Trailing soft chip (e.g. "Default"); hidden when empty. */
3063
+ chipLabel: _angular_core.InputSignal<string>;
3064
+ chipStatus: _angular_core.InputSignal<BadgeStatus>;
3065
+ /** Emits `value` when the card is chosen. */
3066
+ selectionChange: _angular_core.OutputEmitterRef<unknown>;
3067
+ readonly safeIconSvg: _angular_core.Signal<_angular_platform_browser.SafeHtml | null>;
3068
+ choose(): void;
3069
+ onKeydown(event: KeyboardEvent): void;
3070
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OptionCardComponent, never>;
3071
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OptionCardComponent, "pecb-option-card", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "iconSvg": { "alias": "iconSvg"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "chipLabel": { "alias": "chipLabel"; "required": false; "isSignal": true; }; "chipStatus": { "alias": "chipStatus"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
3072
+ }
3073
+
3074
+ /** One label-over-value cell of the record grid. */
3075
+ interface RecordCardField {
3076
+ label: string;
3077
+ value: string;
3078
+ }
3079
+ /**
3080
+ * Bordered record card: icon tile · title + subtitle · projected header actions,
3081
+ * a divider, then a label/value grid. `emphasis` outlines the card in ink
3082
+ * (e.g. the default entry of a list).
3083
+ *
3084
+ * @example
3085
+ * <pecb-record-card [iconSvg]="building" title="Company Ltd" subtitle="Company" [emphasis]="true"
3086
+ * [fields]="[{label: 'City', value: 'Prishtina'}, {label: 'Country', value: 'Kosovo'}]">
3087
+ * <pecb-badge recordActions variant="solid" status="dark" label="Default"></pecb-badge>
3088
+ * </pecb-record-card>
3089
+ */
3090
+ declare class RecordCardComponent {
3091
+ private readonly sanitizer;
3092
+ /** Inline SVG for the 38px icon tile. */
3093
+ iconSvg: _angular_core.InputSignal<string>;
3094
+ title: _angular_core.InputSignal<string>;
3095
+ subtitle: _angular_core.InputSignal<string>;
3096
+ /** Ink outline (e.g. the default record). */
3097
+ emphasis: _angular_core.InputSignal<boolean>;
3098
+ fields: _angular_core.InputSignal<RecordCardField[]>;
3099
+ /** Grid columns on desktop (collapses to one column under 768px). */
3100
+ columns: _angular_core.InputSignal<2 | 1 | 3>;
3101
+ /** Placeholder shown for empty values. */
3102
+ emptyValue: _angular_core.InputSignal<string>;
3103
+ readonly safeIconSvg: _angular_core.Signal<_angular_platform_browser.SafeHtml | null>;
3104
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RecordCardComponent, never>;
3105
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RecordCardComponent, "pecb-record-card", never, { "iconSvg": { "alias": "iconSvg"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "emphasis": { "alias": "emphasis"; "required": false; "isSignal": true; }; "fields": { "alias": "fields"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "emptyValue": { "alias": "emptyValue"; "required": false; "isSignal": true; }; }, {}, never, ["[recordActions]", "*"], true, never>;
3106
+ }
3107
+
3108
+ interface SegmentedControlOption {
3109
+ label: string;
3110
+ value: unknown;
3111
+ disabled?: boolean;
3112
+ }
3113
+ type SegmentedControlTone = 'dark' | 'brand';
3114
+ /**
3115
+ * Equal-width segmented toggle (2–4 options, exactly one selected).
3116
+ * `tone="dark"` (default) fills the selected segment in ink, `brand` in the brand red.
3117
+ *
3118
+ * @example
3119
+ * <pecb-segmented-control [options]="[{label: 'Personal', value: 1}, {label: 'Company', value: 2}]" [(value)]="type"></pecb-segmented-control>
3120
+ */
3121
+ declare class SegmentedControlComponent {
3122
+ options: _angular_core.InputSignal<SegmentedControlOption[]>;
3123
+ value: _angular_core.ModelSignal<unknown>;
3124
+ tone: _angular_core.InputSignal<SegmentedControlTone>;
3125
+ disabled: _angular_core.InputSignal<boolean>;
3126
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
3127
+ select(option: SegmentedControlOption): void;
3128
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedControlComponent, never>;
3129
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedControlComponent, "pecb-segmented-control", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
3130
+ }
3131
+
2885
3132
  /**
2886
3133
  * Payment plan card — one selectable payment option (e.g. "Pay annually" vs
2887
3134
  * "Pay full cycle"): centered title/description, applied-benefit chips, an
@@ -3177,6 +3424,107 @@ declare class TagSelectComponent implements ControlValueAccessor {
3177
3424
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagSelectComponent, "pecb-tag-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "removeAriaLabel": { "alias": "removeAriaLabel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
3178
3425
  }
3179
3426
 
3427
+ /** Keys that commit the pending text as a chip, by default. */
3428
+ declare const DEFAULT_TAG_INPUT_SEPARATORS: string[];
3429
+ /**
3430
+ * Free-text chip entry: the user types a value and commits it as a chip with a
3431
+ * separator key (comma, space or Enter by default). Distinct from
3432
+ * `pecb-tag-select`, which picks from a fixed option list.
3433
+ *
3434
+ * The value is a `string[]` and the control works with reactive forms via
3435
+ * `ControlValueAccessor`.
3436
+ *
3437
+ * @example
3438
+ * ```html
3439
+ * <pecb-tag-input
3440
+ * label="Accounting contacts"
3441
+ * placeholder="Type an email and press Enter"
3442
+ * [validator]="isEmail"
3443
+ * formControlName="accountingEmails"
3444
+ * ></pecb-tag-input>
3445
+ * ```
3446
+ *
3447
+ * @publicApi
3448
+ */
3449
+ declare class TagInputComponent implements ControlValueAccessor {
3450
+ private readonly inputEl;
3451
+ /** Unique ID for the text entry element */
3452
+ id: _angular_core.InputSignal<string>;
3453
+ /** Floating label text */
3454
+ label: _angular_core.InputSignal<string | undefined>;
3455
+ /** Placeholder for the free-text entry */
3456
+ placeholder: _angular_core.InputSignal<string>;
3457
+ /**
3458
+ * Keys that commit the pending text as a chip. Values are matched against
3459
+ * `KeyboardEvent.key`, so a space is `' '` and Enter is `'Enter'`.
3460
+ */
3461
+ separatorKeys: _angular_core.InputSignal<string[]>;
3462
+ /**
3463
+ * Optional per-chip validation. A value that fails is not committed; it stays
3464
+ * in the entry field so the user can correct it, and `invalidEntry` fires.
3465
+ */
3466
+ validator: _angular_core.InputSignal<((value: string) => boolean) | undefined>;
3467
+ /** Allow the same value to be added more than once */
3468
+ allowDuplicates: _angular_core.InputSignalWithTransform<boolean, unknown>;
3469
+ /** Cap on the number of chips. Further entries are rejected once reached. */
3470
+ maxTags: _angular_core.InputSignal<number | undefined>;
3471
+ /** Commit any pending text when the field loses focus */
3472
+ addOnBlur: _angular_core.InputSignalWithTransform<boolean, unknown>;
3473
+ /** Width of the wrapper — any valid CSS value. Defaults to 100%. */
3474
+ width: _angular_core.InputSignal<string | undefined>;
3475
+ /** Whether the field is required */
3476
+ required: _angular_core.InputSignalWithTransform<boolean, unknown>;
3477
+ /** Whether the field is disabled */
3478
+ disabled: _angular_core.ModelSignal<boolean>;
3479
+ /** Whether to show the error state */
3480
+ error: _angular_core.InputSignalWithTransform<boolean, unknown>;
3481
+ /** Error message shown beneath the field when `error` is set */
3482
+ errorMessage: _angular_core.InputSignal<string | undefined>;
3483
+ /** Helper text shown beneath the field */
3484
+ helperText: _angular_core.InputSignal<string | undefined>;
3485
+ /** Aria-label for each chip's remove (×) button — override to localize. */
3486
+ removeAriaLabel: _angular_core.InputSignal<string>;
3487
+ /** Emitted with the full chip list whenever it changes */
3488
+ valueChange: _angular_core.OutputEmitterRef<string[]>;
3489
+ /** Emitted with the newly committed chip */
3490
+ tagAdded: _angular_core.OutputEmitterRef<string>;
3491
+ /** Emitted with the chip that was removed */
3492
+ tagRemoved: _angular_core.OutputEmitterRef<string>;
3493
+ /** Emitted with text that was rejected by `validator` or a duplicate/limit rule */
3494
+ invalidEntry: _angular_core.OutputEmitterRef<string>;
3495
+ /** Emitted on blur */
3496
+ blurred: _angular_core.OutputEmitterRef<void>;
3497
+ /** Emitted on focus */
3498
+ focused: _angular_core.OutputEmitterRef<void>;
3499
+ value: _angular_core.WritableSignal<string[]>;
3500
+ draft: _angular_core.WritableSignal<string>;
3501
+ isFocused: _angular_core.WritableSignal<boolean>;
3502
+ private onChange;
3503
+ private onTouched;
3504
+ get wrapperClasses(): string[];
3505
+ hasDescription: _angular_core.Signal<boolean>;
3506
+ /** Once the cap is hit the entry field stops accepting new chips. */
3507
+ isFull: _angular_core.Signal<boolean>;
3508
+ onKeyDown(event: KeyboardEvent): void;
3509
+ onInput(event: Event): void;
3510
+ onFocus(): void;
3511
+ onBlur(): void;
3512
+ removeAt(index: number): void;
3513
+ focus(): void;
3514
+ /**
3515
+ * Commit the pending text. Rejected text is deliberately left in the entry
3516
+ * field so the user can fix it rather than losing what they typed.
3517
+ */
3518
+ private commitDraft;
3519
+ private setValue;
3520
+ writeValue(value: string[] | null): void;
3521
+ registerOnChange(fn: (value: string[]) => void): void;
3522
+ registerOnTouched(fn: () => void): void;
3523
+ setDisabledState(isDisabled: boolean): void;
3524
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagInputComponent, never>;
3525
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagInputComponent, "pecb-tag-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "separatorKeys": { "alias": "separatorKeys"; "required": false; "isSignal": true; }; "validator": { "alias": "validator"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "maxTags": { "alias": "maxTags"; "required": false; "isSignal": true; }; "addOnBlur": { "alias": "addOnBlur"; "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; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "removeAriaLabel": { "alias": "removeAriaLabel"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "valueChange": "valueChange"; "tagAdded": "tagAdded"; "tagRemoved": "tagRemoved"; "invalidEntry": "invalidEntry"; "blurred": "blurred"; "focused": "focused"; }, never, never, true, never>;
3526
+ }
3527
+
3180
3528
  /**
3181
3529
  * Form section card — a numbered, collapsible container for one repeatable
3182
3530
  * form section (e.g. "Activity 1 of 3"): number badge, title, subtitle,
@@ -3933,6 +4281,13 @@ declare class AdminHeaderComponent {
3933
4281
  addActionAriaLabel: _angular_core.InputSignal<string>;
3934
4282
  /** Profile configuration. When omitted, no profile row renders. */
3935
4283
  profile: _angular_core.InputSignal<AdminHeaderProfile | undefined>;
4284
+ /**
4285
+ * Show a camera (edit photo) badge on the profile avatar, mirroring
4286
+ * `pecb-profile [badge="camera"]`. Clicking it emits `profilePhotoEdit`.
4287
+ */
4288
+ profilePhotoEditable: _angular_core.InputSignal<boolean>;
4289
+ /** Aria-label for the avatar's camera button. Override to localize. */
4290
+ editPhotoAriaLabel: _angular_core.InputSignal<string>;
3936
4291
  /** Action chips/buttons displayed to the right of the profile */
3937
4292
  actions: _angular_core.InputSignal<AdminHeaderAction[]>;
3938
4293
  /** Metadata items displayed to the right of the profile (alternative to actions) */
@@ -3943,6 +4298,8 @@ declare class AdminHeaderComponent {
3943
4298
  columns: _angular_core.InputSignal<2 | 1 | 3 | 4>;
3944
4299
  /** Emits when the top-right action button is clicked */
3945
4300
  headerActionClicked: _angular_core.OutputEmitterRef<void>;
4301
+ /** Emits when the avatar's camera (edit photo) badge is clicked */
4302
+ profilePhotoEdit: _angular_core.OutputEmitterRef<void>;
3946
4303
  /** Emits the action id/index when an action chip is clicked */
3947
4304
  actionClicked: _angular_core.OutputEmitterRef<{
3948
4305
  action: AdminHeaderAction;
@@ -4008,7 +4365,7 @@ declare class AdminHeaderComponent {
4008
4365
  onDropdownChange(field: AdminHeaderField, event: Event): void;
4009
4366
  onFieldOptionChange(field: AdminHeaderField, value: 'yes' | 'no'): void;
4010
4367
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminHeaderComponent, never>;
4011
- 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; }; "yesLabel": { "alias": "yesLabel"; "required": false; "isSignal": true; }; "noLabel": { "alias": "noLabel"; "required": false; "isSignal": true; }; "addActionAriaLabel": { "alias": "addActionAriaLabel"; "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>;
4368
+ 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; }; "yesLabel": { "alias": "yesLabel"; "required": false; "isSignal": true; }; "noLabel": { "alias": "noLabel"; "required": false; "isSignal": true; }; "addActionAriaLabel": { "alias": "addActionAriaLabel"; "required": false; "isSignal": true; }; "profile": { "alias": "profile"; "required": false; "isSignal": true; }; "profilePhotoEditable": { "alias": "profilePhotoEditable"; "required": false; "isSignal": true; }; "editPhotoAriaLabel": { "alias": "editPhotoAriaLabel"; "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"; "profilePhotoEdit": "profilePhotoEdit"; "actionClicked": "actionClicked"; "actionRemoved": "actionRemoved"; "linkClicked": "linkClicked"; "dropdownChanged": "dropdownChanged"; "fieldOptionChanged": "fieldOptionChanged"; }, ["fieldTemplates"], never, true, never>;
4012
4369
  }
4013
4370
 
4014
4371
  type SocialIconStyle = 'brand' | 'original' | 'white' | 'dark';
@@ -7146,6 +7503,45 @@ declare class SpacerComponent {
7146
7503
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpacerComponent, "pecb-spacer", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7147
7504
  }
7148
7505
 
7506
+ /**
7507
+ * A read-only label/value row — the primitive that read (non-edit) views are
7508
+ * built from. Renders a muted 12px label above a 14px value.
7509
+ *
7510
+ * Pass simple text through `value`; for richer values (links, tags, badges)
7511
+ * leave `value` unset and project the content instead.
7512
+ *
7513
+ * @example
7514
+ * ```html
7515
+ * <pecb-grid [columns]="3">
7516
+ * <pecb-field label="Full name" value="Jane Doe"></pecb-field>
7517
+ * <pecb-field label="Status">
7518
+ * <pecb-status type="success" label="Active"></pecb-status>
7519
+ * </pecb-field>
7520
+ * <pecb-field label="Bio" fullWidth>Long-form text…</pecb-field>
7521
+ * </pecb-grid>
7522
+ * ```
7523
+ *
7524
+ * @publicApi
7525
+ */
7526
+ declare class FieldComponent {
7527
+ id: _angular_core.InputSignal<string>;
7528
+ /** The muted caption shown above the value */
7529
+ label: _angular_core.InputSignal<string | undefined>;
7530
+ /**
7531
+ * The value text. Leave unset and project content instead when the value is
7532
+ * richer than a string.
7533
+ */
7534
+ value: _angular_core.InputSignal<string | undefined>;
7535
+ /**
7536
+ * Span every column of the surrounding grid. Applies when the field is a
7537
+ * direct child of a CSS grid (e.g. `pecb-grid`); inside a `pecb-grid-item`,
7538
+ * use that component's `span="full"` instead.
7539
+ */
7540
+ fullWidth: _angular_core.InputSignalWithTransform<boolean, unknown>;
7541
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldComponent, never>;
7542
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldComponent, "pecb-field", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
7543
+ }
7544
+
7149
7545
  type DashboardGridLayout = '1' | '2' | '3' | '4' | 'sidebar-1col' | 'sidebar-2col' | 'sidebar-3col' | 'sidebar-4col' | 'custom';
7150
7546
  type DashboardGridGap = 'none' | 'sm' | 'md' | 'lg';
7151
7547
  declare class DashboardGridComponent {
@@ -8586,17 +8982,31 @@ declare class TestimonialComponent {
8586
8982
 
8587
8983
  type TagStyle = 'light' | 'dark';
8588
8984
  type TagAction = 'none' | 'close' | 'plus';
8985
+ type TagAppearance = 'tag' | 'chip';
8589
8986
  declare class TagComponent {
8590
8987
  id: _angular_core.InputSignal<string>;
8591
8988
  label: _angular_core.InputSignal<string>;
8592
8989
  tagStyle: _angular_core.InputSignal<TagStyle>;
8593
8990
  action: _angular_core.InputSignal<TagAction>;
8991
+ /**
8992
+ * Rendering style. `tag` is the original chip-with-affordance look; `chip` is
8993
+ * the display-only variant from the design system (`#ECECEC` / `#313131` on a
8994
+ * 6px radius for `light`, inverted for `dark`).
8995
+ *
8996
+ * `chip` is non-interactive by definition, so it suppresses `action` — use
8997
+ * the default `tag` appearance when you need the close or plus affordance.
8998
+ */
8999
+ appearance: _angular_core.InputSignal<TagAppearance>;
8594
9000
  /** Aria-label for the close (×) action — override to localize (audit F20). */
8595
9001
  removeAriaLabel: _angular_core.InputSignal<string>;
8596
9002
  tagClose: _angular_core.OutputEmitterRef<void>;
9003
+ /** Chips render no affordance regardless of `action`. */
9004
+ private readonly interactive;
9005
+ showPlus: _angular_core.Signal<boolean>;
9006
+ showClose: _angular_core.Signal<boolean>;
8597
9007
  tagClasses: _angular_core.Signal<string[]>;
8598
9008
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagComponent, never>;
8599
- 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>;
9009
+ 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; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "removeAriaLabel": { "alias": "removeAriaLabel"; "required": false; "isSignal": true; }; }, { "tagClose": "tagClose"; }, never, never, true, never>;
8600
9010
  }
8601
9011
 
8602
9012
  type LinkButtonType = 'go-back' | 'view-details' | 'read-more' | 'show-credential';
@@ -8880,19 +9290,39 @@ declare class CancelUpdateButtonsComponent {
8880
9290
  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>;
8881
9291
  }
8882
9292
 
8883
- type InformationBoxVariant = 'default' | 'developer';
9293
+ type InformationBoxVariant = 'default' | 'developer' | 'neutral';
8884
9294
  declare class InformationBoxComponent {
9295
+ private readonly sanitizer;
9296
+ private readonly registry;
8885
9297
  id: _angular_core.InputSignal<string>;
9298
+ /**
9299
+ * Visual style. `neutral` is the muted legend bar — `#FAFAFA` background,
9300
+ * `#ECECEC` border, `#616161` icon and text on an 8px radius — and lays the
9301
+ * icon and text out on a single row.
9302
+ */
8886
9303
  variant: _angular_core.InputSignal<InformationBoxVariant>;
8887
9304
  text: _angular_core.InputSignal<string>;
8888
9305
  title: _angular_core.InputSignal<string>;
9306
+ /**
9307
+ * Optional leading icon: a registered {@link IconRegistry} name or a raw
9308
+ * inline SVG string (anything starting with `<`). `variant="neutral"` shows
9309
+ * a default info glyph when this is unset; the other variants show no icon
9310
+ * unless one is given here.
9311
+ */
9312
+ icon: _angular_core.InputSignal<string | undefined>;
8889
9313
  boxClasses: _angular_core.Signal<{
8890
9314
  'pecb-info-box': boolean;
8891
9315
  'pecb-info-box--default': boolean;
8892
9316
  'pecb-info-box--developer': boolean;
9317
+ 'pecb-info-box--neutral': boolean;
8893
9318
  }>;
9319
+ /** The icon name/SVG actually rendered, falling back to the neutral default. */
9320
+ private readonly effectiveIcon;
9321
+ private readonly resolvedIconSvg;
9322
+ showIcon: _angular_core.Signal<boolean>;
9323
+ safeIconHtml: _angular_core.Signal<SafeHtml>;
8894
9324
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InformationBoxComponent, never>;
8895
- 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>;
9325
+ 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; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
8896
9326
  }
8897
9327
 
8898
9328
  declare class RequestSentByComponent {
@@ -9901,5 +10331,5 @@ declare class CourseCardComponent {
9901
10331
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CourseCardComponent, "pecb-course-card", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "iconSvg": { "alias": "iconSvg"; "required": false; "isSignal": true; }; "iconLabel": { "alias": "iconLabel"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "statusTone": { "alias": "statusTone"; "required": false; "isSignal": true; }; "metaRows": { "alias": "metaRows"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "noteText": { "alias": "noteText"; "required": false; "isSignal": true; }; "noteTone": { "alias": "noteTone"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "actionsLayout": { "alias": "actionsLayout"; "required": false; "isSignal": true; }; "dimmed": { "alias": "dimmed"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, ["*"], true, never>;
9902
10332
  }
9903
10333
 
9904
- export { APP_HEADER_TRANSLATIONS, APP_SHELL_LOCALES, APP_SIDEBAR_MENU_ICONS, APP_SIDEBAR_MENU_TRANSLATIONS, APP_SIDEBAR_TRANSLATIONS, AccordionItemComponent, AccordionSmallComponent, ActionItemComponent, AddButtonComponent, AdminHeaderComponent, AdminHeaderFieldTemplateDirective, AffixComponent, AlertComponent, AnchorComponent, AppHeaderComponent, AppSidebarComponent, 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, CourseCardComponent, CourseContentPanelComponent, CoursePlayerComponent, CourseTileComponent, CredentialCardComponent, DEFAULT_APP_HEADER_LABELS, DEFAULT_APP_SIDEBAR_LABELS, DEFAULT_APP_SIDEBAR_LANGUAGES, DEFAULT_APP_SIDEBAR_MENU, DEFAULT_APP_SIDEBAR_ROLES, DEFAULT_COURSE_CONTENT_PANEL_LABELS, DEFAULT_LANGUAGES, DEFAULT_SLIDE_VIEWER_KEY_MAP, DEFAULT_SLIDE_VIEWER_LABELS, DEFAULT_SLIDE_VIEWER_TOOLS, DEFAULT_SLIDE_VIEWER_ZOOM_STEPS, DEFAULT_VIDEO_PLAYER_LABELS, DEFAULT_VIDEO_PLAYER_RATES, DashboardGridComponent, DatepickerComponent, DividerComponent, DropdownComponent, EMPTY_STATE_MAX_BUTTONS, EditButtonComponent, EditCoverPhotoComponent, EmptyStateComponent, ExpandableRowTableComponent, FileUploadComponent, FilterColumnsComponent, FloatButtonComponent, FloatButtonItemComponent, FormSectionCardComponent, FullscreenModalComponent, FullscreenModalContentDirective, FullscreenModalFooterDirective, FullscreenModalHeaderDirective, GeneralComponent, GridComponent, GridItemComponent, HeaderActionsComponent, HeaderComponent, HeaderDividerComponent, HeaderLanguageComponent, HeaderSearchComponent, HeaderUserComponent, HierarchicalTableComponent, HorizontalStepsComponent, HubCardComponent, HubCardGridComponent, IconComponent, IconRegistry, IconTagComponent, InformationBoxComponent, InputComponent, LanguageDropdownComponent, LinkButtonComponent, ListItemComponent, LoadingService, MediaComponent, MessageBubbleComponent, MessageItemComponent, MetricsCardComponent, MiniIconButtonComponent, NestedTableComponent, NoResultsComponent, NoteSidebarItemComponent, NotesPanelComponent, NotificationService, NotificationStatusLinkComponent, OutlinedFieldComponent, PECB_COLOR_PALETTE, PECB_CUSTOM_ICONS, PECB_FONT_STYLES, PECB_ICONS, PECB_TYPE_SCALE, PaginationComponent, PaymentPlanCardComponent, PaymentScheduleCardComponent, PaymentSummaryComponent, PeriodPaymentModalComponent, PreviewCardComponent, PriceMethodComponent, ProfileComponent, ProfileElementsCardComponent, ProfileGroupComponent, ProgressArcComponent, ProgressBarComponent, ProgressCircleComponent, ProjectLayoutComponent, QuantitySelectorComponent, QuestionTypeTagComponent, RadioComponent, RadioDisplayComponent, RatingNumberComponent, ReasonForReturnComponent, RequestSentByComponent, RequestStatusBarComponent, ResultPageComponent, RightModalComponent, RightModalContentDirective, RightModalFooterDirective, RightModalHeaderDirective, ShadowDirective, SidebarComponent, SkeletonComponent, SlidePointsComponent, SlideViewerComponent, SlideViewerDayDirective, SlideViewerThumbnailDirective, SpacerComponent, SpinnerComponent, StandardsPdfCardComponent, StatisticsCardComponent, StatusComponent, StepperComponent, TabComponent, TableComponent, TagComponent, TagSelectComponent, TestimonialComponent, TextFormFieldComponent, ThemeService, TimelineComponent, ToggleComponent, ToolbarBarComponent, TooltipComponent, TooltipDirective, TourComponent, TranscriptLineComponent, TypographyComponent, UserWithEmailComponent, VerifyChecklistComponent, VideoPlayerComponent, VideoUploadBarComponent, VirtualTableComponent, addClass, announceToScreenReader, appHeaderLabels, appSidebarLabels, appSidebarMenu, appSidebarRoles, capitalize, clampSlidePage, closestElement, copyToClipboard, courseModuleStats, courseProgress, createAuthError, createAuthorizationError, createConfigError, createError, createNetworkError, createValidationError, disableBodyScroll, escapeHtml, findCourseLesson, findCourseModule, formatCount, formatCourseDuration, formatCourseTime, formatErrorForLog, formatErrorMessage, formatVideoTime, generateLinkedIds, generateUniqueId, getAriaCurrent, getButtonAriaAttributes, getComputedStyleValue, getDialogAriaAttributes, getFocusableElements, getInitials, getInputAriaAttributes, getOptionAriaAttributes, getProgressAriaAttributes, getScrollParent, getTabAriaAttributes, getVisuallyHiddenStyles, handleError, hasClass, isBlank, isBrowser, isElementVisible, isNotBlank, isPecbError, isRecoverableError, matchesSelector, parseLessonPartTitle, pluralize, prefersHighContrast, prefersReducedMotion, registerErrorHandler, removeClass, resolveAppShellLocale, resolveLessonStatus, scrollIntoView, slugify, stripHtml, toCamelCase, toKebabCase, toPascalCase, toSnakeCase, toggleClass, trapFocus, truncate, tryAsync, trySync, wrapError };
9905
- export type { AccordionVariant, ActionItemPriority, AddButtonVariant, AdminHeaderAction, AdminHeaderActionType, AdminHeaderBadgeVariant, AdminHeaderField, AdminHeaderFieldType, AdminHeaderMetadata, AdminHeaderMetadataType, AdminHeaderProfile, AffixPosition, AlertType, AlertVariant, Alignment, AnchorDirection, AnchorItem, AnchorLevel, AnimationTiming, AppHeaderAction, AppHeaderChip, AppHeaderChipTone, AppHeaderLabels, AppHeaderNotification, AppShellLocale, AppShellTranslations, AppSidebarLabels, AppSidebarMenuItem, AppSidebarMenuOption, AppSidebarMenuOptionChange, AppSidebarMenuStrings, AppSidebarNavGroup, AppSidebarNavItem, AppSidebarProduct, AppSidebarRouterLink, AppSidebarUser, 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, CourseCardAction, CourseCardMetaRow, CourseCardNoteTone, CourseCardProgress, CourseCardTone, CourseContentPanelAccent, CourseContentPanelDensity, CourseContentPanelLabels, CourseContentPanelLayout, CourseContentPanelTab, CourseLesson, CourseLessonRunView, CourseLessonStatus, CourseLessonType, CourseLessonView, CourseModule, CourseModuleStats, CourseModuleView, CoursePlayerPanelPosition, CourseProgressStats, CourseTimelineRow, CourseTranscriptCue, CourseTranscriptRow, CredentialCardAction, CredentialCardMetaRow, CredentialCardProgress, CredentialCardTone, 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, HubCardSize, IconColor, IconName, IconShape, IconSize, IconTagType, InformationBoxVariant, InputSize, InputType, LanguageDisplayMode, LanguageOption, LinkButtonType, Loadable, LoadingState, MarkedDate, MediaGroup, MediaItem, MediaSize, MediaType, MenuItem, MessageBubbleType, MessageDirection, MessageItemStatus, MetricsCardBadgeStatus, MetricsCardIconBg, MetricsCardIconPosition, MetricsCardOrientation, MetricsCardSize, MetricsCardType, MetricsCardVariation, MiniIconAction, NestedTableCellType, NestedTableChildContext, NestedTableChildRow, NestedTableChip, NestedTableColumn, NestedTableGroup, NestedTableProgress, NestedTableRow, NonNullableProps, NoteGroup, NoteItem, NoteSidebarPosition, NoteSidebarState, Notification, NotificationConfig, NotificationPosition, NotificationStatusType, NotificationType, OptionalProps, Orientation, OverlayComponent, PageChangeEvent, PaginationSize, PaginationState, PaginationVariant, PaymentScheduleCardAction, PaymentScheduleCardMeta, PaymentScheduleCardPeriod, PaymentScheduleCardTone, PaymentSummaryRow, PdfCardVariant, PecbError, PecbTableColumn, PecbTableColumnComponent, PecbTableColumnType, PeriodPaymentModalPeriod, Position, PreviewCardAction, ProfileBadge, ProfileGroupItem, ProfileGroupSize, ProfileIndicator, ProfileSize, ProfileType, ProgressArcSize, 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, SlideViewerDay, SlideViewerDayContext, SlideViewerKeyAction, SlideViewerKeyMap, SlideViewerLabels, SlideViewerMoveEvent, SlideViewerPageEvent, SlideViewerSearchEvent, SlideViewerSidebarPosition, SlideViewerSlide, SlideViewerThumbnailContext, SlideViewerTool, SlideViewerToolEvent, 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, TagSelectOption, TagStyle, Templatable, TestimonialData, TestimonialVariant, TextFormFieldType, ThemeConfig, ThemeMode, ThemeVariables, TimelineItem, TimelineTone, ToggleLabelPosition, ToggleSize, ToolbarButton, ToolbarTab, ToolbarVariant, TooltipPointerPosition, TooltipTheme, TourIndicatorType, TourPlacement, TourStep, TourType, TranscriptLineState, TreeNode, TypographyScaleEntry, TypographyStyleEntry, UploadedFile, Validatable, ValidationError, ValidationState, VerifyChecklistItem, VerifyItemStatus, VideoPlayerError, VideoPlayerLabels, VideoPlayerPreload, VideoPlayerSource, VideoPlayerTimeEvent, VideoPlayerTrack, VirtualTableColumn, VirtualTablePageEvent, VirtualTableProgressConfig };
10334
+ export { APP_HEADER_TRANSLATIONS, APP_SHELL_LOCALES, APP_SIDEBAR_MENU_ICONS, APP_SIDEBAR_MENU_TRANSLATIONS, APP_SIDEBAR_TRANSLATIONS, AccordionItemComponent, AccordionSmallComponent, ActionItemComponent, AddButtonComponent, AdminHeaderComponent, AdminHeaderFieldTemplateDirective, AffixComponent, AlertComponent, AnchorComponent, AppHeaderComponent, AppSidebarComponent, 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, CourseCardComponent, CourseContentPanelComponent, CoursePlayerComponent, CourseTileComponent, CredentialCardComponent, DEFAULT_APP_HEADER_LABELS, DEFAULT_APP_SIDEBAR_LABELS, DEFAULT_APP_SIDEBAR_LANGUAGES, DEFAULT_APP_SIDEBAR_MENU, DEFAULT_APP_SIDEBAR_ROLES, DEFAULT_COURSE_CONTENT_PANEL_LABELS, DEFAULT_LANGUAGES, DEFAULT_SLIDE_VIEWER_KEY_MAP, DEFAULT_SLIDE_VIEWER_LABELS, DEFAULT_SLIDE_VIEWER_TOOLS, DEFAULT_SLIDE_VIEWER_ZOOM_STEPS, DEFAULT_TAG_INPUT_SEPARATORS, DEFAULT_VIDEO_PLAYER_LABELS, DEFAULT_VIDEO_PLAYER_RATES, DashboardGridComponent, DatepickerComponent, DividerComponent, DropdownComponent, EMPTY_STATE_MAX_BUTTONS, EditButtonComponent, EditCoverPhotoComponent, EmptyStateComponent, ExpandableRowTableComponent, FieldComponent, FileUploadComponent, FilterColumnsComponent, FloatButtonComponent, FloatButtonItemComponent, FormSectionCardComponent, FullscreenModalComponent, FullscreenModalContentDirective, FullscreenModalFooterDirective, FullscreenModalHeaderDirective, GeneralComponent, GridComponent, GridItemComponent, HeaderActionsComponent, HeaderComponent, HeaderDividerComponent, HeaderLanguageComponent, HeaderSearchComponent, HeaderUserComponent, HierarchicalTableComponent, HorizontalStepsComponent, HubCardComponent, HubCardGridComponent, IconComponent, IconRegistry, IconTagComponent, InformationBoxComponent, InputComponent, LanguageDropdownComponent, LinkButtonComponent, ListItemComponent, LoadingService, MediaComponent, MessageBubbleComponent, MessageItemComponent, MetricsCardComponent, MiniIconButtonComponent, NestedTableComponent, NoResultsComponent, NoteSidebarItemComponent, NotesPanelComponent, NotificationService, NotificationStatusLinkComponent, OptionCardComponent, OutlinedFieldComponent, PECB_COLOR_PALETTE, PECB_CUSTOM_ICONS, PECB_FONT_STYLES, PECB_ICONS, PECB_TYPE_SCALE, PaginationComponent, PaymentPlanCardComponent, PaymentScheduleCardComponent, PaymentSummaryComponent, PeriodPaymentModalComponent, PreviewCardComponent, PriceMethodComponent, ProfileComponent, ProfileElementsCardComponent, ProfileGroupComponent, ProgressArcComponent, ProgressBarComponent, ProgressCircleComponent, ProjectLayoutComponent, QuantitySelectorComponent, QuestionTypeTagComponent, RadioComponent, RadioDisplayComponent, RatingNumberComponent, ReasonForReturnComponent, RecordCardComponent, RequestSentByComponent, RequestStatusBarComponent, ResultPageComponent, RightModalComponent, RightModalContentDirective, RightModalFooterDirective, RightModalHeaderDirective, SegmentedControlComponent, ShadowDirective, SidebarComponent, SkeletonComponent, SlidePointsComponent, SlideViewerComponent, SlideViewerDayDirective, SlideViewerThumbnailDirective, SpacerComponent, SpinnerComponent, StandardsPdfCardComponent, StatisticsCardComponent, StatusBannerComponent, StatusComponent, StepperComponent, TabComponent, TableComponent, TagComponent, TagInputComponent, TagSelectComponent, TestimonialComponent, TextFormFieldComponent, TextareaComponent, ThemeService, TimelineComponent, ToggleComponent, ToolbarBarComponent, TooltipComponent, TooltipDirective, TourComponent, TranscriptLineComponent, TypographyComponent, UserWithEmailComponent, VerifyChecklistComponent, VideoPlayerComponent, VideoUploadBarComponent, VirtualTableComponent, addClass, announceToScreenReader, appHeaderLabels, appSidebarLabels, appSidebarMenu, appSidebarRoles, capitalize, clampSlidePage, closestElement, copyToClipboard, courseModuleStats, courseProgress, createAuthError, createAuthorizationError, createConfigError, createError, createNetworkError, createValidationError, disableBodyScroll, escapeHtml, findCourseLesson, findCourseModule, formatCount, formatCourseDuration, formatCourseTime, formatErrorForLog, formatErrorMessage, formatVideoTime, generateLinkedIds, generateUniqueId, getAriaCurrent, getButtonAriaAttributes, getComputedStyleValue, getDialogAriaAttributes, getFocusableElements, getInitials, getInputAriaAttributes, getOptionAriaAttributes, getProgressAriaAttributes, getScrollParent, getTabAriaAttributes, getVisuallyHiddenStyles, handleError, hasClass, isBlank, isBrowser, isElementVisible, isNotBlank, isPecbError, isRecoverableError, matchesSelector, parseLessonPartTitle, pluralize, prefersHighContrast, prefersReducedMotion, registerErrorHandler, removeClass, resolveAppShellLocale, resolveLessonStatus, scrollIntoView, slugify, stripHtml, toCamelCase, toKebabCase, toPascalCase, toSnakeCase, toggleClass, trapFocus, truncate, tryAsync, trySync, wrapError };
10335
+ export type { AccordionVariant, ActionItemPriority, AddButtonVariant, AdminHeaderAction, AdminHeaderActionType, AdminHeaderBadgeVariant, AdminHeaderField, AdminHeaderFieldType, AdminHeaderMetadata, AdminHeaderMetadataType, AdminHeaderProfile, AffixPosition, AlertType, AlertVariant, Alignment, AnchorDirection, AnchorItem, AnchorLevel, AnimationTiming, AppHeaderAction, AppHeaderChip, AppHeaderChipTone, AppHeaderLabels, AppHeaderNotification, AppShellLocale, AppShellTranslations, AppSidebarLabels, AppSidebarMenuItem, AppSidebarMenuOption, AppSidebarMenuOptionChange, AppSidebarMenuStrings, AppSidebarNavGroup, AppSidebarNavItem, AppSidebarProduct, AppSidebarRouterLink, AppSidebarUser, AppStatusColor, AriaAttributes, AriaLive, AriaRole, AuditorStatusType, BadgeSize, BadgeStatus, BadgeVariant, BlurSize, BreadcrumbItem, BreadcrumbSeparator, Breakpoint, ButtonGroupIconMode, ButtonGroupItemPosition, ButtonIconStyle, ButtonShape, 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, CourseCardAction, CourseCardMetaRow, CourseCardNoteTone, CourseCardProgress, CourseCardTone, CourseContentPanelAccent, CourseContentPanelDensity, CourseContentPanelLabels, CourseContentPanelLayout, CourseContentPanelTab, CourseLesson, CourseLessonRunView, CourseLessonStatus, CourseLessonType, CourseLessonView, CourseModule, CourseModuleStats, CourseModuleView, CoursePlayerPanelPosition, CourseProgressStats, CourseTimelineRow, CourseTranscriptCue, CourseTranscriptRow, CredentialCardAction, CredentialCardMetaRow, CredentialCardProgress, CredentialCardTone, 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, HubCardSize, IconColor, IconName, IconShape, IconSize, IconTagType, InformationBoxVariant, InputSize, InputType, LanguageDisplayMode, LanguageOption, LinkButtonType, Loadable, LoadingState, MarkedDate, MediaGroup, MediaItem, MediaSize, MediaType, MenuItem, MessageBubbleType, MessageDirection, MessageItemStatus, MetricsCardBadgeStatus, MetricsCardIconBg, MetricsCardIconPosition, MetricsCardOrientation, MetricsCardSize, MetricsCardType, MetricsCardVariation, MiniIconAction, NestedTableCellType, NestedTableChildContext, NestedTableChildRow, NestedTableChip, NestedTableColumn, NestedTableGroup, NestedTableProgress, NestedTableRow, NonNullableProps, NoteGroup, NoteItem, NoteSidebarPosition, NoteSidebarState, Notification, NotificationConfig, NotificationPosition, NotificationStatusType, NotificationType, OptionalProps, Orientation, OverlayComponent, PageChangeEvent, PaginationSize, PaginationState, PaginationVariant, PaymentScheduleCardAction, PaymentScheduleCardMeta, PaymentScheduleCardPeriod, PaymentScheduleCardTone, PaymentSummaryRow, PdfCardVariant, PecbError, PecbTableColumn, PecbTableColumnComponent, PecbTableColumnType, PeriodPaymentModalPeriod, Position, PreviewCardAction, ProfileBadge, ProfileGroupItem, ProfileGroupSize, ProfileIndicator, ProfileSize, ProfileType, ProgressArcSize, ProgressBarSize, ProgressCircleSize, ProgressType, QuestionTagDisplay, QuestionTagType, QuizType, RadioDisplayState, RadioLabelPosition, RadioVariant, RadiusScale, RatingStyle, RecordCardField, RequestStatusIconType, RequireProps, ResultPageAction, ResultPageIcon, RibbonColor, RightModalPosition, RightModalSize, SearchMode, SegmentedControlOption, SegmentedControlTone, SelectableItem, ShadowHardSize, ShadowSize, ShadowSoftSize, ShadowType, SidebarMenuItem, SidebarSection, Size, Sizeable, SkeletonShape, SkeletonSize, SkeletonType, SlideViewerDay, SlideViewerDayContext, SlideViewerKeyAction, SlideViewerKeyMap, SlideViewerLabels, SlideViewerMoveEvent, SlideViewerPageEvent, SlideViewerSearchEvent, SlideViewerSidebarPosition, SlideViewerSlide, SlideViewerThumbnailContext, SlideViewerTool, SlideViewerToolEvent, SortState, SpacerSize, SpacingScale, StateVariant, StatisticsIconColor, StatusBannerChip, StatusBannerChipVariant, StatusBannerTone, StatusColor, StatusSize, StatusType, StatusVariant, StepItem, StepOrder, StepState, StepperDirection, StepperSize, StepperTailStyle, StepperType, TabItem, TabSize, TabStyle, TableAction, TableColumn, TableRowActionEvent, TableSelectionEvent, TableSize, TableSortEvent, TableStatusConfig, TableUserConfig, TableVariant, TagAction, TagAppearance, TagSelectOption, TagStyle, Templatable, TestimonialData, TestimonialVariant, TextFormFieldType, ThemeConfig, ThemeMode, ThemeVariables, TimelineItem, TimelineTone, ToggleLabelPosition, ToggleSize, ToolbarButton, ToolbarTab, ToolbarVariant, TooltipPointerPosition, TooltipTheme, TourIndicatorType, TourPlacement, TourStep, TourType, TranscriptLineState, TreeNode, TypographyScaleEntry, TypographyStyleEntry, UploadedFile, Validatable, ValidationError, ValidationState, VerifyChecklistItem, VerifyItemStatus, VideoPlayerError, VideoPlayerLabels, VideoPlayerPreload, VideoPlayerSource, VideoPlayerTimeEvent, VideoPlayerTrack, VirtualTableColumn, VirtualTablePageEvent, VirtualTableProgressConfig };