@a.nemreen/dga-ui 0.3.0 → 0.3.1

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.
@@ -5,6 +5,54 @@ 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';
7
7
 
8
+ /** Creative named page transitions for `dga-page-transition`. */
9
+ declare const DGA_PAGE_TRANSITION_NAMES: readonly ["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"];
10
+ type DgaPageTransitionName = (typeof DGA_PAGE_TRANSITION_NAMES)[number];
11
+ /**
12
+ * Easy page / content transition wrapper.
13
+ *
14
+ * ```html
15
+ * <dga-page-transition name="fade-up">
16
+ * <router-outlet />
17
+ * </dga-page-transition>
18
+ * ```
19
+ *
20
+ * Triggers: Angular `NavigationEnd`, or a change to `key` (playground / content swap).
21
+ * Progressive enhancement: sets `view-transition-name: dga-page` so apps using
22
+ * `withViewTransitions()` get named snapshot animations. Keyframe enter runs as fallback.
23
+ * Honors `prefers-reduced-motion` and DGA a11y `reduce-motion`.
24
+ */
25
+ declare class DgaPageTransition {
26
+ private readonly host;
27
+ private readonly doc;
28
+ private readonly destroyRef;
29
+ private readonly a11y;
30
+ private readonly router;
31
+ /** Named creative transition. Unknown values resolve to `none`. */
32
+ readonly name: _angular_core.InputSignal<string>;
33
+ /** Duration in milliseconds (also drives `--dga-pt-ms`). */
34
+ readonly duration: _angular_core.InputSignalWithTransform<number, unknown>;
35
+ /** Skip all motion. */
36
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
37
+ /**
38
+ * Bump this to re-play the enter animation (content swaps / gallery playground).
39
+ * For View Transition snapshots, wrap the key update in `document.startViewTransition`.
40
+ */
41
+ readonly key: _angular_core.InputSignal<string | number | null>;
42
+ 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">;
44
+ readonly durationCss: _angular_core.Signal<string>;
45
+ private htmlAttr;
46
+ private keyPrimed;
47
+ constructor();
48
+ /** Re-trigger the enter animation (e.g. from a Play control). */
49
+ play(): void;
50
+ protected onAnimationEnd(event: AnimationEvent): void;
51
+ private shouldReduceMotion;
52
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPageTransition, never>;
53
+ 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
+ }
55
+
8
56
  type DgaButtonVariant = 'primary' | 'secondary' | 'subtle' | 'outline' | 'outlineMuted' | 'outlineInverse' | 'ghost' | 'danger' | 'inverse';
9
57
  type DgaButtonSize = 'sm' | 'md' | 'lg';
