@a.nemreen/dga-ui 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +9 -2
  2. package/cover.jpg +0 -0
  3. package/fesm2022/a.nemreen-dga-ui.mjs +414 -336
  4. package/package.json +14 -11
  5. package/types/a.nemreen-dga-ui.d.ts +3118 -0
  6. package/index.d.ts +0 -5
  7. package/lib/content/code/dga-code.d.ts +0 -8
  8. package/lib/content/list/dga-description-list.d.ts +0 -13
  9. package/lib/content/list/dga-list.d.ts +0 -7
  10. package/lib/content/metric/dga-metric.d.ts +0 -17
  11. package/lib/content/number/dga-number.d.ts +0 -36
  12. package/lib/content/persona/dga-persona.d.ts +0 -11
  13. package/lib/content/quote/dga-quote.d.ts +0 -7
  14. package/lib/data/carousel/dga-carousel.d.ts +0 -79
  15. package/lib/data/chart/dga-chart.d.ts +0 -153
  16. package/lib/data/export/dga-export-toolbar.d.ts +0 -19
  17. package/lib/data/export/dga-export.d.ts +0 -26
  18. package/lib/data/table/dga-table.d.ts +0 -50
  19. package/lib/domain/saudi-cities/dga-saudi-cities.d.ts +0 -16
  20. package/lib/feedback/a11y/dga-skip-link.d.ts +0 -11
  21. package/lib/feedback/accessibility/dga-accessibility.d.ts +0 -133
  22. package/lib/feedback/accessibility/dga-accessibility.service.d.ts +0 -78
  23. package/lib/feedback/alert/dga-alert.d.ts +0 -27
  24. package/lib/feedback/cookies/dga-cookies.d.ts +0 -64
  25. package/lib/feedback/copy/dga-copy.d.ts +0 -43
  26. package/lib/feedback/empty/dga-empty.d.ts +0 -11
  27. package/lib/feedback/feedback/dga-feedback.d.ts +0 -30
  28. package/lib/feedback/page-feedback/dga-page-feedback.d.ts +0 -72
  29. package/lib/feedback/rating/dga-rating.d.ts +0 -17
  30. package/lib/feedback/share/dga-share.d.ts +0 -39
  31. package/lib/forms/autocomplete/dga-autocomplete.d.ts +0 -19
  32. package/lib/forms/checkbox/dga-checkbox.d.ts +0 -9
  33. package/lib/forms/chip-input/dga-chip-input.d.ts +0 -20
  34. package/lib/forms/date-picker/dga-date-calendar.d.ts +0 -44
  35. package/lib/forms/date-picker/dga-date-picker.d.ts +0 -152
  36. package/lib/forms/field/dga-field.d.ts +0 -22
  37. package/lib/forms/form/dga-form-control.d.ts +0 -50
  38. package/lib/forms/form/form-control.styles.d.ts +0 -16
  39. package/lib/forms/input/dga-input.d.ts +0 -13
  40. package/lib/forms/label/dga-label.d.ts +0 -8
  41. package/lib/forms/multiselect/dga-multiselect.d.ts +0 -20
  42. package/lib/forms/number-input/dga-number-input.d.ts +0 -25
  43. package/lib/forms/otp/dga-otp.d.ts +0 -19
  44. package/lib/forms/phone-input/dga-phone-input.d.ts +0 -33
  45. package/lib/forms/radio/dga-radio.d.ts +0 -9
  46. package/lib/forms/select/dga-native-select.d.ts +0 -15
  47. package/lib/forms/select/dga-select.d.ts +0 -65
  48. package/lib/forms/slider/dga-slider.d.ts +0 -7
  49. package/lib/forms/switch/dga-switch.d.ts +0 -14
  50. package/lib/forms/upload/dga-upload.d.ts +0 -32
  51. package/lib/layout/card/dga-card-media.d.ts +0 -13
  52. package/lib/layout/card/dga-card.d.ts +0 -89
  53. package/lib/layout/clamp/dga-clamp.d.ts +0 -11
  54. package/lib/layout/expandable/dga-expandable.d.ts +0 -14
  55. package/lib/layout/grid/dga-grid.d.ts +0 -10
  56. package/lib/layout/section/dga-section.d.ts +0 -22
  57. package/lib/navigation/accordion/dga-accordion-item.d.ts +0 -12
  58. package/lib/navigation/accordion/dga-accordion.d.ts +0 -10
  59. package/lib/navigation/breadcrumb/dga-breadcrumb.d.ts +0 -13
  60. package/lib/navigation/filter-bar/dga-filter-bar.d.ts +0 -18
  61. package/lib/navigation/pagination/dga-pagination.d.ts +0 -14
  62. package/lib/navigation/scroll-top/dga-scroll-top.d.ts +0 -35
  63. package/lib/navigation/side-nav/dga-side-nav.d.ts +0 -21
  64. package/lib/navigation/stepper/dga-stepper.d.ts +0 -15
  65. package/lib/navigation/tabs/dga-tab.d.ts +0 -12
  66. package/lib/navigation/tabs/dga-tabs.d.ts +0 -14
  67. package/lib/navigation/toc/dga-toc.d.ts +0 -16
  68. package/lib/navigation/toolbar/dga-toolbar.d.ts +0 -7
  69. package/lib/overlays/dialog/dga-dialog.d.ts +0 -28
  70. package/lib/overlays/drawer/dga-drawer.d.ts +0 -28
  71. package/lib/overlays/image-popup/dga-image-popup.d.ts +0 -65
  72. package/lib/overlays/menu/dga-menu.d.ts +0 -50
  73. package/lib/overlays/modal/dga-modal.d.ts +0 -44
  74. package/lib/overlays/toast/dga-toast-outlet.d.ts +0 -11
  75. package/lib/overlays/toast/dga-toast.d.ts +0 -24
  76. package/lib/overlays/toast/dga-toast.service.d.ts +0 -39
  77. package/lib/overlays/tooltip/dga-tooltip.d.ts +0 -60
  78. package/lib/primitives/avatar/dga-avatar.d.ts +0 -13
  79. package/lib/primitives/badge/dga-badge.d.ts +0 -10
  80. package/lib/primitives/button/dga-button.d.ts +0 -20
  81. package/lib/primitives/chip/dga-chip.d.ts +0 -11
  82. package/lib/primitives/divider/dga-divider.d.ts +0 -10
  83. package/lib/primitives/icon/dga-icon-badge.d.ts +0 -14
  84. package/lib/primitives/icon/dga-icon-font.service.d.ts +0 -14
  85. package/lib/primitives/icon/dga-icon-registry.d.ts +0 -9
  86. package/lib/primitives/icon/dga-icon.d.ts +0 -40
  87. package/lib/primitives/link/dga-link.d.ts +0 -10
  88. package/lib/primitives/progress/dga-progress.d.ts +0 -25
  89. package/lib/primitives/skeleton/dga-skeleton.d.ts +0 -30
  90. package/lib/primitives/spinner/dga-spinner.d.ts +0 -12
  91. package/lib/shell/footer/dga-footer.d.ts +0 -60
  92. package/lib/shell/header/dga-header.d.ts +0 -343
  93. package/lib/shell/hero/dga-hero.d.ts +0 -128
  94. package/lib/shell/logo-tile/dga-logo-tile.d.ts +0 -11
  95. package/lib/shell/preloader/dga-preloader.d.ts +0 -55
  96. package/lib/shell/side-info/dga-side-info.d.ts +0 -19
  97. package/lib/shell/top-bar/dga-top-bar.d.ts +0 -63
  98. package/lib/shell/top-bar/sa-flag.d.ts +0 -2
  99. package/lib/utils/cx.d.ts +0 -2
  100. package/lib/utils/locale.d.ts +0 -2
  101. package/public-api.d.ts +0 -91
