@moatamed-sce/ui-components 0.1.0 → 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.
@@ -4,7 +4,7 @@ import * as _angular_forms from '@angular/forms';
4
4
  import { ControlValueAccessor, ValidatorFn, FormGroup, FormControl, NonNullableFormBuilder, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
5
5
  import * as _moatamed_sce_ui_components from '@moatamed-sce/ui-components';
6
6
  import * as _moatamed_sce_core from '@moatamed-sce/core';
7
- import { ModalService, LanguageService, OrganizationServiceProviderStatus, AppTheme, BirthDateCalendar, InputType, DataRequestReviewStatus, LookupDetailDto, ExportPdfOptions } from '@moatamed-sce/core';
7
+ import { ModalService, LanguageService, OrganizationServiceProviderStatus, AppTheme, BirthDateCalendar, InputType, SceLibraryAccessDenialReason, DataRequestReviewStatus, LookupDetailDto, ExportPdfOptions } from '@moatamed-sce/core';
8
8
  import { SafeHtml, SafeResourceUrl } from '@angular/platform-browser';
9
9
  import { Popover } from 'primeng/popover';
10
10
  import { ImageTransform, ImageCroppedEvent } from 'ngx-image-cropper';
@@ -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>;
@@ -4788,6 +5016,24 @@ declare class ScePageHeaderComponent {
4788
5016
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePageHeaderComponent, "sce-page-header", never, { "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": false; "isSignal": true; }; "showBreadcrumb": { "alias": "showBreadcrumb"; "required": false; "isSignal": true; }; "breadcrumbFirst": { "alias": "breadcrumbFirst"; "required": false; "isSignal": true; }; "actionLayout": { "alias": "actionLayout"; "required": false; "isSignal": true; }; }, {}, never, ["[data-page-header-actions]"], true, never>;
4789
5017
  }
4790
5018
 