10
58
  declare class DgaButton {
@@ -60,6 +108,34 @@ declare class DgaChip {
60
108
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChip, "dga-chip", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
61
109
  }
62
110
 
111
+ /**
112
+ * Keyboard key badge — mirrors shadcn `Kbd` for shortcut hints.
113
+ *
114
+ * @see https://ui.shadcn.com/docs/components/base/kbd
115
+ *
116
+ * @example
117
+ * ```html
118
+ * <dga-kbd>Ctrl</dga-kbd>
119
+ * <dga-kbd-group>
120
+ * <dga-kbd>⌘</dga-kbd>
121
+ * <dga-kbd>K</dga-kbd>
122
+ * </dga-kbd-group>
123
+ * ```
124
+ */
125
+ declare class DgaKbd {
126
+ readonly size: _angular_core.InputSignal<"sm" | "md">;
127
+ readonly classes: _angular_core.Signal<string>;
128
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaKbd, never>;
129
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaKbd, "dga-kbd", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
130
+ }
131
+ /**
132
+ * Groups related keyboard keys (e.g. ⌘ + K).
133
+ */
134
+ declare class DgaKbdGroup {
135
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaKbdGroup, never>;
136
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaKbdGroup, "dga-kbd-group", never, {}, {}, never, ["*"], true, never>;
137
+ }
138
+
63
139
  type DgaDividerOrientation = 'horizontal' | 'vertical';
64
140
  declare class DgaDivider {
65
141
  readonly orientation: _angular_core.InputSignal<DgaDividerOrientation>;
@@ -138,7 +214,7 @@ declare class DgaProgress {
138
214
  readonly circumference: number;
139
215
  readonly clamped: _angular_core.Signal<number>;
140
216
  readonly dashOffset: _angular_core.Signal<number>;
141
- readonly hostClasses: _angular_core.Signal<"block w-full" | "inline-flex">;
217
+ readonly hostClasses: _angular_core.Signal<"inline-flex" | "block w-full">;
142
218
  readonly trackClasses: _angular_core.Signal<string>;
143
219
  readonly barClasses: _angular_core.Signal<string>;
144
220
  readonly radialWrapClasses: _angular_core.Signal<string>;
@@ -160,7 +236,7 @@ declare class DgaAvatar {
160
236
  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>;
161
237
  }
162
238
 
163
- type DgaIconName = 'access' | 'check' | 'close' | 'info' | 'helpCircle' | 'warning' | 'alertCircle' | 'error' | 'eye' | 'eyeOff' | 'eyeOffSlash' | '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';
239
+ 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';
164
240
  /** Decode `@platformscode/icons` data-URI exports into inline SVG markup. */
165
241
  declare function decodePlatformscodeSvg(dataUri: string): string;
166
242
  /** Pre-decoded SVG markup keyed by friendly `DgaIconName`. */
@@ -364,6 +440,8 @@ interface DgaSelectOption {
364
440
  label: string;
365
441
  value: string;
366
442
  disabled?: boolean;
443
+ /** Extra text matched when `searchable` (e.g. country name). */
444
+ keywords?: string;
367
445
  }
368
446
  type DgaSelectOpenMode = 'dropdown' | 'always';
369
447
  type DgaSelectSize = DgaFormControlSize;
@@ -518,6 +596,10 @@ declare class DgaSlider {
518
596
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaSlider, "input[type=\"range\"][dgaSlider]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
519
597
  }
520
598
 
599
+ /**
600
+ * Multi-cell one-time password input.
601
+ * The control group is always LTR so digits read and fill left-to-right on RTL pages.
602
+ */
521
603
  declare class DgaOtp implements ControlValueAccessor {
522
604
  private cells;
523
605
  readonly length: _angular_core.InputSignal<number>;
@@ -539,6 +621,9 @@ declare class DgaOtp implements ControlValueAccessor {
539
621
  onInput(index: number, raw: string): void;
540
622
  onKey(index: number, event: KeyboardEvent): void;
541
623
  onPaste(event: ClipboardEvent): void;
624
+ private focusAt;
625
+ /** Keep native inputs in sync when autofill bypasses `maxlength`. */
626
+ private syncDom;
542
627
  private commit;
543
628
  writeValue(value: string): void;
544
629
  registerOnChange(fn: (value: string) => void): void;
@@ -634,13 +719,13 @@ interface DgaPhoneCountry {
634
719
  code: string;
635
720
  /** Short label shown in the prefix select. */
636
721
  label: string;
637
- /** Optional longer name for option text. */
722
+ /** Optional longer name for option text / search. */
638
723
  name?: string;
639
724
  }
640
725
  /** GCC-first dial codes for contact forms. */
641
726
  declare const DGA_PHONE_COUNTRIES: DgaPhoneCountry[];
642
727
  /**
643
- * Phone field with country-code prefix select.
728
+ * Phone field with searchable country-code prefix select.
644
729
  * The control group is always LTR so digits and codes read correctly in RTL pages.
645
730
  */
646
731
  declare class DgaPhoneInput implements ControlValueAccessor {
@@ -659,10 +744,13 @@ declare class DgaPhoneInput implements ControlValueAccessor {
659
744
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
660
745
  /** Full E.164-ish combined value: country code + national digits. */
661
746
  readonly value: _angular_core.ModelSignal<string>;
747
+ readonly countryOptions: _angular_core.Signal<DgaSelectOption[]>;
748
+ readonly resolvedStatus: _angular_core.Signal<_a_nemreen_dga_ui.DgaFormStatus>;
662
749
  readonly groupClasses: _angular_core.Signal<string>;
663
750
  private onChange;
664
751
  onTouched: () => void;
665
752
  constructor();
753
+ onCountryCode(next: string | string[]): void;
666
754
  writeValue(value: string): void;
667
755
  registerOnChange(fn: (value: string) => void): void;
668
756
  registerOnTouched(fn: () => void): void;
@@ -814,7 +902,7 @@ declare class DgaDatePickerComponent implements ControlValueAccessor {
814
902
  readonly viewParts: _angular_core.WritableSignal<DgaCalendarParts>;
815
903
  readonly draftStart: _angular_core.WritableSignal<Date | null>;
816
904
  readonly draftEnd: _angular_core.WritableSignal<Date | null>;
817
- readonly rangePickPhase: _angular_core.WritableSignal<"start" | "end">;
905
+ readonly rangePickPhase: _angular_core.WritableSignal<"end" | "start">;
818
906
  readonly typedValue: _angular_core.WritableSignal<string | null>;
819
907
  readonly effectiveStatus: _angular_core.Signal<DgaFormStatus>;
820
908
  readonly panelMode: _angular_core.Signal<DgaDatePickerMode>;
@@ -1031,7 +1119,22 @@ declare class DgaModal {
1031
1119
  }
1032
1120
 
1033
1121
  type DgaToastVariant = 'neutral' | 'success' | 'info' | 'warning' | 'error';
1122
+ /**
1123
+ * Enter / exit motion:
1124
+ * - `fade` — opacity only
1125
+ * - `push` — drop in from the nearest vertical edge (default)
1126
+ * - `slide` — slide in from the nearest inline edge
1127
+ * - `scale` — fade + slight scale
1128
+ * - `none` — instant
1129
+ */
1130
+ type DgaToastAnimation = 'fade' | 'push' | 'slide' | 'scale' | 'none';
1131
+ /**
1132
+ * Viewport placement (logical start/end follow `dir`).
1133
+ * Default `top-end` matches prior fixed `end` + top chrome offset.
1134
+ */
1135
+ type DgaToastLocation = 'top-start' | 'top-center' | 'top-end' | 'bottom-start' | 'bottom-center' | 'bottom-end';
1034
1136
  declare class DgaToast implements OnDestroy {
1137
+ private readonly destroyRef;
1035
1138
  readonly open: _angular_core.ModelSignal<boolean>;
1036
1139
  readonly variant: _angular_core.InputSignal<DgaToastVariant>;
1037
1140
  readonly title: _angular_core.InputSignal<string>;
@@ -1039,29 +1142,83 @@ declare class DgaToast implements OnDestroy {
1039
1142
  readonly closeLabel: _angular_core.InputSignal<string>;
1040
1143
  /** Auto-dismiss after ms; `0` disables. Default 5s per a11y guidance. */
1041
1144
  readonly duration: _angular_core.InputSignal<number>;
1145
+ /** Circular countdown ring on the dismiss control when `duration > 0`. */
1146
+ readonly countdown: _angular_core.InputSignalWithTransform<boolean, unknown>;
1147
+ /** Pause auto-dismiss while the pointer is over the toast. */
1148
+ readonly pauseOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
1149
+ /** Pause auto-dismiss while focus is inside the toast. */
1150
+ readonly pauseOnFocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
1151
+ /** Enter / exit motion. Default `push` (from nearest vertical edge). */
1152
+ readonly animation: _angular_core.InputSignal<DgaToastAnimation>;
1153
+ /** Viewport corner / edge. Default `top-end`. */
1154
+ readonly location: _angular_core.InputSignal<DgaToastLocation>;
1042
1155
  readonly closed: _angular_core.OutputEmitterRef<void>;
1043
- private timer;
1156
+ /** Keeps the toast mounted while the exit animation plays. */
1157
+ readonly rendered: _angular_core.WritableSignal<boolean>;
1158
+ readonly leaving: _angular_core.WritableSignal<boolean>;
1159
+ /** Remaining fraction of duration (1 → 0). */
1160
+ readonly progress: _angular_core.WritableSignal<number>;
1161
+ readonly ringR = 10;
1162
+ readonly ringC: number;
1163
+ private remainingMs;
1164
+ private totalMs;
1165
+ private paused;
1166
+ private hoverPaused;
1167
+ private focusPaused;
1168
+ private rafId;
1169
+ private lastTick;
1170
+ private exitTimer;
1171
+ private readonly reduceMotionFlag;
1044
1172
  readonly classes: _angular_core.Signal<string>;
1173
+ readonly hostClass: _angular_core.Signal<string>;
1174
+ readonly isTop: _angular_core.Signal<boolean>;
1045
1175
  /** Clear sticky announcement / reserved chrome, then a small gap. */
1046
- readonly topOffset: _angular_core.Signal<string>;
1176
+ readonly edgeTop: _angular_core.Signal<"calc(var(--dga-announcement-offset, 0px) + 1rem)" | null>;
1177
+ readonly edgeBottom: _angular_core.Signal<"1rem" | null>;
1047
1178
  readonly iconName: _angular_core.Signal<DgaIconName>;
1048
- readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
1179
+ readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
1180
+ readonly showCountdown: _angular_core.Signal<boolean>;
1181
+ readonly reduceMotion: _angular_core.WritableSignal<boolean>;
1182
+ readonly ringDashOffset: _angular_core.Signal<number>;
1183
+ private readonly animClass;
1049
1184
  constructor();
1050
1185
  ngOnDestroy(): void;
1051
1186
  dismiss(): void;
1052
- private clearTimer;
1187
+ onAnimationEnd(event: AnimationEvent): void;
1188
+ onPointerEnter(): void;
1189
+ onPointerLeave(): void;
1190
+ onFocusIn(): void;
1191
+ onFocusOut(event: FocusEvent): void;
1192
+ private beginClose;
1193
+ private finishClose;
1194
+ private resetTicker;
1195
+ private syncPaused;
1196
+ private startTicker;
1197
+ private stopTicker;
1198
+ private clearExitTimer;
1053
1199
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaToast, never>;
1054
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaToast, "dga-toast", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*"], true, never>;
1200
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaToast, "dga-toast", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "countdown": { "alias": "countdown"; "required": false; "isSignal": true; }; "pauseOnHover": { "alias": "pauseOnHover"; "required": false; "isSignal": true; }; "pauseOnFocus": { "alias": "pauseOnFocus"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "location": { "alias": "location"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*"], true, never>;
1055
1201
  }
1056
1202
 
1057
1203
  interface DgaToastShowOptions {
1058
1204
  title?: string;
1059
1205
  message?: string;
1060
1206
  variant?: DgaToastVariant;
1207
+ /** Auto-dismiss after ms; `0` disables. Default 5000. */
1061
1208
  duration?: number;
1062
1209
  dismissible?: boolean;
1063
- }
1064
- interface DgaToastRequest extends Required<Pick<DgaToastShowOptions, 'title' | 'message' | 'variant' | 'duration' | 'dismissible'>> {
1210
+ /** Circular countdown on the dismiss control. Default true when duration > 0. */
1211
+ countdown?: boolean;
1212
+ /** Pause auto-dismiss while hovered. Default true. */
1213
+ pauseOnHover?: boolean;
1214
+ /** Pause auto-dismiss while focused. Default true. */
1215
+ pauseOnFocus?: boolean;
1216
+ /** Enter / exit motion. Default `push`. */
1217
+ animation?: DgaToastAnimation;
1218
+ /** Viewport placement. Default `top-end`. */
1219
+ location?: DgaToastLocation;
1220
+ }
1221
+ interface DgaToastRequest extends Required<Pick<DgaToastShowOptions, 'title' | 'message' | 'variant' | 'duration' | 'dismissible' | 'countdown' | 'pauseOnHover' | 'pauseOnFocus' | 'animation' | 'location'>> {
1065
1222
  id: number;
1066
1223
  }
1067
1224
  /**
@@ -1229,9 +1386,194 @@ declare class DgaMenu {
1229
1386
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMenu, "dga-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "leadingIcon": { "alias": "leadingIcon"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; "menuMinWidth": { "alias": "menuMinWidth"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "selected": "selected"; "selectedValue": "selectedValue"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
1230
1387
  }
1231
1388
 
1389
+ type DgaContextMenuItemType = 'item' | 'checkbox' | 'radio' | 'divider' | 'label';
1390
+ interface DgaContextMenuItem {
1391
+ /** Required for actionable items. */
1392
+ label?: string;
1393
+ value?: string;
1394
+ icon?: DgaIconName;
1395
+ /** Shortcut keys shown trailing — `"⌘K"` or `['Ctrl', 'K']`. */
1396
+ shortcut?: string | readonly string[];
1397
+ danger?: boolean;
1398
+ disabled?: boolean;
1399
+ divider?: boolean;
1400
+ type?: DgaContextMenuItemType;
1401
+ /** Checkbox / radio checked state. */
1402
+ checked?: boolean;
1403
+ /** Nested submenu items. */
1404
+ children?: DgaContextMenuItem[];
1405
+ }
1406
+ /** Marks projected content as the context-menu trigger surface. */
1407
+ declare class DgaContextMenuTrigger {
1408
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaContextMenuTrigger, never>;
1409
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaContextMenuTrigger, "[dgaContextMenuTrigger]", never, {}, {}, never, never, true, never>;
1410
+ }
1411
+ /**
1412
+ * Right-click / long-press context menu (shadcn-style).
1413
+ *
1414
+ * @see https://ui.shadcn.com/docs/components/base/context-menu
1415
+ *
1416
+ * @example
1417
+ * ```html
1418
+ * <dga-context-menu [items]="items" (selected)="onSelect($event)">
1419
+ * <div dgaContextMenuTrigger class="rounded-md border p-3xl">
1420
+ * Right click here
1421
+ * </div>
1422
+ * </dga-context-menu>
1423
+ * ```
1424
+ */
1425
+ declare class DgaContextMenu {
1426
+ private readonly host;
1427
+ private readonly injector;
1428
+ private readonly destroyRef;
1429
+ private readonly surfaceRef;
1430
+ private readonly menuRef;
1431
+ readonly items: _angular_core.InputSignal<DgaContextMenuItem[]>;
1432
+ readonly open: _angular_core.ModelSignal<boolean>;
1433
+ /** Enable long-press on touch (default true). */
1434
+ readonly longPress: _angular_core.InputSignalWithTransform<boolean, unknown>;
1435
+ readonly longPressMs: _angular_core.InputSignal<number>;
1436
+ readonly menuMinWidth: _angular_core.InputSignal<string>;
1437
+ readonly selected: _angular_core.OutputEmitterRef<DgaContextMenuItem>;
1438
+ readonly selectedValue: _angular_core.OutputEmitterRef<string>;
1439
+ readonly opened: _angular_core.OutputEmitterRef<void>;
1440
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1441
+ readonly panelStyle: _angular_core.WritableSignal<Record<string, string>>;
1442
+ readonly subStyle: _angular_core.WritableSignal<Record<string, string>>;
1443
+ readonly openSubIndex: _angular_core.WritableSignal<number | null>;
1444
+ readonly isRtl: _angular_core.WritableSignal<boolean>;
1445
+ private readonly seq;
1446
+ readonly listId: string;
1447
+ private activeIndex;
1448
+ private pointer;
1449
+ private longPressTimer;
1450
+ private readonly onReposition;
1451
+ constructor();
1452
+ menuClasses(): string;
1453
+ itemId(index: number): string;
1454
+ trackItem(item: DgaContextMenuItem, index: number): string;
1455
+ shortcutKeys(item: DgaContextMenuItem): string[] | null;
1456
+ itemClass(item: DgaContextMenuItem): string;
1457
+ onContextMenu(event: MouseEvent): void;
1458
+ onTouchStart(event: TouchEvent): void;
1459
+ onTouchEnd(): void;
1460
+ onItemClick(item: DgaContextMenuItem, event: MouseEvent): void;
1461
+ onItemEnter(item: DgaContextMenuItem, index: number, event: PointerEvent): void;
1462
+ selectItem(item: DgaContextMenuItem): void;
1463
+ close(restoreFocus?: boolean): void;
1464
+ onMenuKey(event: KeyboardEvent): void;
1465
+ onDocumentPointer(event: PointerEvent): void;
1466
+ onDocumentKeydown(event: KeyboardEvent): void;
1467
+ private openAtPointer;
1468
+ private clearLongPress;
1469
+ private isSelectable;
1470
+ private firstSelectableIndex;
1471
+ private stepIndex;
1472
+ private portalMenuToBody;
1473
+ private detachPortaledMenu;
1474
+ private syncPanelPosition;
1475
+ private syncSubPosition;
1476
+ private focusItem;
1477
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaContextMenu, never>;
1478
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaContextMenu, "dga-context-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "longPress": { "alias": "longPress"; "required": false; "isSignal": true; }; "longPressMs": { "alias": "longPressMs"; "required": false; "isSignal": true; }; "menuMinWidth": { "alias": "menuMinWidth"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "selected": "selected"; "selectedValue": "selectedValue"; "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
1479
+ }
1480
+
1481
+ interface DgaCommandItem {
1482
+ /** Stable id used for tracking / selection. */
1483
+ id: string;
1484
+ label: string;
1485
+ value?: string;
1486
+ icon?: DgaIconName;
1487
+ /** Shortcut keys — `"⌘P"` or `['Ctrl', 'P']`. */
1488
+ shortcut?: string | readonly string[];
1489
+ disabled?: boolean;
1490
+ /** Extra search tokens (labels are always searchable). */
1491
+ keywords?: readonly string[];
1492
+ }
1493
+ interface DgaCommandGroup {
1494
+ heading?: string;
1495
+ items: DgaCommandItem[];
1496
+ }
1497
+ type DgaCommandAppearance = 'panel' | 'dialog';
1498
+ /**
1499
+ * Command palette — searchable actions (cmdk / shadcn-style).
1500
+ *
1501
+ * Use `appearance="dialog"` for a centered modal palette, or `panel` for inline.
1502
+ *
1503
+ * @see https://ui.shadcn.com/docs/components/base/command
1504
+ *
1505
+ * @example
1506
+ * ```html
1507
+ * <dga-command
1508
+ * [(open)]="cmdOpen"
1509
+ * appearance="dialog"
1510
+ * [groups]="commandGroups"
1511
+ * (selected)="run($event)"
1512
+ * />
1513
+ * ```
1514
+ */
1515
+ declare class DgaCommand {
1516
+ private readonly destroyRef;
1517
+ private readonly injector;
1518
+ private readonly queryInput;
1519
+ readonly groups: _angular_core.InputSignal<DgaCommandGroup[]>;
1520
+ /** Flat items when you do not need group headings. */
1521
+ readonly items: _angular_core.InputSignal<DgaCommandItem[]>;
1522
+ readonly open: _angular_core.ModelSignal<boolean>;
1523
+ readonly appearance: _angular_core.InputSignal<DgaCommandAppearance>;
1524
+ readonly placeholder: _angular_core.InputSignal<string>;
1525
+ readonly emptyLabel: _angular_core.InputSignal<string>;
1526
+ readonly clearLabel: _angular_core.InputSignal<string>;
1527
+ readonly dialogLabel: _angular_core.InputSignal<string>;
1528
+ readonly listLabel: _angular_core.InputSignal<string>;
1529
+ readonly closeOnSelect: _angular_core.InputSignalWithTransform<boolean, unknown>;
1530
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
1531
+ /** Optional global shortcut to toggle (Ctrl/⌘+K). Dialog mode only. */
1532
+ readonly hotkey: _angular_core.InputSignalWithTransform<boolean, unknown>;
1533
+ readonly selected: _angular_core.OutputEmitterRef<DgaCommandItem>;
1534
+ readonly selectedValue: _angular_core.OutputEmitterRef<string>;
1535
+ readonly opened: _angular_core.OutputEmitterRef<void>;
1536
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1537
+ readonly queryChange: _angular_core.OutputEmitterRef<string>;
1538
+ readonly query: _angular_core.WritableSignal<string>;
1539
+ readonly activeId: _angular_core.WritableSignal<string | null>;
1540
+ private readonly seq;
1541
+ readonly listId: string;
1542
+ private previousFocus;
1543
+ private wasOpen;
1544
+ /** Panel is always shown; dialog only when `open`. */
1545
+ readonly show: _angular_core.Signal<boolean>;
1546
+ readonly filteredGroups: _angular_core.Signal<DgaCommandGroup[]>;
1547
+ readonly flatFiltered: _angular_core.Signal<DgaCommandItem[]>;
1548
+ readonly activeDescendant: _angular_core.Signal<string | null>;
1549
+ constructor();
1550
+ optionId(id: string): string;
1551
+ shortcutKeys(item: DgaCommandItem): string[] | null;
1552
+ onQueryInput(event: Event): void;
1553
+ clearQuery(): void;
1554
+ setActive(id: string): void;
1555
+ select(item: DgaCommandItem): void;
1556
+ close(): void;
1557
+ onBackdrop(): void;
1558
+ onRootKey(event: KeyboardEvent): void;
1559
+ onInputKey(event: KeyboardEvent): void;
1560
+ onHotkey(event: KeyboardEvent): void;
1561
+ private moveActive;
1562
+ private resolveGroups;
1563
+ private matches;
1564
+ private normalize;
1565
+ private focusInput;
1566
+ private restoreFocus;
1567
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCommand, never>;
1568
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCommand, "dga-command", never, { "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "dialogLabel": { "alias": "dialogLabel"; "required": false; "isSignal": true; }; "listLabel": { "alias": "listLabel"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "hotkey": { "alias": "hotkey"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "selected": "selected"; "selectedValue": "selectedValue"; "opened": "opened"; "closed": "closed"; "queryChange": "queryChange"; }, never, never, true, never>;
1569
+ }
1570
+
1232
1571
  type DgaDrawerSide = 'start' | 'end';
1233
1572
  declare class DgaDrawer {
1573
+ private readonly doc;
1574
+ private readonly destroyRef;
1234
1575
  private readonly injector;
1576
+ private readonly rootRef;
1235
1577
  private readonly panel;
1236
1578
  readonly open: _angular_core.ModelSignal<boolean>;
1237
1579
  readonly title: _angular_core.InputSignal<string>;
@@ -1242,12 +1584,16 @@ declare class DgaDrawer {
1242
1584
  readonly closed: _angular_core.OutputEmitterRef<void>;
1243
1585
  readonly titleId: string;
1244
1586
  private previousFocus;
1245
- private previousOverflow;
1587
+ private previousBodyOverflow;
1588
+ private previousHtmlOverflow;
1589
+ private scrollLocked;
1246
1590
  readonly panelClasses: _angular_core.Signal<string>;
1247
1591
  constructor();
1248
1592
  close(): void;
1249
1593
  onBackdrop(): void;
1250
1594
  onKeydown(event: KeyboardEvent): void;
1595
+ private portalToBody;
1596
+ private removePortaledRoot;
1251
1597
  private focusInitial;
1252
1598
  private trapFocus;
1253
1599
  private getFocusable;
@@ -1323,6 +1669,114 @@ declare class DgaImagePopup {
1323
1669
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaImagePopup, "dga-image-popup", never, { "images": { "alias": "images"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "imageTransition": { "alias": "imageTransition"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "activeIndex": "activeIndexChange"; "closed": "closed"; "opened": "opened"; }, never, never, true, never>;
1324
1670
  }
1325
1671
 
1672
+ /** Logical placements (RTL-aware via inset-inline). */
1673
+ type DgaTourPlacement = 'top' | 'bottom' | 'start' | 'end' | 'auto';
1674
+ type DgaTourPersist = 'local' | 'session' | 'none';
1675
+ interface DgaTourStep {
1676
+ /** Optional stable id for analytics. */
1677
+ id?: string;
1678
+ /**
1679
+ * CSS selector for the highlighted element.
1680
+ * Omit or leave empty for a centered intro / outro card.
1681
+ */
1682
+ target?: string;
1683
+ title: string;
1684
+ description: string;
1685
+ placement?: DgaTourPlacement;
1686
+ /** Scroll the target into view before measuring (default true). */
1687
+ scroll?: boolean;
1688
+ /** Extra padding around the spotlight hole (px). */
1689
+ padding?: number;
1690
+ }
1691
+ interface SpotRect {
1692
+ top: number;
1693
+ left: number;
1694
+ width: number;
1695
+ height: number;
1696
+ }
1697
+ interface PopoverPos {
1698
+ top: number;
1699
+ left: number;
1700
+ placement: Exclude<DgaTourPlacement, 'auto'>;
1701
+ }
1702
+ /**
1703
+ * Multi-step onboarding tour with spotlight + coachmark.
1704
+ *
1705
+ * Targets elements via CSS selectors (e.g. `[data-dga-action="login"]`).
1706
+ * Empty `target` steps render a centered welcome / finish card.
1707
+ *
1708
+ * @example
1709
+ * ```html
1710
+ * <dga-tour
1711
+ * [(open)]="tourOpen"
1712
+ * [steps]="tourSteps"
1713
+ * persist="local"
1714
+ * persistKey="portal-onboarding"
1715
+ * />
1716
+ * ```
1717
+ */
1718
+ declare class DgaTour {
1719
+ private readonly doc;
1720
+ private readonly destroyRef;
1721
+ private readonly injector;
1722
+ private readonly rootRef;
1723
+ readonly open: _angular_core.ModelSignal<boolean>;
1724
+ readonly steps: _angular_core.InputSignal<DgaTourStep[]>;
1725
+ readonly stepIndex: _angular_core.ModelSignal<number>;
1726
+ readonly nextLabel: _angular_core.InputSignal<string>;
1727
+ readonly prevLabel: _angular_core.InputSignal<string>;
1728
+ readonly skipLabel: _angular_core.InputSignal<string>;
1729
+ readonly doneLabel: _angular_core.InputSignal<string>;
1730
+ /** Template: `{current}` and `{total}` */
1731
+ readonly stepOfLabel: _angular_core.InputSignal<string>;
1732
+ readonly allowSkip: _angular_core.InputSignalWithTransform<boolean, unknown>;
1733
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
1734
+ /** Auto-open on first visit when persist storage has no flag. */
1735
+ readonly autoStart: _angular_core.InputSignalWithTransform<boolean, unknown>;
1736
+ readonly persist: _angular_core.InputSignal<DgaTourPersist>;
1737
+ readonly persistKey: _angular_core.InputSignal<string>;
1738
+ readonly completed: _angular_core.OutputEmitterRef<void>;
1739
+ readonly skipped: _angular_core.OutputEmitterRef<void>;
1740
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1741
+ readonly stepChange: _angular_core.OutputEmitterRef<number>;
1742
+ readonly titleId: string;
1743
+ readonly spot: _angular_core.WritableSignal<SpotRect | null>;
1744
+ readonly popover: _angular_core.WritableSignal<PopoverPos | null>;
1745
+ private previousFocus;
1746
+ private resizeObserver;
1747
+ private measureRaf;
1748
+ private unbindViewport;
1749
+ private autoStarted;
1750
+ readonly visible: _angular_core.Signal<boolean>;
1751
+ readonly current: _angular_core.Signal<DgaTourStep>;
1752
+ readonly isLast: _angular_core.Signal<boolean>;
1753
+ readonly progressLabel: _angular_core.Signal<string>;
1754
+ constructor();
1755
+ next(): void;
1756
+ prev(): void;
1757
+ skip(): void;
1758
+ onBackdrop(): void;
1759
+ onKeydown(event: KeyboardEvent): void;
1760
+ private goTo;
1761
+ private finish;
1762
+ private scheduleMeasure;
1763
+ private measure;
1764
+ private placePopover;
1765
+ private bindObservers;
1766
+ /** Move layer to `document.body` so sticky announcement / headers cannot sit above it. */
1767
+ private portalToBody;
1768
+ private removePortaledRoot;
1769
+ private teardownObservers;
1770
+ private focusCard;
1771
+ private restoreFocus;
1772
+ private clampIndex;
1773
+ private storage;
1774
+ private hasSeen;
1775
+ private markSeen;
1776
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTour, never>;
1777
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTour, "dga-tour", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "stepIndex": { "alias": "stepIndex"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "skipLabel": { "alias": "skipLabel"; "required": false; "isSignal": true; }; "doneLabel": { "alias": "doneLabel"; "required": false; "isSignal": true; }; "stepOfLabel": { "alias": "stepOfLabel"; "required": false; "isSignal": true; }; "allowSkip": { "alias": "allowSkip"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "autoStart": { "alias": "autoStart"; "required": false; "isSignal": true; }; "persist": { "alias": "persist"; "required": false; "isSignal": true; }; "persistKey": { "alias": "persistKey"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "stepIndex": "stepIndexChange"; "completed": "completed"; "skipped": "skipped"; "closed": "closed"; "stepChange": "stepChange"; }, never, never, true, never>;
1778
+ }
1779
+
1326
1780
  type DgaAlertVariant = 'neutral' | 'critical' | 'error' | 'warning' | 'info' | 'success';
1327
1781
  /** Layout: default card alert, or compact single-line banner. */
1328
1782
  type DgaAlertDisplay = 'default' | 'inline';
@@ -1344,7 +1798,7 @@ declare class DgaAlert {
1344
1798
  readonly titleClasses: _angular_core.Signal<string>;
1345
1799
  readonly descriptionClasses: _angular_core.Signal<string>;
1346
1800
  readonly iconName: _angular_core.Signal<DgaIconName>;
1347
- readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
1801
+ readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
1348
1802
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1349
1803
  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>;
1350
1804
  }
@@ -2263,6 +2717,11 @@ declare class DgaStepper {
2263
2717
  readonly steps: _angular_core.InputSignal<DgaStep[]>;
2264
2718
  readonly active: _angular_core.ModelSignal<number>;
2265
2719
  readonly label: _angular_core.InputSignal<string>;
2720
+ /**
2721
+ * Optional veto for step clicks (e.g. form wizard validation).
2722
+ * Return false to keep the current step.
2723
+ */
2724
+ readonly beforeActiveChange: _angular_core.InputSignal<((next: number, current: number) => boolean) | undefined>;
2266
2725
  stepStatus(index: number): DgaStepStatus;
2267
2726
  stepButtonClasses(index: number): string;
2268
2727
  labelClasses(index: number): string;
@@ -2270,7 +2729,7 @@ declare class DgaStepper {
2270
2729
  railTone(index: number): string;
2271
2730
  go(index: number): void;
2272
2731
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaStepper, never>;
2273
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaStepper, "dga-stepper", never, { "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, never, never, true, never>;
2732
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaStepper, "dga-stepper", never, { "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "beforeActiveChange": { "alias": "beforeActiveChange"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, never, never, true, never>;
2274
2733
  }
2275
2734
 
2276
2735
  interface DgaTocItem {
@@ -2424,9 +2883,9 @@ declare class DgaNavRail {
2424
2883
  readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2425
2884
  readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
2426
2885
  readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
2427
- readonly edgeAttr: _angular_core.Signal<"start" | "end" | "left" | "right" | null>;
2886
+ readonly edgeAttr: _angular_core.Signal<"end" | "start" | "right" | "left" | null>;
2428
2887
  readonly offsetCss: _angular_core.Signal<string>;
2429
- readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
2888
+ readonly tooltipPlacement: _angular_core.Signal<"end" | "start">;
2430
2889
  readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;
2431
2890
  readonly expandIcon: _angular_core.Signal<"chevronLeft" | "chevronRight">;
2432
2891
  readonly listGapClass: _angular_core.Signal<"gap-xs" | "gap-sm" | "gap-md">;
@@ -2921,7 +3380,7 @@ declare class DgaHeader {
2921
3380
  readonly logout: _angular_core.OutputEmitterRef<void>;
2922
3381
  readonly userLinkClick: _angular_core.OutputEmitterRef<DgaHeaderUserMenuLink>;
2923
3382
  /** Emits on click of any top-level nav link or dropdown link (desktop + mobile). */
2924
- readonly navLinkClick: _angular_core.OutputEmitterRef<DgaNavItem | DgaNavLink>;
3383
+ readonly navLinkClick: _angular_core.OutputEmitterRef<DgaNavLink | DgaNavItem>;
2925
3384
  readonly mobileOpen: _angular_core.WritableSignal<boolean>;
2926
3385
  readonly openDropdown: _angular_core.WritableSignal<number | null>;
2927
3386
  readonly searchOpen: _angular_core.WritableSignal<boolean>;
@@ -3015,6 +3474,9 @@ declare class DgaHeader {
3015
3474
  onAction(action: DgaHeaderAction, event?: Event): void;
3016
3475
  onMobileAction(action: DgaHeaderAction, event?: Event): void;
3017
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;
3018
3480
  toggleSearch(): void;
3019
3481
  onSearchModalOpenChange(open: boolean): void;
3020
3482
  focusSearchInput(): void;
@@ -4025,5 +4487,5 @@ declare function dgaSaudiCityOptions(locale?: 'ar' | 'en', cities?: readonly Dga
4025
4487
  value: string;
4026
4488
  }[];
4027
4489
 
4028
- export { DGA_GREGORIAN_MONTHS, DGA_HIJRI_MONTHS, DGA_ICON_NAMES, DGA_ICON_SVG, DGA_LOGICAL_ICON_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, DgaContentSwitcher, DgaContentSwitcherPanel, 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, DgaLabel, DgaLink, DgaList, DgaLogoTile, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNativeSelect, DgaNavRail, DgaNumber, DgaNumberInput, DgaOtp, DgaPageFeedback, DgaPageHero, 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, DgaUpload, decodePlatformscodeSvg, dgaAddMonths, dgaClampDate, dgaCoerceDate, dgaCompareDays, dgaDaysInMonth, dgaFormatDate, dgaGetCalendarParts, dgaGroupSaudiCitiesByRegion, dgaModeFromFormat, dgaMonthNames, dgaMonthStartWeekday, dgaNormalizeTime, dgaParseDate, dgaPartsToDate, dgaProvideValueAccessor, dgaSameDay, dgaSaudiCityOptions, dgaTodayUtc };
4029
- 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, DgaContentSwitcherItem, 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, 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, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaUploadAppearance, DgaUploadFile, DgaUploadRejectReason, DgaUploadRejection };
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 };