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