@moatamed-sce/ui-components 0.1.1 → 0.1.2

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.
@@ -16,12 +16,14 @@ import { ToastPositionType } from 'primeng/toast';
16
16
  import { TranslateService } from '@ngx-translate/core';
17
17
  import { DynamicDialogRef } from 'primeng/dynamicdialog';
18
18
 
19
+ /** One selectable card in `sce-card-radio-group`, with an optional `icon` and `description` line. */
19
20
  interface CardRadioOption {
20
21
  value: string;
21
22
  label: string;
22
23
  description?: string;
23
24
  icon?: string;
24
25
  }
26
+ /** Radio group that renders each option as a selectable card with an optional icon and description; unlike the other sce field components it is a ControlValueAccessor, so it accepts `formControlName`. */
25
27
  declare class SceCardRadioGroupComponent implements ControlValueAccessor {
26
28
  readonly options: _angular_core.InputSignal<CardRadioOption[]>;
27
29
  readonly label: _angular_core.InputSignal<string>;
@@ -45,6 +47,7 @@ declare class SceCardRadioGroupComponent implements ControlValueAccessor {
45
47
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceCardRadioGroupComponent, "sce-card-radio-group", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
46
48
  }
47
49
 
50
+ /** Shared form-field wrapper that renders the label, required marker, projected control, help text and error message for the other sce field components; `id` and `label` are required. */
48
51
  declare class SceFieldComponent {
49
52
  readonly id: _angular_core.InputSignal<string>;
50
53
  readonly label: _angular_core.InputSignal<string>;
@@ -82,6 +85,7 @@ interface SceFieldValidationMessages {
82
85
  type SceTextFieldPrefixMode = 'absolute' | 'inline';
83
86
  /** @see SceFieldValidationMode — kept as the published name for this field. */
84
87
  type SceTextFieldValidationMode = SceFieldValidationMode;
88
+ /** Single-line text form field built on PrimeNG InputText, with a shared validation engine and an optional inline or absolute prefix; validation is opt-in, since `validationMode` defaults to `'never'`. */
85
89
  declare class SceTextFieldComponent {
86
90
  private readonly mirrorLabelAsPlaceholder;
87
91
  readonly id: _angular_core.InputSignal<string>;
@@ -128,6 +132,7 @@ declare class SceTextFieldComponent {
128
132
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceTextFieldComponent, "sce-text-field", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "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; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "inputClassName": { "alias": "inputClassName"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "listId": { "alias": "listId"; "required": false; "isSignal": true; }; "validationMode": { "alias": "validationMode"; "required": false; "isSignal": true; }; "validationMessages": { "alias": "validationMessages"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "prefixMode": { "alias": "prefixMode"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "focused": "focused"; "blurred": "blurred"; }, never, never, true, never>;
129
133
  }
130
134
 
135
+ /** Multi-line textarea form field built on PrimeNG Textarea with the shared validation engine; validation is opt-in, since `validationMode` defaults to `'never'`. */
131
136
  declare class SceTextareaFieldComponent {
132
137
  private readonly mirrorLabelAsPlaceholder;
133
138
  readonly id: _angular_core.InputSignal<string>;
@@ -164,6 +169,7 @@ declare class SceTextareaFieldComponent {
164
169
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceTextareaFieldComponent, "sce-textarea-field", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "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; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "inputClassName": { "alias": "inputClassName"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "validationMode": { "alias": "validationMode"; "required": false; "isSignal": true; }; "validationMessages": { "alias": "validationMessages"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blurred": "blurred"; }, never, never, true, never>;
165
170
  }
166
171
 
172
+ /** Password form field built on PrimeNG Password with a reveal toggle enabled by default and an optional strength-feedback panel; `id` and `label` are required. */
167
173
  declare class ScePasswordFieldComponent {
168
174
  readonly id: _angular_core.InputSignal<string>;
169
175
  readonly label: _angular_core.InputSignal<string>;
@@ -200,11 +206,13 @@ declare class ScePasswordFieldComponent {
200
206
  * - `'never'` — never show built-in errors (rely on external `error` input)
201
207
  */
202
208
  type SceSelectValidationMode = 'onChange' | 'onBlur' | 'onTouched' | 'always' | 'touched' | 'never';
209
+ /** One choice in `sce-select-field` and `sce-multi-select-field`, generic over the value type (defaults to `string`) and individually disableable. */
203
210
  interface SceSelectOption<V extends string | number = string> {
204
211
  label: string;
205
212
  value: V;
206
213
  disabled?: boolean;
207
214
  }
215
+ /** Single-select form field built on PrimeNG Select with a built-in validation engine that shows errors once the control is touched; when no placeholder is given it falls back to the label if the `SCE_MIRROR_LABEL_AS_PLACEHOLDER` token is provided. */
208
216
  declare class SceSelectFieldComponent {
209
217
  private readonly mirrorLabelAsPlaceholder;
210
218
  readonly id: _angular_core.InputSignal<string>;
@@ -260,6 +268,7 @@ interface SceMultiSelectValidationMessages {
260
268
  minSelected?: (min: number) => string;
261
269
  maxSelected?: (max: number) => string;
262
270
  }
271
+ /** Multi-select form field built on PrimeNG MultiSelect with a built-in required/min/max validation engine and an optional footer for adding new options; `id` and `label` are required. */
263
272
  declare class SceMultiSelectFieldComponent {
264
273
  readonly id: _angular_core.InputSignal<string>;
265
274
  readonly label: _angular_core.InputSignal<string>;
@@ -308,6 +317,7 @@ declare class SceMultiSelectFieldComponent {
308
317
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceMultiSelectFieldComponent, "sce-multi-select-field", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "panelClassName": { "alias": "panelClassName"; "required": false; "isSignal": true; }; "inputClassName": { "alias": "inputClassName"; "required": false; "isSignal": true; }; "fieldClassName": { "alias": "fieldClassName"; "required": false; "isSignal": true; }; "labelClassName": { "alias": "labelClassName"; "required": false; "isSignal": true; }; "containerClassName": { "alias": "containerClassName"; "required": false; "isSignal": true; }; "minSelected": { "alias": "minSelected"; "required": false; "isSignal": true; }; "maxSelected": { "alias": "maxSelected"; "required": false; "isSignal": true; }; "validationMode": { "alias": "validationMode"; "required": false; "isSignal": true; }; "validationMessages": { "alias": "validationMessages"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "selectedItemsLabel": { "alias": "selectedItemsLabel"; "required": false; "isSignal": true; }; "allowAdd": { "alias": "allowAdd"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "addOption": "addOption"; }, never, never, true, never>;
309
318
  }
310
319
 
320
+ /** Toggle switch built on PrimeNG ToggleSwitch, with optional active/inactive labels that fall back to translated defaults. */
311
321
  declare class SceSwitchComponent {
312
322
  private readonly translate;
313
323
  readonly checked: _angular_core.InputSignal<boolean>;
@@ -322,6 +332,7 @@ declare class SceSwitchComponent {
322
332
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceSwitchComponent, "sce-switch", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "activeLabel": { "alias": "activeLabel"; "required": false; "isSignal": true; }; "inactiveLabel": { "alias": "inactiveLabel"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; }, never, never, true, never>;
323
333
  }
324
334
 
335
+ /** Five-star rating input with hover preview, arrow-key adjustment and an optional error message, emitting the selected score. */
325
336
  declare class SceStarRatingInputComponent {
326
337
  readonly value: _angular_core.InputSignal<number>;
327
338
  readonly disabled: _angular_core.InputSignal<boolean>;
@@ -338,6 +349,7 @@ declare class SceStarRatingInputComponent {
338
349
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceStarRatingInputComponent, "sce-star-rating-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
339
350
  }
340
351
 
352
+ /** Currency amount field wrapped in `sce-field` that sanitizes typed text to a non-negative decimal and emits the parsed number, or `null` when cleared; `id` and `label` are required. */
341
353
  declare class SceCurrencyInputComponent {
342
354
  readonly id: _angular_core.InputSignal<string>;
343
355
  readonly label: _angular_core.InputSignal<string>;
@@ -359,6 +371,7 @@ declare class SceCurrencyInputComponent {
359
371
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceCurrencyInputComponent, "sce-currency-input", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
360
372
  }
361
373
 
374
+ /** Unlabelled numeric input with a trailing unit suffix that sanitizes typed text to a non-negative number and emits the sanitized string. */
362
375
  declare class SceUnitInputComponent {
363
376
  readonly value: _angular_core.InputSignal<string | number | null>;
364
377
  readonly unit: _angular_core.InputSignal<string>;
@@ -385,6 +398,7 @@ declare class SceUnitInputComponent {
385
398
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceUnitInputComponent, "sce-unit-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "inputMode": { "alias": "inputMode"; "required": false; "isSignal": true; }; "allowDecimal": { "alias": "allowDecimal"; "required": false; "isSignal": true; }; "inputClassName": { "alias": "inputClassName"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "focused": "focused"; }, never, never, true, never>;
386
399
  }
387
400
 
401
+ /** Labelled numeric field with a trailing unit suffix that defaults to the translated square-metre unit; `id` and `label` are required. */
388
402
  declare class SceUnitInputFieldComponent {
389
403
  private readonly translate;
390
404
  readonly id: _angular_core.InputSignal<string>;
@@ -402,12 +416,16 @@ declare class SceUnitInputFieldComponent {
402
416
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceUnitInputFieldComponent, "sce-unit-input-field", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "unitInput": { "alias": "unitInput"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "allowDecimal": { "alias": "allowDecimal"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
403
417
  }
404
418
 
419
+ /** A date-field range as two `YYYY-MM-DD` strings in the active calendar system; an unset end is the empty string, not `null`. */
405
420
  interface DateRangeValue {
406
421
  from: string;
407
422
  to: string;
408
423
  }
424
+ /** Calendar system a date field runs in; `'georgian'` is a tolerated misspelling that normalizes to `'gregorian'`. */
409
425
  type CalendarSystem = 'hijri' | 'gregorian' | 'georgian';
426
+ /** Whether a date field captures one date or a from/to range. */
410
427
  type SelectionMode = 'single' | 'range';
428
+ /** The two locales the date utilities format for, driving month names and the first day of the week (Saturday for `ar`). */
411
429
  type AppDateLocale = 'ar' | 'en';
412
430
  interface CalendarDay {
413
431
  date: Date;
@@ -415,6 +433,7 @@ interface CalendarDay {
415
433
  labelDay: number;
416
434
  value: string;
417
435
  }
436
+ /** One month's rendered calendar: the day cells (including leading/trailing days from adjacent months) plus the localized weekday headers. */
418
437
  interface CalendarGrid {
419
438
  days: CalendarDay[];
420
439
  weekdays: string[];
@@ -424,17 +443,24 @@ interface HijriYmd {
424
443
  month: number;
425
444
  day: number;
426
445
  }
446
+ /** Steps a `Date` forward or back by `delta` Hijri months by walking day-by-day across Umm al-Qura month boundaries. */
427
447
  declare function addHijriMonths(anchor: Date, delta: number): Date;
448
+ /** Formats a `Date` as its Umm al-Qura Hijri `YYYY-MM-DD` string. */
428
449
  declare function toHijriValue(date: Date): string;
450
+ /** Formats a `Date` as its local-time Gregorian `YYYY-MM-DD` string. */
429
451
  declare function toGregorianValue(date: Date): string;
452
+ /** Parses a `YYYY-MM-DD` string in the given calendar system back to a `Date`, returning `null` if it is malformed or (for Hijri) has no Gregorian match in the scanned window. */
430
453
  declare function parseValueToDate(value: string, system: 'hijri' | 'gregorian'): Date | null;
454
+ /** Builds the six-week day grid around `anchor` for the given calendar system and locale, along with the anchor month's index and year number. */
431
455
  declare function buildCalendarGrid(anchor: Date, system: 'hijri' | 'gregorian', locale: AppDateLocale): {
432
456
  grid: CalendarGrid;
433
457
  currentMonthIndex: number;
434
458
  currentYearNumber: number;
435
459
  };
460
+ /** Returns the Umm al-Qura Hijri year, month, and day numbers for a `Date`. */
436
461
  declare function getHijriYmdFromDate(date: Date): HijriYmd;
437
462
 
463
+ /** Date field that pairs a text input with a modal calendar supporting both Hijri and Gregorian systems and single or range selection; it defaults to the Hijri calendar and locks body scroll while the calendar is open. */
438
464
  declare class SceDateFieldComponent {
439
465
  private doc;
440
466
  readonly id: _angular_core.InputSignal<string>;
@@ -499,6 +525,7 @@ declare class SceDateFieldComponent {
499
525
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDateFieldComponent, "sce-date-field", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "calendarSystem": { "alias": "calendarSystem"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "showToggleDate": { "alias": "showToggleDate"; "required": false; "isSignal": true; }; "hijriOnly": { "alias": "hijriOnly"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; "listId": { "alias": "listId"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
500
526
  }
501
527
 
528
+ /** Fully-controlled modal calendar used by `sce-date-field`, rendering the day grid plus month and year pickers and emitting every navigation and selection as an output; `locale` and `grid` are required. */
502
529
  declare class SceDatePickerModalComponent {
503
530
  readonly open: _angular_core.InputSignal<boolean>;
504
531
  readonly locale: _angular_core.InputSignal<AppDateLocale>;
@@ -555,6 +582,7 @@ declare class SceDatePickerModalComponent {
555
582
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDatePickerModalComponent, "sce-date-picker-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "system": { "alias": "system"; "required": false; "isSignal": true; }; "showToggle": { "alias": "showToggle"; "required": false; "isSignal": true; }; "hijriOnly": { "alias": "hijriOnly"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "draftSingle": { "alias": "draftSingle"; "required": false; "isSignal": true; }; "draftRange": { "alias": "draftRange"; "required": false; "isSignal": true; }; "hoveredDay": { "alias": "hoveredDay"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "canShowToday": { "alias": "canShowToday"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": true; "isSignal": true; }; "currentMonthIndex": { "alias": "currentMonthIndex"; "required": false; "isSignal": true; }; "currentYearNumber": { "alias": "currentYearNumber"; "required": false; "isSignal": true; }; "yearRange": { "alias": "yearRange"; "required": false; "isSignal": true; }; "yearPageStart": { "alias": "yearPageStart"; "required": false; "isSignal": true; }; "showMonthPicker": { "alias": "showMonthPicker"; "required": false; "isSignal": true; }; "showYearPicker": { "alias": "showYearPicker"; "required": false; "isSignal": true; }; }, { "systemChange": "systemChange"; "showMonthPickerChange": "showMonthPickerChange"; "showYearPickerChange": "showYearPickerChange"; "movePrev": "movePrev"; "moveNext": "moveNext"; "selectDay": "selectDay"; "hoverDay": "hoverDay"; "clearHoverDay": "clearHoverDay"; "selectMonth": "selectMonth"; "selectYear": "selectYear"; "yearPagePrev": "yearPagePrev"; "yearPageNext": "yearPageNext"; "today": "today"; "cancel": "cancel"; "confirm": "confirm"; "backdropClick": "backdropClick"; }, never, never, true, never>;
556
583
  }
557
584
 
585
+ /** Page-number paginator with an ellipsis window and a page-size select; it is stateless (`page`, `pageSize`, `totalItems` are required inputs) and derives direction from `locale` unless `dir` is set — note it uses `ViewEncapsulation.None`. */
558
586
  declare class ScePaginatorComponent {
559
587
  page: _angular_core.InputSignal<number>;
560
588
  pageSize: _angular_core.InputSignal<number>;
@@ -581,6 +609,7 @@ declare class ScePaginatorComponent {
581
609
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePaginatorComponent, "sce-paginator", never, { "page": { "alias": "page"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": true; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "numberFormatter": { "alias": "numberFormatter"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, never>;
582
610
  }
583
611
 
612
+ /** Design-system demo harness that wires `sce-paginator` to local page state; not for production pages. */
584
613
  declare class ScePaginatorDemoComponent {
585
614
  readonly totalRecords: _angular_core.InputSignal<number>;
586
615
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -592,7 +621,9 @@ declare class ScePaginatorDemoComponent {
592
621
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePaginatorDemoComponent, "sce-paginator-demo", never, { "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
593
622
  }
594
623
 
624
+ /** Width preset shared by every dialog built on `sce-dialog-shell`. */
595
625
  type DialogSize = 'sm' | 'md' | 'lg' | 'xl';
626
+ /** Shared PrimeNG-Dialog shell that every sce dialog builds on, providing the sticky header, close button, projected body and footer and the size presets; setting `locked` blocks both Escape and mask dismissal. */
596
627
  declare class SceDialogShellComponent {
597
628
  /** Controls dialog visibility. */
598
629
  visible: _angular_core.InputSignal<boolean>;
@@ -641,6 +672,7 @@ declare class SceDialogShellComponent {
641
672
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDialogShellComponent, "sce-dialog-shell", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "centerHeader": { "alias": "centerHeader"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "locked": { "alias": "locked"; "required": false; "isSignal": true; }; "dismissableMask": { "alias": "dismissableMask"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "style": { "alias": "style"; "required": false; "isSignal": true; }; "compactBody": { "alias": "compactBody"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; "hasBody": { "alias": "hasBody"; "required": false; "isSignal": true; }; "hasFooter": { "alias": "hasFooter"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["*", "[dialogFooter]"], true, never>;
642
673
  }
643
674
 
675
+ /** Design-system demo host that shows `sce-dialog-shell` and reports its visibility back through `visibleChange`. */
644
676
  declare class SceDialogShellDemoComponent implements OnInit {
645
677
  readonly visible: _angular_core.InputSignal<boolean>;
646
678
  readonly visibleChange: _angular_core.OutputEmitterRef<boolean>;
@@ -651,7 +683,9 @@ declare class SceDialogShellDemoComponent implements OnInit {
651
683
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDialogShellDemoComponent, "sce-dialog-shell-demo", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; }, { "visibleChange": "visibleChange"; }, never, never, true, never>;
652
684
  }
653
685
 
686
+ /** Tone of a confirm dialog, selecting both its header icon and the severity of its confirm button. */
654
687
  type ConfirmDialogVariant = 'primary' | 'danger' | 'success' | 'warning' | 'info';
688
+ /** Configuration for the optional reason input a confirm dialog can collect before confirming — set `multiline` for a textarea and `required` to block confirmation until it is filled. */
655
689
  interface ConfirmReasonField {
656
690
  label: string;
657
691
  placeholder?: string;
@@ -663,6 +697,7 @@ interface ConfirmReasonField {
663
697
  maxLength?: number;
664
698
  rows?: number;
665
699
  }
700
+ /** Confirmation dialog built on `sce-dialog-shell` with per-variant icon and button styling and an optional reason field; supplying `onConfirmHandler` makes it await the async handler and lock the buttons, mask and Escape while pending. */
666
701
  declare class SceConfirmDialogComponent {
667
702
  private readonly translate;
668
703
  visible: _angular_core.InputSignal<boolean>;
@@ -720,6 +755,7 @@ declare class SceConfirmDialogComponent {
720
755
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceConfirmDialogComponent, "sce-confirm-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "confirmLabel": { "alias": "confirmLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "confirmDisabled": { "alias": "confirmDisabled"; "required": false; "isSignal": true; }; "cancelDisabled": { "alias": "cancelDisabled"; "required": false; "isSignal": true; }; "hideCancelButton": { "alias": "hideCancelButton"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "centerHeader": { "alias": "centerHeader"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "hasBodySlot": { "alias": "hasBodySlot"; "required": false; "isSignal": true; }; "onConfirmHandler": { "alias": "onConfirmHandler"; "required": false; "isSignal": true; }; }, { "close": "close"; "cancel": "cancel"; "confirm": "confirm"; }, never, ["[confirmIcon]", "[confirmBody]"], true, never>;
721
756
  }
722
757
 
758
+ /** Design-system demo host that shows `sce-confirm-dialog` and reports its visibility back through `visibleChange`. */
723
759
  declare class SceConfirmDialogDemoComponent implements OnInit {
724
760
  readonly visible: _angular_core.InputSignal<boolean>;
725
761
  readonly visibleChange: _angular_core.OutputEmitterRef<boolean>;
@@ -751,11 +787,13 @@ declare class SceModalHostComponent {
751
787
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceModalHostComponent, "sce-modal-host", never, {}, {}, never, never, true, never>;
752
788
  }
753
789
 
790
+ /** An already-uploaded image the zone renders alongside new picks, removable via the `removeExisting` output. */
754
791
  interface FileUploadExistingItem {
755
792
  id: string;
756
793
  url: string;
757
794
  alt?: string;
758
795
  }
796
+ /** Overridable copy for `sce-file-upload-zone`; the two size/count messages are functions so the limit can be interpolated. */
759
797
  interface FileUploadZoneStrings {
760
798
  chooseFile: string;
761
799
  addImage: string;
@@ -764,6 +802,7 @@ interface FileUploadZoneStrings {
764
802
  fileTooLarge: (maxSizeLabel: string) => string;
765
803
  tooManyFiles: (max: number) => string;
766
804
  }
805
+ /** Drag-and-drop file picker with client-side accept/size/count validation and image previews; uploading is the consumer's job (it only emits `fileChange`/`filesChange`), it is not a ControlValueAccessor, and it uses `ViewEncapsulation.None`. */
767
806
  declare class SceFileUploadZoneComponent implements OnDestroy {
768
807
  private readonly translate;
769
808
  locale: _angular_core.InputSignal<"ar" | "en">;
@@ -838,6 +877,7 @@ declare class SceFileUploadZoneComponent implements OnDestroy {
838
877
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFileUploadZoneComponent, "sce-file-upload-zone", never, { "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "uploading": { "alias": "uploading"; "required": false; "isSignal": true; }; "uploadError": { "alias": "uploadError"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "allowDrop": { "alias": "allowDrop"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxFileSizeBytes": { "alias": "maxFileSizeBytes"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "showPreviews": { "alias": "showPreviews"; "required": false; "isSignal": true; }; "appendOnSelect": { "alias": "appendOnSelect"; "required": false; "isSignal": true; }; "existingItems": { "alias": "existingItems"; "required": false; "isSignal": true; }; "strings": { "alias": "strings"; "required": false; "isSignal": true; }; "topLabel": { "alias": "topLabel"; "required": false; "isSignal": true; }; }, { "fileChange": "fileChange"; "filesChange": "filesChange"; "removeExisting": "removeExisting"; "fileDialogOpen": "fileDialogOpen"; "fileDialogClose": "fileDialogClose"; }, never, never, true, never>;
839
878
  }
840
879
 
880
+ /** Design-system demo page for `sce-file-upload-zone`, showing its zone and dialog variants under the `dir` passed in. */
841
881
  declare class SceFileUploadZoneDemoComponent {
842
882
  readonly dir: _angular_core.InputSignal<"rtl" | "ltr">;
843
883
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceFileUploadZoneDemoComponent, never>;
@@ -848,19 +888,26 @@ declare class SceFileUploadZoneDemoComponent {
848
888
  * React source: Moatamed-Frontend/src/shared-utils/components/business-status/business-status-tone.ts
849
889
  */
850
890
  type BusinessStatusTone = 'draft-initial' | 'modified' | 'cancelled' | 'closed' | 'returned-edit' | 'active' | 'pending-beneficiary' | 'pending-approval' | 'request-draft' | 'open-offers' | 'extended' | 'request-closed' | 'awarded' | 'request-new' | 'rejected' | 'approved' | 'invitation-public' | 'invitation-direct' | 'fallback-1' | 'fallback-2' | 'fallback-3' | 'fallback-4' | 'fallback-5' | 'fallback-6' | 'fallback-7' | 'fallback-8';
891
+ /** Maps a free-text Arabic or English status label to a tone by keyword match, falling back to one of eight stable hash-picked tones. */
851
892
  declare function resolveBusinessStatusTone(label: string | null | undefined): BusinessStatusTone;
893
+ /** A status label paired with the `BusinessStatusTone` resolved for it. */
852
894
  interface BusinessStatusPresentation {
853
895
  label: string;
854
896
  tone: BusinessStatusTone;
855
897
  }
898
+ /** Resolves a label and its tone together, substituting `fallbackLabel` (an em dash by default) when the label is blank. */
856
899
  declare function resolveBusinessStatusPresentation(label: string | null | undefined, fallbackLabel?: string): BusinessStatusPresentation;
900
+ /** Convenience wrapper over `resolveBusinessStatusPresentation` that returns the plain `{ label, tone }` shape table cells bind to. */
857
901
  declare function toBusinessStatusTableCell(label: string | null | undefined, fallbackLabel?: string): {
858
902
  label: string;
859
903
  tone: BusinessStatusTone;
860
904
  };
861
905
 
906
+ /** Colour scheme of `sce-tag`; ignored when `businessTone` is supplied. */
862
907
  type SceTagVariant = 'pending' | 'in-progress' | 'info' | 'success' | 'inactive' | 'danger' | 'warning' | 'neutral' | 'purple' | 'assigned' | 'review' | 'new' | 'closed';
908
+ /** Height and typography scale of `sce-tag`; defaults to `md`. */
863
909
  type SceTagSize = 'sm' | 'md' | 'lg';
910
+ /** Status pill rendering `label`; colour comes from `businessTone` when set and otherwise from `variant` (default `pending`), and it uses `ViewEncapsulation.None`. */
864
911
  declare class SceTagComponent {
865
912
  readonly label: _angular_core.InputSignal<string>;
866
913
  readonly variant: _angular_core.InputSignal<SceTagVariant>;
@@ -876,6 +923,7 @@ declare class SceTagComponent {
876
923
 
877
924
  /** Shared with `sce-status-page` so every page state speaks the same visual language. */
878
925
  type EmptyStateTone = 'neutral' | 'info' | 'success' | 'warning' | 'error';
926
+ /** Empty state with an illustration (or a tinted PrimeIcons circle when no `imageSrc` is given), a title and a subtitle, each settable as literal text or a translation key; the `error` tone announces assertively via `role="alert"` while every other tone stays a polite status. */
879
927
  declare class SceEmptyStateComponent {
880
928
  /** Translation key for the title (e.g. COMMON.NO_DATA). Used when title is not provided. */
881
929
  readonly titleKey: _angular_core.InputSignal<string | undefined>;
@@ -922,6 +970,7 @@ declare class SceEmptyStateComponent {
922
970
  type ResultStateStatus = 'api-error' | 'network-offline' | 'timeout' | 'server-error' | 'no-data' | 'no-filter-results' | 'no-search-results' | 'not-found' | 'forbidden' | 'unauthorized' | 'maintenance' | 'coming-soon' | 'first-use';
923
971
  /** Action buttons a preset can offer. The first entry renders as the primary button. */
924
972
  type ResultStateAction = 'retry' | 'back' | 'clearFilters' | 'clearSearch' | 'signIn';
973
+ /** The tone, icon, copy keys, and default action buttons `sce-result-state` renders for one status. */
925
974
  interface ResultStatePreset {
926
975
  readonly tone: EmptyStateTone;
927
976
  /** PrimeIcons suffix. */
@@ -947,6 +996,7 @@ declare const RESULT_STATE_ACTION_META: Readonly<Record<ResultStateAction, {
947
996
  directional?: boolean;
948
997
  }>>;
949
998
 
999
+ /** One column of `sce-generic-table`: the row `field` to read, its header text, and optional sorting (via `sortKey`) and alignment. */
950
1000
  interface SceTableColumn {
951
1001
  field: string;
952
1002
  header: string;
@@ -954,11 +1004,13 @@ interface SceTableColumn {
954
1004
  sortKey?: string;
955
1005
  align?: 'start' | 'center' | 'end';
956
1006
  }
1007
+ /** Cell value that renders as a status tag; supply `businessTone` for the business-status palette, otherwise `variant` picks an `SceTagVariant`. */
957
1008
  interface SceTableStatusCell {
958
1009
  label: string;
959
1010
  variant?: SceTagVariant;
960
1011
  tone?: BusinessStatusTone;
961
1012
  }
1013
+ /** Cell value that renders as a toggle switch; the table echoes `rowId` and the column field back through `switchChange`. */
962
1014
  interface SceTableSwitchCell {
963
1015
  type: 'switch';
964
1016
  checked: boolean;
@@ -967,20 +1019,24 @@ interface SceTableSwitchCell {
967
1019
  inactiveLabel?: string;
968
1020
  rowId: string;
969
1021
  }
1022
+ /** Per-row opt-in for the edit and delete action buttons, set on a row's `_rowActions` key. */
970
1023
  interface SceTableRowActions {
971
1024
  edit?: boolean;
972
1025
  delete?: boolean;
973
1026
  }
1027
+ /** One row of `sce-generic-table`: a required `id`, an optional `rowHref`/`_rowActions`, and an open index of cell values that may be plain strings, status cells, or switch cells. */
974
1028
  interface SceTableRow {
975
1029
  id: string;
976
1030
  rowHref?: string;
977
1031
  _rowActions?: SceTableRowActions;
978
1032
  [key: string]: string | SceTableStatusCell | SceTableSwitchCell | SceTableRowActions | undefined;
979
1033
  }
1034
+ /** Current table sort: the column key plus a tri-state `orderBy` (0 unsorted, 1 ascending, 2 descending). */
980
1035
  interface SceTableSort {
981
1036
  key: string;
982
1037
  orderBy: 0 | 1 | 2;
983
1038
  }
1039
+ /** Pagination config for `sce-generic-table`; `mode: 'client'` slices the supplied rows, while `'server'` expects the host to honour `pageChange` and provide `totalItems`. */
984
1040
  interface SceTablePagination {
985
1041
  enabled?: boolean;
986
1042
  pageSize?: number;
@@ -990,6 +1046,7 @@ interface SceTablePagination {
990
1046
  page?: number;
991
1047
  totalItems?: number;
992
1048
  }
1049
+ /** Data table driven by `columns` and `rows`, with sorting, client- or server-side pagination, status/switch cells, and row actions; its empty body reads differently depending on `error`, `searching`, and `filtered`, and it uses `ViewEncapsulation.None`. */
993
1050
  declare class SceGenericTableComponent {
994
1051
  private readonly messageService;
995
1052
  private readonly translate;
@@ -1114,6 +1171,7 @@ declare class SceGenericTableComponent {
1114
1171
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGenericTableComponent, "sce-generic-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "loadingDelay": { "alias": "loadingDelay"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorStatus": { "alias": "errorStatus"; "required": false; "isSignal": true; }; "filtered": { "alias": "filtered"; "required": false; "isSignal": true; }; "searching": { "alias": "searching"; "required": false; "isSignal": true; }; }, { "errorRetry": "errorRetry"; "clearFilters": "clearFilters"; "clearSearch": "clearSearch"; "sortChange": "sortChange"; "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; "rowClick": "rowClick"; "switchChange": "switchChange"; "editClick": "editClick"; "deleteClick": "deleteClick"; }, never, never, true, never>;
1115
1172
  }
1116
1173
 
1174
+ /** Design-system demo harness for `sce-generic-table` with three hard-coded rows; its columns and rows re-translate whenever `LanguageService.locale()` changes. */
1117
1175
  declare class SceGenericTableDemoComponent {
1118
1176
  private readonly translate;
1119
1177
  private readonly language;
@@ -1124,6 +1182,7 @@ declare class SceGenericTableDemoComponent {
1124
1182
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGenericTableDemoComponent, "sce-generic-table-demo", never, {}, {}, never, never, true, never>;
1125
1183
  }
1126
1184
 
1185
+ /** Status tag whose colour tone is inferred from the label text when `tone` is not supplied explicitly. */
1127
1186
  declare class SceBusinessStatusTagComponent {
1128
1187
  label: _angular_core.InputSignal<string>;
1129
1188
  tone: _angular_core.InputSignal<BusinessStatusTone | undefined>;
@@ -1133,6 +1192,7 @@ declare class SceBusinessStatusTagComponent {
1133
1192
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceBusinessStatusTagComponent, "sce-business-status-tag", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1134
1193
  }
1135
1194
 
1195
+ /** Verified/unverified badge icon derived from an engineering office's service-provider status. */
1136
1196
  declare class SceEngineeringOfficeVerificationBadgeComponent {
1137
1197
  readonly status: _angular_core.InputSignal<OrganizationServiceProviderStatus | null | undefined>;
1138
1198
  readonly size: _angular_core.InputSignal<number>;
@@ -1143,6 +1203,7 @@ declare class SceEngineeringOfficeVerificationBadgeComponent {
1143
1203
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceEngineeringOfficeVerificationBadgeComponent, "sce-engineering-office-verification-badge", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1144
1204
  }
1145
1205
 
1206
+ /** Circular office logo that renders uploaded photos with `object-fit: cover` and bundled SVGs with `contain`, falling back to the default office icon when the source is empty or fails to load. */
1146
1207
  declare class SceOfficeBrandLogoComponent {
1147
1208
  /** Logo source. http(s)/CMS/blob/data render as photo; anything else as bundled icon. */
1148
1209
  readonly src: _angular_core.InputSignal<string>;
@@ -1160,6 +1221,7 @@ declare class SceOfficeBrandLogoComponent {
1160
1221
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeBrandLogoComponent, "sce-office-brand-logo", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "iconClassName": { "alias": "iconClassName"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1161
1222
  }
1162
1223
 
1224
+ /** Inline error banner for an already-resolved `message`, showing a retry button only when `retryable` is opted into (it defaults to false so a failed save cannot re-trigger a load). */
1163
1225
  declare class SceInlineApiErrorComponent {
1164
1226
  message: _angular_core.InputSignal<string>;
1165
1227
  className: _angular_core.InputSignal<string>;
@@ -1280,7 +1342,9 @@ declare class SceGlobalLoadingBarComponent {
1280
1342
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGlobalLoadingBarComponent, "sce-global-loading-bar", never, {}, {}, never, never, true, never>;
1281
1343
  }
1282
1344
 
1345
+ /** Colour/tone of a notification badge, one per notification kind (contract, offer, approval, alert…). */
1283
1346
  type DashboardNotificationTypeVariant = 'contract-new' | 'contract-closed' | 'offer' | 'approved' | 'rejected' | 'alert' | 'info';
1347
+ /** Small pill showing a notification's kind: renders the already-translated `label` styled by `variant` (default `info`), with extra classes from `className`; uses `ViewEncapsulation.None`. */
1284
1348
  declare class SceNotificationTypeBadgeComponent {
1285
1349
  readonly label: _angular_core.InputSignal<string>;
1286
1350
  readonly variant: _angular_core.InputSignal<DashboardNotificationTypeVariant>;
@@ -1292,6 +1356,7 @@ declare class SceNotificationTypeBadgeComponent {
1292
1356
 
1293
1357
  type InfoFieldCardVariant = 'default' | 'highlight' | 'editable';
1294
1358
  type InfoFieldCardSize = 'default' | 'compact';
1359
+ /** Read-only label/value card used throughout profile and review screens, with default, highlight and editable variants. */
1295
1360
  declare class SceInfoFieldCardComponent {
1296
1361
  readonly label: _angular_core.InputSignal<string | undefined>;
1297
1362
  readonly value: _angular_core.InputSignal<string | undefined>;
@@ -1305,6 +1370,7 @@ declare class SceInfoFieldCardComponent {
1305
1370
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceInfoFieldCardComponent, "sce-info-field-card", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "labelClassName": { "alias": "labelClassName"; "required": false; "isSignal": true; }; "valueClassName": { "alias": "valueClassName"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1306
1371
  }
1307
1372
 
1373
+ /** Layout wrapper that arranges projected info-field cards into a one- to four-column grid. */
1308
1374
  declare class SceInfoFieldsGridComponent {
1309
1375
  readonly columns: _angular_core.InputSignal<1 | 3 | 4 | 2>;
1310
1376
  readonly gap: _angular_core.InputSignal<"sm" | "default">;
@@ -1330,6 +1396,7 @@ declare class ScePublicLegalProseComponent {
1330
1396
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePublicLegalProseComponent, "sce-public-legal-prose", never, { "html": { "alias": "html"; "required": true; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1331
1397
  }
1332
1398
 
1399
+ /** Table row-action affordance rendering the chevron icon with `alt` as its accessible text; uses `ViewEncapsulation.None`, so its styles are global. */
1333
1400
  declare class SceRowActionIconComponent {
1334
1401
  readonly alt: _angular_core.InputSignal<string>;
1335
1402
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceRowActionIconComponent, never>;
@@ -1337,6 +1404,7 @@ declare class SceRowActionIconComponent {
1337
1404
  }
1338
1405
 
1339
1406
  type DashboardRole$1 = 'client' | 'manager' | 'entity' | 'office';
1407
+ /** Avatar/role icon for a dashboard account; the supplied `photoUrl` is only used for individual client accounts, everything else falls back to the role icon. */
1340
1408
  declare class SceDashboardAccountRoleIconComponent {
1341
1409
  readonly role: _angular_core.InputSignal<DashboardRole$1>;
1342
1410
  readonly accountKind: _angular_core.InputSignal<"individual" | "organization" | undefined>;
@@ -1351,11 +1419,13 @@ declare class SceDashboardAccountRoleIconComponent {
1351
1419
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDashboardAccountRoleIconComponent, "sce-dashboard-account-role-icon", never, { "role": { "alias": "role"; "required": false; "isSignal": true; }; "accountKind": { "alias": "accountKind"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "photoUrl": { "alias": "photoUrl"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1352
1420
  }
1353
1421
 
1422
+ /** One label/value row of a review panel; a null or undefined `value` renders as a placeholder, and `hidden` drops the row entirely. */
1354
1423
  interface ReviewFieldItem {
1355
1424
  label: string;
1356
1425
  value: string | number | null | undefined;
1357
1426
  hidden?: boolean;
1358
1427
  }
1428
+ /** Panel rendering a list of label/value review fields as table rows, skipping any item marked `hidden`. */
1359
1429
  declare class SceReviewFieldTablePanelComponent {
1360
1430
  items: _angular_core.InputSignal<ReviewFieldItem[]>;
1361
1431
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceReviewFieldTablePanelComponent, never>;
@@ -1392,6 +1462,7 @@ declare class SceServiceCardStartButtonComponent {
1392
1462
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceServiceCardStartButtonComponent, "sce-service-card-start-button", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "externalStart": { "alias": "externalStart"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
1393
1463
  }
1394
1464
 
1465
+ /** View model of an engineering-office card; hero and logo each accept either a URL (`imageSrc`/`logoSrc`) or a blob `objectUrl`, and `extraTagsCount` drives the "+N more" chip. */
1395
1466
  interface SceEngineeringOfficeCardModel {
1396
1467
  name: string;
1397
1468
  imageSrc?: string;
@@ -1430,6 +1501,7 @@ declare class SceEngineeringOfficeCardComponent {
1430
1501
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceEngineeringOfficeCardComponent, "sce-engineering-office-card", never, { "office": { "alias": "office"; "required": true; "isSignal": true; }; "viewMode": { "alias": "viewMode"; "required": false; "isSignal": true; }; "bookmarkLabel": { "alias": "bookmarkLabel"; "required": false; "isSignal": true; }; "bookmarked": { "alias": "bookmarked"; "required": false; "isSignal": true; }; "ratingLabel": { "alias": "ratingLabel"; "required": false; "isSignal": true; }; "locationLabel": { "alias": "locationLabel"; "required": false; "isSignal": true; }; "otherLabel": { "alias": "otherLabel"; "required": false; "isSignal": true; }; }, { "bookmarkClick": "bookmarkClick"; }, never, never, true, never>;
1431
1502
  }
1432
1503
 
1504
+ /** Loading placeholder for the engineering office card, mirroring its grid or list layout via `viewMode`. */
1433
1505
  declare class SceEngineeringOfficeCardSkeletonComponent {
1434
1506
  readonly viewMode: _angular_core.InputSignal<"grid" | "list">;
1435
1507
  readonly wrapperClass: _angular_core.Signal<string>;
@@ -1438,17 +1510,20 @@ declare class SceEngineeringOfficeCardSkeletonComponent {
1438
1510
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceEngineeringOfficeCardSkeletonComponent, "sce-engineering-office-card-skeleton", never, { "viewMode": { "alias": "viewMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1439
1511
  }
1440
1512
 
1513
+ /** Contents of one office metric tile: a `title`, a `subtitle` and an optional icon name. */
1441
1514
  interface OfficeMetricCardItem {
1442
1515
  title: string;
1443
1516
  subtitle: string;
1444
1517
  icon?: string;
1445
1518
  }
1519
+ /** Single office metric tile rendering a title, subtitle and optional icon in an accent or soft variant. */
1446
1520
  declare class SceOfficeMetricCardComponent {
1447
1521
  readonly item: _angular_core.InputSignal<OfficeMetricCardItem>;
1448
1522
  readonly variant: _angular_core.InputSignal<"accent" | "soft">;
1449
1523
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceOfficeMetricCardComponent, never>;
1450
1524
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeMetricCardComponent, "sce-office-metric-card", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1451
1525
  }
1526
+ /** Row of office metric tiles laid out in two or three columns, sharing one variant across all items. */
1452
1527
  declare class SceOfficeMetricCardsRowComponent {
1453
1528
  readonly items: _angular_core.InputSignal<OfficeMetricCardItem[]>;
1454
1529
  readonly variant: _angular_core.InputSignal<"accent" | "soft">;
@@ -1457,6 +1532,7 @@ declare class SceOfficeMetricCardsRowComponent {
1457
1532
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeMetricCardsRowComponent, "sce-office-metric-cards-row", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1458
1533
  }
1459
1534
 
1535
+ /** Loading placeholder matching `sce-info-fields-grid`: `count` info-field cards (default 6) with an optional section-title bar. */
1460
1536
  declare class SceInfoFieldsSkeletonComponent {
1461
1537
  /** Number of info-field cards to render */
1462
1538
  readonly count: _angular_core.InputSignal<number>;
@@ -1469,6 +1545,7 @@ declare class SceInfoFieldsSkeletonComponent {
1469
1545
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceInfoFieldsSkeletonComponent, "sce-info-fields-skeleton", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "showSectionTitle": { "alias": "showSectionTitle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1470
1546
  }
1471
1547
 
1548
+ /** Loading placeholder for a form: `count` label-plus-input pairs (default 6) laid out in one or two `columns`. */
1472
1549
  declare class SceFormFieldsSkeletonComponent {
1473
1550
  readonly count: _angular_core.InputSignal<number>;
1474
1551
  readonly columns: _angular_core.InputSignal<1 | 2>;
@@ -1477,6 +1554,7 @@ declare class SceFormFieldsSkeletonComponent {
1477
1554
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFormFieldsSkeletonComponent, "sce-form-fields-skeleton", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1478
1555
  }
1479
1556
 
1557
+ /** Loading placeholder for a notification list: `count` rows (default 5), with `compact` tightening the padding for dropdown menus. */
1480
1558
  declare class SceNotificationListSkeletonComponent {
1481
1559
  readonly count: _angular_core.InputSignal<number>;
1482
1560
  /** Compact padding for dropdown menus */
@@ -1486,6 +1564,7 @@ declare class SceNotificationListSkeletonComponent {
1486
1564
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceNotificationListSkeletonComponent, "sce-notification-list-skeleton", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1487
1565
  }
1488
1566
 
1567
+ /** Loading placeholder for a profile page: a hero banner of `heroHeight` (default `230px`) above `fieldCount` info-field placeholders. */
1489
1568
  declare class SceProfileHeroSkeletonComponent {
1490
1569
  readonly heroHeight: _angular_core.InputSignal<string>;
1491
1570
  readonly fieldCount: _angular_core.InputSignal<number>;
@@ -1493,7 +1572,9 @@ declare class SceProfileHeroSkeletonComponent {
1493
1572
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceProfileHeroSkeletonComponent, "sce-profile-hero-skeleton", never, { "heroHeight": { "alias": "heroHeight"; "required": false; "isSignal": true; }; "fieldCount": { "alias": "fieldCount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1494
1573
  }
1495
1574
 
1575
+ /** Wrapper style for the table skeleton: a standalone card, or the `.block` shell used by dashboard tables. */
1496
1576
  type SceTableSkeletonLayout = 'standalone' | 'dashboard-block';
1577
+ /** Loading placeholder for a data table (`columns` x `rows`, default 5x5), cycling a fixed set of column widths and treating the last column as a status pill; `wrapInCard` defaults to true. */
1497
1578
  declare class SceTableSkeletonComponent {
1498
1579
  readonly columns: _angular_core.InputSignal<number>;
1499
1580
  readonly rows: _angular_core.InputSignal<number>;
@@ -1538,17 +1619,20 @@ declare class SceFeaturedOfficeCardSkeletonComponent {
1538
1619
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFeaturedOfficeCardSkeletonComponent, "sce-featured-office-card-skeleton", never, {}, {}, never, never, true, never>;
1539
1620
  }
1540
1621
 
1622
+ /** Fixed loading placeholder for the service-detail page; takes no inputs. */
1541
1623
  declare class SceServiceDetailSkeletonComponent {
1542
1624
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceServiceDetailSkeletonComponent, never>;
1543
1625
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceServiceDetailSkeletonComponent, "sce-service-detail-skeleton", never, {}, {}, never, never, true, never>;
1544
1626
  }
1545
1627
 
1628
+ /** Loading placeholder for the office-details panel — `count` repeated blocks (minimum 1); uses `ViewEncapsulation.None` and shares its styles with the office-projects skeleton. */
1546
1629
  declare class SceOfficeDetailsSkeletonComponent {
1547
1630
  readonly count: _angular_core.InputSignal<number>;
1548
1631
  readonly countArray: _angular_core.Signal<number[]>;
1549
1632
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceOfficeDetailsSkeletonComponent, never>;
1550
1633
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailsSkeletonComponent, "sce-office-details-skeleton", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1551
1634
  }
1635
+ /** Office-projects loading placeholder; reuses the office-details skeleton template but carries no styles of its own, so it inherits them from an office-details skeleton rendered elsewhere on the page (`ViewEncapsulation.None`). */
1552
1636
  declare class SceOfficeProjectsSkeletonComponent {
1553
1637
  readonly count: _angular_core.InputSignal<number>;
1554
1638
  readonly countArray: _angular_core.Signal<number[]>;
@@ -1556,6 +1640,7 @@ declare class SceOfficeProjectsSkeletonComponent {
1556
1640
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProjectsSkeletonComponent, "sce-office-projects-skeleton", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1557
1641
  }
1558
1642
 
1643
+ /** One engineering office plotted on the offices map; `approximate` marks a coordinate derived from a city or region rather than a precise address. */
1559
1644
  interface SceOsmOfficeMapPoint {
1560
1645
  id: string | number;
1561
1646
  name: string;
@@ -1592,10 +1677,12 @@ declare class SceOsmOfficesMapComponent implements AfterViewInit, OnChanges, OnD
1592
1677
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOsmOfficesMapComponent, "sce-osm-offices-map", never, { "offices": { "alias": "offices"; "required": false; "isSignal": true; }; "selectedOfficeId": { "alias": "selectedOfficeId"; "required": false; "isSignal": true; }; "showTooltip": { "alias": "showTooltip"; "required": false; "isSignal": true; }; "ariaLabelInput": { "alias": "ariaLabelInput"; "required": false; "isSignal": true; }; }, { "selectOffice": "selectOffice"; "ready": "ready"; "mapError": "mapError"; }, never, never, true, never>;
1593
1678
  }
1594
1679
 
1680
+ /** An inclusive from/to date range, with `null` on either end meaning that bound is open. */
1595
1681
  interface FilterDateRangeValue {
1596
1682
  from: Date | null;
1597
1683
  to: Date | null;
1598
1684
  }
1685
+ /** Filter-bar date-range picker with a leading icon and a clear button; works controlled when `value` is bound and falls back to its own internal state when it is left `undefined`, and uses `ViewEncapsulation.None`. */
1599
1686
  declare class SceFilterCalendarRangeComponent {
1600
1687
  locale: _angular_core.InputSignal<"ar" | "en">;
1601
1688
  placeholder: _angular_core.InputSignal<string>;
@@ -1617,10 +1704,12 @@ declare class SceFilterCalendarRangeComponent {
1617
1704
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFilterCalendarRangeComponent, "sce-filter-calendar-range", never, { "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "iconAlt": { "alias": "iconAlt"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1618
1705
  }
1619
1706
 
1707
+ /** A single choice offered by a `select`-kind `DashboardFilterField`. */
1620
1708
  interface DashboardFilterFieldOption {
1621
1709
  label: string;
1622
1710
  value: string;
1623
1711
  }
1712
+ /** Discriminated union of the filter controls a dashboard table can render, keyed by `kind` (`search`, `text`, `select`, `date`, `dateRange`); each variant carries its own value and `onChange` callback rather than being bound with `ngModel`. */
1624
1713
  type DashboardFilterField = {
1625
1714
  kind: 'search';
1626
1715
  id: string;
@@ -1667,6 +1756,7 @@ type DashboardFilterField = {
1667
1756
  iconSrc?: string;
1668
1757
  iconAlt?: string;
1669
1758
  };
1759
+ /** Renders a dashboard table's filter row from a declarative `fields` array and exposes `hasActiveSearch`/`hasActiveFilters` plus `clearSearch()`/`clearFilters()` for a page to drive via a template reference; uses `ViewEncapsulation.None`. */
1670
1760
  declare class SceDashboardTableFiltersComponent {
1671
1761
  locale: _angular_core.InputSignal<"ar" | "en">;
1672
1762
  idPrefix: _angular_core.InputSignal<string>;
@@ -1697,10 +1787,12 @@ declare class SceDashboardTableFiltersComponent {
1697
1787
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDashboardTableFiltersComponent, "sce-dashboard-table-filters", never, { "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "idPrefix": { "alias": "idPrefix"; "required": false; "isSignal": true; }; "fields": { "alias": "fields"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1698
1788
  }
1699
1789
 
1790
+ /** A single `label`/`value` choice in `sce-filter-dropdown`. */
1700
1791
  interface FilterDropdownOption {
1701
1792
  label: string;
1702
1793
  value: string;
1703
1794
  }
1795
+ /** Filter-bar select built on PrimeNG `Select` with an optional leading icon, clear button, and type-ahead `filter`; controlled when `value` is bound and self-managing when it is left `undefined`, and uses `ViewEncapsulation.None`. */
1704
1796
  declare class SceFilterDropdownComponent {
1705
1797
  id: _angular_core.InputSignal<string>;
1706
1798
  locale: _angular_core.InputSignal<"ar" | "en">;
@@ -1724,6 +1816,7 @@ declare class SceFilterDropdownComponent {
1724
1816
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFilterDropdownComponent, "sce-filter-dropdown", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "iconAlt": { "alias": "iconAlt"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1725
1817
  }
1726
1818
 
1819
+ /** Filter-bar single-date picker with a leading icon and a clear button; controlled when `value` is bound and self-managing when it is left `undefined`, and uses `ViewEncapsulation.None`. */
1727
1820
  declare class SceFilterCalendarComponent {
1728
1821
  locale: _angular_core.InputSignal<"ar" | "en">;
1729
1822
  placeholder: _angular_core.InputSignal<string>;
@@ -1761,6 +1854,7 @@ interface ServicesTopFiltersChange {
1761
1854
  */
1762
1855
  /** Which of the three dropdowns a change came from. */
1763
1856
  type SceServicesTopFilterField = 'category' | 'target' | 'extra';
1857
+ /** Filter bar for the public services and offices listings, rendering a search box plus category, target, extra and sort dropdowns and emitting the resolved filter state via `filtersChange`. */
1764
1858
  declare class SceServicesTopFiltersComponent implements OnInit {
1765
1859
  private readonly language;
1766
1860
  private readonly translate;
@@ -1858,10 +1952,12 @@ declare class SceServicesTopFiltersComponent implements OnInit {
1858
1952
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceServicesTopFiltersComponent, "sce-services-top-filters", never, { "q": { "alias": "q"; "required": false; "isSignal": true; }; "category": { "alias": "category"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "targets": { "alias": "targets"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "extra": { "alias": "extra"; "required": false; "isSignal": true; }; "extraOptions": { "alias": "extraOptions"; "required": false; "isSignal": true; }; "extraParamName": { "alias": "extraParamName"; "required": false; "isSignal": true; }; }, { "filtersChange": "filtersChange"; }, never, never, true, never>;
1859
1953
  }
1860
1954
 
1955
+ /** One entry in the landing navigation bar: the router path and the i18n key rendered as its label. */
1861
1956
  interface LandingNavItem {
1862
1957
  href: string;
1863
1958
  label: string;
1864
1959
  }
1960
+ /** Landing-page navigation bar that renders the required `items` as router links with route prefetching and active-route highlighting. */
1865
1961
  declare class SceLandingNavComponent {
1866
1962
  readonly items: _angular_core.InputSignal<LandingNavItem[]>;
1867
1963
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceLandingNavComponent, never>;
@@ -1896,6 +1992,7 @@ declare class SceLandingMobileMenuComponent {
1896
1992
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLandingMobileMenuComponent, "sce-landing-mobile-menu", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1897
1993
  }
1898
1994
 
1995
+ /** Button that switches the app between Arabic and English through LanguageService, labelled with the language it will switch to rather than the current one. */
1899
1996
  declare class SceLangToggleComponent {
1900
1997
  private readonly language;
1901
1998
  private readonly translate;
@@ -1908,6 +2005,7 @@ declare class SceLangToggleComponent {
1908
2005
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLangToggleComponent, "sce-lang-toggle", never, { "lightContext": { "alias": "lightContext"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1909
2006
  }
1910
2007
 
2008
+ /** Light/dark theme switcher backed by ThemeService, with labels falling back to translated defaults. */
1911
2009
  declare class SceThemeSwitcherComponent {
1912
2010
  private readonly themeService;
1913
2011
  private readonly translate;
@@ -1941,6 +2039,7 @@ declare class SceThemeToggleButtonComponent {
1941
2039
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceThemeToggleButtonComponent, "sce-theme-toggle-button", never, {}, {}, never, never, true, never>;
1942
2040
  }
1943
2041
 
2042
+ /** Tone of an action dialog's confirm button — `danger` for destructive actions. */
1944
2043
  type ActionDialogVariant = 'primary' | 'danger';
1945
2044
  /** Legacy reason-field config preserved for back-compat. */
1946
2045
  interface ActionDialogField {
@@ -1952,6 +2051,7 @@ interface ActionDialogField {
1952
2051
  multiline?: boolean;
1953
2052
  error?: string;
1954
2053
  }
2054
+ /** Thin wrapper over `sce-confirm-dialog` for approve/reject actions, offering a convenience reason-textarea API (`showReasonInput` and friends) alongside the legacy `field` config, which wins when both are supplied. */
1955
2055
  declare class SceActionDialogComponent {
1956
2056
  visible: _angular_core.InputSignal<boolean>;
1957
2057
  locale: _angular_core.InputSignal<"ar" | "en">;
@@ -1995,11 +2095,14 @@ declare class SceActionDialogComponent {
1995
2095
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceActionDialogComponent, "sce-action-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "confirmLabel": { "alias": "confirmLabel"; "required": true; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "confirmDisabled": { "alias": "confirmDisabled"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": false; "isSignal": true; }; "showReasonInput": { "alias": "showReasonInput"; "required": false; "isSignal": true; }; "reasonLabel": { "alias": "reasonLabel"; "required": false; "isSignal": true; }; "reasonPlaceholder": { "alias": "reasonPlaceholder"; "required": false; "isSignal": true; }; "reasonValue": { "alias": "reasonValue"; "required": false; "isSignal": true; }; "reasonRequired": { "alias": "reasonRequired"; "required": false; "isSignal": true; }; "reasonError": { "alias": "reasonError"; "required": false; "isSignal": true; }; }, { "close": "close"; "cancel": "cancel"; "confirm": "confirm"; "reasonChange": "reasonChange"; "fieldChange": "fieldChange"; }, never, never, true, never>;
1996
2096
  }
1997
2097
 
2098
+ /** Tone of a form dialog's submit button. */
1998
2099
  type FormDialogVariant = 'primary' | 'danger' | 'success';
2100
+ /** An extra footer button beside submit and cancel in `sce-form-dialog`; clicking it emits an output rather than submitting the form. */
1999
2101
  interface FormDialogSecondaryAction {
2000
2102
  label: string;
2001
2103
  disabled?: boolean;
2002
2104
  }
2105
+ /** Dialog shell for forms, with submit/cancel footer buttons, an optional secondary action and an error banner; the footer submit button lives outside the projected `<form>` and is wired to it by a generated id, so submission goes through the native form submit event. */
2003
2106
  declare class SceFormDialogComponent {
2004
2107
  private readonly translate;
2005
2108
  visible: _angular_core.InputSignal<boolean>;
@@ -2035,6 +2138,7 @@ declare class SceFormDialogComponent {
2035
2138
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFormDialogComponent, "sce-form-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "isSubmitting": { "alias": "isSubmitting"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "dismissableMask": { "alias": "dismissableMask"; "required": false; "isSignal": true; }; "secondaryAction": { "alias": "secondaryAction"; "required": false; "isSignal": true; }; "secondaryActionPosition": { "alias": "secondaryActionPosition"; "required": false; "isSignal": true; }; }, { "close": "close"; "submitForm": "submitForm"; "submitValues": "submitValues"; "secondaryActionClick": "secondaryActionClick"; }, never, ["*"], true, never>;
2036
2139
  }
2037
2140
 
2141
+ /** Optionally-titled section wrapper for grouping projected fields inside `sce-form-dialog`, laid out in one or two columns. */
2038
2142
  declare class SceFormDialogSectionComponent {
2039
2143
  title: _angular_core.InputSignal<string | undefined>;
2040
2144
  twoColumn: _angular_core.InputSignal<boolean>;
@@ -2042,6 +2146,7 @@ declare class SceFormDialogSectionComponent {
2042
2146
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFormDialogSectionComponent, "sce-form-dialog-section", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "twoColumn": { "alias": "twoColumn"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2043
2147
  }
2044
2148
 
2149
+ /** Renders the small leading `<img>` icon inside a filter control, sized 20x20 by default and omitted entirely when `iconSrc` is unset. */
2045
2150
  declare class SceFilterFieldIconComponent {
2046
2151
  iconSrc: _angular_core.InputSignal<string | undefined>;
2047
2152
  iconAlt: _angular_core.InputSignal<string>;
@@ -2052,11 +2157,13 @@ declare class SceFilterFieldIconComponent {
2052
2157
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFilterFieldIconComponent, "sce-filter-field-icon", never, { "iconSrc": { "alias": "iconSrc"; "required": false; "isSignal": true; }; "iconAlt": { "alias": "iconAlt"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2053
2158
  }
2054
2159
 
2160
+ /** One accordion panel: an `id` used for open/close identity, plus its `title` and `content` strings. */
2055
2161
  interface AccordionItem {
2056
2162
  id: number | string;
2057
2163
  title: string;
2058
2164
  content: string;
2059
2165
  }
2166
+ /** Single-expand accordion that renders a list of title/content items, toggling one open panel at a time. */
2060
2167
  declare class SceAccordionComponent {
2061
2168
  items: _angular_core.InputSignal<AccordionItem[]>;
2062
2169
  className: _angular_core.InputSignal<string>;
@@ -2069,11 +2176,13 @@ declare class SceAccordionComponent {
2069
2176
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccordionComponent, "sce-accordion", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "itemClassName": { "alias": "itemClassName"; "required": false; "isSignal": true; }; "headerClassName": { "alias": "headerClassName"; "required": false; "isSignal": true; }; "contentClassName": { "alias": "contentClassName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2070
2177
  }
2071
2178
 
2179
+ /** One step in a wizard stepper, identified by a numeric `id` that also orders it against `currentStep`. */
2072
2180
  interface StepItem$1 {
2073
2181
  id: number;
2074
2182
  title: string;
2075
2183
  completed?: boolean;
2076
2184
  }
2185
+ /** Horizontal wizard progress indicator with three `variant`s (numbered `steps`, a `progress` bar, or `pills`), optional per-step error markers, and click-to-navigate gated by `clickable` (off by default) plus an `isStepClickable` predicate; uses `ViewEncapsulation.None`. */
2077
2186
  declare class SceHorizontalWizardStepperComponent {
2078
2187
  private readonly translate;
2079
2188
  steps: _angular_core.InputSignal<StepItem$1[]>;
@@ -2114,6 +2223,7 @@ declare class SceHorizontalWizardStepperComponent {
2114
2223
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceHorizontalWizardStepperComponent, "sce-horizontal-wizard-stepper", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "currentStep": { "alias": "currentStep"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "errorStepIds": { "alias": "errorStepIds"; "required": false; "isSignal": true; }; "isStepClickable": { "alias": "isStepClickable"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "stepClick": "stepClick"; "showError": "showError"; }, never, never, true, never>;
2115
2224
  }
2116
2225
 
2226
+ /** Vertical wizard stepper sharing `StepItem` with the horizontal one; unlike that component `clickable` defaults to true, and `errorStepIds` marks steps whose `showError` link is emitted on click. */
2117
2227
  declare class SceVerticalStepperComponent {
2118
2228
  private readonly translate;
2119
2229
  steps: _angular_core.InputSignal<StepItem$1[]>;
@@ -2163,9 +2273,12 @@ declare class SceVerticalStepperComponent {
2163
2273
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceVerticalStepperComponent, "sce-vertical-stepper", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "currentStep": { "alias": "currentStep"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "errorStepIds": { "alias": "errorStepIds"; "required": false; "isSignal": true; }; "isStepClickable": { "alias": "isStepClickable"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "stepClick": "stepClick"; "showError": "showError"; }, never, never, true, never>;
2164
2274
  }
2165
2275
 
2276
+ /** Size preset shared by the loader components; each maps to a fixed pixel dimension (28 / 42 / 56). */
2166
2277
  type LoaderSize = 'sm' | 'md' | 'lg';
2278
+ /** Whether a loader sits in the flow of the page or covers the viewport as a blocking overlay. */
2167
2279
  type LoaderVariant = 'inline' | 'fullscreen';
2168
2280
 
2281
+ /** Branded loading indicator that animates the app logo at a small/medium/large size preset, rendered inline or as a fullscreen overlay. */
2169
2282
  declare class SceBrandLoaderComponent {
2170
2283
  private readonly translate;
2171
2284
  size: _angular_core.InputSignal<LoaderSize>;
@@ -2179,6 +2292,7 @@ declare class SceBrandLoaderComponent {
2179
2292
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceBrandLoaderComponent, "sce-brand-loader", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "hintText": { "alias": "hintText"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2180
2293
  }
2181
2294
 
2295
+ /** Spinning ring loading indicator drawn with a radial-gradient mask at a size preset, rendered inline or as a fullscreen overlay. */
2182
2296
  declare class SceRingLoaderComponent {
2183
2297
  private readonly translate;
2184
2298
  size: _angular_core.InputSignal<LoaderSize>;
@@ -2193,6 +2307,7 @@ declare class SceRingLoaderComponent {
2193
2307
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceRingLoaderComponent, "sce-ring-loader", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hintText": { "alias": "hintText"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2194
2308
  }
2195
2309
 
2310
+ /** Loading indicator that renders two meshed, counter-rotating SVG gears whose paths are generated at module load, sized by preset and shown inline or as a fullscreen overlay. */
2196
2311
  declare class SceGearsLoaderComponent {
2197
2312
  private readonly translate;
2198
2313
  size: _angular_core.InputSignal<LoaderSize>;
@@ -2212,8 +2327,11 @@ declare class SceGearsLoaderComponent {
2212
2327
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGearsLoaderComponent, "sce-gears-loader", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hintText": { "alias": "hintText"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2213
2328
  }
2214
2329
 
2330
+ /** Shape preset of `SceSkeleton`, each carrying its own default height and radius. */
2215
2331
  type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded' | 'avatar' | 'button' | 'chip' | 'card' | 'image' | 'header' | 'paragraph' | 'divider' | 'badge' | 'input';
2332
+ /** Shimmer animation of `SceSkeleton`; defaults to `wave`. */
2216
2333
  type SkeletonAnimation = 'pulse' | 'wave' | 'none';
2334
+ /** Loading placeholder in one of several shape variants, optionally repeated `count` times with a shortened last line. */
2217
2335
  declare class SceSkeleton {
2218
2336
  /** Shape variant of the skeleton */
2219
2337
  readonly variant: _angular_core.InputSignal<SkeletonVariant>;
@@ -2253,6 +2371,7 @@ declare class SceSkeleton {
2253
2371
  * to let the icon size itself via CSS (useful inside flex/grid containers).
2254
2372
  */
2255
2373
  type IconSize = number | 'auto' | null;
2374
+ /** Inline SVG icon that fetches the named asset over HTTP, sanitizes it and caches it in a module-level cache shared by all instances. */
2256
2375
  declare class SceIcon {
2257
2376
  private readonly http;
2258
2377
  private readonly sanitizer;
@@ -2276,8 +2395,11 @@ declare class SceIcon {
2276
2395
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceIcon, "sce-icon", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2277
2396
  }
2278
2397
 
2398
+ /** Visual style of `SceButton`, driving the `btn--*` modifier class. */
2279
2399
  type SceButtonVariant = 'primary' | 'black' | 'neutral' | 'secondary' | 'transparent' | 'outline' | 'danger' | 'text' | 'link';
2400
+ /** Size preset of `SceButton`; `small-icon-only` is the square icon-button form. */
2280
2401
  type SceButtonSize = 'compact' | 'mini' | 'extra-small' | 'small-icon-only' | 'small' | 'medium' | 'large';
2402
+ /** Design-system button that renders an `<a>` when `routerLink` or `href` is set and a `<button>` otherwise; note `fullWidth` defaults to true. */
2281
2403
  declare class SceButton {
2282
2404
  readonly variant: _angular_core.InputSignal<SceButtonVariant>;
2283
2405
  readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
@@ -2305,6 +2427,7 @@ declare class SceButton {
2305
2427
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceButton, "sce-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2306
2428
  }
2307
2429
 
2430
+ /** Labelled checkbox implementing `ControlValueAccessor`, so it works with `formControl`/`ngModel` as well as the `changed` output. */
2308
2431
  declare class SceCheckbox implements ControlValueAccessor {
2309
2432
  readonly label: _angular_core.InputSignal<string>;
2310
2433
  readonly inputId: _angular_core.InputSignal<string | undefined>;
@@ -2335,7 +2458,9 @@ declare class SceSpinner {
2335
2458
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceSpinner, "sce-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2336
2459
  }
2337
2460
 
2461
+ /** Side the tooltip pops out on; physical (not logical) because it maps straight onto PrimeNG's `tooltipPosition`. */
2338
2462
  type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
2463
+ /** Wraps projected content in a PrimeNG tooltip with the required `text` and a configurable position and z-index. */
2339
2464
  declare class SceTooltip {
2340
2465
  readonly text: _angular_core.InputSignal<string>;
2341
2466
  readonly position: _angular_core.InputSignal<TooltipPosition>;
@@ -2346,6 +2471,7 @@ declare class SceTooltip {
2346
2471
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceTooltip, "sce-tooltip", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2347
2472
  }
2348
2473
 
2474
+ /** Linear progress bar whose fill direction follows the app locale, with an optional label and a leading thumb that is on by default. */
2349
2475
  declare class SceProgressBar {
2350
2476
  private readonly languageService;
2351
2477
  /** Matches app language: Arabic -> rtl (fill from the right), English -> ltr (fill from the left). */
@@ -2364,6 +2490,7 @@ declare class SceProgressBar {
2364
2490
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceProgressBar, "sce-progress-bar", never, { "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "showThumb": { "alias": "showThumb"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2365
2491
  }
2366
2492
 
2493
+ /** SVG ring showing step progress (current of total) with an optional custom label, falling back to the COMMON.STEP_OF translation. */
2367
2494
  declare class SceCircularProgress {
2368
2495
  /** Current step (1-based). */
2369
2496
  readonly current: _angular_core.InputSignal<number>;
@@ -2398,6 +2525,7 @@ declare class SceCircularProgress {
2398
2525
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceCircularProgress, "sce-circular-progress", never, { "current": { "alias": "current"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "progressColor": { "alias": "progressColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2399
2526
  }
2400
2527
 
2528
+ /** Form field label with optional sub-text and a required-marker; `text` is a required input. */
2401
2529
  declare class SceFormLabel {
2402
2530
  readonly text: _angular_core.InputSignal<string>;
2403
2531
  readonly subText: _angular_core.InputSignal<string | undefined>;
@@ -2406,6 +2534,7 @@ declare class SceFormLabel {
2406
2534
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFormLabel, "sce-form-label", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "subText": { "alias": "subText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2407
2535
  }
2408
2536
 
2537
+ /** Inline form validation message rendered from a translation key; both `show` and `messageKey` are required inputs. */
2409
2538
  declare class SceFormError {
2410
2539
  readonly show: _angular_core.InputSignal<boolean>;
2411
2540
  readonly messageKey: _angular_core.InputSignal<string>;
@@ -2461,6 +2590,7 @@ declare class SceBidiIsolate {
2461
2590
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceBidiIsolate, "sce-bidi-isolate", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "tabular": { "alias": "tabular"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2462
2591
  }
2463
2592
 
2593
+ /** Floating button that appears once the window is scrolled past 280px and scrolls back to the top, using an instant jump when `prefers-reduced-motion` is set. */
2464
2594
  declare class SceScrollToTopButtonComponent implements OnInit {
2465
2595
  private readonly translate;
2466
2596
  readonly ariaLabelOverride: _angular_core.InputSignal<string>;
@@ -2475,10 +2605,12 @@ declare class SceScrollToTopButtonComponent implements OnInit {
2475
2605
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceScrollToTopButtonComponent, "sce-scroll-to-top-button", never, { "ariaLabelOverride": { "alias": "ariaLabelOverride"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2476
2606
  }
2477
2607
 
2608
+ /** One image in the lightbox: its `src` and optional alt text. */
2478
2609
  interface ImageGallerySwapperItem {
2479
2610
  src: string;
2480
2611
  alt?: string;
2481
2612
  }
2613
+ /** Full-screen image lightbox with prev/next navigation, arrow-key and Escape handling and body-scroll locking; supplying `activeIndex` switches it from self-managed to parent-controlled paging. */
2482
2614
  declare class SceImageGallerySwapperComponent implements OnDestroy {
2483
2615
  open: _angular_core.InputSignal<boolean>;
2484
2616
  images: _angular_core.InputSignal<ImageGallerySwapperItem[]>;
@@ -2514,6 +2646,7 @@ declare class SceImageGallerySwapperComponent implements OnDestroy {
2514
2646
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceImageGallerySwapperComponent, "sce-image-gallery-swapper", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "images": { "alias": "images"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "initialIndex": { "alias": "initialIndex"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; }, { "close": "close"; "activeIndexChange": "activeIndexChange"; }, never, never, true, never>;
2515
2647
  }
2516
2648
 
2649
+ /** Thumbnail grid of an office project's images that opens `sce-image-gallery-swapper` at the clicked index; `imageUrls` and `title` are required. */
2517
2650
  declare class SceOfficeProjectGalleryComponent {
2518
2651
  readonly imageUrls: _angular_core.InputSignal<string[]>;
2519
2652
  readonly title: _angular_core.InputSignal<string>;
@@ -2542,6 +2675,7 @@ type AsyncPageGateSkeletonVariant = 'info-fields' | 'form-fields' | 'table' | 'n
2542
2675
  * signal it can wire up, rather than a dead retry button.
2543
2676
  */
2544
2677
  type AsyncPageGateRecovery = 'default' | 'handled';
2678
+ /** Wraps a page in its loading/error/ready states, showing a skeleton variant while loading and a `sce-result-state` on failure; with the default `recovery` it emits `reloadRequested` and calls `Location.back()` itself. */
2545
2679
  declare class SceAsyncPageGateComponent {
2546
2680
  private readonly translate;
2547
2681
  private readonly location;
@@ -2604,11 +2738,13 @@ declare class SceOfflineBannerComponent {
2604
2738
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfflineBannerComponent, "sce-offline-banner", never, { "forceVisible": { "alias": "forceVisible"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2605
2739
  }
2606
2740
 
2741
+ /** One choice in `sce-radio-button`, with an optional `description` rendered under the label. */
2607
2742
  interface SceRadioOption {
2608
2743
  label: string;
2609
2744
  description?: string;
2610
2745
  value: string | number;
2611
2746
  }
2747
+ /** Radio group rendering a required list of options with optional descriptions, where a parent can veto a selection through the `onBeforeChange` guard input. */
2612
2748
  declare class SceRadioButtonComponent {
2613
2749
  options: _angular_core.InputSignal<SceRadioOption[]>;
2614
2750
  value: _angular_core.InputSignal<string | number | null>;
@@ -2624,12 +2760,14 @@ declare class SceRadioButtonComponent {
2624
2760
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceRadioButtonComponent, "sce-radio-button", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "onBeforeChange": { "alias": "onBeforeChange"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2625
2761
  }
2626
2762
 
2763
+ /** Dashboard shell that projects a sidebar, header, and main content into a grid; `sidebarCollapsed` narrows the sidebar column, and it uses `ViewEncapsulation.None`. */
2627
2764
  declare class SceDashboardLayoutComponent {
2628
2765
  readonly sidebarCollapsed: _angular_core.InputSignal<boolean>;
2629
2766
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceDashboardLayoutComponent, never>;
2630
2767
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDashboardLayoutComponent, "sce-dashboard-layout", never, { "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; }, {}, never, ["[sidebar]", "[header]", "*"], true, never>;
2631
2768
  }
2632
2769
 
2770
+ /** Page shell for a form: `title`/`subtitle` header, a projected form body, and an action footer; it owns the `<form>` element and re-emits its submit as `submitted`, and uses `ViewEncapsulation.None`. */
2633
2771
  declare class SceFormPageLayoutComponent {
2634
2772
  readonly title: _angular_core.InputSignal<string>;
2635
2773
  readonly subtitle: _angular_core.InputSignal<string | undefined>;
@@ -2638,6 +2776,7 @@ declare class SceFormPageLayoutComponent {
2638
2776
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFormPageLayoutComponent, "sce-form-page-layout", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; }, { "submitted": "submitted"; }, never, ["*", "[actions]"], true, never>;
2639
2777
  }
2640
2778
 
2779
+ /** Page shell for a list/table screen: `title` header plus projected filter, toolbar, and content slots; `showFilters` defaults to true, and it uses `ViewEncapsulation.None`. */
2641
2780
  declare class SceListPageLayoutComponent {
2642
2781
  readonly title: _angular_core.InputSignal<string>;
2643
2782
  readonly showFilters: _angular_core.InputSignal<boolean>;
@@ -2664,6 +2803,7 @@ interface AccountSwitcherOption {
2664
2803
  crNumber?: string;
2665
2804
  licenseNumber?: string;
2666
2805
  }
2806
+ /** Header trigger plus popover listing the user's accounts, emitting select/enter-dashboard/logout; requires `selectedAccountId`. */
2667
2807
  declare class SceAccountSwitcherComponent {
2668
2808
  private readonly language;
2669
2809
  private readonly elRef;
@@ -2788,6 +2928,7 @@ declare class SceLogoutModalComponent {
2788
2928
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLogoutModalComponent, "sce-logout-modal", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, { "cancel": "cancel"; "confirm": "confirm"; }, never, never, true, never>;
2789
2929
  }
2790
2930
 
2931
+ /** One stop on a guided tour: a CSS selector for the element to spotlight plus the i18n keys for its popover title and body. */
2791
2932
  interface GuidedTourStep {
2792
2933
  target: string;
2793
2934
  titleKey: string;
@@ -2803,6 +2944,7 @@ interface PopoverRect {
2803
2944
  top: number;
2804
2945
  left: number;
2805
2946
  }
2947
+ /** Guided product tour overlay that scrolls to and spotlights each step's target selector and positions a popover beside it, emitting `complete` on the last step and `skip` on Escape. */
2806
2948
  declare class SceGuidedTourComponent implements OnDestroy {
2807
2949
  private readonly platformId;
2808
2950
  locale: _angular_core.InputSignal<"ar" | "en">;
@@ -2831,6 +2973,7 @@ declare class SceGuidedTourComponent implements OnDestroy {
2831
2973
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGuidedTourComponent, "sce-guided-tour", never, { "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tourId": { "alias": "tourId"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, { "complete": "complete"; "skip": "skip"; }, never, never, true, never>;
2832
2974
  }
2833
2975
 
2976
+ /** Dialog that lets the user crop, zoom and rotate a profile photo and emits the result as a JPEG `File`; binding the `applying` input keeps the dialog open for an async upload instead of auto-closing on apply. */
2834
2977
  declare class SceProfilePhotoEditDialogComponent {
2835
2978
  private readonly translate;
2836
2979
  readonly visible: _angular_core.InputSignal<boolean>;
@@ -2892,12 +3035,14 @@ declare class SceContractQrCodeComponent {
2892
3035
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceContractQrCodeComponent, "sce-contract-qr-code", never, { "contractNumber": { "alias": "contractNumber"; "required": false; "isSignal": true; }; "documentContractId": { "alias": "documentContractId"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2893
3036
  }
2894
3037
 
3038
+ /** A picked map location: its latitude, longitude, and the reverse-geocoded address string. */
2895
3039
  interface GeoLocationValue {
2896
3040
  lat: number;
2897
3041
  lng: number;
2898
3042
  address: string;
2899
3043
  }
2900
3044
 
3045
+ /** Geo-location field that displays the currently selected coordinates and address and opens `sce-location-picker-dialog` to choose a new one. */
2901
3046
  declare class SceGeoLocationFieldComponent {
2902
3047
  readonly label: _angular_core.InputSignal<string>;
2903
3048
  readonly value: _angular_core.InputSignal<GeoLocationValue | null>;
@@ -2915,6 +3060,7 @@ declare class SceGeoLocationFieldComponent {
2915
3060
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGeoLocationFieldComponent, "sce-geo-location-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2916
3061
  }
2917
3062
 
3063
+ /** Modal Leaflet map dialog for picking a coordinate, bounded to Saudi Arabia, which validates each click or marker drag, reverse-geocodes the position to an address via Nominatim, and reverts to the last valid point when validation fails. */
2918
3064
  declare class SceLocationPickerDialogComponent implements OnDestroy {
2919
3065
  readonly visible: _angular_core.InputSignal<boolean>;
2920
3066
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -2951,18 +3097,21 @@ declare class SceLocationPickerDialogComponent implements OnDestroy {
2951
3097
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLocationPickerDialogComponent, "sce-location-picker-dialog", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "initialLat": { "alias": "initialLat"; "required": false; "isSignal": true; }; "initialLng": { "alias": "initialLng"; "required": false; "isSignal": true; }; }, { "dialogClose": "dialogClose"; "confirm": "confirm"; }, never, never, true, never>;
2952
3098
  }
2953
3099
 
3100
+ /** Dashboard page heading rendering a single translated `<h1>` from `titleKey`; the whole header is omitted when `titleKey` is empty. */
2954
3101
  declare class DashboardPageHeaderComponent {
2955
3102
  readonly titleKey: _angular_core.InputSignal<string>;
2956
3103
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardPageHeaderComponent, never>;
2957
3104
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardPageHeaderComponent, "sce-dashboard-page-header", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2958
3105
  }
2959
3106
 
3107
+ /** A pin on `sce-osm-leaflet-map`, optionally draggable and carrying raw `popupHtml` for its popup bubble. */
2960
3108
  interface OsmMapMarker {
2961
3109
  lat: number;
2962
3110
  lng: number;
2963
3111
  popupHtml?: string;
2964
3112
  draggable?: boolean;
2965
3113
  }
3114
+ /** OpenStreetMap Leaflet map that lazily loads Leaflet, renders the given markers and emits map clicks and marker drag-ends; setting `interactive` to false disables panning, zooming, the zoom control and click events. */
2966
3115
  declare class SceOsmLeafletMapComponent implements OnDestroy {
2967
3116
  readonly latitude: _angular_core.InputSignal<number>;
2968
3117
  readonly longitude: _angular_core.InputSignal<number>;
@@ -2990,6 +3139,7 @@ declare class SceOsmLeafletMapComponent implements OnDestroy {
2990
3139
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOsmLeafletMapComponent, "sce-osm-leaflet-map", never, { "latitude": { "alias": "latitude"; "required": false; "isSignal": true; }; "longitude": { "alias": "longitude"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, { "mapClick": "mapClick"; "markerDragEnd": "markerDragEnd"; }, never, never, true, never>;
2991
3140
  }
2992
3141
 
3142
+ /** Read-only map of an office's location: a Leaflet map with a marker when valid coordinates are given, a Google Maps embed built from the address when they are not, and a "not specified" fallback when neither is available. */
2993
3143
  declare class SceOfficeLocationMapComponent implements AfterViewInit, OnDestroy {
2994
3144
  private readonly sanitizer;
2995
3145
  readonly latitude: _angular_core.InputSignal<number | null | undefined>;
@@ -3007,11 +3157,13 @@ declare class SceOfficeLocationMapComponent implements AfterViewInit, OnDestroy
3007
3157
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeLocationMapComponent, "sce-office-location-map", never, { "latitude": { "alias": "latitude"; "required": false; "isSignal": true; }; "longitude": { "alias": "longitude"; "required": false; "isSignal": true; }; "address": { "alias": "address"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3008
3158
  }
3009
3159
 
3160
+ /** A position chosen in `sce-osm-location-picker`: coordinates plus the reverse-geocoded address when Nominatim returned one. */
3010
3161
  interface LocationPickerValue {
3011
3162
  lat: number;
3012
3163
  lng: number;
3013
3164
  address?: string;
3014
3165
  }
3166
+ /** Location picker pairing an OSM Leaflet map with a Nominatim search box, which validates every clicked, dragged or searched position before placing a draggable pin and emitting it with its reverse-geocoded address. */
3015
3167
  declare class SceOsmLocationPickerComponent {
3016
3168
  readonly initialLat: _angular_core.InputSignal<number>;
3017
3169
  readonly initialLng: _angular_core.InputSignal<number>;
@@ -3044,11 +3196,13 @@ declare class SceOsmLocationPickerComponent {
3044
3196
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOsmLocationPickerComponent, "sce-osm-location-picker", never, { "initialLat": { "alias": "initialLat"; "required": false; "isSignal": true; }; "initialLng": { "alias": "initialLng"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, { "locationSelect": "locationSelect"; }, never, never, true, never>;
3045
3197
  }
3046
3198
 
3199
+ /** A position picked on the Google map: coordinates plus the geocoded address when one was resolved. */
3047
3200
  interface GoogleMapsLocationValue {
3048
3201
  lat: number;
3049
3202
  lng: number;
3050
3203
  address?: string;
3051
3204
  }
3205
+ /** Google Maps location picker that lazily injects the Maps JS API, drops a marker where the user clicks and emits the coordinate; it stays blank unless an `apiKey` is supplied. */
3052
3206
  declare class SceGoogleMapsLocationPickerComponent implements OnDestroy {
3053
3207
  readonly apiKey: _angular_core.InputSignal<string>;
3054
3208
  readonly initialLat: _angular_core.InputSignal<number>;
@@ -3119,6 +3273,7 @@ interface ChartTooltipData {
3119
3273
  color?: string;
3120
3274
  }
3121
3275
 
3276
+ /** Standalone chart legend rendering colour markers and labels in a row or column — used instead of the built-in ECharts legend. */
3122
3277
  declare class SceChartLegendComponent {
3123
3278
  /** List of legend items to display */
3124
3279
  readonly items: _angular_core.InputSignal<ChartLegendItem[]>;
@@ -3138,17 +3293,20 @@ declare class SceChartLegendComponent {
3138
3293
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceChartLegendComponent, "sce-chart-legend", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "fontSize": { "alias": "fontSize"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "itemGap": { "alias": "itemGap"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3139
3294
  }
3140
3295
 
3296
+ /** One bar series: values aligned to the chart's categories, an optional colour, and a `stack` key that groups it with other series into a stacked bar. */
3141
3297
  interface BarSeriesData {
3142
3298
  name: string;
3143
3299
  data: number[];
3144
3300
  color?: string;
3145
3301
  stack?: string;
3146
3302
  }
3303
+ /** A smoothed, area-filled line series drawn on top of the bars, sharing the bar chart's category axis. */
3147
3304
  interface OverlayLineSeries {
3148
3305
  name: string;
3149
3306
  data: number[];
3150
3307
  color?: string;
3151
3308
  }
3309
+ /** ECharts bar chart with optional stacking, overlay line series and a custom legend; axis side auto-detects RTL unless `isRtl` overrides it. */
3152
3310
  declare class SceBarChartComponent {
3153
3311
  private readonly el;
3154
3312
  /** Manual direction override; null auto-detects from computed style (RTL-first default). */
@@ -3180,6 +3338,7 @@ declare class SceBarChartComponent {
3180
3338
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceBarChartComponent, "sce-bar-chart", never, { "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; "series": { "alias": "series"; "required": false; "isSignal": true; }; "overlayLineSeries": { "alias": "overlayLineSeries"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "barWidth": { "alias": "barWidth"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3181
3339
  }
3182
3340
 
3341
+ /** One horizontal bar; `maxValue` overrides the chart-wide maximum for this bar only, and `color` overrides the chart's default colour. */
3183
3342
  interface HorizontalBarItem {
3184
3343
  label: string;
3185
3344
  value: number;
@@ -3191,6 +3350,7 @@ interface ComputedBarItem extends HorizontalBarItem {
3191
3350
  barColor: string;
3192
3351
  segmentFills: number[];
3193
3352
  }
3353
+ /** Pure-CSS horizontal bar chart (no ECharts) where each bar is split into `segments` that fill proportionally to its value. */
3194
3354
  declare class SceHorizontalBarChartComponent {
3195
3355
  /** Data items for horizontal bars */
3196
3356
  readonly data: _angular_core.InputSignal<HorizontalBarItem[]>;
@@ -3213,6 +3373,7 @@ declare class SceHorizontalBarChartComponent {
3213
3373
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceHorizontalBarChartComponent, "sce-horizontal-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "defaultColor": { "alias": "defaultColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "barHeight": { "alias": "barHeight"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "segments": { "alias": "segments"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3214
3374
  }
3215
3375
 
3376
+ /** ECharts multi-series line chart with optional area fill and a highlight bar/marker at `highlightIndex`; axis side auto-detects RTL unless `isRtl` overrides it. */
3216
3377
  declare class SceLineChartComponent {
3217
3378
  private readonly el;
3218
3379
  /** Manual direction override; null auto-detects from computed style (RTL-first default). */
@@ -3246,6 +3407,7 @@ declare class SceLineChartComponent {
3246
3407
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLineChartComponent, "sce-line-chart", never, { "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; "series": { "alias": "series"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "showArea": { "alias": "showArea"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showXAxisLabels": { "alias": "showXAxisLabels"; "required": false; "isSignal": true; }; "highlightIndex": { "alias": "highlightIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3247
3408
  }
3248
3409
 
3410
+ /** ECharts gradient area chart with hidden axes and an optional highlighted point marker at `highlightIndex`. */
3249
3411
  declare class SceAreaChartComponent {
3250
3412
  /** Data points for the chart */
3251
3413
  readonly data: _angular_core.InputSignal<number[]>;
@@ -3270,6 +3432,7 @@ declare class SceAreaChartComponent {
3270
3432
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAreaChartComponent, "sce-area-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "startColor": { "alias": "startColor"; "required": false; "isSignal": true; }; "endColor": { "alias": "endColor"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "tooltipLabel": { "alias": "tooltipLabel"; "required": false; "isSignal": true; }; "highlightIndex": { "alias": "highlightIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3271
3433
  }
3272
3434
 
3435
+ /** ECharts pie chart with optional in-slice percentage labels, an optional centre hole and a custom legend. */
3273
3436
  declare class ScePieChartComponent {
3274
3437
  /** Data items for the pie segments */
3275
3438
  readonly data: _angular_core.InputSignal<ChartSeriesItem[]>;
@@ -3297,6 +3460,7 @@ declare class ScePieChartComponent {
3297
3460
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePieChartComponent, "sce-pie-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; "showCenterHole": { "alias": "showCenterHole"; "required": false; "isSignal": true; }; "innerRadius": { "alias": "innerRadius"; "required": false; "isSignal": true; }; "itemRadius": { "alias": "itemRadius"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3298
3461
  }
3299
3462
 
3463
+ /** Concentric ring ("donut") chart where each data item gets its own gauge ring sized against `maxRingValue`, with optional centred value and label. */
3300
3464
  declare class SceDonutChartComponent {
3301
3465
  /** Data items for the donut rings */
3302
3466
  readonly data: _angular_core.InputSignal<ChartSeriesItem[]>;
@@ -3335,6 +3499,7 @@ interface RingChartLegendItem {
3335
3499
  color: string;
3336
3500
  value: string | number;
3337
3501
  }
3502
+ /** ECharts donut ring with a centred label/value and a legend that also shows each item's value; the tooltip unit is hard-coded to Arabic "طلبات". */
3338
3503
  declare class SceRingChartComponent {
3339
3504
  /** Data items for the ring segments */
3340
3505
  readonly data: _angular_core.InputSignal<ChartSeriesItem[]>;
@@ -3358,6 +3523,7 @@ declare class SceRingChartComponent {
3358
3523
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceRingChartComponent, "sce-ring-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "innerRadius": { "alias": "innerRadius"; "required": false; "isSignal": true; }; "outerRadius": { "alias": "outerRadius"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3359
3524
  }
3360
3525
 
3526
+ /** Semicircular tick-mark gauge for a 0-100 value; when `isRtl` is set the chart's own text is hidden so the caller can overlay it unmirrored. */
3361
3527
  declare class SceGaugeChartComponent {
3362
3528
  /** Current value (0-100) */
3363
3529
  readonly value: _angular_core.InputSignal<number>;
@@ -3387,12 +3553,14 @@ declare class SceGaugeChartComponent {
3387
3553
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGaugeChartComponent, "sce-gauge-chart", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; "endAngle": { "alias": "endAngle"; "required": false; "isSignal": true; }; "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3388
3554
  }
3389
3555
 
3556
+ /** One segmented bar; unlike `HorizontalBarItem`, its `maxValue` is required and always scopes the fill to this bar alone. */
3390
3557
  interface MultiSegmentBarItem {
3391
3558
  label: string;
3392
3559
  value: number;
3393
3560
  maxValue: number;
3394
3561
  color?: string;
3395
3562
  }
3563
+ /** Pure-CSS horizontal bars (no ECharts), each split into `segmentCount` sub-segments that fill against the item's own `maxValue`. */
3396
3564
  declare class SceMultiSegmentBarChartComponent {
3397
3565
  private readonly el;
3398
3566
  /** Data items for the bar chart */
@@ -3427,6 +3595,7 @@ declare class SceMultiSegmentBarChartComponent {
3427
3595
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceMultiSegmentBarChartComponent, "sce-multi-segment-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "barHeight": { "alias": "barHeight"; "required": false; "isSignal": true; }; "segmentCount": { "alias": "segmentCount"; "required": false; "isSignal": true; }; "segmentGap": { "alias": "segmentGap"; "required": false; "isSignal": true; }; "rowGap": { "alias": "rowGap"; "required": false; "isSignal": true; }; "defaultColor": { "alias": "defaultColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3428
3596
  }
3429
3597
 
3598
+ /** Half-circle ECharts gauge whose arc is coloured by proportional segment stops, with an optional centred label and value. */
3430
3599
  declare class SceMultiSegmentGaugeComponent {
3431
3600
  /** Segments to display on the gauge arc */
3432
3601
  readonly segments: _angular_core.InputSignal<ChartSeriesItem[]>;
@@ -3446,6 +3615,7 @@ declare class SceMultiSegmentGaugeComponent {
3446
3615
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceMultiSegmentGaugeComponent, "sce-multi-segment-gauge", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3447
3616
  }
3448
3617
 
3618
+ /** One slice of the stacked bar; `barValue` lets the drawn width differ from the `value` shown in the legend, and `segments` splits the slice into that many sub-segments. */
3449
3619
  interface StackedDistributionChartItem {
3450
3620
  label: string;
3451
3621
  value: number;
@@ -3461,6 +3631,7 @@ interface ComputedStackedDistributionChartItem extends StackedDistributionChartI
3461
3631
  percentage: number;
3462
3632
  subSegments: number[];
3463
3633
  }
3634
+ /** Single stacked bar showing each item's share of the total plus a legend row per item, with an auto-generated aria summary and RTL auto-detection. */
3464
3635
  declare class SceStackedDistributionChartComponent {
3465
3636
  private readonly el;
3466
3637
  /** Segments rendered in the distribution bar and legend rows */
@@ -3495,6 +3666,7 @@ interface StatGaugeRow {
3495
3666
  value: string | number;
3496
3667
  color: string;
3497
3668
  }
3669
+ /** Half-circle gauge of `value` out of `total`, rendered with a subtitle and a list of colour-coded stat rows below it. */
3498
3670
  declare class SceStatGaugeComponent {
3499
3671
  /** Current (numerator) value, e.g. 120 */
3500
3672
  readonly value: _angular_core.InputSignal<number>;
@@ -3518,6 +3690,7 @@ declare class SceStatGaugeComponent {
3518
3690
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceStatGaugeComponent, "sce-stat-gauge", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "stats": { "alias": "stats"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "markerSize": { "alias": "markerSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3519
3691
  }
3520
3692
 
3693
+ /** SVG progress ring (no ECharts) with a centred label and value, an optional gradient stroke and RTL auto-detection; `progress` may exceed 100. */
3521
3694
  declare class SceStatRingComponent {
3522
3695
  private readonly el;
3523
3696
  /** Center label shown above the value */
@@ -3569,11 +3742,13 @@ declare class SceStatRingComponent {
3569
3742
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceStatRingComponent, "sce-stat-ring", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "trackStrokeWidth": { "alias": "trackStrokeWidth"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "gradientStartColor": { "alias": "gradientStartColor"; "required": false; "isSignal": true; }; "gradientEndColor": { "alias": "gradientEndColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "startAngle": { "alias": "startAngle"; "required": false; "isSignal": true; }; "useGradient": { "alias": "useGradient"; "required": false; "isSignal": true; }; "isRtl": { "alias": "isRtl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3570
3743
  }
3571
3744
 
3745
+ /** Captions for the scale's low, mid and high segments; supply already-translated text, as the component does not translate them. */
3572
3746
  interface ScaleIndicatorLabels {
3573
3747
  low: string;
3574
3748
  mid: string;
3575
3749
  high: string;
3576
3750
  }
3751
+ /** Three-segment scale track showing either a single thumb or a highlighted range when both `start` and `end` are given; the segment labels default to hardcoded Arabic strings. */
3577
3752
  declare class SceScaleIndicatorComponent {
3578
3753
  /** Title displayed above the scale */
3579
3754
  readonly title: _angular_core.InputSignal<string>;
@@ -3614,6 +3789,7 @@ declare class SceScaleIndicatorComponent {
3614
3789
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceScaleIndicatorComponent, "sce-scale-indicator", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "activeColor": { "alias": "activeColor"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "barHeight": { "alias": "barHeight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3615
3790
  }
3616
3791
 
3792
+ /** Dashboard overview tile showing a stat value, translated label, icon on a coloured background and an optional trend sparkline. */
3617
3793
  declare class SceOverviewStatCardComponent {
3618
3794
  readonly value: _angular_core.InputSignal<string | number>;
3619
3795
  readonly labelKey: _angular_core.InputSignal<string>;
@@ -3624,6 +3800,7 @@ declare class SceOverviewStatCardComponent {
3624
3800
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOverviewStatCardComponent, "sce-overview-stat-card", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "iconBg": { "alias": "iconBg"; "required": true; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3625
3801
  }
3626
3802
 
3803
+ /** Small dashboard card linking to a service, showing its icon and a count with a role-aware translated suffix. */
3627
3804
  declare class SceServiceMiniCardComponent {
3628
3805
  readonly title: _angular_core.InputSignal<string>;
3629
3806
  readonly count: _angular_core.InputSignal<number>;
@@ -3635,6 +3812,7 @@ declare class SceServiceMiniCardComponent {
3635
3812
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceServiceMiniCardComponent, "sce-service-mini-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "count": { "alias": "count"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "link": { "alias": "link"; "required": true; "isSignal": true; }; "countSuffix": { "alias": "countSuffix"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3636
3813
  }
3637
3814
 
3815
+ /** View model of a featured-office card, carrying both the raw `reviewCount` (zero triggers the fallback) and its locale-formatted label. */
3638
3816
  interface FeaturedOffice {
3639
3817
  id: string;
3640
3818
  title: string;
@@ -3647,12 +3825,14 @@ interface FeaturedOffice {
3647
3825
  tabs: string[];
3648
3826
  href: string;
3649
3827
  }
3828
+ /** Dashboard card for a featured engineering office showing rating, review count, country and service tabs; a zero review count renders the "no reviews yet" fallback. */
3650
3829
  declare class SceFeaturedOfficeCardComponent {
3651
3830
  readonly office: _angular_core.InputSignal<FeaturedOffice>;
3652
3831
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceFeaturedOfficeCardComponent, never>;
3653
3832
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFeaturedOfficeCardComponent, "sce-featured-office-card", never, { "office": { "alias": "office"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
3654
3833
  }
3655
3834
 
3835
+ /** View model of a contract-request card; `deadline` and `budget` are pre-formatted display strings and `tags` are raw status labels whose tone is resolved at render time. */
3656
3836
  interface ContractRequestCard {
3657
3837
  id: string;
3658
3838
  title: string;
@@ -3664,6 +3844,7 @@ interface ContractRequestCard {
3664
3844
  tags: string[];
3665
3845
  offersCount?: number;
3666
3846
  }
3847
+ /** Dashboard card summarising a contract request (office, location, deadline, budget) with tone-resolved tags, linking to its detail route. */
3667
3848
  declare class SceContractRequestCardComponent {
3668
3849
  readonly request: _angular_core.InputSignal<ContractRequestCard>;
3669
3850
  readonly tagTones: _angular_core.Signal<_moatamed_sce_ui_components.BusinessStatusTone[]>;
@@ -3671,6 +3852,7 @@ declare class SceContractRequestCardComponent {
3671
3852
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceContractRequestCardComponent, "sce-contract-request-card", never, { "request": { "alias": "request"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
3672
3853
  }
3673
3854
 
3855
+ /** One row of the latest-contracts table; `status` is the display label and `statusVariant` the already-resolved `BusinessStatusTone`. */
3674
3856
  interface ContractRow {
3675
3857
  contractNumber: string;
3676
3858
  service: string;
@@ -3679,6 +3861,7 @@ interface ContractRow {
3679
3861
  status: string;
3680
3862
  statusVariant: BusinessStatusTone;
3681
3863
  }
3864
+ /** Dashboard table of the latest contracts with status tags, showing five skeleton rows while `loading`; the party column header label is caller-supplied. */
3682
3865
  declare class SceLatestContractsTableComponent {
3683
3866
  readonly contracts: _angular_core.InputSignal<ContractRow[]>;
3684
3867
  readonly partyColumnLabel: _angular_core.InputSignal<string>;
@@ -3688,6 +3871,7 @@ declare class SceLatestContractsTableComponent {
3688
3871
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLatestContractsTableComponent, "sce-latest-contracts-table", never, { "contracts": { "alias": "contracts"; "required": true; "isSignal": true; }; "partyColumnLabel": { "alias": "partyColumnLabel"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3689
3872
  }
3690
3873
 
3874
+ /** One user-type choice card; `titleKey` and `descriptionKey` are i18n keys, not literal text. */
3691
3875
  interface LoginUserTypeCard {
3692
3876
  type: string;
3693
3877
  titleKey: string;
@@ -3695,6 +3879,7 @@ interface LoginUserTypeCard {
3695
3879
  icon: string;
3696
3880
  iconVariant: 'primary' | 'muted';
3697
3881
  }
3882
+ /** Login flow step presenting the selectable user-type cards and emitting the picked type plus a continue action. */
3698
3883
  declare class SceLoginUserTypeStepComponent {
3699
3884
  readonly cards: _angular_core.InputSignal<LoginUserTypeCard[]>;
3700
3885
  readonly selectedType: _angular_core.InputSignal<string | null>;
@@ -3712,6 +3897,7 @@ declare class SceLoginUserTypeStepComponent {
3712
3897
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLoginUserTypeStepComponent, "sce-login-user-type-step", never, { "cards": { "alias": "cards"; "required": true; "isSignal": true; }; "selectedType": { "alias": "selectedType"; "required": false; "isSignal": true; }; }, { "selectType": "selectType"; "continue": "continue"; }, never, never, true, never>;
3713
3898
  }
3714
3899
 
3900
+ /** Login flow step capturing national ID and birth date (Hijri/Gregorian), fully controlled — every field value and error is an input. */
3715
3901
  declare class SceLoginCredentialsStepComponent {
3716
3902
  readonly titleKey: _angular_core.InputSignal<string>;
3717
3903
  readonly subtitleKey: _angular_core.InputSignal<string>;
@@ -3741,6 +3927,7 @@ declare class SceLoginCredentialsStepComponent {
3741
3927
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLoginCredentialsStepComponent, "sce-login-credentials-step", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": true; "isSignal": true; }; "nationalId": { "alias": "nationalId"; "required": true; "isSignal": true; }; "nationalIdDatalistId": { "alias": "nationalIdDatalistId"; "required": false; "isSignal": true; }; "nationalIdError": { "alias": "nationalIdError"; "required": false; "isSignal": true; }; "nationalIdHistory": { "alias": "nationalIdHistory"; "required": false; "isSignal": true; }; "filteredNationalIdHistory": { "alias": "filteredNationalIdHistory"; "required": false; "isSignal": true; }; "birthDate": { "alias": "birthDate"; "required": true; "isSignal": true; }; "birthDateDatalistId": { "alias": "birthDateDatalistId"; "required": false; "isSignal": true; }; "birthDateError": { "alias": "birthDateError"; "required": false; "isSignal": true; }; "birthDateHistory": { "alias": "birthDateHistory"; "required": false; "isSignal": true; }; "birthDateCalendar": { "alias": "birthDateCalendar"; "required": true; "isSignal": true; }; "birthDateCalendarLocked": { "alias": "birthDateCalendarLocked"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; }, { "nationalIdChange": "nationalIdChange"; "nationalIdFocus": "nationalIdFocus"; "nationalIdBlur": "nationalIdBlur"; "birthDateChange": "birthDateChange"; "birthDateBlur": "birthDateBlur"; "birthDateCalendarChange": "birthDateCalendarChange"; "datePickerOpened": "datePickerOpened"; "datePickerClosed": "datePickerClosed"; "submitted": "submitted"; }, never, never, true, never>;
3742
3928
  }
3743
3929
 
3930
+ /** Login flow step with the OTP input, mask toggle and resend countdown; the timer label is supplied by the parent. */
3744
3931
  declare class SceLoginOtpStepComponent {
3745
3932
  readonly otpValue: _angular_core.InputSignal<string>;
3746
3933
  readonly showOtpVisible: _angular_core.InputSignal<boolean>;
@@ -3756,6 +3943,7 @@ declare class SceLoginOtpStepComponent {
3756
3943
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLoginOtpStepComponent, "sce-login-otp-step", never, { "otpValue": { "alias": "otpValue"; "required": true; "isSignal": true; }; "showOtpVisible": { "alias": "showOtpVisible"; "required": false; "isSignal": true; }; "otpError": { "alias": "otpError"; "required": false; "isSignal": true; }; "resendSeconds": { "alias": "resendSeconds"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; "resendTimerLabel": { "alias": "resendTimerLabel"; "required": true; "isSignal": true; }; }, { "otpValueChange": "otpValueChange"; "showOtpToggle": "showOtpToggle"; "resend": "resend"; "submitted": "submitted"; }, never, never, true, never>;
3757
3944
  }
3758
3945
 
3946
+ /** View model of one selectable login account: display `name`, `tag`, `description`, `role`, whether it is an individual or organization, and an optional avatar. */
3759
3947
  interface LoginAccountOptionView {
3760
3948
  id: string;
3761
3949
  name: string;
@@ -3765,6 +3953,7 @@ interface LoginAccountOptionView {
3765
3953
  kind: 'individual' | 'organization';
3766
3954
  avatarSrc?: string | null;
3767
3955
  }
3956
+ /** Login flow step that lists the accounts available to the authenticated user and emits the chosen account id. */
3768
3957
  declare class SceLoginAccountSelectStepComponent {
3769
3958
  readonly accounts: _angular_core.InputSignal<LoginAccountOptionView[]>;
3770
3959
  readonly selectedAccountId: _angular_core.InputSignal<string | null>;
@@ -3776,6 +3965,7 @@ declare class SceLoginAccountSelectStepComponent {
3776
3965
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLoginAccountSelectStepComponent, "sce-login-account-select-step", never, { "accounts": { "alias": "accounts"; "required": true; "isSignal": true; }; "selectedAccountId": { "alias": "selectedAccountId"; "required": false; "isSignal": true; }; "apiError": { "alias": "apiError"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; }, { "selectAccount": "selectAccount"; "submitted": "submitted"; }, never, never, true, never>;
3777
3966
  }
3778
3967
 
3968
+ /** Login flow step collecting the missing mobile and email of a profile, emitting each change and the final submit. */
3779
3969
  declare class SceLoginCompleteDataStepComponent {
3780
3970
  readonly mobile: _angular_core.InputSignal<string>;
3781
3971
  readonly email: _angular_core.InputSignal<string>;
@@ -3789,6 +3979,7 @@ declare class SceLoginCompleteDataStepComponent {
3789
3979
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLoginCompleteDataStepComponent, "sce-login-complete-data-step", never, { "mobile": { "alias": "mobile"; "required": true; "isSignal": true; }; "email": { "alias": "email"; "required": true; "isSignal": true; }; "mobileError": { "alias": "mobileError"; "required": false; "isSignal": true; }; "emailError": { "alias": "emailError"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; }, { "mobileChange": "mobileChange"; "emailChange": "emailChange"; "submitted": "submitted"; }, never, never, true, never>;
3790
3980
  }
3791
3981
 
3982
+ /** Login flow step showing a failure message with a retry action. */
3792
3983
  declare class SceLoginErrorStepComponent {
3793
3984
  readonly errorMessage: _angular_core.InputSignal<string | undefined>;
3794
3985
  readonly submitting: _angular_core.InputSignal<boolean>;
@@ -3797,10 +3988,12 @@ declare class SceLoginErrorStepComponent {
3797
3988
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLoginErrorStepComponent, "sce-login-error-step", never, { "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; }, { "retry": "retry"; }, never, never, true, never>;
3798
3989
  }
3799
3990
 
3991
+ /** One crumb in the hero header's trail; omit `href` for the current, non-linked page. */
3800
3992
  interface LandingBreadcrumbItem {
3801
3993
  label: string;
3802
3994
  href?: string;
3803
3995
  }
3996
+ /** Landing-page hero header with a title, breadcrumb trail and optional background image, rendered either as decorative left-aligned artwork or as a full-bleed cover photo. */
3804
3997
  declare class SceLandingHeroHeaderComponent {
3805
3998
  readonly title: _angular_core.InputSignal<string | undefined>;
3806
3999
  readonly breadcrumbs: _angular_core.InputSignal<LandingBreadcrumbItem[]>;
@@ -3823,6 +4016,7 @@ declare class SceDashboardFeatureComingSoonComponent {
3823
4016
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDashboardFeatureComingSoonComponent, "sce-dashboard-feature-coming-soon", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3824
4017
  }
3825
4018
 
4019
+ /** Cell renderer selected for a `GridColumn` (text, status tag, progress bar, toggle, action button/menu, custom template…). */
3826
4020
  declare enum ColumnsEnum {
3827
4021
  TOGGLE = "toggle",
3828
4022
  TEXT = "text",
@@ -3841,6 +4035,7 @@ declare enum ColumnsEnum {
3841
4035
  PHONE = "phone"
3842
4036
  }
3843
4037
 
4038
+ /** Marks an `<ng-template sceCustomCol="columnDef">` inside `sce-grid-table` as the renderer for the column whose `columnDef` matches. */
3844
4039
  declare class SceCustomColsDirective {
3845
4040
  readonly sceCustomCol: _angular_core.InputSignal<string>;
3846
4041
  readonly templateRef: TemplateRef<any>;
@@ -3848,6 +4043,7 @@ declare class SceCustomColsDirective {
3848
4043
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SceCustomColsDirective, "ng-template[sceCustomCol]", never, { "sceCustomCol": { "alias": "sceCustomCol"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
3849
4044
  }
3850
4045
 
4046
+ /** Marks an `<ng-template sceGridExpansion>` as the expanded-row body of `sce-grid-table`; the row is passed as `$implicit`. */
3851
4047
  declare class SceGridExpansionDirective {
3852
4048
  readonly templateRef: TemplateRef<any>;
3853
4049
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceGridExpansionDirective, never>;
@@ -3856,6 +4052,7 @@ declare class SceGridExpansionDirective {
3856
4052
 
3857
4053
  /** SceTag variant when using sce-tag for status display */
3858
4054
  type StatusVariant = 'success' | 'danger' | 'warning' | 'info' | 'neutral' | 'purple' | 'pending' | 'assigned' | 'review' | 'new' | 'closed';
4055
+ /** How one status value renders in a status column: its `label` plus either an `sce-tag` `variant` (preferred) or raw `color`/`bgColor`. */
3859
4056
  interface StatusConfig {
3860
4057
  label: string;
3861
4058
  color?: string;
@@ -3864,6 +4061,7 @@ interface StatusConfig {
3864
4061
  variant?: StatusVariant;
3865
4062
  }
3866
4063
 
4064
+ /** Loosely-typed row object for `SceGridTableComponent`; columns address fields by dotted path. */
3867
4065
  type GridRow = Record<string, unknown>;
3868
4066
  /** Emitted by SceGridTable when the user clicks a sortable column header. */
3869
4067
  interface GridSortEvent {
@@ -3877,13 +4075,16 @@ interface GridPageEvent {
3877
4075
  rows: number;
3878
4076
  first: number;
3879
4077
  }
4078
+ /** Data for a progress-bar cell: current `value` out of `max`, its `label` and an optional bar `color`. */
3880
4079
  interface ProgressConfig {
3881
4080
  value: number;
3882
4081
  max: number;
3883
4082
  label: string;
3884
4083
  color?: string;
3885
4084
  }
4085
+ /** Kind of row action in an action column: a route `link`, an inline `command`, or a popup `menu`. */
3886
4086
  type GridActionType = 'link' | 'command' | 'menu';
4087
+ /** A single row action button — `link` (route built from the row) or `command` (callback) — with optional icon, icon-only rendering and PrimeNG severity. */
3887
4088
  interface GridAction<T extends GridRow = GridRow> {
3888
4089
  type: Exclude<GridActionType, 'menu'>;
3889
4090
  label: string;
@@ -3893,6 +4094,7 @@ interface GridAction<T extends GridRow = GridRow> {
3893
4094
  link?: (row: T) => string;
3894
4095
  command?: (row: T) => void;
3895
4096
  }
4097
+ /** One entry of a row action menu: label, icon, per-row `command`, optional separator, and a `hidden(row)` predicate evaluated per row. */
3896
4098
  interface GridMenuItem<T extends GridRow = GridRow> {
3897
4099
  label?: string;
3898
4100
  icon?: string;
@@ -3902,6 +4104,7 @@ interface GridMenuItem<T extends GridRow = GridRow> {
3902
4104
  /** Return true to hide this item for the given row. */
3903
4105
  hidden?: (row: T) => boolean;
3904
4106
  }
4107
+ /** Row action that opens a popup menu of `items`, each of which may hide itself for a given row. */
3905
4108
  interface GridMenuAction<T extends GridRow = GridRow> {
3906
4109
  type: 'menu';
3907
4110
  label: string;
@@ -3911,7 +4114,9 @@ interface GridMenuAction<T extends GridRow = GridRow> {
3911
4114
  hidden?: (row: T) => boolean;
3912
4115
  items: GridMenuItem<T>[];
3913
4116
  }
4117
+ /** Any action a column can offer: a plain button (`GridAction`) or a menu (`GridMenuAction`), discriminated by `type`. */
3914
4118
  type GridColumnAction<T extends GridRow = GridRow> = GridAction<T> | GridMenuAction<T>;
4119
+ /** Definition of one grid column: `header`, sortability, the `field` path to read, its `ColumnsEnum` cell `type`, and the type-specific extras (`actions`, `statusMap`, `getProgress`, `columnDef` for a custom template…). */
3915
4120
  interface GridColumn<T extends GridRow = GridRow> {
3916
4121
  header: string;
3917
4122
  isSorted: boolean;
@@ -3929,6 +4134,7 @@ interface GridColumn<T extends GridRow = GridRow> {
3929
4134
  pipeArgs?: unknown;
3930
4135
  cssStyle?: string;
3931
4136
  }
4137
+ /** PrimeNG-backed data table driven by a `columns` config: renders typed cells, row actions/menus, selection, expandable rows and skeletons, and switches between empty, filtered, searched and error result states; supports both client-side and `lazy` server-side paging/sorting, emitting `pageChange`/`sortChange` rather than fetching itself. */
3932
4138
  declare class SceGridTableComponent<T extends GridRow = GridRow> {
3933
4139
  readonly showSelect: _angular_core.InputSignal<boolean>;
3934
4140
  readonly btnLabel: _angular_core.InputSignal<string>;
@@ -4101,11 +4307,14 @@ declare class SceGridTableComponent<T extends GridRow = GridRow> {
4101
4307
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceGridTableComponent<any>, "sce-grid-table", never, { "showSelect": { "alias": "showSelect"; "required": false; "isSignal": true; }; "btnLabel": { "alias": "btnLabel"; "required": false; "isSignal": true; }; "selectedItems": { "alias": "selectedItems"; "required": false; "isSignal": true; }; "searchPipeKey": { "alias": "searchPipeKey"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "showAddButton": { "alias": "showAddButton"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingDelay": { "alias": "loadingDelay"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "totalPages": { "alias": "totalPages"; "required": false; "isSignal": true; }; "pageNumber": { "alias": "pageNumber"; "required": false; "isSignal": true; }; "first": { "alias": "first"; "required": false; "isSignal": true; }; "tableMinWidth": { "alias": "tableMinWidth"; "required": false; "isSignal": true; }; "emptyStateIcon": { "alias": "emptyStateIcon"; "required": false; "isSignal": true; }; "emptyStateTitleKey": { "alias": "emptyStateTitleKey"; "required": false; "isSignal": true; }; "emptyStateSubtitleKey": { "alias": "emptyStateSubtitleKey"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorTitleKey": { "alias": "errorTitleKey"; "required": false; "isSignal": true; }; "errorSubtitleKey": { "alias": "errorSubtitleKey"; "required": false; "isSignal": true; }; "errorStatus": { "alias": "errorStatus"; "required": false; "isSignal": true; }; "filtered": { "alias": "filtered"; "required": false; "isSignal": true; }; "searching": { "alias": "searching"; "required": false; "isSignal": true; }; "sortField": { "alias": "sortField"; "required": false; "isSignal": true; }; "sortOrder": { "alias": "sortOrder"; "required": false; "isSignal": true; }; "rowRoute": { "alias": "rowRoute"; "required": false; "isSignal": true; }; "rowClass": { "alias": "rowClass"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; }, { "selectedItems": "selectedItemsChange"; "addActionEvent": "addActionEvent"; "searchQuery": "searchQuery"; "selectItems": "selectItems"; "sortChange": "sortChange"; "pageChange": "pageChange"; "errorRetry": "errorRetry"; "clearFilters": "clearFilters"; "clearSearch": "clearSearch"; "rowNavigate": "rowNavigate"; }, ["customColumnTemplates", "expansionTemplate"], never, true, never>;
4102
4308
  }
4103
4309
 
4310
+ /** Control rendered for a filter field; `divider` renders a separator rather than an input. */
4104
4311
  type FilterFieldType = 'text' | 'select' | 'multiselect' | 'date' | 'datetime' | 'date-range' | 'number' | 'search' | 'checkbox' | 'radio' | 'checkbox-search' | 'divider';
4312
+ /** A choice offered by a select, multiselect, checkbox or radio filter field. */
4105
4313
  interface FilterFieldOption {
4106
4314
  label: string;
4107
4315
  value: string;
4108
4316
  }
4317
+ /** Declarative definition of one filter field: its `key` in the value map, its `type` and options, its grid `width`/`colspan`, and a `defaultValue` that is a JSON-encoded string array for multi-value types. */
4109
4318
  interface FilterFieldConfig {
4110
4319
  /** Unique key -- maps directly to the signal model property */
4111
4320
  key: string;
@@ -4155,6 +4364,7 @@ interface FilterFieldConfig {
4155
4364
  /** Optional maximum date for date fields. */
4156
4365
  maxDate?: Date;
4157
4366
  }
4367
+ /** Whole-form filter config: the `fields`, the grid layout (`columns` for manual mode, omit for auto), the live-filter `debounceMs` (default 300) and which chrome (reset, submit, quick-filter bar, save, clear-all) to show. */
4158
4368
  interface FilterFormConfig {
4159
4369
  /** All field definitions */
4160
4370
  fields: FilterFieldConfig[];
@@ -4178,6 +4388,7 @@ interface FilterFormConfig {
4178
4388
 
4179
4389
  type FieldValue = string | string[];
4180
4390
  type FilterValues = Record<string, FieldValue>;
4391
+ /** One chip in the quick-filter bar summarising an active filter: its field `key`, `label`, the display `value` (or `values` for multi-select) and how many selections it represents. */
4181
4392
  interface QuickFilterTag$1 {
4182
4393
  key: string;
4183
4394
  label: string;
@@ -4185,6 +4396,7 @@ interface QuickFilterTag$1 {
4185
4396
  values?: string[];
4186
4397
  count: number;
4187
4398
  }
4399
+ /** Renders a filter bar from a declarative `config` (it is not a reactive form — values live in a plain `model` signal), emits `filterChange` debounced (default 300 ms), sanitises typed text against HTML/script injection, and can show a quick-filter chip bar with per-chip removal. */
4188
4400
  declare class SceFilterFormComponent implements OnDestroy {
4189
4401
  readonly config: _angular_core.InputSignal<FilterFormConfig>;
4190
4402
  readonly quickFilterTitle: _angular_core.InputSignal<string>;
@@ -4234,15 +4446,19 @@ declare class SceFilterFormComponent implements OnDestroy {
4234
4446
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFilterFormComponent, "sce-filter-form", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "quickFilterTitle": { "alias": "quickFilterTitle"; "required": false; "isSignal": true; }; "quickFilterCounter": { "alias": "quickFilterCounter"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; "filterSubmit": "filterSubmit"; "filterReset": "filterReset"; "saveFilterClick": "saveFilterClick"; }, never, never, true, never>;
4235
4447
  }
4236
4448
 
4449
+ /** Height/padding scale of a form field control. */
4237
4450
  type FieldSize = 'small' | 'medium' | 'large';
4451
+ /** Sanitisation applied to typed characters in a text field; `null` means no filtering. */
4238
4452
  type InputFilter = 'numeric' | 'phone' | 'noComma' | 'decimal' | null;
4239
4453
  /** Restricts input characters via core directives (arabicOnly, englishOnly, numbersOnly, phoneOnly, trimInput). */
4240
4454
  type RestrictInput = 'arabicOnly' | 'englishOnly' | 'numbersOnly' | 'phoneOnly' | 'trimInput' | null;
4241
4455
 
4456
+ /** A single `label`/`value` choice for `FormInput`'s select, multiselect, radio and checkbox types. */
4242
4457
  interface SelectOption {
4243
4458
  label: string;
4244
4459
  value: string;
4245
4460
  }
4461
+ /** All-in-one labelled field that switches its control on the `type` input (text, password, phone, number, select, multiselect, date/datetime, textarea, checkbox/radio); it is a self-registering `ControlValueAccessor` (`NgControl` is injected with `self`, so `formControlName` works) and maps validator errors to i18n keys, overridable per field via `errorMessages`. */
4246
4462
  declare class FormInput implements ControlValueAccessor {
4247
4463
  private static nextId;
4248
4464
  readonly phoneConfig: {
@@ -4568,6 +4784,7 @@ declare function buildFieldValidators(spec?: DynamicFieldValidators): ValidatorF
4568
4784
  /** Builds a typed, non-nullable `FormGroup` from a list of field configs. */
4569
4785
  declare function buildDynamicFormGroup(fields: DynamicFieldConfig[], initial: Record<string, unknown>, fb: NonNullableFormBuilder): FormGroup;
4570
4786
 
4787
+ /** Modal shell over PrimeNG `p-dialog` (portaled to `body`) with projected header/body/footer slots; `size` maps to a max-width and `dismissed` fires exactly once whether closed by button, backdrop or ESC — note it uses `ViewEncapsulation.None`, so its styles are global. */
4571
4788
  declare class Popup {
4572
4789
  readonly open: _angular_core.InputSignal<boolean>;
4573
4790
  readonly title: _angular_core.InputSignal<string>;
@@ -4609,6 +4826,7 @@ declare class Popup {
4609
4826
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<Popup, "sce-popup", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "footerBorder": { "alias": "footerBorder"; "required": false; "isSignal": true; }; "footerStyle": { "alias": "footerStyle"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "largeHeader": { "alias": "largeHeader"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "bodyScrollable": { "alias": "bodyScrollable"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; "backClicked": "backClicked"; }, never, ["[subTitle]", "*", "[popupFooter]"], true, never>;
4610
4827
  }
4611
4828
 
4829
+ /** Abstract base for modal components: holds `isOpen`/`modalData` signals, exposes `openModal(data)`/`closeModal()`, and requires the subclass template to contain a `Popup` whose dismissal closes the modal and re-emits `dismissed`. */
4612
4830
  declare abstract class PopupModalBase<T = unknown> implements AfterViewInit {
4613
4831
  protected readonly destroyRef: DestroyRef;
4614
4832
  readonly modalData: _angular_core.WritableSignal<T | null>;
@@ -4655,6 +4873,7 @@ declare class TabsInkbarRtlDirective implements AfterViewInit {
4655
4873
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TabsInkbarRtlDirective, "[sceTabsInkbarRtl]", never, {}, {}, never, never, true, never>;
4656
4874
  }
4657
4875
 
4876
+ /** One tab in `Tabs`: `id`, translatable `label`, and optional `icon`, `badge` and `disabled` flag. */
4658
4877
  interface TabItem$1 {
4659
4878
  id: string;
4660
4879
  label: string;
@@ -4662,6 +4881,7 @@ interface TabItem$1 {
4662
4881
  icon?: string;
4663
4882
  badge?: string | number;
4664
4883
  }
4884
+ /** Tab bar over PrimeNG `p-tabs` that renders `items` and emits `tabChange`, projecting the panel content itself; `activeId` seeds a `linkedSignal` (so the tab strip is uncontrolled after the first click) and a host directive fixes inkbar placement in RTL. */
4665
4885
  declare class Tabs {
4666
4886
  readonly items: _angular_core.InputSignal<TabItem$1[]>;
4667
4887
  readonly activeId: _angular_core.InputSignal<string>;
@@ -4681,6 +4901,7 @@ declare class Tabs {
4681
4901
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tabs, "sce-tabs", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; "underlineStyle": { "alias": "underlineStyle"; "required": false; "isSignal": true; }; }, { "tabChange": "tabChange"; }, never, ["*"], true, [{ directive: typeof TabsInkbarRtlDirective; inputs: {}; outputs: {}; }]>;
4682
4902
  }
4683
4903
 
4904
+ /** One breadcrumb entry: either a literal `label` or a `translateKey` (+ `translateParams`) resolved at render time, plus optional `url`, `icon` and `command`. */
4684
4905
  interface BreadcrumbItem$1 {
4685
4906
  label?: string;
4686
4907
  url?: string;
@@ -4690,6 +4911,7 @@ interface BreadcrumbItem$1 {
4690
4911
  /** Passed to `TranslateService.instant` when `translateKey` is set */
4691
4912
  translateParams?: Record<string, string | number>;
4692
4913
  }
4914
+ /** Wraps PrimeNG `p-breadcrumb` over `items`, prepending a home entry unless `showHomeIcon` is false; re-translates labels on language change and sets its own `dir` from the `rtl` input (default: current lang is Arabic). */
4693
4915
  declare class Breadcrumb {
4694
4916
  private readonly destroyRef;
4695
4917
  readonly translateService: TranslateService;
@@ -4713,11 +4935,13 @@ declare class Breadcrumb {
4713
4935
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<Breadcrumb, "sce-breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "home": { "alias": "home"; "required": false; "isSignal": true; }; "showHomeIcon": { "alias": "showHomeIcon"; "required": false; "isSignal": true; }; "rtl": { "alias": "rtl"; "required": false; "isSignal": true; }; "separatorItem": { "alias": "separatorItem"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
4714
4936
  }
4715
4937
 
4938
+ /** Input-free card shell: projects its content into a styled `.card` container (host class `sce-card`). */
4716
4939
  declare class Card {
4717
4940
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Card, never>;
4718
4941
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<Card, "sce-card", never, {}, {}, never, ["*"], true, never>;
4719
4942
  }
4720
4943
 
4944
+ /** Row of `length` single-digit OTP boxes (default `VALIDATION_LENGTHS.OTP`) with auto-advance, backspace-back and paste-to-fill; a self-registering `ControlValueAccessor` whose value is the joined digit string. */
4721
4945
  declare class OtpInput implements ControlValueAccessor {
4722
4946
  readonly length: _angular_core.InputSignal<number>;
4723
4947
  readonly submitted: _angular_core.InputSignal<boolean>;
@@ -4746,12 +4970,14 @@ declare class OtpInput implements ControlValueAccessor {
4746
4970
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<OtpInput, "sce-otp-input", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4747
4971
  }
4748
4972
 
4973
+ /** One step in `Stepper`: an `id`, optional `label`/`subLabel` (i18n keys) and a `state` of completed, active, upcoming or disabled. */
4749
4974
  interface StepItem {
4750
4975
  id: string;
4751
4976
  label?: string;
4752
4977
  subLabel?: string;
4753
4978
  state: 'completed' | 'active' | 'upcoming' | 'disabled';
4754
4979
  }
4980
+ /** Renders `steps` as a horizontal/vertical step indicator in a `steps`, `progress` or `pills` `variant`; every step click emits `stepChange`, so `linear` currently gates nothing and the host must decide whether to honour it. */
4755
4981
  declare class Stepper {
4756
4982
  readonly steps: _angular_core.InputSignal<StepItem[]>;
4757
4983
  readonly variant: _angular_core.InputSignal<"progress" | "steps" | "pills">;
@@ -4770,11 +4996,13 @@ declare class Stepper {
4770
4996
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stepper, "sce-stepper", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "stepGap": { "alias": "stepGap"; "required": false; "isSignal": true; }; }, { "stepChange": "stepChange"; }, never, never, true, never>;
4771
4997
  }
4772
4998
 
4999
+ /** One breadcrumb crumb for `ScePageHeaderComponent`; supply `translationKey` for i18n or `label` for a literal, and `url` to make it a link. */
4773
5000
  interface BreadcrumbItem {
4774
5001
  label: string;
4775
5002
  url?: string;
4776
5003
  translationKey?: string;
4777
5004
  }
5005
+ /** Page title with an optional breadcrumb trail (`breadcrumbItems`, on by default); `breadcrumbFirst` moves the trail above the title and `actionLayout` switches to a split layout with a projected actions slot. */
4778
5006
  declare class ScePageHeaderComponent {
4779
5007
  readonly titleKey: _angular_core.InputSignal<string>;
4780
5008
  readonly title: _angular_core.InputSignal<string>;
@@ -4826,6 +5054,7 @@ declare class ScePageErrorComponent {
4826
5054
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePageErrorComponent, "sce-page-error", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "retryLabelKey": { "alias": "retryLabelKey"; "required": false; "isSignal": true; }; }, { "retry": "retry"; }, never, never, true, never>;
4827
5055
  }
4828
5056
 
5057
+ /** Page layout for authentication screens: a logo, title and subtitle header (each settable as literal text or a translation key) above the projected form, with an optional decorative side panel and footer. */
4829
5058
  declare class SceAuthLayoutComponent {
4830
5059
  /** Logo image URL for the auth header */
4831
5060
  readonly logoSrc: _angular_core.InputSignal<string>;
@@ -4851,6 +5080,7 @@ declare class SceAuthLayoutComponent {
4851
5080
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAuthLayoutComponent, "sce-auth-layout", never, { "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "logoAlt": { "alias": "logoAlt"; "required": false; "isSignal": true; }; "appTitle": { "alias": "appTitle"; "required": false; "isSignal": true; }; "appTitleKey": { "alias": "appTitleKey"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "backgroundSrc": { "alias": "backgroundSrc"; "required": false; "isSignal": true; }; "showSidePanel": { "alias": "showSidePanel"; "required": false; "isSignal": true; }; "footerText": { "alias": "footerText"; "required": false; "isSignal": true; }; "footerTextKey": { "alias": "footerTextKey"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4852
5081
  }
4853
5082
 
5083
+ /** Colour variant of a status page's icon wrapper and accent stripe. */
4854
5084
  type StatusPageVariant = 'error' | 'warning' | 'info' | 'success' | 'neutral';
4855
5085
  /**
4856
5086
  * Full-page status component for error, maintenance, permission, and empty states.
@@ -4893,6 +5123,7 @@ declare class SceStatusPageComponent {
4893
5123
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceStatusPageComponent, "sce-status-page", never, { "iconVariant": { "alias": "iconVariant"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; "code": { "alias": "code"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4894
5124
  }
4895
5125
 
5126
+ /** One option in `SceSelectableListWithSearchComponent`; `label` and `subLabel` are both matched by the search box, and `metadata` carries caller-defined payload of type `T`. */
4896
5127
  interface SelectableListItem<T = unknown> {
4897
5128
  /** Unique value for the item */
4898
5129
  value: string;
@@ -4906,6 +5137,7 @@ interface SelectableListItem<T = unknown> {
4906
5137
  metadata?: T;
4907
5138
  }
4908
5139
 
5140
+ /** Searchable single- or multi-select list (`multiSelect` defaults to true) that filters `items` in-place and emits the full `selectedValues` array; rows can be overridden with a projected `ng-template`, and `loading` swaps in skeletons. */
4909
5141
  declare class SceSelectableListWithSearchComponent {
4910
5142
  readonly title: _angular_core.InputSignal<string>;
4911
5143
  readonly items: _angular_core.InputSignal<SelectableListItem<unknown>[]>;
@@ -4950,6 +5182,7 @@ interface QuickFilterTag {
4950
5182
  key?: string;
4951
5183
  }
4952
5184
 
5185
+ /** Bar of currently-applied filter tags (`activeFilters`) with an optional counter, "save filter" and "clear all" actions; it only emits clicks and never mutates the tag list itself. */
4953
5186
  declare class SceQuickFilterBarComponent {
4954
5187
  readonly activeFilters: _angular_core.InputSignal<QuickFilterTag[]>;
4955
5188
  readonly showSaveFilter: _angular_core.InputSignal<boolean>;
@@ -4966,6 +5199,7 @@ declare class SceQuickFilterBarComponent {
4966
5199
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceQuickFilterBarComponent, "sce-quick-filter-bar", never, { "activeFilters": { "alias": "activeFilters"; "required": false; "isSignal": true; }; "showSaveFilter": { "alias": "showSaveFilter"; "required": false; "isSignal": true; }; "showClearAll": { "alias": "showClearAll"; "required": false; "isSignal": true; }; "quickFilterCounter": { "alias": "quickFilterCounter"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "tagGap": { "alias": "tagGap"; "required": false; "isSignal": true; }; "showRemoveButton": { "alias": "showRemoveButton"; "required": false; "isSignal": true; }; "rowJustify": { "alias": "rowJustify"; "required": false; "isSignal": true; }; }, { "saveFilterClick": "saveFilterClick"; "clearAllClick": "clearAllClick"; "filterTagClick": "filterTagClick"; }, never, never, true, never>;
4967
5200
  }
4968
5201
 
5202
+ /** The identity record a lookup returns for a verified user, shown read-only in the panel's second step. */
4969
5203
  interface VerifiedUserData {
4970
5204
  name: string;
4971
5205
  nationalId: string;
@@ -4973,16 +5207,19 @@ interface VerifiedUserData {
4973
5207
  email: string;
4974
5208
  mobile: string;
4975
5209
  }
5210
+ /** What the panel's first step emits: the national ID and birth date to look the user up with. */
4976
5211
  interface VerifyPayload {
4977
5212
  nationalId: string;
4978
5213
  birthDate: string;
4979
5214
  }
5215
+ /** What the panel's second step emits: the roles, contact details, and active flag to save for the verified user. */
4980
5216
  interface ConfirmPayload {
4981
5217
  roleIds: number[];
4982
5218
  email: string;
4983
5219
  mobile: string;
4984
5220
  isActive: boolean;
4985
5221
  }
5222
+ /** Two-step user-verification panel that first collects a national ID and birth date, then the verified user's roles, contact details and active flag, emitting `verify` and `confirm` payloads. */
4986
5223
  declare class SceUserVerifySectionPanelComponent {
4987
5224
  readonly step: _angular_core.InputSignal<1 | 2>;
4988
5225
  readonly loading: _angular_core.InputSignal<boolean>;
@@ -5040,7 +5277,9 @@ interface FileSourceBase64 {
5040
5277
  kind: 'base64';
5041
5278
  value: string;
5042
5279
  }
5280
+ /** Discriminated union (on `kind`) of the ways file content can be handed to the file viewer: URL, Blob/File, or Base64. */
5043
5281
  type FileSource = FileSourceUrl | FileSourceBlob | FileSourceBase64;
5282
+ /** Everything the file viewer needs about one file: its `source`, display/download `name`, MIME `type` or `extension` used to pick a renderer, optional `size`, and a `downloadable` flag that also blocks programmatic download. */
5044
5283
  interface FileViewerData {
5045
5284
  /** File content — a URL string, Blob/File, or Base64 string. */
5046
5285
  source: FileSource;
@@ -5055,6 +5294,7 @@ interface FileViewerData {
5055
5294
  /** When false, hides the download button and blocks programmatic download (e.g. confidential previews). */
5056
5295
  downloadable?: boolean;
5057
5296
  }
5297
+ /** Renderer the file viewer picks for a file; `Unsupported` shows a download-only fallback. */
5058
5298
  declare enum FileType {
5059
5299
  Image = "image",
5060
5300
  Pdf = "pdf",
@@ -5153,6 +5393,7 @@ declare class SceFileViewerDirective {
5153
5393
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SceFileViewerDirective, "[sceFileViewer]", never, { "sceFileViewer": { "alias": "sceFileViewer"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5154
5394
  }
5155
5395
 
5396
+ /** Hints `detectFileType` uses, in priority order: `mime` (or the MIME inside a data-URI `url`), then an extension taken from `extension`, `name` or `url`. */
5156
5397
  interface FileTypeInput {
5157
5398
  mime?: string;
5158
5399
  extension?: string;
@@ -5180,6 +5421,7 @@ interface VideoCaption {
5180
5421
  /** When true, this track is shown by default. */
5181
5422
  default?: boolean;
5182
5423
  }
5424
+ /** Value for the `<video preload>` attribute: fetch the whole file, metadata only, or nothing. */
5183
5425
  type VideoPreload = 'auto' | 'metadata' | 'none';
5184
5426
 
5185
5427
  /**
@@ -5247,12 +5489,14 @@ declare class SceTimelineComponent {
5247
5489
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceTimelineComponent, "sce-timeline", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
5248
5490
  }
5249
5491
 
5492
+ /** One row in `SceSearchableUsersListComponent`; only `name` is matched by the search box. */
5250
5493
  interface SearchableUserListItem {
5251
5494
  id: string | number;
5252
5495
  name: string;
5253
5496
  subtitle?: string;
5254
5497
  }
5255
5498
 
5499
+ /** User list with a client-side name search box; filtering happens internally and only `deleteUser` is emitted to the host. */
5256
5500
  declare class SceSearchableUsersListComponent {
5257
5501
  readonly title: _angular_core.InputSignal<string>;
5258
5502
  readonly users: _angular_core.InputSignal<SearchableUserListItem[]>;
@@ -5266,11 +5510,13 @@ declare class SceSearchableUsersListComponent {
5266
5510
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceSearchableUsersListComponent, "sce-searchable-users-list", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "users": { "alias": "users"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; }, { "deleteUser": "deleteUser"; }, never, never, true, never>;
5267
5511
  }
5268
5512
 
5513
+ /** One crumb in a detail-page header: a translated `label` plus an optional `route` (or legacy `url`); a crumb with neither is rendered as plain text. */
5269
5514
  interface DetailBreadcrumbItem {
5270
5515
  label: string;
5271
5516
  route?: string;
5272
5517
  url?: string;
5273
5518
  }
5519
+ /** A button in a detail-page header: its `label` and `icon`, plus the `action` key echoed back through `actionClick`. */
5274
5520
  interface DetailHeaderAction {
5275
5521
  label: string;
5276
5522
  icon: string;
@@ -5280,6 +5526,7 @@ interface DetailHeaderAction {
5280
5526
  iconPosition?: 'start' | 'end';
5281
5527
  }
5282
5528
 
5529
+ /** Page header for detail screens with a title, breadcrumb trail and a row of action buttons that emit `actionClick` carrying the action's key. */
5283
5530
  declare class SceDetailHeaderComponent {
5284
5531
  readonly title: _angular_core.InputSignal<string>;
5285
5532
  readonly breadcrumbs: _angular_core.InputSignal<DetailBreadcrumbItem[]>;
@@ -5299,10 +5546,12 @@ declare class SceDetailHeaderComponent {
5299
5546
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDetailHeaderComponent, "sce-detail-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, never, true, never>;
5300
5547
  }
5301
5548
 
5549
+ /** Presentation-only status for a request header: the resolved `label` plus the tag colour to render it in. */
5302
5550
  interface RequestStatusPresentation {
5303
5551
  label: string;
5304
5552
  color: 'warning' | 'success' | 'danger' | 'neutral';
5305
5553
  }
5554
+ /** One icon-and-label metadata entry in a request header; set `isDate` to have the value formatted as a localized date. */
5306
5555
  interface RequestHeaderMetaItem {
5307
5556
  label: string;
5308
5557
  value: string;
@@ -5310,6 +5559,7 @@ interface RequestHeaderMetaItem {
5310
5559
  isDate?: boolean;
5311
5560
  }
5312
5561
 
5562
+ /** Header for a request page: `title`, a copyable `requestId`, a coloured `status` tag, and a row of `metaItems` (date items are run through `LocalizedDatePipe`). */
5313
5563
  declare class SceRequestHeaderComponent {
5314
5564
  readonly title: _angular_core.InputSignal<string>;
5315
5565
  readonly requestId: _angular_core.InputSignal<string>;
@@ -5321,6 +5571,7 @@ declare class SceRequestHeaderComponent {
5321
5571
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceRequestHeaderComponent, "sce-request-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "requestId": { "alias": "requestId"; "required": true; "isSignal": true; }; "status": { "alias": "status"; "required": true; "isSignal": true; }; "metaItems": { "alias": "metaItems"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "dateLabelKey": { "alias": "dateLabelKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5322
5572
  }
5323
5573
 
5574
+ /** Card wrapper around `sce-request-header` that adds a body slot for request details; takes the same `title`, `requestId`, `status`, and `metaItems` inputs. */
5324
5575
  declare class SceRequestDetailsCardComponent {
5325
5576
  readonly title: _angular_core.InputSignal<string>;
5326
5577
  readonly requestId: _angular_core.InputSignal<string>;
@@ -5332,6 +5583,7 @@ declare class SceRequestDetailsCardComponent {
5332
5583
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceRequestDetailsCardComponent, "sce-request-details-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "requestId": { "alias": "requestId"; "required": true; "isSignal": true; }; "status": { "alias": "status"; "required": true; "isSignal": true; }; "metaItems": { "alias": "metaItems"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "dateLabelKey": { "alias": "dateLabelKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5333
5584
  }
5334
5585
 
5586
+ /** One attached file in an attachments list: `id`, display `name`, `url`, optional pdf/image `type`, thumbnail `previewUrl`, human-readable `sizeLabel`, and whether it may be deleted. */
5335
5587
  interface SceAttachmentListItem {
5336
5588
  id: string;
5337
5589
  name: string;
@@ -5342,6 +5594,7 @@ interface SceAttachmentListItem {
5342
5594
  deletable?: boolean;
5343
5595
  }
5344
5596
 
5597
+ /** List of file attachments with a per-row pdf/image icon inferred from the file extension and an empty state; in `download` mode it emits `downloadFile`, in `show` mode it opens the file in a new tab itself. */
5345
5598
  declare class SceAttachmentsListComponent {
5346
5599
  readonly attachments: _angular_core.InputSignal<readonly SceAttachmentListItem[]>;
5347
5600
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5359,6 +5612,7 @@ declare class SceAttachmentsListComponent {
5359
5612
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAttachmentsListComponent, "sce-attachments-list", never, { "attachments": { "alias": "attachments"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "showSectionTitle": { "alias": "showSectionTitle"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "downloadFile": "downloadFile"; "deleteFile": "deleteFile"; }, never, never, true, never>;
5360
5613
  }
5361
5614
 
5615
+ /** Profile banner showing an avatar (`avatarUrl`, falling back to a person icon), `name`, and `role`. */
5362
5616
  declare class SceProfileHeroComponent {
5363
5617
  readonly name: _angular_core.InputSignal<string>;
5364
5618
  readonly role: _angular_core.InputSignal<string>;
@@ -5367,6 +5621,7 @@ declare class SceProfileHeroComponent {
5367
5621
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceProfileHeroComponent, "sce-profile-hero", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5368
5622
  }
5369
5623
 
5624
+ /** One entry in `SceResourcesListComponent`: a required `url` plus a literal `label` or i18n `labelKey` and an optional icon. */
5370
5625
  interface SceResourceListItem {
5371
5626
  label?: string;
5372
5627
  labelKey?: string;
@@ -5374,6 +5629,7 @@ interface SceResourceListItem {
5374
5629
  icon?: string;
5375
5630
  }
5376
5631
 
5632
+ /** Titled list of downloadable/linked resources from `items`; `titleKey` defaults to the knowledge-centre resources heading. */
5377
5633
  declare class SceResourcesListComponent {
5378
5634
  readonly items: _angular_core.InputSignal<SceResourceListItem[]>;
5379
5635
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5381,6 +5637,7 @@ declare class SceResourcesListComponent {
5381
5637
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceResourcesListComponent, "sce-resources-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5382
5638
  }
5383
5639
 
5640
+ /** "Was this helpful?" yes/no prompt (all labels are overridable i18n keys) that emits `feedback` once and then locks itself into a thank-you state. */
5384
5641
  declare class SceFeedbackSectionComponent {
5385
5642
  readonly questionKey: _angular_core.InputSignal<string>;
5386
5643
  readonly yesKey: _angular_core.InputSignal<string>;
@@ -5396,6 +5653,7 @@ declare class SceFeedbackSectionComponent {
5396
5653
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFeedbackSectionComponent, "sce-feedback-section", never, { "questionKey": { "alias": "questionKey"; "required": false; "isSignal": true; }; "yesKey": { "alias": "yesKey"; "required": false; "isSignal": true; }; "noKey": { "alias": "noKey"; "required": false; "isSignal": true; }; "thanksKey": { "alias": "thanksKey"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "feedback": "feedback"; }, never, never, true, never>;
5397
5654
  }
5398
5655
 
5656
+ /** One card in `SceRelatedCardsListComponent`; title/description may be given as a literal or an i18n `*Key`, and `route` makes the card a link. */
5399
5657
  interface SceRelatedCardItem {
5400
5658
  title?: string;
5401
5659
  titleKey?: string;
@@ -5405,6 +5663,7 @@ interface SceRelatedCardItem {
5405
5663
  route?: string | string[] | null;
5406
5664
  }
5407
5665
 
5666
+ /** Renders a titled grid of related-content cards from `items`, each optionally linking to its own `route`. */
5408
5667
  declare class SceRelatedCardsListComponent {
5409
5668
  readonly items: _angular_core.InputSignal<SceRelatedCardItem[]>;
5410
5669
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5428,11 +5687,14 @@ declare class SceRelatedCardsListComponent {
5428
5687
  * These are pure data shapes — no Angular or HTTP dependencies.
5429
5688
  */
5430
5689
  type OfficeTabKey = 'overview' | 'projects' | 'reviews';
5690
+ /** One tab of the office-detail page: its `key` and an already-translated `label`. */
5431
5691
  interface TabItem {
5432
5692
  key: OfficeTabKey;
5433
5693
  label: string;
5434
5694
  }
5695
+ /** Lifecycle state of an office project as shown to guests; `unknown` when the API sends no status. */
5435
5696
  type GuestProjectStatus = 'new' | 'inProgress' | 'completed' | 'unknown';
5697
+ /** A project shown on an office profile: hero and gallery images, copy, optional type label and status; `projectId` is null for records that carry no id. */
5436
5698
  interface OfficeProject {
5437
5699
  title: string;
5438
5700
  description: string;
@@ -5442,6 +5704,7 @@ interface OfficeProject {
5442
5704
  typeLabel?: string;
5443
5705
  status?: GuestProjectStatus;
5444
5706
  }
5707
+ /** A single customer review of an office: author, star `rating`, display `date`, body `text` and avatar URL. */
5445
5708
  interface OfficeReview {
5446
5709
  authorName: string;
5447
5710
  rating: number;
@@ -5449,17 +5712,20 @@ interface OfficeReview {
5449
5712
  text: string;
5450
5713
  photoUrl: string;
5451
5714
  }
5715
+ /** One bar of the ratings histogram: the `stars` bucket (1–5) and the `percent` of reviews in it. */
5452
5716
  interface RatingDistributionLine {
5453
5717
  stars: number;
5454
5718
  percent: number;
5455
5719
  }
5456
5720
 
5721
+ /** Loading placeholder for the office-detail page, rendering the hero header plus a skeleton body matching the currently active tab. */
5457
5722
  declare class SceOfficeDetailLoadingStateComponent {
5458
5723
  readonly activeTab: _angular_core.InputSignal<OfficeTabKey>;
5459
5724
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceOfficeDetailLoadingStateComponent, never>;
5460
5725
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailLoadingStateComponent, "sce-office-detail-loading-state", never, { "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5461
5726
  }
5462
5727
 
5728
+ /** Not-found state for the office-detail page, rendering the hero header above a result state whose preset back action is suppressed in favour of the page's own links. */
5463
5729
  declare class SceOfficeDetailNotFoundComponent {
5464
5730
  readonly breadcrumbs: _angular_core.InputSignal<LandingBreadcrumbItem[]>;
5465
5731
  /** The page owns its own navigation links, so the preset's `back` button is suppressed. */
@@ -5468,6 +5734,7 @@ declare class SceOfficeDetailNotFoundComponent {
5468
5734
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailNotFoundComponent, "sce-office-detail-not-found", never, { "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5469
5735
  }
5470
5736
 
5737
+ /** Hero content of the public office-detail page: office name with verification badge, location, star-rating summary, reviewer avatars and an optional request-contract button. */
5471
5738
  declare class SceOfficeDetailHeroBodyComponent {
5472
5739
  readonly officeName: _angular_core.InputSignal<string>;
5473
5740
  readonly verificationStatus: _angular_core.InputSignal<OrganizationServiceProviderStatus | null>;
@@ -5482,6 +5749,7 @@ declare class SceOfficeDetailHeroBodyComponent {
5482
5749
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailHeroBodyComponent, "sce-office-detail-hero-body", never, { "officeName": { "alias": "officeName"; "required": true; "isSignal": true; }; "verificationStatus": { "alias": "verificationStatus"; "required": false; "isSignal": true; }; "locationText": { "alias": "locationText"; "required": false; "isSignal": true; }; "filledStars": { "alias": "filledStars"; "required": false; "isSignal": true; }; "ratingValue": { "alias": "ratingValue"; "required": false; "isSignal": true; }; "ratingSummary": { "alias": "ratingSummary"; "required": false; "isSignal": true; }; "reviewerAvatars": { "alias": "reviewerAvatars"; "required": false; "isSignal": true; }; "canRequestContract": { "alias": "canRequestContract"; "required": false; "isSignal": true; }; }, { "requestContract": "requestContract"; }, never, never, true, never>;
5483
5750
  }
5484
5751
 
5752
+ /** Tab bar of the office-detail page, showing the office's brand logo and name beside the tab buttons and emitting `tabChange` on selection. */
5485
5753
  declare class SceOfficeDetailTabsBarComponent {
5486
5754
  readonly tabItems: _angular_core.InputSignal<TabItem[]>;
5487
5755
  readonly activeTab: _angular_core.InputSignal<OfficeTabKey>;
@@ -5492,6 +5760,7 @@ declare class SceOfficeDetailTabsBarComponent {
5492
5760
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailTabsBarComponent, "sce-office-detail-tabs-bar", never, { "tabItems": { "alias": "tabItems"; "required": true; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": true; "isSignal": true; }; "logoObjectUrl": { "alias": "logoObjectUrl"; "required": false; "isSignal": true; }; "officeName": { "alias": "officeName"; "required": false; "isSignal": true; }; }, { "tabChange": "tabChange"; }, never, never, true, never>;
5493
5761
  }
5494
5762
 
5763
+ /** Overview tab of the office-detail page, showing the office bio, an OSM map of its location and rows of experience and compatibility metric cards. */
5495
5764
  declare class SceOfficeDetailOverviewPanelComponent {
5496
5765
  readonly officeBio: _angular_core.InputSignal<string>;
5497
5766
  readonly locationText: _angular_core.InputSignal<string>;
@@ -5502,6 +5771,7 @@ declare class SceOfficeDetailOverviewPanelComponent {
5502
5771
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailOverviewPanelComponent, "sce-office-detail-overview-panel", never, { "officeBio": { "alias": "officeBio"; "required": false; "isSignal": true; }; "locationText": { "alias": "locationText"; "required": false; "isSignal": true; }; "mapPoints": { "alias": "mapPoints"; "required": false; "isSignal": true; }; "experienceMetricItems": { "alias": "experienceMetricItems"; "required": false; "isSignal": true; }; "compatibilityMetricItems": { "alias": "compatibilityMetricItems"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5503
5772
  }
5504
5773
 
5774
+ /** Projects tab of the office-detail page, rendering each of the office's projects alongside its image gallery. */
5505
5775
  declare class SceOfficeDetailProjectsPanelComponent {
5506
5776
  readonly projects: _angular_core.InputSignal<OfficeProject[]>;
5507
5777
  readonly projectGalleryImages: _angular_core.InputSignal<{
@@ -5513,6 +5783,7 @@ declare class SceOfficeDetailProjectsPanelComponent {
5513
5783
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailProjectsPanelComponent, "sce-office-detail-projects-panel", never, { "projects": { "alias": "projects"; "required": false; "isSignal": true; }; "projectGalleryImages": { "alias": "projectGalleryImages"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5514
5784
  }
5515
5785
 
5786
+ /** Reviews tab of the office-detail page, showing the overall rating, the per-star rating distribution and the individual reviews. */
5516
5787
  declare class SceOfficeDetailReviewsPanelComponent {
5517
5788
  readonly reviews: _angular_core.InputSignal<OfficeReview[]>;
5518
5789
  readonly totalReviews: _angular_core.InputSignal<number>;
@@ -5566,6 +5837,7 @@ declare class SceFormRichTextComponent implements ControlValueAccessor {
5566
5837
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceFormRichTextComponent, "sce-form-rich-text", never, { "labelTranslateKey": { "alias": "labelTranslateKey"; "required": false; "isSignal": true; }; "editorHeight": { "alias": "editorHeight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5567
5838
  }
5568
5839
 
5840
+ /** Picks the `<key>Ar`/`<key>En` property of an object matching the active language (falling back to the other language, then to the bare `key`, then to ''); pure, so it does not re-run on a language switch unless the object reference changes. */
5569
5841
  declare class LocalizedValuePipe implements PipeTransform {
5570
5842
  private readonly translate;
5571
5843
  transform(obj: Record<string, unknown> | null | undefined, key: string, options?: {
@@ -5576,6 +5848,7 @@ declare class LocalizedValuePipe implements PipeTransform {
5576
5848
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<LocalizedValuePipe, "localizedValue", true>;
5577
5849
  }
5578
5850
 
5851
+ /** Displays a phone number with an optional leading icon and a copy-to-clipboard button (shown by default). */
5579
5852
  declare class ScePhoneNumberComponent {
5580
5853
  readonly value: _angular_core.InputSignal<string>;
5581
5854
  readonly showCopy: _angular_core.InputSignal<boolean>;
@@ -5585,6 +5858,7 @@ declare class ScePhoneNumberComponent {
5585
5858
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePhoneNumberComponent, "sce-phone-number", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "showCopy": { "alias": "showCopy"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5586
5859
  }
5587
5860
 
5861
+ /** Title-and-description row with a trailing edit button (shown by default, labelled from the translated "edit" key unless overridden). */
5588
5862
  declare class SceInfoRowComponent {
5589
5863
  readonly title: _angular_core.InputSignal<string>;
5590
5864
  readonly description: _angular_core.InputSignal<string>;
@@ -5598,6 +5872,7 @@ declare class SceInfoRowComponent {
5598
5872
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceInfoRowComponent, "sce-info-row", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "editLabel": { "alias": "editLabel"; "required": false; "isSignal": true; }; "showEdit": { "alias": "showEdit"; "required": false; "isSignal": true; }; "ltr": { "alias": "ltr"; "required": false; "isSignal": true; }; }, { "editClick": "editClick"; }, never, never, true, never>;
5599
5873
  }
5600
5874
 
5875
+ /** Compact summary tile pairing an icon with a label, a primary value and an optional secondary value. */
5601
5876
  declare class SceSummaryCardComponent {
5602
5877
  readonly icon: _angular_core.InputSignal<string>;
5603
5878
  readonly label: _angular_core.InputSignal<string>;
@@ -5607,7 +5882,9 @@ declare class SceSummaryCardComponent {
5607
5882
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceSummaryCardComponent, "sce-summary-card", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "subValue": { "alias": "subValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5608
5883
  }
5609
5884
 
5885
+ /** Colour tone of the badge on `SceEntityInfoCardComponent`. */
5610
5886
  type EntityInfoCardBadgeTone = 'success' | 'info' | 'warning' | 'error' | 'neutral';
5887
+ /** Card identifying an entity by logo (or fallback icon), name, subtitle and ID, with a tone-coloured badge label that defaults to the success tone. */
5611
5888
  declare class SceEntityInfoCardComponent {
5612
5889
  readonly labelKey: _angular_core.InputSignal<string>;
5613
5890
  readonly nameKey: _angular_core.InputSignal<string>;
@@ -5624,6 +5901,7 @@ declare class SceEntityInfoCardComponent {
5624
5901
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceEntityInfoCardComponent, "sce-entity-info-card", never, { "labelKey": { "alias": "labelKey"; "required": true; "isSignal": true; }; "nameKey": { "alias": "nameKey"; "required": false; "isSignal": true; }; "nameText": { "alias": "nameText"; "required": false; "isSignal": true; }; "subtitleText": { "alias": "subtitleText"; "required": false; "isSignal": true; }; "idLabelKey": { "alias": "idLabelKey"; "required": false; "isSignal": true; }; "idValue": { "alias": "idValue"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "logoAlt": { "alias": "logoAlt"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "badgeTone": { "alias": "badgeTone"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5625
5902
  }
5626
5903
 
5904
+ /** Card that either shows a completion progress bar or, in `cta` mode, an illustrated call-to-action button emitting `nextStep`. */
5627
5905
  declare class SceProgressCardComponent {
5628
5906
  readonly mode: _angular_core.InputSignal<"progress" | "cta">;
5629
5907
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5638,6 +5916,7 @@ declare class SceProgressCardComponent {
5638
5916
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceProgressCardComponent, "sce-progress-card", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "descriptionKey": { "alias": "descriptionKey"; "required": false; "isSignal": true; }; "titleText": { "alias": "titleText"; "required": false; "isSignal": true; }; "descriptionText": { "alias": "descriptionText"; "required": false; "isSignal": true; }; "buttonKey": { "alias": "buttonKey"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "illustrationSrc": { "alias": "illustrationSrc"; "required": false; "isSignal": true; }; }, { "nextStep": "nextStep"; }, never, ["[data-actions]"], true, never>;
5639
5917
  }
5640
5918
 
5919
+ /** Prose block that renders the translated `contentKey` as a paragraph, unless `contentHtml` is supplied, in which case that raw HTML is rendered instead. */
5641
5920
  declare class SceContentBlockComponent {
5642
5921
  readonly contentKey: _angular_core.InputSignal<string>;
5643
5922
  readonly contentHtml: _angular_core.InputSignal<string | null>;
@@ -5645,6 +5924,7 @@ declare class SceContentBlockComponent {
5645
5924
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceContentBlockComponent, "sce-content-block", never, { "contentKey": { "alias": "contentKey"; "required": true; "isSignal": true; }; "contentHtml": { "alias": "contentHtml"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5646
5925
  }
5647
5926
 
5927
+ /** Renders `items` (translation keys) as an icon-bulleted list, laid out across `maxColumns` columns (default 1). */
5648
5928
  declare class SceBulletListComponent {
5649
5929
  readonly items: _angular_core.InputSignal<string[]>;
5650
5930
  readonly maxColumns: _angular_core.InputSignal<number>;
@@ -5652,6 +5932,7 @@ declare class SceBulletListComponent {
5652
5932
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceBulletListComponent, "sce-bullet-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "maxColumns": { "alias": "maxColumns"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5653
5933
  }
5654
5934
 
5935
+ /** Dashboard KPI card showing a headline value, an up/down trend percentage and an optional sparkline chart. */
5655
5936
  declare class SceStatsAnalyticsCardComponent {
5656
5937
  readonly title: _angular_core.InputSignal<string>;
5657
5938
  readonly titleLinkText: _angular_core.InputSignal<string>;
@@ -5679,6 +5960,7 @@ interface OfficeEditProjectItem {
5679
5960
  previewUrls?: string[];
5680
5961
  }
5681
5962
 
5963
+ /** Result screen shown after office-profile changes are submitted, rendering either the success or the pending-review outcome with links to the profile and the requests list. */
5682
5964
  declare class SceOfficeProfileSubmitResultComponent {
5683
5965
  readonly result: _angular_core.InputSignal<"success" | "pending">;
5684
5966
  readonly viewProfile: _angular_core.OutputEmitterRef<void>;
@@ -5687,11 +5969,13 @@ declare class SceOfficeProfileSubmitResultComponent {
5687
5969
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileSubmitResultComponent, "sce-office-profile-submit-result", never, { "result": { "alias": "result"; "required": true; "isSignal": true; }; }, { "viewProfile": "viewProfile"; "viewRequests": "viewRequests"; }, never, never, true, never>;
5688
5970
  }
5689
5971
 
5972
+ /** Static banner telling the user their office-profile update is awaiting review, with a link to the requests page; it takes no inputs. */
5690
5973
  declare class ScePendingUpdateBannerComponent {
5691
5974
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScePendingUpdateBannerComponent, never>;
5692
5975
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePendingUpdateBannerComponent, "sce-pending-update-banner", never, {}, {}, never, never, true, never>;
5693
5976
  }
5694
5977
 
5978
+ /** Bio section of the office-profile edit form, binding the parent's `FormGroup` to the summary field, the services multi-select and the availability select. */
5695
5979
  declare class SceOfficeProfileEditBioSectionComponent {
5696
5980
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
5697
5981
  readonly serviceOptions: _angular_core.InputSignal<SceSelectOption<string>[]>;
@@ -5701,6 +5985,7 @@ declare class SceOfficeProfileEditBioSectionComponent {
5701
5985
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileEditBioSectionComponent, "sce-office-profile-edit-bio-section", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "serviceOptions": { "alias": "serviceOptions"; "required": true; "isSignal": true; }; "availabilityOptions": { "alias": "availabilityOptions"; "required": true; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5702
5986
  }
5703
5987
 
5988
+ /** Media section of the office-profile edit form, with file-upload zones for the cover image and logo; the busy and error states come from the parent's save request rather than from an upload of its own. */
5704
5989
  declare class SceOfficeProfileEditMediaSectionComponent {
5705
5990
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
5706
5991
  readonly coverExistingUrl: _angular_core.InputSignal<string>;
@@ -5717,6 +6002,7 @@ declare class SceOfficeProfileEditMediaSectionComponent {
5717
6002
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileEditMediaSectionComponent, "sce-office-profile-edit-media-section", never, { "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "coverExistingUrl": { "alias": "coverExistingUrl"; "required": false; "isSignal": true; }; "coverFile": { "alias": "coverFile"; "required": false; "isSignal": true; }; "logoExistingUrl": { "alias": "logoExistingUrl"; "required": false; "isSignal": true; }; "logoFile": { "alias": "logoFile"; "required": false; "isSignal": true; }; "uploading": { "alias": "uploading"; "required": false; "isSignal": true; }; "uploadError": { "alias": "uploadError"; "required": false; "isSignal": true; }; }, { "coverChange": "coverChange"; "logoChange": "logoChange"; }, never, never, true, never>;
5718
6003
  }
5719
6004
 
6005
+ /** Official-data section of the office-profile edit form, binding the parent's `FormGroup` to the bank, city and preferred-project-size selects plus the geo-location picker. */
5720
6006
  declare class SceOfficeProfileEditOfficialSectionComponent {
5721
6007
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
5722
6008
  readonly bankOptions: _angular_core.InputSignal<SceSelectOption<string>[]>;
@@ -5731,6 +6017,7 @@ declare class SceOfficeProfileEditOfficialSectionComponent {
5731
6017
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileEditOfficialSectionComponent, "sce-office-profile-edit-official-section", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "bankOptions": { "alias": "bankOptions"; "required": true; "isSignal": true; }; "cityOptions": { "alias": "cityOptions"; "required": true; "isSignal": true; }; "preferredSizeOptions": { "alias": "preferredSizeOptions"; "required": true; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "geoLocation": { "alias": "geoLocation"; "required": false; "isSignal": true; }; }, { "locationSelect": "locationSelect"; "ibanInput": "ibanInput"; }, never, never, true, never>;
5732
6018
  }
5733
6019
 
6020
+ /** Contact section of the office-profile edit form, binding the parent's `FormGroup` to the contact detail inputs. */
5734
6021
  declare class SceOfficeProfileEditContactSectionComponent {
5735
6022
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
5736
6023
  readonly dir: _angular_core.InputSignal<"rtl" | "ltr">;
@@ -5742,6 +6029,7 @@ interface ProjectView extends OfficeEditProjectItem {
5742
6029
  heroUrl: string;
5743
6030
  thumbUrls: string[];
5744
6031
  }
6032
+ /** Projects section of the office-profile edit form, listing each project as a hero image with up to two thumbnails and emitting add, edit and delete requests by list index. */
5745
6033
  declare class SceOfficeProfileEditProjectsSectionComponent {
5746
6034
  readonly projects: _angular_core.InputSignal<OfficeEditProjectItem[]>;
5747
6035
  readonly addProject: _angular_core.OutputEmitterRef<void>;
@@ -5752,6 +6040,7 @@ declare class SceOfficeProfileEditProjectsSectionComponent {
5752
6040
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileEditProjectsSectionComponent, "sce-office-profile-edit-projects-section", never, { "projects": { "alias": "projects"; "required": true; "isSignal": true; }; }, { "addProject": "addProject"; "editProject": "editProject"; "deleteProject": "deleteProject"; }, never, never, true, never>;
5753
6041
  }
5754
6042
 
6043
+ /** Dialog for adding or editing an office project, binding the parent's project `FormGroup` alongside an image upload zone whose minimum image count defaults to three. */
5755
6044
  declare class SceOfficeProfileProjectEditorDialogComponent {
5756
6045
  readonly visible: _angular_core.InputSignal<boolean>;
5757
6046
  readonly title: _angular_core.InputSignal<string>;
@@ -5771,6 +6060,7 @@ declare class SceOfficeProfileProjectEditorDialogComponent {
5771
6060
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileProjectEditorDialogComponent, "sce-office-profile-project-editor-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": true; "isSignal": true; }; "projectForm": { "alias": "projectForm"; "required": true; "isSignal": true; }; "projectCategoryOptions": { "alias": "projectCategoryOptions"; "required": false; "isSignal": true; }; "projectStatusOptions": { "alias": "projectStatusOptions"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "projectError": { "alias": "projectError"; "required": false; "isSignal": true; }; "saveLabel": { "alias": "saveLabel"; "required": true; "isSignal": true; }; "projectMinImageCount": { "alias": "projectMinImageCount"; "required": false; "isSignal": true; }; }, { "closeDialog": "closeDialog"; "saveProject": "saveProject"; "filesChange": "filesChange"; }, never, never, true, never>;
5772
6061
  }
5773
6062
 
6063
+ /** Confirmation dialog asking the user to confirm deleting an office project. */
5774
6064
  declare class SceOfficeProfileProjectDeleteDialogComponent {
5775
6065
  readonly visible: _angular_core.InputSignal<boolean>;
5776
6066
  readonly closeDialog: _angular_core.OutputEmitterRef<void>;
@@ -5779,7 +6069,9 @@ declare class SceOfficeProfileProjectDeleteDialogComponent {
5779
6069
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileProjectDeleteDialogComponent, "sce-office-profile-project-delete-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; }, { "closeDialog": "closeDialog"; "confirmDelete": "confirmDelete"; }, never, never, true, never>;
5780
6070
  }
5781
6071
 
6072
+ /** Identifies a tab of the office-profile view (office data, projects, services, contact). */
5782
6073
  type OfficeProfileTabKey = 'officeData' | 'projects' | 'services' | 'contact';
6074
+ /** Hero header of the office profile view — banner, logo, name, city, rating and verification badge — plus the profile's tab bar and an optional active/inactive status switch. */
5783
6075
  declare class SceOfficeProfileHeroComponent {
5784
6076
  readonly bannerUrl: _angular_core.InputSignal<string | null>;
5785
6077
  readonly logoUrl: _angular_core.InputSignal<string | null>;
@@ -5803,6 +6095,7 @@ declare class SceOfficeProfileHeroComponent {
5803
6095
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileHeroComponent, "sce-office-profile-hero", never, { "bannerUrl": { "alias": "bannerUrl"; "required": false; "isSignal": true; }; "logoUrl": { "alias": "logoUrl"; "required": false; "isSignal": true; }; "officeName": { "alias": "officeName"; "required": false; "isSignal": true; }; "cityName": { "alias": "cityName"; "required": false; "isSignal": true; }; "rating": { "alias": "rating"; "required": false; "isSignal": true; }; "ratingCount": { "alias": "ratingCount"; "required": false; "isSignal": true; }; "isAvailable": { "alias": "isAvailable"; "required": false; "isSignal": true; }; "verificationStatus": { "alias": "verificationStatus"; "required": false; "isSignal": true; }; "showOfficeStatusSwitch": { "alias": "showOfficeStatusSwitch"; "required": false; "isSignal": true; }; "officeIsActive": { "alias": "officeIsActive"; "required": false; "isSignal": true; }; "officeStatusSaving": { "alias": "officeStatusSaving"; "required": false; "isSignal": true; }; "updateDataChecking": { "alias": "updateDataChecking"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; "tabKeys": { "alias": "tabKeys"; "required": false; "isSignal": true; }; "tabLabels": { "alias": "tabLabels"; "required": false; "isSignal": true; }; }, { "updateDataClick": "updateDataClick"; "statusChange": "statusChange"; "tabChange": "tabChange"; }, never, never, true, never>;
5804
6096
  }
5805
6097
 
6098
+ /** Row of headline office statistics: years of experience, project count and service count. */
5806
6099
  declare class SceOfficeProfileStatsRowComponent {
5807
6100
  readonly yearsOfExperience: _angular_core.InputSignal<string>;
5808
6101
  readonly projectsCount: _angular_core.InputSignal<number>;
@@ -5811,6 +6104,7 @@ declare class SceOfficeProfileStatsRowComponent {
5811
6104
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileStatsRowComponent, "sce-office-profile-stats-row", never, { "yearsOfExperience": { "alias": "yearsOfExperience"; "required": false; "isSignal": true; }; "projectsCount": { "alias": "projectsCount"; "required": false; "isSignal": true; }; "servicesCount": { "alias": "servicesCount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5812
6105
  }
5813
6106
 
6107
+ /** Overview tab of the office profile view, showing the summary, services, license number, expiry and status, and office type as info-field cards. */
5814
6108
  declare class SceOfficeProfileOverviewTabComponent {
5815
6109
  readonly summary: _angular_core.InputSignal<string>;
5816
6110
  readonly servicesDisplay: _angular_core.InputSignal<string[]>;
@@ -5822,6 +6116,7 @@ declare class SceOfficeProfileOverviewTabComponent {
5822
6116
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileOverviewTabComponent, "sce-office-profile-overview-tab", never, { "summary": { "alias": "summary"; "required": false; "isSignal": true; }; "servicesDisplay": { "alias": "servicesDisplay"; "required": false; "isSignal": true; }; "licenseNumber": { "alias": "licenseNumber"; "required": false; "isSignal": true; }; "licenseExpiryFormatted": { "alias": "licenseExpiryFormatted"; "required": false; "isSignal": true; }; "licenseStatus": { "alias": "licenseStatus"; "required": false; "isSignal": true; }; "officeTypeDisplay": { "alias": "officeTypeDisplay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5823
6117
  }
5824
6118
 
6119
+ /** View-model of one project on the office-profile projects tab: id, copy, start/end dates, gallery `imageUrls`, completion flag and a display `typeLabel`. */
5825
6120
  interface OfficeProfileDisplayProject {
5826
6121
  id: number;
5827
6122
  title: string;
@@ -5832,6 +6127,7 @@ interface OfficeProfileDisplayProject {
5832
6127
  isCompleted: boolean;
5833
6128
  typeLabel: string;
5834
6129
  }
6130
+ /** Projects tab of the office profile view, rendering each project with its image gallery and showing skeletons while the project images load. */
5835
6131
  declare class SceOfficeProfileProjectsTabComponent {
5836
6132
  readonly displayProjects: _angular_core.InputSignal<OfficeProfileDisplayProject[]>;
5837
6133
  readonly projectImagesLoading: _angular_core.InputSignal<boolean>;
@@ -5840,6 +6136,7 @@ declare class SceOfficeProfileProjectsTabComponent {
5840
6136
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileProjectsTabComponent, "sce-office-profile-projects-tab", never, { "displayProjects": { "alias": "displayProjects"; "required": false; "isSignal": true; }; "projectImagesLoading": { "alias": "projectImagesLoading"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5841
6137
  }
5842
6138
 
6139
+ /** Contact tab of the office profile view, showing email, phone, city and address as info-field cards beside an embedded map and a link out to Google Maps. */
5843
6140
  declare class SceOfficeProfileContactTabComponent {
5844
6141
  readonly email: _angular_core.InputSignal<string>;
5845
6142
  readonly phone: _angular_core.InputSignal<string>;
@@ -5851,6 +6148,7 @@ declare class SceOfficeProfileContactTabComponent {
5851
6148
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileContactTabComponent, "sce-office-profile-contact-tab", never, { "email": { "alias": "email"; "required": false; "isSignal": true; }; "phone": { "alias": "phone"; "required": false; "isSignal": true; }; "cityName": { "alias": "cityName"; "required": false; "isSignal": true; }; "addressDisplay": { "alias": "addressDisplay"; "required": false; "isSignal": true; }; "safeMapEmbedSrc": { "alias": "safeMapEmbedSrc"; "required": false; "isSignal": true; }; "googleMapsLink": { "alias": "googleMapsLink"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5852
6149
  }
5853
6150
 
6151
+ /** Official-data tab of the office profile view, showing VAT number, commercial registration, bank/IBAN and national address as info-field cards, with preferred project sizes rendered as PrimeNG tag chips when `useTagChips` is set. */
5854
6152
  declare class SceOfficeProfileOfficialTabComponent {
5855
6153
  readonly vatNumber: _angular_core.InputSignal<string>;
5856
6154
  readonly commercialRegistrationNumber: _angular_core.InputSignal<string>;
@@ -5865,6 +6163,7 @@ declare class SceOfficeProfileOfficialTabComponent {
5865
6163
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeProfileOfficialTabComponent, "sce-office-profile-official-tab", never, { "vatNumber": { "alias": "vatNumber"; "required": false; "isSignal": true; }; "commercialRegistrationNumber": { "alias": "commercialRegistrationNumber"; "required": false; "isSignal": true; }; "cityName": { "alias": "cityName"; "required": false; "isSignal": true; }; "bankNameDisplay": { "alias": "bankNameDisplay"; "required": false; "isSignal": true; }; "shortNationalAddress": { "alias": "shortNationalAddress"; "required": false; "isSignal": true; }; "ibanNumber": { "alias": "ibanNumber"; "required": false; "isSignal": true; }; "preferredProjectSizesDisplay": { "alias": "preferredProjectSizesDisplay"; "required": false; "isSignal": true; }; "preferredProjectSizesLabel": { "alias": "preferredProjectSizesLabel"; "required": false; "isSignal": true; }; "useTagChips": { "alias": "useTagChips"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5866
6164
  }
5867
6165
 
6166
+ /** Collapsible `<details>` panel (open by default) showing the reviewer's rejection note, or an em dash when the note is empty. */
5868
6167
  declare class SceDataRequestRejectionPanelComponent {
5869
6168
  /** The rejection note text from the API. Empty string shows a dash. */
5870
6169
  readonly note: _angular_core.InputSignal<string>;
@@ -5872,6 +6171,7 @@ declare class SceDataRequestRejectionPanelComponent {
5872
6171
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDataRequestRejectionPanelComponent, "sce-data-request-rejection-panel", never, { "note": { "alias": "note"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5873
6172
  }
5874
6173
 
6174
+ /** Header card of a data-change request showing its number, status badge and office info grid, revealing the rejection panel only when `statusCode` is rejected. */
5875
6175
  declare class SceDataRequestHeaderCardComponent {
5876
6176
  /** Human-readable request number (e.g. "REQ-00123"). */
5877
6177
  readonly requestNumber: _angular_core.InputSignal<string>;
@@ -5899,12 +6199,14 @@ declare class SceDataRequestHeaderCardComponent {
5899
6199
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDataRequestHeaderCardComponent, "sce-data-request-header-card", never, { "requestNumber": { "alias": "requestNumber"; "required": true; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": true; "isSignal": true; }; "statusCode": { "alias": "statusCode"; "required": true; "isSignal": true; }; "submissionDate": { "alias": "submissionDate"; "required": true; "isSignal": true; }; "rejectionNote": { "alias": "rejectionNote"; "required": false; "isSignal": true; }; "licenseNumber": { "alias": "licenseNumber"; "required": true; "isSignal": true; }; "officeName": { "alias": "officeName"; "required": true; "isSignal": true; }; "representativeName": { "alias": "representativeName"; "required": true; "isSignal": true; }; "reviewRequired": { "alias": "reviewRequired"; "required": true; "isSignal": true; }; "requestStatusLabel": { "alias": "requestStatusLabel"; "required": true; "isSignal": true; }; "lastActionDate": { "alias": "lastActionDate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5900
6200
  }
5901
6201
 
6202
+ /** One field of a data-change request, pairing its `current` and `updated` display values with a `changed` flag that highlights the row. */
5902
6203
  interface DataRequestComparisonRow {
5903
6204
  label: string;
5904
6205
  current: string;
5905
6206
  updated: string;
5906
6207
  changed: boolean;
5907
6208
  }
6209
+ /** Titled table contrasting each field's current and updated value in a data-change request, flagging the rows that changed. */
5908
6210
  declare class SceDataRequestComparisonTableComponent {
5909
6211
  /** Section heading text. */
5910
6212
  readonly title: _angular_core.InputSignal<string>;
@@ -5914,7 +6216,9 @@ declare class SceDataRequestComparisonTableComponent {
5914
6216
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDataRequestComparisonTableComponent, "sce-data-request-comparison-table", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5915
6217
  }
5916
6218
 
6219
+ /** Which media the comparison frames hold, selecting their aspect ratio: `logo` is square, `cover` widescreen. */
5917
6220
  type DataRequestMediaVariant = 'logo' | 'cover';
6221
+ /** Side-by-side before/after image frames for a data-change request, sized square for `logo` and widescreen for `cover`, emitting a click per side. */
5918
6222
  declare class SceDataRequestMediaComparisonComponent {
5919
6223
  /** Block heading (e.g. "Logo" or "Cover"). */
5920
6224
  readonly title: _angular_core.InputSignal<string>;
@@ -5934,11 +6238,13 @@ declare class SceDataRequestMediaComparisonComponent {
5934
6238
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDataRequestMediaComparisonComponent, "sce-data-request-media-comparison", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "currentUrl": { "alias": "currentUrl"; "required": false; "isSignal": true; }; "newUrl": { "alias": "newUrl"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "currentImageClick": "currentImageClick"; "newImageClick": "newImageClick"; }, never, never, true, never>;
5935
6239
  }
5936
6240
 
6241
+ /** Payload emitted by `SceNewsletterSubscriptionDialogComponent.submitForm`: trimmed name, email and (optional) mobile. */
5937
6242
  interface NewsletterSubscriptionFormValues {
5938
6243
  clientName: string;
5939
6244
  email: string;
5940
6245
  mobile: string;
5941
6246
  }
6247
+ /** Newsletter subscription dialog collecting a name, email and optional Saudi mobile number with its own touch-based validation, resetting all fields whenever it is closed. */
5942
6248
  declare class SceNewsletterSubscriptionDialogComponent {
5943
6249
  private readonly translate;
5944
6250
  readonly visible: _angular_core.InputSignal<boolean>;
@@ -5970,6 +6276,7 @@ declare class SceNewsletterSubscriptionDialogComponent {
5970
6276
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceNewsletterSubscriptionDialogComponent, "sce-newsletter-subscription-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "isSubmitting": { "alias": "isSubmitting"; "required": false; "isSignal": true; }; "apiError": { "alias": "apiError"; "required": false; "isSignal": true; }; }, { "closeDialog": "closeDialog"; "submitForm": "submitForm"; }, never, never, true, never>;
5971
6277
  }
5972
6278
 
6279
+ /** Profile-photo panel with a hidden file input: emits `photoFileSelected` on pick (resetting the input so the same file can be re-chosen) and `viewClick` only when `hasRealPhoto` is true; uses `ViewEncapsulation.None`. */
5973
6280
  declare class SceProfilePhotoSectionComponent {
5974
6281
  /** Currently displayed photo URL. Null or undefined shows the default avatar. */
5975
6282
  readonly photoUrl: _angular_core.InputSignal<string | null>;
@@ -5995,6 +6302,7 @@ declare class SceProfilePhotoSectionComponent {
5995
6302
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceProfilePhotoSectionComponent, "sce-profile-photo-section", never, { "photoUrl": { "alias": "photoUrl"; "required": false; "isSignal": true; }; "photoLoading": { "alias": "photoLoading"; "required": false; "isSignal": true; }; "photoUploading": { "alias": "photoUploading"; "required": false; "isSignal": true; }; "photoError": { "alias": "photoError"; "required": false; "isSignal": true; }; "hasRealPhoto": { "alias": "hasRealPhoto"; "required": false; "isSignal": true; }; "acceptedTypes": { "alias": "acceptedTypes"; "required": false; "isSignal": true; }; }, { "viewClick": "viewClick"; "photoFileSelected": "photoFileSelected"; }, never, never, true, never>;
5996
6303
  }
5997
6304
 
6305
+ /** Fully resolved, display-ready personal-profile data; the caller is responsible for formatting the birth date and resolving the bank name. */
5998
6306
  interface ProfileInfoViewData {
5999
6307
  fullName: string;
6000
6308
  nationalId: string;
@@ -6009,11 +6317,13 @@ interface ProfileInfoViewData {
6009
6317
  bankNameDisplay: string;
6010
6318
  bankAccount: string;
6011
6319
  }
6320
+ /** One label/value row in a profile view section; `fullWidth` makes it span both grid columns. */
6012
6321
  interface ProfileViewField {
6013
6322
  labelKey: string;
6014
6323
  value: string;
6015
6324
  fullWidth?: boolean;
6016
6325
  }
6326
+ /** A titled group of read-only profile fields, optionally carrying its own Edit action. */
6017
6327
  interface ProfileViewSection {
6018
6328
  titleKey: string;
6019
6329
  showEditAction?: boolean;
@@ -6021,6 +6331,7 @@ interface ProfileViewSection {
6021
6331
  }
6022
6332
  /** Re-exported alias so callers don't need to import from core directly. */
6023
6333
  type ProfileBankOption = LookupDetailDto;
6334
+ /** Personal-profile panel that flips between a read-only field grid and an edit form (`editing`), showing skeletons while `profile` is null and an inline banner for `error`; uses `ViewEncapsulation.None`. */
6024
6335
  declare class SceProfileInfoSectionComponent {
6025
6336
  /** Resolved profile data for the read (view) mode. Null shows skeleton. */
6026
6337
  readonly profile: _angular_core.InputSignal<ProfileInfoViewData | null>;
@@ -6062,6 +6373,7 @@ declare class SceProfileInfoSectionComponent {
6062
6373
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceProfileInfoSectionComponent, "sce-profile-info-section", never, { "profile": { "alias": "profile"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "editing": { "alias": "editing"; "required": false; "isSignal": true; }; "saving": { "alias": "saving"; "required": false; "isSignal": true; }; "editEmail": { "alias": "editEmail"; "required": false; "isSignal": true; }; "editPhone": { "alias": "editPhone"; "required": false; "isSignal": true; }; "editAddress": { "alias": "editAddress"; "required": false; "isSignal": true; }; "editBankId": { "alias": "editBankId"; "required": false; "isSignal": true; }; "editBankAccount": { "alias": "editBankAccount"; "required": false; "isSignal": true; }; "emailError": { "alias": "emailError"; "required": false; "isSignal": true; }; "phoneError": { "alias": "phoneError"; "required": false; "isSignal": true; }; "addressError": { "alias": "addressError"; "required": false; "isSignal": true; }; "bankAccountError": { "alias": "bankAccountError"; "required": false; "isSignal": true; }; "banks": { "alias": "banks"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, { "editClick": "editClick"; "cancelClick": "cancelClick"; "saveClick": "saveClick"; "emailChange": "emailChange"; "phoneChange": "phoneChange"; "addressChange": "addressChange"; "bankIdChange": "bankIdChange"; "bankAccountChange": "bankAccountChange"; }, never, never, true, never>;
6063
6374
  }
6064
6375
 
6376
+ /** Info-field grid summarising the entity's current contact and registration data on a data-change request; each unset field falls back to an em dash. */
6065
6377
  declare class SceDataRequestCurrentSummaryComponent {
6066
6378
  readonly currentPhone: _angular_core.InputSignal<string>;
6067
6379
  readonly currentEmail: _angular_core.InputSignal<string>;
@@ -6072,7 +6384,9 @@ declare class SceDataRequestCurrentSummaryComponent {
6072
6384
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDataRequestCurrentSummaryComponent, "sce-data-request-current-summary", never, { "currentPhone": { "alias": "currentPhone"; "required": false; "isSignal": true; }; "currentEmail": { "alias": "currentEmail"; "required": false; "isSignal": true; }; "currentCity": { "alias": "currentCity"; "required": false; "isSignal": true; }; "unifiedNumber": { "alias": "unifiedNumber"; "required": false; "isSignal": true; }; "currentVatNumber": { "alias": "currentVatNumber"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6073
6385
  }
6074
6386
 
6387
+ /** How a portfolio project changed in the request, grouping it into the added, updated or removed section. */
6075
6388
  type ProjectChangeDisplayType = 'added' | 'updated' | 'removed';
6389
+ /** One numeric or textual attribute of a project, showing its `currentValue` beside its `nextValue` and whether the two differ. */
6076
6390
  interface ProjectChangeDisplayMetric {
6077
6391
  key: string;
6078
6392
  label: string;
@@ -6080,6 +6394,7 @@ interface ProjectChangeDisplayMetric {
6080
6394
  nextValue: string;
6081
6395
  changed: boolean;
6082
6396
  }
6397
+ /** A single project's proposed change, carrying its before/after description and metrics, its gallery `imageUrls`, and the pre-rendered badge and subtitle strings. */
6083
6398
  interface ProjectChangeDisplayItem {
6084
6399
  id: string;
6085
6400
  type: ProjectChangeDisplayType;
@@ -6095,6 +6410,7 @@ interface ProjectChangeDisplayItem {
6095
6410
  imageUrls: string[];
6096
6411
  compactSubtitle: string;
6097
6412
  }
6413
+ /** Lists the added, updated and removed portfolio projects in a data-change request, emitting the project and image index when a preview is clicked. */
6098
6414
  declare class SceDataRequestProjectChangesComponent {
6099
6415
  readonly projectChanges: _angular_core.InputSignal<ProjectChangeDisplayItem[]>;
6100
6416
  readonly isSystemUser: _angular_core.InputSignal<boolean>;
@@ -6106,6 +6422,7 @@ declare class SceDataRequestProjectChangesComponent {
6106
6422
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDataRequestProjectChangesComponent, "sce-data-request-project-changes", never, { "projectChanges": { "alias": "projectChanges"; "required": false; "isSignal": true; }; "isSystemUser": { "alias": "isSystemUser"; "required": false; "isSignal": true; }; }, { "imageClick": "imageClick"; }, never, never, true, never>;
6107
6423
  }
6108
6424
 
6425
+ /** One knowledge-center category tile, keyed by `slug`; `titleKey` and `descriptionKey` are i18n keys, not literal text. */
6109
6426
  interface KnowledgeCategoryItem {
6110
6427
  slug: string;
6111
6428
  titleKey: string;
@@ -6113,6 +6430,7 @@ interface KnowledgeCategoryItem {
6113
6430
  icon: string;
6114
6431
  background?: string;
6115
6432
  }
6433
+ /** Grid of knowledge-center categories that also owns its loading, error and empty states and emits category/retry/ticket actions. */
6116
6434
  declare class SceKnowledgeCenterCategoryGridComponent {
6117
6435
  readonly categories: _angular_core.InputSignal<KnowledgeCategoryItem[]>;
6118
6436
  readonly isLoadingCategories: _angular_core.InputSignal<boolean>;
@@ -6125,6 +6443,7 @@ declare class SceKnowledgeCenterCategoryGridComponent {
6125
6443
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceKnowledgeCenterCategoryGridComponent, "sce-knowledge-center-category-grid", never, { "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "isLoadingCategories": { "alias": "isLoadingCategories"; "required": false; "isSignal": true; }; "categoriesError": { "alias": "categoriesError"; "required": false; "isSignal": true; }; }, { "categoryClick": "categoryClick"; "retry": "retry"; "newTicket": "newTicket"; "viewTickets": "viewTickets"; }, never, never, true, never>;
6126
6444
  }
6127
6445
 
6446
+ /** Read-only contact details panel rendering working hours, response time, phone number, email link and Instagram/Twitter links. */
6128
6447
  declare class SceContactInfoPanelComponent {
6129
6448
  readonly workingHoursValue: _angular_core.InputSignal<string>;
6130
6449
  readonly responseValue: _angular_core.InputSignal<string>;
@@ -6137,6 +6456,7 @@ declare class SceContactInfoPanelComponent {
6137
6456
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceContactInfoPanelComponent, "sce-contact-info-panel", never, { "workingHoursValue": { "alias": "workingHoursValue"; "required": false; "isSignal": true; }; "responseValue": { "alias": "responseValue"; "required": false; "isSignal": true; }; "phoneValue": { "alias": "phoneValue"; "required": false; "isSignal": true; }; "emailHref": { "alias": "emailHref"; "required": false; "isSignal": true; }; "emailValue": { "alias": "emailValue"; "required": false; "isSignal": true; }; "socialInstagramHref": { "alias": "socialInstagramHref"; "required": false; "isSignal": true; }; "socialTwitterHref": { "alias": "socialTwitterHref"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6138
6457
  }
6139
6458
 
6459
+ /** Fully-controlled contact form panel with name, email, message-type and message fields plus a hidden `website` honeypot; it holds no state of its own — every value, error and loading flag is an input and every change is an output. */
6140
6460
  declare class SceContactFormPanelComponent {
6141
6461
  readonly dir: _angular_core.InputSignal<"rtl" | "ltr">;
6142
6462
  readonly fullName: _angular_core.InputSignal<string>;
@@ -6172,6 +6492,7 @@ declare class SceContactFormPanelComponent {
6172
6492
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceContactFormPanelComponent, "sce-contact-form-panel", never, { "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "fullName": { "alias": "fullName"; "required": true; "isSignal": true; }; "email": { "alias": "email"; "required": true; "isSignal": true; }; "messageType": { "alias": "messageType"; "required": true; "isSignal": true; }; "message": { "alias": "message"; "required": true; "isSignal": true; }; "website": { "alias": "website"; "required": false; "isSignal": true; }; "submitSuccess": { "alias": "submitSuccess"; "required": false; "isSignal": true; }; "submitError": { "alias": "submitError"; "required": false; "isSignal": true; }; "isSubmitting": { "alias": "isSubmitting"; "required": false; "isSignal": true; }; "isSubmitDisabled": { "alias": "isSubmitDisabled"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": true; "isSignal": true; }; "messageTypesLoading": { "alias": "messageTypesLoading"; "required": false; "isSignal": true; }; "messageTypeUnavailable": { "alias": "messageTypeUnavailable"; "required": false; "isSignal": true; }; "messageTypeOptions": { "alias": "messageTypeOptions"; "required": false; "isSignal": true; }; "messageTypePlaceholder": { "alias": "messageTypePlaceholder"; "required": false; "isSignal": true; }; "fullNameError": { "alias": "fullNameError"; "required": false; "isSignal": true; }; "emailError": { "alias": "emailError"; "required": false; "isSignal": true; }; "messageTypeError": { "alias": "messageTypeError"; "required": false; "isSignal": true; }; "messageError": { "alias": "messageError"; "required": false; "isSignal": true; }; "emailPattern": { "alias": "emailPattern"; "required": false; "isSignal": true; }; "fullNameValidationMessages": { "alias": "fullNameValidationMessages"; "required": false; "isSignal": true; }; "emailValidationMessages": { "alias": "emailValidationMessages"; "required": false; "isSignal": true; }; "messageTypeValidationMessages": { "alias": "messageTypeValidationMessages"; "required": false; "isSignal": true; }; "messageValidationMessages": { "alias": "messageValidationMessages"; "required": false; "isSignal": true; }; }, { "fullNameChange": "fullNameChange"; "emailChange": "emailChange"; "messageTypeChange": "messageTypeChange"; "messageChange": "messageChange"; "websiteChange": "websiteChange"; "formSubmit": "formSubmit"; }, never, never, true, never>;
6173
6493
  }
6174
6494
 
6495
+ /** Day counts for the force-majeure setting: notification periods per contract kind, plus the grantable extension periods. */
6175
6496
  interface PsSettingForceMajeureDurationsValue {
6176
6497
  notificationDays: {
6177
6498
  general: number;
@@ -6183,6 +6504,7 @@ interface PsSettingForceMajeureDurationsValue {
6183
6504
  consultancy: number;
6184
6505
  };
6185
6506
  }
6507
+ /** Discriminated union of one platform setting, keyed on `type`, which selects both the `value` shape and the control rendered for it. */
6186
6508
  type PsSettingField = {
6187
6509
  apiKey: string;
6188
6510
  label: string;
@@ -6202,6 +6524,7 @@ type PsSettingField = {
6202
6524
  type: 'forceMajeureDurations';
6203
6525
  value: PsSettingForceMajeureDurationsValue;
6204
6526
  };
6527
+ /** Renders the platform settings list as read-only info cards or editable controls, emitting a typed update per field kind (boolean, integer, force-majeure durations). */
6205
6528
  declare class ScePlatformSettingsFieldsComponent {
6206
6529
  readonly viewFields: _angular_core.InputSignal<PsSettingField[]>;
6207
6530
  readonly isEditMode: _angular_core.InputSignal<boolean>;
@@ -6230,6 +6553,7 @@ declare class ScePlatformSettingsFieldsComponent {
6230
6553
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePlatformSettingsFieldsComponent, "sce-platform-settings-fields", never, { "viewFields": { "alias": "viewFields"; "required": true; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": false; "isSignal": true; }; "saving": { "alias": "saving"; "required": false; "isSignal": true; }; }, { "booleanUpdate": "booleanUpdate"; "integerUpdate": "integerUpdate"; "forceMajeureNotificationUpdate": "forceMajeureNotificationUpdate"; "forceMajeureExtensionUpdate": "forceMajeureExtensionUpdate"; "editCancel": "editCancel"; "editSave": "editSave"; }, never, never, true, never>;
6231
6554
  }
6232
6555
 
6556
+ /** Presentational entity-profile edit form bound to a caller-owned `FormGroup`; it holds no form state of its own and re-emits each field's raw input `Event` for the host to handle. */
6233
6557
  declare class SceEntityProfileEditFormComponent {
6234
6558
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
6235
6559
  readonly dir: _angular_core.InputSignal<"rtl" | "ltr">;
@@ -6252,7 +6576,9 @@ declare class SceEntityProfileEditFormComponent {
6252
6576
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceEntityProfileEditFormComponent, "sce-entity-profile-edit-form", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "entityName": { "alias": "entityName"; "required": false; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; "unifiedNumber": { "alias": "unifiedNumber"; "required": false; "isSignal": true; }; "bankOptions": { "alias": "bankOptions"; "required": false; "isSignal": true; }; "selectedBankId": { "alias": "selectedBankId"; "required": false; "isSignal": true; }; "bankError": { "alias": "bankError"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, { "phoneInput": "phoneInput"; "licenseInput": "licenseInput"; "taxInput": "taxInput"; "addressInput": "addressInput"; "ibanInput": "ibanInput"; "bankChange": "bankChange"; "formSubmit": "formSubmit"; }, never, never, true, never>;
6253
6577
  }
6254
6578
 
6579
+ /** Which tab of the account-users page is active. */
6255
6580
  type AccountUsersTab = 'account-users' | 'engineering-staff';
6581
+ /** Title bar with account-users / engineering-staff tabs and an optional Add button (`showAddButton`, off by default); it emits clicks and never switches `activeTab` itself. */
6256
6582
  declare class SceAccountUsersTabsBarComponent {
6257
6583
  readonly title: _angular_core.InputSignal<string>;
6258
6584
  readonly activeTab: _angular_core.InputSignal<AccountUsersTab>;
@@ -6264,6 +6590,7 @@ declare class SceAccountUsersTabsBarComponent {
6264
6590
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccountUsersTabsBarComponent, "sce-account-users-tabs-bar", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": true; "isSignal": true; }; "showAddButton": { "alias": "showAddButton"; "required": false; "isSignal": true; }; }, { "accountUsersTabClick": "accountUsersTabClick"; "staffTabClick": "staffTabClick"; "addUserClick": "addUserClick"; }, never, never, true, never>;
6265
6591
  }
6266
6592
 
6593
+ /** Dialog that collects a national ID and birth date (Hijri or Gregorian via `calendarSystem`) to verify a user before assigning them; fully controlled, emitting `submitVerify` rather than calling any API. */
6267
6594
  declare class SceAccountUserVerifyDialogComponent {
6268
6595
  readonly visible: _angular_core.InputSignal<boolean>;
6269
6596
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -6282,6 +6609,7 @@ declare class SceAccountUserVerifyDialogComponent {
6282
6609
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccountUserVerifyDialogComponent, "sce-account-user-verify-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "nationalId": { "alias": "nationalId"; "required": true; "isSignal": true; }; "nationalIdError": { "alias": "nationalIdError"; "required": false; "isSignal": true; }; "birthDate": { "alias": "birthDate"; "required": true; "isSignal": true; }; "birthDateError": { "alias": "birthDateError"; "required": false; "isSignal": true; }; "calendarSystem": { "alias": "calendarSystem"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; "actionError": { "alias": "actionError"; "required": false; "isSignal": true; }; }, { "dialogClose": "dialogClose"; "nationalIdChange": "nationalIdChange"; "birthDateChange": "birthDateChange"; "submitVerify": "submitVerify"; }, never, never, true, never>;
6283
6610
  }
6284
6611
 
6612
+ /** Draft values bound by the assign-user dialog; identity fields arrive pre-filled from the national-ID lookup and only email, mobile, roles, and active state are editable. */
6285
6613
  interface AccountUserAssignForm {
6286
6614
  nationalId: string;
6287
6615
  userName: string;
@@ -6291,10 +6619,12 @@ interface AccountUserAssignForm {
6291
6619
  roleIds: number[];
6292
6620
  isActive: boolean;
6293
6621
  }
6622
+ /** A role choice in the assign-user dialog's multi-select, keyed by numeric role id. */
6294
6623
  interface AssignRoleOption {
6295
6624
  label: string;
6296
6625
  value: number;
6297
6626
  }
6627
+ /** Dialog for assigning an account user roles and contact details; fully controlled — it mutates nothing, emitting every field change and `submitAssign` to the host — and uses `ViewEncapsulation.None`. */
6298
6628
  declare class SceAccountUserAssignDialogComponent {
6299
6629
  readonly visible: _angular_core.InputSignal<boolean>;
6300
6630
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -6319,15 +6649,18 @@ declare class SceAccountUserAssignDialogComponent {
6319
6649
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccountUserAssignDialogComponent, "sce-account-user-assign-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "assignForm": { "alias": "assignForm"; "required": true; "isSignal": true; }; "requireEmail": { "alias": "requireEmail"; "required": false; "isSignal": true; }; "requireMobile": { "alias": "requireMobile"; "required": false; "isSignal": true; }; "emailError": { "alias": "emailError"; "required": false; "isSignal": true; }; "mobileError": { "alias": "mobileError"; "required": false; "isSignal": true; }; "rolesLoading": { "alias": "rolesLoading"; "required": false; "isSignal": true; }; "roleOptions": { "alias": "roleOptions"; "required": false; "isSignal": true; }; "rolesError": { "alias": "rolesError"; "required": false; "isSignal": true; }; "actionError": { "alias": "actionError"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; }, { "dialogClose": "dialogClose"; "emailChange": "emailChange"; "mobileChange": "mobileChange"; "roleIdsChange": "roleIdsChange"; "isActiveChange": "isActiveChange"; "submitAssign": "submitAssign"; }, never, never, true, never>;
6320
6650
  }
6321
6651
 
6652
+ /** A non-editable identity field displayed in the edit-user dialog; `fullWidth` spans both grid columns. */
6322
6653
  interface AccountUserEditReadOnlyField {
6323
6654
  label: string;
6324
6655
  value: string | null | undefined;
6325
6656
  fullWidth?: boolean;
6326
6657
  }
6658
+ /** A role choice in the edit-user dialog's multi-select; unlike the assign dialog its `value` is a string id. */
6327
6659
  interface AccountUserEditRoleOption {
6328
6660
  label: string;
6329
6661
  value: string;
6330
6662
  }
6663
+ /** Dialog for editing an existing account user's roles and active state over a read-only identity summary; fully controlled and uses `ViewEncapsulation.None`. */
6331
6664
  declare class SceAccountUserEditDialogComponent {
6332
6665
  readonly visible: _angular_core.InputSignal<boolean>;
6333
6666
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -6350,14 +6683,17 @@ declare class SceAccountUserEditDialogComponent {
6350
6683
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccountUserEditDialogComponent, "sce-account-user-edit-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": true; "isSignal": true; }; "readOnlyFields": { "alias": "readOnlyFields"; "required": false; "isSignal": true; }; "roleOptions": { "alias": "roleOptions"; "required": false; "isSignal": true; }; "draftRoleIds": { "alias": "draftRoleIds"; "required": false; "isSignal": true; }; "rolesLoading": { "alias": "rolesLoading"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "permissionsError": { "alias": "permissionsError"; "required": false; "isSignal": true; }; "dialogError": { "alias": "dialogError"; "required": false; "isSignal": true; }; "submitting": { "alias": "submitting"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": true; "isSignal": true; }; }, { "closed": "closed"; "submitted": "submitted"; "draftRoleIdsChange": "draftRoleIdsChange"; "isActiveChange": "isActiveChange"; }, never, never, true, never>;
6351
6684
  }
6352
6685
 
6686
+ /** A status pill in the account-user detail header, coloured by its business-status `tone`. */
6353
6687
  interface UserDetailStatusTag {
6354
6688
  label: string;
6355
6689
  tone?: BusinessStatusTone;
6356
6690
  }
6691
+ /** A label/value chip (membership number, national ID) shown beside the user's name. */
6357
6692
  interface UserDetailBadge {
6358
6693
  label: string;
6359
6694
  value: string;
6360
6695
  }
6696
+ /** Header of an account-user detail page: name, status tags, membership/national-ID badges, and an Edit button; all labels are passed in already translated. */
6361
6697
  declare class SceAccountUserDetailHeaderComponent {
6362
6698
  readonly title: _angular_core.InputSignal<string>;
6363
6699
  readonly statusTags: _angular_core.InputSignal<UserDetailStatusTag[]>;
@@ -6369,11 +6705,13 @@ declare class SceAccountUserDetailHeaderComponent {
6369
6705
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccountUserDetailHeaderComponent, "sce-account-user-detail-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "statusTags": { "alias": "statusTags"; "required": false; "isSignal": true; }; "membershipBadge": { "alias": "membershipBadge"; "required": false; "isSignal": true; }; "nationalIdBadge": { "alias": "nationalIdBadge"; "required": false; "isSignal": true; }; "editButtonLabel": { "alias": "editButtonLabel"; "required": true; "isSignal": true; }; }, { "editClick": "editClick"; }, never, never, true, never>;
6370
6706
  }
6371
6707
 
6708
+ /** One read-only label/value row of a user's personal details; `fullWidth` spans both grid columns. */
6372
6709
  interface UserDetailField {
6373
6710
  label: string;
6374
6711
  value: string | null | undefined;
6375
6712
  fullWidth?: boolean;
6376
6713
  }
6714
+ /** Titled grid of read-only personal-detail `fields` for an account user; labels and values arrive already translated and formatted. */
6377
6715
  declare class SceAccountUserPersonalSectionComponent {
6378
6716
  readonly title: _angular_core.InputSignal<string>;
6379
6717
  readonly fields: _angular_core.InputSignal<UserDetailField[]>;
@@ -6381,6 +6719,7 @@ declare class SceAccountUserPersonalSectionComponent {
6381
6719
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccountUserPersonalSectionComponent, "sce-account-user-personal-section", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "fields": { "alias": "fields"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
6382
6720
  }
6383
6721
 
6722
+ /** Read-only permissions panel listing an account user's roles as `pills`, falling back to `noPermissionsLabel` when empty and to skeletons while `loading`. */
6384
6723
  declare class SceAccountUserPermissionsSectionComponent {
6385
6724
  readonly sectionTitle: _angular_core.InputSignal<string>;
6386
6725
  readonly permissionsLabel: _angular_core.InputSignal<string>;
@@ -6391,6 +6730,7 @@ declare class SceAccountUserPermissionsSectionComponent {
6391
6730
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceAccountUserPermissionsSectionComponent, "sce-account-user-permissions-section", never, { "sectionTitle": { "alias": "sectionTitle"; "required": true; "isSignal": true; }; "permissionsLabel": { "alias": "permissionsLabel"; "required": true; "isSignal": true; }; "noPermissionsLabel": { "alias": "noPermissionsLabel"; "required": true; "isSignal": true; }; "pills": { "alias": "pills"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6392
6731
  }
6393
6732
 
6733
+ /** Inline (non-dialog) national-ID and birth-date step for verifying an internal user before creation; `calendarSystem` selects Hijri or Gregorian input and `verify` is emitted for the host to call the API. */
6394
6734
  declare class SceInternalUserVerifySectionComponent {
6395
6735
  readonly nationalId: _angular_core.InputSignal<string>;
6396
6736
  readonly birthDate: _angular_core.InputSignal<string>;
@@ -6406,7 +6746,9 @@ declare class SceInternalUserVerifySectionComponent {
6406
6746
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceInternalUserVerifySectionComponent, "sce-internal-user-verify-section", never, { "nationalId": { "alias": "nationalId"; "required": true; "isSignal": true; }; "birthDate": { "alias": "birthDate"; "required": true; "isSignal": true; }; "nationalIdError": { "alias": "nationalIdError"; "required": false; "isSignal": true; }; "birthDateError": { "alias": "birthDateError"; "required": false; "isSignal": true; }; "calendarSystem": { "alias": "calendarSystem"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "verifying": { "alias": "verifying"; "required": false; "isSignal": true; }; }, { "nationalIdChange": "nationalIdChange"; "birthDateChange": "birthDateChange"; "verify": "verify"; }, never, never, true, never>;
6407
6747
  }
6408
6748
 
6749
+ /** Whether the internal-user fields are editing an existing user or showing the post-verification create step. */
6409
6750
  type InternalUserFormFieldsMode = 'edit' | 'create-verified';
6751
+ /** Contact-detail fields for an internal user: national ID, birth date, and name are read-only, and only email and mobile are editable (emitted back to the host). */
6410
6752
  declare class SceInternalUserFormFieldsComponent {
6411
6753
  readonly mode: _angular_core.InputSignal<InternalUserFormFieldsMode>;
6412
6754
  readonly nationalId: _angular_core.InputSignal<string>;
@@ -6422,10 +6764,12 @@ declare class SceInternalUserFormFieldsComponent {
6422
6764
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceInternalUserFormFieldsComponent, "sce-internal-user-form-fields", never, { "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "nationalId": { "alias": "nationalId"; "required": false; "isSignal": true; }; "birthDate": { "alias": "birthDate"; "required": false; "isSignal": true; }; "userName": { "alias": "userName"; "required": false; "isSignal": true; }; "email": { "alias": "email"; "required": false; "isSignal": true; }; "mobile": { "alias": "mobile"; "required": false; "isSignal": true; }; "emailError": { "alias": "emailError"; "required": false; "isSignal": true; }; "mobileError": { "alias": "mobileError"; "required": false; "isSignal": true; }; }, { "emailChange": "emailChange"; "mobileChange": "mobileChange"; }, never, never, true, never>;
6423
6765
  }
6424
6766
 
6767
+ /** A role choice in the internal-user permissions multi-select, keyed by numeric role id. */
6425
6768
  interface InternalUserRoleOption {
6426
6769
  label: string;
6427
6770
  value: number;
6428
6771
  }
6772
+ /** Editable permissions panel for an internal user: a roles multi-select (skeletons while `rolesLoading`) plus an active/inactive switch that defaults to on. */
6429
6773
  declare class SceInternalUserPermissionsSectionComponent {
6430
6774
  readonly roleOptions: _angular_core.InputSignal<InternalUserRoleOption[]>;
6431
6775
  readonly selectedRoleNumbers: _angular_core.InputSignal<number[]>;
@@ -6437,7 +6781,9 @@ declare class SceInternalUserPermissionsSectionComponent {
6437
6781
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceInternalUserPermissionsSectionComponent, "sce-internal-user-permissions-section", never, { "roleOptions": { "alias": "roleOptions"; "required": false; "isSignal": true; }; "selectedRoleNumbers": { "alias": "selectedRoleNumbers"; "required": false; "isSignal": true; }; "rolesLoading": { "alias": "rolesLoading"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; }, { "selectedRoleNumbersChange": "selectedRoleNumbersChange"; "isActiveChange": "isActiveChange"; }, never, never, true, never>;
6438
6782
  }
6439
6783
 
6784
+ /** Which presentation the offices browser is showing: card grid, list, or map. */
6440
6785
  type OfficeViewMode = 'grid' | 'list' | 'map';
6786
+ /** Segmented grid/list/map switch for the offices browser; fully controlled — it reports `viewModeChange` rather than holding the mode itself. */
6441
6787
  declare class SceOfficesViewToggleComponent {
6442
6788
  readonly viewMode: _angular_core.InputSignal<OfficeViewMode>;
6443
6789
  readonly viewModeChange: _angular_core.OutputEmitterRef<OfficeViewMode>;
@@ -6445,7 +6791,9 @@ declare class SceOfficesViewToggleComponent {
6445
6791
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficesViewToggleComponent, "sce-offices-view-toggle", never, { "viewMode": { "alias": "viewMode"; "required": true; "isSignal": true; }; }, { "viewModeChange": "viewModeChange"; }, never, never, true, never>;
6446
6792
  }
6447
6793
 
6794
+ /** Layout the offices grid panel renders its cards in. */
6448
6795
  type OfficeGridViewMode = 'grid' | 'list';
6796
+ /** Paginated grid/list of engineering-office cards with skeleton and empty states; `viewMode` switches the layout and `skeletonCount` is floored at 4. */
6449
6797
  declare class SceOfficesGridPanelComponent {
6450
6798
  readonly cards: _angular_core.InputSignal<SceEngineeringOfficeCardModel[]>;
6451
6799
  readonly isLoading: _angular_core.InputSignal<boolean>;
@@ -6472,6 +6820,7 @@ declare class SceOfficesGridPanelComponent {
6472
6820
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficesGridPanelComponent, "sce-offices-grid-panel", never, { "cards": { "alias": "cards"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "isEmpty": { "alias": "isEmpty"; "required": true; "isSignal": true; }; "viewMode": { "alias": "viewMode"; "required": false; "isSignal": true; }; "skeletonCount": { "alias": "skeletonCount"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": true; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": true; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "bookmarkedIds": { "alias": "bookmarkedIds"; "required": false; "isSignal": true; }; "bookmarkLabel": { "alias": "bookmarkLabel"; "required": false; "isSignal": true; }; "ratingLabel": { "alias": "ratingLabel"; "required": false; "isSignal": true; }; "locationLabel": { "alias": "locationLabel"; "required": false; "isSignal": true; }; "otherLabel": { "alias": "otherLabel"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; "bookmarkClick": "bookmarkClick"; }, never, never, true, never>;
6473
6821
  }
6474
6822
 
6823
+ /** Wraps the OSM offices map with a fallback link shown when `mapLoadFailed`; emits `selectOffice` when a marker is picked. */
6475
6824
  declare class SceOfficesMapPanelComponent {
6476
6825
  readonly mapPoints: _angular_core.InputSignal<SceOsmOfficeMapPoint[]>;
6477
6826
  readonly mapLoadFailed: _angular_core.InputSignal<boolean>;
@@ -6484,16 +6833,21 @@ declare class SceOfficesMapPanelComponent {
6484
6833
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficesMapPanelComponent, "sce-offices-map-panel", never, { "mapPoints": { "alias": "mapPoints"; "required": true; "isSignal": true; }; "mapLoadFailed": { "alias": "mapLoadFailed"; "required": true; "isSignal": true; }; "fallbackMapUrl": { "alias": "fallbackMapUrl"; "required": false; "isSignal": true; }; "hasFallbackOffice": { "alias": "hasFallbackOffice"; "required": false; "isSignal": true; }; }, { "selectOffice": "selectOffice"; "ready": "ready"; "mapError": "mapError"; }, never, never, true, never>;
6485
6834
  }
6486
6835
 
6836
+ /** Ordering applied to the offices browser results. */
6487
6837
  type OfficeSortMode = 'rating' | 'experience' | 'clients';
6838
+ /** Office-size bucket used to narrow the offices browser results. */
6488
6839
  type OfficeSizeFilter = 'all' | 'small' | 'medium' | 'large';
6840
+ /** A selectable sort choice in the offices filters sidebar, labelled by i18n key. */
6489
6841
  interface OfficeSortOption {
6490
6842
  readonly value: OfficeSortMode;
6491
6843
  readonly labelKey: string;
6492
6844
  }
6845
+ /** A selectable office-size choice in the offices filters sidebar, labelled by i18n key. */
6493
6846
  interface OfficeSizeOption {
6494
6847
  readonly value: OfficeSizeFilter;
6495
6848
  readonly labelKey: string;
6496
6849
  }
6850
+ /** Fully controlled sort/size/budget/experience filter sidebar for the offices browser: it owns no state, taking every draft value, slider bound, and budget-histogram bar as a required input and emitting changes back — including the pre-flipped `*SliderLtr` values PrimeNG's slider needs under RTL. */
6497
6851
  declare class SceOfficesFiltersSidebarComponent {
6498
6852
  /** Current draft sort/filter values */
6499
6853
  readonly draftSort: _angular_core.InputSignal<OfficeSortMode>;
@@ -6650,6 +7004,7 @@ declare class SceRadioOptionCard {
6650
7004
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceRadioOptionCard, "sce-radio-option-card", never, { "iconName": { "alias": "iconName"; "required": true; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
6651
7005
  }
6652
7006
 
7007
+ /** Value of `SceRangeBar`: a single number, or a `[start, end]` pair which switches it into two-handle range mode. */
6653
7008
  type SceRangeBarValue = number | [number, number];
6654
7009
  /** Single-value or two-handle range slider wired as a `ControlValueAccessor`. */
6655
7010
  declare class SceRangeBar implements ControlValueAccessor {
@@ -6682,6 +7037,7 @@ declare class SceRangeBar implements ControlValueAccessor {
6682
7037
 
6683
7038
  /** Rendering mode of the option list. */
6684
7039
  type SceFormCheckboxRadioType = 'radio' | 'checkbox' | 'checkbox-search';
7040
+ /** A selectable option with an already-translated `label`, a `value`, and an optional result `count` shown beside it. */
6685
7041
  interface SceFieldOption {
6686
7042
  label: string;
6687
7043
  value: string;
@@ -6879,6 +7235,7 @@ declare class SceNavCard {
6879
7235
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceNavCard, "sce-nav-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": true; "isSignal": true; }; "thumbnailSrc": { "alias": "thumbnailSrc"; "required": false; "isSignal": true; }; "route": { "alias": "route"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "showPlayIcon": { "alias": "showPlayIcon"; "required": false; "isSignal": true; }; }, { "cardClick": "cardClick"; }, never, never, true, never>;
6880
7236
  }
6881
7237
 
7238
+ /** One selectable chip in `SceOptionGroup`: a `value`, an optional already-translated `label`, and an optional `disabled` flag. */
6882
7239
  interface SceOptionItem {
6883
7240
  value: string;
6884
7241
  label?: string;
@@ -6974,6 +7331,7 @@ declare class SceTabPanel {
6974
7331
 
6975
7332
  /** Layout mode: `field` renders a label/value row inside a parent panel; `card` renders a standalone padded tile. */
6976
7333
  type BasicCardLayout = 'card' | 'field';
7334
+ /** Label-and-value display rendered either as a standalone padded tile or, in `field` layout, as a plain row inside a parent panel. */
6977
7335
  declare class SceBasicCardComponent {
6978
7336
  readonly label: _angular_core.InputSignal<string>;
6979
7337
  readonly value: _angular_core.InputSignal<string>;
@@ -6983,6 +7341,7 @@ declare class SceBasicCardComponent {
6983
7341
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceBasicCardComponent, "sce-basic-card", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6984
7342
  }
6985
7343
 
7344
+ /** One tile in `SceNavCardsListComponent`: a slug fed to the parent's route factory plus i18n title/description keys and a thumbnail. */
6986
7345
  interface SceNavCardItem {
6987
7346
  /** Stable identifier; also fed to the parent's route factory. */
6988
7347
  readonly slug: string;
@@ -6991,6 +7350,7 @@ interface SceNavCardItem {
6991
7350
  readonly thumbnailSrc: string;
6992
7351
  }
6993
7352
 
7353
+ /** Renders a grid of `sce-nav-card` tiles from `items`; stays route-agnostic by taking a required `getItemRoute` factory that turns an item slug into a router link. */
6994
7354
  declare class SceNavCardsListComponent {
6995
7355
  readonly items: _angular_core.InputSignal<readonly SceNavCardItem[]>;
6996
7356
  /** Maps an item slug to a router link. Kept as an input so the organism stays route-agnostic. */
@@ -7032,6 +7392,7 @@ declare class SceCardsStatisticsComponent {
7032
7392
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceCardsStatisticsComponent, "sce-cards-statistics", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "totalNumber": { "alias": "totalNumber"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "tintedIconBackground": { "alias": "tintedIconBackground"; "required": false; "isSignal": true; }; "trendPercentage": { "alias": "trendPercentage"; "required": false; "isSignal": true; }; "trendLabel": { "alias": "trendLabel"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7033
7393
  }
7034
7394
 
7395
+ /** Tone of the status chip on an evaluation criterion. */
7035
7396
  type SceCriteriaStatus = 'success' | 'warning' | 'info' | 'danger';
7036
7397
  /** Reviewer's write-up for one criterion: an optional reason, free-text notes, and evidence. */
7037
7398
  interface SceCriteriaObservation {
@@ -7039,6 +7400,7 @@ interface SceCriteriaObservation {
7039
7400
  readonly notes?: string;
7040
7401
  readonly attachments?: readonly SceAttachmentListItem[];
7041
7402
  }
7403
+ /** One evaluation criterion: its title, status chip `tag`/`status`, optional free-form `score` and description, and the reviewer's `observation`. */
7042
7404
  interface SceCriteriaItem {
7043
7405
  readonly id: string | number;
7044
7406
  readonly title: string;
@@ -7050,6 +7412,7 @@ interface SceCriteriaItem {
7050
7412
  readonly description?: string;
7051
7413
  readonly observation?: SceCriteriaObservation;
7052
7414
  }
7415
+ /** Payload of a criteria section: an optional heading plus the list of `criteria` to render. */
7053
7416
  interface SceCriteriaSectionData {
7054
7417
  /** i18n key or literal for the section heading. */
7055
7418
  readonly title?: string;
@@ -7095,6 +7458,7 @@ interface SceEntitySummarySector {
7095
7458
  readonly disabled?: boolean;
7096
7459
  }
7097
7460
 
7461
+ /** Card summarising an entity by logo, name and description, listing its sectors as clickable chips (disabled ones emit nothing) with info and optional settings actions. */
7098
7462
  declare class SceEntitySummaryCardComponent {
7099
7463
  readonly logo: _angular_core.InputSignal<string>;
7100
7464
  readonly name: _angular_core.InputSignal<string>;
@@ -7139,6 +7503,7 @@ declare class SceExportPdfContainerComponent {
7139
7503
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceExportPdfContainerComponent, "sce-export-pdf-container", never, { "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "pageNumbers": { "alias": "pageNumbers"; "required": false; "isSignal": true; }; }, { "exportStarted": "exportStarted"; "exportComplete": "exportComplete"; "exportError": "exportError"; }, never, ["*"], true, never>;
7140
7504
  }
7141
7505
 
7506
+ /** Reason a picked file was rejected by `SceImagePickerComponent`: wrong MIME type or over `maxSizeMb`. */
7142
7507
  type SceImagePickerError = 'type' | 'size';
7143
7508
  /** Avatar-style image picker with drag-and-drop, preview, and reactive-forms integration. */
7144
7509
  declare class SceImagePickerComponent implements ControlValueAccessor, Validator {
@@ -7186,11 +7551,13 @@ declare class SceImagePickerComponent implements ControlValueAccessor, Validator
7186
7551
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceImagePickerComponent, "sce-image-picker", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "maxSizeMb": { "alias": "maxSizeMb"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "fileSelected": "fileSelected"; "cleared": "cleared"; "validationError": "validationError"; }, never, never, true, never>;
7187
7552
  }
7188
7553
 
7554
+ /** Status chip shown on an inquiry-request card: a label (i18n key or literal) plus the `SceTagVariant` to colour it. */
7189
7555
  interface SceInquiryRequestStatus {
7190
7556
  /** i18n key or literal shown inside the tag. */
7191
7557
  readonly label: string;
7192
7558
  readonly variant: SceTagVariant;
7193
7559
  }
7560
+ /** One inquiry request rendered by the inquiry-request card: code, sender, date, deadline, status, and an optional per-row `loading` flag. */
7194
7561
  interface SceInquiryRequest {
7195
7562
  readonly id: string;
7196
7563
  readonly code: string;
@@ -7220,13 +7587,16 @@ declare class SceInquiryRequestCardComponent {
7220
7587
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceInquiryRequestCardComponent, "sce-inquiry-request-card", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "inquiries": { "alias": "inquiries"; "required": true; "isSignal": true; }; }, { "inquirySelect": "inquirySelect"; }, never, never, true, never>;
7221
7588
  }
7222
7589
 
7590
+ /** Severity of a notification, which drives its colour and (unless `icon` is set) its icon. */
7223
7591
  type SceNotificationTone = 'info' | 'warning' | 'success' | 'danger';
7592
+ /** A button rendered inside a notification; the `id` is echoed back to the host when clicked. */
7224
7593
  interface SceNotificationAction {
7225
7594
  /** i18n key or literal shown on the action button. */
7226
7595
  readonly label: string;
7227
7596
  readonly id: string;
7228
7597
  readonly variant?: 'primary' | 'secondary';
7229
7598
  }
7599
+ /** One notification row: title, description, `tone`, read flag, `Date`, and optional category chip, icon override, and actions. */
7230
7600
  interface SceNotificationItem {
7231
7601
  readonly id: string;
7232
7602
  readonly title: string;
@@ -7241,6 +7611,7 @@ interface SceNotificationItem {
7241
7611
  readonly icon?: string;
7242
7612
  readonly actions?: readonly SceNotificationAction[];
7243
7613
  }
7614
+ /** Which notifications the list shows: everything, or only unread ones. */
7244
7615
  type SceNotificationFilter = 'all' | 'unread';
7245
7616
 
7246
7617
  /** Slide-in notification drawer with all/unread filtering and per-item actions. */
@@ -7275,6 +7646,7 @@ declare class SceNotificationListComponent {
7275
7646
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceNotificationListComponent, "sce-notification-list", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "notifications": { "alias": "notifications"; "required": true; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; "notificationSelect": "notificationSelect"; "actionSelect": "actionSelect"; "markAsRead": "markAsRead"; "markAllAsRead": "markAllAsRead"; }, never, never, true, never>;
7276
7647
  }
7277
7648
 
7649
+ /** Whether the save-filter popup is naming a new filter or renaming an existing one (edit mode also offers Delete). */
7278
7650
  type SaveFilterMode = 'add' | 'edit';
7279
7651
  /** Names (or renames) a saved table filter. Open/close is driven by `PopupModalBase`. */
7280
7652
  declare class SceSaveFilterPopupComponent extends PopupModalBase {
@@ -7311,12 +7683,16 @@ declare class SceStoreLocationsComponent {
7311
7683
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceStoreLocationsComponent, "sce-store-locations", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "locations": { "alias": "locations"; "required": false; "isSignal": true; }; "selectedLocationId": { "alias": "selectedLocationId"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, { "locationSelect": "locationSelect"; }, never, never, true, never>;
7312
7684
  }
7313
7685
 
7686
+ /** Lifecycle stage of a support ticket thread. */
7314
7687
  type SceSupportThreadStatus = 'draft' | 'new' | 'under-review' | 'replied' | 'closed';
7688
+ /** Which side authored a thread response, which determines the bubble's alignment and styling. */
7315
7689
  type SceSupportResponderRole = 'support' | 'beneficiary';
7690
+ /** A file already attached to a support response, referenced by download `url`. */
7316
7691
  interface SceSupportThreadAttachment {
7317
7692
  readonly name: string;
7318
7693
  readonly url: string;
7319
7694
  }
7695
+ /** One message in a support thread: responder name and role, date, body, and any attachments. */
7320
7696
  interface SceSupportThreadResponse {
7321
7697
  readonly id: string;
7322
7698
  readonly responderName: string;
@@ -7325,10 +7701,12 @@ interface SceSupportThreadResponse {
7325
7701
  readonly message: string;
7326
7702
  readonly attachments?: readonly SceSupportThreadAttachment[];
7327
7703
  }
7704
+ /** Payload emitted when the user submits a reply; attachments are still raw `File` objects, not yet uploaded. */
7328
7705
  interface SceSupportThreadReply {
7329
7706
  readonly message: string;
7330
7707
  readonly attachments: readonly File[];
7331
7708
  }
7709
+ /** Payload emitted when the user rates whether the support response was helpful, plus a free-text comment. */
7332
7710
  interface SceSupportThreadFeedback {
7333
7711
  readonly isHelpful: boolean;
7334
7712
  readonly comment: string;
@@ -7379,6 +7757,7 @@ declare class SceSupportThreadComponent {
7379
7757
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceSupportThreadComponent, "sce-support-thread", never, { "responses": { "alias": "responses"; "required": true; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "canReply": { "alias": "canReply"; "required": false; "isSignal": true; }; "canGiveFeedback": { "alias": "canGiveFeedback"; "required": false; "isSignal": true; }; }, { "replySubmit": "replySubmit"; "feedbackSubmit": "feedbackSubmit"; }, never, never, true, never>;
7380
7758
  }
7381
7759
 
7760
+ /** One selectable user in the user-dropdown picker; both `name` and `subLabel` are matched by its search box. */
7382
7761
  interface SceUserDropdownItem {
7383
7762
  readonly id: string;
7384
7763
  readonly name: string;
@@ -7448,13 +7827,16 @@ declare class SceArticleDetailComponent {
7448
7827
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceArticleDetailComponent, "sce-article-detail", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "contentKey": { "alias": "contentKey"; "required": true; "isSignal": true; }; "contentHtml": { "alias": "contentHtml"; "required": false; "isSignal": true; }; "videoSrc": { "alias": "videoSrc"; "required": false; "isSignal": true; }; "heroImageSrc": { "alias": "heroImageSrc"; "required": false; "isSignal": true; }; "isRated": { "alias": "isRated"; "required": false; "isSignal": true; }; "canGiveFeedback": { "alias": "canGiveFeedback"; "required": false; "isSignal": true; }; }, { "feedback": "feedback"; }, never, never, true, never>;
7449
7828
  }
7450
7829
 
7830
+ /** Colour of a tag chip in an article tag cloud. */
7451
7831
  type SceArticleTagVariant = 'brand' | 'accent' | 'info' | 'neutral';
7832
+ /** One tag chip: either a literal `label` or a `labelKey` to translate (which wins), plus an optional `variant` — omit it and the list assigns one by cycling. */
7452
7833
  interface SceArticleTagItem {
7453
7834
  /** Literal label. Ignored when `labelKey` is set. */
7454
7835
  readonly label?: string;
7455
7836
  readonly labelKey?: string;
7456
7837
  readonly variant?: SceArticleTagVariant;
7457
7838
  }
7839
+ /** Titled tag cloud for knowledge articles; any tag without an explicit variant is assigned one by cycling through brand, accent and info so the cloud stays visually varied. */
7458
7840
  declare class SceArticleTagsListComponent {
7459
7841
  readonly items: _angular_core.InputSignal<readonly SceArticleTagItem[]>;
7460
7842
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -7513,12 +7895,15 @@ declare class SceArticlePageComponent {
7513
7895
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceArticlePageComponent, "sce-article-page", never, { "titleKey": { "alias": "titleKey"; "required": true; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": false; "isSignal": true; }; "showPageHeader": { "alias": "showPageHeader"; "required": false; "isSignal": true; }; "videoSrc": { "alias": "videoSrc"; "required": false; "isSignal": true; }; "heroImageSrc": { "alias": "heroImageSrc"; "required": false; "isSignal": true; }; "contentKey": { "alias": "contentKey"; "required": true; "isSignal": true; }; "contentHtml": { "alias": "contentHtml"; "required": false; "isSignal": true; }; "accordionItems": { "alias": "accordionItems"; "required": false; "isSignal": true; }; "resources": { "alias": "resources"; "required": false; "isSignal": true; }; "relatedItems": { "alias": "relatedItems"; "required": false; "isSignal": true; }; "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "tagsTitleKey": { "alias": "tagsTitleKey"; "required": false; "isSignal": true; }; "relatedTitleKey": { "alias": "relatedTitleKey"; "required": false; "isSignal": true; }; "timelineItems": { "alias": "timelineItems"; "required": false; "isSignal": true; }; "isRated": { "alias": "isRated"; "required": false; "isSignal": true; }; "canGiveFeedback": { "alias": "canGiveFeedback"; "required": false; "isSignal": true; }; }, { "feedback": "feedback"; }, never, ["[articleSupport]"], true, never>;
7514
7896
  }
7515
7897
 
7898
+ /** Shape of a sidebar nav badge: a circular numeric pill (`count`) or a text pill (`label`). */
7516
7899
  type SceNavBadgeVariant = 'count' | 'label';
7900
+ /** A leaf entry nested under a `SceNavItem`; always routes somewhere. */
7517
7901
  interface SceNavChildItem {
7518
7902
  /** i18n key or literal. */
7519
7903
  readonly label: string;
7520
7904
  readonly route: string;
7521
7905
  }
7906
+ /** A top-level sidebar entry: icon plus label, optionally routing directly, carrying a badge, or expanding into `children`. */
7522
7907
  interface SceNavItem {
7523
7908
  readonly label: string;
7524
7909
  readonly icon: string;
@@ -7528,11 +7913,13 @@ interface SceNavItem {
7528
7913
  readonly badgeVariant?: SceNavBadgeVariant;
7529
7914
  readonly children?: readonly SceNavChildItem[];
7530
7915
  }
7916
+ /** A titled group of sidebar nav items. */
7531
7917
  interface SceNavSection {
7532
7918
  /** i18n key or literal for the section heading. */
7533
7919
  readonly title: string;
7534
7920
  readonly items: readonly SceNavItem[];
7535
7921
  }
7922
+ /** Branding block at the top of the sidebar: platform title, optional signed-in role, and logo. */
7536
7923
  interface SceSidebarBrand {
7537
7924
  /** i18n key or literal for the platform name. */
7538
7925
  readonly title: string;