@@ -0,0 +1,3118 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, OnInit } from '@angular/core';
3
+ import { SafeHtml } from '@angular/platform-browser';
4
+ import * as _a_nemreen_dga_ui from '@a.nemreen/dga-ui';
5
+
6
+ type DgaButtonVariant = 'primary' | 'secondary' | 'subtle' | 'outline' | 'outlineMuted' | 'outlineInverse' | 'ghost' | 'danger' | 'inverse';
7
+ type DgaButtonSize = 'sm' | 'md' | 'lg';
8
+ declare class DgaButton {
9
+ private readonly destroyRef;
10
+ readonly variant: _angular_core.InputSignal<DgaButtonVariant>;
11
+ readonly size: _angular_core.InputSignal<DgaButtonSize>;
12
+ /** Square control sized to the icon (no horizontal padding). */
13
+ readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
14
+ /** When > 0, disables the host for this many ms after each click. */
15
+ readonly cooldownMs: _angular_core.InputSignal<number>;
16
+ /** Exposed for host bindings (Angular 22 requires public host expressions). */
17
+ readonly cooling: _angular_core.WritableSignal<boolean>;
18
+ private cooldownTimer;
19
+ readonly classes: _angular_core.Signal<string>;
20
+ constructor();
21
+ onHostClick(): void;
22
+ private clearCooldown;
23
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaButton, never>;
24
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaButton, "button[dgaButton], a[dgaButton]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "cooldownMs": { "alias": "cooldownMs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
25
+ }
26
+
27
+ type DgaBadgeVariant = 'neutral' | 'primary' | 'success' | 'info' | 'warning' | 'error';
28
+ type DgaBadgeSize = 'sm' | 'md';
29
+ declare class DgaBadge {
30
+ readonly variant: _angular_core.InputSignal<DgaBadgeVariant>;
31
+ readonly size: _angular_core.InputSignal<DgaBadgeSize>;
32
+ readonly classes: _angular_core.Signal<string>;
33
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaBadge, never>;
34
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaBadge, "dga-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
35
+ }
36
+
37
+ type DgaChipVariant = 'neutral' | 'primary' | 'success' | 'info' | 'warning' | 'error';
38
+ declare class DgaChip {
39
+ readonly variant: _angular_core.InputSignal<DgaChipVariant>;
40
+ readonly removable: _angular_core.InputSignalWithTransform<boolean, unknown>;
41
+ readonly removeLabel: _angular_core.InputSignal<string>;
42
+ readonly removed: _angular_core.OutputEmitterRef<void>;
43
+ readonly classes: _angular_core.Signal<string>;
44
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChip, never>;
45
+ 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>;
46
+ }
47
+
48
+ type DgaDividerOrientation = 'horizontal' | 'vertical';
49
+ declare class DgaDivider {
50
+ readonly orientation: _angular_core.InputSignal<DgaDividerOrientation>;
51
+ /** Optional centered label (horizontal only). */
52
+ readonly label: _angular_core.InputSignal<string>;
53
+ readonly classes: _angular_core.Signal<string>;
54
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDivider, never>;
55
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDivider, "dga-divider", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
56
+ }
57
+
58
+ type DgaLinkVariant = 'primary' | 'plain' | 'neutral' | 'muted' | 'nav' | 'utility';
59
+ declare class DgaLink {
60
+ readonly variant: _angular_core.InputSignal<DgaLinkVariant>;
61
+ /** Optional chevron affordance for dropdown-style nav items. */
62
+ readonly dropdown: _angular_core.InputSignalWithTransform<boolean, unknown>;
63
+ readonly classes: _angular_core.Signal<string>;
64
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaLink, never>;
65
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaLink, "a[dgaLink]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "dropdown": { "alias": "dropdown"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
66
+ }
67
+
68
+ type DgaSpinnerSize = 'sm' | 'md' | 'lg';
69
+ type DgaSpinnerTone = 'primary' | 'neutral' | 'on-color';
70
+ declare class DgaSpinner {
71
+ readonly size: _angular_core.InputSignal<DgaSpinnerSize>;
72
+ readonly tone: _angular_core.InputSignal<DgaSpinnerTone>;
73
+ /** Accessible name announced to assistive tech. */
74
+ readonly label: _angular_core.InputSignal<string>;
75
+ readonly classes: _angular_core.Signal<string>;
76
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSpinner, never>;
77
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSpinner, "dga-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
78
+ }
79
+
80
+ type DgaSkeletonShape = 'text' | 'rect' | 'circle';
81
+ type DgaSkeletonAnimation = 'pulse' | 'shimmer' | 'none';
82
+ type DgaSkeletonSize = 'sm' | 'md' | 'lg';
83
+ type DgaSkeletonRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';
84
+ declare class DgaSkeleton {
85
+ readonly shape: _angular_core.InputSignal<DgaSkeletonShape>;
86
+ readonly animation: _angular_core.InputSignal<DgaSkeletonAnimation>;
87
+ readonly size: _angular_core.InputSignal<DgaSkeletonSize>;
88
+ /** Optional width utility class, e.g. `w-full` or `w-5xl`. Ignored for sized circles unless set. */
89
+ readonly widthClass: _angular_core.InputSignal<string>;
90
+ /** Overrides size-based height when set. */
91
+ readonly heightClass: _angular_core.InputSignal<string>;
92
+ /** Number of text lines when `shape` is `text`. */
93
+ readonly lines: _angular_core.InputSignalWithTransform<number, unknown>;
94
+ /** Width class for the last line when `lines` > 1. */
95
+ readonly lastWidthClass: _angular_core.InputSignal<string>;
96
+ /** Override corner radius. Circles always use `full`. */
97
+ readonly radius: _angular_core.InputSignal<DgaSkeletonRadius | null>;
98
+ /** Accessible label announced while loading. */
99
+ readonly label: _angular_core.InputSignal<string>;
100
+ /** When false, treats the skeleton as decorative (aria-hidden). */
101
+ readonly announce: _angular_core.InputSignalWithTransform<boolean, unknown>;
102
+ readonly lineCount: _angular_core.Signal<number>;
103
+ readonly lineIndexes: _angular_core.Signal<number[]>;
104
+ readonly gapClass: _angular_core.Signal<string>;
105
+ boneClasses(isLast: boolean): string;
106
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSkeleton, never>;
107
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSkeleton, "dga-skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "widthClass": { "alias": "widthClass"; "required": false; "isSignal": true; }; "heightClass": { "alias": "heightClass"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "lastWidthClass": { "alias": "lastWidthClass"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "announce": { "alias": "announce"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
108
+ }
109
+
110
+ type DgaProgressSize = 'sm' | 'md' | 'lg';
111
+ type DgaProgressTone = 'primary' | 'success' | 'warning' | 'error';
112
+ type DgaProgressAppearance = 'linear' | 'radial';
113
+ declare class DgaProgress {
114
+ /** 0–100 */
115
+ readonly value: _angular_core.InputSignal<number>;
116
+ readonly size: _angular_core.InputSignal<DgaProgressSize>;
117
+ readonly tone: _angular_core.InputSignal<DgaProgressTone>;
118
+ readonly appearance: _angular_core.InputSignal<DgaProgressAppearance>;
119
+ /** Show percent label inside the radial meter. */
120
+ readonly showValue: _angular_core.InputSignal<boolean>;
121
+ readonly label: _angular_core.InputSignal<string>;
122
+ readonly radius = 15.5;
123
+ readonly circumference: number;
124
+ readonly clamped: _angular_core.Signal<number>;
125
+ readonly dashOffset: _angular_core.Signal<number>;
126
+ readonly hostClasses: _angular_core.Signal<"inline-flex" | "block w-full">;
127
+ readonly trackClasses: _angular_core.Signal<string>;
128
+ readonly barClasses: _angular_core.Signal<string>;
129
+ readonly radialWrapClasses: _angular_core.Signal<string>;
130
+ readonly strokeColor: _angular_core.Signal<string>;
131
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaProgress, never>;
132
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaProgress, "dga-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
133
+ }
134
+
135
+ type DgaAvatarSize = 'sm' | 'md' | 'lg' | 'xl';
136
+ declare class DgaAvatar {
137
+ readonly src: _angular_core.InputSignal<string | undefined>;
138
+ readonly name: _angular_core.InputSignal<string>;
139
+ readonly size: _angular_core.InputSignal<DgaAvatarSize>;
140
+ readonly alt: _angular_core.InputSignal<string>;
141
+ readonly initials: _angular_core.Signal<string>;
142
+ readonly resolvedAlt: _angular_core.Signal<string>;
143
+ readonly classes: _angular_core.Signal<string>;
144
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAvatar, never>;
145
+ 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>;
146
+ }
147
+
148
+ 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';
149
+ /** Decode `@platformscode/icons` data-URI exports into inline SVG markup. */
150
+ declare function decodePlatformscodeSvg(dataUri: string): string;
151
+ /** Pre-decoded SVG markup keyed by friendly `DgaIconName`. */
152
+ declare const DGA_ICON_SVG: Record<DgaIconName, string>;
153
+ /** Sorted list of curated chrome icon names (for docs / pickers). */
154
+ declare const DGA_ICON_NAMES: DgaIconName[];
155
+ /** Names that mirror with reading direction (use for next/back affordances). */
156
+ declare const DGA_LOGICAL_ICON_NAMES: Set<DgaIconName>;
157
+
158
+ /**
159
+ * Platforms Code icon sizes (px):
160
+ * 2xs 10 · xs 14 · sm 16 · md 18 · lg 20 · xl 24 · 2xl 28 · 3xl 32
161
+ *
162
+ * Migration from 0.1 early sizes: former `sm`(12)→`xs`, `md`(16)→`sm`;
163
+ * `lg`(20) / `xl`(24) keep the same pixel values under the same names.
164
+ */
165
+ type DgaIconSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
166
+ type DgaIconTone = 'current' | 'primary' | 'muted' | 'success' | 'warning' | 'error';
167
+ declare class DgaIcon {
168
+ private readonly sanitizer;
169
+ private readonly iconFont;
170
+ /**
171
+ * Curated inline SVG name for chrome / controls.
172
+ * Required unless `glyph` is set.
173
+ */
174
+ readonly name: _angular_core.InputSignal<DgaIconName | undefined>;
175
+ /**
176
+ * HugeIcons Stroke Rounded glyph id for content icons (e.g. `search-01`).
177
+ * Requires `@import '@a.nemreen/dga-tokens/styles/icon-font.css'`.
178
+ */
179
+ readonly glyph: _angular_core.InputSignal<string>;
180
+ /** Default `sm` (16px) - common dense UI size; use `xl` (24px) for standard chrome. */
181
+ readonly size: _angular_core.InputSignal<DgaIconSize>;
182
+ readonly tone: _angular_core.InputSignal<DgaIconTone>;
183
+ /** Optional accessible name; when empty the icon is decorative. */
184
+ readonly label: _angular_core.InputSignal<string>;
185
+ readonly isFont: _angular_core.Signal<boolean>;
186
+ readonly logical: _angular_core.Signal<boolean>;
187
+ readonly fontClasses: _angular_core.Signal<string>;
188
+ readonly classes: _angular_core.Signal<string>;
189
+ readonly svg: _angular_core.Signal<SafeHtml>;
190
+ constructor();
191
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaIcon, never>;
192
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaIcon, "dga-icon", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "glyph": { "alias": "glyph"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
193
+ }
194
+
195
+ /**
196
+ * Marks the document when the content icon font is ready so `.hgi-stroke`
197
+ * glyphs can fade in without a fallback flash.
198
+ * No-op when `icon-font.css` was not imported.
199
+ */
200
+ declare class DgaIconFontService {
201
+ private loading;
202
+ ensureLoaded(): Promise<void>;
203
+ private hasToken;
204
+ private load;
205
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaIconFontService, never>;
206
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DgaIconFontService>;
207
+ }
208
+
209
+ type DgaIconBadgeSize = 'sm' | 'md' | 'lg' | 'xl';
210
+ type DgaIconBadgeAppearance = 'filled' | 'outline';
211
+ /**
212
+ * Circular primary well for featured icons (metrics, service / help cards).
213
+ * Project any icon / glyph via content.
214
+ */
215
+ declare class DgaIconBadge {
216
+ readonly size: _angular_core.InputSignal<DgaIconBadgeSize>;
217
+ readonly appearance: _angular_core.InputSignal<DgaIconBadgeAppearance>;
218
+ readonly classes: _angular_core.Signal<string>;
219
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaIconBadge, never>;
220
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaIconBadge, "dga-icon-badge", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
221
+ }
222
+
223
+ /** Form control status — maps to design-system `data-status`. */
224
+ type DgaFormStatus = 'default' | 'error' | 'success' | 'warning' | 'info';
225
+ /** Shared size scale — sm≈32px, md≈40px, lg=48px. */
226
+ type DgaFormControlSize = 'sm' | 'md' | 'lg';
227
+
228
+ type DgaInputSize = DgaFormControlSize;
229
+
230
+ declare class DgaInput {
231
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
232
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
233
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
234
+ readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
235
+ readonly classes: _angular_core.Signal<string>;
236
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaInput, never>;
237
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaInput, "input[dgaInput], textarea[dgaInput]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
238
+ }
239
+
240
+ /** Marks projected content as the leading (start) addon inside `dga-form-control`. */
241
+ declare class DgaFormStart {
242
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFormStart, never>;
243
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaFormStart, "[dgaStart]", never, {}, {}, never, never, true, never>;
244
+ }
245
+ /** Marks projected content as the trailing (end) addon inside `dga-form-control`. */
246
+ declare class DgaFormEnd {
247
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFormEnd, never>;
248
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaFormEnd, "[dgaEnd]", never, {}, {}, never, never, true, never>;
249
+ }
250
+ /**
251
+ * Shared input chrome: border, focus accent, optional start/end icons.
252
+ *
253
+ * @example
254
+ * ```html
255
+ * <dga-form-control startIcon="mail">
256
+ * <input type="email" placeholder="name@example.com" />
257
+ * </dga-form-control>
258
+ *
259
+ * <dga-form-control>
260
+ * <dga-icon dgaStart name="search" size="sm" />
261
+ * <input type="search" />
262
+ * <button type="button" dgaEnd aria-label="مسح">×</button>
263
+ * </dga-form-control>
264
+ * ```
265
+ */
266
+ declare class DgaFormControl {
267
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
268
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
269
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
270
+ readonly filled: _angular_core.InputSignalWithTransform<boolean, unknown>;
271
+ /** Built-in leading icon (logical start). */
272
+ readonly startIcon: _angular_core.InputSignal<DgaIconName | null>;
273
+ /** Built-in trailing icon (logical end). */
274
+ readonly endIcon: _angular_core.InputSignal<DgaIconName | null>;
275
+ private readonly focused;
276
+ private readonly typing;
277
+ readonly classes: _angular_core.Signal<string>;
278
+ readonly hasStart: _angular_core.Signal<boolean>;
279
+ readonly hasEnd: _angular_core.Signal<boolean>;
280
+ readonly stateAttr: _angular_core.Signal<string | null>;
281
+ onFocusIn(): void;
282
+ onFocusOut(event: FocusEvent): void;
283
+ onInput(): void;
284
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFormControl, never>;
285
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaFormControl, "dga-form-control", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "filled": { "alias": "filled"; "required": false; "isSignal": true; }; "startIcon": { "alias": "startIcon"; "required": false; "isSignal": true; }; "endIcon": { "alias": "endIcon"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaStart]", "*", "[dgaEnd]"], true, never>;
286
+ }
287
+
288
+ declare class DgaLabel {
289
+ /** Optional required indicator styling hook. */
290
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
291
+ readonly classes: _angular_core.Signal<string>;
292
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaLabel, never>;
293
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaLabel, "label[dgaLabel]", never, { "required": { "alias": "dgaRequired"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
294
+ }
295
+
296
+ type DgaCheckboxSize = 'sm' | 'md' | 'lg';
297
+ declare class DgaCheckbox {
298
+ readonly size: _angular_core.InputSignal<DgaCheckboxSize>;
299
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
300
+ readonly classes: _angular_core.Signal<string>;
301
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCheckbox, never>;
302
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaCheckbox, "input[type=\"checkbox\"][dgaCheckbox]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
303
+ }
304
+
305
+ type DgaRadioSize = 'sm' | 'md' | 'lg';
306
+ declare class DgaRadio {
307
+ readonly size: _angular_core.InputSignal<DgaRadioSize>;
308
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
309
+ readonly classes: _angular_core.Signal<string>;
310
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaRadio, never>;
311
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaRadio, "input[type=\"radio\"][dgaRadio]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
312
+ }
313
+
314
+ type DgaNativeSelectSize = DgaFormControlSize;
315
+ /** Styles a native `<select dgaSelect>` — for simple forms without search/multi. */
316
+ declare class DgaNativeSelect {
317
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
318
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
319
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
320
+ readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
321
+ readonly classes: _angular_core.Signal<string>;
322
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNativeSelect, never>;
323
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaNativeSelect, "select[dgaSelect]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
324
+ }
325
+
326
+ interface DgaSelectOption {
327
+ label: string;
328
+ value: string;
329
+ disabled?: boolean;
330
+ }
331
+ type DgaSelectOpenMode = 'dropdown' | 'always';
332
+ type DgaSelectSize = DgaFormControlSize;
333
+ declare class DgaSelect {
334
+ private static nextId;
335
+ private readonly host;
336
+ readonly listId: string;
337
+ readonly options: _angular_core.InputSignal<DgaSelectOption[]>;
338
+ /** Single: `string`. Multiple: `string[]`. */
339
+ readonly valueInput: _angular_core.InputSignal<string | string[]>;
340
+ readonly value: _angular_core.WritableSignal<string | string[]>;
341
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
342
+ readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
343
+ readonly openMode: _angular_core.InputSignal<DgaSelectOpenMode>;
344
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
345
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
346
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
347
+ readonly placeholder: _angular_core.InputSignal<string>;
348
+ readonly label: _angular_core.InputSignal<string>;
349
+ readonly removeLabel: _angular_core.InputSignal<string>;
350
+ readonly clearLabel: _angular_core.InputSignal<string>;
351
+ readonly emptyLabel: _angular_core.InputSignal<string>;
352
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
353
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
354
+ readonly valueChange: _angular_core.OutputEmitterRef<string | string[]>;
355
+ readonly open: _angular_core.WritableSignal<boolean>;
356
+ readonly query: _angular_core.WritableSignal<string>;
357
+ readonly activeIndex: _angular_core.WritableSignal<number>;
358
+ constructor();
359
+ readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
360
+ readonly listVisible: _angular_core.Signal<boolean>;
361
+ readonly selectedOpts: _angular_core.Signal<DgaSelectOption[]>;
362
+ readonly filtered: _angular_core.Signal<DgaSelectOption[]>;
363
+ readonly activeOptionId: _angular_core.Signal<string | null>;
364
+ readonly buttonClasses: _angular_core.Signal<string>;
365
+ readonly triggerWrapClasses: _angular_core.Signal<string>;
366
+ readonly searchInputClasses: _angular_core.Signal<string>;
367
+ readonly listClasses: _angular_core.Signal<string>;
368
+ displayPlaceholder(): string;
369
+ hasValue(): boolean;
370
+ optionId(index: number): string;
371
+ isSelected(v: string): boolean;
372
+ selectedValues(): string[];
373
+ toggleOpen(): void;
374
+ onFocus(): void;
375
+ onType(raw: string): void;
376
+ onKey(event: KeyboardEvent): void;
377
+ onBlur(): void;
378
+ onOptionMouseDown(event: MouseEvent, opt: DgaSelectOption): void;
379
+ pick(opt: DgaSelectOption): void;
380
+ toggle(v: string): void;
381
+ clear(): void;
382
+ onDocClick(event: MouseEvent): void;
383
+ private commit;
384
+ private moveActive;
385
+ private firstEnabledIndex;
386
+ private lastEnabledIndex;
387
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSelect, never>;
388
+ 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; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
389
+ }
390
+
391
+ /**
392
+ * Lightweight field shell: label + control projection + optional hint/error/status.
393
+ * Does not own the control - project a native input/select/textarea with dga* directives.
394
+ */
395
+ declare class DgaField {
396
+ readonly label: _angular_core.InputSignal<string>;
397
+ /** Secondary text under the label (e.g. upload info line). */
398
+ readonly labelHint: _angular_core.InputSignal<string>;
399
+ readonly hint: _angular_core.InputSignal<string>;
400
+ readonly error: _angular_core.InputSignal<string>;
401
+ /** Validation / helper status chrome for the field message. */
402
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
403
+ readonly statusMessage: _angular_core.InputSignal<string>;
404
+ /** Associates the label with a projected control id. */
405
+ readonly controlId: _angular_core.InputSignal<string>;
406
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
407
+ readonly statusMessageClasses: _angular_core.Signal<string>;
408
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaField, never>;
409
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaField, "dga-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelHint": { "alias": "labelHint"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "statusMessage": { "alias": "statusMessage"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
410
+ }
411
+
412
+ type DgaSwitchSize = 'sm' | 'md' | 'lg';
413
+ declare class DgaSwitch {
414
+ readonly checked: _angular_core.ModelSignal<boolean>;
415
+ readonly size: _angular_core.InputSignal<DgaSwitchSize>;
416
+ readonly label: _angular_core.InputSignal<string>;
417
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
418
+ readonly changed: _angular_core.OutputEmitterRef<boolean>;
419
+ readonly trackClasses: _angular_core.Signal<string>;
420
+ readonly thumbClasses: _angular_core.Signal<string>;
421
+ toggle(): void;
422
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSwitch, never>;
423
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSwitch, "dga-switch", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
424
+ }
425
+
426
+ declare class DgaNumberInput {
427
+ readonly valueInput: _angular_core.InputSignal<number>;
428
+ readonly value: _angular_core.WritableSignal<number>;
429
+ readonly min: _angular_core.InputSignal<number>;
430
+ readonly max: _angular_core.InputSignal<number>;
431
+ readonly stepSize: _angular_core.InputSignal<number>;
432
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
433
+ readonly label: _angular_core.InputSignal<string>;
434
+ readonly incrementLabel: _angular_core.InputSignal<string>;
435
+ readonly decrementLabel: _angular_core.InputSignal<string>;
436
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
437
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
438
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
439
+ readonly valueChange: _angular_core.OutputEmitterRef<number>;
440
+ readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
441
+ readonly wrapClasses: _angular_core.Signal<string>;
442
+ step(dir: 1 | -1): void;
443
+ onType(raw: string): void;
444
+ finiteOrNull(n: number): number | null;
445
+ private clamp;
446
+ private commit;
447
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNumberInput, never>;
448
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNumberInput, "dga-number-input", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "stepSize": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "incrementLabel": { "alias": "incrementLabel"; "required": false; "isSignal": true; }; "decrementLabel": { "alias": "decrementLabel"; "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>;
449
+ }
450
+
451
+ declare class DgaSlider {
452
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
453
+ readonly classes: _angular_core.Signal<string>;
454
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSlider, never>;
455
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaSlider, "input[type=\"range\"][dgaSlider]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
456
+ }
457
+
458
+ declare class DgaOtp {
459
+ private cells;
460
+ readonly length: _angular_core.InputSignal<number>;
461
+ readonly value: _angular_core.ModelSignal<string>;
462
+ readonly label: _angular_core.InputSignal<string>;
463
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
464
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
465
+ readonly completed: _angular_core.OutputEmitterRef<string>;
466
+ get slots(): number[];
467
+ chars(): string[];
468
+ cellClasses(): string;
469
+ onInput(index: number, raw: string): void;
470
+ onKey(index: number, event: KeyboardEvent): void;
471
+ onPaste(event: ClipboardEvent): void;
472
+ private commit;
473
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaOtp, never>;
474
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaOtp, "dga-otp", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "completed": "completed"; }, never, never, true, never>;
475
+ }
476
+
477
+ declare class DgaChipInput {
478
+ readonly valueInput: _angular_core.InputSignal<string[]>;
479
+ readonly value: _angular_core.WritableSignal<string[]>;
480
+ readonly placeholder: _angular_core.InputSignal<string>;
481
+ readonly label: _angular_core.InputSignal<string>;
482
+ readonly removeLabel: _angular_core.InputSignal<string>;
483
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
484
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
485
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
486
+ readonly valueChange: _angular_core.OutputEmitterRef<string[]>;
487
+ draft: string;
488
+ readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
489
+ readonly wrapClasses: _angular_core.Signal<string>;
490
+ commit(event: Event): void;
491
+ remove(tag: string): void;
492
+ onBackspace(): void;
493
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChipInput, never>;
494
+ 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; }; "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>;
495
+ }
496
+
497
+ interface DgaUploadFile {
498
+ id: string;
499
+ name: string;
500
+ size: number;
501
+ file?: File;
502
+ }
503
+ type DgaUploadAppearance = 'zone' | 'browse';
504
+ declare class DgaUpload {
505
+ readonly filesInput: _angular_core.InputSignal<DgaUploadFile[]>;
506
+ readonly files: _angular_core.WritableSignal<DgaUploadFile[]>;
507
+ readonly accept: _angular_core.InputSignal<string>;
508
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
509
+ /** `zone` = drop area; `browse` = compact file-upload button. */
510
+ readonly appearance: _angular_core.InputSignal<DgaUploadAppearance>;
511
+ readonly hint: _angular_core.InputSignal<string>;
512
+ readonly browseLabel: _angular_core.InputSignal<string>;
513
+ readonly removeLabel: _angular_core.InputSignal<string>;
514
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
515
+ readonly maxSize: _angular_core.InputSignal<number>;
516
+ readonly filesChange: _angular_core.OutputEmitterRef<DgaUploadFile[]>;
517
+ readonly dragging: _angular_core.ModelSignal<boolean>;
518
+ readonly zoneClasses: _angular_core.Signal<string>;
519
+ onDragOver(event: DragEvent): void;
520
+ onDrop(event: DragEvent): void;
521
+ onPick(event: Event): void;
522
+ remove(id: string): void;
523
+ formatSize(bytes: number): string;
524
+ private addFiles;
525
+ private commit;
526
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaUpload, never>;
527
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaUpload, "dga-upload", never, { "filesInput": { "alias": "files"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "browseLabel": { "alias": "browseLabel"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "dragging": { "alias": "dragging"; "required": false; "isSignal": true; }; }, { "filesChange": "filesChange"; "dragging": "draggingChange"; }, never, never, true, never>;
528
+ }
529
+
530
+ interface DgaPhoneCountry {
531
+ /** Dial code including `+`, e.g. `+966`. */
532
+ code: string;
533
+ /** Short label shown in the prefix select. */
534
+ label: string;
535
+ /** Optional longer name for option text. */
536
+ name?: string;
537
+ }
538
+ /** GCC-first dial codes for contact forms. */
539
+ declare const DGA_PHONE_COUNTRIES: DgaPhoneCountry[];
540
+ /**
541
+ * Phone field with country-code prefix select.
542
+ * The control group is always LTR so digits and codes read correctly in RTL pages.
543
+ */
544
+ declare class DgaPhoneInput {
545
+ readonly countries: _angular_core.InputSignal<DgaPhoneCountry[]>;
546
+ readonly countryCode: _angular_core.ModelSignal<string>;
547
+ readonly nationalNumber: _angular_core.ModelSignal<string>;
548
+ readonly controlId: _angular_core.InputSignal<string>;
549
+ readonly name: _angular_core.InputSignal<string>;
550
+ readonly placeholder: _angular_core.InputSignal<string>;
551
+ readonly autocomplete: _angular_core.InputSignal<string>;
552
+ readonly codeLabel: _angular_core.InputSignal<string>;
553
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
554
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
555
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
556
+ /** Full E.164-ish value: code + national digits. */
557
+ readonly value: _angular_core.Signal<string>;
558
+ readonly groupClasses: _angular_core.Signal<string>;
559
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPhoneInput, never>;
560
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPhoneInput, "dga-phone-input", never, { "countries": { "alias": "countries"; "required": false; "isSignal": true; }; "countryCode": { "alias": "countryCode"; "required": false; "isSignal": true; }; "nationalNumber": { "alias": "nationalNumber"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "codeLabel": { "alias": "codeLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "countryCode": "countryCodeChange"; "nationalNumber": "nationalNumberChange"; }, never, never, true, never>;
561
+ }
562
+
563
+ /** @deprecated Prefer `DgaSelectOption` — alias kept for existing imports. */
564
+ type DgaAutocompleteOption = DgaSelectOption;
565
+ /** Thin preset: searchable single-select. Prefer `<dga-select searchable>`. */
566
+ declare class DgaAutocomplete {
567
+ readonly options: _angular_core.InputSignal<DgaSelectOption[]>;
568
+ readonly valueInput: _angular_core.InputSignal<string>;
569
+ readonly value: _angular_core.WritableSignal<string>;
570
+ readonly placeholder: _angular_core.InputSignal<string>;
571
+ readonly label: _angular_core.InputSignal<string>;
572
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
573
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
574
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
575
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
576
+ onValueChange(next: string | string[]): void;
577
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAutocomplete, never>;
578
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAutocomplete, "dga-autocomplete", 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; }; "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>;
579
+ }
580
+
581
+ /** @deprecated Prefer `DgaSelectOption` — alias kept for existing imports. */
582
+ type DgaMultiselectOption = DgaSelectOption;
583
+ /** Thin preset: multi-select. Prefer `<dga-select multiple>`. */
584
+ declare class DgaMultiselect {
585
+ readonly options: _angular_core.InputSignal<DgaSelectOption[]>;
586
+ readonly valueInput: _angular_core.InputSignal<string[]>;
587
+ readonly value: _angular_core.WritableSignal<string[]>;
588
+ readonly placeholder: _angular_core.InputSignal<string>;
589
+ readonly label: _angular_core.InputSignal<string>;
590
+ readonly removeLabel: _angular_core.InputSignal<string>;
591
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
592
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
593
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
594
+ readonly valueChange: _angular_core.OutputEmitterRef<string[]>;
595
+ onValueChange(next: string | string[]): void;
596
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaMultiselect, never>;
597
+ 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; }; "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>;
598
+ }
599
+
600
+ /** Calendar system for date values and the picker UI. */
601
+ type DgaDateCalendar = 'gregorian' | 'hijri';
602
+ /** Picker UI mode — inferred from `format` tokens when not set explicitly. */
603
+ type DgaDatePickerMode = 'day' | 'month' | 'year';
604
+ type DgaDateLocale = 'ar' | 'en';
605
+ interface DgaCalendarParts {
606
+ year: number;
607
+ month: number;
608
+ day: number;
609
+ }
610
+ declare const DGA_HIJRI_MONTHS: {
611
+ readonly ar: readonly ["محرم", "صفر", "ربيع الأول", "ربيع الثاني", "جمادى الأولى", "جمادى الآخرة", "رجب", "شعبان", "رمضان", "شوال", "ذو القعدة", "ذو الحجة"];
612
+ 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"];
613
+ };
614
+ declare const DGA_GREGORIAN_MONTHS: {
615
+ readonly ar: readonly ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"];
616
+ readonly en: readonly ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
617
+ };
618
+ declare const DGA_WEEKDAYS: {
619
+ readonly ar: readonly ["أحد", "إثن", "ثلا", "أرب", "خمي", "جمع", "سبت"];
620
+ readonly en: readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
621
+ };
622
+ /** Read calendar parts for a Date (UTC day). */
623
+ declare function dgaGetCalendarParts(date: Date, calendar: DgaDateCalendar): DgaCalendarParts;
624
+ /**
625
+ * Convert calendar parts to a Date (UTC midnight).
626
+ * Hijri conversion uses binary search against islamic-umalqura.
627
+ */
628
+ declare function dgaPartsToDate(parts: DgaCalendarParts, calendar: DgaDateCalendar): Date;
629
+ declare function dgaDaysInMonth(year: number, month: number, calendar: DgaDateCalendar): number;
630
+ declare function dgaAddMonths(parts: DgaCalendarParts, delta: number, calendar: DgaDateCalendar): DgaCalendarParts;
631
+ /** Infer mode from format tokens (YYYY / MM / DD). */
632
+ declare function dgaModeFromFormat(format: string): DgaDatePickerMode;
633
+ declare function dgaFormatDate(date: Date, format: string, calendar: DgaDateCalendar): string;
634
+ declare function dgaParseDate(value: string, format: string, calendar: DgaDateCalendar): Date | null;
635
+ declare function dgaSameDay(a: Date | null, b: Date | null, calendar?: DgaDateCalendar): boolean;
636
+ declare function dgaCompareDays(a: Date | null, b: Date | null, calendar?: DgaDateCalendar): number;
637
+ declare function dgaClampDate(date: Date, min?: Date | null, max?: Date | null, calendar?: DgaDateCalendar): Date;
638
+ declare function dgaMonthNames(calendar: DgaDateCalendar, locale: 'ar' | 'en'): readonly string[];
639
+ /** First weekday (0=Sun) of the given calendar month. */
640
+ declare function dgaMonthStartWeekday(year: number, month: number, calendar: DgaDateCalendar): number;
641
+ declare function dgaTodayUtc(): Date;
642
+ /** Coerce string | Date | null to UTC date using format when string. */
643
+ declare function dgaCoerceDate(value: string | Date | null | undefined, format: string, calendar: DgaDateCalendar): Date | null;
644
+
645
+ interface DgaDateRangeValue {
646
+ start: string;
647
+ end: string;
648
+ }
649
+ type PanelView = DgaDatePickerMode;
650
+ declare class DgaDatePickerComponent {
651
+ private readonly host;
652
+ private readonly destroyRef;
653
+ readonly inputId: string;
654
+ readonly panelId: string;
655
+ readonly valueInput: _angular_core.InputSignal<string>;
656
+ readonly value: _angular_core.WritableSignal<string>;
657
+ readonly startValue: _angular_core.ModelSignal<string>;
658
+ readonly endValue: _angular_core.ModelSignal<string>;
659
+ readonly calendar: _angular_core.InputSignal<DgaDateCalendar>;
660
+ readonly range: _angular_core.InputSignalWithTransform<boolean, unknown>;
661
+ readonly format: _angular_core.InputSignal<string>;
662
+ readonly mode: _angular_core.InputSignal<DgaDatePickerMode | null>;
663
+ readonly locale: _angular_core.InputSignal<DgaDateLocale>;
664
+ readonly minDate: _angular_core.InputSignal<string | Date | null>;
665
+ readonly maxDate: _angular_core.InputSignal<string | Date | null>;
666
+ readonly yearBefore: _angular_core.InputSignal<number>;
667
+ readonly yearAfter: _angular_core.InputSignal<number>;
668
+ readonly placeholder: _angular_core.InputSignal<string>;
669
+ readonly controlId: _angular_core.InputSignal<string>;
670
+ readonly name: _angular_core.InputSignal<string>;
671
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
672
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
673
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
674
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
675
+ readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
676
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
677
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
678
+ readonly rangeSeparator: _angular_core.InputSignal<string>;
679
+ readonly todayLabel: _angular_core.InputSignal<string>;
680
+ readonly clearLabel: _angular_core.InputSignal<string>;
681
+ readonly closeLabel: _angular_core.InputSignal<string>;
682
+ readonly saveLabel: _angular_core.InputSignal<string>;
683
+ readonly ariaLabel: _angular_core.InputSignal<string>;
684
+ readonly resolvedTodayLabel: _angular_core.Signal<string>;
685
+ readonly resolvedClearLabel: _angular_core.Signal<string>;
686
+ readonly resolvedCloseLabel: _angular_core.Signal<string>;
687
+ readonly resolvedSaveLabel: _angular_core.Signal<string>;
688
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
689
+ readonly rangeChange: _angular_core.OutputEmitterRef<DgaDateRangeValue>;
690
+ readonly open: _angular_core.WritableSignal<boolean>;
691
+ readonly panelStyle: _angular_core.WritableSignal<Record<string, string>>;
692
+ readonly panelView: _angular_core.WritableSignal<DgaDatePickerMode>;
693
+ readonly viewParts: _angular_core.WritableSignal<DgaCalendarParts>;
694
+ readonly draftStart: _angular_core.WritableSignal<Date | null>;
695
+ readonly draftEnd: _angular_core.WritableSignal<Date | null>;
696
+ readonly rangePickPhase: _angular_core.WritableSignal<"start" | "end">;
697
+ readonly typedValue: _angular_core.WritableSignal<string | null>;
698
+ readonly effectiveStatus: _angular_core.Signal<DgaFormStatus>;
699
+ readonly panelMode: _angular_core.Signal<DgaDatePickerMode>;
700
+ readonly labels: _angular_core.Signal<{
701
+ readonly today: "اليوم";
702
+ readonly clear: "مسح";
703
+ readonly close: "إغلاق";
704
+ readonly save: "حفظ";
705
+ readonly prev: "السابق";
706
+ readonly next: "التالي";
707
+ readonly calendar: "فتح التقويم";
708
+ readonly clearInput: "مسح التاريخ";
709
+ readonly month: "الشهر";
710
+ readonly year: "السنة";
711
+ readonly placeholder: "يوم/شهر/سنة";
712
+ readonly rangeStart: "تاريخ البداية";
713
+ readonly rangeEnd: "تاريخ النهاية";
714
+ } | {
715
+ readonly today: "Today";
716
+ readonly clear: "Clear";
717
+ readonly close: "Close";
718
+ readonly save: "Save";
719
+ readonly prev: "Previous";
720
+ readonly next: "Next";
721
+ readonly calendar: "Open calendar";
722
+ readonly clearInput: "Clear date";
723
+ readonly month: "Month";
724
+ readonly year: "Year";
725
+ readonly placeholder: "DD/MM/YYYY";
726
+ readonly rangeStart: "Start date";
727
+ readonly rangeEnd: "End date";
728
+ }>;
729
+ readonly resolvedPlaceholder: _angular_core.Signal<string>;
730
+ readonly weekdays: _angular_core.Signal<readonly ["أحد", "إثن", "ثلا", "أرب", "خمي", "جمع", "سبت"] | readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]>;
731
+ readonly minBound: _angular_core.Signal<Date | null>;
732
+ readonly maxBound: _angular_core.Signal<Date | null>;
733
+ readonly displayValue: _angular_core.Signal<string>;
734
+ readonly viewYear: _angular_core.Signal<number>;
735
+ readonly viewMonth: _angular_core.Signal<number>;
736
+ readonly monthOptions: _angular_core.Signal<{
737
+ value: number;
738
+ label: string;
739
+ selected: boolean;
740
+ disabled: boolean;
741
+ }[]>;
742
+ readonly yearOptions: _angular_core.Signal<{
743
+ value: number;
744
+ selected: boolean;
745
+ disabled: boolean;
746
+ }[]>;
747
+ readonly dayCells: _angular_core.Signal<DayCell[]>;
748
+ constructor();
749
+ onDocumentClick(event: MouseEvent): void;
750
+ onEscape(): void;
751
+ onReposition(): void;
752
+ monthLabel(month: number): string;
753
+ togglePanel(): void;
754
+ openPanel(): void;
755
+ closePanel(restoreDraft?: boolean): void;
756
+ private repositionPanel;
757
+ navigate(delta: number): void;
758
+ setPanelView(view: PanelView): void;
759
+ selectDay(day: number): void;
760
+ selectMonth(month: number): void;
761
+ selectYear(year: number): void;
762
+ goToday(): void;
763
+ clearDraft(): void;
764
+ clearAll(): void;
765
+ save(): void;
766
+ onInput(raw: string): void;
767
+ onInputBlur(): void;
768
+ onInputKeydown(event: KeyboardEvent): void;
769
+ private applyDraftDate;
770
+ private draftAnchorParts;
771
+ private syncDraftFromModels;
772
+ private parseRangeFromValue;
773
+ private emitValues;
774
+ private isDateDisabled;
775
+ private isMonthDisabled;
776
+ private isYearDisabled;
777
+ private initialViewParts;
778
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDatePickerComponent, never>;
779
+ 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; }; "disabled": { "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>;
780
+ }
781
+ interface DayCell {
782
+ key: string;
783
+ empty: boolean;
784
+ day?: number;
785
+ today?: boolean;
786
+ selected?: boolean;
787
+ inRange?: boolean;
788
+ rangeStart?: boolean;
789
+ rangeEnd?: boolean;
790
+ disabled?: boolean;
791
+ label?: string;
792
+ }
793
+
794
+ type DgaDialogSize = 'sm' | 'md' | 'lg';
795
+ declare class DgaDialog {
796
+ private readonly injector;
797
+ private readonly panel;
798
+ readonly open: _angular_core.ModelSignal<boolean>;
799
+ readonly title: _angular_core.InputSignal<string>;
800
+ readonly size: _angular_core.InputSignal<DgaDialogSize>;
801
+ readonly closeLabel: _angular_core.InputSignal<string>;
802
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
803
+ readonly closed: _angular_core.OutputEmitterRef<void>;
804
+ readonly titleId: string;
805
+ private previousFocus;
806
+ private previousOverflow;
807
+ readonly panelClasses: _angular_core.Signal<string>;
808
+ constructor();
809
+ close(): void;
810
+ onBackdrop(): void;
811
+ onKeydown(event: KeyboardEvent): void;
812
+ private focusInitial;
813
+ private trapFocus;
814
+ private getFocusable;
815
+ private lockScroll;
816
+ private unlockScroll;
817
+ private restoreFocus;
818
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDialog, never>;
819
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDialog, "dga-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*", "[dgaDialogActions]"], true, never>;
820
+ }
821
+
822
+ type DgaModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
823
+ type DgaModalAnimation = 'fade' | 'scale' | 'slide' | 'none';
824
+ declare class DgaModal {
825
+ private readonly injector;
826
+ private readonly panel;
827
+ readonly open: _angular_core.ModelSignal<boolean>;
828
+ readonly title: _angular_core.InputSignal<string>;
829
+ readonly description: _angular_core.InputSignal<string>;
830
+ readonly size: _angular_core.InputSignal<DgaModalSize>;
831
+ readonly animation: _angular_core.InputSignal<DgaModalAnimation>;
832
+ readonly closeLabel: _angular_core.InputSignal<string>;
833
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
834
+ readonly closeOnEscape: _angular_core.InputSignalWithTransform<boolean, unknown>;
835
+ readonly showClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
836
+ readonly scrollable: _angular_core.InputSignalWithTransform<boolean, unknown>;
837
+ readonly centered: _angular_core.InputSignalWithTransform<boolean, unknown>;
838
+ readonly closed: _angular_core.OutputEmitterRef<void>;
839
+ readonly opened: _angular_core.OutputEmitterRef<void>;
840
+ readonly titleId: string;
841
+ readonly descId: string;
842
+ /** Keeps the overlay mounted while exit animation plays. */
843
+ readonly rendered: _angular_core.WritableSignal<boolean>;
844
+ private readonly leaving;
845
+ private previousFocus;
846
+ private previousOverflow;
847
+ readonly panelClasses: _angular_core.Signal<string>;
848
+ readonly backdropClasses: _angular_core.Signal<string>;
849
+ private readonly panelAnimClass;
850
+ constructor();
851
+ close(): void;
852
+ onBackdrop(): void;
853
+ onKeydown(event: KeyboardEvent): void;
854
+ onAnimationEnd(event: AnimationEvent): void;
855
+ private finishClose;
856
+ private focusInitial;
857
+ private trapFocus;
858
+ private getFocusable;
859
+ private lockScroll;
860
+ private unlockScroll;
861
+ private restoreFocus;
862
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaModal, never>;
863
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaModal, "dga-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "scrollable": { "alias": "scrollable"; "required": false; "isSignal": true; }; "centered": { "alias": "centered"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; "opened": "opened"; }, never, ["*", "[dgaModalActions]"], true, never>;
864
+ }
865
+
866
+ type DgaToastVariant = 'neutral' | 'success' | 'info' | 'warning' | 'error';
867
+ declare class DgaToast implements OnDestroy {
868
+ readonly open: _angular_core.ModelSignal<boolean>;
869
+ readonly variant: _angular_core.InputSignal<DgaToastVariant>;
870
+ readonly title: _angular_core.InputSignal<string>;
871
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
872
+ readonly closeLabel: _angular_core.InputSignal<string>;
873
+ /** Auto-dismiss after ms; `0` disables. Default 5s per a11y guidance. */
874
+ readonly duration: _angular_core.InputSignal<number>;
875
+ readonly closed: _angular_core.OutputEmitterRef<void>;
876
+ private timer;
877
+ readonly classes: _angular_core.Signal<string>;
878
+ readonly iconName: _angular_core.Signal<DgaIconName>;
879
+ readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
880
+ constructor();
881
+ ngOnDestroy(): void;
882
+ dismiss(): void;
883
+ private clearTimer;
884
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaToast, never>;
885
+ 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>;
886
+ }
887
+
888
+ interface DgaToastShowOptions {
889
+ title?: string;
890
+ message?: string;
891
+ variant?: DgaToastVariant;
892
+ duration?: number;
893
+ dismissible?: boolean;
894
+ }
895
+ interface DgaToastRequest extends Required<Pick<DgaToastShowOptions, 'title' | 'message' | 'variant' | 'duration' | 'dismissible'>> {
896
+ id: number;
897
+ }
898
+ /**
899
+ * Imperative toast API — used by Copy and any app code that needs feedback
900
+ * without wiring `<dga-toast>` inputs manually.
901
+ *
902
+ * Prefer mounting `<dga-toast-outlet />` once near the app root.
903
+ * Falls back to a lightweight DOM toast when no outlet is present.
904
+ */
905
+ declare class DgaToastService {
906
+ private seq;
907
+ private outletCount;
908
+ private fallbackTimer;
909
+ private fallbackEl;
910
+ /** Active request observed by `DgaToastOutlet`. */
911
+ readonly request: _angular_core.WritableSignal<DgaToastRequest | null>;
912
+ /** Called by the outlet on connect/disconnect. */
913
+ registerOutlet(): () => void;
914
+ /** Show a toast. Replaces any currently visible toast. */
915
+ show(options?: DgaToastShowOptions): void;
916
+ /** Convenience for clipboard success. */
917
+ copied(message?: string, title?: string): void;
918
+ /** Dismiss the active toast. */
919
+ dismiss(): void;
920
+ private showFallback;
921
+ private clearFallback;
922
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaToastService, never>;
923
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DgaToastService>;
924
+ }
925
+
926
+ declare class DgaToastOutlet {
927
+ private readonly toasts;
928
+ private readonly destroyRef;
929
+ readonly req: _angular_core.WritableSignal<_a_nemreen_dga_ui.DgaToastRequest | null>;
930
+ readonly closeLabel: string;
931
+ constructor();
932
+ onClosed(id: number): void;
933
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaToastOutlet, never>;
934
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaToastOutlet, "dga-toast-outlet", never, {}, {}, never, never, true, never>;
935
+ }
936
+
937
+ /** Matches DGA guideline placements (logical start/end for RTL). */
938
+ type DgaTooltipPlacement = 'top' | 'bottom' | 'start' | 'end';
939
+ /** Default = light surface; inverted = dark tip (guideline «معكوس»). */
940
+ type DgaTooltipVariant = 'default' | 'inverted';
941
+ /**
942
+ * Tooltip aligned with
943
+ * https://design.dga.gov.sa/guidelines/components/feedback/tooltip
944
+ *
945
+ * Anatomy: optional help badge · title · body · container · beak
946
+ */
947
+ declare class DgaTooltip {
948
+ private static seq;
949
+ private readonly host;
950
+ private readonly destroyRef;
951
+ /** Body / helper text (guideline «الرسالة»). */
952
+ readonly text: _angular_core.InputSignal<string>;
953
+ /** Optional concise title (guideline «العنوان»). */
954
+ readonly title: _angular_core.InputSignal<string>;
955
+ readonly placement: _angular_core.InputSignal<DgaTooltipPlacement>;
956
+ readonly variant: _angular_core.InputSignal<DgaTooltipVariant>;
957
+ /** Show the filled “?” help badge inside the tip. Default `true`. */
958
+ readonly showIcon: _angular_core.InputSignalWithTransform<boolean, unknown>;
959
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
960
+ readonly showDelay: _angular_core.InputSignal<number>;
961
+ readonly hideDelay: _angular_core.InputSignal<number>;
962
+ /** Auto-dismiss after open on touch / click toggle. `0` disables. */
963
+ readonly dismissMs: _angular_core.InputSignal<number>;
964
+ readonly open: _angular_core.WritableSignal<boolean>;
965
+ readonly tipId: string;
966
+ private showTimer;
967
+ private hideTimer;
968
+ private dismissTimer;
969
+ private touchPinned;
970
+ constructor();
971
+ /** Capture-phase so overflow containers also dismiss the tip. */
972
+ private readonly onScrollCapture;
973
+ onDocPointer(event: PointerEvent): void;
974
+ onDocEscape(): void;
975
+ onWindowBlur(): void;
976
+ onVisibility(): void;
977
+ onEnter(event: PointerEvent): void;
978
+ onLeave(event: PointerEvent): void;
979
+ onFocusOut(event: FocusEvent): void;
980
+ onClick(event: MouseEvent): void;
981
+ showSoon(): void;
982
+ hideSoon(): void;
983
+ show(): void;
984
+ hide(): void;
985
+ toggle(): void;
986
+ private toggleTouch;
987
+ private scheduleDismiss;
988
+ private isCoarsePointer;
989
+ private clearShow;
990
+ private clearHide;
991
+ private clearDismiss;
992
+ private clearTimers;
993
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTooltip, never>;
994
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTooltip, "dga-tooltip", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showDelay": { "alias": "showDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "hideDelay"; "required": false; "isSignal": true; }; "dismissMs": { "alias": "dismissMs"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
995
+ }
996
+
997
+ interface DgaMenuItem {
998
+ label: string;
999
+ value: string;
1000
+ icon?: DgaIconName;
1001
+ danger?: boolean;
1002
+ }
1003
+ declare class DgaMenu {
1004
+ private readonly host;
1005
+ private readonly injector;
1006
+ private readonly destroyRef;
1007
+ private readonly triggerRef;
1008
+ private readonly menuRef;
1009
+ readonly items: _angular_core.InputSignal<DgaMenuItem[]>;
1010
+ readonly open: _angular_core.ModelSignal<boolean>;
1011
+ readonly triggerLabel: _angular_core.InputSignal<string>;
1012
+ /** Optional leading glyph (e.g. share on page heroes). */
1013
+ readonly leadingIcon: _angular_core.InputSignal<DgaIconName | null>;
1014
+ readonly showChevron: _angular_core.InputSignalWithTransform<boolean, unknown>;
1015
+ /** Minimum panel width (e.g. share menus). */
1016
+ readonly menuMinWidth: _angular_core.InputSignal<string>;
1017
+ readonly selected: _angular_core.OutputEmitterRef<string>;
1018
+ /** Viewport coords - panel is portaled to body so ancestors cannot clip it. */
1019
+ readonly panelStyle: _angular_core.WritableSignal<Record<string, string>>;
1020
+ private readonly seq;
1021
+ readonly triggerId: string;
1022
+ readonly listId: string;
1023
+ private activeIndex;
1024
+ private readonly onReposition;
1025
+ constructor();
1026
+ triggerClasses(): string;
1027
+ menuClasses(): string;
1028
+ itemId(index: number): string;
1029
+ itemClass(item: DgaMenuItem): string;
1030
+ toggle(event: Event): void;
1031
+ openMenu(): void;
1032
+ close(restoreFocus?: boolean): void;
1033
+ selectItem(item: DgaMenuItem): void;
1034
+ onTriggerKey(event: KeyboardEvent): void;
1035
+ onMenuKey(event: KeyboardEvent): void;
1036
+ onDocumentClick(event: MouseEvent): void;
1037
+ onDocumentKeydown(event: KeyboardEvent): void;
1038
+ private portalMenuToBody;
1039
+ private detachPortaledMenu;
1040
+ private syncPanelPosition;
1041
+ private focusItem;
1042
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaMenu, never>;
1043
+ 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"; }, never, never, true, never>;
1044
+ }
1045
+
1046
+ type DgaDrawerSide = 'start' | 'end';
1047
+ declare class DgaDrawer {
1048
+ private readonly injector;
1049
+ private readonly panel;
1050
+ readonly open: _angular_core.ModelSignal<boolean>;
1051
+ readonly title: _angular_core.InputSignal<string>;
1052
+ readonly side: _angular_core.InputSignal<DgaDrawerSide>;
1053
+ readonly closeLabel: _angular_core.InputSignal<string>;
1054
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
1055
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1056
+ readonly titleId: string;
1057
+ private previousFocus;
1058
+ private previousOverflow;
1059
+ readonly panelClasses: _angular_core.Signal<string>;
1060
+ constructor();
1061
+ close(): void;
1062
+ onBackdrop(): void;
1063
+ onKeydown(event: KeyboardEvent): void;
1064
+ private focusInitial;
1065
+ private trapFocus;
1066
+ private getFocusable;
1067
+ private lockScroll;
1068
+ private unlockScroll;
1069
+ private restoreFocus;
1070
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDrawer, never>;
1071
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDrawer, "dga-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*", "[dgaDrawerActions]"], true, never>;
1072
+ }
1073
+
1074
+ interface DgaImagePopupImage {
1075
+ src: string;
1076
+ alt?: string;
1077
+ }
1078
+ /** Accepts plain URLs or `{ src, alt }` objects. */
1079
+ type DgaImagePopupSource = string | DgaImagePopupImage;
1080
+ /** Open / close motion for the lightbox shell. */
1081
+ type DgaImagePopupAnimation = 'fade' | 'scale' | 'slide' | 'zoom' | 'none';
1082
+ /** Cross-fade when changing the active image. */
1083
+ type DgaImagePopupImageTransition = 'fade' | 'none';
1084
+ declare class DgaImagePopup {
1085
+ private readonly injector;
1086
+ private readonly panel;
1087
+ readonly images: _angular_core.InputSignal<DgaImagePopupSource[]>;
1088
+ readonly open: _angular_core.ModelSignal<boolean>;
1089
+ readonly activeIndex: _angular_core.ModelSignal<number>;
1090
+ /** Lightbox enter/exit motion. */
1091
+ readonly animation: _angular_core.InputSignal<DgaImagePopupAnimation>;
1092
+ /** Motion when switching between images. */
1093
+ readonly imageTransition: _angular_core.InputSignal<DgaImagePopupImageTransition>;
1094
+ readonly label: _angular_core.InputSignal<string>;
1095
+ readonly closeLabel: _angular_core.InputSignal<string>;
1096
+ readonly prevLabel: _angular_core.InputSignal<string>;
1097
+ readonly nextLabel: _angular_core.InputSignal<string>;
1098
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
1099
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1100
+ readonly opened: _angular_core.OutputEmitterRef<void>;
1101
+ readonly captionId: string;
1102
+ /** Keeps the overlay mounted while exit animation plays. */
1103
+ readonly rendered: _angular_core.WritableSignal<boolean>;
1104
+ private readonly leaving;
1105
+ /** Bumps when the active image changes so the fade class can re-run. */
1106
+ private readonly imageEpoch;
1107
+ private previousFocus;
1108
+ private previousOverflow;
1109
+ readonly normalizedImages: _angular_core.Signal<DgaImagePopupImage[]>;
1110
+ readonly count: _angular_core.Signal<number>;
1111
+ readonly showArrows: _angular_core.Signal<boolean>;
1112
+ readonly panelClasses: _angular_core.Signal<string>;
1113
+ readonly backdropClasses: _angular_core.Signal<string>;
1114
+ readonly imageClasses: _angular_core.Signal<string>;
1115
+ private readonly panelAnimClass;
1116
+ constructor();
1117
+ clampedIndex(): number;
1118
+ activeSrc(): string;
1119
+ activeAlt(): string;
1120
+ goTo(index: number): void;
1121
+ next(): void;
1122
+ prev(): void;
1123
+ show(index?: number): void;
1124
+ close(): void;
1125
+ onBackdrop(): void;
1126
+ onKeydown(event: KeyboardEvent): void;
1127
+ onAnimationEnd(event: AnimationEvent): void;
1128
+ private finishClose;
1129
+ private focusInitial;
1130
+ private trapFocus;
1131
+ private getFocusable;
1132
+ private lockScroll;
1133
+ private unlockScroll;
1134
+ private restoreFocus;
1135
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaImagePopup, never>;
1136
+ 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>;
1137
+ }
1138
+
1139
+ type DgaAlertVariant = 'neutral' | 'critical' | 'error' | 'warning' | 'info' | 'success';
1140
+ /** Layout: default card alert, or compact single-line banner. */
1141
+ type DgaAlertDisplay = 'default' | 'inline';
1142
+ declare class DgaAlert {
1143
+ readonly variant: _angular_core.InputSignal<DgaAlertVariant>;
1144
+ readonly title: _angular_core.InputSignal<string | undefined>;
1145
+ readonly shadow: _angular_core.InputSignalWithTransform<boolean, unknown>;
1146
+ readonly color: _angular_core.InputSignalWithTransform<boolean, unknown>;
1147
+ /** `default` card layout or compact `inline` banner. */
1148
+ readonly display: _angular_core.InputSignal<DgaAlertDisplay>;
1149
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1150
+ readonly closeLabel: _angular_core.InputSignal<string>;
1151
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
1152
+ readonly shadowAttr: _angular_core.Signal<"true" | null>;
1153
+ readonly colorAttr: _angular_core.Signal<"true" | null>;
1154
+ readonly classes: _angular_core.Signal<string>;
1155
+ readonly contentClasses: _angular_core.Signal<string>;
1156
+ readonly textClasses: _angular_core.Signal<"flex flex-col gap-xs" | "min-w-0">;
1157
+ readonly titleClasses: _angular_core.Signal<string>;
1158
+ readonly descriptionClasses: _angular_core.Signal<string>;
1159
+ readonly iconName: _angular_core.Signal<DgaIconName>;
1160
+ readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
1161
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1162
+ 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>;
1163
+ }
1164
+
1165
+ type DgaEmptyAppearance = 'default' | 'plain';
1166
+ declare class DgaEmpty {
1167
+ readonly title: _angular_core.InputSignal<string>;
1168
+ readonly description: _angular_core.InputSignal<string>;
1169
+ /** `plain` = no dashed border (404 / hero empty states). */
1170
+ readonly appearance: _angular_core.InputSignal<DgaEmptyAppearance>;
1171
+ readonly classes: _angular_core.Signal<string>;
1172
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaEmpty, never>;
1173
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaEmpty, "dga-empty", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaEmptyMedia]", "*"], true, never>;
1174
+ }
1175
+
1176
+ interface DgaFeedbackSubmit {
1177
+ rating: number;
1178
+ comment: string;
1179
+ }
1180
+ declare class DgaFeedback {
1181
+ readonly rating: _angular_core.ModelSignal<number>;
1182
+ readonly comment: _angular_core.WritableSignal<string>;
1183
+ readonly sent: _angular_core.WritableSignal<boolean>;
1184
+ readonly submitted: _angular_core.OutputEmitterRef<DgaFeedbackSubmit>;
1185
+ readonly title: _angular_core.InputSignal<string>;
1186
+ readonly subtitle: _angular_core.InputSignal<string>;
1187
+ readonly ratingLabel: _angular_core.InputSignal<string>;
1188
+ readonly commentLabel: _angular_core.InputSignal<string>;
1189
+ readonly commentPlaceholder: _angular_core.InputSignal<string>;
1190
+ readonly submitLabel: _angular_core.InputSignal<string>;
1191
+ readonly againLabel: _angular_core.InputSignal<string>;
1192
+ readonly successTitle: _angular_core.InputSignal<string>;
1193
+ readonly successBody: _angular_core.InputSignal<string>;
1194
+ private static nextId;
1195
+ readonly commentId: string;
1196
+ readonly canSubmit: _angular_core.Signal<boolean>;
1197
+ readonly hostClass: _angular_core.Signal<string>;
1198
+ readonly ratingHint: _angular_core.Signal<string>;
1199
+ onCommentInput(event: Event): void;
1200
+ submit(): void;
1201
+ reset(): void;
1202
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFeedback, never>;
1203
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaFeedback, "dga-feedback", never, { "rating": { "alias": "rating"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "ratingLabel": { "alias": "ratingLabel"; "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; }; "againLabel": { "alias": "againLabel"; "required": false; "isSignal": true; }; "successTitle": { "alias": "successTitle"; "required": false; "isSignal": true; }; "successBody": { "alias": "successBody"; "required": false; "isSignal": true; }; }, { "rating": "ratingChange"; "submitted": "submitted"; }, never, never, true, never>;
1204
+ }
1205
+
1206
+ type DgaPageFeedbackAnswer = 'yes' | 'no';
1207
+ type DgaPageFeedbackPhase = 'idle' | 'details' | 'thanks';
1208
+ interface DgaPageFeedbackOption {
1209
+ value: string;
1210
+ label: string;
1211
+ }
1212
+ interface DgaPageFeedbackSubmit {
1213
+ answer: DgaPageFeedbackAnswer;
1214
+ reasons: string[];
1215
+ gender: string;
1216
+ comment: string;
1217
+ }
1218
+ interface DgaPageFeedbackAgreementLink {
1219
+ label: string;
1220
+ href: string;
1221
+ }
1222
+ /**
1223
+ * Full-width “Was this page useful?” panel used at the end of content templates.
1224
+ */
1225
+ declare class DgaPageFeedback {
1226
+ readonly question: _angular_core.InputSignal<string>;
1227
+ readonly yesLabel: _angular_core.InputSignal<string>;
1228
+ readonly noLabel: _angular_core.InputSignal<string>;
1229
+ readonly closeLabel: _angular_core.InputSignal<string>;
1230
+ readonly whyLabel: _angular_core.InputSignal<string>;
1231
+ readonly whyHint: _angular_core.InputSignal<string>;
1232
+ readonly genderLabel: _angular_core.InputSignal<string>;
1233
+ readonly commentLabel: _angular_core.InputSignal<string>;
1234
+ readonly commentPlaceholder: _angular_core.InputSignal<string>;
1235
+ readonly submitLabel: _angular_core.InputSignal<string>;
1236
+ readonly statistic: _angular_core.InputSignal<string>;
1237
+ readonly thankYouMessage: _angular_core.InputSignal<string>;
1238
+ readonly agreementBefore: _angular_core.InputSignal<string>;
1239
+ readonly participationLabel: _angular_core.InputSignal<string>;
1240
+ readonly participationHref: _angular_core.InputSignal<string>;
1241
+ readonly agreementAnd: _angular_core.InputSignal<string>;
1242
+ readonly rulesLabel: _angular_core.InputSignal<string>;
1243
+ readonly rulesHref: _angular_core.InputSignal<string>;
1244
+ readonly agreementAfter: _angular_core.InputSignal<string>;
1245
+ /** When false, only projected `[dgaPageFeedbackAgreement]` content is shown. */
1246
+ readonly defaultAgreement: _angular_core.InputSignalWithTransform<boolean, unknown>;
1247
+ readonly yesReasons: _angular_core.InputSignal<DgaPageFeedbackOption[]>;
1248
+ readonly noReasons: _angular_core.InputSignal<DgaPageFeedbackOption[]>;
1249
+ readonly genderOptions: _angular_core.InputSignal<DgaPageFeedbackOption[]>;
1250
+ readonly bordered: _angular_core.InputSignalWithTransform<boolean, unknown>;
1251
+ readonly submitted: _angular_core.OutputEmitterRef<DgaPageFeedbackSubmit>;
1252
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1253
+ readonly answer: _angular_core.WritableSignal<DgaPageFeedbackAnswer | null>;
1254
+ readonly phase: _angular_core.WritableSignal<DgaPageFeedbackPhase>;
1255
+ readonly reasons: _angular_core.WritableSignal<string[]>;
1256
+ readonly gender: _angular_core.WritableSignal<string>;
1257
+ readonly comment: _angular_core.WritableSignal<string>;
1258
+ readonly dismissed: _angular_core.WritableSignal<boolean>;
1259
+ readonly statusMessage: _angular_core.WritableSignal<string>;
1260
+ private static nextId;
1261
+ private readonly uid;
1262
+ readonly commentId: string;
1263
+ readonly genderName: string;
1264
+ readonly activeReasons: _angular_core.Signal<DgaPageFeedbackOption[]>;
1265
+ readonly canSubmit: _angular_core.Signal<boolean>;
1266
+ readonly showDefaultAgreement: _angular_core.Signal<boolean>;
1267
+ readonly panelClasses: _angular_core.Signal<string>;
1268
+ choose(value: DgaPageFeedbackAnswer): void;
1269
+ toggleReason(value: string, event: Event): void;
1270
+ onComment(event: Event): void;
1271
+ onSubmit(event: Event): void;
1272
+ /** From details → idle; from thanks → dismiss the panel. */
1273
+ close(): void;
1274
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPageFeedback, never>;
1275
+ 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>;
1276
+ }
1277
+
1278
+ type DgaCookieConsent = 'accepted' | 'declined' | null;
1279
+ /**
1280
+ * Privacy-compliant cookie consent banner.
1281
+ * Persists choice for 365 days; optional GA gating via `gaTrackingIds`.
1282
+ */
1283
+ declare class DgaCookies implements OnInit {
1284
+ private readonly destroyRef;
1285
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
1286
+ /** Auto-open delay when no consent is stored. `0` disables auto-show. */
1287
+ readonly delayMs: _angular_core.InputSignal<number>;
1288
+ readonly termsHref: _angular_core.InputSignal<string>;
1289
+ readonly privacyHref: _angular_core.InputSignal<string>;
1290
+ readonly title: _angular_core.InputSignal<string>;
1291
+ readonly description: _angular_core.InputSignal<string>;
1292
+ readonly acceptLabel: _angular_core.InputSignal<string>;
1293
+ readonly declineLabel: _angular_core.InputSignal<string>;
1294
+ /** Google Analytics IDs to disable on decline. */
1295
+ readonly gaTrackingIds: _angular_core.InputSignal<string | readonly string[]>;
1296
+ readonly accepted: _angular_core.OutputEmitterRef<void>;
1297
+ readonly declined: _angular_core.OutputEmitterRef<void>;
1298
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1299
+ readonly decided: _angular_core.OutputEmitterRef<"accepted" | "declined">;
1300
+ /** Controls enter/exit animation state. */
1301
+ readonly visible: _angular_core.WritableSignal<boolean>;
1302
+ /** Keeps the panel in the DOM while exit animation plays. */
1303
+ readonly mounted: _angular_core.WritableSignal<boolean>;
1304
+ private readonly seq;
1305
+ readonly titleId: string;
1306
+ readonly bodyId: string;
1307
+ private openTimer;
1308
+ private closeTimer;
1309
+ readonly copy: _angular_core.Signal<{
1310
+ title: string;
1311
+ body: string;
1312
+ terms: string;
1313
+ privacy: string;
1314
+ accept: string;
1315
+ decline: string;
1316
+ close: string;
1317
+ }>;
1318
+ readonly panelClasses: _angular_core.Signal<string>;
1319
+ constructor();
1320
+ ngOnInit(): void;
1321
+ /** Re-open the banner (e.g. from a footer Cookie Settings link). */
1322
+ show(): void;
1323
+ /** Hide without persisting a decision. */
1324
+ dismiss(): void;
1325
+ accept(): void;
1326
+ decline(): void;
1327
+ private hidePanel;
1328
+ private trackingIds;
1329
+ private clearTimer;
1330
+ private clearCloseTimer;
1331
+ static getConsent(): DgaCookieConsent;
1332
+ static setConsent(value: Exclude<DgaCookieConsent, null>): void;
1333
+ static clearConsent(): void;
1334
+ static get(name: string): string | null;
1335
+ static set(name: string, value: string, days?: number): void;
1336
+ static delete(name: string): void;
1337
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCookies, never>;
1338
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCookies, "dga-cookies", never, { "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "delayMs": { "alias": "delayMs"; "required": false; "isSignal": true; }; "termsHref": { "alias": "termsHref"; "required": false; "isSignal": true; }; "privacyHref": { "alias": "privacyHref"; "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; }; "gaTrackingIds": { "alias": "gaTrackingIds"; "required": false; "isSignal": true; }; }, { "accepted": "accepted"; "declined": "declined"; "closed": "closed"; "decided": "decided"; }, never, never, true, never>;
1339
+ }
1340
+
1341
+ type DgaRatingSize = 'sm' | 'md' | 'lg';
1342
+ declare class DgaRating {
1343
+ readonly value: _angular_core.ModelSignal<number>;
1344
+ readonly max: _angular_core.InputSignal<number>;
1345
+ readonly size: _angular_core.InputSignal<DgaRatingSize>;
1346
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
1347
+ readonly label: _angular_core.InputSignal<string>;
1348
+ readonly hoverValue: _angular_core.WritableSignal<number>;
1349
+ readonly stars: _angular_core.Signal<number[]>;
1350
+ readonly displayValue: _angular_core.Signal<number>;
1351
+ starLabel(star: number): string;
1352
+ onEnter(star: number): void;
1353
+ setValue(star: number): void;
1354
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaRating, never>;
1355
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaRating, "dga-rating", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1356
+ }
1357
+
1358
+ /**
1359
+ * Turns a button into a one-click clipboard control with success flash + toast.
1360
+ *
1361
+ * Resolve order: `value` literal → `target` selector textContent → nearest `code`.
1362
+ */
1363
+ declare class DgaCopy {
1364
+ private readonly el;
1365
+ private readonly destroyRef;
1366
+ private readonly toasts;
1367
+ /** Literal string to copy (highest priority). */
1368
+ readonly value: _angular_core.InputSignal<string>;
1369
+ /** CSS selector; copies the target's textContent when `value` is empty. */
1370
+ readonly target: _angular_core.InputSignal<string>;
1371
+ /** Visible label swap during the success window (targets `.dga-copy-label`). */
1372
+ readonly successLabel: _angular_core.InputSignal<string>;
1373
+ /** Toast / screen-reader message after a successful copy. */
1374
+ readonly message: _angular_core.InputSignal<string>;
1375
+ /** Toast title override. */
1376
+ readonly toastTitle: _angular_core.InputSignal<string>;
1377
+ /** Show success toast (default true). */
1378
+ readonly showToast: _angular_core.InputSignalWithTransform<boolean, unknown>;
1379
+ /** Flash duration in ms. */
1380
+ readonly duration: _angular_core.InputSignal<number>;
1381
+ readonly copied: _angular_core.OutputEmitterRef<string>;
1382
+ readonly status: _angular_core.WritableSignal<"success" | null>;
1383
+ private restoreTimer;
1384
+ private labelEl;
1385
+ private previousLabel;
1386
+ private iconSlot;
1387
+ private previousIconHtml;
1388
+ constructor();
1389
+ onClick(event: Event): Promise<void>;
1390
+ /** Programmatic copy of an arbitrary string (no flash). */
1391
+ static writeText(text: string): Promise<boolean>;
1392
+ private notify;
1393
+ private resolveText;
1394
+ private flash;
1395
+ private restore;
1396
+ private clearTimer;
1397
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCopy, never>;
1398
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaCopy, "button[dgaCopy], a[dgaCopy]", never, { "value": { "alias": "dgaCopy"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "successLabel": { "alias": "successLabel"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "toastTitle": { "alias": "toastTitle"; "required": false; "isSignal": true; }; "showToast": { "alias": "showToast"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, { "copied": "copied"; }, never, never, true, never>;
1399
+ }
1400
+
1401
+ type DgaShareAppearance = 'menu' | 'inline';
1402
+ /**
1403
+ * Social share control: X, LinkedIn, WhatsApp, and copy-link.
1404
+ * Defaults to the current page URL/title; override with `url` / `shareTitle`.
1405
+ */
1406
+ declare class DgaShare {
1407
+ private readonly toasts;
1408
+ readonly appearance: _angular_core.InputSignal<DgaShareAppearance>;
1409
+ readonly url: _angular_core.InputSignal<string>;
1410
+ readonly shareTitle: _angular_core.InputSignal<string>;
1411
+ readonly triggerLabel: _angular_core.InputSignal<string>;
1412
+ readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
1413
+ readonly buttonVariant: _angular_core.InputSignal<"subtle" | "outline" | "ghost">;
1414
+ readonly buttonSize: _angular_core.InputSignal<"sm" | "md">;
1415
+ readonly shared: _angular_core.OutputEmitterRef<string>;
1416
+ readonly linkCopied: _angular_core.OutputEmitterRef<void>;
1417
+ readonly copyFlash: _angular_core.WritableSignal<string>;
1418
+ private flashTimer;
1419
+ readonly labels: _angular_core.Signal<{
1420
+ x: string;
1421
+ linkedin: string;
1422
+ whatsapp: string;
1423
+ copy: string;
1424
+ copied: string;
1425
+ copiedMessage: string;
1426
+ }>;
1427
+ readonly menuItems: _angular_core.Signal<DgaMenuItem[]>;
1428
+ readonly inlineClasses: _angular_core.Signal<string>;
1429
+ resolvedUrl(): string;
1430
+ resolvedTitle(): string;
1431
+ onMenuSelect(value: string): void;
1432
+ share(channel: string): void;
1433
+ copyLink(): Promise<void>;
1434
+ onCopied(): void;
1435
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaShare, never>;
1436
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaShare, "dga-share", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; "shareTitle": { "alias": "shareTitle"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "buttonVariant": { "alias": "buttonVariant"; "required": false; "isSignal": true; }; "buttonSize": { "alias": "buttonSize"; "required": false; "isSignal": true; }; }, { "shared": "shared"; "linkCopied": "linkCopied"; }, never, never, true, never>;
1437
+ }
1438
+
1439
+ /** One-tap accessibility presets (compose primitives + settings). */
1440
+ type DgaA11yBundle = 'epilepsy-safe' | 'visually-impaired' | 'cognitive-disability' | 'motor-impaired' | 'colorblind' | 'dyslexia-friendly' | 'adhd-friendly';
1441
+ /** Primitive toggles stamped on `data-a11y`. */
1442
+ type DgaA11yMode = 'reduce-motion' | 'highlight-links' | 'highlight-titles' | 'high-contrast' | 'dyslexia' | 'reading-mask' | 'motor-targets' | DgaA11yBundle;
1443
+ type DgaA11yVisualFilter = 'none' | 'boost-contrast' | 'monochrome' | 'high-contrast' | 'high-saturation' | 'low-saturation' | 'deuteranopia';
1444
+ type DgaA11yTextAlign = 'default' | 'start' | 'end' | 'justify';
1445
+ type DgaA11yLineHeight = 'normal' | '1.6' | '1.8' | '2.0';
1446
+ type DgaA11yLetterSpacing = '0' | '0.04em' | '0.08em' | '0.12em';
1447
+ type DgaA11yWordSpacing = '0' | '0.16em' | '0.32em' | '0.48em';
1448
+ declare class DgaAccessibilityService {
1449
+ private readonly doc;
1450
+ private liveRegion;
1451
+ private opener;
1452
+ private mqMotion;
1453
+ private mqContrast;
1454
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
1455
+ readonly modes: _angular_core.WritableSignal<Set<DgaA11yMode>>;
1456
+ readonly visualFilter: _angular_core.WritableSignal<DgaA11yVisualFilter>;
1457
+ readonly fontStep: _angular_core.WritableSignal<number>;
1458
+ readonly textAlign: _angular_core.WritableSignal<DgaA11yTextAlign>;
1459
+ readonly lineHeight: _angular_core.WritableSignal<DgaA11yLineHeight>;
1460
+ readonly letterSpacing: _angular_core.WritableSignal<DgaA11yLetterSpacing>;
1461
+ readonly wordSpacing: _angular_core.WritableSignal<DgaA11yWordSpacing>;
1462
+ /** Half-height of the reading-mask band in px (20–160). */
1463
+ readonly maskBand: _angular_core.WritableSignal<number>;
1464
+ /** Center Y of the reading-mask band in px. */
1465
+ readonly maskY: _angular_core.WritableSignal<number>;
1466
+ readonly reduceMotion: _angular_core.WritableSignal<boolean>;
1467
+ readonly highlightLinks: _angular_core.WritableSignal<boolean>;
1468
+ readonly highlightTitles: _angular_core.WritableSignal<boolean>;
1469
+ readonly highContrast: _angular_core.WritableSignal<boolean>;
1470
+ readonly dyslexia: _angular_core.WritableSignal<boolean>;
1471
+ readonly readingMask: _angular_core.WritableSignal<boolean>;
1472
+ readonly motorTargets: _angular_core.WritableSignal<boolean>;
1473
+ /** Signal bumped when locale attrs change (for computed copy). */
1474
+ readonly localeEpoch: _angular_core.WritableSignal<number>;
1475
+ constructor();
1476
+ open(opener?: HTMLElement | null): void;
1477
+ close(): void;
1478
+ toggle(opener?: HTMLElement | null): void;
1479
+ hasMode(mode: DgaA11yMode): boolean;
1480
+ isBundle(mode: DgaA11yMode): mode is DgaA11yBundle;
1481
+ toggleMode(mode: DgaA11yMode): void;
1482
+ /** Explicitly enable or disable a mode/bundle (avoids switch double-toggle bugs). */
1483
+ setMode(mode: DgaA11yMode, enabled: boolean): void;
1484
+ setVisualFilter(filter: DgaA11yVisualFilter): void;
1485
+ cycleFontStep(): void;
1486
+ cycleTextAlign(): void;
1487
+ cycleLineHeight(): void;
1488
+ cycleLetterSpacing(): void;
1489
+ cycleWordSpacing(): void;
1490
+ adjustMaskBand(delta: number): void;
1491
+ setMaskY(y: number): void;
1492
+ reset(): void;
1493
+ announce(msg: string): void;
1494
+ /** Current UI locale inferred from `<html lang>`. */
1495
+ get locale(): 'ar' | 'en';
1496
+ /**
1497
+ * Toggle AR/EN on `<html>` (`lang` / `dir` / `data-locale`).
1498
+ * Compatible with DgaLocaleService attribute contract.
1499
+ */
1500
+ toggleLocale(): 'ar' | 'en';
1501
+ activeModeCount(section: 'modes' | 'readable' | 'visual'): number;
1502
+ private applyBundleExtras;
1503
+ /** Primitive left on by direct toggle (not only via a bundle). */
1504
+ private userKeptPrimitive;
1505
+ private syncDerived;
1506
+ /** Lazily inject OpenDyslexic (Latin). Arabic falls through to Readex Pro. */
1507
+ private ensureDyslexiaFont;
1508
+ private applyToDocument;
1509
+ private persist;
1510
+ private hydrate;
1511
+ private bindOsPreferences;
1512
+ private ensureLiveRegion;
1513
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccessibilityService, never>;
1514
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DgaAccessibilityService>;
1515
+ }
1516
+
1517
+ type DgaAccessibilityPosition = 'end' | 'start' | 'left' | 'right';
1518
+ type SectionId = 'modes' | 'readable' | 'visual';
1519
+ type SectionOpen = SectionId | null;
1520
+ declare class DgaAccessibility {
1521
+ readonly a11y: DgaAccessibilityService;
1522
+ readonly position: _angular_core.InputSignal<DgaAccessibilityPosition>;
1523
+ readonly panelId = "dga-accessibility-panel";
1524
+ private readonly panelRef;
1525
+ readonly sectionOpen: _angular_core.WritableSignal<SectionOpen>;
1526
+ readonly resetArmed: _angular_core.WritableSignal<boolean>;
1527
+ readonly liveMsg: _angular_core.WritableSignal<string>;
1528
+ private resetTimer;
1529
+ private draggingMask;
1530
+ readonly copy: _angular_core.Signal<{
1531
+ open: string;
1532
+ close: string;
1533
+ panelLabel: string;
1534
+ title: string;
1535
+ sectionModes: string;
1536
+ sectionReadable: string;
1537
+ sectionVisual: string;
1538
+ langToggle: string;
1539
+ reset: string;
1540
+ resetConfirm: string;
1541
+ announcedReset: string;
1542
+ fontSize: string;
1543
+ dyslexia: string;
1544
+ highlightTitles: string;
1545
+ highlightLinks: string;
1546
+ readingMask: string;
1547
+ reduceMotion: string;
1548
+ textAlign: string;
1549
+ lineHeight: string;
1550
+ letterSpacing: string;
1551
+ wordSpacing: string;
1552
+ filterBoost: string;
1553
+ filterMono: string;
1554
+ filterHigh: string;
1555
+ filterHighSat: string;
1556
+ filterLowSat: string;
1557
+ filterDeutan: string;
1558
+ maskToolbar: string;
1559
+ maskSmaller: string;
1560
+ maskLarger: string;
1561
+ maskDrag: string;
1562
+ maskClose: string;
1563
+ stateOn: string;
1564
+ stateOff: string;
1565
+ defaultValue: string;
1566
+ fontLevels: string[];
1567
+ alignLevels: string[];
1568
+ lineLevels: string[];
1569
+ letterLevels: string[];
1570
+ wordLevels: string[];
1571
+ bundles: {
1572
+ 'epilepsy-safe': {
1573
+ label: string;
1574
+ desc: string;
1575
+ };
1576
+ 'visually-impaired': {
1577
+ label: string;
1578
+ desc: string;
1579
+ };
1580
+ 'cognitive-disability': {
1581
+ label: string;
1582
+ desc: string;
1583
+ };
1584
+ 'motor-impaired': {
1585
+ label: string;
1586
+ desc: string;
1587
+ };
1588
+ colorblind: {
1589
+ label: string;
1590
+ desc: string;
1591
+ };
1592
+ 'dyslexia-friendly': {
1593
+ label: string;
1594
+ desc: string;
1595
+ };
1596
+ 'adhd-friendly': {
1597
+ label: string;
1598
+ desc: string;
1599
+ };
1600
+ };
1601
+ }>;
1602
+ readonly bundles: _angular_core.Signal<{
1603
+ id: DgaA11yBundle;
1604
+ icon: DgaIconName;
1605
+ label: string;
1606
+ desc: string;
1607
+ }[]>;
1608
+ readonly readableTiles: _angular_core.Signal<{
1609
+ id: string;
1610
+ icon: DgaIconName;
1611
+ label: string;
1612
+ kind: "cycle" | "toggle";
1613
+ active: boolean;
1614
+ level: number;
1615
+ valueLabel: string;
1616
+ ariaLabel: string;
1617
+ onClick: () => void;
1618
+ }[]>;
1619
+ readonly visualTiles: _angular_core.Signal<{
1620
+ value: DgaA11yVisualFilter;
1621
+ label: string;
1622
+ icon: DgaIconName;
1623
+ active: boolean;
1624
+ }[]>;
1625
+ readonly fabClasses: _angular_core.Signal<string>;
1626
+ readonly panelClasses: _angular_core.Signal<string>;
1627
+ constructor();
1628
+ onKeydown(event: KeyboardEvent): void;
1629
+ onPointerMove(event: PointerEvent): void;
1630
+ onPointerUp(): void;
1631
+ onFabClick(event: MouseEvent): void;
1632
+ toggleSection(id: SectionId): void;
1633
+ onBundle(id: DgaA11yBundle, enabled: boolean): void;
1634
+ onToggleMode(mode: DgaA11yMode): void;
1635
+ onFilter(value: DgaA11yVisualFilter): void;
1636
+ onLocale(): void;
1637
+ onReset(): void;
1638
+ onMaskDragStart(event: PointerEvent): void;
1639
+ tileClasses(active: boolean): string;
1640
+ private panelPositionClass;
1641
+ private announce;
1642
+ private onMaskKeys;
1643
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccessibility, never>;
1644
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccessibility, "dga-accessibility", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1645
+ }
1646
+
1647
+ /**
1648
+ * Visually hidden until focused — first tab stop for keyboard users.
1649
+ * Place near the top of the document; `href` should target main content id.
1650
+ */
1651
+ declare class DgaSkipLink {
1652
+ readonly href: _angular_core.InputSignal<string>;
1653
+ readonly label: _angular_core.InputSignal<string>;
1654
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSkipLink, never>;
1655
+ 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>;
1656
+ }
1657
+
1658
+ declare class DgaAccordionItem {
1659
+ private readonly accordion;
1660
+ readonly title: _angular_core.InputSignal<string>;
1661
+ readonly open: _angular_core.ModelSignal<boolean>;
1662
+ private readonly seq;
1663
+ readonly headerId: string;
1664
+ readonly panelId: string;
1665
+ toggle(): void;
1666
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccordionItem, never>;
1667
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccordionItem, "dga-accordion-item", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
1668
+ }
1669
+
1670
+ declare class DgaAccordion {
1671
+ /** Allow multiple panels open at once. */
1672
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
1673
+ readonly items: _angular_core.Signal<readonly DgaAccordionItem[]>;
1674
+ onItemOpen(item: DgaAccordionItem): void;
1675
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccordion, never>;
1676
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccordion, "dga-accordion", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
1677
+ }
1678
+
1679
+ interface DgaBreadcrumbItem {
1680
+ label: string;
1681
+ href?: string;
1682
+ }
1683
+ type DgaBreadcrumbSeparator = 'chevron' | 'slash';
1684
+ declare class DgaBreadcrumb {
1685
+ readonly items: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
1686
+ readonly label: _angular_core.InputSignal<string>;
1687
+ readonly separator: _angular_core.InputSignal<DgaBreadcrumbSeparator>;
1688
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaBreadcrumb, never>;
1689
+ 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; }; }, {}, never, never, true, never>;
1690
+ }
1691
+
1692
+ declare class DgaPagination {
1693
+ readonly pageInput: _angular_core.InputSignal<number>;
1694
+ readonly page: _angular_core.WritableSignal<number>;
1695
+ readonly totalPages: _angular_core.InputSignal<number>;
1696
+ readonly label: _angular_core.InputSignal<string>;
1697
+ readonly prevLabel: _angular_core.InputSignal<string>;
1698
+ readonly nextLabel: _angular_core.InputSignal<string>;
1699
+ readonly pageChange: _angular_core.OutputEmitterRef<number>;
1700
+ readonly pages: _angular_core.Signal<(number | "…")[]>;
1701
+ btnClass(active: boolean): string;
1702
+ go(next: number): void;
1703
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPagination, never>;
1704
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPagination, "dga-pagination", never, { "pageInput": { "alias": "page"; "required": false; "isSignal": true; }; "totalPages": { "alias": "totalPages"; "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; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
1705
+ }
1706
+
1707
+ declare class DgaTab {
1708
+ private readonly tabs;
1709
+ readonly value: _angular_core.InputSignal<string>;
1710
+ readonly label: _angular_core.InputSignal<string>;
1711
+ readonly seq: number;
1712
+ readonly tabId: string;
1713
+ readonly panelId: string;
1714
+ readonly active: _angular_core.Signal<boolean>;
1715
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTab, never>;
1716
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTab, "dga-tab", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1717
+ }
1718
+
1719
+ declare class DgaTabs {
1720
+ private readonly host;
1721
+ readonly selected: _angular_core.ModelSignal<string>;
1722
+ readonly label: _angular_core.InputSignal<string>;
1723
+ readonly tabs: _angular_core.Signal<readonly DgaTab[]>;
1724
+ constructor();
1725
+ tabButtonClass(value: string): string;
1726
+ select(value: string): void;
1727
+ onTablistKey(event: KeyboardEvent): void;
1728
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTabs, never>;
1729
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTabs, "dga-tabs", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; }, ["tabs"], ["*"], true, never>;
1730
+ }
1731
+
1732
+ interface DgaStep {
1733
+ label: string;
1734
+ description?: string;
1735
+ }
1736
+ declare class DgaStepper {
1737
+ readonly steps: _angular_core.InputSignal<DgaStep[]>;
1738
+ readonly active: _angular_core.ModelSignal<number>;
1739
+ readonly label: _angular_core.InputSignal<string>;
1740
+ stepButtonClasses(index: number): string;
1741
+ indicatorClasses(index: number): string;
1742
+ go(index: number): void;
1743
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaStepper, never>;
1744
+ 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>;
1745
+ }
1746
+
1747
+ interface DgaTocItem {
1748
+ id: string;
1749
+ label: string;
1750
+ level?: number;
1751
+ }
1752
+ declare class DgaToc {
1753
+ readonly items: _angular_core.InputSignal<DgaTocItem[]>;
1754
+ readonly activeId: _angular_core.ModelSignal<string>;
1755
+ readonly label: _angular_core.InputSignal<string>;
1756
+ readonly navigate: _angular_core.OutputEmitterRef<string>;
1757
+ itemClasses(item: DgaTocItem): string;
1758
+ onNavigate(item: DgaTocItem, event: MouseEvent): void;
1759
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaToc, never>;
1760
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaToc, "dga-toc", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "activeId": "activeIdChange"; "navigate": "navigate"; }, never, never, true, never>;
1761
+ }
1762
+
1763
+ interface DgaSideNavItem {
1764
+ label: string;
1765
+ value: string;
1766
+ icon?: string;
1767
+ }
1768
+ /**
1769
+ * Side navigation.
1770
+ * Below `lg`: horizontal scroll rail (mobile-friendly).
1771
+ * From `lg`: vertical sidebar (optional collapse to icons).
1772
+ */
1773
+ declare class DgaSideNav {
1774
+ readonly items: _angular_core.InputSignal<DgaSideNavItem[]>;
1775
+ readonly active: _angular_core.ModelSignal<string>;
1776
+ readonly collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1777
+ readonly label: _angular_core.InputSignal<string>;
1778
+ readonly toggleLabel: _angular_core.InputSignal<string>;
1779
+ readonly select: _angular_core.OutputEmitterRef<DgaSideNavItem>;
1780
+ readonly narrow: _angular_core.ModelSignal<boolean>;
1781
+ itemClasses(value: string): string;
1782
+ toggleNarrow(): void;
1783
+ onSelect(item: DgaSideNavItem): void;
1784
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSideNav, never>;
1785
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSideNav, "dga-side-nav", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "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>;
1786
+ }
1787
+
1788
+ interface DgaFilterItem {
1789
+ id: string;
1790
+ label: string;
1791
+ }
1792
+ declare class DgaFilterBar {
1793
+ readonly filters: _angular_core.InputSignal<DgaFilterItem[]>;
1794
+ readonly activeIds: _angular_core.ModelSignal<string[]>;
1795
+ readonly label: _angular_core.InputSignal<string>;
1796
+ readonly clearLabel: _angular_core.InputSignal<string>;
1797
+ readonly activeSet: _angular_core.Signal<Set<string>>;
1798
+ isActive(id: string): boolean;
1799
+ chipClass(active: boolean): string;
1800
+ toggle(id: string): void;
1801
+ clearAll(): void;
1802
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFilterBar, never>;
1803
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaFilterBar, "dga-filter-bar", never, { "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "activeIds": { "alias": "activeIds"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; }, { "activeIds": "activeIdsChange"; }, never, never, true, never>;
1804
+ }
1805
+
1806
+ declare class DgaToolbar {
1807
+ readonly label: _angular_core.InputSignal<string>;
1808
+ readonly barClasses: _angular_core.Signal<string>;
1809
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaToolbar, never>;
1810
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaToolbar, "dga-toolbar", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[dgaToolbarEnd]"], true, never>;
1811
+ }
1812
+
1813
+ type DgaScrollTopPosition = 'end' | 'start' | 'left' | 'right';
1814
+ /**
1815
+ * Floating “back to top” control. Shows after the page scrolls past `threshold`,
1816
+ * then smoothly scrolls the window (or a custom container) to the top.
1817
+ *
1818
+ * Place once near the app root. When used beside `dga-accessibility`, keep
1819
+ * `clearFab` true (default) so this button sits above the a11y FAB.
1820
+ */
1821
+ declare class DgaScrollTop {
1822
+ private readonly destroyRef;
1823
+ /** Show after this many pixels of scroll. */
1824
+ readonly threshold: _angular_core.InputSignalWithTransform<number, unknown>;
1825
+ /** FAB corner. `end` / `start` follow reading direction. */
1826
+ readonly position: _angular_core.InputSignal<DgaScrollTopPosition>;
1827
+ /** Accessible name. */
1828
+ readonly label: _angular_core.InputSignal<string>;
1829
+ /** Use smooth scrolling when supported. */
1830
+ readonly smooth: _angular_core.InputSignalWithTransform<boolean, unknown>;
1831
+ /**
1832
+ * Lift the button above a typical `dga-accessibility` FAB
1833
+ * (56px + edge margin + gap).
1834
+ */
1835
+ readonly clearFab: _angular_core.InputSignalWithTransform<boolean, unknown>;
1836
+ readonly visible: _angular_core.WritableSignal<boolean>;
1837
+ private ticking;
1838
+ private readonly onScroll;
1839
+ readonly btnClasses: _angular_core.Signal<string>;
1840
+ constructor();
1841
+ onResize(): void;
1842
+ scrollToTop(): void;
1843
+ private syncVisibility;
1844
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaScrollTop, never>;
1845
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaScrollTop, "dga-scroll-top", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "clearFab": { "alias": "clearFab"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1846
+ }
1847
+
1848
+ /** Maps official card surface: stroke / elevation / fill. */
1849
+ type DgaCardAppearance = 'outline' | 'elevated' | 'filled';
1850
+ type DgaCardPadding = 'sm' | 'md' | 'lg' | 'xl' | 'panel';
1851
+ /** Independent shadow control (overrides appearance default when set). */
1852
+ type DgaCardShadow = 'none' | 'sm' | 'md';
1853
+ /** Independent border control. */
1854
+ type DgaCardBorder = 'none' | 'default';
1855
+ type DgaCardActionsAlign = 'start' | 'end' | 'stretch';
1856
+ interface DgaCardBadge {
1857
+ label: string;
1858
+ variant?: DgaBadgeVariant;
1859
+ }
1860
+ /**
1861
+ * Unified portal / service card.
1862
+ *
1863
+ * Declarative slots: logo (icon), title, description, badges, primary +
1864
+ * secondary outline actions - plus independent `border` / `shadow`.
1865
+ * Content projection (`dgaCardMedia` / `dgaCardLead` / default / `dgaCardActions`)
1866
+ * still works for custom layouts (news media, help meta rows, etc.).
1867
+ *
1868
+ * @example
1869
+ * ```html
1870
+ * <dga-card
1871
+ * icon="badgeCheck"
1872
+ * title="Identity Verification"
1873
+ * description="Verify your national identity…"
1874
+ * [badges]="[{ label: 'Identity', variant: 'info' }, { label: 'Most Used', variant: 'success' }]"
1875
+ * secondaryLabel="Details"
1876
+ * secondaryHref="#details"
1877
+ * primaryLabel="Get Started"
1878
+ * primaryHref="#start"
1879
+ * border="default"
1880
+ * shadow="none"
1881
+ * />
1882
+ * ```
1883
+ */
1884
+ declare class DgaCard {
1885
+ readonly appearance: _angular_core.InputSignal<DgaCardAppearance>;
1886
+ /** Default `md` = 16px (portal home cards). */
1887
+ readonly padding: _angular_core.InputSignal<DgaCardPadding>;
1888
+ /** Border ring. Default follows appearance (`filled` → none). */
1889
+ readonly border: _angular_core.InputSignal<DgaCardBorder>;
1890
+ /**
1891
+ * Shadow. Empty string = appearance default (`elevated` → `md`, else `none`).
1892
+ * Pass `none` | `sm` | `md` to override.
1893
+ */
1894
+ readonly shadow: _angular_core.InputSignal<"" | DgaCardShadow>;
1895
+ readonly title: _angular_core.InputSignal<string>;
1896
+ readonly description: _angular_core.InputSignal<string>;
1897
+ /** Truncate title to one line (service cards). */
1898
+ readonly titleTruncate: _angular_core.InputSignalWithTransform<boolean, unknown>;
1899
+ /** Clamp description lines (0 = no clamp). */
1900
+ readonly descriptionClamp: _angular_core.InputSignal<number>;
1901
+ /** Featured logo icon (renders `dga-icon-badge` unless `[dgaCardLead]` is projected). */
1902
+ readonly icon: _angular_core.InputSignal<DgaIconName | null>;
1903
+ readonly iconSize: _angular_core.InputSignal<DgaIconBadgeSize>;
1904
+ readonly iconAppearance: _angular_core.InputSignal<DgaIconBadgeAppearance>;
1905
+ readonly badges: _angular_core.InputSignal<DgaCardBadge[]>;
1906
+ readonly badgeSize: _angular_core.InputSignal<DgaBadgeSize>;
1907
+ readonly primaryLabel: _angular_core.InputSignal<string>;
1908
+ readonly primaryHref: _angular_core.InputSignal<string>;
1909
+ readonly primaryVariant: _angular_core.InputSignal<DgaButtonVariant>;
1910
+ readonly secondaryLabel: _angular_core.InputSignal<string>;
1911
+ readonly secondaryHref: _angular_core.InputSignal<string>;
1912
+ readonly secondaryVariant: _angular_core.InputSignal<DgaButtonVariant>;
1913
+ readonly actionSize: _angular_core.InputSignal<DgaButtonSize>;
1914
+ readonly actionsAlign: _angular_core.InputSignal<DgaCardActionsAlign>;
1915
+ readonly interactive: _angular_core.InputSignalWithTransform<boolean, unknown>;
1916
+ readonly primaryClick: _angular_core.OutputEmitterRef<Event>;
1917
+ readonly secondaryClick: _angular_core.OutputEmitterRef<Event>;
1918
+ readonly resolvedShadow: _angular_core.Signal<DgaCardShadow>;
1919
+ readonly hasBuiltInActions: _angular_core.Signal<boolean>;
1920
+ readonly isServiceLayout: _angular_core.Signal<boolean>;
1921
+ readonly classes: _angular_core.Signal<string>;
1922
+ readonly bodyClasses: _angular_core.Signal<string>;
1923
+ titleBlockClass(): string;
1924
+ titleClass(): string;
1925
+ descriptionClass(): string;
1926
+ iconGlyphSize(): DgaIconSize;
1927
+ actionsHostClass(): string;
1928
+ builtInActionsClass(): string;
1929
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCard, never>;
1930
+ 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>;
1931
+ }
1932
+
1933
+ /**
1934
+ * Edge-to-edge media rectangle for news / article cards (`[dgaCardMedia]`).
1935
+ */
1936
+ declare class DgaCardMedia {
1937
+ readonly src: _angular_core.InputSignal<string>;
1938
+ readonly alt: _angular_core.InputSignal<string>;
1939
+ /** Aspect ratio utility; default 16/10 portal news cards. */
1940
+ readonly ratio: _angular_core.InputSignal<"video" | "wide" | "square">;
1941
+ readonly classes: _angular_core.Signal<string>;
1942
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCardMedia, never>;
1943
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCardMedia, "dga-card-media", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1944
+ }
1945
+
1946
+ type DgaSectionTone = 'plain' | 'surface' | 'body';
1947
+ type DgaSectionWidth = 'md' | 'wide';
1948
+ declare class DgaSection {
1949
+ readonly title: _angular_core.InputSignal<string>;
1950
+ readonly subtitle: _angular_core.InputSignal<string>;
1951
+ /** Wrap content at container-5xl (gallery sections). Ignored when `width="wide"`. */
1952
+ readonly contained: _angular_core.InputSignalWithTransform<boolean, unknown>;
1953
+ /**
1954
+ * `wide` = portal home (7xl + large pad). Implies contained layout.
1955
+ * `md` = optional `contained` at 5xl.
1956
+ */
1957
+ readonly width: _angular_core.InputSignal<DgaSectionWidth>;
1958
+ readonly tone: _angular_core.InputSignal<DgaSectionTone>;
1959
+ readonly hostClasses: _angular_core.Signal<string>;
1960
+ readonly innerClasses: _angular_core.Signal<string>;
1961
+ readonly headerClasses: _angular_core.Signal<string>;
1962
+ readonly titleClasses: _angular_core.Signal<string>;
1963
+ readonly subtitleClasses: _angular_core.Signal<string>;
1964
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSection, never>;
1965
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSection, "dga-section", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "contained": { "alias": "contained"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaSectionActions]", "*"], true, never>;
1966
+ }
1967
+
1968
+ type DgaGridCols = 1 | 2 | 3 | 4;
1969
+ type DgaGridGap = 'sm' | 'md' | 'lg' | 'xl';
1970
+ declare class DgaGrid {
1971
+ readonly cols: _angular_core.InputSignal<DgaGridCols>;
1972
+ readonly gap: _angular_core.InputSignal<DgaGridGap>;
1973
+ readonly classes: _angular_core.Signal<string>;
1974
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaGrid, never>;
1975
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaGrid, "dga-grid", never, { "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1976
+ }
1977
+
1978
+ declare class DgaClamp {
1979
+ readonly lines: _angular_core.InputSignal<number>;
1980
+ readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1981
+ readonly expanded: _angular_core.WritableSignal<boolean>;
1982
+ readonly lineClampValue: _angular_core.Signal<number | null>;
1983
+ readonly clampClasses: _angular_core.Signal<string>;
1984
+ toggle(): void;
1985
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaClamp, never>;
1986
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaClamp, "dga-clamp", never, { "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1987
+ }
1988
+
1989
+ declare class DgaExpandable {
1990
+ readonly open: _angular_core.ModelSignal<boolean>;
1991
+ /** Collapse trigger text. Prefer `summary`; `title` is accepted as an alias. */
1992
+ readonly summary: _angular_core.InputSignal<string>;
1993
+ readonly title: _angular_core.InputSignal<string | undefined>;
1994
+ private readonly seq;
1995
+ readonly headerId: string;
1996
+ readonly panelId: string;
1997
+ heading(): string;
1998
+ toggle(): void;
1999
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaExpandable, never>;
2000
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaExpandable, "dga-expandable", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "summary": { "alias": "summary"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
2001
+ }
2002
+
2003
+ type DgaHeaderAppearance = 'default' | 'portal';
2004
+ /**
2005
+ * Mobile / narrow navigation chrome (portal header, `md` and below):
2006
+ * - `sheet` - side drawer from the inline-end (burger) edge
2007
+ * - `fullscreen` - full-viewport overlay panel
2008
+ * - `push` - panel expands under the header bar (inline dropdown)
2009
+ */
2010
+ type DgaMobileNavMode = 'sheet' | 'fullscreen' | 'push';
2011
+ /** Panel chrome: compact under trigger, full-bleed mega, or mega + featured lead. */
2012
+ type DgaNavDropdownVariant = 'menu' | 'mega' | 'featured';
2013
+ /** How links are arranged inside the panel. */
2014
+ type DgaNavDropdownLayout = 'list' | 'columns' | 'rows';
2015
+ interface DgaNavLink {
2016
+ label: string;
2017
+ href?: string;
2018
+ description?: string;
2019
+ current?: boolean;
2020
+ }
2021
+ interface DgaNavColumn {
2022
+ title?: string;
2023
+ links: DgaNavLink[];
2024
+ }
2025
+ /** Lead / promo block for `variant: 'featured'`. */
2026
+ interface DgaNavFeatured {
2027
+ title: string;
2028
+ description?: string;
2029
+ href?: string;
2030
+ cta?: string;
2031
+ imageUrl?: string;
2032
+ }
2033
+ interface DgaNavDropdown {
2034
+ /**
2035
+ * Panel width/placement:
2036
+ * - `menu` - compact panel anchored under the trigger (default for simple lists)
2037
+ * - `mega` - full-width under the header
2038
+ * - `featured` - full-width mega with a lead promo column
2039
+ */
2040
+ variant?: DgaNavDropdownVariant;
2041
+ /** Inner arrangement: `list` | `columns` | `rows`. */
2042
+ layout?: DgaNavDropdownLayout;
2043
+ columns?: DgaNavColumn[];
2044
+ links?: DgaNavLink[];
2045
+ featured?: DgaNavFeatured;
2046
+ }
2047
+ interface DgaNavItem {
2048
+ label: string;
2049
+ href?: string;
2050
+ current?: boolean;
2051
+ dropdown?: DgaNavDropdown;
2052
+ }
2053
+ interface DgaHeaderAction {
2054
+ id: string;
2055
+ label: string;
2056
+ icon?: DgaIconName;
2057
+ href?: string;
2058
+ badge?: number;
2059
+ iconOnly?: boolean;
2060
+ }
2061
+ /** Suggestion chip shown under the header search field. */
2062
+ interface DgaHeaderSearchSuggestion {
2063
+ label: string;
2064
+ /** Value written into the query (defaults to `label`). */
2065
+ value?: string;
2066
+ icon?: DgaIconName;
2067
+ }
2068
+ /**
2069
+ * Built-in header search panel (opens from the action whose `id` matches `actionId`).
2070
+ * Pass this to `[search]` to enable the dropdown search experience.
2071
+ */
2072
+ interface DgaHeaderSearchConfig {
2073
+ /** Action id that toggles the panel. Default: `'search'`. */
2074
+ actionId?: string;
2075
+ placeholder?: string;
2076
+ submitLabel?: string;
2077
+ suggestionsLabel?: string;
2078
+ clearLabel?: string;
2079
+ voiceLabel?: string;
2080
+ /** Show microphone control (uses Web Speech API when available). Default: true. */
2081
+ voice?: boolean;
2082
+ suggestions?: DgaHeaderSearchSuggestion[];
2083
+ /**
2084
+ * Optional results URL. On submit, navigates to
2085
+ * `{resultsHref}?{queryParam}={query}` when set.
2086
+ */
2087
+ resultsHref?: string;
2088
+ /** Query string key. Default: `'q'`. */
2089
+ queryParam?: string;
2090
+ }
2091
+ type DgaHeaderNotificationTone = DgaBadgeVariant;
2092
+ /** Single item in the header notifications panel. */
2093
+ interface DgaHeaderNotification {
2094
+ id: string;
2095
+ title: string;
2096
+ message: string;
2097
+ statusLabel?: string;
2098
+ tone?: DgaHeaderNotificationTone;
2099
+ icon?: DgaIconName;
2100
+ href?: string;
2101
+ read?: boolean;
2102
+ }
2103
+ /**
2104
+ * Built-in notifications dropdown for the action whose `id` matches `actionId`
2105
+ * (default `'notifications'`).
2106
+ */
2107
+ interface DgaHeaderNotificationsConfig {
2108
+ actionId?: string;
2109
+ /** Panel heading. Default: `'Notifications'`. */
2110
+ title?: string;
2111
+ emptyLabel?: string;
2112
+ viewAllLabel?: string;
2113
+ viewAllHref?: string;
2114
+ markReadLabel?: string;
2115
+ markAllReadLabel?: string;
2116
+ viewLabel?: string;
2117
+ dismissLabel?: string;
2118
+ closeLabel?: string;
2119
+ items?: DgaHeaderNotification[];
2120
+ }
2121
+ type DgaHeaderNotificationAction = 'read' | 'view' | 'dismiss' | 'select';
2122
+ /** Guest login form opened from the login action. */
2123
+ interface DgaHeaderLoginConfig {
2124
+ actionId?: string;
2125
+ title?: string;
2126
+ description?: string;
2127
+ emailLabel?: string;
2128
+ emailPlaceholder?: string;
2129
+ emailHint?: string;
2130
+ passwordLabel?: string;
2131
+ passwordPlaceholder?: string;
2132
+ passwordHint?: string;
2133
+ submitLabel?: string;
2134
+ cancelLabel?: string;
2135
+ closeLabel?: string;
2136
+ forgotPasswordLabel?: string;
2137
+ forgotPasswordHref?: string;
2138
+ showPasswordLabel?: string;
2139
+ hidePasswordLabel?: string;
2140
+ }
2141
+ interface DgaHeaderUserMenuLink {
2142
+ id: string;
2143
+ label: string;
2144
+ href?: string;
2145
+ icon?: DgaIconName;
2146
+ danger?: boolean;
2147
+ }
2148
+ /** Authenticated user menu shown after login (same action id as login). */
2149
+ interface DgaHeaderUserConfig {
2150
+ name: string;
2151
+ role?: string;
2152
+ email?: string;
2153
+ avatarSrc?: string;
2154
+ links?: DgaHeaderUserMenuLink[];
2155
+ }
2156
+ declare class DgaHeader {
2157
+ private readonly host;
2158
+ private closeTimer;
2159
+ private dropdownSyncFrame;
2160
+ private lastDropdownStyleKey;
2161
+ readonly collapseId = "dga-nav-collapse";
2162
+ readonly dropLink: string;
2163
+ readonly dropTile: string;
2164
+ readonly mobileLink: string;
2165
+ readonly brand: _angular_core.InputSignal<string>;
2166
+ readonly brandSlogan: _angular_core.InputSignal<string>;
2167
+ readonly brandLogo: _angular_core.InputSignal<string>;
2168
+ readonly brandLogoAlt: _angular_core.InputSignal<string>;
2169
+ /** When true and no `brandLogo`, portal headers show a home-icon placeholder beside the brand text. */
2170
+ readonly brandPlaceholder: _angular_core.InputSignalWithTransform<boolean, unknown>;
2171
+ readonly brandHref: _angular_core.InputSignal<string>;
2172
+ readonly navLabel: _angular_core.InputSignal<string>;
2173
+ readonly menuToggleLabel: _angular_core.InputSignal<string>;
2174
+ readonly menuCloseLabel: _angular_core.InputSignal<string>;
2175
+ readonly appearance: _angular_core.InputSignal<DgaHeaderAppearance>;
2176
+ /**
2177
+ * Portal mobile navigation layout. Ignored for `appearance="default"`.
2178
+ * - `sheet` - side drawer (narrow, page peeks beside)
2179
+ * - `fullscreen` - covers the whole screen with its own close control
2180
+ * - `push` - accordion panel under the header
2181
+ */
2182
+ readonly mobileNav: _angular_core.InputSignal<DgaMobileNavMode>;
2183
+ readonly sticky: _angular_core.InputSignalWithTransform<boolean, unknown>;
2184
+ readonly items: _angular_core.InputSignal<DgaNavItem[]>;
2185
+ readonly actions: _angular_core.InputSignal<DgaHeaderAction[]>;
2186
+ /**
2187
+ * When set, the header action matching `search.actionId` (default `'search'`)
2188
+ * opens a full-width search panel with suggestions instead of a no-op click.
2189
+ */
2190
+ readonly search: _angular_core.InputSignal<DgaHeaderSearchConfig | null>;
2191
+ /** Bound query for the header search panel. */
2192
+ readonly searchQuery: _angular_core.ModelSignal<string>;
2193
+ /**
2194
+ * When set, the header action matching `notifications.actionId`
2195
+ * (default `'notifications'`) opens the notifications dropdown.
2196
+ */
2197
+ readonly notifications: _angular_core.InputSignal<DgaHeaderNotificationsConfig | null>;
2198
+ /**
2199
+ * Guest login panel config. Opens from the action matching `login.actionId`
2200
+ * (default `'login'`). After auth, the same action opens the user menu.
2201
+ */
2202
+ readonly login: _angular_core.InputSignal<DgaHeaderLoginConfig | null>;
2203
+ /** Authenticated user profile shown in the account menu. */
2204
+ readonly user: _angular_core.InputSignal<DgaHeaderUserConfig | null>;
2205
+ /** Whether the user is signed in (two-way). */
2206
+ readonly authenticated: _angular_core.ModelSignal<boolean>;
2207
+ readonly actionClick: _angular_core.OutputEmitterRef<DgaHeaderAction>;
2208
+ readonly searchSubmit: _angular_core.OutputEmitterRef<string>;
2209
+ readonly searchSuggestionSelect: _angular_core.OutputEmitterRef<DgaHeaderSearchSuggestion>;
2210
+ readonly searchVoice: _angular_core.OutputEmitterRef<void>;
2211
+ readonly notificationAction: _angular_core.OutputEmitterRef<{
2212
+ item: DgaHeaderNotification;
2213
+ action: DgaHeaderNotificationAction;
2214
+ }>;
2215
+ readonly loginSubmit: _angular_core.OutputEmitterRef<{
2216
+ email: string;
2217
+ password: string;
2218
+ }>;
2219
+ readonly logout: _angular_core.OutputEmitterRef<void>;
2220
+ readonly userLinkClick: _angular_core.OutputEmitterRef<DgaHeaderUserMenuLink>;
2221
+ readonly mobileOpen: _angular_core.WritableSignal<boolean>;
2222
+ readonly openDropdown: _angular_core.WritableSignal<number | null>;
2223
+ readonly searchOpen: _angular_core.WritableSignal<boolean>;
2224
+ readonly notificationsOpen: _angular_core.WritableSignal<boolean>;
2225
+ readonly loginOpen: _angular_core.WritableSignal<boolean>;
2226
+ readonly userMenuOpen: _angular_core.WritableSignal<boolean>;
2227
+ readonly voiceListening: _angular_core.WritableSignal<boolean>;
2228
+ readonly expandedNotificationId: _angular_core.WritableSignal<string | null>;
2229
+ readonly loginEmail: _angular_core.WritableSignal<string>;
2230
+ readonly loginPassword: _angular_core.WritableSignal<string>;
2231
+ readonly showLoginPassword: _angular_core.WritableSignal<boolean>;
2232
+ readonly loginSubmitting: _angular_core.WritableSignal<boolean>;
2233
+ /** Fixed coords for notifications / login / user panels (anchored to trigger). */
2234
+ readonly dropdownPanelStyle: _angular_core.WritableSignal<Record<string, string>>;
2235
+ private readonly dismissedNotificationIds;
2236
+ private readonly readNotificationIds;
2237
+ private dropdownTrigger;
2238
+ private dropdownActionId;
2239
+ private readonly injector;
2240
+ private readonly searchInputRef;
2241
+ readonly searchPanelId = "dga-header-search-panel";
2242
+ readonly notificationsPanelId = "dga-header-notifications-panel";
2243
+ readonly loginPanelId = "dga-header-login-panel";
2244
+ readonly userPanelId = "dga-header-user-panel";
2245
+ readonly isPortal: _angular_core.Signal<boolean>;
2246
+ readonly searchConfig: _angular_core.Signal<DgaHeaderSearchConfig | null>;
2247
+ readonly searchActionId: _angular_core.Signal<string>;
2248
+ readonly notificationsConfig: _angular_core.Signal<DgaHeaderNotificationsConfig | null>;
2249
+ readonly notificationsActionId: _angular_core.Signal<string>;
2250
+ readonly loginConfig: _angular_core.Signal<DgaHeaderLoginConfig | null>;
2251
+ readonly loginActionId: _angular_core.Signal<string>;
2252
+ readonly userConfig: _angular_core.Signal<DgaHeaderUserConfig | null>;
2253
+ readonly utilityOverlayOpen: _angular_core.Signal<boolean>;
2254
+ readonly visibleNotifications: _angular_core.Signal<{
2255
+ read: boolean;
2256
+ id: string;
2257
+ title: string;
2258
+ message: string;
2259
+ statusLabel?: string;
2260
+ tone?: DgaHeaderNotificationTone;
2261
+ icon?: DgaIconName;
2262
+ href?: string;
2263
+ }[]>;
2264
+ readonly unreadNotificationCount: _angular_core.Signal<number>;
2265
+ constructor();
2266
+ /** Compact under-trigger menus are rendered inside the `<li>` (desktop only). */
2267
+ readonly activeWideDropdown: _angular_core.Signal<{
2268
+ index: number;
2269
+ item: DgaNavItem;
2270
+ variant: "mega" | "featured";
2271
+ } | null>;
2272
+ readonly hostClasses: _angular_core.Signal<string>;
2273
+ readonly innerClasses: _angular_core.Signal<string>;
2274
+ readonly desktopNavClasses: _angular_core.Signal<string>;
2275
+ readonly actionsClasses: _angular_core.Signal<string>;
2276
+ mobilePanelClass(): string;
2277
+ hoverMenus(): boolean;
2278
+ isMobileViewport(): boolean;
2279
+ resolveVariant(item: DgaNavItem): DgaNavDropdownVariant;
2280
+ resolveLayout(item: DgaNavItem): DgaNavDropdownLayout;
2281
+ colCount(item: DgaNavItem): number;
2282
+ flatLinks(item: DgaNavItem): DgaNavLink[];
2283
+ columnsGridClass(count: number): string;
2284
+ featuredGridClass(variant: DgaNavDropdownVariant, hasFeatured: boolean): string;
2285
+ navItemClass(current: boolean, open?: boolean): string;
2286
+ mobileItemClass(current: boolean, open?: boolean): string;
2287
+ indicatorClass(active: boolean): string;
2288
+ actionClass(_action: DgaHeaderAction): string;
2289
+ badgeClass(): string;
2290
+ isIconOnly(action: DgaHeaderAction): boolean;
2291
+ isSearchAction(action: DgaHeaderAction): boolean;
2292
+ isNotificationsAction(action: DgaHeaderAction): boolean;
2293
+ isLoginAction(action: DgaHeaderAction): boolean;
2294
+ actionTooltip(action: DgaHeaderAction): string;
2295
+ actionAriaLabel(action: DgaHeaderAction): string;
2296
+ actionExpanded(action: DgaHeaderAction): boolean | null;
2297
+ actionControls(action: DgaHeaderAction): string | null;
2298
+ actionIndicatorActive(action: DgaHeaderAction): boolean;
2299
+ private clearCloseTimer;
2300
+ private scheduleClose;
2301
+ private setBodyScrollLocked;
2302
+ private unlockBodyIfIdle;
2303
+ onItemEnter(i: number): void;
2304
+ onPanelEnter(): void;
2305
+ onHostLeave(event: MouseEvent): void;
2306
+ toggleMobile(): void;
2307
+ toggleDropdown(i: number, event: Event): void;
2308
+ closeAll(): void;
2309
+ onAction(action: DgaHeaderAction, event?: Event): void;
2310
+ onMobileAction(action: DgaHeaderAction, event?: Event): void;
2311
+ closeUtilityOverlays(): void;
2312
+ toggleSearch(): void;
2313
+ closeSearch(clearVoice?: boolean): void;
2314
+ toggleNotifications(trigger?: HTMLElement | null): void;
2315
+ closeNotifications(): void;
2316
+ toggleLogin(trigger?: HTMLElement | null): void;
2317
+ closeLogin(): void;
2318
+ toggleUserMenu(trigger?: HTMLElement | null): void;
2319
+ closeUserMenu(): void;
2320
+ onLoginSubmit(event: Event): void;
2321
+ onUserLink(link: DgaHeaderUserMenuLink): void;
2322
+ toggleNotificationExpand(item: DgaHeaderNotification): void;
2323
+ onNotificationAction(item: DgaHeaderNotification, action: DgaHeaderNotificationAction): void;
2324
+ markAllNotificationsRead(): void;
2325
+ clearSearchQuery(): void;
2326
+ applySearchSuggestion(item: DgaHeaderSearchSuggestion): void;
2327
+ onSearchFormSubmit(event: Event): void;
2328
+ onSearchVoice(): void;
2329
+ private speechRecognition;
2330
+ private stopVoice;
2331
+ private triggerFromEvent;
2332
+ private scheduleDropdownSync;
2333
+ private requestDropdownSync;
2334
+ private clearDropdownAnchor;
2335
+ private findActionTrigger;
2336
+ private syncDropdownPanel;
2337
+ onKey(event: KeyboardEvent): void;
2338
+ onScroll(): void;
2339
+ onResize(): void;
2340
+ onDocClick(event: MouseEvent): void;
2341
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaHeader, never>;
2342
+ 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"; }, never, ["[dgaHeaderBrand]", "*", "[dgaHeaderEnd]"], true, never>;
2343
+ }
2344
+
2345
+ interface DgaStampNotice {
2346
+ title: string;
2347
+ /** Substring of `title` rendered bold in the primary color (e.g. `gov.sa`). */
2348
+ highlight?: string;
2349
+ body: string;
2350
+ icon: 'link' | 'lock' | 'info';
2351
+ }
2352
+ type DgaCalendar = 'hijri' | 'gregorian';
2353
+ type DgaTimeFormat = '12' | '24';
2354
+ /**
2355
+ * Exact shell size: 40px tall, sunken fill, 14px stamp copy.
2356
+ * Expand panel uses grid-template-rows for a smooth open/close.
2357
+ * Optional date + live clock sit in the end cluster (Hijri ↔ Gregorian).
2358
+ */
2359
+ declare class DgaTopBar implements OnInit {
2360
+ private readonly destroyRef;
2361
+ readonly saFlagSrc: string;
2362
+ readonly panelId = "dga-digital-stamp";
2363
+ readonly open: _angular_core.ModelSignal<boolean>;
2364
+ /** Active calendar for the date widget. Click the date to switch. */
2365
+ readonly calendar: _angular_core.ModelSignal<DgaCalendar>;
2366
+ /** Clock display. Click the time to switch 12h ↔ 24h. */
2367
+ readonly timeFormat: _angular_core.ModelSignal<DgaTimeFormat>;
2368
+ readonly showDate: _angular_core.InputSignal<boolean>;
2369
+ readonly showTime: _angular_core.InputSignal<boolean>;
2370
+ /** `ar` → Arabic labels; `en` → English. */
2371
+ readonly locale: _angular_core.InputSignal<"ar" | "en">;
2372
+ readonly regionLabel: _angular_core.InputSignal<string>;
2373
+ readonly stampLabel: _angular_core.InputSignal<string>;
2374
+ readonly tabTextLg: _angular_core.InputSignal<string>;
2375
+ readonly tabTextSm: _angular_core.InputSignal<string>;
2376
+ readonly verifyText: _angular_core.InputSignal<string>;
2377
+ readonly registrationLabel: _angular_core.InputSignal<string>;
2378
+ /** DGA platform registration / license number shown in the expanded stamp. */
2379
+ readonly registrationId: _angular_core.InputSignal<string>;
2380
+ /**
2381
+ * License page on raqmi.dga.gov.sa (opens in a new tab).
2382
+ * @example https://raqmi.dga.gov.sa/platforms/platforms/…/platform-license
2383
+ */
2384
+ readonly registrationHref: _angular_core.InputSignal<string>;
2385
+ readonly notices: _angular_core.InputSignal<DgaStampNotice[]>;
2386
+ private readonly now;
2387
+ readonly dateLabel: _angular_core.Signal<string>;
2388
+ readonly timeLabel: _angular_core.Signal<string>;
2389
+ readonly calendarToggleLabel: _angular_core.Signal<"التبديل إلى التقويم الميلادي" | "Switch to Gregorian calendar" | "التبديل إلى التقويم الهجري" | "Switch to Hijri calendar">;
2390
+ readonly timeToggleLabel: _angular_core.Signal<"التبديل إلى تنسيق 24 ساعة" | "Switch to 24-hour format" | "التبديل إلى تنسيق 12 ساعة" | "Switch to 12-hour format">;
2391
+ readonly hostClasses: _angular_core.Signal<string>;
2392
+ ngOnInit(): void;
2393
+ private clockTimer;
2394
+ private tick;
2395
+ private scheduleMinuteTick;
2396
+ titleParts(n: DgaStampNotice): {
2397
+ text: string;
2398
+ hl: boolean;
2399
+ }[];
2400
+ toggle(): void;
2401
+ toggleCalendar(): void;
2402
+ toggleTimeFormat(): void;
2403
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTopBar, never>;
2404
+ 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>;
2405
+ }
2406
+
2407
+ type DgaFooterAppearance = 'default' | 'brand';
2408
+ interface DgaFooterLink {
2409
+ label: string;
2410
+ href: string;
2411
+ icon?: DgaIconName;
2412
+ external?: boolean;
2413
+ }
2414
+ interface DgaFooterColumn {
2415
+ title: string;
2416
+ links: DgaFooterLink[];
2417
+ }
2418
+ interface DgaFooterIconLink {
2419
+ /** Accessible name for the icon-only control. */
2420
+ label: string;
2421
+ href: string;
2422
+ icon: DgaIconName;
2423
+ external?: boolean;
2424
+ }
2425
+ interface DgaFooterIconGroup {
2426
+ title: string;
2427
+ links: DgaFooterIconLink[];
2428
+ }
2429
+ interface DgaFooterLogo {
2430
+ href: string;
2431
+ src: string;
2432
+ alt: string;
2433
+ width?: number;
2434
+ height?: number;
2435
+ external?: boolean;
2436
+ }
2437
+ declare class DgaFooter {
2438
+ readonly brand: _angular_core.InputSignal<string>;
2439
+ readonly title: _angular_core.InputSignal<string>;
2440
+ readonly links: _angular_core.InputSignal<DgaFooterLink[]>;
2441
+ readonly columns: _angular_core.InputSignal<DgaFooterColumn[]>;
2442
+ /** Social and app-store icon groups. */
2443
+ readonly iconGroups: _angular_core.InputSignal<DgaFooterIconGroup[]>;
2444
+ /** Utility links shown above the copyright row. */
2445
+ readonly bottomLinks: _angular_core.InputSignal<DgaFooterLink[]>;
2446
+ readonly policyLinks: _angular_core.InputSignal<DgaFooterLink[]>;
2447
+ readonly logos: _angular_core.InputSignal<DgaFooterLogo[]>;
2448
+ readonly copyright: _angular_core.InputSignal<string>;
2449
+ readonly meta: _angular_core.InputSignal<string>;
2450
+ /** `brand` = portal shell footer (primary in light, neutral in dark). */
2451
+ readonly appearance: _angular_core.InputSignal<DgaFooterAppearance>;
2452
+ readonly navLabel: _angular_core.InputSignal<string>;
2453
+ readonly ariaLabel: _angular_core.InputSignal<string>;
2454
+ readonly showBottom: _angular_core.Signal<boolean>;
2455
+ readonly hostClass: _angular_core.Signal<string>;
2456
+ readonly headingClass: _angular_core.Signal<string>;
2457
+ readonly textLinkClass: _angular_core.Signal<string>;
2458
+ readonly metaLinkClass: _angular_core.Signal<string>;
2459
+ readonly copyrightClass: _angular_core.Signal<string>;
2460
+ readonly dividerClass: _angular_core.Signal<string>;
2461
+ readonly iconBtnClass: _angular_core.Signal<string>;
2462
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFooter, never>;
2463
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaFooter, "dga-footer", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "links": { "alias": "links"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "iconGroups": { "alias": "iconGroups"; "required": false; "isSignal": true; }; "bottomLinks": { "alias": "bottomLinks"; "required": false; "isSignal": true; }; "policyLinks": { "alias": "policyLinks"; "required": false; "isSignal": true; }; "logos": { "alias": "logos"; "required": false; "isSignal": true; }; "copyright": { "alias": "copyright"; "required": false; "isSignal": true; }; "meta": { "alias": "meta"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "navLabel": { "alias": "navLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaFooterBrand]"], true, never>;
2464
+ }
2465
+
2466
+ /**
2467
+ * `default` / `portal` - original full page headers.
2468
+ * `sub` / `flat` - compact page-header band (breadcrumb + optional float/actions slot).
2469
+ * `aside` - text + side media, two columns.
2470
+ * `brief` - shorter title/description density, same layout as `default`.
2471
+ */
2472
+ type DgaHeroAppearance = 'default' | 'portal' | 'sub' | 'flat' | 'aside' | 'brief';
2473
+ /** Carousel motion between slides. */
2474
+ type DgaHeroTransition = 'fade' | 'push';
2475
+ /** Overlay tint drawn above the hero image. `none` skips the overlay entirely. */
2476
+ type DgaHeroOverlayTone = 'primary' | 'dark' | 'none';
2477
+ /** Decorative edge mask applied to the hero image (CSS mask / clip-path). */
2478
+ type DgaHeroImageMask = 'none' | 'fade' | 'angle' | 'wave';
2479
+ interface DgaHeroSlide {
2480
+ /** Main headline. */
2481
+ title: string;
2482
+ /** Supporting copy - prefer over legacy `subtitle`. */
2483
+ description?: string;
2484
+ /** @deprecated Prefer `description`. */
2485
+ subtitle?: string;
2486
+ /** Primary / main action label. */
2487
+ primaryCta?: string;
2488
+ /** Secondary action label. */
2489
+ secondaryCta?: string;
2490
+ primaryHref?: string;
2491
+ secondaryHref?: string;
2492
+ /** Desktop / large viewport image. Falls back to `imageUrl`. */
2493
+ imageDesktop?: string;
2494
+ /** Mobile image - falls back to desktop. */
2495
+ imageMobile?: string;
2496
+ /** @deprecated Prefer `imageDesktop`. */
2497
+ imageUrl?: string;
2498
+ /** Per-slide overlay tint - falls back to the hero's `imageOverlay` input. */
2499
+ overlay?: DgaHeroOverlayTone;
2500
+ }
2501
+ declare class DgaHero {
2502
+ private readonly destroyRef;
2503
+ private autoplayTimer;
2504
+ private readonly autoplayPaused;
2505
+ /** Skip CSS transitions on first layout so slides don't animate in like a locale wipe. */
2506
+ private readonly motionReady;
2507
+ /** Single-slide API. */
2508
+ readonly title: _angular_core.InputSignal<string>;
2509
+ readonly description: _angular_core.InputSignal<string>;
2510
+ /** @deprecated Prefer `description`. */
2511
+ readonly subtitle: _angular_core.InputSignal<string>;
2512
+ readonly primaryCta: _angular_core.InputSignal<string>;
2513
+ readonly secondaryCta: _angular_core.InputSignal<string>;
2514
+ readonly primaryHref: _angular_core.InputSignal<string>;
2515
+ readonly secondaryHref: _angular_core.InputSignal<string>;
2516
+ readonly imageDesktop: _angular_core.InputSignal<string>;
2517
+ readonly imageMobile: _angular_core.InputSignal<string>;
2518
+ /** @deprecated Prefer `imageDesktop`. */
2519
+ readonly imageUrl: _angular_core.InputSignal<string>;
2520
+ /** Overlay tint drawn above the single (non-carousel) hero image. */
2521
+ readonly imageOverlay: _angular_core.InputSignal<DgaHeroOverlayTone>;
2522
+ /** Decorative edge mask applied to the hero image(s). */
2523
+ readonly imageMaskVariant: _angular_core.InputSignal<DgaHeroImageMask>;
2524
+ /**
2525
+ * Portal carousel slides. When length > 0, each slide supplies its own
2526
+ * title / description / CTAs / images.
2527
+ */
2528
+ readonly slides: _angular_core.InputSignal<DgaHeroSlide[]>;
2529
+ readonly activeIndex: _angular_core.ModelSignal<number>;
2530
+ readonly appearance: _angular_core.InputSignal<DgaHeroAppearance>;
2531
+ /** Carousel motion - default `push`. Also `fade`. */
2532
+ readonly transition: _angular_core.InputSignal<DgaHeroTransition>;
2533
+ readonly autoplay: _angular_core.InputSignalWithTransform<boolean, unknown>;
2534
+ readonly autoplayMs: _angular_core.InputSignal<number>;
2535
+ /** Dot pagination under the carousel. Default `true`. */
2536
+ readonly showDots: _angular_core.InputSignalWithTransform<boolean, unknown>;
2537
+ /** Prev / next arrow controls. Default `false`. */
2538
+ readonly showArrows: _angular_core.InputSignalWithTransform<boolean, unknown>;
2539
+ readonly dotsLabel: _angular_core.InputSignal<string>;
2540
+ readonly prevLabel: _angular_core.InputSignal<string>;
2541
+ readonly nextLabel: _angular_core.InputSignal<string>;
2542
+ readonly primaryClick: _angular_core.OutputEmitterRef<number | void>;
2543
+ readonly secondaryClick: _angular_core.OutputEmitterRef<number | void>;
2544
+ readonly slideChange: _angular_core.OutputEmitterRef<number>;
2545
+ readonly slideCount: _angular_core.Signal<number>;
2546
+ readonly isCarousel: _angular_core.Signal<boolean>;
2547
+ /** Compact page-header band variants (breadcrumb + float/actions slot, no media column). */
2548
+ readonly isCompactBand: _angular_core.Signal<boolean>;
2549
+ readonly slideIndexes: _angular_core.Signal<number[]>;
2550
+ readonly hostClasses: _angular_core.Signal<string>;
2551
+ readonly innerClasses: _angular_core.Signal<string>;
2552
+ readonly titleClasses: _angular_core.Signal<string>;
2553
+ readonly subtitleClasses: _angular_core.Signal<string>;
2554
+ /** Precomputed inline `mask-image` / `clip-path` for the current `imageMaskVariant`. */
2555
+ readonly imageMaskStyle: _angular_core.Signal<Record<string, string>>;
2556
+ constructor();
2557
+ portalCtaVariant(): 'inverse' | 'primary';
2558
+ /** Secondary is always outline - inverse outline on dark portal surfaces. */
2559
+ secondaryCtaVariant(): 'outlineInverse' | 'outline';
2560
+ slideShellClass(i: number): string;
2561
+ clampedIndex(): number;
2562
+ activeTitle(): string;
2563
+ activeDescription(): string;
2564
+ singleDesktopImage(): string;
2565
+ singleMobileImage(): string;
2566
+ slideTitle(slide: DgaHeroSlide): string;
2567
+ slideDescription(slide: DgaHeroSlide): string;
2568
+ slideDesktop(slide: DgaHeroSlide): string;
2569
+ slideMobile(slide: DgaHeroSlide): string;
2570
+ ctaPrimary(slide: DgaHeroSlide): string;
2571
+ ctaSecondary(slide: DgaHeroSlide): string;
2572
+ ctaPrimaryHref(slide: DgaHeroSlide): string;
2573
+ ctaSecondaryHref(slide: DgaHeroSlide): string;
2574
+ dotLabel(i: number): string;
2575
+ dotClass(i: number): string;
2576
+ /** Overlay class for the given tone (falls back to `imageOverlay`); `''` renders no overlay. */
2577
+ overlayClass(tone?: DgaHeroOverlayTone): string;
2578
+ /** Per-slide overlay - falls back to the hero-level `imageOverlay` input. */
2579
+ slideOverlayClass(slide: DgaHeroSlide): string;
2580
+ /** Push direction follows document direction (RTL slides the other way). */
2581
+ pushOffset(i: number): string;
2582
+ goSlide(i: number): void;
2583
+ nextSlide(): void;
2584
+ prevSlide(): void;
2585
+ pauseAutoplay(): void;
2586
+ resumeAutoplay(): void;
2587
+ onPrimary(index?: number): void;
2588
+ onSecondary(index?: number): void;
2589
+ private clearAutoplay;
2590
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaHero, never>;
2591
+ 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>;
2592
+ }
2593
+
2594
+ interface DgaSideInfoItem {
2595
+ label: string;
2596
+ href?: string;
2597
+ value?: string;
2598
+ }
2599
+ declare class DgaSideInfo {
2600
+ readonly title: _angular_core.InputSignal<string>;
2601
+ readonly items: _angular_core.InputSignal<DgaSideInfoItem[]>;
2602
+ readonly active: _angular_core.ModelSignal<string>;
2603
+ readonly label: _angular_core.InputSignal<string>;
2604
+ readonly select: _angular_core.OutputEmitterRef<DgaSideInfoItem>;
2605
+ trackItem(item: DgaSideInfoItem, index: number): string;
2606
+ isActive(item: DgaSideInfoItem): boolean;
2607
+ itemClasses(item: DgaSideInfoItem): string;
2608
+ onSelect(item: DgaSideInfoItem): void;
2609
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSideInfo, never>;
2610
+ 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>;
2611
+ }
2612
+
2613
+ type DgaPreloaderPersist = 'local' | 'session' | 'none';
2614
+ /**
2615
+ * Optional full-screen first-load preloader.
2616
+ *
2617
+ * Brand mark + soft fade exit.
2618
+ * Auto-hides once the document is ready and `minDuration` has elapsed.
2619
+ * By default shows once per visitor (`once` + `persist="local"`); returning visits skip it.
2620
+ * Drop it near the app root - omit the element entirely if unused.
2621
+ *
2622
+ * @example
2623
+ * ```html
2624
+ * <dga-preloader brand="بوابة الخدمات" [minDuration]="1000" />
2625
+ * ```
2626
+ */
2627
+ declare class DgaPreloader implements OnInit {
2628
+ private readonly doc;
2629
+ private readonly destroyRef;
2630
+ /** Brand / product name under the mark. */
2631
+ readonly brand: _angular_core.InputSignal<string>;
2632
+ /** Optional logo image (overrides the default geometric mark). */
2633
+ readonly logoSrc: _angular_core.InputSignal<string | undefined>;
2634
+ /** Accessible status label. */
2635
+ readonly label: _angular_core.InputSignal<string>;
2636
+ /** Minimum time on screen before exit (ms). */
2637
+ readonly minDuration: _angular_core.InputSignal<number>;
2638
+ /** Skip after the first visit (persist in storage). */
2639
+ readonly once: _angular_core.InputSignalWithTransform<boolean, unknown>;
2640
+ /** Storage used when `once` is true. */
2641
+ readonly persist: _angular_core.InputSignal<DgaPreloaderPersist>;
2642
+ /** Storage key for the seen flag. */
2643
+ readonly storageKey: _angular_core.InputSignal<string>;
2644
+ /** Fires after the exit animation finishes and the overlay is removed. */
2645
+ readonly closed: _angular_core.OutputEmitterRef<void>;
2646
+ readonly active: _angular_core.WritableSignal<boolean>;
2647
+ readonly exiting: _angular_core.WritableSignal<boolean>;
2648
+ private startedAt;
2649
+ private ready;
2650
+ private exitArmed;
2651
+ private timers;
2652
+ ngOnInit(): void;
2653
+ /** Force an exit (e.g. from the host after data is ready). */
2654
+ dismiss(): void;
2655
+ onAnimEnd(event: AnimationEvent): void;
2656
+ private watchReady;
2657
+ private tryExit;
2658
+ private finish;
2659
+ private shouldSkip;
2660
+ private markSeen;
2661
+ private lockScroll;
2662
+ private clearTimers;
2663
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPreloader, never>;
2664
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPreloader, "dga-preloader", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "minDuration": { "alias": "minDuration"; "required": false; "isSignal": true; }; "once": { "alias": "once"; "required": false; "isSignal": true; }; "persist": { "alias": "persist"; "required": false; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
2665
+ }
2666
+
2667
+ /**
2668
+ * Partner / logo tile used in portal “قسم الشركاء” carousels.
2669
+ */
2670
+ declare class DgaLogoTile {
2671
+ readonly label: _angular_core.InputSignal<string>;
2672
+ readonly src: _angular_core.InputSignal<string>;
2673
+ readonly classes: _angular_core.Signal<string>;
2674
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaLogoTile, never>;
2675
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaLogoTile, "dga-logo-tile", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2676
+ }
2677
+
2678
+ declare class DgaPersona {
2679
+ readonly name: _angular_core.InputSignal<string>;
2680
+ readonly subtitle: _angular_core.InputSignal<string>;
2681
+ readonly src: _angular_core.InputSignal<string | undefined>;
2682
+ readonly size: _angular_core.InputSignal<DgaAvatarSize>;
2683
+ readonly classes: _angular_core.Signal<string>;
2684
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPersona, never>;
2685
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPersona, "dga-persona", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2686
+ }
2687
+
2688
+ declare class DgaQuote {
2689
+ readonly citation: _angular_core.InputSignal<string>;
2690
+ readonly classes: _angular_core.Signal<string>;
2691
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaQuote, never>;
2692
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaQuote, "dga-quote", never, { "citation": { "alias": "citation"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2693
+ }
2694
+
2695
+ declare class DgaCode {
2696
+ readonly block: _angular_core.InputSignalWithTransform<boolean, unknown>;
2697
+ readonly language: _angular_core.InputSignal<string>;
2698
+ readonly classes: _angular_core.Signal<string>;
2699
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCode, never>;
2700
+ 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>;
2701
+ }
2702
+
2703
+ declare class DgaList {
2704
+ readonly ordered: _angular_core.InputSignalWithTransform<boolean, unknown>;
2705
+ readonly listClasses: _angular_core.Signal<string>;
2706
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaList, never>;
2707
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaList, "dga-list", never, { "ordered": { "alias": "ordered"; "required": false; "isSignal": true; }; }, {}, never, ["*", "*"], true, never>;
2708
+ }
2709
+
2710
+ interface DgaDescriptionItem {
2711
+ term: string;
2712
+ description: string;
2713
+ }
2714
+ type DgaDescriptionLayout = 'table' | 'stacked';
2715
+ declare class DgaDescriptionList {
2716
+ readonly items: _angular_core.InputSignal<DgaDescriptionItem[]>;
2717
+ readonly layout: _angular_core.InputSignal<DgaDescriptionLayout>;
2718
+ readonly listClasses: _angular_core.Signal<string>;
2719
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDescriptionList, never>;
2720
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDescriptionList, "dga-description-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2721
+ }
2722
+
2723
+ type DgaCurrency = 'SAR' | 'USD' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'INR' | 'KRW' | 'TRY';
2724
+ /**
2725
+ * Locale-aware number display with optional currency/unit and scroll-triggered counter.
2726
+ */
2727
+ declare class DgaNumber implements OnInit {
2728
+ private readonly el;
2729
+ private readonly destroyRef;
2730
+ /** Target / display value. Accepts number or string (suffixes like `%` preserved for counters). */
2731
+ readonly value: _angular_core.InputSignal<string | number>;
2732
+ readonly currency: _angular_core.InputSignal<"" | DgaCurrency>;
2733
+ readonly unit: _angular_core.InputSignal<string>;
2734
+ /** Hide currency glyph (e.g. free / مجاني). */
2735
+ readonly free: _angular_core.InputSignalWithTransform<boolean, unknown>;
2736
+ /** Animate from `start` to `value` when scrolled into view. */
2737
+ readonly counter: _angular_core.InputSignalWithTransform<boolean, unknown>;
2738
+ readonly start: _angular_core.InputSignal<number>;
2739
+ readonly duration: _angular_core.InputSignal<number>;
2740
+ readonly decimals: _angular_core.InputSignal<number | null>;
2741
+ readonly display: _angular_core.WritableSignal<string>;
2742
+ readonly animating: _angular_core.WritableSignal<boolean>;
2743
+ private observer;
2744
+ private raf;
2745
+ private animated;
2746
+ readonly currencyPrefix: _angular_core.Signal<string>;
2747
+ readonly valueClasses: _angular_core.Signal<string>;
2748
+ ngOnInit(): void;
2749
+ private setMinWidth;
2750
+ private observe;
2751
+ private animate;
2752
+ private formatStatic;
2753
+ private format;
2754
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNumber, never>;
2755
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNumber, "dga-number", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; "free": { "alias": "free"; "required": false; "isSignal": true; }; "counter": { "alias": "counter"; "required": false; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2756
+ }
2757
+
2758
+ type DgaMetricTrend = 'up' | 'down' | 'neutral';
2759
+ /** `stat` = portal home metrics (icon well, value, label, centered). */
2760
+ type DgaMetricAppearance = 'default' | 'stat';
2761
+ declare class DgaMetric {
2762
+ readonly label: _angular_core.InputSignal<string>;
2763
+ readonly value: _angular_core.InputSignal<string>;
2764
+ readonly delta: _angular_core.InputSignal<string>;
2765
+ readonly trend: _angular_core.InputSignal<DgaMetricTrend>;
2766
+ readonly appearance: _angular_core.InputSignal<DgaMetricAppearance>;
2767
+ readonly hostClasses: _angular_core.Signal<string>;
2768
+ readonly deltaClasses: _angular_core.Signal<string>;
2769
+ trendGlyph(): string;
2770
+ trendLabel(): string;
2771
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaMetric, never>;
2772
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMetric, "dga-metric", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaMetricIcon]"], true, never>;
2773
+ }
2774
+
2775
+ interface DgaTableColumn<T = Record<string, unknown>> {
2776
+ key: string;
2777
+ label: string;
2778
+ sortable?: boolean;
2779
+ }
2780
+ type DgaSortDir = 'asc' | 'desc';
2781
+ type DgaTableDensity = 'comfortable' | 'compact';
2782
+ declare class DgaTable {
2783
+ readonly columns: _angular_core.InputSignal<DgaTableColumn<Record<string, unknown>>[]>;
2784
+ readonly rows: _angular_core.InputSignal<Record<string, unknown>[]>;
2785
+ readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2786
+ readonly idKey: _angular_core.InputSignal<string>;
2787
+ readonly selectedKeys: _angular_core.ModelSignal<string[]>;
2788
+ readonly sortKey: _angular_core.ModelSignal<string>;
2789
+ readonly sortDir: _angular_core.ModelSignal<DgaSortDir>;
2790
+ readonly label: _angular_core.InputSignal<string>;
2791
+ readonly selectAllLabel: _angular_core.InputSignal<string>;
2792
+ readonly emptyLabel: _angular_core.InputSignal<string>;
2793
+ readonly density: _angular_core.InputSignal<DgaTableDensity>;
2794
+ readonly interactive: _angular_core.InputSignalWithTransform<boolean, unknown>;
2795
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
2796
+ readonly stickyHeader: _angular_core.InputSignalWithTransform<boolean, unknown>;
2797
+ readonly hiddenKeys: _angular_core.ModelSignal<string[]>;
2798
+ readonly skeletonRows: number[];
2799
+ private readonly selectAllEl;
2800
+ constructor();
2801
+ readonly visibleColumns: _angular_core.Signal<DgaTableColumn<Record<string, unknown>>[]>;
2802
+ readonly selectPad: _angular_core.Signal<"w-4xl px-lg py-xs" | "w-4xl px-lg py-md">;
2803
+ readonly headerPad: _angular_core.Signal<string>;
2804
+ readonly bodyPad: _angular_core.Signal<string>;
2805
+ readonly rowClasses: _angular_core.Signal<string>;
2806
+ readonly sortedRows: _angular_core.Signal<Record<string, unknown>[]>;
2807
+ readonly allSelected: _angular_core.Signal<boolean>;
2808
+ readonly someSelected: _angular_core.Signal<boolean>;
2809
+ rowKey(row: Record<string, unknown>): string;
2810
+ cellValue(row: Record<string, unknown>, key: string): string;
2811
+ isSelected(row: Record<string, unknown>): boolean;
2812
+ rowSelectLabel(row: Record<string, unknown>): string;
2813
+ selectAllAria(): 'true' | 'false' | 'mixed';
2814
+ emptyColspan(): number;
2815
+ ariaSort(key: string): 'ascending' | 'descending' | 'none' | null;
2816
+ sortGlyph(key: string): string;
2817
+ toggleSort(key: string): void;
2818
+ toggleRow(row: Record<string, unknown>): void;
2819
+ toggleAll(): void;
2820
+ private rowKeys;
2821
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTable, never>;
2822
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTable, "dga-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "idKey": { "alias": "idKey"; "required": false; "isSignal": true; }; "selectedKeys": { "alias": "selectedKeys"; "required": false; "isSignal": true; }; "sortKey": { "alias": "sortKey"; "required": false; "isSignal": true; }; "sortDir": { "alias": "sortDir"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "selectAllLabel": { "alias": "selectAllLabel"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "hiddenKeys": { "alias": "hiddenKeys"; "required": false; "isSignal": true; }; }, { "selectedKeys": "selectedKeysChange"; "sortKey": "sortKeyChange"; "sortDir": "sortDirChange"; "hiddenKeys": "hiddenKeysChange"; }, never, never, true, never>;
2823
+ }
2824
+
2825
+ interface DgaExportColumn {
2826
+ key: string;
2827
+ label: string;
2828
+ }
2829
+ interface DgaExportData {
2830
+ columns: DgaExportColumn[];
2831
+ rows: Record<string, string>[];
2832
+ }
2833
+ declare class DgaExport {
2834
+ private readonly doc;
2835
+ collect(columns: DgaExportColumn[], rows: Array<Record<string, unknown>>): DgaExportData;
2836
+ toCsv(data: DgaExportData): string;
2837
+ toXlsHtml(data: DgaExportData, dir?: 'rtl' | 'ltr'): string;
2838
+ download(data: DgaExportData, format: 'csv' | 'xls', filename?: string): void;
2839
+ openPrint(data: DgaExportData, title?: string): void;
2840
+ csv(data: DgaExportData, filename?: string): void;
2841
+ xls(data: DgaExportData, filename?: string): void;
2842
+ pdf(data: DgaExportData, title?: string): void;
2843
+ private triggerDownload;
2844
+ private csvCell;
2845
+ private guardFormula;
2846
+ private escapeHtml;
2847
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaExport, never>;
2848
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DgaExport>;
2849
+ }
2850
+
2851
+ type DgaExportScope = 'auto' | 'all' | 'selected';
2852
+ declare class DgaExportToolbar {
2853
+ private readonly exporter;
2854
+ readonly columns: _angular_core.InputSignal<DgaExportColumn[]>;
2855
+ readonly rows: _angular_core.InputSignal<Record<string, unknown>[]>;
2856
+ readonly selectedRows: _angular_core.InputSignal<Record<string, unknown>[]>;
2857
+ readonly filename: _angular_core.InputSignal<string>;
2858
+ readonly scope: _angular_core.InputSignal<DgaExportScope>;
2859
+ readonly label: _angular_core.InputSignal<string>;
2860
+ readonly printTitle: _angular_core.InputSignal<string>;
2861
+ private readonly exportData;
2862
+ exportCsv(): void;
2863
+ exportXls(): void;
2864
+ exportPdf(): void;
2865
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaExportToolbar, never>;
2866
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaExportToolbar, "dga-export-toolbar", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "selectedRows": { "alias": "selectedRows"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "scope": { "alias": "scope"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "printTitle": { "alias": "printTitle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2867
+ }
2868
+
2869
+ /** Simple title/body slide used by the gallery demo. */
2870
+ interface DgaCarouselSlide {
2871
+ title: string;
2872
+ body: string;
2873
+ }
2874
+ /**
2875
+ * Marks a projected child as a carousel slide (multi-card mode).
2876
+ * Sizing uses CSS vars set by the parent `dga-carousel` (inherits across projection).
2877
+ */
2878
+ declare class DgaCarouselSlideDirective {
2879
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCarouselSlideDirective, never>;
2880
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaCarouselSlideDirective, "[dgaCarouselSlide]", never, {}, {}, never, never, true, never>;
2881
+ }
2882
+ /**
2883
+ * Multi-item card carousel with content projection,
2884
+ * plus a simple title/body mode when `[slides]` is provided.
2885
+ *
2886
+ * @example Related services
2887
+ * ```html
2888
+ * <dga-carousel [slidesMax]="3" [slidesMid]="2" [slidesMin]="1" [peek]="40">
2889
+ * @for (item of items; track item.id) {
2890
+ * <dga-card dgaCarouselSlide>...</dga-card>
2891
+ * }
2892
+ * </dga-carousel>
2893
+ * ```
2894
+ */
2895
+ declare class DgaCarousel {
2896
+ private readonly destroyRef;
2897
+ private readonly host;
2898
+ private readonly track;
2899
+ private readonly projected;
2900
+ /** Simple title/body slides (gallery). When non-empty, enables simple mode. */
2901
+ readonly slides: _angular_core.InputSignal<DgaCarouselSlide[]>;
2902
+ readonly index: _angular_core.ModelSignal<number>;
2903
+ /** Visible slides at large / medium / small breakpoints (multi mode). */
2904
+ readonly slidesMax: _angular_core.InputSignal<number>;
2905
+ readonly slidesMid: _angular_core.InputSignal<number>;
2906
+ readonly slidesMin: _angular_core.InputSignal<number>;
2907
+ /** Peek of the next slide in px. */
2908
+ readonly peek: _angular_core.InputSignal<number>;
2909
+ /** Gap between slides in px. */
2910
+ readonly gap: _angular_core.InputSignal<number>;
2911
+ readonly label: _angular_core.InputSignal<string>;
2912
+ readonly prevLabel: _angular_core.InputSignal<string>;
2913
+ readonly nextLabel: _angular_core.InputSignal<string>;
2914
+ readonly dotsLabel: _angular_core.InputSignal<string>;
2915
+ readonly emptyLabel: _angular_core.InputSignal<string>;
2916
+ readonly pageIndex: _angular_core.WritableSignal<number>;
2917
+ readonly perView: _angular_core.WritableSignal<number>;
2918
+ private readonly slideCount;
2919
+ readonly isSimple: _angular_core.Signal<boolean>;
2920
+ readonly current: _angular_core.Signal<DgaCarouselSlide | null>;
2921
+ readonly pages: _angular_core.Signal<number[]>;
2922
+ constructor();
2923
+ showControls(): boolean;
2924
+ atStart(): boolean;
2925
+ atEnd(): boolean;
2926
+ textNavClass(): string;
2927
+ iconNavClass(disabled: boolean): string;
2928
+ canNavigate(): boolean;
2929
+ clampedIndex(): number;
2930
+ dotLabel(i: number): string;
2931
+ go(i: number): void;
2932
+ prev(): void;
2933
+ next(): void;
2934
+ goPage(i: number): void;
2935
+ prevPage(): void;
2936
+ nextPage(): void;
2937
+ onTrackScroll(): void;
2938
+ private refreshMetrics;
2939
+ private resolvePerView;
2940
+ private pageScrollAmount;
2941
+ private scrollToPage;
2942
+ private isRtl;
2943
+ onKeydown(event: KeyboardEvent): void;
2944
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCarousel, never>;
2945
+ 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>;
2946
+ }
2947
+
2948
+ type DgaChartType = 'bar' | 'line' | 'pie' | 'donut';
2949
+ /** Backward-compatible single-series point: `{ label, value }`. */
2950
+ interface DgaChartPoint {
2951
+ label: string;
2952
+ value: number;
2953
+ }
2954
+ /** Multi-series data: one named series of values, aligned with `labels()`. */
2955
+ interface DgaChartDataset {
2956
+ name: string;
2957
+ data: number[];
2958
+ }
2959
+ interface DgaChartBarSlot {
2960
+ seriesIndex: number;
2961
+ categoryIndex: number;
2962
+ x: number;
2963
+ y: number;
2964
+ w: number;
2965
+ h: number;
2966
+ value: number;
2967
+ color: string;
2968
+ name: string;
2969
+ category: string;
2970
+ }
2971
+ interface DgaChartLinePoint {
2972
+ x: number;
2973
+ y: number;
2974
+ value: number;
2975
+ category: string;
2976
+ }
2977
+ interface DgaChartLine {
2978
+ name: string;
2979
+ color: string;
2980
+ points: DgaChartLinePoint[];
2981
+ linePath: string;
2982
+ areaPath: string;
2983
+ }
2984
+ interface DgaChartLegendItem {
2985
+ name: string;
2986
+ color: string;
2987
+ value: number | null;
2988
+ }
2989
+ interface DgaChartTooltip {
2990
+ x: number;
2991
+ y: number;
2992
+ title: string;
2993
+ items: {
2994
+ name: string;
2995
+ color: string;
2996
+ value: number;
2997
+ }[];
2998
+ }
2999
+ declare class DgaChart {
3000
+ readonly type: _angular_core.InputSignal<DgaChartType>;
3001
+ /** BC single-series input: `[{ label, value }]`. */
3002
+ readonly series: _angular_core.InputSignal<DgaChartPoint[]>;
3003
+ /** Category names shared by all `datasets()`. */
3004
+ readonly labels: _angular_core.InputSignal<string[]>;
3005
+ /** Preferred multi-series input for bar/line. */
3006
+ readonly datasets: _angular_core.InputSignal<DgaChartDataset[]>;
3007
+ /** Shown for pie/donut and multi-series bar/line. Set `false` to force-hide. */
3008
+ readonly legend: _angular_core.InputSignalWithTransform<boolean, unknown>;
3009
+ readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
3010
+ readonly grid: _angular_core.InputSignalWithTransform<boolean, unknown>;
3011
+ readonly stacked: _angular_core.InputSignalWithTransform<boolean, unknown>;
3012
+ readonly smooth: _angular_core.InputSignalWithTransform<boolean, unknown>;
3013
+ readonly area: _angular_core.InputSignalWithTransform<boolean, unknown>;
3014
+ readonly dots: _angular_core.InputSignalWithTransform<boolean, unknown>;
3015
+ /** Overrides the `--dga-chart-color-1..6` token cycle. */
3016
+ readonly colors: _angular_core.InputSignal<string[]>;
3017
+ readonly height: _angular_core.InputSignal<number>;
3018
+ readonly label: _angular_core.InputSignal<string>;
3019
+ /** Fixed drawing width; scales via CSS `w-full`. */
3020
+ readonly width = 400;
3021
+ readonly pieSize = 180;
3022
+ readonly pad: {
3023
+ t: number;
3024
+ r: number;
3025
+ b: number;
3026
+ l: number;
3027
+ };
3028
+ private readonly hiddenNames;
3029
+ readonly hiddenSeries: _angular_core.Signal<Set<string>>;
3030
+ readonly hoveredCategoryIndex: _angular_core.WritableSignal<number | null>;
3031
+ readonly hoveredSlice: _angular_core.WritableSignal<{
3032
+ index: number;
3033
+ label: string;
3034
+ value: number;
3035
+ } | null>;
3036
+ readonly isPieType: _angular_core.Signal<boolean>;
3037
+ /** Category labels: explicit `labels()`, else derived from `datasets()` length, else BC `series()` labels. */
3038
+ readonly categories: _angular_core.Signal<string[]>;
3039
+ /** Normalized series: `datasets()` when present, else one series built from BC `series()`. */
3040
+ readonly seriesList: _angular_core.Signal<DgaChartDataset[]>;
3041
+ readonly visibleSeriesList: _angular_core.Signal<DgaChartDataset[]>;
3042
+ /** Points feeding pie/donut: BC `series()`, else first dataset paired with `labels()`. */
3043
+ readonly piePoints: _angular_core.Signal<DgaChartPoint[]>;
3044
+ readonly visiblePiePoints: _angular_core.Signal<DgaChartPoint[]>;
3045
+ readonly showLegend: _angular_core.Signal<boolean>;
3046
+ readonly legendItems: _angular_core.Signal<DgaChartLegendItem[]>;
3047
+ colorFor(index: number): string;
3048
+ toggleSeries(name: string): void;
3049
+ readonly ariaLabel: _angular_core.Signal<string>;
3050
+ readonly plot: _angular_core.Signal<{
3051
+ x: number;
3052
+ y: number;
3053
+ w: number;
3054
+ h: number;
3055
+ }>;
3056
+ readonly gridYs: _angular_core.Signal<number[]>;
3057
+ readonly maxValue: _angular_core.Signal<number>;
3058
+ /** Layout for one group (category) slot shared by bars and the hover hit-rect. */
3059
+ private readonly groupLayout;
3060
+ readonly categoryTicks: _angular_core.Signal<{
3061
+ index: number;
3062
+ category: string;
3063
+ x: number;
3064
+ hitX: number;
3065
+ hitW: number;
3066
+ }[]>;
3067
+ readonly bars: _angular_core.Signal<DgaChartBarSlot[]>;
3068
+ readonly visibleLines: _angular_core.Signal<DgaChartLine[]>;
3069
+ private straightPathD;
3070
+ /** Piecewise cubic Bezier through the points (Catmull-Rom style tangents). */
3071
+ private smoothPathD;
3072
+ private areaPathD;
3073
+ readonly pieSlices: _angular_core.Signal<{
3074
+ index: number;
3075
+ label: string;
3076
+ value: number;
3077
+ color: string;
3078
+ d: string;
3079
+ midX: number;
3080
+ midY: number;
3081
+ }[]>;
3082
+ onCategoryEnter(index: number): void;
3083
+ onCategoryLeave(): void;
3084
+ onSliceEnter(index: number, slice: {
3085
+ label: string;
3086
+ value: number;
3087
+ }): void;
3088
+ onSliceLeave(): void;
3089
+ categoryAriaLabel(index: number): string;
3090
+ readonly categoryTooltip: _angular_core.Signal<DgaChartTooltip | null>;
3091
+ readonly sliceTooltip: _angular_core.Signal<DgaChartTooltip | null>;
3092
+ tooltipWidth(tip: DgaChartTooltip): number;
3093
+ tooltipHeight(tip: DgaChartTooltip): number;
3094
+ tooltipX(tip: DgaChartTooltip): number;
3095
+ tooltipY(tip: DgaChartTooltip): number;
3096
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChart, never>;
3097
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChart, "dga-chart", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "series": { "alias": "series"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "datasets": { "alias": "datasets"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "stacked": { "alias": "stacked"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "area": { "alias": "area"; "required": false; "isSignal": true; }; "dots": { "alias": "dots"; "required": false; "isSignal": true; }; "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3098
+ }
3099
+
3100
+ interface DgaSaudiCity {
3101
+ id: number;
3102
+ region: string;
3103
+ regionAr: string;
3104
+ name: string;
3105
+ nameAr: string;
3106
+ }
3107
+ /** Bilingual Saudi cities across all 13 administrative regions. */
3108
+ declare const DGA_SAUDI_CITIES: readonly DgaSaudiCity[];
3109
+ /** Group cities by English region name. */
3110
+ declare function dgaGroupSaudiCitiesByRegion(cities?: readonly DgaSaudiCity[]): Record<string, DgaSaudiCity[]>;
3111
+ /** Autocomplete-ready options (Arabic labels by default). */
3112
+ declare function dgaSaudiCityOptions(locale?: 'ar' | 'en', cities?: readonly DgaSaudiCity[]): {
3113
+ label: string;
3114
+ value: string;
3115
+ }[];
3116
+
3117
+ export { DGA_GREGORIAN_MONTHS, DGA_HIJRI_MONTHS, DGA_ICON_NAMES, DGA_ICON_SVG, DGA_LOGICAL_ICON_NAMES, DGA_PHONE_COUNTRIES, DGA_SAUDI_CITIES, DGA_WEEKDAYS, DgaAccessibility, DgaAccessibilityService, DgaAccordion, DgaAccordionItem, DgaAlert, DgaAutocomplete, DgaAvatar, DgaBadge, DgaBreadcrumb, DgaButton, DgaCard, DgaCardMedia, DgaCarousel, DgaCarouselSlideDirective, DgaChart, DgaCheckbox, DgaChip, DgaChipInput, DgaClamp, DgaCode, DgaCookies, DgaCopy, DgaDatePickerComponent as DgaDatePicker, DgaDescriptionList, DgaDialog, DgaDivider, DgaDrawer, DgaEmpty, DgaExpandable, DgaExport, DgaExportToolbar, DgaFeedback, DgaField, DgaFilterBar, DgaFooter, DgaFormControl, DgaFormEnd, DgaFormStart, DgaGrid, DgaHeader, DgaHero, DgaIcon, DgaIconBadge, DgaIconFontService, DgaImagePopup, DgaInput, DgaLabel, DgaLink, DgaList, DgaLogoTile, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNativeSelect, DgaNumber, DgaNumberInput, DgaOtp, DgaPageFeedback, DgaPagination, DgaPersona, DgaPhoneInput, DgaPreloader, DgaProgress, DgaQuote, DgaRadio, DgaRating, DgaScrollTop, DgaSection, DgaSelect, DgaShare, DgaSideInfo, DgaSideNav, DgaSkeleton, DgaSkipLink, DgaSlider, DgaSpinner, DgaStepper, DgaSwitch, DgaTab, DgaTable, DgaTabs, DgaToast, DgaToastOutlet, DgaToastService, DgaToc, DgaToolbar, DgaTooltip, DgaTopBar, DgaUpload, decodePlatformscodeSvg, dgaAddMonths, dgaClampDate, dgaCoerceDate, dgaCompareDays, dgaDaysInMonth, dgaFormatDate, dgaGetCalendarParts, dgaGroupSaudiCitiesByRegion, dgaModeFromFormat, dgaMonthNames, dgaMonthStartWeekday, dgaParseDate, dgaPartsToDate, dgaSameDay, dgaSaudiCityOptions, dgaTodayUtc };
3118
+ export type { DgaA11yBundle, DgaA11yMode, DgaA11yVisualFilter, DgaAccessibilityPosition, DgaAlertDisplay, DgaAlertVariant, DgaAutocompleteOption, DgaAvatarSize, DgaBadgeSize, DgaBadgeVariant, DgaBreadcrumbItem, DgaBreadcrumbSeparator, DgaButtonSize, DgaButtonVariant, DgaCalendar, DgaCalendarParts, DgaCardActionsAlign, DgaCardAppearance, DgaCardBadge, DgaCardBorder, DgaCardPadding, DgaCardShadow, DgaCarouselSlide, DgaChartDataset, DgaChartPoint, DgaChartType, DgaCheckboxSize, DgaChipVariant, DgaCookieConsent, DgaCurrency, DgaDateCalendar, DgaDatePickerMode, DgaDateRangeValue, DgaDescriptionItem, DgaDescriptionLayout, DgaDialogSize, DgaDividerOrientation, DgaDrawerSide, 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, DgaInputSize, DgaLinkVariant, DgaMenuItem, DgaMetricAppearance, DgaMetricTrend, DgaMobileNavMode, DgaModalAnimation, DgaModalSize, DgaMultiselectOption, DgaNativeSelectSize, DgaNavColumn, DgaNavDropdown, DgaNavDropdownLayout, DgaNavDropdownVariant, DgaNavFeatured, DgaNavItem, DgaNavLink, DgaPageFeedbackAgreementLink, DgaPageFeedbackAnswer, DgaPageFeedbackOption, DgaPageFeedbackPhase, DgaPageFeedbackSubmit, DgaPhoneCountry, DgaPreloaderPersist, DgaProgressAppearance, DgaProgressSize, DgaProgressTone, DgaRadioSize, DgaRatingSize, DgaSaudiCity, DgaScrollTopPosition, DgaSectionTone, DgaSectionWidth, DgaSelectOpenMode, DgaSelectOption, DgaSelectSize, DgaShareAppearance, DgaSideInfoItem, DgaSideNavItem, DgaSkeletonAnimation, DgaSkeletonRadius, DgaSkeletonShape, DgaSkeletonSize, DgaSortDir, DgaSpinnerSize, DgaSpinnerTone, DgaStampNotice, DgaStep, DgaSwitchSize, DgaTableColumn, DgaTableDensity, DgaTimeFormat, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaUploadAppearance, DgaUploadFile };