@a.nemreen/dga-ui 0.3.1 → 0.3.3

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
 
@@ -469,6 +513,8 @@ declare class DgaSelect implements ControlValueAccessor {
469
513
  readonly disabled: _angular_core.Signal<boolean>;
470
514
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
471
515
  readonly valueChange: _angular_core.OutputEmitterRef<string | string[]>;
516
+ /** Emitted when the searchable query changes (remote lookup fields). */
517
+ readonly searchChange: _angular_core.OutputEmitterRef<string>;
472
518
  private onChange;
473
519
  private onTouched;
474
520
  readonly open: _angular_core.WritableSignal<boolean>;
@@ -508,7 +554,7 @@ declare class DgaSelect implements ControlValueAccessor {
508
554
  private firstEnabledIndex;
509
555
  private lastEnabledIndex;
510
556
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSelect, never>;
511
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSelect, "dga-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "openMode": { "alias": "openMode"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "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; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
557
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSelect, "dga-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "openMode": { "alias": "openMode"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "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; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "searchChange": "searchChange"; }, never, never, true, never>;
512
558
  }
513
559
 
514
560
  /**
@@ -642,6 +688,7 @@ declare class DgaChipInput implements ControlValueAccessor {
642
688
  readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
643
689
  private readonly cvaDisabled;
644
690
  readonly disabled: _angular_core.Signal<boolean>;
691
+ readonly allowDuplicates: _angular_core.InputSignalWithTransform<boolean, unknown>;
645
692
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
646
693
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
647
694
  readonly valueChange: _angular_core.OutputEmitterRef<string[]>;
@@ -659,7 +706,7 @@ declare class DgaChipInput implements ControlValueAccessor {
659
706
  setDisabledState(isDisabled: boolean): void;
660
707
  private emitValue;
661
708
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChipInput, never>;
662
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChipInput, "dga-chip-input", never, { "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; }; "disabledInput": { "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>;
709
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChipInput, "dga-chip-input", never, { "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; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
663
710
  }
664
711
 
665
712
  interface DgaUploadFile {
@@ -802,208 +849,6 @@ declare class DgaMultiselect {
802
849
  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
850
  }
804
851
 
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
852
  type DgaTimePickerSize = DgaNativeSelectSize;
1008
853
  type DgaTimePickerFormat = '24h' | '12h';
1009
854
  declare function pad2(n: number): string;
@@ -1176,7 +1021,7 @@ declare class DgaToast implements OnDestroy {
1176
1021
  readonly edgeTop: _angular_core.Signal<"calc(var(--dga-announcement-offset, 0px) + 1rem)" | null>;
1177
1022
  readonly edgeBottom: _angular_core.Signal<"1rem" | null>;
1178
1023
  readonly iconName: _angular_core.Signal<DgaIconName>;
1179
- readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
1024
+ readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1180
1025
  readonly showCountdown: _angular_core.Signal<boolean>;
1181
1026
  readonly reduceMotion: _angular_core.WritableSignal<boolean>;
1182
1027
  readonly ringDashOffset: _angular_core.Signal<number>;
@@ -1798,7 +1643,7 @@ declare class DgaAlert {
1798
1643
  readonly titleClasses: _angular_core.Signal<string>;
1799
1644
  readonly descriptionClasses: _angular_core.Signal<string>;
1800
1645
  readonly iconName: _angular_core.Signal<DgaIconName>;
1801
- readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
1646
+ readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1802
1647
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1803
1648
  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
1649
  }
@@ -1912,204 +1757,11 @@ declare class DgaPageFeedback {
1912
1757
  onSubmit(event: Event): void;
1913
1758
  /** From details → idle; from thanks → dismiss the panel. */
1914
1759
  close(): void;
1760
+ safeHref(href: string | undefined | null): string;
1915
1761
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPageFeedback, never>;
1916
1762
  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
1763
  }
1918
1764
 
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
1765
  type DgaRatingSize = 'sm' | 'md' | 'lg';