5019
+ /**
5020
+ * In-app access-denied page for consumer apps.
5021
+ *
5022
+ * Wire as the target of `libraryAccessDenyRoute` (see `SCE_LIBRARY_ACCESS_DENIED_PATH` in core).
5023
+ * Bootstrap failures still use the raw DOM screen in core — this component is for routed fallbacks
5024
+ * and partner documentation previews.
5025
+ */
5026
+ declare class SceLibraryAccessDeniedComponent {
5027
+ /** Override when previewing; otherwise reads from {@link SceLibraryAccessService} when present. */
5028
+ readonly reason: _angular_core.InputSignal<SceLibraryAccessDenialReason | undefined>;
5029
+ private readonly access;
5030
+ readonly contactEmail: string;
5031
+ readonly effectiveReason: _angular_core.Signal<SceLibraryAccessDenialReason>;
5032
+ readonly mailtoHref: _angular_core.Signal<string>;
5033
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceLibraryAccessDeniedComponent, never>;
5034
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceLibraryAccessDeniedComponent, "sce-library-access-denied", never, { "reason": { "alias": "reason"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5035
+ }
5036
+
4791
5037
  /**
4792
5038
  * @deprecated Use `<sce-result-state>` instead — it covers this component's entire surface with
4793
5039
  * preset copy and actions. No production usages exist (design-system demo only); delete once the
@@ -4808,6 +5054,7 @@ declare class ScePageErrorComponent {
4808
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>;
4809
5055
  }
4810
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. */
4811
5058
  declare class SceAuthLayoutComponent {
4812
5059
  /** Logo image URL for the auth header */
4813
5060
  readonly logoSrc: _angular_core.InputSignal<string>;
@@ -4833,6 +5080,7 @@ declare class SceAuthLayoutComponent {
4833
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>;
4834
5081
  }
4835
5082
 
5083
+ /** Colour variant of a status page's icon wrapper and accent stripe. */
4836
5084
  type StatusPageVariant = 'error' | 'warning' | 'info' | 'success' | 'neutral';
4837
5085
  /**
4838
5086
  * Full-page status component for error, maintenance, permission, and empty states.
@@ -4875,6 +5123,7 @@ declare class SceStatusPageComponent {
4875
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>;
4876
5124
  }
4877
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`. */
4878
5127
  interface SelectableListItem<T = unknown> {
4879
5128
  /** Unique value for the item */
4880
5129
  value: string;
@@ -4888,6 +5137,7 @@ interface SelectableListItem<T = unknown> {
4888
5137
  metadata?: T;
4889
5138
  }
4890
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. */
4891
5141
  declare class SceSelectableListWithSearchComponent {
4892
5142
  readonly title: _angular_core.InputSignal<string>;
4893
5143
  readonly items: _angular_core.InputSignal<SelectableListItem<unknown>[]>;
@@ -4932,6 +5182,7 @@ interface QuickFilterTag {
4932
5182
  key?: string;
4933
5183
  }
4934
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. */
4935
5186
  declare class SceQuickFilterBarComponent {
4936
5187
  readonly activeFilters: _angular_core.InputSignal<QuickFilterTag[]>;
4937
5188
  readonly showSaveFilter: _angular_core.InputSignal<boolean>;
@@ -4948,6 +5199,7 @@ declare class SceQuickFilterBarComponent {
4948
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>;
4949
5200
  }
4950
5201
 
5202
+ /** The identity record a lookup returns for a verified user, shown read-only in the panel's second step. */
4951
5203
  interface VerifiedUserData {
4952
5204
  name: string;
4953
5205
  nationalId: string;
@@ -4955,16 +5207,19 @@ interface VerifiedUserData {
4955
5207
  email: string;
4956
5208
  mobile: string;
4957
5209
  }
5210
+ /** What the panel's first step emits: the national ID and birth date to look the user up with. */
4958
5211
  interface VerifyPayload {
4959
5212
  nationalId: string;
4960
5213
  birthDate: string;
4961
5214
  }
5215
+ /** What the panel's second step emits: the roles, contact details, and active flag to save for the verified user. */
4962
5216
  interface ConfirmPayload {
4963
5217
  roleIds: number[];
4964
5218
  email: string;
4965
5219
  mobile: string;
4966
5220
  isActive: boolean;
4967
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. */
4968
5223
  declare class SceUserVerifySectionPanelComponent {
4969
5224
  readonly step: _angular_core.InputSignal<1 | 2>;
4970
5225
  readonly loading: _angular_core.InputSignal<boolean>;
@@ -5022,7 +5277,9 @@ interface FileSourceBase64 {
5022
5277
  kind: 'base64';
5023
5278
  value: string;
5024
5279
  }
5280
+ /** Discriminated union (on `kind`) of the ways file content can be handed to the file viewer: URL, Blob/File, or Base64. */
5025
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. */
5026
5283
  interface FileViewerData {
5027
5284
  /** File content — a URL string, Blob/File, or Base64 string. */
5028
5285
  source: FileSource;
@@ -5037,6 +5294,7 @@ interface FileViewerData {
5037
5294
  /** When false, hides the download button and blocks programmatic download (e.g. confidential previews). */
5038
5295
  downloadable?: boolean;
5039
5296
  }
5297
+ /** Renderer the file viewer picks for a file; `Unsupported` shows a download-only fallback. */
5040
5298
  declare enum FileType {
5041
5299
  Image = "image",
5042
5300
  Pdf = "pdf",
@@ -5135,6 +5393,7 @@ declare class SceFileViewerDirective {
5135
5393
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SceFileViewerDirective, "[sceFileViewer]", never, { "sceFileViewer": { "alias": "sceFileViewer"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5136
5394
  }
5137
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`. */
5138
5397
  interface FileTypeInput {
5139
5398
  mime?: string;
5140
5399
  extension?: string;
@@ -5162,6 +5421,7 @@ interface VideoCaption {
5162
5421
  /** When true, this track is shown by default. */
5163
5422
  default?: boolean;
5164
5423
  }
5424
+ /** Value for the `<video preload>` attribute: fetch the whole file, metadata only, or nothing. */
5165
5425
  type VideoPreload = 'auto' | 'metadata' | 'none';
5166
5426
 
5167
5427
  /**
@@ -5229,12 +5489,14 @@ declare class SceTimelineComponent {
5229
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>;
5230
5490
  }
5231
5491
 
5492
+ /** One row in `SceSearchableUsersListComponent`; only `name` is matched by the search box. */
5232
5493
  interface SearchableUserListItem {
5233
5494
  id: string | number;
5234
5495
  name: string;
5235
5496
  subtitle?: string;
5236
5497
  }
5237
5498
 
5499
+ /** User list with a client-side name search box; filtering happens internally and only `deleteUser` is emitted to the host. */
5238
5500
  declare class SceSearchableUsersListComponent {
5239
5501
  readonly title: _angular_core.InputSignal<string>;
5240
5502
  readonly users: _angular_core.InputSignal<SearchableUserListItem[]>;
@@ -5248,11 +5510,13 @@ declare class SceSearchableUsersListComponent {
5248
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>;
5249
5511
  }
5250
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. */
5251
5514
  interface DetailBreadcrumbItem {
5252
5515
  label: string;
5253
5516
  route?: string;
5254
5517
  url?: string;
5255
5518
  }
5519
+ /** A button in a detail-page header: its `label` and `icon`, plus the `action` key echoed back through `actionClick`. */
5256
5520
  interface DetailHeaderAction {
5257
5521
  label: string;
5258
5522
  icon: string;
@@ -5262,6 +5526,7 @@ interface DetailHeaderAction {
5262
5526
  iconPosition?: 'start' | 'end';
5263
5527
  }
5264
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. */
5265
5530
  declare class SceDetailHeaderComponent {
5266
5531
  readonly title: _angular_core.InputSignal<string>;
5267
5532
  readonly breadcrumbs: _angular_core.InputSignal<DetailBreadcrumbItem[]>;
@@ -5281,10 +5546,12 @@ declare class SceDetailHeaderComponent {
5281
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>;
5282
5547
  }
5283
5548
 
5549
+ /** Presentation-only status for a request header: the resolved `label` plus the tag colour to render it in. */
5284
5550
  interface RequestStatusPresentation {
5285
5551
  label: string;
5286
5552
  color: 'warning' | 'success' | 'danger' | 'neutral';
5287
5553
  }
5554
+ /** One icon-and-label metadata entry in a request header; set `isDate` to have the value formatted as a localized date. */
5288
5555
  interface RequestHeaderMetaItem {
5289
5556
  label: string;
5290
5557
  value: string;
@@ -5292,6 +5559,7 @@ interface RequestHeaderMetaItem {
5292
5559
  isDate?: boolean;
5293
5560
  }
5294
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`). */
5295
5563
  declare class SceRequestHeaderComponent {
5296
5564
  readonly title: _angular_core.InputSignal<string>;
5297
5565
  readonly requestId: _angular_core.InputSignal<string>;
@@ -5303,6 +5571,7 @@ declare class SceRequestHeaderComponent {
5303
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>;
5304
5572
  }
5305
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. */
5306
5575
  declare class SceRequestDetailsCardComponent {
5307
5576
  readonly title: _angular_core.InputSignal<string>;
5308
5577
  readonly requestId: _angular_core.InputSignal<string>;
@@ -5314,6 +5583,7 @@ declare class SceRequestDetailsCardComponent {
5314
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>;
5315
5584
  }
5316
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. */
5317
5587
  interface SceAttachmentListItem {
5318
5588
  id: string;
5319
5589
  name: string;
@@ -5324,6 +5594,7 @@ interface SceAttachmentListItem {
5324
5594
  deletable?: boolean;
5325
5595
  }
5326
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. */
5327
5598
  declare class SceAttachmentsListComponent {
5328
5599
  readonly attachments: _angular_core.InputSignal<readonly SceAttachmentListItem[]>;
5329
5600
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5341,6 +5612,7 @@ declare class SceAttachmentsListComponent {
5341
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>;
5342
5613
  }
5343
5614
 
5615
+ /** Profile banner showing an avatar (`avatarUrl`, falling back to a person icon), `name`, and `role`. */
5344
5616
  declare class SceProfileHeroComponent {
5345
5617
  readonly name: _angular_core.InputSignal<string>;
5346
5618
  readonly role: _angular_core.InputSignal<string>;
@@ -5349,6 +5621,7 @@ declare class SceProfileHeroComponent {
5349
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>;
5350
5622
  }
5351
5623
 
5624
+ /** One entry in `SceResourcesListComponent`: a required `url` plus a literal `label` or i18n `labelKey` and an optional icon. */
5352
5625
  interface SceResourceListItem {
5353
5626
  label?: string;
5354
5627
  labelKey?: string;
@@ -5356,6 +5629,7 @@ interface SceResourceListItem {
5356
5629
  icon?: string;
5357
5630
  }
5358
5631
 
5632
+ /** Titled list of downloadable/linked resources from `items`; `titleKey` defaults to the knowledge-centre resources heading. */
5359
5633
  declare class SceResourcesListComponent {
5360
5634
  readonly items: _angular_core.InputSignal<SceResourceListItem[]>;
5361
5635
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5363,6 +5637,7 @@ declare class SceResourcesListComponent {
5363
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>;
5364
5638
  }
5365
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. */
5366
5641
  declare class SceFeedbackSectionComponent {
5367
5642
  readonly questionKey: _angular_core.InputSignal<string>;
5368
5643
  readonly yesKey: _angular_core.InputSignal<string>;
@@ -5378,6 +5653,7 @@ declare class SceFeedbackSectionComponent {
5378
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>;
5379
5654
  }
5380
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. */
5381
5657
  interface SceRelatedCardItem {
5382
5658
  title?: string;
5383
5659
  titleKey?: string;
@@ -5387,6 +5663,7 @@ interface SceRelatedCardItem {
5387
5663
  route?: string | string[] | null;
5388
5664
  }
5389
5665
 
5666
+ /** Renders a titled grid of related-content cards from `items`, each optionally linking to its own `route`. */
5390
5667
  declare class SceRelatedCardsListComponent {
5391
5668
  readonly items: _angular_core.InputSignal<SceRelatedCardItem[]>;
5392
5669
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5410,11 +5687,14 @@ declare class SceRelatedCardsListComponent {
5410
5687
  * These are pure data shapes — no Angular or HTTP dependencies.
5411
5688
  */
5412
5689
  type OfficeTabKey = 'overview' | 'projects' | 'reviews';
5690
+ /** One tab of the office-detail page: its `key` and an already-translated `label`. */
5413
5691
  interface TabItem {
5414
5692
  key: OfficeTabKey;
5415
5693
  label: string;
5416
5694
  }
5695
+ /** Lifecycle state of an office project as shown to guests; `unknown` when the API sends no status. */
5417
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. */
5418
5698
  interface OfficeProject {
5419
5699
  title: string;
5420
5700
  description: string;
@@ -5424,6 +5704,7 @@ interface OfficeProject {
5424
5704
  typeLabel?: string;
5425
5705
  status?: GuestProjectStatus;
5426
5706
  }
5707
+ /** A single customer review of an office: author, star `rating`, display `date`, body `text` and avatar URL. */
5427
5708
  interface OfficeReview {
5428
5709
  authorName: string;
5429
5710
  rating: number;
@@ -5431,17 +5712,20 @@ interface OfficeReview {
5431
5712
  text: string;
5432
5713
  photoUrl: string;
5433
5714
  }
5715
+ /** One bar of the ratings histogram: the `stars` bucket (1–5) and the `percent` of reviews in it. */
5434
5716
  interface RatingDistributionLine {
5435
5717
  stars: number;
5436
5718
  percent: number;
5437
5719
  }
5438
5720
 
5721
+ /** Loading placeholder for the office-detail page, rendering the hero header plus a skeleton body matching the currently active tab. */
5439
5722
  declare class SceOfficeDetailLoadingStateComponent {
5440
5723
  readonly activeTab: _angular_core.InputSignal<OfficeTabKey>;
5441
5724
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SceOfficeDetailLoadingStateComponent, never>;
5442
5725
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailLoadingStateComponent, "sce-office-detail-loading-state", never, { "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5443
5726
  }
5444
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. */
5445
5729
  declare class SceOfficeDetailNotFoundComponent {
5446
5730
  readonly breadcrumbs: _angular_core.InputSignal<LandingBreadcrumbItem[]>;
5447
5731
  /** The page owns its own navigation links, so the preset's `back` button is suppressed. */
@@ -5450,6 +5734,7 @@ declare class SceOfficeDetailNotFoundComponent {
5450
5734
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceOfficeDetailNotFoundComponent, "sce-office-detail-not-found", never, { "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5451
5735
  }
5452
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. */
5453
5738
  declare class SceOfficeDetailHeroBodyComponent {
5454
5739
  readonly officeName: _angular_core.InputSignal<string>;
5455
5740
  readonly verificationStatus: _angular_core.InputSignal<OrganizationServiceProviderStatus | null>;
@@ -5464,6 +5749,7 @@ declare class SceOfficeDetailHeroBodyComponent {
5464
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>;
5465
5750
  }
5466
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. */
5467
5753
  declare class SceOfficeDetailTabsBarComponent {
5468
5754
  readonly tabItems: _angular_core.InputSignal<TabItem[]>;
5469
5755
  readonly activeTab: _angular_core.InputSignal<OfficeTabKey>;
@@ -5474,6 +5760,7 @@ declare class SceOfficeDetailTabsBarComponent {
5474
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>;
5475
5761
  }
5476
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. */
5477
5764
  declare class SceOfficeDetailOverviewPanelComponent {
5478
5765
  readonly officeBio: _angular_core.InputSignal<string>;
5479
5766
  readonly locationText: _angular_core.InputSignal<string>;
@@ -5484,6 +5771,7 @@ declare class SceOfficeDetailOverviewPanelComponent {
5484
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>;
5485
5772
  }
5486
5773
 
5774
+ /** Projects tab of the office-detail page, rendering each of the office's projects alongside its image gallery. */
5487
5775
  declare class SceOfficeDetailProjectsPanelComponent {
5488
5776
  readonly projects: _angular_core.InputSignal<OfficeProject[]>;
5489
5777
  readonly projectGalleryImages: _angular_core.InputSignal<{
@@ -5495,6 +5783,7 @@ declare class SceOfficeDetailProjectsPanelComponent {
5495
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>;
5496
5784
  }
5497
5785
 
5786
+ /** Reviews tab of the office-detail page, showing the overall rating, the per-star rating distribution and the individual reviews. */
5498
5787
  declare class SceOfficeDetailReviewsPanelComponent {
5499
5788
  readonly reviews: _angular_core.InputSignal<OfficeReview[]>;
5500
5789
  readonly totalReviews: _angular_core.InputSignal<number>;
@@ -5548,6 +5837,7 @@ declare class SceFormRichTextComponent implements ControlValueAccessor {
5548
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>;
5549
5838
  }
5550
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. */
5551
5841
  declare class LocalizedValuePipe implements PipeTransform {
5552
5842
  private readonly translate;
5553
5843
  transform(obj: Record<string, unknown> | null | undefined, key: string, options?: {
@@ -5558,6 +5848,7 @@ declare class LocalizedValuePipe implements PipeTransform {
5558
5848
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<LocalizedValuePipe, "localizedValue", true>;
5559
5849
  }
5560
5850
 
5851
+ /** Displays a phone number with an optional leading icon and a copy-to-clipboard button (shown by default). */
5561
5852
  declare class ScePhoneNumberComponent {
5562
5853
  readonly value: _angular_core.InputSignal<string>;
5563
5854
  readonly showCopy: _angular_core.InputSignal<boolean>;
@@ -5567,6 +5858,7 @@ declare class ScePhoneNumberComponent {
5567
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>;
5568
5859
  }
5569
5860
 
5861
+ /** Title-and-description row with a trailing edit button (shown by default, labelled from the translated "edit" key unless overridden). */
5570
5862
  declare class SceInfoRowComponent {
5571
5863
  readonly title: _angular_core.InputSignal<string>;
5572
5864
  readonly description: _angular_core.InputSignal<string>;
@@ -5580,6 +5872,7 @@ declare class SceInfoRowComponent {
5580
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>;
5581
5873
  }
5582
5874
 
5875
+ /** Compact summary tile pairing an icon with a label, a primary value and an optional secondary value. */
5583
5876
  declare class SceSummaryCardComponent {
5584
5877
  readonly icon: _angular_core.InputSignal<string>;
5585
5878
  readonly label: _angular_core.InputSignal<string>;
@@ -5589,7 +5882,9 @@ declare class SceSummaryCardComponent {
5589
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>;
5590
5883
  }
5591
5884
 
5885
+ /** Colour tone of the badge on `SceEntityInfoCardComponent`. */
5592
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. */
5593
5888
  declare class SceEntityInfoCardComponent {
5594
5889
  readonly labelKey: _angular_core.InputSignal<string>;
5595
5890
  readonly nameKey: _angular_core.InputSignal<string>;
@@ -5606,6 +5901,7 @@ declare class SceEntityInfoCardComponent {
5606
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>;
5607
5902
  }
5608
5903
 
5904
+ /** Card that either shows a completion progress bar or, in `cta` mode, an illustrated call-to-action button emitting `nextStep`. */
5609
5905
  declare class SceProgressCardComponent {
5610
5906
  readonly mode: _angular_core.InputSignal<"progress" | "cta">;
5611
5907
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -5620,6 +5916,7 @@ declare class SceProgressCardComponent {
5620
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>;
5621
5917
  }
5622
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. */
5623
5920
  declare class SceContentBlockComponent {
5624
5921
  readonly contentKey: _angular_core.InputSignal<string>;
5625
5922
  readonly contentHtml: _angular_core.InputSignal<string | null>;
@@ -5627,6 +5924,7 @@ declare class SceContentBlockComponent {
5627
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>;
5628
5925
  }
5629
5926
 
5927
+ /** Renders `items` (translation keys) as an icon-bulleted list, laid out across `maxColumns` columns (default 1). */
5630
5928
  declare class SceBulletListComponent {
5631
5929
  readonly items: _angular_core.InputSignal<string[]>;
5632
5930
  readonly maxColumns: _angular_core.InputSignal<number>;
@@ -5634,6 +5932,7 @@ declare class SceBulletListComponent {
5634
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>;
5635
5933
  }
5636
5934
 
5935
+ /** Dashboard KPI card showing a headline value, an up/down trend percentage and an optional sparkline chart. */
5637
5936
  declare class SceStatsAnalyticsCardComponent {
5638
5937
  readonly title: _angular_core.InputSignal<string>;
5639
5938
  readonly titleLinkText: _angular_core.InputSignal<string>;
@@ -5661,6 +5960,7 @@ interface OfficeEditProjectItem {
5661
5960
  previewUrls?: string[];
5662
5961
  }
5663
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. */
5664
5964
  declare class SceOfficeProfileSubmitResultComponent {
5665
5965
  readonly result: _angular_core.InputSignal<"success" | "pending">;
5666
5966
  readonly viewProfile: _angular_core.OutputEmitterRef<void>;
@@ -5669,11 +5969,13 @@ declare class SceOfficeProfileSubmitResultComponent {
5669
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>;
5670
5970
  }
5671
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. */
5672
5973
  declare class ScePendingUpdateBannerComponent {
5673
5974
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScePendingUpdateBannerComponent, never>;
5674
5975
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScePendingUpdateBannerComponent, "sce-pending-update-banner", never, {}, {}, never, never, true, never>;
5675
5976
  }
5676
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. */
5677
5979
  declare class SceOfficeProfileEditBioSectionComponent {
5678
5980
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
5679
5981
  readonly serviceOptions: _angular_core.InputSignal<SceSelectOption<string>[]>;
@@ -5683,6 +5985,7 @@ declare class SceOfficeProfileEditBioSectionComponent {
5683
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>;
5684
5986
  }
5685
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. */
5686
5989
  declare class SceOfficeProfileEditMediaSectionComponent {
5687
5990
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
5688
5991
  readonly coverExistingUrl: _angular_core.InputSignal<string>;
@@ -5699,6 +6002,7 @@ declare class SceOfficeProfileEditMediaSectionComponent {
5699
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>;
5700
6003
  }
5701
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. */
5702
6006
  declare class SceOfficeProfileEditOfficialSectionComponent {
5703
6007
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
5704
6008
  readonly bankOptions: _angular_core.InputSignal<SceSelectOption<string>[]>;
@@ -5713,6 +6017,7 @@ declare class SceOfficeProfileEditOfficialSectionComponent {
5713
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>;
5714
6018
  }
5715
6019
 
6020
+ /** Contact section of the office-profile edit form, binding the parent's `FormGroup` to the contact detail inputs. */
5716
6021
  declare class SceOfficeProfileEditContactSectionComponent {
5717
6022
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
5718
6023
  readonly dir: _angular_core.InputSignal<"rtl" | "ltr">;
@@ -5724,6 +6029,7 @@ interface ProjectView extends OfficeEditProjectItem {
5724
6029
  heroUrl: string;
5725
6030
  thumbUrls: string[];
5726
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. */
5727
6033
  declare class SceOfficeProfileEditProjectsSectionComponent {
5728
6034
  readonly projects: _angular_core.InputSignal<OfficeEditProjectItem[]>;
5729
6035
  readonly addProject: _angular_core.OutputEmitterRef<void>;
@@ -5734,6 +6040,7 @@ declare class SceOfficeProfileEditProjectsSectionComponent {
5734
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>;
5735
6041
  }
5736
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. */
5737
6044
  declare class SceOfficeProfileProjectEditorDialogComponent {
5738
6045
  readonly visible: _angular_core.InputSignal<boolean>;
5739
6046
  readonly title: _angular_core.InputSignal<string>;
@@ -5753,6 +6060,7 @@ declare class SceOfficeProfileProjectEditorDialogComponent {
5753
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>;
5754
6061
  }
5755
6062
 
6063
+ /** Confirmation dialog asking the user to confirm deleting an office project. */
5756
6064
  declare class SceOfficeProfileProjectDeleteDialogComponent {
5757
6065
  readonly visible: _angular_core.InputSignal<boolean>;
5758
6066
  readonly closeDialog: _angular_core.OutputEmitterRef<void>;
@@ -5761,7 +6069,9 @@ declare class SceOfficeProfileProjectDeleteDialogComponent {
5761
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>;
5762
6070
  }
5763
6071
 
6072
+ /** Identifies a tab of the office-profile view (office data, projects, services, contact). */
5764
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. */
5765
6075
  declare class SceOfficeProfileHeroComponent {
5766
6076
  readonly bannerUrl: _angular_core.InputSignal<string | null>;
5767
6077
  readonly logoUrl: _angular_core.InputSignal<string | null>;
@@ -5785,6 +6095,7 @@ declare class SceOfficeProfileHeroComponent {
5785
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>;
5786
6096
  }
5787
6097
 
6098
+ /** Row of headline office statistics: years of experience, project count and service count. */
5788
6099
  declare class SceOfficeProfileStatsRowComponent {
5789
6100
  readonly yearsOfExperience: _angular_core.InputSignal<string>;
5790
6101
  readonly projectsCount: _angular_core.InputSignal<number>;
@@ -5793,6 +6104,7 @@ declare class SceOfficeProfileStatsRowComponent {
5793
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>;
5794
6105
  }
5795
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. */
5796
6108
  declare class SceOfficeProfileOverviewTabComponent {
5797
6109
  readonly summary: _angular_core.InputSignal<string>;
5798
6110
  readonly servicesDisplay: _angular_core.InputSignal<string[]>;
@@ -5804,6 +6116,7 @@ declare class SceOfficeProfileOverviewTabComponent {
5804
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>;
5805
6117
  }
5806
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`. */
5807
6120
  interface OfficeProfileDisplayProject {
5808
6121
  id: number;
5809
6122
  title: string;
@@ -5814,6 +6127,7 @@ interface OfficeProfileDisplayProject {
5814
6127
  isCompleted: boolean;
5815
6128
  typeLabel: string;
5816
6129
  }
6130
+ /** Projects tab of the office profile view, rendering each project with its image gallery and showing skeletons while the project images load. */
5817
6131
  declare class SceOfficeProfileProjectsTabComponent {
5818
6132
  readonly displayProjects: _angular_core.InputSignal<OfficeProfileDisplayProject[]>;
5819
6133
  readonly projectImagesLoading: _angular_core.InputSignal<boolean>;
@@ -5822,6 +6136,7 @@ declare class SceOfficeProfileProjectsTabComponent {
5822
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>;
5823
6137
  }
5824
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. */
5825
6140
  declare class SceOfficeProfileContactTabComponent {
5826
6141
  readonly email: _angular_core.InputSignal<string>;
5827
6142
  readonly phone: _angular_core.InputSignal<string>;
@@ -5833,6 +6148,7 @@ declare class SceOfficeProfileContactTabComponent {
5833
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>;
5834
6149
  }
5835
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. */
5836
6152
  declare class SceOfficeProfileOfficialTabComponent {
5837
6153
  readonly vatNumber: _angular_core.InputSignal<string>;
5838
6154
  readonly commercialRegistrationNumber: _angular_core.InputSignal<string>;
@@ -5847,6 +6163,7 @@ declare class SceOfficeProfileOfficialTabComponent {
5847
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>;
5848
6164
  }
5849
6165
 
6166
+ /** Collapsible `<details>` panel (open by default) showing the reviewer's rejection note, or an em dash when the note is empty. */
5850
6167
  declare class SceDataRequestRejectionPanelComponent {
5851
6168
  /** The rejection note text from the API. Empty string shows a dash. */
5852
6169
  readonly note: _angular_core.InputSignal<string>;
@@ -5854,6 +6171,7 @@ declare class SceDataRequestRejectionPanelComponent {
5854
6171
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceDataRequestRejectionPanelComponent, "sce-data-request-rejection-panel", never, { "note": { "alias": "note"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5855
6172
  }
5856
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. */
5857
6175
  declare class SceDataRequestHeaderCardComponent {
5858
6176
  /** Human-readable request number (e.g. "REQ-00123"). */
5859
6177
  readonly requestNumber: _angular_core.InputSignal<string>;
@@ -5881,12 +6199,14 @@ declare class SceDataRequestHeaderCardComponent {
5881
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>;
5882
6200
  }
5883
6201
 
6202
+ /** One field of a data-change request, pairing its `current` and `updated` display values with a `changed` flag that highlights the row. */
5884
6203
  interface DataRequestComparisonRow {
5885
6204
  label: string;
5886
6205
  current: string;
5887
6206
  updated: string;
5888
6207
  changed: boolean;
5889
6208
  }
6209
+ /** Titled table contrasting each field's current and updated value in a data-change request, flagging the rows that changed. */
5890
6210
  declare class SceDataRequestComparisonTableComponent {
5891
6211
  /** Section heading text. */
5892
6212
  readonly title: _angular_core.InputSignal<string>;
@@ -5896,7 +6216,9 @@ declare class SceDataRequestComparisonTableComponent {
5896
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>;
5897
6217
  }
5898
6218
 
6219
+ /** Which media the comparison frames hold, selecting their aspect ratio: `logo` is square, `cover` widescreen. */
5899
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. */
5900
6222
  declare class SceDataRequestMediaComparisonComponent {
5901
6223
  /** Block heading (e.g. "Logo" or "Cover"). */
5902
6224
  readonly title: _angular_core.InputSignal<string>;
@@ -5916,11 +6238,13 @@ declare class SceDataRequestMediaComparisonComponent {
5916
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>;
5917
6239
  }
5918
6240
 
6241
+ /** Payload emitted by `SceNewsletterSubscriptionDialogComponent.submitForm`: trimmed name, email and (optional) mobile. */
5919
6242
  interface NewsletterSubscriptionFormValues {
5920
6243
  clientName: string;
5921
6244
  email: string;
5922
6245
  mobile: string;
5923
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. */
5924
6248
  declare class SceNewsletterSubscriptionDialogComponent {
5925
6249
  private readonly translate;
5926
6250
  readonly visible: _angular_core.InputSignal<boolean>;
@@ -5952,6 +6276,7 @@ declare class SceNewsletterSubscriptionDialogComponent {
5952
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>;
5953
6277
  }
5954
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`. */
5955
6280
  declare class SceProfilePhotoSectionComponent {
5956
6281
  /** Currently displayed photo URL. Null or undefined shows the default avatar. */
5957
6282
  readonly photoUrl: _angular_core.InputSignal<string | null>;
@@ -5977,6 +6302,7 @@ declare class SceProfilePhotoSectionComponent {
5977
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>;
5978
6303
  }
5979
6304
 
6305
+ /** Fully resolved, display-ready personal-profile data; the caller is responsible for formatting the birth date and resolving the bank name. */
5980
6306
  interface ProfileInfoViewData {
5981
6307
  fullName: string;
5982
6308
  nationalId: string;
@@ -5991,11 +6317,13 @@ interface ProfileInfoViewData {
5991
6317
  bankNameDisplay: string;
5992
6318
  bankAccount: string;
5993
6319
  }
6320
+ /** One label/value row in a profile view section; `fullWidth` makes it span both grid columns. */
5994
6321
  interface ProfileViewField {
5995
6322
  labelKey: string;
5996
6323
  value: string;
5997
6324
  fullWidth?: boolean;
5998
6325
  }
6326
+ /** A titled group of read-only profile fields, optionally carrying its own Edit action. */
5999
6327
  interface ProfileViewSection {
6000
6328
  titleKey: string;
6001
6329
  showEditAction?: boolean;
@@ -6003,6 +6331,7 @@ interface ProfileViewSection {
6003
6331
  }
6004
6332
  /** Re-exported alias so callers don't need to import from core directly. */
6005
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`. */
6006
6335
  declare class SceProfileInfoSectionComponent {
6007
6336
  /** Resolved profile data for the read (view) mode. Null shows skeleton. */
6008
6337
  readonly profile: _angular_core.InputSignal<ProfileInfoViewData | null>;
@@ -6044,6 +6373,7 @@ declare class SceProfileInfoSectionComponent {
6044
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>;
6045
6374
  }
6046
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. */
6047
6377
  declare class SceDataRequestCurrentSummaryComponent {
6048
6378
  readonly currentPhone: _angular_core.InputSignal<string>;
6049
6379
  readonly currentEmail: _angular_core.InputSignal<string>;
@@ -6054,7 +6384,9 @@ declare class SceDataRequestCurrentSummaryComponent {
6054
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>;
6055
6385
  }
6056
6386
 
6387
+ /** How a portfolio project changed in the request, grouping it into the added, updated or removed section. */
6057
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. */
6058
6390
  interface ProjectChangeDisplayMetric {
6059
6391
  key: string;
6060
6392
  label: string;
@@ -6062,6 +6394,7 @@ interface ProjectChangeDisplayMetric {
6062
6394
  nextValue: string;
6063
6395
  changed: boolean;
6064
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. */
6065
6398
  interface ProjectChangeDisplayItem {
6066
6399
  id: string;
6067
6400
  type: ProjectChangeDisplayType;
@@ -6077,6 +6410,7 @@ interface ProjectChangeDisplayItem {
6077
6410
  imageUrls: string[];
6078
6411
  compactSubtitle: string;
6079
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. */
6080
6414
  declare class SceDataRequestProjectChangesComponent {
6081
6415
  readonly projectChanges: _angular_core.InputSignal<ProjectChangeDisplayItem[]>;
6082
6416
  readonly isSystemUser: _angular_core.InputSignal<boolean>;
@@ -6088,6 +6422,7 @@ declare class SceDataRequestProjectChangesComponent {
6088
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>;
6089
6423
  }
6090
6424
 
6425
+ /** One knowledge-center category tile, keyed by `slug`; `titleKey` and `descriptionKey` are i18n keys, not literal text. */
6091
6426
  interface KnowledgeCategoryItem {
6092
6427
  slug: string;
6093
6428
  titleKey: string;
@@ -6095,6 +6430,7 @@ interface KnowledgeCategoryItem {
6095
6430
  icon: string;
6096
6431
  background?: string;
6097
6432
  }
6433
+ /** Grid of knowledge-center categories that also owns its loading, error and empty states and emits category/retry/ticket actions. */
6098
6434
  declare class SceKnowledgeCenterCategoryGridComponent {
6099
6435
  readonly categories: _angular_core.InputSignal<KnowledgeCategoryItem[]>;
6100
6436
  readonly isLoadingCategories: _angular_core.InputSignal<boolean>;
@@ -6107,6 +6443,7 @@ declare class SceKnowledgeCenterCategoryGridComponent {
6107
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>;
6108
6444
  }
6109
6445
 
6446
+ /** Read-only contact details panel rendering working hours, response time, phone number, email link and Instagram/Twitter links. */
6110
6447
  declare class SceContactInfoPanelComponent {
6111
6448
  readonly workingHoursValue: _angular_core.InputSignal<string>;
6112
6449
  readonly responseValue: _angular_core.InputSignal<string>;
@@ -6119,6 +6456,7 @@ declare class SceContactInfoPanelComponent {
6119
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>;
6120
6457
  }
6121
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. */
6122
6460
  declare class SceContactFormPanelComponent {
6123
6461
  readonly dir: _angular_core.InputSignal<"rtl" | "ltr">;
6124
6462
  readonly fullName: _angular_core.InputSignal<string>;
@@ -6154,6 +6492,7 @@ declare class SceContactFormPanelComponent {
6154
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>;
6155
6493
  }
6156
6494
 
6495
+ /** Day counts for the force-majeure setting: notification periods per contract kind, plus the grantable extension periods. */
6157
6496
  interface PsSettingForceMajeureDurationsValue {
6158
6497
  notificationDays: {
6159
6498
  general: number;
@@ -6165,6 +6504,7 @@ interface PsSettingForceMajeureDurationsValue {
6165
6504
  consultancy: number;
6166
6505
  };
6167
6506
  }
6507
+ /** Discriminated union of one platform setting, keyed on `type`, which selects both the `value` shape and the control rendered for it. */
6168
6508
  type PsSettingField = {
6169
6509
  apiKey: string;
6170
6510
  label: string;
@@ -6184,6 +6524,7 @@ type PsSettingField = {
6184
6524
  type: 'forceMajeureDurations';
6185
6525
  value: PsSettingForceMajeureDurationsValue;
6186
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). */
6187
6528
  declare class ScePlatformSettingsFieldsComponent {
6188
6529
  readonly viewFields: _angular_core.InputSignal<PsSettingField[]>;
6189
6530
  readonly isEditMode: _angular_core.InputSignal<boolean>;
@@ -6212,6 +6553,7 @@ declare class ScePlatformSettingsFieldsComponent {
6212
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>;
6213
6554
  }
6214
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. */
6215
6557
  declare class SceEntityProfileEditFormComponent {
6216
6558
  readonly form: _angular_core.InputSignal<FormGroup<any>>;
6217
6559
  readonly dir: _angular_core.InputSignal<"rtl" | "ltr">;
@@ -6234,7 +6576,9 @@ declare class SceEntityProfileEditFormComponent {
6234
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>;
6235
6577
  }
6236
6578
 
6579
+ /** Which tab of the account-users page is active. */
6237
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. */
6238
6582
  declare class SceAccountUsersTabsBarComponent {
6239
6583
  readonly title: _angular_core.InputSignal<string>;
6240
6584
  readonly activeTab: _angular_core.InputSignal<AccountUsersTab>;
@@ -6246,6 +6590,7 @@ declare class SceAccountUsersTabsBarComponent {
6246
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>;
6247
6591
  }
6248
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. */
6249
6594
  declare class SceAccountUserVerifyDialogComponent {
6250
6595
  readonly visible: _angular_core.InputSignal<boolean>;
6251
6596
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -6264,6 +6609,7 @@ declare class SceAccountUserVerifyDialogComponent {
6264
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>;
6265
6610
  }
6266
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. */
6267
6613
  interface AccountUserAssignForm {
6268
6614
  nationalId: string;
6269
6615
  userName: string;
@@ -6273,10 +6619,12 @@ interface AccountUserAssignForm {
6273
6619
  roleIds: number[];
6274
6620
  isActive: boolean;
6275
6621
  }
6622
+ /** A role choice in the assign-user dialog's multi-select, keyed by numeric role id. */
6276
6623
  interface AssignRoleOption {
6277
6624
  label: string;
6278
6625
  value: number;
6279
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`. */
6280
6628
  declare class SceAccountUserAssignDialogComponent {
6281
6629
  readonly visible: _angular_core.InputSignal<boolean>;
6282
6630
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -6301,15 +6649,18 @@ declare class SceAccountUserAssignDialogComponent {
6301
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>;
6302
6650
  }
6303
6651
 
6652
+ /** A non-editable identity field displayed in the edit-user dialog; `fullWidth` spans both grid columns. */
6304
6653
  interface AccountUserEditReadOnlyField {
6305
6654
  label: string;
6306
6655
  value: string | null | undefined;
6307
6656
  fullWidth?: boolean;
6308
6657
  }
6658
+ /** A role choice in the edit-user dialog's multi-select; unlike the assign dialog its `value` is a string id. */
6309
6659
  interface AccountUserEditRoleOption {
6310
6660
  label: string;
6311
6661
  value: string;
6312
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`. */
6313
6664
  declare class SceAccountUserEditDialogComponent {
6314
6665
  readonly visible: _angular_core.InputSignal<boolean>;
6315
6666
  readonly locale: _angular_core.InputSignal<"ar" | "en">;
@@ -6332,14 +6683,17 @@ declare class SceAccountUserEditDialogComponent {
6332
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>;
6333
6684
  }
6334
6685
 
6686
+ /** A status pill in the account-user detail header, coloured by its business-status `tone`. */
6335
6687
  interface UserDetailStatusTag {
6336
6688
  label: string;
6337
6689
  tone?: BusinessStatusTone;
6338
6690
  }
6691
+ /** A label/value chip (membership number, national ID) shown beside the user's name. */
6339
6692
  interface UserDetailBadge {
6340
6693
  label: string;
6341
6694
  value: string;
6342
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. */
6343
6697
  declare class SceAccountUserDetailHeaderComponent {
6344
6698
  readonly title: _angular_core.InputSignal<string>;
6345
6699
  readonly statusTags: _angular_core.InputSignal<UserDetailStatusTag[]>;
@@ -6351,11 +6705,13 @@ declare class SceAccountUserDetailHeaderComponent {
6351
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>;
6352
6706
  }
6353
6707
 
6708
+ /** One read-only label/value row of a user's personal details; `fullWidth` spans both grid columns. */
6354
6709
  interface UserDetailField {
6355
6710
  label: string;
6356
6711
  value: string | null | undefined;
6357
6712
  fullWidth?: boolean;
6358
6713
  }
6714
+ /** Titled grid of read-only personal-detail `fields` for an account user; labels and values arrive already translated and formatted. */
6359
6715
  declare class SceAccountUserPersonalSectionComponent {
6360
6716
  readonly title: _angular_core.InputSignal<string>;
6361
6717
  readonly fields: _angular_core.InputSignal<UserDetailField[]>;
@@ -6363,6 +6719,7 @@ declare class SceAccountUserPersonalSectionComponent {
6363
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>;
6364
6720
  }
6365
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`. */
6366
6723
  declare class SceAccountUserPermissionsSectionComponent {
6367
6724
  readonly sectionTitle: _angular_core.InputSignal<string>;
6368
6725
  readonly permissionsLabel: _angular_core.InputSignal<string>;
@@ -6373,6 +6730,7 @@ declare class SceAccountUserPermissionsSectionComponent {
6373
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>;
6374
6731
  }
6375
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. */
6376
6734
  declare class SceInternalUserVerifySectionComponent {
6377
6735
  readonly nationalId: _angular_core.InputSignal<string>;
6378
6736
  readonly birthDate: _angular_core.InputSignal<string>;
@@ -6388,7 +6746,9 @@ declare class SceInternalUserVerifySectionComponent {
6388
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>;
6389
6747
  }
6390
6748
 
6749
+ /** Whether the internal-user fields are editing an existing user or showing the post-verification create step. */
6391
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). */
6392
6752
  declare class SceInternalUserFormFieldsComponent {
6393
6753
  readonly mode: _angular_core.InputSignal<InternalUserFormFieldsMode>;
6394
6754
  readonly nationalId: _angular_core.InputSignal<string>;
@@ -6404,10 +6764,12 @@ declare class SceInternalUserFormFieldsComponent {
6404
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>;
6405
6765
  }
6406
6766
 
6767
+ /** A role choice in the internal-user permissions multi-select, keyed by numeric role id. */
6407
6768
  interface InternalUserRoleOption {
6408
6769
  label: string;
6409
6770
  value: number;
6410
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. */
6411
6773
  declare class SceInternalUserPermissionsSectionComponent {
6412
6774
  readonly roleOptions: _angular_core.InputSignal<InternalUserRoleOption[]>;
6413
6775
  readonly selectedRoleNumbers: _angular_core.InputSignal<number[]>;
@@ -6419,7 +6781,9 @@ declare class SceInternalUserPermissionsSectionComponent {
6419
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>;
6420
6782
  }
6421
6783
 
6784
+ /** Which presentation the offices browser is showing: card grid, list, or map. */
6422
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. */
6423
6787
  declare class SceOfficesViewToggleComponent {
6424
6788
  readonly viewMode: _angular_core.InputSignal<OfficeViewMode>;
6425
6789
  readonly viewModeChange: _angular_core.OutputEmitterRef<OfficeViewMode>;
@@ -6427,7 +6791,9 @@ declare class SceOfficesViewToggleComponent {
6427
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>;
6428
6792
  }
6429
6793
 
6794
+ /** Layout the offices grid panel renders its cards in. */
6430
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. */
6431
6797
  declare class SceOfficesGridPanelComponent {
6432
6798
  readonly cards: _angular_core.InputSignal<SceEngineeringOfficeCardModel[]>;
6433
6799
  readonly isLoading: _angular_core.InputSignal<boolean>;
@@ -6454,6 +6820,7 @@ declare class SceOfficesGridPanelComponent {
6454
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>;
6455
6821
  }
6456
6822
 
6823
+ /** Wraps the OSM offices map with a fallback link shown when `mapLoadFailed`; emits `selectOffice` when a marker is picked. */
6457
6824
  declare class SceOfficesMapPanelComponent {
6458
6825
  readonly mapPoints: _angular_core.InputSignal<SceOsmOfficeMapPoint[]>;
6459
6826
  readonly mapLoadFailed: _angular_core.InputSignal<boolean>;
@@ -6466,16 +6833,21 @@ declare class SceOfficesMapPanelComponent {
6466
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>;
6467
6834
  }
6468
6835
 
6836
+ /** Ordering applied to the offices browser results. */
6469
6837
  type OfficeSortMode = 'rating' | 'experience' | 'clients';
6838
+ /** Office-size bucket used to narrow the offices browser results. */
6470
6839
  type OfficeSizeFilter = 'all' | 'small' | 'medium' | 'large';
6840
+ /** A selectable sort choice in the offices filters sidebar, labelled by i18n key. */
6471
6841
  interface OfficeSortOption {
6472
6842
  readonly value: OfficeSortMode;
6473
6843
  readonly labelKey: string;
6474
6844
  }
6845
+ /** A selectable office-size choice in the offices filters sidebar, labelled by i18n key. */
6475
6846
  interface OfficeSizeOption {
6476
6847
  readonly value: OfficeSizeFilter;
6477
6848
  readonly labelKey: string;
6478
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. */
6479
6851
  declare class SceOfficesFiltersSidebarComponent {
6480
6852
  /** Current draft sort/filter values */
6481
6853
  readonly draftSort: _angular_core.InputSignal<OfficeSortMode>;
@@ -6632,6 +7004,7 @@ declare class SceRadioOptionCard {
6632
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>;
6633
7005
  }
6634
7006
 
7007
+ /** Value of `SceRangeBar`: a single number, or a `[start, end]` pair which switches it into two-handle range mode. */
6635
7008
  type SceRangeBarValue = number | [number, number];
6636
7009
  /** Single-value or two-handle range slider wired as a `ControlValueAccessor`. */
6637
7010
  declare class SceRangeBar implements ControlValueAccessor {
@@ -6664,6 +7037,7 @@ declare class SceRangeBar implements ControlValueAccessor {
6664
7037
 
6665
7038
  /** Rendering mode of the option list. */
6666
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. */
6667
7041
  interface SceFieldOption {
6668
7042
  label: string;
6669
7043
  value: string;
@@ -6861,6 +7235,7 @@ declare class SceNavCard {
6861
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>;
6862
7236
  }
6863
7237
 
7238
+ /** One selectable chip in `SceOptionGroup`: a `value`, an optional already-translated `label`, and an optional `disabled` flag. */
6864
7239
  interface SceOptionItem {
6865
7240
  value: string;
6866
7241
  label?: string;
@@ -6956,6 +7331,7 @@ declare class SceTabPanel {
6956
7331
 
6957
7332
  /** Layout mode: `field` renders a label/value row inside a parent panel; `card` renders a standalone padded tile. */
6958
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. */
6959
7335
  declare class SceBasicCardComponent {
6960
7336
  readonly label: _angular_core.InputSignal<string>;
6961
7337
  readonly value: _angular_core.InputSignal<string>;
@@ -6965,6 +7341,7 @@ declare class SceBasicCardComponent {
6965
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>;
6966
7342
  }
6967
7343
 
7344
+ /** One tile in `SceNavCardsListComponent`: a slug fed to the parent's route factory plus i18n title/description keys and a thumbnail. */
6968
7345
  interface SceNavCardItem {
6969
7346
  /** Stable identifier; also fed to the parent's route factory. */
6970
7347
  readonly slug: string;
@@ -6973,6 +7350,7 @@ interface SceNavCardItem {
6973
7350
  readonly thumbnailSrc: string;
6974
7351
  }
6975
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. */
6976
7354
  declare class SceNavCardsListComponent {
6977
7355
  readonly items: _angular_core.InputSignal<readonly SceNavCardItem[]>;
6978
7356
  /** Maps an item slug to a router link. Kept as an input so the organism stays route-agnostic. */
@@ -7014,6 +7392,7 @@ declare class SceCardsStatisticsComponent {
7014
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>;
7015
7393
  }
7016
7394
 
7395
+ /** Tone of the status chip on an evaluation criterion. */
7017
7396
  type SceCriteriaStatus = 'success' | 'warning' | 'info' | 'danger';
7018
7397
  /** Reviewer's write-up for one criterion: an optional reason, free-text notes, and evidence. */
7019
7398
  interface SceCriteriaObservation {
@@ -7021,6 +7400,7 @@ interface SceCriteriaObservation {
7021
7400
  readonly notes?: string;
7022
7401
  readonly attachments?: readonly SceAttachmentListItem[];
7023
7402
  }
7403
+ /** One evaluation criterion: its title, status chip `tag`/`status`, optional free-form `score` and description, and the reviewer's `observation`. */
7024
7404
  interface SceCriteriaItem {
7025
7405
  readonly id: string | number;
7026
7406
  readonly title: string;
@@ -7032,6 +7412,7 @@ interface SceCriteriaItem {
7032
7412
  readonly description?: string;
7033
7413
  readonly observation?: SceCriteriaObservation;
7034
7414
  }
7415
+ /** Payload of a criteria section: an optional heading plus the list of `criteria` to render. */
7035
7416
  interface SceCriteriaSectionData {
7036
7417
  /** i18n key or literal for the section heading. */
7037
7418
  readonly title?: string;
@@ -7077,6 +7458,7 @@ interface SceEntitySummarySector {
7077
7458
  readonly disabled?: boolean;
7078
7459
  }
7079
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. */
7080
7462
  declare class SceEntitySummaryCardComponent {
7081
7463
  readonly logo: _angular_core.InputSignal<string>;
7082
7464
  readonly name: _angular_core.InputSignal<string>;
@@ -7121,6 +7503,7 @@ declare class SceExportPdfContainerComponent {
7121
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>;
7122
7504
  }
7123
7505
 
7506
+ /** Reason a picked file was rejected by `SceImagePickerComponent`: wrong MIME type or over `maxSizeMb`. */
7124
7507
  type SceImagePickerError = 'type' | 'size';
7125
7508
  /** Avatar-style image picker with drag-and-drop, preview, and reactive-forms integration. */
7126
7509
  declare class SceImagePickerComponent implements ControlValueAccessor, Validator {
@@ -7168,11 +7551,13 @@ declare class SceImagePickerComponent implements ControlValueAccessor, Validator
7168
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>;
7169
7552
  }
7170
7553
 
7554
+ /** Status chip shown on an inquiry-request card: a label (i18n key or literal) plus the `SceTagVariant` to colour it. */
7171
7555
  interface SceInquiryRequestStatus {
7172
7556
  /** i18n key or literal shown inside the tag. */
7173
7557
  readonly label: string;
7174
7558
  readonly variant: SceTagVariant;
7175
7559
  }
7560
+ /** One inquiry request rendered by the inquiry-request card: code, sender, date, deadline, status, and an optional per-row `loading` flag. */
7176
7561
  interface SceInquiryRequest {
7177
7562
  readonly id: string;
7178
7563
  readonly code: string;
@@ -7202,13 +7587,16 @@ declare class SceInquiryRequestCardComponent {
7202
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>;
7203
7588
  }
7204
7589
 
7590
+ /** Severity of a notification, which drives its colour and (unless `icon` is set) its icon. */
7205
7591
  type SceNotificationTone = 'info' | 'warning' | 'success' | 'danger';
7592
+ /** A button rendered inside a notification; the `id` is echoed back to the host when clicked. */
7206
7593
  interface SceNotificationAction {
7207
7594
  /** i18n key or literal shown on the action button. */
7208
7595
  readonly label: string;
7209
7596
  readonly id: string;
7210
7597
  readonly variant?: 'primary' | 'secondary';
7211
7598
  }
7599
+ /** One notification row: title, description, `tone`, read flag, `Date`, and optional category chip, icon override, and actions. */
7212
7600
  interface SceNotificationItem {
7213
7601
  readonly id: string;
7214
7602
  readonly title: string;
@@ -7223,6 +7611,7 @@ interface SceNotificationItem {
7223
7611
  readonly icon?: string;
7224
7612
  readonly actions?: readonly SceNotificationAction[];
7225
7613
  }
7614
+ /** Which notifications the list shows: everything, or only unread ones. */
7226
7615
  type SceNotificationFilter = 'all' | 'unread';
7227
7616
 
7228
7617
  /** Slide-in notification drawer with all/unread filtering and per-item actions. */
@@ -7257,6 +7646,7 @@ declare class SceNotificationListComponent {
7257
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>;
7258
7647
  }
7259
7648
 
7649
+ /** Whether the save-filter popup is naming a new filter or renaming an existing one (edit mode also offers Delete). */
7260
7650
  type SaveFilterMode = 'add' | 'edit';
7261
7651
  /** Names (or renames) a saved table filter. Open/close is driven by `PopupModalBase`. */
7262
7652
  declare class SceSaveFilterPopupComponent extends PopupModalBase {
@@ -7293,12 +7683,16 @@ declare class SceStoreLocationsComponent {
7293
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>;
7294
7684
  }
7295
7685
 
7686
+ /** Lifecycle stage of a support ticket thread. */
7296
7687
  type SceSupportThreadStatus = 'draft' | 'new' | 'under-review' | 'replied' | 'closed';
7688
+ /** Which side authored a thread response, which determines the bubble's alignment and styling. */
7297
7689
  type SceSupportResponderRole = 'support' | 'beneficiary';
7690
+ /** A file already attached to a support response, referenced by download `url`. */
7298
7691
  interface SceSupportThreadAttachment {
7299
7692
  readonly name: string;
7300
7693
  readonly url: string;
7301
7694
  }
7695
+ /** One message in a support thread: responder name and role, date, body, and any attachments. */
7302
7696
  interface SceSupportThreadResponse {
7303
7697
  readonly id: string;
7304
7698
  readonly responderName: string;
@@ -7307,10 +7701,12 @@ interface SceSupportThreadResponse {
7307
7701
  readonly message: string;
7308
7702
  readonly attachments?: readonly SceSupportThreadAttachment[];
7309
7703
  }
7704
+ /** Payload emitted when the user submits a reply; attachments are still raw `File` objects, not yet uploaded. */
7310
7705
  interface SceSupportThreadReply {
7311
7706
  readonly message: string;
7312
7707
  readonly attachments: readonly File[];
7313
7708
  }
7709
+ /** Payload emitted when the user rates whether the support response was helpful, plus a free-text comment. */
7314
7710
  interface SceSupportThreadFeedback {
7315
7711
  readonly isHelpful: boolean;
7316
7712
  readonly comment: string;
@@ -7361,6 +7757,7 @@ declare class SceSupportThreadComponent {
7361
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>;
7362
7758
  }
7363
7759
 
7760
+ /** One selectable user in the user-dropdown picker; both `name` and `subLabel` are matched by its search box. */
7364
7761
  interface SceUserDropdownItem {
7365
7762
  readonly id: string;
7366
7763
  readonly name: string;
@@ -7430,13 +7827,16 @@ declare class SceArticleDetailComponent {
7430
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>;
7431
7828
  }
7432
7829
 
7830
+ /** Colour of a tag chip in an article tag cloud. */
7433
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. */
7434
7833
  interface SceArticleTagItem {
7435
7834
  /** Literal label. Ignored when `labelKey` is set. */
7436
7835
  readonly label?: string;
7437
7836
  readonly labelKey?: string;
7438
7837
  readonly variant?: SceArticleTagVariant;
7439
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. */
7440
7840
  declare class SceArticleTagsListComponent {
7441
7841
  readonly items: _angular_core.InputSignal<readonly SceArticleTagItem[]>;
7442
7842
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -7495,12 +7895,15 @@ declare class SceArticlePageComponent {
7495
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>;
7496
7896
  }
7497
7897
 
7898
+ /** Shape of a sidebar nav badge: a circular numeric pill (`count`) or a text pill (`label`). */
7498
7899
  type SceNavBadgeVariant = 'count' | 'label';
7900
+ /** A leaf entry nested under a `SceNavItem`; always routes somewhere. */
7499
7901
  interface SceNavChildItem {
7500
7902
  /** i18n key or literal. */
7501
7903
  readonly label: string;
7502
7904
  readonly route: string;
7503
7905
  }
7906
+ /** A top-level sidebar entry: icon plus label, optionally routing directly, carrying a badge, or expanding into `children`. */
7504
7907
  interface SceNavItem {
7505
7908
  readonly label: string;
7506
7909
  readonly icon: string;
@@ -7510,11 +7913,13 @@ interface SceNavItem {
7510
7913
  readonly badgeVariant?: SceNavBadgeVariant;
7511
7914
  readonly children?: readonly SceNavChildItem[];
7512
7915
  }
7916
+ /** A titled group of sidebar nav items. */
7513
7917
  interface SceNavSection {
7514
7918
  /** i18n key or literal for the section heading. */
7515
7919
  readonly title: string;
7516
7920
  readonly items: readonly SceNavItem[];
7517
7921
  }
7922
+ /** Branding block at the top of the sidebar: platform title, optional signed-in role, and logo. */
7518
7923
  interface SceSidebarBrand {
7519
7924
  /** i18n key or literal for the platform name. */
7520
7925
  readonly title: string;
@@ -7598,5 +8003,5 @@ declare class SceRegisterLayoutComponent {
7598
8003
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SceRegisterLayoutComponent, "sce-register-layout", never, { "asideTitleKey": { "alias": "asideTitleKey"; "required": false; "isSignal": true; }; "asideDescriptionKey": { "alias": "asideDescriptionKey"; "required": false; "isSignal": true; }; "asideImageSrc": { "alias": "asideImageSrc"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "stepperVariant": { "alias": "stepperVariant"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; }, { "stepChange": "stepChange"; }, never, ["*", "[registerFooter]"], true, never>;
7599
8004
  }
7600
8005
 
7601
- export { Alert, Breadcrumb, Card, ColumnsEnum, DYNAMIC_MULTI_TYPES, DYNAMIC_NATIVE_TYPES, DashboardPageHeaderComponent, FileType, FormInput, LocalizedValuePipe, OtpInput, Popup, PopupModalBase, RESULT_STATE_ACTION_META, RESULT_STATE_PRESETS, SCE_MIRROR_LABEL_AS_PLACEHOLDER, SceAccordionComponent, SceAccountSwitcherComponent, SceAccountUserAssignDialogComponent, SceAccountUserDetailHeaderComponent, SceAccountUserEditDialogComponent, SceAccountUserPermissionsSectionComponent, SceAccountUserPersonalSectionComponent, SceAccountUserVerifyDialogComponent, SceAccountUsersTabsBarComponent, SceActionDialogComponent, SceApiErrorStateComponent, SceAreaChartComponent, SceArticleDetailComponent, SceArticleLayoutComponent, SceArticlePageComponent, SceArticleSidebarComponent, SceArticleTagsListComponent, SceAsyncPageGateComponent, SceAttachmentsListComponent, SceAuthLayoutComponent, SceBarChartComponent, SceBasicCardComponent, SceBidiIsolate, SceBrandLoaderComponent, SceBulletListComponent, SceBusinessStatusTagComponent, SceButton, SceButtonWithSelectionCount, SceCaptchaInput, SceCardRadioGroupComponent, SceCardsListPageComponent, SceCardsStatisticsComponent, SceCategoryTile, SceChartLegendComponent, SceCheckItem, SceCheckbox, SceChoiceCard, SceCircularProgress, SceConfirmDialogComponent, SceConfirmDialogDemoComponent, SceContactFormPanelComponent, SceContactInfoPanelComponent, SceContentBlockComponent, SceContractQrCodeComponent, SceContractRequestCardComponent, SceCopyButtonComponent, SceCopyRight, SceCriteriaSectionComponent, SceCurrencyInputComponent, SceCustomColsDirective, SceDashboardAccountRoleIconComponent, SceDashboardFeatureComingSoonComponent, SceDashboardLayoutComponent, SceDashboardTableFiltersComponent, SceDataRequestComparisonTableComponent, SceDataRequestCurrentSummaryComponent, SceDataRequestHeaderCardComponent, SceDataRequestMediaComparisonComponent, SceDataRequestProjectChangesComponent, SceDataRequestRejectionPanelComponent, SceDateFieldComponent, SceDatePickerModalComponent, SceDetailHeaderComponent, SceDialogShellComponent, SceDialogShellDemoComponent, SceDivider, SceDonutChartComponent, SceDynamicFormComponent, SceEmptyStateComponent, SceEngineeringOfficeCardComponent, SceEngineeringOfficeCardSkeletonComponent, SceEngineeringOfficeVerificationBadgeComponent, SceEntityInfoCardComponent, SceEntityProfileEditFormComponent, SceEntitySummaryCardComponent, SceEntityTypeCard, SceExportPdfButton, SceExportPdfContainerComponent, SceFaqItemCard, SceFeaturedOfficeCardComponent, SceFeaturedOfficeCardSkeletonComponent, SceFeedbackSectionComponent, SceFieldComponent, SceFileUploadZoneComponent, SceFileUploadZoneDemoComponent, SceFileViewerComponent, SceFileViewerDirective, SceFileViewerService, SceFilterCalendarComponent, SceFilterCalendarRangeComponent, SceFilterDropdownComponent, SceFilterFieldIconComponent, SceFilterFormComponent, SceFormCheckboxRadio, SceFormDialogComponent, SceFormDialogSectionComponent, SceFormError, SceFormFieldsSkeletonComponent, SceFormHint, SceFormLabel, SceFormPageLayoutComponent, SceFormRichTextComponent, SceGaugeChartComponent, SceGearsLoaderComponent, SceGenericTableComponent, SceGenericTableDemoComponent, SceGeoLocationFieldComponent, SceGlobalLoadingBarComponent, SceGoogleMapsLocationPickerComponent, SceGridExpansionDirective, SceGridTableComponent, SceGuidedTourComponent, SceHorizontalBarChartComponent, SceHorizontalWizardStepperComponent, SceIcon, SceIconCard, SceImageGallerySwapperComponent, SceImagePickerComponent, SceInfoFieldCardComponent, SceInfoFieldsGridComponent, SceInfoFieldsSkeletonComponent, SceInfoRowComponent, SceInlineApiErrorComponent, SceInquiryRequestCardComponent, SceInternalUserFormFieldsComponent, SceInternalUserPermissionsSectionComponent, SceInternalUserVerifySectionComponent, SceKnowledgeCenterCategoryGridComponent, SceLandingHeroHeaderComponent, SceLandingMobileMenuComponent, SceLandingNavComponent, SceLangToggleComponent, SceLatestContractsTableComponent, SceLineChartComponent, SceListPageLayoutComponent, SceLocationPickerDialogComponent, SceLoginAccountSelectStepComponent, SceLoginCompleteDataStepComponent, SceLoginCredentialsStepComponent, SceLoginErrorStepComponent, SceLoginOtpStepComponent, SceLoginUserTypeStepComponent, SceLogoutModalComponent, SceModalHostComponent, SceMultiSegmentBarChartComponent, SceMultiSegmentGaugeComponent, SceMultiSelectFieldComponent, SceNavCard, SceNavCardsListComponent, SceNewsletterSubscriptionDialogComponent, SceNotificationListComponent, SceNotificationListSkeletonComponent, SceNotificationTypeBadgeComponent, SceOfficeBrandLogoComponent, SceOfficeDetailHeroBodyComponent, SceOfficeDetailLoadingStateComponent, SceOfficeDetailNotFoundComponent, SceOfficeDetailOverviewPanelComponent, SceOfficeDetailProjectsPanelComponent, SceOfficeDetailReviewsPanelComponent, SceOfficeDetailTabsBarComponent, SceOfficeDetailsSkeletonComponent, SceOfficeLocationMapComponent, SceOfficeMetricCardComponent, SceOfficeMetricCardsRowComponent, SceOfficeProfileContactTabComponent, SceOfficeProfileEditBioSectionComponent, SceOfficeProfileEditContactSectionComponent, SceOfficeProfileEditMediaSectionComponent, SceOfficeProfileEditOfficialSectionComponent, SceOfficeProfileEditProjectsSectionComponent, SceOfficeProfileHeroComponent, SceOfficeProfileOfficialTabComponent, SceOfficeProfileOverviewTabComponent, SceOfficeProfileProjectDeleteDialogComponent, SceOfficeProfileProjectEditorDialogComponent, SceOfficeProfileProjectsTabComponent, SceOfficeProfileStatsRowComponent, SceOfficeProfileSubmitResultComponent, SceOfficeProjectGalleryComponent, SceOfficeProjectsSkeletonComponent, SceOfficesFiltersSidebarComponent, SceOfficesGridPanelComponent, SceOfficesMapPanelComponent, SceOfficesViewToggleComponent, SceOfflineBannerComponent, SceOptionGroup, SceOsmLeafletMapComponent, SceOsmLocationPickerComponent, SceOsmOfficesMapComponent, SceOverviewStatCardComponent, SceOverviewStatSparklineComponent, ScePackageFeatureCard, ScePageErrorComponent, ScePageHeaderComponent, ScePaginatorComponent, ScePaginatorDemoComponent, ScePasswordFieldComponent, ScePendingUpdateBannerComponent, ScePhoneNumberComponent, ScePieChartComponent, ScePlatformSettingsFieldsComponent, SceProfileHeroComponent, SceProfileHeroSkeletonComponent, SceProfileInfoSectionComponent, SceProfilePhotoEditDialogComponent, SceProfilePhotoSectionComponent, SceProgressBar, SceProgressCardComponent, ScePublicLegalProseComponent, SceQuickFilterBarComponent, SceRadioButtonComponent, SceRadioGroup, SceRadioGroupOption, SceRadioOptionCard, SceRangeBar, SceRegisterLayoutComponent, SceRelatedCardsListComponent, SceRequestCardSkeletonComponent, SceRequestDetailsCardComponent, SceRequestHeaderComponent, SceResourcesListComponent, SceResultStateComponent, SceReviewFieldTablePanelComponent, SceRingChartComponent, SceRingLoaderComponent, SceRowActionIconComponent, SceSaveFilterPopupComponent, SceScaleIndicatorComponent, SceScrollToTopButtonComponent, SceSearchableUsersListComponent, SceSelectFieldComponent, SceSelectableListWithSearchComponent, SceSelectionButton, SceServiceCardComponent, SceServiceCardStartButtonComponent, SceServiceDetailSkeletonComponent, SceServiceMiniCardComponent, SceServiceMiniCardSkeletonComponent, SceServicesTopFiltersComponent, SceSettingsLayoutComponent, SceSidebarComponent, SceSkeleton, SceSpinner, SceStackedDistributionChartComponent, SceStamp, SceStarRatingInputComponent, SceStatCardSkeletonComponent, SceStatGaugeComponent, SceStatRingComponent, SceStatsAnalyticsCardComponent, SceStatusPageComponent, SceStoreLocationsComponent, SceSummaryCardComponent, SceSupportContactCard, SceSupportThreadComponent, SceSwitchComponent, SceTabPanel, SceTableSkeletonComponent, SceTagComponent, SceTextFieldComponent, SceTextareaFieldComponent, SceThemeSwitcherComponent, SceThemeToggleButtonComponent, SceTimelineComponent, SceTooltip, SceUnitInputComponent, SceUnitInputFieldComponent, SceUserDropdownPickerComponent, SceUserVerifySectionPanelComponent, SceVerticalStepperComponent, SceVideoPlayerComponent, Stepper, Tabs, TabsInkbarRtlDirective, addHijriMonths, buildCalendarGrid, buildDynamicFormGroup, buildFieldValidators, detectFileType, getHijriYmdFromDate, isDataUri, mimeFromDataUri, parseValueToDate, resolveBusinessStatusPresentation, resolveBusinessStatusTone, scheduleLeafletResize, toBusinessStatusTableCell, toGregorianValue, toHijriValue };
8006
+ export { Alert, Breadcrumb, Card, ColumnsEnum, DYNAMIC_MULTI_TYPES, DYNAMIC_NATIVE_TYPES, DashboardPageHeaderComponent, FileType, FormInput, LocalizedValuePipe, OtpInput, Popup, PopupModalBase, RESULT_STATE_ACTION_META, RESULT_STATE_PRESETS, SCE_MIRROR_LABEL_AS_PLACEHOLDER, SceAccordionComponent, SceAccountSwitcherComponent, SceAccountUserAssignDialogComponent, SceAccountUserDetailHeaderComponent, SceAccountUserEditDialogComponent, SceAccountUserPermissionsSectionComponent, SceAccountUserPersonalSectionComponent, SceAccountUserVerifyDialogComponent, SceAccountUsersTabsBarComponent, SceActionDialogComponent, SceApiErrorStateComponent, SceAreaChartComponent, SceArticleDetailComponent, SceArticleLayoutComponent, SceArticlePageComponent, SceArticleSidebarComponent, SceArticleTagsListComponent, SceAsyncPageGateComponent, SceAttachmentsListComponent, SceAuthLayoutComponent, SceBarChartComponent, SceBasicCardComponent, SceBidiIsolate, SceBrandLoaderComponent, SceBulletListComponent, SceBusinessStatusTagComponent, SceButton, SceButtonWithSelectionCount, SceCaptchaInput, SceCardRadioGroupComponent, SceCardsListPageComponent, SceCardsStatisticsComponent, SceCategoryTile, SceChartLegendComponent, SceCheckItem, SceCheckbox, SceChoiceCard, SceCircularProgress, SceConfirmDialogComponent, SceConfirmDialogDemoComponent, SceContactFormPanelComponent, SceContactInfoPanelComponent, SceContentBlockComponent, SceContractQrCodeComponent, SceContractRequestCardComponent, SceCopyButtonComponent, SceCopyRight, SceCriteriaSectionComponent, SceCurrencyInputComponent, SceCustomColsDirective, SceDashboardAccountRoleIconComponent, SceDashboardFeatureComingSoonComponent, SceDashboardLayoutComponent, SceDashboardTableFiltersComponent, SceDataRequestComparisonTableComponent, SceDataRequestCurrentSummaryComponent, SceDataRequestHeaderCardComponent, SceDataRequestMediaComparisonComponent, SceDataRequestProjectChangesComponent, SceDataRequestRejectionPanelComponent, SceDateFieldComponent, SceDatePickerModalComponent, SceDetailHeaderComponent, SceDialogShellComponent, SceDialogShellDemoComponent, SceDivider, SceDonutChartComponent, SceDynamicFormComponent, SceEmptyStateComponent, SceEngineeringOfficeCardComponent, SceEngineeringOfficeCardSkeletonComponent, SceEngineeringOfficeVerificationBadgeComponent, SceEntityInfoCardComponent, SceEntityProfileEditFormComponent, SceEntitySummaryCardComponent, SceEntityTypeCard, SceExportPdfButton, SceExportPdfContainerComponent, SceFaqItemCard, SceFeaturedOfficeCardComponent, SceFeaturedOfficeCardSkeletonComponent, SceFeedbackSectionComponent, SceFieldComponent, SceFileUploadZoneComponent, SceFileUploadZoneDemoComponent, SceFileViewerComponent, SceFileViewerDirective, SceFileViewerService, SceFilterCalendarComponent, SceFilterCalendarRangeComponent, SceFilterDropdownComponent, SceFilterFieldIconComponent, SceFilterFormComponent, SceFormCheckboxRadio, SceFormDialogComponent, SceFormDialogSectionComponent, SceFormError, SceFormFieldsSkeletonComponent, SceFormHint, SceFormLabel, SceFormPageLayoutComponent, SceFormRichTextComponent, SceGaugeChartComponent, SceGearsLoaderComponent, SceGenericTableComponent, SceGenericTableDemoComponent, SceGeoLocationFieldComponent, SceGlobalLoadingBarComponent, SceGoogleMapsLocationPickerComponent, SceGridExpansionDirective, SceGridTableComponent, SceGuidedTourComponent, SceHorizontalBarChartComponent, SceHorizontalWizardStepperComponent, SceIcon, SceIconCard, SceImageGallerySwapperComponent, SceImagePickerComponent, SceInfoFieldCardComponent, SceInfoFieldsGridComponent, SceInfoFieldsSkeletonComponent, SceInfoRowComponent, SceInlineApiErrorComponent, SceInquiryRequestCardComponent, SceInternalUserFormFieldsComponent, SceInternalUserPermissionsSectionComponent, SceInternalUserVerifySectionComponent, SceKnowledgeCenterCategoryGridComponent, SceLandingHeroHeaderComponent, SceLandingMobileMenuComponent, SceLandingNavComponent, SceLangToggleComponent, SceLatestContractsTableComponent, SceLibraryAccessDeniedComponent, SceLineChartComponent, SceListPageLayoutComponent, SceLocationPickerDialogComponent, SceLoginAccountSelectStepComponent, SceLoginCompleteDataStepComponent, SceLoginCredentialsStepComponent, SceLoginErrorStepComponent, SceLoginOtpStepComponent, SceLoginUserTypeStepComponent, SceLogoutModalComponent, SceModalHostComponent, SceMultiSegmentBarChartComponent, SceMultiSegmentGaugeComponent, SceMultiSelectFieldComponent, SceNavCard, SceNavCardsListComponent, SceNewsletterSubscriptionDialogComponent, SceNotificationListComponent, SceNotificationListSkeletonComponent, SceNotificationTypeBadgeComponent, SceOfficeBrandLogoComponent, SceOfficeDetailHeroBodyComponent, SceOfficeDetailLoadingStateComponent, SceOfficeDetailNotFoundComponent, SceOfficeDetailOverviewPanelComponent, SceOfficeDetailProjectsPanelComponent, SceOfficeDetailReviewsPanelComponent, SceOfficeDetailTabsBarComponent, SceOfficeDetailsSkeletonComponent, SceOfficeLocationMapComponent, SceOfficeMetricCardComponent, SceOfficeMetricCardsRowComponent, SceOfficeProfileContactTabComponent, SceOfficeProfileEditBioSectionComponent, SceOfficeProfileEditContactSectionComponent, SceOfficeProfileEditMediaSectionComponent, SceOfficeProfileEditOfficialSectionComponent, SceOfficeProfileEditProjectsSectionComponent, SceOfficeProfileHeroComponent, SceOfficeProfileOfficialTabComponent, SceOfficeProfileOverviewTabComponent, SceOfficeProfileProjectDeleteDialogComponent, SceOfficeProfileProjectEditorDialogComponent, SceOfficeProfileProjectsTabComponent, SceOfficeProfileStatsRowComponent, SceOfficeProfileSubmitResultComponent, SceOfficeProjectGalleryComponent, SceOfficeProjectsSkeletonComponent, SceOfficesFiltersSidebarComponent, SceOfficesGridPanelComponent, SceOfficesMapPanelComponent, SceOfficesViewToggleComponent, SceOfflineBannerComponent, SceOptionGroup, SceOsmLeafletMapComponent, SceOsmLocationPickerComponent, SceOsmOfficesMapComponent, SceOverviewStatCardComponent, SceOverviewStatSparklineComponent, ScePackageFeatureCard, ScePageErrorComponent, ScePageHeaderComponent, ScePaginatorComponent, ScePaginatorDemoComponent, ScePasswordFieldComponent, ScePendingUpdateBannerComponent, ScePhoneNumberComponent, ScePieChartComponent, ScePlatformSettingsFieldsComponent, SceProfileHeroComponent, SceProfileHeroSkeletonComponent, SceProfileInfoSectionComponent, SceProfilePhotoEditDialogComponent, SceProfilePhotoSectionComponent, SceProgressBar, SceProgressCardComponent, ScePublicLegalProseComponent, SceQuickFilterBarComponent, SceRadioButtonComponent, SceRadioGroup, SceRadioGroupOption, SceRadioOptionCard, SceRangeBar, SceRegisterLayoutComponent, SceRelatedCardsListComponent, SceRequestCardSkeletonComponent, SceRequestDetailsCardComponent, SceRequestHeaderComponent, SceResourcesListComponent, SceResultStateComponent, SceReviewFieldTablePanelComponent, SceRingChartComponent, SceRingLoaderComponent, SceRowActionIconComponent, SceSaveFilterPopupComponent, SceScaleIndicatorComponent, SceScrollToTopButtonComponent, SceSearchableUsersListComponent, SceSelectFieldComponent, SceSelectableListWithSearchComponent, SceSelectionButton, SceServiceCardComponent, SceServiceCardStartButtonComponent, SceServiceDetailSkeletonComponent, SceServiceMiniCardComponent, SceServiceMiniCardSkeletonComponent, SceServicesTopFiltersComponent, SceSettingsLayoutComponent, SceSidebarComponent, SceSkeleton, SceSpinner, SceStackedDistributionChartComponent, SceStamp, SceStarRatingInputComponent, SceStatCardSkeletonComponent, SceStatGaugeComponent, SceStatRingComponent, SceStatsAnalyticsCardComponent, SceStatusPageComponent, SceStoreLocationsComponent, SceSummaryCardComponent, SceSupportContactCard, SceSupportThreadComponent, SceSwitchComponent, SceTabPanel, SceTableSkeletonComponent, SceTagComponent, SceTextFieldComponent, SceTextareaFieldComponent, SceThemeSwitcherComponent, SceThemeToggleButtonComponent, SceTimelineComponent, SceTooltip, SceUnitInputComponent, SceUnitInputFieldComponent, SceUserDropdownPickerComponent, SceUserVerifySectionPanelComponent, SceVerticalStepperComponent, SceVideoPlayerComponent, Stepper, Tabs, TabsInkbarRtlDirective, addHijriMonths, buildCalendarGrid, buildDynamicFormGroup, buildFieldValidators, detectFileType, getHijriYmdFromDate, isDataUri, mimeFromDataUri, parseValueToDate, resolveBusinessStatusPresentation, resolveBusinessStatusTone, scheduleLeafletResize, toBusinessStatusTableCell, toGregorianValue, toHijriValue };
7602
8007
  export type { AccordionItem, AccountSwitcherOption, AccountUserAssignForm, AccountUserEditReadOnlyField, AccountUserEditRoleOption, AccountUsersTab, ActionDialogField, ActionDialogVariant, AppDateLocale, AssignRoleOption, BarSeriesData, BasicCardLayout, BidiIsolateDir, BreadcrumbItem, BusinessStatusPresentation, BusinessStatusTone, CalendarGrid, CalendarSystem, CardRadioOption, ChartLegendItem, ChartLineSeriesData, ChartSeriesItem, ChartTooltipData, ConfirmDialogVariant, ConfirmPayload, ConfirmReasonField, ContractRequestCard, ContractRow, DashboardFilterField, DashboardFilterFieldOption, DashboardNotificationTypeVariant, DashboardRole, DataRequestComparisonRow, DataRequestMediaVariant, DateRangeValue, DetailBreadcrumbItem, DetailHeaderAction, DialogSize, DynamicFieldConfig, DynamicFieldType, DynamicFieldValidators, DynamicFieldValue, DynamicFormConfig, DynamicFormSection, DynamicShowWhen, EChartTooltipParam, EmptyStateTone, EntityInfoCardBadgeTone, FeaturedOffice, FieldSize, FileSource, FileSourceBase64, FileSourceBlob, FileSourceUrl, FileTypeInput, FileUploadExistingItem, FileUploadZoneStrings, FileViewerData, FilterDateRangeValue, FilterDropdownOption, FilterFieldConfig, FilterFieldOption, FilterFieldType, FilterFormConfig, FormDialogSecondaryAction, FormDialogVariant, GeoLocationValue, GoogleMapsLocationValue, GridAction, GridActionType, GridColumn, GridColumnAction, GridMenuAction, GridMenuItem, GridPageEvent, GridRow, GridSortEvent, GuestProjectStatus, GuidedTourStep, HorizontalBarItem, IconSize, ImageGallerySwapperItem, InputFilter, InternalUserFormFieldsMode, InternalUserRoleOption, KnowledgeCategoryItem, LandingBreadcrumbItem, LandingNavItem, LoaderSize, LoaderVariant, LocationPickerValue, LoginAccountOptionView, LoginUserTypeCard, BreadcrumbItem$1 as MoleculeBreadcrumbItem, MultiSegmentBarItem, NewsletterSubscriptionFormValues, TabItem as OfficeDetailTabItem, OfficeEditProjectItem, OfficeGridViewMode, OfficeMetricCardItem, OfficeProfileDisplayProject, OfficeProfileTabKey, OfficeProject, OfficeReview, OfficeSizeFilter, OfficeSizeOption, OfficeSortMode, OfficeSortOption, OfficeTabKey, OfficeViewMode, OsmMapMarker, OverlayLineSeries, ProfileBankOption, ProfileInfoViewData, ProfileViewField, ProfileViewSection, ProgressConfig, ProjectChangeDisplayItem, ProjectChangeDisplayMetric, ProjectChangeDisplayType, PsSettingField, PsSettingForceMajeureDurationsValue, QuickFilterTag as QuickFilterBarTag, QuickFilterTag$1 as QuickFilterTag, RatingDistributionLine, RequestHeaderMetaItem, RequestStatusPresentation, RestrictInput, ResultStateAction, ResultStatePreset, ResultStateStatus, ReviewFieldItem, RingChartLegendItem, SaveFilterMode, ScaleIndicatorLabels, SceArticleTagItem, SceArticleTagVariant, SceAttachmentListItem, SceButtonSize, SceButtonVariant, SceChoiceCardTone, SceCriteriaItem, SceCriteriaObservation, SceCriteriaSectionData, SceCriteriaStatus, SceEngineeringOfficeCardModel, SceEntitySummarySector, SceFaqItemCardForm, SceFieldOption, SceFormCheckboxRadioType, SceIconCardTone, SceImagePickerError, SceInquiryRequest, SceInquiryRequestStatus, SceNavBadgeVariant, SceNavCardItem, SceNavChildItem, SceNavItem, SceNavSection, SceNotificationAction, SceNotificationFilter, SceNotificationItem, SceNotificationTone, SceOptionItem, SceOsmOfficeMapPoint, SceRadioOption, SceRangeBarValue, SceRelatedCardItem, SceResourceListItem, SceSelectOption, SceSidebarBrand, SceSidebarRailAction, SceSupportResponderRole, SceSupportThreadAttachment, SceSupportThreadFeedback, SceSupportThreadReply, SceSupportThreadResponse, SceSupportThreadStatus, SceTableColumn, SceTablePagination, SceTableRow, SceTableRowActions, SceTableSkeletonLayout, SceTableSort, SceTableStatusCell, SceTableSwitchCell, SceTagSize, SceTagVariant, SceTextFieldValidationMode, SceUserDropdownItem, SearchableUserListItem, SelectOption, SelectableListItem, SelectionMode, ServicesTopFiltersChange, SkeletonAnimation, SkeletonVariant, StackedDistributionChartItem, StatGaugeRow, StatusConfig, StatusPageVariant, StatusVariant, StepItem$1 as StepItem, StepItem as StepperStepItem, TabItem$1 as TabItem, TimelineItem, TimelineSegment, TooltipPosition, UserDetailBadge, UserDetailField, UserDetailStatusTag, VerifiedUserData, VerifyPayload, VideoCaption, VideoPreload, VideoSource };