@a.nemreen/dga-ui 0.3.1 → 0.3.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.
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Type, Provider, OnDestroy, OnInit } from '@angular/core';
3
- import { SafeHtml } from '@angular/platform-browser';
3
+ import { SafeHtml, SafeResourceUrl } from '@angular/platform-browser';
4
4
  import { ControlValueAccessor } from '@angular/forms';
5
5
  export { ControlValueAccessor } from '@angular/forms';
6
6
  import * as _a_nemreen_dga_ui from '@a.nemreen/dga-ui';
@@ -26,7 +26,6 @@ declare class DgaPageTransition {
26
26
  private readonly host;
27
27
  private readonly doc;
28
28
  private readonly destroyRef;
29
- private readonly a11y;
30
29
  private readonly router;
31
30
  /** Named creative transition. Unknown values resolve to `none`. */
32
31
  readonly name: _angular_core.InputSignal<string>;
@@ -40,7 +39,7 @@ declare class DgaPageTransition {
40
39
  */
41
40
  readonly key: _angular_core.InputSignal<string | number | null>;
42
41
  readonly phase: _angular_core.WritableSignal<"idle" | "enter">;
43
- readonly resolvedName: _angular_core.Signal<"none" | "fade-up" | "slide-stack" | "curtain-wipe" | "zoom-blur" | "book-flip" | "circle-reveal" | "shared-axis" | "glitch" | "iris-open" | "split-reveal" | "stagger-cascade" | "liquid-swipe" | "push-depth" | "skew-slide" | "bounce-in" | "film-strip" | "portal-warp" | "ripple-expand" | "origami-fold" | "swipe-cards">;
42
+ readonly resolvedName: _angular_core.Signal<"fade-up" | "slide-stack" | "curtain-wipe" | "zoom-blur" | "book-flip" | "circle-reveal" | "shared-axis" | "glitch" | "iris-open" | "split-reveal" | "stagger-cascade" | "liquid-swipe" | "push-depth" | "skew-slide" | "bounce-in" | "film-strip" | "portal-warp" | "ripple-expand" | "origami-fold" | "swipe-cards" | "none">;
44
43
  readonly durationCss: _angular_core.Signal<string>;
45
44
  private htmlAttr;
46
45
  private keyPrimed;
@@ -53,6 +52,46 @@ declare class DgaPageTransition {
53
52
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPageTransition, "dga-page-transition", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "key": { "alias": "key"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
54
53
  }
55
54
 
55
+ type DgaWritingEffect = 'typewriter' | 'glow';
56
+ /**
57
+ * Headline motion: typewriter reveal or soft glow / light sweep.
58
+ *
59
+ * ```html
60
+ * <dga-writing text="Hello world" effect="glow" />
61
+ * <dga-writing text="Hello world" [speed]="28" cursor />
62
+ * ```
63
+ *
64
+ * Honors `prefers-reduced-motion` and DGA a11y `reduce-motion`.
65
+ */
66
+ declare class DgaWriting {
67
+ private readonly doc;
68
+ private readonly destroyRef;
69
+ /** Full string to type / glow. */
70
+ readonly text: _angular_core.InputSignal<string>;
71
+ /** `typewriter` (default) or soft light sweep `glow`. */
72
+ readonly effect: _angular_core.InputSignal<DgaWritingEffect>;
73
+ /** Milliseconds per character (typewriter only). */
74
+ readonly speed: _angular_core.InputSignalWithTransform<number, unknown>;
75
+ /** Delay before the first character (typewriter only). */
76
+ readonly delay: _angular_core.InputSignalWithTransform<number, unknown>;
77
+ /** Blinking caret while typing (typewriter only). */
78
+ readonly cursor: _angular_core.InputSignalWithTransform<boolean, unknown>;
79
+ /** Skip motion entirely. */
80
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
81
+ readonly displayed: _angular_core.WritableSignal<string>;
82
+ readonly phase: _angular_core.WritableSignal<"idle" | "writing" | "done">;
83
+ private timer;
84
+ private charIndex;
85
+ readonly showCursor: _angular_core.Signal<boolean>;
86
+ constructor();
87
+ private start;
88
+ private tick;
89
+ private clearTimer;
90
+ private shouldReduceMotion;
91
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaWriting, never>;
92
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaWriting, "dga-writing", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "effect": { "alias": "effect"; "required": false; "isSignal": true; }; "speed": { "alias": "speed"; "required": false; "isSignal": true; }; "delay": { "alias": "delay"; "required": false; "isSignal": true; }; "cursor": { "alias": "cursor"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
93
+ }
94
+
56
95
  type DgaButtonVariant = 'primary' | 'secondary' | 'subtle' | 'outline' | 'outlineMuted' | 'outlineInverse' | 'ghost' | 'danger' | 'inverse';
57
96
  type DgaButtonSize = 'sm' | 'md' | 'lg';
58
97
  declare class DgaButton {
@@ -236,14 +275,18 @@ declare class DgaAvatar {
236
275
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAvatar, "dga-avatar", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
237
276
  }
238
277
 
278
+ /**
279
+ * Curated inline icons for `@a.nemreen/dga-ui` chrome (buttons, fields, menus, …).
280
+ * SVGs are vendored at build time — no runtime `@platformscode/icons` dependency.
281
+ *
282
+ * Content / editorial icons: opt into `@a.nemreen/dga-tokens/styles/icon-font.css` and use
283
+ * `<dga-icon glyph="search-01" />` (or `hgi-stroke hgi-{name}` classes).
284
+ *
285
+ * Regenerated by: node scripts/vendor-dga-icons.mjs
286
+ */
239
287
  type DgaIconName = 'access' | 'check' | 'close' | 'info' | 'helpCircle' | 'warning' | 'alertCircle' | 'error' | 'eye' | 'eyeOff' | 'eyeOffSlash' | 'filter' | 'success' | 'checkCircle' | 'checkCircleAlt' | 'chevronDown' | 'chevronLeft' | 'chevronRight' | 'arrowUp' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'arrowUp02' | 'arrowDown02' | 'arrowLeft02' | 'arrowRight02' | 'arrowNext' | 'arrowPrev' | 'arrowNext02' | 'arrowPrev02' | 'shrink' | 'search' | 'user' | 'users' | 'menu' | 'menuAlt' | 'moreHorizontal' | 'moreVertical' | 'mic' | 'home' | 'download' | 'upload' | 'calendar' | 'calendarAlt' | 'clock' | 'star' | 'starFilled' | 'plus' | 'plusSign' | 'minus' | 'external' | 'bell' | 'bellAlt' | 'lock' | 'lockPassword' | 'logout' | 'idCard' | 'link' | 'linkAlt' | 'globe' | 'moon' | 'moonAlt' | 'sun' | 'sunAlt' | 'translation' | 'mail' | 'message' | 'phone' | 'building' | 'share' | 'refresh' | 'highlighter' | 'door' | 'zoomIn' | 'zoomOut' | 'sort' | 'sortUp' | 'sortDown' | 'tradeUp' | 'tradeDown' | 'paintBoard' | 'cloud' | 'sunCloud' | 'moonCloud' | 'rain' | 'rainZap' | 'snow' | 'wind' | 'desert' | 'cart' | 'award' | 'cookie' | 'x' | 'linkedin' | 'whatsapp' | 'book' | 'headphones' | 'devices' | 'badgeCheck' | 'riyal' | 'copy' | 'location' | 'folder' | 'printer' | 'instagram' | 'smartphone' | 'ambulance' | 'police' | 'fire' | 'facebook' | 'youtube' | 'apple' | 'playStore' | 'huawei' | 'textFont' | 'glasses' | 'heading' | 'mask' | 'pause' | 'textAlign' | 'letterSpacing' | 'textUnderline' | 'maximize' | 'colors' | 'colorPicker' | 'droplet' | 'disability' | 'wheelchair' | 'brain' | 'flash' | 'touch';
240
- /** Decode `@platformscode/icons` data-URI exports into inline SVG markup. */
241
- declare function decodePlatformscodeSvg(dataUri: string): string;
242
- /** Pre-decoded SVG markup keyed by friendly `DgaIconName`. */
243
288
  declare const DGA_ICON_SVG: Record<DgaIconName, string>;
244
- /** Sorted list of curated chrome icon names (for docs / pickers). */
245
289
  declare const DGA_ICON_NAMES: DgaIconName[];
246
- /** Names that mirror with reading direction (use for next/back affordances). */
247
290
  declare const DGA_LOGICAL_ICON_NAMES: Set<DgaIconName>;
248
291
 
249
292
  /**
@@ -315,6 +358,7 @@ declare class DgaIconBadge {
315
358
  type DgaFormStatus = 'default' | 'error' | 'success' | 'warning' | 'info';
316
359
  /** Shared size scale — sm≈32px, md≈40px, lg=48px. */
317
360
  type DgaFormControlSize = 'sm' | 'md' | 'lg';
361
+ declare function dgaFormStatusFromInvalid(invalid: boolean): DgaFormStatus;
318
362
 
319
363
  type DgaInputSize = DgaFormControlSize;
320
364
 
@@ -802,208 +846,6 @@ declare class DgaMultiselect {
802
846
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMultiselect, "dga-multiselect", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
803
847
  }
804
848
 
805
- /** Calendar system for date values and the picker UI. */
806
- type DgaDateCalendar = 'gregorian' | 'hijri';
807
- /** Picker UI mode — inferred from `format` tokens when not set explicitly. */
808
- type DgaDatePickerMode = 'day' | 'month' | 'year';
809
- type DgaDateLocale = 'ar' | 'en';
810
- interface DgaCalendarParts {
811
- year: number;
812
- month: number;
813
- day: number;
814
- }
815
- declare const DGA_HIJRI_MONTHS: {
816
- readonly ar: readonly ["محرم", "صفر", "ربيع الأول", "ربيع الثاني", "جمادى الأولى", "جمادى الآخرة", "رجب", "شعبان", "رمضان", "شوال", "ذو القعدة", "ذو الحجة"];
817
- readonly en: readonly ["Muharram", "Safar", "Rabi I", "Rabi II", "Jumada I", "Jumada II", "Rajab", "Sha'ban", "Ramadan", "Shawwal", "Dhu al-Qi'dah", "Dhu al-Hijjah"];
818
- };
819
- declare const DGA_GREGORIAN_MONTHS: {
820
- readonly ar: readonly ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"];
821
- readonly en: readonly ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
822
- };
823
- declare const DGA_WEEKDAYS: {
824
- readonly ar: readonly ["أحد", "إثن", "ثلا", "أرب", "خمي", "جمع", "سبت"];
825
- readonly en: readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
826
- };
827
- /** Read calendar parts for a Date (UTC day). */
828
- declare function dgaGetCalendarParts(date: Date, calendar: DgaDateCalendar): DgaCalendarParts;
829
- /**
830
- * Convert calendar parts to a Date (UTC midnight).
831
- * Hijri conversion uses binary search against islamic-umalqura.
832
- */
833
- declare function dgaPartsToDate(parts: DgaCalendarParts, calendar: DgaDateCalendar): Date;
834
- declare function dgaDaysInMonth(year: number, month: number, calendar: DgaDateCalendar): number;
835
- declare function dgaAddMonths(parts: DgaCalendarParts, delta: number, calendar: DgaDateCalendar): DgaCalendarParts;
836
- /** Infer mode from format tokens (YYYY / MM / DD). */
837
- declare function dgaModeFromFormat(format: string): DgaDatePickerMode;
838
- declare function dgaFormatDate(date: Date, format: string, calendar: DgaDateCalendar): string;
839
- declare function dgaParseDate(value: string, format: string, calendar: DgaDateCalendar): Date | null;
840
- declare function dgaSameDay(a: Date | null, b: Date | null, calendar?: DgaDateCalendar): boolean;
841
- declare function dgaCompareDays(a: Date | null, b: Date | null, calendar?: DgaDateCalendar): number;
842
- declare function dgaClampDate(date: Date, min?: Date | null, max?: Date | null, calendar?: DgaDateCalendar): Date;
843
- declare function dgaMonthNames(calendar: DgaDateCalendar, locale: 'ar' | 'en'): readonly string[];
844
- /** First weekday (0=Sun) of the given calendar month. */
845
- declare function dgaMonthStartWeekday(year: number, month: number, calendar: DgaDateCalendar): number;
846
- declare function dgaTodayUtc(): Date;
847
- /** Coerce string | Date | null to UTC date using format when string. */
848
- declare function dgaCoerceDate(value: string | Date | null | undefined, format: string, calendar: DgaDateCalendar): Date | null;
849
-
850
- interface DgaDateRangeValue {
851
- start: string;
852
- end: string;
853
- }
854
- type PanelView = DgaDatePickerMode;
855
- declare class DgaDatePickerComponent implements ControlValueAccessor {
856
- private readonly host;
857
- private readonly destroyRef;
858
- readonly inputId: string;
859
- readonly panelId: string;
860
- readonly valueInput: _angular_core.InputSignal<string>;
861
- readonly value: _angular_core.WritableSignal<string>;
862
- readonly startValue: _angular_core.ModelSignal<string>;
863
- readonly endValue: _angular_core.ModelSignal<string>;
864
- private onChange;
865
- private onTouched;
866
- readonly calendar: _angular_core.InputSignal<DgaDateCalendar>;
867
- readonly range: _angular_core.InputSignalWithTransform<boolean, unknown>;
868
- readonly format: _angular_core.InputSignal<string>;
869
- readonly mode: _angular_core.InputSignal<DgaDatePickerMode | null>;
870
- readonly locale: _angular_core.InputSignal<DgaDateLocale>;
871
- readonly minDate: _angular_core.InputSignal<string | Date | null>;
872
- readonly maxDate: _angular_core.InputSignal<string | Date | null>;
873
- readonly yearBefore: _angular_core.InputSignal<number>;
874
- readonly yearAfter: _angular_core.InputSignal<number>;
875
- readonly placeholder: _angular_core.InputSignal<string>;
876
- readonly controlId: _angular_core.InputSignal<string>;
877
- readonly name: _angular_core.InputSignal<string>;
878
- readonly size: _angular_core.InputSignal<DgaFormControlSize>;
879
- readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
880
- private readonly cvaDisabled;
881
- readonly disabled: _angular_core.Signal<boolean>;
882
- readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
883
- readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
884
- readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
885
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
886
- readonly status: _angular_core.InputSignal<DgaFormStatus>;
887
- readonly rangeSeparator: _angular_core.InputSignal<string>;
888
- readonly todayLabel: _angular_core.InputSignal<string>;
889
- readonly clearLabel: _angular_core.InputSignal<string>;
890
- readonly closeLabel: _angular_core.InputSignal<string>;
891
- readonly saveLabel: _angular_core.InputSignal<string>;
892
- readonly ariaLabel: _angular_core.InputSignal<string>;
893
- readonly resolvedTodayLabel: _angular_core.Signal<string>;
894
- readonly resolvedClearLabel: _angular_core.Signal<string>;
895
- readonly resolvedCloseLabel: _angular_core.Signal<string>;
896
- readonly resolvedSaveLabel: _angular_core.Signal<string>;
897
- readonly valueChange: _angular_core.OutputEmitterRef<string>;
898
- readonly rangeChange: _angular_core.OutputEmitterRef<DgaDateRangeValue>;
899
- readonly open: _angular_core.WritableSignal<boolean>;
900
- readonly panelStyle: _angular_core.WritableSignal<Record<string, string>>;
901
- readonly panelView: _angular_core.WritableSignal<DgaDatePickerMode>;
902
- readonly viewParts: _angular_core.WritableSignal<DgaCalendarParts>;
903
- readonly draftStart: _angular_core.WritableSignal<Date | null>;
904
- readonly draftEnd: _angular_core.WritableSignal<Date | null>;
905
- readonly rangePickPhase: _angular_core.WritableSignal<"end" | "start">;
906
- readonly typedValue: _angular_core.WritableSignal<string | null>;
907
- readonly effectiveStatus: _angular_core.Signal<DgaFormStatus>;
908
- readonly panelMode: _angular_core.Signal<DgaDatePickerMode>;
909
- readonly labels: _angular_core.Signal<{
910
- readonly today: "اليوم";
911
- readonly clear: "مسح";
912
- readonly close: "إغلاق";
913
- readonly save: "حفظ";
914
- readonly prev: "السابق";
915
- readonly next: "التالي";
916
- readonly calendar: "فتح التقويم";
917
- readonly clearInput: "مسح التاريخ";
918
- readonly month: "الشهر";
919
- readonly year: "السنة";
920
- readonly placeholder: "يوم/شهر/سنة";
921
- readonly rangeStart: "تاريخ البداية";
922
- readonly rangeEnd: "تاريخ النهاية";
923
- } | {
924
- readonly today: "Today";
925
- readonly clear: "Clear";
926
- readonly close: "Close";
927
- readonly save: "Save";
928
- readonly prev: "Previous";
929
- readonly next: "Next";
930
- readonly calendar: "Open calendar";
931
- readonly clearInput: "Clear date";
932
- readonly month: "Month";
933
- readonly year: "Year";
934
- readonly placeholder: "DD/MM/YYYY";
935
- readonly rangeStart: "Start date";
936
- readonly rangeEnd: "End date";
937
- }>;
938
- readonly resolvedPlaceholder: _angular_core.Signal<string>;
939
- readonly weekdays: _angular_core.Signal<readonly ["أحد", "إثن", "ثلا", "أرب", "خمي", "جمع", "سبت"] | readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]>;
940
- readonly minBound: _angular_core.Signal<Date | null>;
941
- readonly maxBound: _angular_core.Signal<Date | null>;
942
- readonly displayValue: _angular_core.Signal<string>;
943
- readonly viewYear: _angular_core.Signal<number>;
944
- readonly viewMonth: _angular_core.Signal<number>;
945
- readonly monthOptions: _angular_core.Signal<{
946
- value: number;
947
- label: string;
948
- selected: boolean;
949
- disabled: boolean;
950
- }[]>;
951
- readonly yearOptions: _angular_core.Signal<{
952
- value: number;
953
- selected: boolean;
954
- disabled: boolean;
955
- }[]>;
956
- readonly dayCells: _angular_core.Signal<DayCell[]>;
957
- constructor();
958
- onDocumentClick(event: MouseEvent): void;
959
- onEscape(): void;
960
- onReposition(): void;
961
- monthLabel(month: number): string;
962
- togglePanel(): void;
963
- openPanel(): void;
964
- closePanel(restoreDraft?: boolean): void;
965
- private repositionPanel;
966
- navigate(delta: number): void;
967
- setPanelView(view: PanelView): void;
968
- selectDay(day: number): void;
969
- selectMonth(month: number): void;
970
- selectYear(year: number): void;
971
- goToday(): void;
972
- clearDraft(): void;
973
- clearAll(): void;
974
- save(): void;
975
- onInput(raw: string): void;
976
- onInputBlur(): void;
977
- onInputKeydown(event: KeyboardEvent): void;
978
- private applyDraftDate;
979
- private draftAnchorParts;
980
- private syncDraftFromModels;
981
- private parseRangeFromValue;
982
- private emitValues;
983
- writeValue(value: string): void;
984
- registerOnChange(fn: (value: string) => void): void;
985
- registerOnTouched(fn: () => void): void;
986
- setDisabledState(isDisabled: boolean): void;
987
- private isDateDisabled;
988
- private isMonthDisabled;
989
- private isYearDisabled;
990
- private initialViewParts;
991
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDatePickerComponent, never>;
992
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDatePickerComponent, "dga-date-picker", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "startValue": { "alias": "startValue"; "required": false; "isSignal": true; }; "endValue": { "alias": "endValue"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "yearBefore": { "alias": "yearBefore"; "required": false; "isSignal": true; }; "yearAfter": { "alias": "yearAfter"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "saveLabel": { "alias": "saveLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "startValue": "startValueChange"; "endValue": "endValueChange"; "valueChange": "valueChange"; "rangeChange": "rangeChange"; }, never, never, true, never>;
993
- }
994
- interface DayCell {
995
- key: string;
996
- empty: boolean;
997
- day?: number;
998
- today?: boolean;
999
- selected?: boolean;
1000
- inRange?: boolean;
1001
- rangeStart?: boolean;
1002
- rangeEnd?: boolean;
1003
- disabled?: boolean;
1004
- label?: string;
1005
- }
1006
-
1007
849
  type DgaTimePickerSize = DgaNativeSelectSize;
1008
850
  type DgaTimePickerFormat = '24h' | '12h';
1009
851
  declare function pad2(n: number): string;
@@ -1176,7 +1018,7 @@ declare class DgaToast implements OnDestroy {
1176
1018
  readonly edgeTop: _angular_core.Signal<"calc(var(--dga-announcement-offset, 0px) + 1rem)" | null>;
1177
1019
  readonly edgeBottom: _angular_core.Signal<"1rem" | null>;
1178
1020
  readonly iconName: _angular_core.Signal<DgaIconName>;
1179
- readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
1021
+ readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1180
1022
  readonly showCountdown: _angular_core.Signal<boolean>;
1181
1023
  readonly reduceMotion: _angular_core.WritableSignal<boolean>;
1182
1024
  readonly ringDashOffset: _angular_core.Signal<number>;
@@ -1798,7 +1640,7 @@ declare class DgaAlert {
1798
1640
  readonly titleClasses: _angular_core.Signal<string>;
1799
1641
  readonly descriptionClasses: _angular_core.Signal<string>;
1800
1642
  readonly iconName: _angular_core.Signal<DgaIconName>;
1801
- readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
1643
+ readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1802
1644
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1803
1645
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAlert, "dga-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, ["*", "[dgaAlertActions]"], true, never>;
1804
1646
  }
@@ -1912,204 +1754,11 @@ declare class DgaPageFeedback {
1912
1754
  onSubmit(event: Event): void;
1913
1755
  /** From details → idle; from thanks → dismiss the panel. */
1914
1756
  close(): void;
1757
+ safeHref(href: string | undefined | null): string;
1915
1758
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPageFeedback, never>;
1916
1759
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPageFeedback, "dga-page-feedback", never, { "question": { "alias": "question"; "required": false; "isSignal": true; }; "yesLabel": { "alias": "yesLabel"; "required": false; "isSignal": true; }; "noLabel": { "alias": "noLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "whyLabel": { "alias": "whyLabel"; "required": false; "isSignal": true; }; "whyHint": { "alias": "whyHint"; "required": false; "isSignal": true; }; "genderLabel": { "alias": "genderLabel"; "required": false; "isSignal": true; }; "commentLabel": { "alias": "commentLabel"; "required": false; "isSignal": true; }; "commentPlaceholder": { "alias": "commentPlaceholder"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "statistic": { "alias": "statistic"; "required": false; "isSignal": true; }; "thankYouMessage": { "alias": "thankYouMessage"; "required": false; "isSignal": true; }; "agreementBefore": { "alias": "agreementBefore"; "required": false; "isSignal": true; }; "participationLabel": { "alias": "participationLabel"; "required": false; "isSignal": true; }; "participationHref": { "alias": "participationHref"; "required": false; "isSignal": true; }; "agreementAnd": { "alias": "agreementAnd"; "required": false; "isSignal": true; }; "rulesLabel": { "alias": "rulesLabel"; "required": false; "isSignal": true; }; "rulesHref": { "alias": "rulesHref"; "required": false; "isSignal": true; }; "agreementAfter": { "alias": "agreementAfter"; "required": false; "isSignal": true; }; "defaultAgreement": { "alias": "defaultAgreement"; "required": false; "isSignal": true; }; "yesReasons": { "alias": "yesReasons"; "required": false; "isSignal": true; }; "noReasons": { "alias": "noReasons"; "required": false; "isSignal": true; }; "genderOptions": { "alias": "genderOptions"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; }, { "submitted": "submitted"; "closed": "closed"; }, never, ["[dgaPageFeedbackAgreement]"], true, never>;
1917
1760
  }
1918
1761
 
1919
- /** Stored consent outcome. `custom` = per-category preferences were saved. */
1920
- type DgaCookieConsent = 'accepted' | 'declined' | 'custom' | null;
1921
- /** Horizontal placement. Logical `start`/`end` follow reading direction. */
1922
- type DgaCookiesAlign = 'start' | 'center' | 'end';
1923
- /**
1924
- * Banner anchor on the viewport.
1925
- * - `start` | `center` | `end` → bottom edge + that alignment (compact)
1926
- * - `bottom` | `top` → that edge, centered
1927
- * - `bottom-start` / `top-end` / … → explicit edge + alignment
1928
- */
1929
- type DgaCookiesPosition = DgaCookiesAlign | 'bottom' | 'top' | 'bottom-start' | 'bottom-center' | 'bottom-end' | 'top-start' | 'top-center' | 'top-end';
1930
- /** Optional cookie category for granular consent (GDPR-style preferences). */
1931
- interface DgaCookieCategory {
1932
- id: string;
1933
- label: string;
1934
- description?: string;
1935
- /** Always enabled; toggle is disabled. */
1936
- required?: boolean;
1937
- /** Initial state when no stored preference exists (ignored when `required`). */
1938
- defaultEnabled?: boolean;
1939
- }
1940
- type DgaCookiePreferences = Record<string, boolean>;
1941
- interface DgaCookieDecision {
1942
- consent: Exclude<DgaCookieConsent, null>;
1943
- preferences: DgaCookiePreferences;
1944
- }
1945
- /**
1946
- * Privacy-compliant cookie consent banner.
1947
- * Persists choice (default 365 days); optional category preferences and GA gating.
1948
- */
1949
- declare class DgaCookies implements OnInit {
1950
- private readonly destroyRef;
1951
- private readonly hostRef;
1952
- /** Original parent before body portal (restored on destroy). */
1953
- private portalHome;
1954
- readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
1955
- /**
1956
- * Viewport anchor. Use `start` / `center` / `end` for bottom placement,
1957
- * or compound values like `top-end`. Prefer `align` to set horizontal only.
1958
- */
1959
- readonly position: _angular_core.InputSignal<DgaCookiesPosition>;
1960
- /** Horizontal alignment (`start` | `center` | `end`). Overrides `position` when set. */
1961
- readonly align: _angular_core.InputSignal<"" | DgaCookiesAlign>;
1962
- /** Auto-open delay when no consent is stored. `0` disables auto-show. */
1963
- readonly delayMs: _angular_core.InputSignal<number>;
1964
- /** When false, never auto-opens (call `show()` manually). */
1965
- readonly autoShow: _angular_core.InputSignalWithTransform<boolean, unknown>;
1966
- /** Show the dismiss (X) control. Dismiss does not persist a decision. */
1967
- readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1968
- /** Show the reject / decline non-essential button. */
1969
- readonly showDecline: _angular_core.InputSignalWithTransform<boolean, unknown>;
1970
- /** Show policy / terms links row. */
1971
- readonly showLinks: _angular_core.InputSignalWithTransform<boolean, unknown>;
1972
- /** Show Customize when `categories` are provided. */
1973
- readonly showCustomize: _angular_core.InputSignalWithTransform<boolean, unknown>;
1974
- /** Dim the page behind the banner (modal-style overlay). */
1975
- readonly overlay: _angular_core.InputSignalWithTransform<boolean, unknown>;
1976
- /**
1977
- * @deprecated Prefer `overlay`. Same behavior — kept for backward compatibility.
1978
- */
1979
- readonly blocking: _angular_core.InputSignalWithTransform<boolean, unknown>;
1980
- /** Close the banner when the overlay backdrop is clicked (requires dismissible). */
1981
- readonly overlayClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
1982
- readonly termsHref: _angular_core.InputSignal<string>;
1983
- readonly privacyHref: _angular_core.InputSignal<string>;
1984
- /** Optional third policy link (cookie policy). Empty hides it. */
1985
- readonly cookiePolicyHref: _angular_core.InputSignal<string>;
1986
- readonly termsLabel: _angular_core.InputSignal<string>;
1987
- readonly privacyLabel: _angular_core.InputSignal<string>;
1988
- readonly cookiePolicyLabel: _angular_core.InputSignal<string>;
1989
- readonly title: _angular_core.InputSignal<string>;
1990
- readonly description: _angular_core.InputSignal<string>;
1991
- readonly acceptLabel: _angular_core.InputSignal<string>;
1992
- readonly declineLabel: _angular_core.InputSignal<string>;
1993
- readonly customizeLabel: _angular_core.InputSignal<string>;
1994
- readonly saveLabel: _angular_core.InputSignal<string>;
1995
- readonly icon: _angular_core.InputSignal<DgaIconName>;
1996
- /** Google Analytics IDs to disable on decline / when analytics is off. */
1997
- readonly gaTrackingIds: _angular_core.InputSignal<string | readonly string[]>;
1998
- /** Consent cookie lifetime in days. */
1999
- readonly consentDays: _angular_core.InputSignal<number>;
2000
- /** Consent cookie name (also used as localStorage key prefix). */
2001
- readonly consentCookieName: _angular_core.InputSignal<string>;
2002
- /** Extra cookies to delete when analytics/marketing is denied. */
2003
- readonly analyticsCookieNames: _angular_core.InputSignal<readonly string[]>;
2004
- /** Granular categories. When set, Customize / Save Preferences become available. */
2005
- readonly categories: _angular_core.InputSignal<readonly DgaCookieCategory[]>;
2006
- readonly accepted: _angular_core.OutputEmitterRef<void>;
2007
- readonly declined: _angular_core.OutputEmitterRef<void>;
2008
- readonly closed: _angular_core.OutputEmitterRef<void>;
2009
- readonly decided: _angular_core.OutputEmitterRef<"accepted" | "declined" | "custom">;
2010
- readonly preferencesChange: _angular_core.OutputEmitterRef<DgaCookiePreferences>;
2011
- readonly decision: _angular_core.OutputEmitterRef<DgaCookieDecision>;
2012
- /** Controls enter/exit animation state. */
2013
- readonly visible: _angular_core.WritableSignal<boolean>;
2014
- /** Keeps the panel in the DOM while exit animation plays. */
2015
- readonly mounted: _angular_core.WritableSignal<boolean>;
2016
- /** Whether the category preferences panel is expanded. */
2017
- readonly customizing: _angular_core.WritableSignal<boolean>;
2018
- /** Draft toggles while customizing. */
2019
- readonly draftPrefs: _angular_core.WritableSignal<DgaCookiePreferences>;
2020
- private readonly seq;
2021
- readonly titleId: string;
2022
- readonly bodyId: string;
2023
- private openTimer;
2024
- private closeTimer;
2025
- readonly copy: _angular_core.Signal<{
2026
- title: string;
2027
- body: string;
2028
- terms: string;
2029
- privacy: string;
2030
- cookiePolicy: string;
2031
- accept: string;
2032
- acceptAll: string;
2033
- decline: string;
2034
- customize: string;
2035
- save: string;
2036
- categories: string;
2037
- policies: string;
2038
- close: string;
2039
- }>;
2040
- readonly resolvedCategories: _angular_core.Signal<DgaCookieCategory[]>;
2041
- readonly resolvedLinks: _angular_core.Signal<{
2042
- href: string;
2043
- label: string;
2044
- }[]>;
2045
- /**
2046
- * Accept + Decline share a row; Customize / Save spans full width underneath
2047
- * so Arabic labels stay on one line. Actions stay pinned below the scroll body.
2048
- */
2049
- readonly actionsClasses: _angular_core.Signal<string>;
2050
- /** Resolved vertical edge + horizontal align (logical start/end). */
2051
- readonly placement: _angular_core.Signal<{
2052
- edge: "top" | "bottom";
2053
- align: DgaCookiesAlign;
2054
- }>;
2055
- /** Whether a dimmed backdrop is shown (`overlay` or legacy `blocking`). */
2056
- readonly hasOverlay: _angular_core.Signal<boolean>;
2057
- readonly panelClasses: _angular_core.Signal<string>;
2058
- constructor();
2059
- ngOnInit(): void;
2060
- hasCategories(): boolean;
2061
- hasLinks(): boolean;
2062
- /**
2063
- * Re-open the banner (e.g. from a footer Cookie Settings link).
2064
- * Portals to `document.body` so overflow/transform ancestors cannot clip it.
2065
- */
2066
- show(): void;
2067
- /** Hide without persisting a decision. */
2068
- dismiss(): void;
2069
- /** Backdrop click — dismiss only when overlayClose + dismissible. */
2070
- onOverlayClick(): void;
2071
- openCustomize(): void;
2072
- onCategoryToggle(id: string, enabled: boolean): void;
2073
- accept(): void;
2074
- decline(): void;
2075
- savePreferences(): void;
2076
- private commit;
2077
- private buildDefaultPrefs;
2078
- private buildAllPrefs;
2079
- private readStored;
2080
- private hidePanel;
2081
- private trackingIds;
2082
- /** Move host to `body` so fixed positioning escapes overflow/transform ancestors. */
2083
- private ensureBodyPortal;
2084
- private restorePortal;
2085
- private clearTimer;
2086
- private clearCloseTimer;
2087
- static getConsent(cookieName?: string): DgaCookieConsent;
2088
- static getPreferences(cookieName?: string): DgaCookiePreferences | null;
2089
- static setConsent(value: Exclude<DgaCookieConsent, null>, options?: {
2090
- name?: string;
2091
- days?: number;
2092
- preferences?: DgaCookiePreferences;
2093
- }): void;
2094
- static clearConsent(cookieName?: string): void;
2095
- /** @internal */
2096
- static parseStored(raw: string | null): {
2097
- consent: DgaCookieConsent;
2098
- preferences: DgaCookiePreferences | null;
2099
- };
2100
- /** @internal */
2101
- static writeConsent(status: Exclude<DgaCookieConsent, null>, preferences: DgaCookiePreferences | null, opts: {
2102
- name: string;
2103
- days: number;
2104
- hasCategories: boolean;
2105
- }): void;
2106
- static get(name: string): string | null;
2107
- static set(name: string, value: string, days?: number): void;
2108
- static delete(name: string): void;
2109
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCookies, never>;
2110
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCookies, "dga-cookies", never, { "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "delayMs": { "alias": "delayMs"; "required": false; "isSignal": true; }; "autoShow": { "alias": "autoShow"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "showDecline": { "alias": "showDecline"; "required": false; "isSignal": true; }; "showLinks": { "alias": "showLinks"; "required": false; "isSignal": true; }; "showCustomize": { "alias": "showCustomize"; "required": false; "isSignal": true; }; "overlay": { "alias": "overlay"; "required": false; "isSignal": true; }; "blocking": { "alias": "blocking"; "required": false; "isSignal": true; }; "overlayClose": { "alias": "overlayClose"; "required": false; "isSignal": true; }; "termsHref": { "alias": "termsHref"; "required": false; "isSignal": true; }; "privacyHref": { "alias": "privacyHref"; "required": false; "isSignal": true; }; "cookiePolicyHref": { "alias": "cookiePolicyHref"; "required": false; "isSignal": true; }; "termsLabel": { "alias": "termsLabel"; "required": false; "isSignal": true; }; "privacyLabel": { "alias": "privacyLabel"; "required": false; "isSignal": true; }; "cookiePolicyLabel": { "alias": "cookiePolicyLabel"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "acceptLabel": { "alias": "acceptLabel"; "required": false; "isSignal": true; }; "declineLabel": { "alias": "declineLabel"; "required": false; "isSignal": true; }; "customizeLabel": { "alias": "customizeLabel"; "required": false; "isSignal": true; }; "saveLabel": { "alias": "saveLabel"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "gaTrackingIds": { "alias": "gaTrackingIds"; "required": false; "isSignal": true; }; "consentDays": { "alias": "consentDays"; "required": false; "isSignal": true; }; "consentCookieName": { "alias": "consentCookieName"; "required": false; "isSignal": true; }; "analyticsCookieNames": { "alias": "analyticsCookieNames"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; }, { "accepted": "accepted"; "declined": "declined"; "closed": "closed"; "decided": "decided"; "preferencesChange": "preferencesChange"; "decision": "decision"; }, never, never, true, never>;
2111
- }
2112
-
2113
1762
  type DgaRatingSize = 'sm' | 'md' | 'lg';
2114
1763
  declare class DgaRating {
2115
1764
  readonly value: _angular_core.ModelSignal<number>;
@@ -2306,243 +1955,6 @@ declare class DgaChatbot {
2306
1955
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChatbot, "dga-chatbot", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "fabLabel": { "alias": "fabLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "fabIcon": { "alias": "fabIcon"; "required": false; "isSignal": true; }; "sendIcon": { "alias": "sendIcon"; "required": false; "isSignal": true; }; "agentIcon": { "alias": "agentIcon"; "required": false; "isSignal": true; }; "fabTone": { "alias": "fabTone"; "required": false; "isSignal": true; }; "overlay": { "alias": "overlay"; "required": false; "isSignal": true; }; "overlayClose": { "alias": "overlayClose"; "required": false; "isSignal": true; }; "online": { "alias": "online"; "required": false; "isSignal": true; }; "hideFabWhenOpen": { "alias": "hideFabWhenOpen"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "clearFab": { "alias": "clearFab"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; "initialMessages": { "alias": "initialMessages"; "required": false; "isSignal": true; }; }, { "sent": "sent"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
2307
1956
  }
2308
1957
 
2309
- /** One-tap accessibility presets (compose primitives + settings). */
2310
- type DgaA11yBundle = 'epilepsy-safe' | 'visually-impaired' | 'cognitive-disability' | 'motor-impaired' | 'colorblind' | 'dyslexia-friendly' | 'adhd-friendly';
2311
- /** Primitive toggles stamped on `data-a11y`. */
2312
- type DgaA11yMode = 'reduce-motion' | 'highlight-links' | 'highlight-titles' | 'high-contrast' | 'dyslexia' | 'reading-mask' | 'motor-targets' | DgaA11yBundle;
2313
- type DgaA11yVisualFilter = 'none' | 'boost-contrast' | 'monochrome' | 'high-contrast' | 'high-saturation' | 'low-saturation' | 'deuteranopia';
2314
- type DgaA11yTextAlign = 'default' | 'start' | 'end' | 'justify';
2315
- type DgaA11yLineHeight = 'normal' | '1.6' | '1.8' | '2.0';
2316
- type DgaA11yLetterSpacing = '0' | '0.04em' | '0.08em' | '0.12em';
2317
- type DgaA11yWordSpacing = '0' | '0.16em' | '0.32em' | '0.48em';
2318
- declare class DgaAccessibilityService {
2319
- private readonly doc;
2320
- private readonly zone;
2321
- private liveRegion;
2322
- private opener;
2323
- private mqMotion;
2324
- private mqContrast;
2325
- readonly isOpen: _angular_core.WritableSignal<boolean>;
2326
- readonly modes: _angular_core.WritableSignal<Set<DgaA11yMode>>;
2327
- readonly visualFilter: _angular_core.WritableSignal<DgaA11yVisualFilter>;
2328
- readonly fontStep: _angular_core.WritableSignal<number>;
2329
- readonly textAlign: _angular_core.WritableSignal<DgaA11yTextAlign>;
2330
- readonly lineHeight: _angular_core.WritableSignal<DgaA11yLineHeight>;
2331
- readonly letterSpacing: _angular_core.WritableSignal<DgaA11yLetterSpacing>;
2332
- readonly wordSpacing: _angular_core.WritableSignal<DgaA11yWordSpacing>;
2333
- /** Half-height of the reading-mask band in px (20–160). */
2334
- readonly maskBand: _angular_core.WritableSignal<number>;
2335
- /** Center Y of the reading-mask band in px. */
2336
- readonly maskY: _angular_core.WritableSignal<number>;
2337
- readonly reduceMotion: _angular_core.Signal<boolean>;
2338
- readonly highlightLinks: _angular_core.Signal<boolean>;
2339
- readonly highlightTitles: _angular_core.Signal<boolean>;
2340
- readonly highContrast: _angular_core.Signal<boolean>;
2341
- readonly dyslexia: _angular_core.Signal<boolean>;
2342
- readonly readingMask: _angular_core.Signal<boolean>;
2343
- readonly motorTargets: _angular_core.Signal<boolean>;
2344
- /**
2345
- * Reactive UI locale — kept in sync with `<html lang>` / `data-locale`
2346
- * (including when `DgaLocaleService` updates the document).
2347
- */
2348
- readonly locale: _angular_core.WritableSignal<"ar" | "en">;
2349
- private readonly effectiveModes;
2350
- private localeObserver;
2351
- constructor();
2352
- open(opener?: HTMLElement | null): void;
2353
- close(): void;
2354
- toggle(opener?: HTMLElement | null): void;
2355
- hasMode(mode: DgaA11yMode): boolean;
2356
- isBundle(mode: DgaA11yMode): mode is DgaA11yBundle;
2357
- toggleMode(mode: DgaA11yMode): void;
2358
- /** Explicitly enable or disable a mode/bundle (avoids switch double-toggle bugs). */
2359
- setMode(mode: DgaA11yMode, enabled: boolean): void;
2360
- setVisualFilter(filter: DgaA11yVisualFilter): void;
2361
- cycleFontStep(): void;
2362
- cycleTextAlign(): void;
2363
- cycleLineHeight(): void;
2364
- cycleLetterSpacing(): void;
2365
- cycleWordSpacing(): void;
2366
- /** Step font size (−1 / +1), wrapping within available levels. */
2367
- stepFontStep(delta: number): void;
2368
- stepTextAlign(delta: number): void;
2369
- stepLineHeight(delta: number): void;
2370
- stepLetterSpacing(delta: number): void;
2371
- stepWordSpacing(delta: number): void;
2372
- adjustMaskBand(delta: number): void;
2373
- setMaskY(y: number): void;
2374
- reset(): void;
2375
- announce(msg: string): void;
2376
- /** Current UI locale inferred from `<html lang>` / `data-locale`. */
2377
- private readDomLocale;
2378
- /** Keep `locale` reactive when portal / DgaLocaleService mutates `<html>`. */
2379
- private bindLocaleObserver;
2380
- /**
2381
- * Toggle AR/EN on `<html>` (`lang` / `dir` / `data-locale`).
2382
- * Compatible with DgaLocaleService attribute contract.
2383
- */
2384
- toggleLocale(): 'ar' | 'en';
2385
- activeModeCount(section: 'modes' | 'readable' | 'visual'): number;
2386
- /** Total active settings across profiles + tools + filters (for FAB badge). */
2387
- activeSettingCount(): number;
2388
- private applyBundleExtras;
2389
- private ensureDyslexiaFont;
2390
- private applyToDocument;
2391
- private persist;
2392
- private hydrate;
2393
- private bindOsPreferences;
2394
- private ensureLiveRegion;
2395
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccessibilityService, never>;
2396
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<DgaAccessibilityService>;
2397
- }
2398
-
2399
- type DgaAccessibilityPosition = 'end' | 'start' | 'left' | 'right';
2400
- type AdjustToggleId = 'dyslexia' | 'highlight-titles' | 'highlight-links' | 'reading-mask' | 'reduce-motion';
2401
- type AdjustStepperId = 'font' | 'align' | 'line' | 'letter' | 'word';
2402
- declare class DgaAccessibility {
2403
- readonly a11y: DgaAccessibilityService;
2404
- readonly position: _angular_core.InputSignal<DgaAccessibilityPosition>;
2405
- /**
2406
- * 0-based slot in the shared FAB dock (bottom → top).
2407
- * Typical: a11y=0, chatbot=1, scroll-top=2.
2408
- */
2409
- readonly stack: _angular_core.InputSignalWithTransform<number, unknown>;
2410
- readonly panelId = "dga-accessibility-panel";
2411
- private readonly panelRef;
2412
- readonly fabBottom: _angular_core.Signal<string>;
2413
- readonly resetArmed: _angular_core.WritableSignal<boolean>;
2414
- readonly liveMsg: _angular_core.WritableSignal<string>;
2415
- private resetTimer;
2416
- private draggingMask;
2417
- readonly copy: _angular_core.Signal<{
2418
- open: string;
2419
- close: string;
2420
- panelLabel: string;
2421
- title: string;
2422
- sectionActive: string;
2423
- sectionProfiles: string;
2424
- sectionAdjust: string;
2425
- sectionFilters: string;
2426
- profilesHint: string;
2427
- chipJump: string;
2428
- stepDecrease: string;
2429
- stepIncrease: string;
2430
- reset: string;
2431
- resetConfirm: string;
2432
- announcedReset: string;
2433
- fontSize: string;
2434
- dyslexia: string;
2435
- highlightTitles: string;
2436
- highlightLinks: string;
2437
- readingMask: string;
2438
- reduceMotion: string;
2439
- textAlign: string;
2440
- lineHeight: string;
2441
- letterSpacing: string;
2442
- wordSpacing: string;
2443
- filterBoost: string;
2444
- filterMono: string;
2445
- filterHigh: string;
2446
- filterHighSat: string;
2447
- filterLowSat: string;
2448
- filterDeutan: string;
2449
- maskToolbar: string;
2450
- maskSmaller: string;
2451
- maskLarger: string;
2452
- maskDrag: string;
2453
- maskClose: string;
2454
- stateOn: string;
2455
- stateOff: string;
2456
- defaultValue: string;
2457
- fontLevels: string[];
2458
- alignLevels: string[];
2459
- lineLevels: string[];
2460
- letterLevels: string[];
2461
- wordLevels: string[];
2462
- bundles: {
2463
- 'epilepsy-safe': {
2464
- label: string;
2465
- desc: string;
2466
- };
2467
- 'visually-impaired': {
2468
- label: string;
2469
- desc: string;
2470
- };
2471
- 'cognitive-disability': {
2472
- label: string;
2473
- desc: string;
2474
- };
2475
- 'motor-impaired': {
2476
- label: string;
2477
- desc: string;
2478
- };
2479
- colorblind: {
2480
- label: string;
2481
- desc: string;
2482
- };
2483
- 'dyslexia-friendly': {
2484
- label: string;
2485
- desc: string;
2486
- };
2487
- 'adhd-friendly': {
2488
- label: string;
2489
- desc: string;
2490
- };
2491
- };
2492
- }>;
2493
- readonly bundles: _angular_core.Signal<{
2494
- id: DgaA11yBundle;
2495
- icon: DgaIconName;
2496
- label: string;
2497
- desc: string;
2498
- }[]>;
2499
- readonly adjustToggles: _angular_core.Signal<{
2500
- id: AdjustToggleId;
2501
- mode: DgaA11yMode;
2502
- icon: DgaIconName;
2503
- label: string;
2504
- active: boolean;
2505
- }[]>;
2506
- readonly adjustSteppers: _angular_core.Signal<{
2507
- id: AdjustStepperId;
2508
- icon: DgaIconName;
2509
- label: string;
2510
- active: boolean;
2511
- valueLabel: string;
2512
- }[]>;
2513
- readonly visualTiles: _angular_core.Signal<{
2514
- value: Exclude<DgaA11yVisualFilter, "none">;
2515
- label: string;
2516
- icon: DgaIconName;
2517
- active: boolean;
2518
- }[]>;
2519
- readonly activeChips: _angular_core.Signal<{
2520
- id: string;
2521
- label: string;
2522
- controlId: string;
2523
- }[]>;
2524
- readonly activeBadgeCount: _angular_core.Signal<number>;
2525
- readonly fabClasses: _angular_core.Signal<string>;
2526
- readonly panelClasses: _angular_core.Signal<string>;
2527
- constructor();
2528
- onKeydown(event: KeyboardEvent): void;
2529
- onPointerMove(event: PointerEvent): void;
2530
- onPointerUp(): void;
2531
- onFabClick(event: MouseEvent): void;
2532
- onBundle(id: DgaA11yBundle, enabled: boolean): void;
2533
- onToggleMode(mode: DgaA11yMode, enabled?: boolean): void;
2534
- onStep(id: AdjustStepperId, delta: number): void;
2535
- onFilter(value: DgaA11yVisualFilter): void;
2536
- focusControl(controlId: string): void;
2537
- onReset(): void;
2538
- onMaskDragStart(event: PointerEvent): void;
2539
- private panelPositionClass;
2540
- private announce;
2541
- private onMaskKeys;
2542
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccessibility, never>;
2543
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccessibility, "dga-accessibility", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2544
- }
2545
-
2546
1958
  /**
2547
1959
  * Visually hidden until focused — first tab stop for keyboard users.
2548
1960
  * Place near the top of the document; `href` should target main content id.
@@ -2550,6 +1962,7 @@ declare class DgaAccessibility {
2550
1962
  declare class DgaSkipLink {
2551
1963
  readonly href: _angular_core.InputSignal<string>;
2552
1964
  readonly label: _angular_core.InputSignal<string>;
1965
+ safeHref(href: string | undefined | null): string;
2553
1966
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSkipLink, never>;
2554
1967
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSkipLink, "dga-skip-link", never, { "href": { "alias": "href"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2555
1968
  }
@@ -2596,17 +2009,65 @@ interface DgaBreadcrumbItem {
2596
2009
  href?: string;
2597
2010
  }
2598
2011
  type DgaBreadcrumbSeparator = 'chevron' | 'slash';
2012
+ type BreadcrumbSlot = {
2013
+ kind: 'item';
2014
+ item: DgaBreadcrumbItem;
2015
+ index: number;
2016
+ current: boolean;
2017
+ } | {
2018
+ kind: 'collapse';
2019
+ hidden: DgaBreadcrumbItem[];
2020
+ };
2021
+ /**
2022
+ * Breadcrumb trail with collapse + label truncation for long paths.
2023
+ *
2024
+ * ```html
2025
+ * <dga-breadcrumb [items]="crumbs" [maxItems]="4" />
2026
+ * ```
2027
+ *
2028
+ * When `items.length > maxItems`, middle crumbs collapse behind an ellipsis menu.
2029
+ * Set `maxItems` to `0` to disable collapse. Long labels truncate when `truncate` is on.
2030
+ */
2599
2031
  declare class DgaBreadcrumb {
2032
+ private readonly host;
2033
+ private readonly destroyRef;
2600
2034
  private readonly baseHref;
2035
+ private static seq;
2036
+ readonly menuId: string;
2601
2037
  readonly items: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
2602
2038
  readonly label: _angular_core.InputSignal<string>;
2603
2039
  readonly separator: _angular_core.InputSignal<DgaBreadcrumbSeparator>;
2040
+ /**
2041
+ * Collapse middle items when the trail is longer than this.
2042
+ * `0` disables collapse.
2043
+ */
2044
+ readonly maxItems: _angular_core.InputSignalWithTransform<number, unknown>;
2045
+ /** Crumbs kept at the start when collapsing. */
2046
+ readonly itemsBeforeCollapse: _angular_core.InputSignalWithTransform<number, unknown>;
2047
+ /** Crumbs kept at the end when collapsing (includes current page). */
2048
+ readonly itemsAfterCollapse: _angular_core.InputSignalWithTransform<number, unknown>;
2049
+ /** Truncate long labels with ellipsis. */
2050
+ readonly truncate: _angular_core.InputSignalWithTransform<boolean, unknown>;
2051
+ /** Accessible name for the overflow (“…”) control. */
2052
+ readonly moreLabel: _angular_core.InputSignal<string>;
2604
2053
  /** Emits the clicked item for non-last links. Navigation via `href` is not prevented. */
2605
2054
  readonly itemClick: _angular_core.OutputEmitterRef<DgaBreadcrumbItem>;
2055
+ readonly overflowOpen: _angular_core.WritableSignal<boolean>;
2056
+ readonly slots: _angular_core.Signal<BreadcrumbSlot[]>;
2057
+ readonly listClasses: _angular_core.Signal<string>;
2058
+ readonly linkClasses: _angular_core.Signal<string>;
2059
+ readonly mutedClasses: _angular_core.Signal<string>;
2060
+ readonly currentClasses: _angular_core.Signal<string>;
2061
+ constructor();
2062
+ trackSlot(slot: BreadcrumbSlot, index: number): string;
2606
2063
  appHref(href: string | undefined | null): string;
2607
2064
  onItemClick(item: DgaBreadcrumbItem): void;
2065
+ toggleOverflow(event: MouseEvent): void;
2066
+ onOverflowItemClick(item: DgaBreadcrumbItem): void;
2067
+ onDocumentClick(event: MouseEvent): void;
2068
+ onDocumentKey(event: KeyboardEvent): void;
2608
2069
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaBreadcrumb, never>;
2609
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaBreadcrumb, "dga-breadcrumb", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
2070
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaBreadcrumb, "dga-breadcrumb", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "itemsBeforeCollapse": { "alias": "itemsBeforeCollapse"; "required": false; "isSignal": true; }; "itemsAfterCollapse": { "alias": "itemsAfterCollapse"; "required": false; "isSignal": true; }; "truncate": { "alias": "truncate"; "required": false; "isSignal": true; }; "moreLabel": { "alias": "moreLabel"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
2610
2071
  }
2611
2072
 
2612
2073
  declare class DgaPagination {
@@ -2783,7 +2244,7 @@ declare class DgaSideNav {
2783
2244
  /**
2784
2245
  * `auto` = horizontal chips below lg; `vertical` = always sidebar (use in drawers).
2785
2246
  */
2786
- readonly layout: _angular_core.InputSignal<"auto" | "vertical">;
2247
+ readonly layout: _angular_core.InputSignal<"vertical" | "auto">;
2787
2248
  readonly label: _angular_core.InputSignal<string>;
2788
2249
  readonly toggleLabel: _angular_core.InputSignal<string>;
2789
2250
  readonly select: _angular_core.OutputEmitterRef<DgaSideNavItem>;
@@ -2801,6 +2262,7 @@ declare class DgaSideNav {
2801
2262
  onSelect(item: DgaSideNavItem, event?: Event): void;
2802
2263
  private childIsActive;
2803
2264
  private toggleExpanded;
2265
+ safeHref(href: string | undefined | null): string;
2804
2266
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSideNav, never>;
2805
2267
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSideNav, "dga-side-nav", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "toggleLabel": { "alias": "toggleLabel"; "required": false; "isSignal": true; }; "narrow": { "alias": "narrow"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "select": "select"; "narrow": "narrowChange"; }, never, never, true, never>;
2806
2268
  }
@@ -2883,9 +2345,9 @@ declare class DgaNavRail {
2883
2345
  readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2884
2346
  readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
2885
2347
  readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
2886
- readonly edgeAttr: _angular_core.Signal<"end" | "start" | "right" | "left" | null>;
2348
+ readonly edgeAttr: _angular_core.Signal<"start" | "end" | "left" | "right" | null>;
2887
2349
  readonly offsetCss: _angular_core.Signal<string>;
2888
- readonly tooltipPlacement: _angular_core.Signal<"end" | "start">;
2350
+ readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
2889
2351
  readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;
2890
2352
  readonly expandIcon: _angular_core.Signal<"chevronLeft" | "chevronRight">;
2891
2353
  readonly listGapClass: _angular_core.Signal<"gap-xs" | "gap-sm" | "gap-md">;
@@ -2895,6 +2357,7 @@ declare class DgaNavRail {
2895
2357
  onSelect(item: DgaNavRailItem, event?: MouseEvent): void;
2896
2358
  toggleExpand(): void;
2897
2359
  private prefersReducedMotion;
2360
+ safeHref(href: string | undefined | null): string;
2898
2361
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNavRail, never>;
2899
2362
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNavRail, "dga-nav-rail", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "activeStyle": { "alias": "activeStyle"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "smoothScroll": { "alias": "smoothScroll"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "expanded": "expandedChange"; "select": "select"; "expandChange": "expandChange"; }, never, never, true, never>;
2900
2363
  }
@@ -3051,6 +2514,7 @@ declare class DgaCard {
3051
2514
  iconGlyphSize(): DgaIconSize;
3052
2515
  actionsHostClass(): string;
3053
2516
  builtInActionsClass(): string;
2517
+ safeHref(href: string | undefined | null): string;
3054
2518
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCard, never>;
3055
2519
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCard, "dga-card", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "titleTruncate": { "alias": "titleTruncate"; "required": false; "isSignal": true; }; "descriptionClamp": { "alias": "descriptionClamp"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "iconAppearance": { "alias": "iconAppearance"; "required": false; "isSignal": true; }; "badges": { "alias": "badges"; "required": false; "isSignal": true; }; "badgeSize": { "alias": "badgeSize"; "required": false; "isSignal": true; }; "primaryLabel": { "alias": "primaryLabel"; "required": false; "isSignal": true; }; "primaryHref": { "alias": "primaryHref"; "required": false; "isSignal": true; }; "primaryVariant": { "alias": "primaryVariant"; "required": false; "isSignal": true; }; "secondaryLabel": { "alias": "secondaryLabel"; "required": false; "isSignal": true; }; "secondaryHref": { "alias": "secondaryHref"; "required": false; "isSignal": true; }; "secondaryVariant": { "alias": "secondaryVariant"; "required": false; "isSignal": true; }; "actionSize": { "alias": "actionSize"; "required": false; "isSignal": true; }; "actionsAlign": { "alias": "actionsAlign"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, { "primaryClick": "primaryClick"; "secondaryClick": "secondaryClick"; }, never, ["[dgaCardMedia]", "[dgaCardLead]", "*", "[dgaCardActions]"], true, never>;
3056
2520
  }
@@ -3156,363 +2620,6 @@ declare class DgaAppShell {
3156
2620
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAppShell, "dga-app-shell", never, { "navLabel": { "alias": "navLabel"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "padded": { "alias": "padded"; "required": false; "isSignal": true; }; }, {}, never, [".dga-app-shell-brand, [dgaAppShellBrand]", ".dga-app-shell-nav, [dgaAppShellNav]", ".dga-app-shell-nav-foot, [dgaAppShellNavFoot]", ".dga-app-shell-header, [dgaAppShellHeader]", "*"], true, never>;
3157
2621
  }
3158
2622
 
3159
- type DgaHeaderAppearance = 'default' | 'portal';
3160
- /**
3161
- * Mobile / narrow navigation chrome (portal header, `md` and below):
3162
- * - `sheet` - side drawer from the inline-end (burger) edge
3163
- * - `fullscreen` - full-viewport overlay panel
3164
- * - `push` - panel expands under the header bar (inline dropdown)
3165
- */
3166
- type DgaMobileNavMode = 'sheet' | 'fullscreen' | 'push';
3167
- /** Panel chrome: compact under trigger, full-bleed mega, or mega + featured lead. */
3168
- type DgaNavDropdownVariant = 'menu' | 'mega' | 'featured';
3169
- /** How links are arranged inside the panel. */
3170
- type DgaNavDropdownLayout = 'list' | 'columns' | 'rows';
3171
- interface DgaNavLink {
3172
- label: string;
3173
- href?: string;
3174
- description?: string;
3175
- current?: boolean;
3176
- }
3177
- interface DgaNavColumn {
3178
- title?: string;
3179
- links: DgaNavLink[];
3180
- }
3181
- /** Lead / promo block for `variant: 'featured'`. */
3182
- interface DgaNavFeatured {
3183
- title: string;
3184
- description?: string;
3185
- href?: string;
3186
- cta?: string;
3187
- imageUrl?: string;
3188
- }
3189
- interface DgaNavDropdown {
3190
- /**
3191
- * Panel width/placement:
3192
- * - `menu` - compact panel anchored under the trigger (default for simple lists)
3193
- * - `mega` - full-width under the header
3194
- * - `featured` - full-width mega with a lead promo column
3195
- */
3196
- variant?: DgaNavDropdownVariant;
3197
- /** Inner arrangement: `list` | `columns` | `rows`. */
3198
- layout?: DgaNavDropdownLayout;
3199
- columns?: DgaNavColumn[];
3200
- links?: DgaNavLink[];
3201
- featured?: DgaNavFeatured;
3202
- }
3203
- interface DgaNavItem {
3204
- label: string;
3205
- href?: string;
3206
- current?: boolean;
3207
- dropdown?: DgaNavDropdown;
3208
- }
3209
- interface DgaHeaderAction {
3210
- id: string;
3211
- label: string;
3212
- icon?: DgaIconName;
3213
- href?: string;
3214
- badge?: number;
3215
- iconOnly?: boolean;
3216
- }
3217
- /** Suggestion chip shown under the header search field. */
3218
- interface DgaHeaderSearchSuggestion {
3219
- label: string;
3220
- /** Value written into the query (defaults to `label`). */
3221
- value?: string;
3222
- icon?: DgaIconName;
3223
- }
3224
- /**
3225
- * Built-in header search popup (opens from the action whose `id` matches `actionId`).
3226
- * Pass this to `[search]` to enable the modal search experience.
3227
- */
3228
- interface DgaHeaderSearchConfig {
3229
- /** Action id that toggles the panel. Default: `'search'`. */
3230
- actionId?: string;
3231
- /** Modal title. Default: `'Search'`. */
3232
- title?: string;
3233
- description?: string;
3234
- closeLabel?: string;
3235
- placeholder?: string;
3236
- submitLabel?: string;
3237
- suggestionsLabel?: string;
3238
- clearLabel?: string;
3239
- voiceLabel?: string;
3240
- /** Show microphone control (uses Web Speech API when available). Default: true. */
3241
- voice?: boolean;
3242
- suggestions?: DgaHeaderSearchSuggestion[];
3243
- /**
3244
- * Optional results URL. On submit, navigates to
3245
- * `{resultsHref}?{queryParam}={query}` when set.
3246
- */
3247
- resultsHref?: string;
3248
- /** Query string key. Default: `'q'`. */
3249
- queryParam?: string;
3250
- }
3251
- type DgaHeaderNotificationTone = DgaBadgeVariant;
3252
- /** Single item in the header notifications panel. */
3253
- interface DgaHeaderNotification {
3254
- id: string;
3255
- title: string;
3256
- message: string;
3257
- statusLabel?: string;
3258
- tone?: DgaHeaderNotificationTone;
3259
- icon?: DgaIconName;
3260
- href?: string;
3261
- read?: boolean;
3262
- }
3263
- /**
3264
- * Built-in notifications dropdown for the action whose `id` matches `actionId`
3265
- * (default `'notifications'`).
3266
- */
3267
- interface DgaHeaderNotificationsConfig {
3268
- actionId?: string;
3269
- /** Panel heading. Default: `'Notifications'`. */
3270
- title?: string;
3271
- emptyLabel?: string;
3272
- viewAllLabel?: string;
3273
- viewAllHref?: string;
3274
- markReadLabel?: string;
3275
- markAllReadLabel?: string;
3276
- viewLabel?: string;
3277
- dismissLabel?: string;
3278
- closeLabel?: string;
3279
- items?: DgaHeaderNotification[];
3280
- }
3281
- type DgaHeaderNotificationAction = 'read' | 'view' | 'dismiss' | 'select';
3282
- /** Guest login form opened from the login action. */
3283
- interface DgaHeaderLoginConfig {
3284
- actionId?: string;
3285
- title?: string;
3286
- description?: string;
3287
- emailLabel?: string;
3288
- emailPlaceholder?: string;
3289
- emailHint?: string;
3290
- passwordLabel?: string;
3291
- passwordPlaceholder?: string;
3292
- passwordHint?: string;
3293
- submitLabel?: string;
3294
- cancelLabel?: string;
3295
- closeLabel?: string;
3296
- forgotPasswordLabel?: string;
3297
- forgotPasswordHref?: string;
3298
- showPasswordLabel?: string;
3299
- hidePasswordLabel?: string;
3300
- }
3301
- interface DgaHeaderUserMenuLink {
3302
- id: string;
3303
- label: string;
3304
- href?: string;
3305
- icon?: DgaIconName;
3306
- danger?: boolean;
3307
- }
3308
- /** Authenticated user menu shown after login (same action id as login). */
3309
- interface DgaHeaderUserConfig {
3310
- name: string;
3311
- role?: string;
3312
- email?: string;
3313
- avatarSrc?: string;
3314
- links?: DgaHeaderUserMenuLink[];
3315
- }
3316
- declare class DgaHeader {
3317
- private readonly host;
3318
- private readonly baseHref;
3319
- private closeTimer;
3320
- private dropdownSyncFrame;
3321
- private lastDropdownStyleKey;
3322
- readonly collapseId = "dga-nav-collapse";
3323
- readonly dropLink: string;
3324
- readonly dropTile: string;
3325
- readonly mobileLink: string;
3326
- readonly brand: _angular_core.InputSignal<string>;
3327
- readonly brandSlogan: _angular_core.InputSignal<string>;
3328
- readonly brandLogo: _angular_core.InputSignal<string>;
3329
- readonly brandLogoAlt: _angular_core.InputSignal<string>;
3330
- /** When true and no `brandLogo`, portal headers show a home-icon placeholder beside the brand text. */
3331
- readonly brandPlaceholder: _angular_core.InputSignalWithTransform<boolean, unknown>;
3332
- readonly brandHref: _angular_core.InputSignal<string>;
3333
- readonly navLabel: _angular_core.InputSignal<string>;
3334
- readonly menuToggleLabel: _angular_core.InputSignal<string>;
3335
- readonly menuCloseLabel: _angular_core.InputSignal<string>;
3336
- readonly appearance: _angular_core.InputSignal<DgaHeaderAppearance>;
3337
- /**
3338
- * Portal mobile navigation layout. Ignored for `appearance="default"`.
3339
- * - `sheet` - side drawer (narrow, page peeks beside)
3340
- * - `fullscreen` - covers the whole screen with its own close control
3341
- * - `push` - accordion panel under the header
3342
- */
3343
- readonly mobileNav: _angular_core.InputSignal<DgaMobileNavMode>;
3344
- readonly sticky: _angular_core.InputSignalWithTransform<boolean, unknown>;
3345
- readonly items: _angular_core.InputSignal<DgaNavItem[]>;
3346
- readonly actions: _angular_core.InputSignal<DgaHeaderAction[]>;
3347
- /**
3348
- * When set, the header action matching `search.actionId` (default `'search'`)
3349
- * opens a full-width search panel with suggestions instead of a no-op click.
3350
- */
3351
- readonly search: _angular_core.InputSignal<DgaHeaderSearchConfig | null>;
3352
- /** Bound query for the header search panel. */
3353
- readonly searchQuery: _angular_core.ModelSignal<string>;
3354
- /**
3355
- * When set, the header action matching `notifications.actionId`
3356
- * (default `'notifications'`) opens the notifications dropdown.
3357
- */
3358
- readonly notifications: _angular_core.InputSignal<DgaHeaderNotificationsConfig | null>;
3359
- /**
3360
- * Guest login panel config. Opens from the action matching `login.actionId`
3361
- * (default `'login'`). After auth, the same action opens the user menu.
3362
- */
3363
- readonly login: _angular_core.InputSignal<DgaHeaderLoginConfig | null>;
3364
- /** Authenticated user profile shown in the account menu. */
3365
- readonly user: _angular_core.InputSignal<DgaHeaderUserConfig | null>;
3366
- /** Whether the user is signed in (two-way). */
3367
- readonly authenticated: _angular_core.ModelSignal<boolean>;
3368
- readonly actionClick: _angular_core.OutputEmitterRef<DgaHeaderAction>;
3369
- readonly searchSubmit: _angular_core.OutputEmitterRef<string>;
3370
- readonly searchSuggestionSelect: _angular_core.OutputEmitterRef<DgaHeaderSearchSuggestion>;
3371
- readonly searchVoice: _angular_core.OutputEmitterRef<void>;
3372
- readonly notificationAction: _angular_core.OutputEmitterRef<{
3373
- item: DgaHeaderNotification;
3374
- action: DgaHeaderNotificationAction;
3375
- }>;
3376
- readonly loginSubmit: _angular_core.OutputEmitterRef<{
3377
- email: string;
3378
- password: string;
3379
- }>;
3380
- readonly logout: _angular_core.OutputEmitterRef<void>;
3381
- readonly userLinkClick: _angular_core.OutputEmitterRef<DgaHeaderUserMenuLink>;
3382
- /** Emits on click of any top-level nav link or dropdown link (desktop + mobile). */
3383
- readonly navLinkClick: _angular_core.OutputEmitterRef<DgaNavLink | DgaNavItem>;
3384
- readonly mobileOpen: _angular_core.WritableSignal<boolean>;
3385
- readonly openDropdown: _angular_core.WritableSignal<number | null>;
3386
- readonly searchOpen: _angular_core.WritableSignal<boolean>;
3387
- readonly notificationsOpen: _angular_core.WritableSignal<boolean>;
3388
- readonly loginOpen: _angular_core.WritableSignal<boolean>;
3389
- readonly userMenuOpen: _angular_core.WritableSignal<boolean>;
3390
- readonly voiceListening: _angular_core.WritableSignal<boolean>;
3391
- readonly expandedNotificationId: _angular_core.WritableSignal<string | null>;
3392
- readonly loginEmail: _angular_core.WritableSignal<string>;
3393
- readonly loginPassword: _angular_core.WritableSignal<string>;
3394
- readonly showLoginPassword: _angular_core.WritableSignal<boolean>;
3395
- readonly loginSubmitting: _angular_core.WritableSignal<boolean>;
3396
- /** Fixed coords for notifications / login / user panels (anchored to trigger). */
3397
- readonly dropdownPanelStyle: _angular_core.WritableSignal<Record<string, string>>;
3398
- private readonly dismissedNotificationIds;
3399
- private readonly readNotificationIds;
3400
- private dropdownTrigger;
3401
- private dropdownActionId;
3402
- private readonly injector;
3403
- private readonly searchInputRef;
3404
- readonly searchPanelId = "dga-header-search-panel";
3405
- readonly notificationsPanelId = "dga-header-notifications-panel";
3406
- readonly loginPanelId = "dga-header-login-panel";
3407
- readonly userPanelId = "dga-header-user-panel";
3408
- readonly isPortal: _angular_core.Signal<boolean>;
3409
- /** Resolve root-relative hrefs against the app base (`/dga/` on cPanel). */
3410
- appHref(href: string | undefined | null): string;
3411
- readonly searchConfig: _angular_core.Signal<DgaHeaderSearchConfig | null>;
3412
- readonly searchActionId: _angular_core.Signal<string>;
3413
- readonly notificationsConfig: _angular_core.Signal<DgaHeaderNotificationsConfig | null>;
3414
- readonly notificationsActionId: _angular_core.Signal<string>;
3415
- readonly loginConfig: _angular_core.Signal<DgaHeaderLoginConfig | null>;
3416
- readonly loginActionId: _angular_core.Signal<string>;
3417
- readonly userConfig: _angular_core.Signal<DgaHeaderUserConfig | null>;
3418
- readonly utilityOverlayOpen: _angular_core.Signal<boolean>;
3419
- readonly visibleNotifications: _angular_core.Signal<{
3420
- read: boolean;
3421
- id: string;
3422
- title: string;
3423
- message: string;
3424
- statusLabel?: string;
3425
- tone?: DgaHeaderNotificationTone;
3426
- icon?: DgaIconName;
3427
- href?: string;
3428
- }[]>;
3429
- readonly unreadNotificationCount: _angular_core.Signal<number>;
3430
- constructor();
3431
- /** Compact under-trigger menus are rendered inside the `<li>` (desktop only). */
3432
- readonly activeWideDropdown: _angular_core.Signal<{
3433
- index: number;
3434
- item: DgaNavItem;
3435
- variant: "mega" | "featured";
3436
- } | null>;
3437
- readonly hostClasses: _angular_core.Signal<string>;
3438
- readonly innerClasses: _angular_core.Signal<string>;
3439
- readonly desktopNavClasses: _angular_core.Signal<string>;
3440
- readonly actionsClasses: _angular_core.Signal<string>;
3441
- mobilePanelClass(): string;
3442
- hoverMenus(): boolean;
3443
- isMobileViewport(): boolean;
3444
- resolveVariant(item: DgaNavItem): DgaNavDropdownVariant;
3445
- resolveLayout(item: DgaNavItem): DgaNavDropdownLayout;
3446
- colCount(item: DgaNavItem): number;
3447
- flatLinks(item: DgaNavItem): DgaNavLink[];
3448
- columnsGridClass(count: number): string;
3449
- featuredGridClass(variant: DgaNavDropdownVariant, hasFeatured: boolean): string;
3450
- navItemClass(current: boolean, open?: boolean): string;
3451
- mobileItemClass(current: boolean, open?: boolean): string;
3452
- indicatorClass(active: boolean): string;
3453
- actionClass(_action: DgaHeaderAction): string;
3454
- badgeClass(): string;
3455
- isIconOnly(action: DgaHeaderAction): boolean;
3456
- isSearchAction(action: DgaHeaderAction): boolean;
3457
- isNotificationsAction(action: DgaHeaderAction): boolean;
3458
- isLoginAction(action: DgaHeaderAction): boolean;
3459
- actionTooltip(action: DgaHeaderAction): string;
3460
- actionAriaLabel(action: DgaHeaderAction): string;
3461
- actionExpanded(action: DgaHeaderAction): boolean | null;
3462
- actionControls(action: DgaHeaderAction): string | null;
3463
- actionIndicatorActive(action: DgaHeaderAction): boolean;
3464
- private clearCloseTimer;
3465
- private scheduleClose;
3466
- private setBodyScrollLocked;
3467
- private unlockBodyIfIdle;
3468
- onItemEnter(i: number): void;
3469
- onPanelEnter(): void;
3470
- onHostLeave(event: MouseEvent): void;
3471
- toggleMobile(): void;
3472
- toggleDropdown(i: number, event: Event): void;
3473
- closeAll(): void;
3474
- onAction(action: DgaHeaderAction, event?: Event): void;
3475
- onMobileAction(action: DgaHeaderAction, event?: Event): void;
3476
- closeUtilityOverlays(): void;
3477
- /** Ask demo portal font/brand menus to close so they don't stack over header panels. */
3478
- private closePortalChromeMenus;
3479
- onCloseHeaderOverlays(): void;
3480
- toggleSearch(): void;
3481
- onSearchModalOpenChange(open: boolean): void;
3482
- focusSearchInput(): void;
3483
- closeSearch(clearVoice?: boolean): void;
3484
- toggleNotifications(trigger?: HTMLElement | null): void;
3485
- closeNotifications(): void;
3486
- toggleLogin(trigger?: HTMLElement | null): void;
3487
- closeLogin(): void;
3488
- toggleUserMenu(trigger?: HTMLElement | null): void;
3489
- closeUserMenu(): void;
3490
- onLoginSubmit(event: Event): void;
3491
- onUserLink(link: DgaHeaderUserMenuLink): void;
3492
- toggleNotificationExpand(item: DgaHeaderNotification): void;
3493
- onNotificationAction(item: DgaHeaderNotification, action: DgaHeaderNotificationAction): void;
3494
- markAllNotificationsRead(): void;
3495
- clearSearchQuery(): void;
3496
- applySearchSuggestion(item: DgaHeaderSearchSuggestion): void;
3497
- onSearchFormSubmit(event: Event): void;
3498
- onSearchVoice(): void;
3499
- private speechRecognition;
3500
- private stopVoice;
3501
- private triggerFromEvent;
3502
- private scheduleDropdownSync;
3503
- private requestDropdownSync;
3504
- private clearDropdownAnchor;
3505
- private findActionTrigger;
3506
- private syncDropdownPanel;
3507
- onKey(event: KeyboardEvent): void;
3508
- onScroll(): void;
3509
- onResize(): void;
3510
- onNavLinkClick(link: DgaNavLink | DgaNavItem, event: MouseEvent): void;
3511
- onDocClick(event: MouseEvent): void;
3512
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaHeader, never>;
3513
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaHeader, "dga-header", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "brandSlogan": { "alias": "brandSlogan"; "required": false; "isSignal": true; }; "brandLogo": { "alias": "brandLogo"; "required": false; "isSignal": true; }; "brandLogoAlt": { "alias": "brandLogoAlt"; "required": false; "isSignal": true; }; "brandPlaceholder": { "alias": "brandPlaceholder"; "required": false; "isSignal": true; }; "brandHref": { "alias": "brandHref"; "required": false; "isSignal": true; }; "navLabel": { "alias": "navLabel"; "required": false; "isSignal": true; }; "menuToggleLabel": { "alias": "menuToggleLabel"; "required": false; "isSignal": true; }; "menuCloseLabel": { "alias": "menuCloseLabel"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "mobileNav": { "alias": "mobileNav"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "searchQuery": { "alias": "searchQuery"; "required": false; "isSignal": true; }; "notifications": { "alias": "notifications"; "required": false; "isSignal": true; }; "login": { "alias": "login"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "authenticated": { "alias": "authenticated"; "required": false; "isSignal": true; }; }, { "searchQuery": "searchQueryChange"; "authenticated": "authenticatedChange"; "actionClick": "actionClick"; "searchSubmit": "searchSubmit"; "searchSuggestionSelect": "searchSuggestionSelect"; "searchVoice": "searchVoice"; "notificationAction": "notificationAction"; "loginSubmit": "loginSubmit"; "logout": "logout"; "userLinkClick": "userLinkClick"; "navLinkClick": "navLinkClick"; }, never, ["[dgaHeaderBrand]", "*", "[dgaHeaderEnd]"], true, never>;
3514
- }
3515
-
3516
2623
  interface DgaStampNotice {
3517
2624
  title: string;
3518
2625
  /** Substring of `title` rendered bold in the primary color (e.g. `gov.sa`). */
@@ -3571,6 +2678,7 @@ declare class DgaTopBar implements OnInit {
3571
2678
  toggle(): void;
3572
2679
  toggleCalendar(): void;
3573
2680
  toggleTimeFormat(): void;
2681
+ safeHref(href: string | undefined | null): string;
3574
2682
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTopBar, never>;
3575
2683
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTopBar, "dga-top-bar", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showDate": { "alias": "showDate"; "required": false; "isSignal": true; }; "showTime": { "alias": "showTime"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "regionLabel": { "alias": "regionLabel"; "required": false; "isSignal": true; }; "stampLabel": { "alias": "stampLabel"; "required": false; "isSignal": true; }; "tabTextLg": { "alias": "tabTextLg"; "required": false; "isSignal": true; }; "tabTextSm": { "alias": "tabTextSm"; "required": false; "isSignal": true; }; "verifyText": { "alias": "verifyText"; "required": false; "isSignal": true; }; "registrationLabel": { "alias": "registrationLabel"; "required": false; "isSignal": true; }; "registrationId": { "alias": "registrationId"; "required": false; "isSignal": true; }; "registrationHref": { "alias": "registrationHref"; "required": false; "isSignal": true; }; "notices": { "alias": "notices"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "calendar": "calendarChange"; "timeFormat": "timeFormatChange"; }, never, ["*"], true, never>;
3576
2684
  }
@@ -3760,6 +2868,7 @@ declare class DgaHero {
3760
2868
  onPrimary(index?: number): void;
3761
2869
  onSecondary(index?: number): void;
3762
2870
  private clearAutoplay;
2871
+ safeHref(href: string | undefined | null): string;
3763
2872
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaHero, never>;
3764
2873
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaHero, "dga-hero", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "primaryCta": { "alias": "primaryCta"; "required": false; "isSignal": true; }; "secondaryCta": { "alias": "secondaryCta"; "required": false; "isSignal": true; }; "primaryHref": { "alias": "primaryHref"; "required": false; "isSignal": true; }; "secondaryHref": { "alias": "secondaryHref"; "required": false; "isSignal": true; }; "imageDesktop": { "alias": "imageDesktop"; "required": false; "isSignal": true; }; "imageMobile": { "alias": "imageMobile"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "imageOverlay": { "alias": "imageOverlay"; "required": false; "isSignal": true; }; "imageMaskVariant": { "alias": "imageMaskVariant"; "required": false; "isSignal": true; }; "slides": { "alias": "slides"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "transition": { "alias": "transition"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "autoplayMs": { "alias": "autoplayMs"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "dotsLabel": { "alias": "dotsLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; "primaryClick": "primaryClick"; "secondaryClick": "secondaryClick"; "slideChange": "slideChange"; }, never, ["[dgaHeroBreadcrumb]", "[dgaHeroFloat]", "*", "*"], true, never>;
3765
2874
  }
@@ -3774,6 +2883,10 @@ declare class DgaPageHero {
3774
2883
  readonly description: _angular_core.InputSignal<string>;
3775
2884
  readonly breadcrumbs: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
3776
2885
  readonly breadcrumbLabel: _angular_core.InputSignal<string>;
2886
+ /** Forwarded to `dga-breadcrumb` — collapse when trail exceeds this (`0` = off). */
2887
+ readonly breadcrumbMaxItems: _angular_core.InputSignalWithTransform<number, unknown>;
2888
+ readonly breadcrumbTruncate: _angular_core.InputSignalWithTransform<boolean, unknown>;
2889
+ readonly breadcrumbMoreLabel: _angular_core.InputSignal<string>;
3777
2890
  readonly tone: _angular_core.InputSignal<DgaPageHeroTone>;
3778
2891
  /** Extra bottom padding for denser pages. */
3779
2892
  readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -3781,7 +2894,7 @@ declare class DgaPageHero {
3781
2894
  readonly titleId: string;
3782
2895
  readonly sectionClasses: _angular_core.Signal<string>;
3783
2896
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPageHero, never>;
3784
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPageHero, "dga-page-hero", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; "breadcrumbLabel": { "alias": "breadcrumbLabel"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaPageHeroActions]", "*"], true, never>;
2897
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPageHero, "dga-page-hero", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; "breadcrumbLabel": { "alias": "breadcrumbLabel"; "required": false; "isSignal": true; }; "breadcrumbMaxItems": { "alias": "breadcrumbMaxItems"; "required": false; "isSignal": true; }; "breadcrumbTruncate": { "alias": "breadcrumbTruncate"; "required": false; "isSignal": true; }; "breadcrumbMoreLabel": { "alias": "breadcrumbMoreLabel"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaPageHeroActions]", "*"], true, never>;
3785
2898
  }
3786
2899
 
3787
2900
  type DgaAnnouncementTone = 'info' | 'warning' | 'success' | 'neutral' | 'critical' | 'brand';
@@ -3847,6 +2960,7 @@ declare class DgaAnnouncementBar {
3847
2960
  private storage;
3848
2961
  private readPersisted;
3849
2962
  private writePersisted;
2963
+ safeActionHref(): string;
3850
2964
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAnnouncementBar, never>;
3851
2965
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAnnouncementBar, "dga-announcement-bar", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "actionVariant": { "alias": "actionVariant"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "dismissLabel": { "alias": "dismissLabel"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; "actionExternal": { "alias": "actionExternal"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "accent": { "alias": "accent"; "required": false; "isSignal": true; }; "initiallyDismissed": { "alias": "initiallyDismissed"; "required": false; "isSignal": true; }; "persist": { "alias": "persist"; "required": false; "isSignal": true; }; "persistKey": { "alias": "persistKey"; "required": false; "isSignal": true; }; }, { "dismissedChange": "dismissedChange"; "closed": "closed"; "action": "action"; }, never, ["*"], true, never>;
3852
2966
  }
@@ -3883,6 +2997,7 @@ declare class DgaSideInfo {
3883
2997
  isActive(item: DgaSideInfoItem): boolean;
3884
2998
  itemClasses(item: DgaSideInfoItem): string;
3885
2999
  onSelect(item: DgaSideInfoItem): void;
3000
+ safeHref(href: string | undefined | null): string;
3886
3001
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSideInfo, never>;
3887
3002
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSideInfo, "dga-side-info", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "select": "select"; }, never, ["*"], true, never>;
3888
3003
  }
@@ -3977,6 +3092,80 @@ declare class DgaCode {
3977
3092
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCode, "dga-code", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; }, {}, never, ["*", "*"], true, never>;
3978
3093
  }
3979
3094
 
3095
+ type DgaVideoProvider = 'auto' | 'youtube' | 'vimeo' | 'html5';
3096
+ type DgaVideoRatio = '16:9' | '4:3' | '1:1' | '9:16' | '21:9';
3097
+ interface DgaVideoSourceInfo {
3098
+ provider: Exclude<DgaVideoProvider, 'auto'>;
3099
+ /** Provider media id (YouTube / Vimeo) or original URL (html5). */
3100
+ id: string;
3101
+ fileUrl: string | null;
3102
+ }
3103
+ /** Resolve provider + safe playback URLs from a source string. */
3104
+ declare function dgaResolveVideoSource(src: string, provider?: DgaVideoProvider): DgaVideoSourceInfo | null;
3105
+ /**
3106
+ * Responsive video player for YouTube, Vimeo, and HTML5 (mp4/webm/…).
3107
+ *
3108
+ * ```html
3109
+ * <dga-video-player
3110
+ * src="https://www.youtube.com/watch?v=aqz-KE-bpKQ"
3111
+ * poster="/assets/poster.jpg"
3112
+ * title="Demo"
3113
+ * ratio="16:9"
3114
+ * />
3115
+ * ```
3116
+ *
3117
+ * Embeds default to click-to-load (`lazy`) for privacy/perf. HTML5 uses native controls.
3118
+ */
3119
+ declare class DgaVideoPlayer {
3120
+ private readonly sanitizer;
3121
+ /** Watch / share URL, embed URL, file URL, or bare YouTube/Vimeo id. */
3122
+ readonly src: _angular_core.InputSignal<string>;
3123
+ /** Force provider; default auto-detects from `src`. */
3124
+ readonly provider: _angular_core.InputSignal<DgaVideoProvider>;
3125
+ /** Poster image (HTML5 + lazy embed cover). */
3126
+ readonly poster: _angular_core.InputSignal<string>;
3127
+ /** Accessible / iframe title. */
3128
+ readonly title: _angular_core.InputSignal<string>;
3129
+ /** Show native / embed controls. */
3130
+ readonly controls: _angular_core.InputSignalWithTransform<boolean, unknown>;
3131
+ /** Autoplay (embeds load immediately; browsers usually require muted). */
3132
+ readonly autoplay: _angular_core.InputSignalWithTransform<boolean, unknown>;
3133
+ readonly muted: _angular_core.InputSignalWithTransform<boolean, unknown>;
3134
+ readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
3135
+ readonly playsInline: _angular_core.InputSignalWithTransform<boolean, unknown>;
3136
+ /**
3137
+ * Click-to-load for YouTube/Vimeo (privacy + faster page).
3138
+ * Ignored when `autoplay` is true.
3139
+ */
3140
+ readonly lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
3141
+ /** Prefer youtube-nocookie.com embeds. */
3142
+ readonly privacy: _angular_core.InputSignalWithTransform<boolean, unknown>;
3143
+ /** Start offset in seconds (YouTube / Vimeo). */
3144
+ readonly start: _angular_core.InputSignalWithTransform<number, unknown>;
3145
+ readonly ratio: _angular_core.InputSignal<DgaVideoRatio>;
3146
+ readonly rounded: _angular_core.InputSignalWithTransform<boolean, unknown>;
3147
+ /** Play button / iframe accessible name. */
3148
+ readonly playLabel: _angular_core.InputSignal<string>;
3149
+ readonly invalidLabel: _angular_core.InputSignal<string>;
3150
+ readonly unsupportedLabel: _angular_core.InputSignal<string>;
3151
+ readonly played: _angular_core.OutputEmitterRef<void>;
3152
+ readonly paused: _angular_core.OutputEmitterRef<void>;
3153
+ readonly ended: _angular_core.OutputEmitterRef<void>;
3154
+ readonly failed: _angular_core.OutputEmitterRef<Event>;
3155
+ readonly activatedChange: _angular_core.OutputEmitterRef<boolean>;
3156
+ readonly activated: _angular_core.WritableSignal<boolean>;
3157
+ readonly resolved: _angular_core.Signal<DgaVideoSourceInfo | null>;
3158
+ readonly providerBadge: _angular_core.Signal<"" | "YouTube" | "Vimeo">;
3159
+ readonly embedSrc: _angular_core.Signal<string | null>;
3160
+ readonly safeEmbed: _angular_core.Signal<SafeResourceUrl | null>;
3161
+ readonly shellClasses: _angular_core.Signal<string>;
3162
+ constructor();
3163
+ activate(): void;
3164
+ private buildEmbedUrl;
3165
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaVideoPlayer, never>;
3166
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaVideoPlayer, "dga-video-player", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "provider": { "alias": "provider"; "required": false; "isSignal": true; }; "poster": { "alias": "poster"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "controls": { "alias": "controls"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "muted": { "alias": "muted"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "playsInline": { "alias": "playsInline"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "privacy": { "alias": "privacy"; "required": false; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "playLabel": { "alias": "playLabel"; "required": false; "isSignal": true; }; "invalidLabel": { "alias": "invalidLabel"; "required": false; "isSignal": true; }; "unsupportedLabel": { "alias": "unsupportedLabel"; "required": false; "isSignal": true; }; }, { "played": "played"; "paused": "paused"; "ended": "ended"; "failed": "failed"; "activatedChange": "activatedChange"; }, never, never, true, never>;
3167
+ }
3168
+
3980
3169
  declare class DgaList {
3981
3170
  readonly ordered: _angular_core.InputSignalWithTransform<boolean, unknown>;
3982
3171
  readonly listClasses: _angular_core.Signal<string>;
@@ -4019,6 +3208,7 @@ declare class DgaInfoList {
4019
3208
  readonly copy: _angular_core.OutputEmitterRef<DgaInfoListItem>;
4020
3209
  readonly listClasses: _angular_core.Signal<string>;
4021
3210
  onCopy(item: DgaInfoListItem): void;
3211
+ safeHref(href: string | undefined | null): string;
4022
3212
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaInfoList, never>;
4023
3213
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaInfoList, "dga-info-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "copyLabel": { "alias": "copyLabel"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, { "copy": "copy"; }, never, never, true, never>;
4024
3214
  }
@@ -4487,5 +3677,20 @@ declare function dgaSaudiCityOptions(locale?: 'ar' | 'en', cities?: readonly Dga
4487
3677
  value: string;
4488
3678
  }[];
4489
3679
 
4490
- export { DGA_GREGORIAN_MONTHS, DGA_HIJRI_MONTHS, DGA_ICON_NAMES, DGA_ICON_SVG, DGA_LOGICAL_ICON_NAMES, DGA_PAGE_TRANSITION_NAMES, DGA_PHONE_COUNTRIES, DGA_RIYAL_SVG_PATH, DGA_RIYAL_VIEWBOX, DGA_SAUDI_CITIES, DGA_WEEKDAYS, DgaAccessibility, DgaAccessibilityService, DgaAccordion, DgaAccordionItem, DgaAlert, DgaAnnouncementBar, DgaAppShell, DgaAuthCard, DgaAutocomplete, DgaAvatar, DgaBadge, DgaBreadcrumb, DgaButton, DgaCard, DgaCardMedia, DgaCarousel, DgaCarouselSlideDirective, DgaChart, DgaChatbot, DgaCheckbox, DgaChip, DgaChipInput, DgaClamp, DgaCode, DgaCommand, DgaContentSwitcher, DgaContentSwitcherPanel, DgaContextMenu, DgaContextMenuTrigger, DgaCookies, DgaCopy, DgaDatePickerComponent as DgaDatePicker, DgaDescriptionList, DgaDialog, DgaDivider, DgaDrawer, DgaDualNav, DgaEmpty, DgaExpandable, DgaExport, DgaExportToolbar, DgaFeedback, DgaField, DgaFilterBar, DgaFooter, DgaFormControl, DgaFormEnd, DgaFormStart, DgaGrid, DgaHeader, DgaHero, DgaIcon, DgaIconBadge, DgaIconFontService, DgaImagePopup, DgaInfoList, DgaInput, DgaKbd, DgaKbdGroup, DgaLabel, DgaLink, DgaList, DgaLogoTile, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNativeSelect, DgaNavRail, DgaNumber, DgaNumberInput, DgaOtp, DgaPageFeedback, DgaPageHero, DgaPageTransition, DgaPagination, DgaPersona, DgaPhoneInput, DgaPreloader, DgaProgress, DgaQuote, DgaRadio, DgaRating, DgaRiyal, DgaScrollTop, DgaSection, DgaSelect, DgaShare, DgaSideInfo, DgaSideNav, DgaSkeleton, DgaSkipLink, DgaSlider, DgaSpinner, DgaStepper, DgaSwitch, DgaTab, DgaTable, DgaTabs, DgaTimePicker, DgaTimeline, DgaToast, DgaToastOutlet, DgaToastService, DgaToc, DgaToolbar, DgaTooltip, DgaTopBar, DgaTour, DgaUpload, decodePlatformscodeSvg, dgaAddMonths, dgaClampDate, dgaCoerceDate, dgaCompareDays, dgaDaysInMonth, dgaFormatDate, dgaGetCalendarParts, dgaGroupSaudiCitiesByRegion, dgaModeFromFormat, dgaMonthNames, dgaMonthStartWeekday, dgaNormalizeTime, dgaParseDate, dgaPartsToDate, dgaProvideValueAccessor, dgaSameDay, dgaSaudiCityOptions, dgaTodayUtc };
4491
- export type { DgaA11yBundle, DgaA11yMode, DgaA11yVisualFilter, DgaAccessibilityPosition, DgaAccordionSection, DgaAlertDisplay, DgaAlertVariant, DgaAnnouncementActionVariant, DgaAnnouncementAlign, DgaAnnouncementDensity, DgaAnnouncementElevation, DgaAnnouncementPersist, DgaAnnouncementTone, DgaAppShellAppearance, DgaAutocompleteOption, DgaAvatarSize, DgaBadgeSize, DgaBadgeVariant, DgaBreadcrumbItem, DgaBreadcrumbSeparator, DgaButtonSize, DgaButtonVariant, DgaCalendar, DgaCalendarParts, DgaCardActionsAlign, DgaCardAppearance, DgaCardBadge, DgaCardBorder, DgaCardPadding, DgaCardShadow, DgaCarouselSlide, DgaChartDataset, DgaChartPoint, DgaChartType, DgaChatbotAnimation, DgaChatbotFabTone, DgaChatbotMessage, DgaChatbotPosition, DgaChatbotSize, DgaCheckboxSize, DgaChipVariant, DgaCommandAppearance, DgaCommandGroup, DgaCommandItem, DgaContentSwitcherItem, DgaContextMenuItem, DgaContextMenuItemType, DgaCookieCategory, DgaCookieConsent, DgaCookieDecision, DgaCookiePreferences, DgaCookiesAlign, DgaCookiesPosition, DgaCurrency, DgaDateCalendar, DgaDatePickerMode, DgaDateRangeValue, DgaDescriptionItem, DgaDescriptionLayout, DgaDialogSize, DgaDividerOrientation, DgaDrawerSide, DgaDualNavCategory, DgaDualNavSection, DgaEmptyAppearance, DgaExportColumn, DgaExportData, DgaExportScope, DgaFeedbackSubmit, DgaFilterItem, DgaFooterAppearance, DgaFooterColumn, DgaFooterIconGroup, DgaFooterIconLink, DgaFooterLink, DgaFooterLogo, DgaFormControlSize, DgaFormStatus, DgaGridCols, DgaGridGap, DgaHeaderAction, DgaHeaderAppearance, DgaHeaderLoginConfig, DgaHeaderNotification, DgaHeaderNotificationAction, DgaHeaderNotificationTone, DgaHeaderNotificationsConfig, DgaHeaderSearchConfig, DgaHeaderSearchSuggestion, DgaHeaderUserConfig, DgaHeaderUserMenuLink, DgaHeroAppearance, DgaHeroImageMask, DgaHeroOverlayTone, DgaHeroSlide, DgaHeroTransition, DgaIconBadgeAppearance, DgaIconBadgeSize, DgaIconName, DgaIconSize, DgaIconTone, DgaImagePopupAnimation, DgaImagePopupImage, DgaImagePopupImageTransition, DgaImagePopupSource, DgaInfoListItem, DgaInputSize, DgaLinkVariant, DgaMenuItem, DgaMetricAppearance, DgaMetricTrend, DgaMobileNavMode, DgaModalAnimation, DgaModalSize, DgaMultiselectOption, DgaNativeSelectSize, DgaNavColumn, DgaNavDropdown, DgaNavDropdownLayout, DgaNavDropdownVariant, DgaNavFeatured, DgaNavItem, DgaNavLink, DgaNavRailActiveStyle, DgaNavRailAppearance, DgaNavRailItem, DgaNavRailPosition, DgaNavRailSize, DgaPageFeedbackAgreementLink, DgaPageFeedbackAnswer, DgaPageFeedbackOption, DgaPageFeedbackPhase, DgaPageFeedbackSubmit, DgaPageHeroTone, DgaPageTransitionName, DgaPhoneCountry, DgaPreloaderPersist, DgaProgressAppearance, DgaProgressSize, DgaProgressTone, DgaRadioSize, DgaRatingSize, DgaRiyalAppearance, DgaRiyalSize, DgaRiyalTone, DgaSaudiCity, DgaScrollTopPosition, DgaSectionTone, DgaSectionWidth, DgaSelectOpenMode, DgaSelectOption, DgaSelectSize, DgaShareAppearance, DgaSideInfoItem, DgaSideNavGroup, DgaSideNavItem, DgaSkeletonAnimation, DgaSkeletonRadius, DgaSkeletonShape, DgaSkeletonSize, DgaSortDir, DgaSpinnerSize, DgaSpinnerTone, DgaStampNotice, DgaStep, DgaStepStatus, DgaSwitchSize, DgaTabItem, DgaTableColumn, DgaTableDensity, DgaTimeFormat, DgaTimePickerFormat, DgaTimePickerSize, DgaTimelineItem, DgaToastAnimation, DgaToastLocation, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaTourPersist, DgaTourPlacement, DgaTourStep, DgaUploadAppearance, DgaUploadFile, DgaUploadRejectReason, DgaUploadRejection };
3680
+ declare function dgaResolveAppHref(href: string, baseHref?: string): string;
3681
+ /**
3682
+ * Safe href for config-driven links (CMS / schema).
3683
+ * Blocks dangerous schemes; keeps http(s), mailto, tel, hashes, and relative paths.
3684
+ */
3685
+ declare function dgaSafeHref(href: string | null | undefined, baseHref?: string): string;
3686
+
3687
+ declare function dgaSafeCssColor(value: string | null | undefined, fallback?: string): string;
3688
+
3689
+ /** Join truthy class names. */
3690
+ declare function dgaCx(...parts: Array<string | false | null | undefined>): string;
3691
+
3692
+ /** Infer UI locale from `<html lang>` (avoids importing `@a.nemreen/dga-tokens` into ng-packagr graph). */
3693
+ declare function dgaIsArabic(): boolean;
3694
+
3695
+ export { DGA_ICON_NAMES, DGA_ICON_SVG, DGA_LOGICAL_ICON_NAMES, DGA_PAGE_TRANSITION_NAMES, DGA_PHONE_COUNTRIES, DGA_RIYAL_SVG_PATH, DGA_RIYAL_VIEWBOX, DGA_SAUDI_CITIES, DgaAccordion, DgaAccordionItem, DgaAlert, DgaAnnouncementBar, DgaAppShell, DgaAuthCard, DgaAutocomplete, DgaAvatar, DgaBadge, DgaBreadcrumb, DgaButton, DgaCard, DgaCardMedia, DgaCarousel, DgaCarouselSlideDirective, DgaChart, DgaChatbot, DgaCheckbox, DgaChip, DgaChipInput, DgaClamp, DgaCode, DgaCommand, DgaContentSwitcher, DgaContentSwitcherPanel, DgaContextMenu, DgaContextMenuTrigger, DgaCopy, DgaDescriptionList, DgaDialog, DgaDivider, DgaDrawer, DgaDualNav, DgaEmpty, DgaExpandable, DgaExport, DgaExportToolbar, DgaFeedback, DgaField, DgaFilterBar, DgaFooter, DgaFormControl, DgaFormEnd, DgaFormStart, DgaGrid, DgaHero, DgaIcon, DgaIconBadge, DgaIconFontService, DgaImagePopup, DgaInfoList, DgaInput, DgaKbd, DgaKbdGroup, DgaLabel, DgaLink, DgaList, DgaLogoTile, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNativeSelect, DgaNavRail, DgaNumber, DgaNumberInput, DgaOtp, DgaPageFeedback, DgaPageHero, DgaPageTransition, DgaPagination, DgaPersona, DgaPhoneInput, DgaPreloader, DgaProgress, DgaQuote, DgaRadio, DgaRating, DgaRiyal, DgaScrollTop, DgaSection, DgaSelect, DgaShare, DgaSideInfo, DgaSideNav, DgaSkeleton, DgaSkipLink, DgaSlider, DgaSpinner, DgaStepper, DgaSwitch, DgaTab, DgaTable, DgaTabs, DgaTimePicker, DgaTimeline, DgaToast, DgaToastOutlet, DgaToastService, DgaToc, DgaToolbar, DgaTooltip, DgaTopBar, DgaTour, DgaUpload, DgaVideoPlayer, DgaWriting, dgaCx, dgaFormStatusFromInvalid, dgaGroupSaudiCitiesByRegion, dgaIsArabic, dgaNormalizeTime, dgaProvideValueAccessor, dgaResolveAppHref, dgaResolveVideoSource, dgaSafeCssColor, dgaSafeHref, dgaSaudiCityOptions };
3696
+ export type { DgaAccordionSection, DgaAlertDisplay, DgaAlertVariant, DgaAnnouncementActionVariant, DgaAnnouncementAlign, DgaAnnouncementDensity, DgaAnnouncementElevation, DgaAnnouncementPersist, DgaAnnouncementTone, DgaAppShellAppearance, DgaAutocompleteOption, DgaAvatarSize, DgaBadgeSize, DgaBadgeVariant, DgaBreadcrumbItem, DgaBreadcrumbSeparator, DgaButtonSize, DgaButtonVariant, DgaCalendar, DgaCardActionsAlign, DgaCardAppearance, DgaCardBadge, DgaCardBorder, DgaCardPadding, DgaCardShadow, DgaCarouselSlide, DgaChartDataset, DgaChartPoint, DgaChartType, DgaChatbotAnimation, DgaChatbotFabTone, DgaChatbotMessage, DgaChatbotPosition, DgaChatbotSize, DgaCheckboxSize, DgaChipVariant, DgaCommandAppearance, DgaCommandGroup, DgaCommandItem, DgaContentSwitcherItem, DgaContextMenuItem, DgaContextMenuItemType, DgaCurrency, DgaDescriptionItem, DgaDescriptionLayout, DgaDialogSize, DgaDividerOrientation, DgaDrawerSide, DgaDualNavCategory, DgaDualNavSection, DgaEmptyAppearance, DgaExportColumn, DgaExportData, DgaExportScope, DgaFeedbackSubmit, DgaFilterItem, DgaFooterAppearance, DgaFooterColumn, DgaFooterIconGroup, DgaFooterIconLink, DgaFooterLink, DgaFooterLogo, DgaFormControlSize, DgaFormStatus, DgaGridCols, DgaGridGap, DgaHeroAppearance, DgaHeroImageMask, DgaHeroOverlayTone, DgaHeroSlide, DgaHeroTransition, DgaIconBadgeAppearance, DgaIconBadgeSize, DgaIconName, DgaIconSize, DgaIconTone, DgaImagePopupAnimation, DgaImagePopupImage, DgaImagePopupImageTransition, DgaImagePopupSource, DgaInfoListItem, DgaInputSize, DgaLinkVariant, DgaMenuItem, DgaMetricAppearance, DgaMetricTrend, DgaModalAnimation, DgaModalSize, DgaMultiselectOption, DgaNativeSelectSize, DgaNavRailActiveStyle, DgaNavRailAppearance, DgaNavRailItem, DgaNavRailPosition, DgaNavRailSize, DgaPageFeedbackAgreementLink, DgaPageFeedbackAnswer, DgaPageFeedbackOption, DgaPageFeedbackPhase, DgaPageFeedbackSubmit, DgaPageHeroTone, DgaPageTransitionName, DgaPhoneCountry, DgaPreloaderPersist, DgaProgressAppearance, DgaProgressSize, DgaProgressTone, DgaRadioSize, DgaRatingSize, DgaRiyalAppearance, DgaRiyalSize, DgaRiyalTone, DgaSaudiCity, DgaScrollTopPosition, DgaSectionTone, DgaSectionWidth, DgaSelectOpenMode, DgaSelectOption, DgaSelectSize, DgaShareAppearance, DgaSideInfoItem, DgaSideNavGroup, DgaSideNavItem, DgaSkeletonAnimation, DgaSkeletonRadius, DgaSkeletonShape, DgaSkeletonSize, DgaSortDir, DgaSpinnerSize, DgaSpinnerTone, DgaStampNotice, DgaStep, DgaStepStatus, DgaSwitchSize, DgaTabItem, DgaTableColumn, DgaTableDensity, DgaTimeFormat, DgaTimePickerFormat, DgaTimePickerSize, DgaTimelineItem, DgaToastAnimation, DgaToastLocation, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaTourPersist, DgaTourPlacement, DgaTourStep, DgaUploadAppearance, DgaUploadFile, DgaUploadRejectReason, DgaUploadRejection, DgaVideoProvider, DgaVideoRatio, DgaVideoSourceInfo, DgaWritingEffect };