2114
1766
  declare class DgaRating {
2115
1767
  readonly value: _angular_core.ModelSignal<number>;
@@ -2306,243 +1958,6 @@ declare class DgaChatbot {
2306
1958
  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
1959
  }
2308
1960
 
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
1961
  /**
2547
1962
  * Visually hidden until focused — first tab stop for keyboard users.
2548
1963
  * Place near the top of the document; `href` should target main content id.
@@ -2550,6 +1965,7 @@ declare class DgaAccessibility {
2550
1965
  declare class DgaSkipLink {
2551
1966
  readonly href: _angular_core.InputSignal<string>;
2552
1967
  readonly label: _angular_core.InputSignal<string>;
1968
+ safeHref(href: string | undefined | null): string;
2553
1969
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSkipLink, never>;
2554
1970
  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
1971
  }
@@ -2596,17 +2012,65 @@ interface DgaBreadcrumbItem {
2596
2012
  href?: string;
2597
2013
  }
2598
2014
  type DgaBreadcrumbSeparator = 'chevron' | 'slash';
2015
+ type BreadcrumbSlot = {
2016
+ kind: 'item';
2017
+ item: DgaBreadcrumbItem;
2018
+ index: number;
2019
+ current: boolean;
2020
+ } | {
2021
+ kind: 'collapse';
2022
+ hidden: DgaBreadcrumbItem[];
2023
+ };
2024
+ /**
2025
+ * Breadcrumb trail with collapse + label truncation for long paths.
2026
+ *
2027
+ * ```html
2028
+ * <dga-breadcrumb [items]="crumbs" [maxItems]="4" />
2029
+ * ```
2030
+ *
2031
+ * When `items.length > maxItems`, middle crumbs collapse behind an ellipsis menu.
2032
+ * Set `maxItems` to `0` to disable collapse. Long labels truncate when `truncate` is on.
2033
+ */
2599
2034
  declare class DgaBreadcrumb {
2035
+ private readonly host;
2036
+ private readonly destroyRef;
2600
2037
  private readonly baseHref;
2038
+ private static seq;
2039
+ readonly menuId: string;
2601
2040
  readonly items: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
2602
2041
  readonly label: _angular_core.InputSignal<string>;
2603
2042
  readonly separator: _angular_core.InputSignal<DgaBreadcrumbSeparator>;
2043
+ /**
2044
+ * Collapse middle items when the trail is longer than this.
2045
+ * `0` disables collapse.
2046
+ */
2047
+ readonly maxItems: _angular_core.InputSignalWithTransform<number, unknown>;
2048
+ /** Crumbs kept at the start when collapsing. */
2049
+ readonly itemsBeforeCollapse: _angular_core.InputSignalWithTransform<number, unknown>;
2050
+ /** Crumbs kept at the end when collapsing (includes current page). */
2051
+ readonly itemsAfterCollapse: _angular_core.InputSignalWithTransform<number, unknown>;
2052
+ /** Truncate long labels with ellipsis. */
2053
+ readonly truncate: _angular_core.InputSignalWithTransform<boolean, unknown>;
2054
+ /** Accessible name for the overflow (“…”) control. */
2055
+ readonly moreLabel: _angular_core.InputSignal<string>;
2604
2056
  /** Emits the clicked item for non-last links. Navigation via `href` is not prevented. */
2605
2057
  readonly itemClick: _angular_core.OutputEmitterRef<DgaBreadcrumbItem>;
2058
+ readonly overflowOpen: _angular_core.WritableSignal<boolean>;
2059
+ readonly slots: _angular_core.Signal<BreadcrumbSlot[]>;
2060
+ readonly listClasses: _angular_core.Signal<string>;
2061
+ readonly linkClasses: _angular_core.Signal<string>;
2062
+ readonly mutedClasses: _angular_core.Signal<string>;
2063
+ readonly currentClasses: _angular_core.Signal<string>;
2064
+ constructor();
2065
+ trackSlot(slot: BreadcrumbSlot, index: number): string;
2606
2066
  appHref(href: string | undefined | null): string;
2607
2067
  onItemClick(item: DgaBreadcrumbItem): void;
2068
+ toggleOverflow(event: MouseEvent): void;
2069
+ onOverflowItemClick(item: DgaBreadcrumbItem): void;
2070
+ onDocumentClick(event: MouseEvent): void;
2071
+ onDocumentKey(event: KeyboardEvent): void;
2608
2072
  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>;
2073
+ 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
2074
  }
2611
2075
 
2612
2076
  declare class DgaPagination {
@@ -2783,7 +2247,7 @@ declare class DgaSideNav {
2783
2247
  /**
2784
2248
  * `auto` = horizontal chips below lg; `vertical` = always sidebar (use in drawers).
2785
2249
  */
2786
- readonly layout: _angular_core.InputSignal<"auto" | "vertical">;
2250
+ readonly layout: _angular_core.InputSignal<"vertical" | "auto">;
2787
2251
  readonly label: _angular_core.InputSignal<string>;
2788
2252
  readonly toggleLabel: _angular_core.InputSignal<string>;
2789
2253
  readonly select: _angular_core.OutputEmitterRef<DgaSideNavItem>;
@@ -2801,6 +2265,7 @@ declare class DgaSideNav {
2801
2265
  onSelect(item: DgaSideNavItem, event?: Event): void;
2802
2266
  private childIsActive;
2803
2267
  private toggleExpanded;
2268
+ safeHref(href: string | undefined | null): string;
2804
2269
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSideNav, never>;
2805
2270
  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
2271
  }
@@ -2883,9 +2348,9 @@ declare class DgaNavRail {
2883
2348
  readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2884
2349
  readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
2885
2350
  readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
2886
- readonly edgeAttr: _angular_core.Signal<"end" | "start" | "right" | "left" | null>;
2351
+ readonly edgeAttr: _angular_core.Signal<"start" | "end" | "left" | "right" | null>;
2887
2352
  readonly offsetCss: _angular_core.Signal<string>;
2888
- readonly tooltipPlacement: _angular_core.Signal<"end" | "start">;
2353
+ readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
2889
2354
  readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;
2890
2355
  readonly expandIcon: _angular_core.Signal<"chevronLeft" | "chevronRight">;
2891
2356
  readonly listGapClass: _angular_core.Signal<"gap-xs" | "gap-sm" | "gap-md">;
@@ -2895,6 +2360,7 @@ declare class DgaNavRail {
2895
2360
  onSelect(item: DgaNavRailItem, event?: MouseEvent): void;
2896
2361
  toggleExpand(): void;
2897
2362
  private prefersReducedMotion;
2363
+ safeHref(href: string | undefined | null): string;
2898
2364
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNavRail, never>;
2899
2365
  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
2366
  }
@@ -3051,6 +2517,7 @@ declare class DgaCard {
3051
2517
  iconGlyphSize(): DgaIconSize;
3052
2518
  actionsHostClass(): string;
3053
2519
  builtInActionsClass(): string;
2520
+ safeHref(href: string | undefined | null): string;
3054
2521
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCard, never>;
3055
2522
  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
2523
  }
@@ -3156,363 +2623,6 @@ declare class DgaAppShell {
3156
2623
  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
2624
  }
3158
2625
 
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
2626
  interface DgaStampNotice {
3517
2627
  title: string;
3518
2628
  /** Substring of `title` rendered bold in the primary color (e.g. `gov.sa`). */
@@ -3571,6 +2681,7 @@ declare class DgaTopBar implements OnInit {
3571
2681
  toggle(): void;
3572
2682
  toggleCalendar(): void;
3573
2683
  toggleTimeFormat(): void;
2684
+ safeHref(href: string | undefined | null): string;
3574
2685
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTopBar, never>;
3575
2686
  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
2687
  }
@@ -3760,6 +2871,7 @@ declare class DgaHero {
3760
2871
  onPrimary(index?: number): void;
3761
2872
  onSecondary(index?: number): void;
3762
2873
  private clearAutoplay;
2874
+ safeHref(href: string | undefined | null): string;
3763
2875
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaHero, never>;
3764
2876
  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
2877
  }
@@ -3774,6 +2886,10 @@ declare class DgaPageHero {
3774
2886
  readonly description: _angular_core.InputSignal<string>;
3775
2887
  readonly breadcrumbs: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
3776
2888
  readonly breadcrumbLabel: _angular_core.InputSignal<string>;
2889
+ /** Forwarded to `dga-breadcrumb` — collapse when trail exceeds this (`0` = off). */
2890
+ readonly breadcrumbMaxItems: _angular_core.InputSignalWithTransform<number, unknown>;
2891
+ readonly breadcrumbTruncate: _angular_core.InputSignalWithTransform<boolean, unknown>;
2892
+ readonly breadcrumbMoreLabel: _angular_core.InputSignal<string>;
3777
2893
  readonly tone: _angular_core.InputSignal<DgaPageHeroTone>;
3778
2894
  /** Extra bottom padding for denser pages. */
3779
2895
  readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -3781,7 +2897,7 @@ declare class DgaPageHero {
3781
2897
  readonly titleId: string;
3782
2898
  readonly sectionClasses: _angular_core.Signal<string>;
3783
2899
  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>;
2900
+ 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
2901
  }
3786
2902
 
3787
2903
  type DgaAnnouncementTone = 'info' | 'warning' | 'success' | 'neutral' | 'critical' | 'brand';
@@ -3847,6 +2963,7 @@ declare class DgaAnnouncementBar {
3847
2963
  private storage;
3848
2964
  private readPersisted;
3849
2965
  private writePersisted;
2966
+ safeActionHref(): string;
3850
2967
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAnnouncementBar, never>;
3851
2968
  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
2969
  }
@@ -3883,6 +3000,7 @@ declare class DgaSideInfo {
3883
3000
  isActive(item: DgaSideInfoItem): boolean;
3884
3001
  itemClasses(item: DgaSideInfoItem): string;
3885
3002
  onSelect(item: DgaSideInfoItem): void;
3003
+ safeHref(href: string | undefined | null): string;
3886
3004
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSideInfo, never>;
3887
3005
  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
3006
  }
@@ -3977,6 +3095,80 @@ declare class DgaCode {
3977
3095
  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
3096
  }
3979
3097
 
3098
+ type DgaVideoProvider = 'auto' | 'youtube' | 'vimeo' | 'html5';
3099
+ type DgaVideoRatio = '16:9' | '4:3' | '1:1' | '9:16' | '21:9';
3100
+ interface DgaVideoSourceInfo {
3101
+ provider: Exclude<DgaVideoProvider, 'auto'>;
3102
+ /** Provider media id (YouTube / Vimeo) or original URL (html5). */
3103
+ id: string;
3104
+ fileUrl: string | null;
3105
+ }
3106
+ /** Resolve provider + safe playback URLs from a source string. */
3107
+ declare function dgaResolveVideoSource(src: string, provider?: DgaVideoProvider): DgaVideoSourceInfo | null;
3108
+ /**
3109
+ * Responsive video player for YouTube, Vimeo, and HTML5 (mp4/webm/…).
3110
+ *
3111
+ * ```html
3112
+ * <dga-video-player
3113
+ * src="https://www.youtube.com/watch?v=aqz-KE-bpKQ"
3114
+ * poster="/assets/poster.jpg"
3115
+ * title="Demo"
3116
+ * ratio="16:9"
3117
+ * />
3118
+ * ```
3119
+ *
3120
+ * Embeds default to click-to-load (`lazy`) for privacy/perf. HTML5 uses native controls.
3121
+ */
3122
+ declare class DgaVideoPlayer {
3123
+ private readonly sanitizer;
3124
+ /** Watch / share URL, embed URL, file URL, or bare YouTube/Vimeo id. */
3125
+ readonly src: _angular_core.InputSignal<string>;
3126
+ /** Force provider; default auto-detects from `src`. */
3127
+ readonly provider: _angular_core.InputSignal<DgaVideoProvider>;
3128
+ /** Poster image (HTML5 + lazy embed cover). */
3129
+ readonly poster: _angular_core.InputSignal<string>;
3130
+ /** Accessible / iframe title. */
3131
+ readonly title: _angular_core.InputSignal<string>;
3132
+ /** Show native / embed controls. */
3133
+ readonly controls: _angular_core.InputSignalWithTransform<boolean, unknown>;
3134
+ /** Autoplay (embeds load immediately; browsers usually require muted). */
3135
+ readonly autoplay: _angular_core.InputSignalWithTransform<boolean, unknown>;
3136
+ readonly muted: _angular_core.InputSignalWithTransform<boolean, unknown>;
3137
+ readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
3138
+ readonly playsInline: _angular_core.InputSignalWithTransform<boolean, unknown>;
3139
+ /**
3140
+ * Click-to-load for YouTube/Vimeo (privacy + faster page).
3141
+ * Ignored when `autoplay` is true.
3142
+ */
3143
+ readonly lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
3144
+ /** Prefer youtube-nocookie.com embeds. */
3145
+ readonly privacy: _angular_core.InputSignalWithTransform<boolean, unknown>;
3146
+ /** Start offset in seconds (YouTube / Vimeo). */
3147
+ readonly start: _angular_core.InputSignalWithTransform<number, unknown>;
3148
+ readonly ratio: _angular_core.InputSignal<DgaVideoRatio>;
3149
+ readonly rounded: _angular_core.InputSignalWithTransform<boolean, unknown>;
3150
+ /** Play button / iframe accessible name. */
3151
+ readonly playLabel: _angular_core.InputSignal<string>;
3152
+ readonly invalidLabel: _angular_core.InputSignal<string>;
3153
+ readonly unsupportedLabel: _angular_core.InputSignal<string>;
3154
+ readonly played: _angular_core.OutputEmitterRef<void>;
3155
+ readonly paused: _angular_core.OutputEmitterRef<void>;
3156
+ readonly ended: _angular_core.OutputEmitterRef<void>;
3157
+ readonly failed: _angular_core.OutputEmitterRef<Event>;
3158
+ readonly activatedChange: _angular_core.OutputEmitterRef<boolean>;
3159
+ readonly activated: _angular_core.WritableSignal<boolean>;
3160
+ readonly resolved: _angular_core.Signal<DgaVideoSourceInfo | null>;
3161
+ readonly providerBadge: _angular_core.Signal<"" | "YouTube" | "Vimeo">;
3162
+ readonly embedSrc: _angular_core.Signal<string | null>;
3163
+ readonly safeEmbed: _angular_core.Signal<SafeResourceUrl | null>;
3164
+ readonly shellClasses: _angular_core.Signal<string>;
3165
+ constructor();
3166
+ activate(): void;
3167
+ private buildEmbedUrl;
3168
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaVideoPlayer, never>;
3169
+ 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>;
3170
+ }
3171
+
3980
3172
  declare class DgaList {
3981
3173
  readonly ordered: _angular_core.InputSignalWithTransform<boolean, unknown>;
3982
3174
  readonly listClasses: _angular_core.Signal<string>;
@@ -4019,6 +3211,7 @@ declare class DgaInfoList {
4019
3211
  readonly copy: _angular_core.OutputEmitterRef<DgaInfoListItem>;
4020
3212
  readonly listClasses: _angular_core.Signal<string>;
4021
3213
  onCopy(item: DgaInfoListItem): void;
3214
+ safeHref(href: string | undefined | null): string;
4022
3215
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaInfoList, never>;
4023
3216
  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
3217
  }
@@ -4313,6 +3506,7 @@ declare class DgaCarousel {
4313
3506
  private pageScrollAmount;
4314
3507
  private scrollToPage;
4315
3508
  private isRtl;
3509
+ private normalizedScrollLeft;
4316
3510
  onKeydown(event: KeyboardEvent): void;
4317
3511
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCarousel, never>;
4318
3512
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCarousel, "dga-carousel", never, { "slides": { "alias": "slides"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; "slidesMax": { "alias": "slidesMax"; "required": false; "isSignal": true; }; "slidesMid": { "alias": "slidesMid"; "required": false; "isSignal": true; }; "slidesMin": { "alias": "slidesMin"; "required": false; "isSignal": true; }; "peek": { "alias": "peek"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "dotsLabel": { "alias": "dotsLabel"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; }, { "index": "indexChange"; }, ["projected"], ["*"], true, never>;
@@ -4487,5 +3681,20 @@ declare function dgaSaudiCityOptions(locale?: 'ar' | 'en', cities?: readonly Dga
4487
3681
  value: string;
4488
3682
  }[];
4489
3683
 
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 };
3684
+ declare function dgaResolveAppHref(href: string, baseHref?: string): string;
3685
+ /**
3686
+ * Safe href for config-driven links (CMS / schema).
3687
+ * Blocks dangerous schemes; keeps http(s), mailto, tel, hashes, and relative paths.
3688
+ */
3689
+ declare function dgaSafeHref(href: string | null | undefined, baseHref?: string): string;
3690
+
3691
+ declare function dgaSafeCssColor(value: string | null | undefined, fallback?: string): string;
3692
+
3693
+ /** Join truthy class names. */
3694
+ declare function dgaCx(...parts: Array<string | false | null | undefined>): string;
3695
+
3696
+ /** Infer UI locale from `<html lang>` (avoids importing `@a.nemreen/dga-tokens` into ng-packagr graph). */
3697
+ declare function dgaIsArabic(): boolean;
3698
+
3699
+ 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 };
3700
+ 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 };