@a.nemreen/dga-ui 0.3.14 → 0.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,11 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Type, Provider, Signal, OnDestroy, OnInit } from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, Type, Provider, Signal, OnDestroy, OnInit, TemplateRef } from '@angular/core';
3
3
  import { SafeHtml, SafeResourceUrl } from '@angular/platform-browser';
4
4
  import { ControlValueAccessor } from '@angular/forms';
5
5
  export { ControlValueAccessor } from '@angular/forms';
6
6
  import * as _a_nemreen_dga_ui from '@a.nemreen/dga-ui';
7
+ import * as _a_nemreen_dga_tokens from '@a.nemreen/dga-tokens';
8
+ import { DgaLocale } from '@a.nemreen/dga-tokens';
7
9
 
8
10
  type DgaWritingEffect = 'typewriter' | 'glow';
9
11
  /**
@@ -47,14 +49,20 @@ declare class DgaWriting {
47
49
 
48
50
  type DgaButtonVariant = 'primary' | 'secondary' | 'subtle' | 'outline' | 'outlineMuted' | 'outlineInverse' | 'ghost' | 'danger' | 'inverse';
49
51
  type DgaButtonSize = 'sm' | 'md' | 'lg';
52
+ /** Hover / focus motion. Default `opacity` preserves legacy chrome. */
53
+ type DgaButtonEffect = 'opacity' | 'ripple' | 'lift' | 'scale' | 'glow' | 'press' | 'bounce' | 'slide' | 'shine' | 'pulse' | 'float' | 'wobble' | 'jelly';
50
54
  declare class DgaButton {
51
55
  private readonly destroyRef;
52
56
  private readonly host;
53
57
  private readonly renderer;
54
58
  readonly variant: _angular_core.InputSignal<DgaButtonVariant>;
55
59
  readonly size: _angular_core.InputSignal<DgaButtonSize>;
60
+ /** Hover / focus motion. Default matches legacy opacity chrome. */
61
+ readonly effect: _angular_core.InputSignal<DgaButtonEffect>;
56
62
  /** Square control sized to the icon (no horizontal padding). */
57
63
  readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
64
+ /** Stretch to the width of the parent (adds `w-full`). */
65
+ readonly fullWidth: _angular_core.InputSignalWithTransform<boolean, unknown>;
58
66
  /** When > 0, disables the host for this many ms after each click and shows a spinner. */
59
67
  readonly cooldownMs: _angular_core.InputSignal<number>;
60
68
  /** Manual loading state — shows spinner and disables the control. */
@@ -71,12 +79,14 @@ declare class DgaButton {
71
79
  readonly busy: _angular_core.Signal<boolean>;
72
80
  readonly classes: _angular_core.Signal<string>;
73
81
  constructor();
82
+ onPointerDown(event: Event): void;
74
83
  onHostClick(): void;
84
+ private spawnRipple;
75
85
  private attachSpinner;
76
86
  private detachSpinner;
77
87
  private clearCooldown;
78
88
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaButton, never>;
79
- 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; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "buttonClass": { "alias": "dgaButtonClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
89
+ 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; }; "effect": { "alias": "effect"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "cooldownMs": { "alias": "cooldownMs"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "buttonClass": { "alias": "dgaButtonClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
80
90
  }
81
91
 
82
92
  type DgaBadgeVariant = 'neutral' | 'primary' | 'success' | 'info' | 'warning' | 'error';
@@ -234,12 +244,12 @@ declare class DgaAvatar {
234
244
  }
235
245
 
236
246
  /**
237
- * Icon name union + RTL-flip set. Kept off the SVG registry so chrome
238
- * components can import names without the full glyph map.
247
+ * Icon name union + RTL-flip set. Kept off the SVG catalog so chrome
248
+ * components can import names without the HugeIcons glyph map.
239
249
  */
240
- declare const DGA_ICON_NAMES: readonly ["access", "check", "close", "info", "helpCircle", "warning", "alertCircle", "error", "eye", "eyeOff", "eyeOffSlash", "filter", "success", "checkCircle", "checkCircleAlt", "chevronDown", "chevronLeft", "chevronRight", "arrowUp", "arrowDown", "arrowLeft", "arrowRight", "arrowUp02", "arrowDown02", "arrowLeft02", "arrowRight02", "arrowNext", "arrowPrev", "arrowNext02", "arrowPrev02", "shrink", "search", "user", "users", "menu", "menuAlt", "moreHorizontal", "moreVertical", "mic", "home", "download", "upload", "calendar", "calendarAlt", "clock", "star", "starFilled", "plus", "plusSign", "minus", "external", "bell", "bellAlt", "lock", "lockPassword", "logout", "idCard", "link", "linkAlt", "globe", "moon", "moonAlt", "sun", "sunAlt", "translation", "mail", "message", "phone", "building", "share", "refresh", "highlighter", "door", "zoomIn", "zoomOut", "sort", "sortUp", "sortDown", "tradeUp", "tradeDown", "paintBoard", "cloud", "sunCloud", "moonCloud", "rain", "rainZap", "snow", "wind", "desert", "cart", "award", "cookie", "x", "linkedin", "whatsapp", "book", "headphones", "devices", "badgeCheck", "riyal", "copy", "location", "folder", "printer", "instagram", "smartphone", "ambulance", "police", "fire", "facebook", "youtube", "apple", "playStore", "huawei", "textFont", "glasses", "heading", "mask", "pause", "textAlign", "letterSpacing", "textUnderline", "maximize", "colors", "colorPicker", "droplet", "disability", "wheelchair", "brain", "flash", "touch"];
250
+ declare const DGA_ICON_NAMES: readonly ["access", "alertCircle", "ambulance", "apple", "arrowDown", "arrowDown02", "arrowLeft", "arrowLeft02", "arrowNext", "arrowNext02", "arrowPrev", "arrowPrev02", "arrowRight", "arrowRight02", "arrowUp", "arrowUp02", "award", "badgeCheck", "bell", "bellAlt", "book", "bookType", "brain", "building", "calendar", "calendarAlt", "cart", "check", "checkCircle", "checkCircleAlt", "chevronDown", "chevronLeft", "chevronRight", "clock", "close", "cloud", "colorPicker", "colors", "cookie", "copy", "desert", "devices", "disability", "door", "download", "droplet", "error", "external", "eye", "eyeOff", "eyeOffSlash", "facebook", "filter", "fire", "flash", "folder", "glasses", "globe", "heading", "headphones", "helpCircle", "highlighter", "home", "huawei", "idCard", "info", "instagram", "letterSpacing", "link", "linkAlt", "linkedin", "location", "lock", "lockPassword", "logout", "mail", "mask", "maximize", "menu", "menuAlt", "message", "mic", "minus", "moon", "moonAlt", "moonCloud", "moreHorizontal", "moreVertical", "paintBoard", "pause", "phone", "playStore", "plus", "plusSign", "police", "printer", "rain", "rainZap", "refresh", "riyal", "search", "share", "shrink", "smartphone", "snow", "sort", "sortDown", "sortUp", "star", "starFilled", "success", "sun", "sunAlt", "sunCloud", "textAlign", "textFont", "textUnderline", "touch", "tradeDown", "tradeUp", "translation", "upload", "user", "users", "warning", "whatsapp", "wheelchair", "wind", "x", "youtube", "zoomIn", "zoomOut"];
241
251
  type DgaIconName = (typeof DGA_ICON_NAMES)[number];
242
- declare const DGA_LOGICAL_ICON_NAMES: Set<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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">;
252
+ declare const DGA_LOGICAL_ICON_NAMES: Set<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut">;
243
253
 
244
254
  /**
245
255
  * Platforms Code icon sizes (px):
@@ -250,18 +260,22 @@ declare const DGA_LOGICAL_ICON_NAMES: Set<"success" | "info" | "warning" | "erro
250
260
  */
251
261
  type DgaIconSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
252
262
  type DgaIconTone = 'current' | 'primary' | 'muted' | 'success' | 'warning' | 'error';
263
+ /** Accept curated names plus app-registered custom names (keeps autocomplete for DgaIconName). */
264
+ type DgaIconNameInput = DgaIconName | (string & {});
253
265
  declare class DgaIcon {
254
266
  private readonly sanitizer;
255
267
  private readonly iconFont;
256
- private readonly extraIcons;
268
+ private readonly registry;
257
269
  /**
258
- * Curated inline SVG name for chrome / controls.
259
- * Required unless `glyph` is set.
270
+ * Curated HugeIcons (Stroke Rounded) / DGA SVG name for chrome / controls.
271
+ * Required unless `glyph` is set. App teams may pass names registered via
272
+ * {@link provideDgaIcons} / {@link DgaIconRegistry.register}.
260
273
  */
261
- readonly name: _angular_core.InputSignal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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" | undefined>;
274
+ readonly name: _angular_core.InputSignal<DgaIconNameInput | undefined>;
262
275
  /**
263
276
  * HugeIcons Stroke Rounded glyph id for content icons (e.g. `search-01`).
264
277
  * Requires `@import '@a.nemreen/dga-tokens/styles/icon-font.css'`.
278
+ * Prefer curated `name` for chrome controls so first paint does not wait on the font.
265
279
  */
266
280
  readonly glyph: _angular_core.InputSignal<string>;
267
281
  /** Default `sm` (16px) - common dense UI size; use `xl` (24px) for standard chrome. */
@@ -293,6 +307,57 @@ declare class DgaIconFontService {
293
307
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<DgaIconFontService>;
294
308
  }
295
309
 
310
+ /**
311
+ * Multi-provider bag of SVG markup keyed by icon name.
312
+ * Prefer {@link provideDgaIcons} at app bootstrap.
313
+ */
314
+ declare const DGA_ICON_OVERRIDES: InjectionToken<Readonly<Record<string, string>>[]>;
315
+ /**
316
+ * Register additional or overriding SVG icons for `<dga-icon name="…">`.
317
+ *
318
+ * @example
319
+ * ```ts
320
+ * bootstrapApplication(App, {
321
+ * providers: [
322
+ * provideDgaIcons({
323
+ * myBrand: `<svg …>…</svg>`,
324
+ * }),
325
+ * ],
326
+ * });
327
+ * ```
328
+ */
329
+ declare function provideDgaIcons(icons: Readonly<Record<string, string>>): EnvironmentProviders;
330
+
331
+ /**
332
+ * Resolves SVG markup for DgaIcon: runtime register → provideDgaIcons → HugeIcons/DGA catalog → core.
333
+ * Non-core catalog icons load once via a shared dynamic import (HugeIcons curated subset).
334
+ */
335
+ declare class DgaIconRegistry {
336
+ private readonly providerOverrides;
337
+ private readonly runtime;
338
+ private readonly defaults;
339
+ private readonly loading;
340
+ private readonly provided;
341
+ /** Synchronous lookup — empty until defaults finish loading for non-core names. */
342
+ get(name: string): string;
343
+ /** True when the name is in the first-paint core map. */
344
+ isCore(name: string): boolean;
345
+ /**
346
+ * Ensure the HugeIcons + DGA default catalog is loaded when `name` is not core / provided.
347
+ * Safe to call repeatedly; shares one import promise.
348
+ */
349
+ ensureLoaded(name: string): void;
350
+ /**
351
+ * Register or override an icon at runtime (e.g. after a lazy feature loads).
352
+ * Prefer {@link provideDgaIcons} for bootstrap-time icons.
353
+ */
354
+ register(name: string, svg: string): void;
355
+ /** Register many icons at once. */
356
+ registerAll(icons: Readonly<Record<string, string>>): void;
357
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaIconRegistry, never>;
358
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DgaIconRegistry>;
359
+ }
360
+
296
361
  type DgaIconBadgeSize = 'sm' | 'md' | 'lg' | 'xl';
297
362
  type DgaIconBadgeAppearance = 'filled' | 'outline';
298
363
  /**
@@ -357,9 +422,9 @@ declare class DgaFormControl {
357
422
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
358
423
  readonly filled: _angular_core.InputSignalWithTransform<boolean, unknown>;
359
424
  /** Built-in leading icon (logical start). */
360
- readonly startIcon: _angular_core.InputSignal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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" | null>;
425
+ readonly startIcon: _angular_core.InputSignal<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut" | null>;
361
426
  /** Built-in trailing icon (logical end). */
362
- readonly endIcon: _angular_core.InputSignal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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" | null>;
427
+ readonly endIcon: _angular_core.InputSignal<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut" | null>;
363
428
  private readonly focused;
364
429
  private readonly typing;
365
430
  readonly classes: _angular_core.Signal<string>;
@@ -421,6 +486,18 @@ declare class DgaRadio {
421
486
  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>;
422
487
  }
423
488
 
489
+ type DgaChoiceLayout = 'column' | 'row';
490
+ /**
491
+ * Lays out checkbox or radio options in a column, a wrapping row, or a
492
+ * fixed column count. Narrow screens always fall back to one column.
493
+ */
494
+ declare class DgaChoiceGroup {
495
+ readonly layout: _angular_core.InputSignal<DgaChoiceLayout>;
496
+ readonly columns: _angular_core.InputSignalWithTransform<number | null, unknown>;
497
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChoiceGroup, never>;
498
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaChoiceGroup, "[dgaChoiceGroup]", never, { "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
499
+ }
500
+
424
501
  type DgaNativeSelectSize = DgaFormControlSize;
425
502
  /** Styles a native `<select dgaSelect>` — for simple forms without search/multi. */
426
503
  declare class DgaNativeSelect {
@@ -461,6 +538,12 @@ declare class DgaSelect implements ControlValueAccessor {
461
538
  readonly removeLabel: _angular_core.InputSignal<string>;
462
539
  readonly clearLabel: _angular_core.InputSignal<string>;
463
540
  readonly emptyLabel: _angular_core.InputSignal<string>;
541
+ /** Show a spinner row in the list (async / remote options). */
542
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
543
+ /** When searchable query matches no option, offer a “Create …” row. */
544
+ readonly creatable: _angular_core.InputSignalWithTransform<boolean, unknown>;
545
+ /** Prefix/label for the create row; `{q}` is replaced with the query. */
546
+ readonly createLabel: _angular_core.InputSignal<string>;
464
547
  readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
465
548
  private readonly cvaDisabled;
466
549
  readonly disabled: _angular_core.Signal<boolean>;
@@ -468,11 +551,16 @@ declare class DgaSelect implements ControlValueAccessor {
468
551
  readonly valueChange: _angular_core.OutputEmitterRef<string | string[]>;
469
552
  /** Emitted when the searchable query changes (remote lookup fields). */
470
553
  readonly searchChange: _angular_core.OutputEmitterRef<string>;
554
+ /** Emitted when the user picks the creatable “Create …” option. */
555
+ readonly create: _angular_core.OutputEmitterRef<string>;
471
556
  private onChange;
472
557
  private onTouched;
473
558
  readonly open: _angular_core.WritableSignal<boolean>;
474
559
  readonly query: _angular_core.WritableSignal<string>;
475
560
  readonly activeIndex: _angular_core.WritableSignal<number>;
561
+ private readonly uiLocale;
562
+ private readonly ar;
563
+ readonly loadingLabel: _angular_core.Signal<"جاري التحميل…" | "Loading…">;
476
564
  constructor();
477
565
  readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
478
566
  readonly listVisible: _angular_core.Signal<boolean>;
@@ -487,6 +575,7 @@ declare class DgaSelect implements ControlValueAccessor {
487
575
  hasValue(): boolean;
488
576
  optionId(index: number): string;
489
577
  isSelected(v: string): boolean;
578
+ isCreateOption(opt: DgaSelectOption): boolean;
490
579
  selectedValues(): string[];
491
580
  toggleOpen(): void;
492
581
  onFocus(): void;
@@ -506,8 +595,100 @@ declare class DgaSelect implements ControlValueAccessor {
506
595
  private moveActive;
507
596
  private firstEnabledIndex;
508
597
  private lastEnabledIndex;
598
+ private withCreateOption;
599
+ private formatCreateLabel;
509
600
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSelect, never>;
510
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSelect, "dga-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "openMode": { "alias": "openMode"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "searchChange": "searchChange"; }, never, never, true, never>;
601
+ 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; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "creatable": { "alias": "creatable"; "required": false; "isSignal": true; }; "createLabel": { "alias": "createLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "searchChange": "searchChange"; "create": "create"; }, never, never, true, never>;
602
+ }
603
+
604
+ interface DgaTreeItem {
605
+ id: string;
606
+ label: string;
607
+ children?: DgaTreeItem[];
608
+ disabled?: boolean;
609
+ }
610
+ /** Flatten tree in document order (parents before children). */
611
+ declare function dgaFlattenTree(items: DgaTreeItem[]): DgaTreeItem[];
612
+ /** Visible nodes given expanded ids (document order). */
613
+ declare function dgaVisibleTreeNodes(items: DgaTreeItem[], expandedIds: ReadonlySet<string> | readonly string[]): DgaTreeItem[];
614
+ /** Ancestors of `id` (nearest parent last), or empty if not found. */
615
+ declare function dgaTreeAncestors(items: DgaTreeItem[], id: string): DgaTreeItem[];
616
+ declare function dgaFindTreeItem(items: DgaTreeItem[], id: string): DgaTreeItem | null;
617
+ /** Filter tree: keep nodes matching query (and their ancestors). */
618
+ declare function dgaFilterTree(items: DgaTreeItem[], query: string): DgaTreeItem[];
619
+
620
+ type DgaTreeSelectSize = DgaFormControlSize;
621
+ /**
622
+ * Field trigger + popup tree. Single or multi; optional search filter; CVA.
623
+ *
624
+ * @example
625
+ * ```html
626
+ * <dga-tree-select
627
+ * [items]="org"
628
+ * [(value)]="selected"
629
+ * [searchable]="true"
630
+ * />
631
+ * ```
632
+ */
633
+ declare class DgaTreeSelect implements ControlValueAccessor {
634
+ private static nextId;
635
+ private readonly host;
636
+ readonly panelId: string;
637
+ readonly items: _angular_core.InputSignal<DgaTreeItem[]>;
638
+ /** Single: `string`. Multiple: `string[]`. */
639
+ readonly valueInput: _angular_core.InputSignal<string | string[]>;
640
+ readonly value: _angular_core.WritableSignal<string | string[]>;
641
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
642
+ readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
643
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
644
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
645
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
646
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
647
+ private readonly cvaDisabled;
648
+ readonly disabled: _angular_core.Signal<boolean>;
649
+ readonly label: _angular_core.InputSignal<string>;
650
+ readonly placeholderInput: _angular_core.InputSignal<string>;
651
+ readonly emptyLabelInput: _angular_core.InputSignal<string>;
652
+ /** When true, only leaf nodes can be selected. */
653
+ readonly onlyLeaves: _angular_core.InputSignalWithTransform<boolean, unknown>;
654
+ readonly open: _angular_core.ModelSignal<boolean>;
655
+ readonly expandedIds: _angular_core.ModelSignal<string[]>;
656
+ readonly query: _angular_core.WritableSignal<string>;
657
+ readonly valueChange: _angular_core.OutputEmitterRef<string | string[]>;
658
+ readonly selectedIdList: _angular_core.Signal<string[]>;
659
+ readonly filteredItems: _angular_core.Signal<DgaTreeItem[]>;
660
+ readonly selectedItems: _angular_core.Signal<DgaTreeItem[]>;
661
+ readonly resolvedStatus: _angular_core.Signal<_a_nemreen_dga_ui.DgaFormStatus>;
662
+ private onChange;
663
+ private onTouched;
664
+ constructor();
665
+ resolvedPlaceholder(): string;
666
+ searchPlaceholder(): string;
667
+ treeLabel(): string;
668
+ emptyLabel(): string;
669
+ removeLabel(): string;
670
+ clearLabel(): string;
671
+ hasValue(): boolean;
672
+ triggerWrapClasses(): string;
673
+ searchInputClasses(): string;
674
+ buttonClasses(): string;
675
+ onType(raw: string): void;
676
+ openPanel(): void;
677
+ toggleOpen(): void;
678
+ closePanel(): void;
679
+ onBlur(): void;
680
+ onDocClick(event: MouseEvent): void;
681
+ onTriggerKey(event: KeyboardEvent): void;
682
+ onTreeSelect(ids: string[]): void;
683
+ remove(id: string): void;
684
+ clear(): void;
685
+ private commit;
686
+ writeValue(value: string | string[]): void;
687
+ registerOnChange(fn: (value: string | string[]) => void): void;
688
+ registerOnTouched(fn: () => void): void;
689
+ setDisabledState(isDisabled: boolean): void;
690
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTreeSelect, never>;
691
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTreeSelect, "dga-tree-select", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyLabelInput": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "onlyLeaves": { "alias": "onlyLeaves"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "expandedIds": "expandedIdsChange"; "valueChange": "valueChange"; }, never, never, true, never>;
511
692
  }
512
693
 
513
694
  /**
@@ -588,9 +769,16 @@ declare class DgaNumberInput implements ControlValueAccessor {
588
769
  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; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "incrementLabel": { "alias": "incrementLabel"; "required": false; "isSignal": true; }; "decrementLabel": { "alias": "decrementLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
589
770
  }
590
771
 
772
+ type DgaSliderSize = 'sm' | 'md' | 'lg';
773
+ /**
774
+ * Styles a native range input: primary fill, neutral track, circular thumb.
775
+ * The fill length is a CSS variable updated from the current value.
776
+ */
591
777
  declare class DgaSlider {
592
- readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
593
- readonly classes: _angular_core.Signal<string>;
778
+ private readonly el;
779
+ readonly size: _angular_core.InputSignal<DgaSliderSize>;
780
+ constructor();
781
+ paint(): void;
594
782
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSlider, never>;
595
783
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaSlider, "input[type=\"range\"][dgaSlider]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
596
784
  }
@@ -662,6 +850,177 @@ declare class DgaChipInput implements ControlValueAccessor {
662
850
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChipInput, "dga-chip-input", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
663
851
  }
664
852
 
853
+ /**
854
+ * Saudi IBAN helpers (ISO 13616).
855
+ * SA IBANs are 24 characters: `SA` + 2 check digits + 20 BBAN chars.
856
+ */
857
+ declare const DGA_IBAN_COUNTRY = "SA";
858
+ declare const DGA_IBAN_LENGTH = 24;
859
+ /** Strip spaces and force uppercase A–Z / 0–9. */
860
+ declare function dgaNormalizeIban(raw: string): string;
861
+ /** Format as groups of 4: `SA03 8000 0000 6080 1016 7519`. */
862
+ declare function dgaFormatIban(raw: string): string;
863
+ /**
864
+ * ISO 13616 mod-97 check.
865
+ * Move first 4 chars to the end, map A=10…Z=35, interpret as integer mod 97 === 1.
866
+ */
867
+ declare function dgaIsValidIban(raw: string): boolean;
868
+
869
+ /**
870
+ * Saudi IBAN field with grouping mask and ISO 13616 checksum.
871
+ * Always LTR so alphanumerics read left-to-right on RTL pages.
872
+ *
873
+ * @example
874
+ * ```html
875
+ * <dga-field label="IBAN">
876
+ * <dga-iban-input [(value)]="iban" />
877
+ * </dga-field>
878
+ * ```
879
+ */
880
+ declare class DgaIbanInput implements ControlValueAccessor {
881
+ /** Compact IBAN without spaces (`SA03…`). */
882
+ readonly value: _angular_core.ModelSignal<string>;
883
+ readonly controlId: _angular_core.InputSignal<string>;
884
+ readonly name: _angular_core.InputSignal<string>;
885
+ readonly label: _angular_core.InputSignal<string>;
886
+ readonly placeholder: _angular_core.InputSignal<string>;
887
+ /** Fixed country prefix shown before the editable remainder (default `SA`). */
888
+ readonly countryCode: _angular_core.InputSignal<string>;
889
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
890
+ private readonly cvaDisabled;
891
+ readonly disabled: _angular_core.Signal<boolean>;
892
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
893
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
894
+ readonly prefix: _angular_core.Signal<string>;
895
+ /** True when length is complete and mod-97 passes. */
896
+ readonly checksumValid: _angular_core.Signal<boolean>;
897
+ readonly displayValue: _angular_core.Signal<string>;
898
+ readonly resolvedStatus: _angular_core.Signal<_a_nemreen_dga_ui.DgaFormStatus>;
899
+ readonly groupClasses: _angular_core.Signal<string>;
900
+ private onChange;
901
+ onTouched: () => void;
902
+ onInput(raw: string): void;
903
+ writeValue(value: string): void;
904
+ registerOnChange(fn: (value: string) => void): void;
905
+ registerOnTouched(fn: () => void): void;
906
+ setDisabledState(isDisabled: boolean): void;
907
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaIbanInput, never>;
908
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaIbanInput, "dga-iban-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "countryCode": { "alias": "countryCode"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
909
+ }
910
+
911
+ /**
912
+ * Saudi National ID / Iqama helpers.
913
+ * 10 digits; starts with `1` (citizen) or `2` (resident); Luhn-style checksum.
914
+ */
915
+ type DgaNationalIdKind = 'citizen' | 'resident' | 'unknown';
916
+ declare function dgaNormalizeNationalId(raw: string): string;
917
+ declare function dgaNationalIdKind(id: string): DgaNationalIdKind;
918
+ /**
919
+ * Saudi ID checksum (even indices from the left are doubled; digits of product summed).
920
+ * Valid when the total sum is divisible by 10.
921
+ */
922
+ declare function dgaIsValidNationalId(raw: string): boolean;
923
+ /** Soft grouping for display: `1 234 567 890`. */
924
+ declare function dgaFormatNationalId(raw: string): string;
925
+
926
+ /**
927
+ * Saudi National ID / Iqama field (10 digits, checksum).
928
+ * Always LTR so digits read left-to-right on RTL pages.
929
+ *
930
+ * @example
931
+ * ```html
932
+ * <dga-field label="هوية وطنية">
933
+ * <dga-national-id [(value)]="id" />
934
+ * </dga-field>
935
+ * ```
936
+ */
937
+ declare class DgaNationalId implements ControlValueAccessor {
938
+ /** Compact 10-digit value. */
939
+ readonly value: _angular_core.ModelSignal<string>;
940
+ readonly controlId: _angular_core.InputSignal<string>;
941
+ readonly name: _angular_core.InputSignal<string>;
942
+ readonly label: _angular_core.InputSignal<string>;
943
+ readonly placeholder: _angular_core.InputSignal<string>;
944
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
945
+ private readonly cvaDisabled;
946
+ readonly disabled: _angular_core.Signal<boolean>;
947
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
948
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
949
+ readonly kind: _angular_core.Signal<DgaNationalIdKind>;
950
+ readonly checksumValid: _angular_core.Signal<boolean>;
951
+ readonly displayValue: _angular_core.Signal<string>;
952
+ readonly resolvedStatus: _angular_core.Signal<_a_nemreen_dga_ui.DgaFormStatus>;
953
+ readonly groupClasses: _angular_core.Signal<string>;
954
+ private onChange;
955
+ onTouched: () => void;
956
+ onInput(raw: string): void;
957
+ writeValue(value: string): void;
958
+ registerOnChange(fn: (value: string) => void): void;
959
+ registerOnTouched(fn: () => void): void;
960
+ setDisabledState(isDisabled: boolean): void;
961
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNationalId, never>;
962
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNationalId, "dga-national-id", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
963
+ }
964
+
965
+ type DgaPasswordStrength = 'empty' | 'weak' | 'fair' | 'good' | 'strong';
966
+ interface DgaPasswordStrengthResult {
967
+ level: DgaPasswordStrength;
968
+ /** 0–4 score used for the meter fill. */
969
+ score: number;
970
+ checks: {
971
+ length: boolean;
972
+ lower: boolean;
973
+ upper: boolean;
974
+ digit: boolean;
975
+ special: boolean;
976
+ };
977
+ }
978
+ /** Heuristic password strength (not a substitute for server-side policy). */
979
+ declare function dgaPasswordStrength(raw: string): DgaPasswordStrengthResult;
980
+
981
+ /**
982
+ * Password field with show/hide toggle and optional strength meter.
983
+ *
984
+ * @example
985
+ * ```html
986
+ * <dga-field label="كلمة المرور">
987
+ * <dga-password [(value)]="password" meter />
988
+ * </dga-field>
989
+ * ```
990
+ */
991
+ declare class DgaPassword implements ControlValueAccessor {
992
+ readonly meterSegments: number[];
993
+ readonly value: _angular_core.ModelSignal<string>;
994
+ readonly controlId: _angular_core.InputSignal<string>;
995
+ readonly name: _angular_core.InputSignal<string>;
996
+ readonly label: _angular_core.InputSignal<string>;
997
+ readonly placeholder: _angular_core.InputSignal<string>;
998
+ /** Show strength meter under the field. */
999
+ readonly meter: _angular_core.InputSignalWithTransform<boolean, unknown>;
1000
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
1001
+ private readonly cvaDisabled;
1002
+ readonly disabled: _angular_core.Signal<boolean>;
1003
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
1004
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1005
+ readonly revealed: _angular_core.WritableSignal<boolean>;
1006
+ readonly strength: _angular_core.Signal<DgaPasswordStrengthResult>;
1007
+ readonly meterId: _angular_core.Signal<string>;
1008
+ readonly resolvedStatus: _angular_core.Signal<_a_nemreen_dga_ui.DgaFormStatus>;
1009
+ readonly groupClasses: _angular_core.Signal<string>;
1010
+ private onChange;
1011
+ onTouched: () => void;
1012
+ toggleLabel(): string;
1013
+ strengthLabel(): string;
1014
+ toggleReveal(): void;
1015
+ onInput(raw: string): void;
1016
+ writeValue(value: string): void;
1017
+ registerOnChange(fn: (value: string) => void): void;
1018
+ registerOnTouched(fn: () => void): void;
1019
+ setDisabledState(isDisabled: boolean): void;
1020
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPassword, never>;
1021
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPassword, "dga-password", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "meter": { "alias": "meter"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1022
+ }
1023
+
665
1024
  interface DgaUploadFile {
666
1025
  id: string;
667
1026
  name: string;
@@ -797,10 +1156,20 @@ declare class DgaAutocomplete {
797
1156
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
798
1157
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
799
1158
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
1159
+ /** Async options in flight — spinner in the list. */
1160
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1161
+ /** Offer a “Create …” row when the query matches no option. */
1162
+ readonly creatable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1163
+ /** Create-row label; `{q}` is replaced with the query. */
1164
+ readonly createLabel: _angular_core.InputSignal<string>;
800
1165
  readonly valueChange: _angular_core.OutputEmitterRef<string>;
1166
+ /** Emitted when the search query changes (remote lookup). */
1167
+ readonly search: _angular_core.OutputEmitterRef<string>;
1168
+ /** Emitted when the user picks the creatable option. */
1169
+ readonly create: _angular_core.OutputEmitterRef<string>;
801
1170
  onValueChange(next: string | string[]): void;
802
1171
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAutocomplete, never>;
803
- 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; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1172
+ 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; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "creatable": { "alias": "creatable"; "required": false; "isSignal": true; }; "createLabel": { "alias": "createLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "search": "search"; "create": "create"; }, never, never, true, never>;
804
1173
  }
805
1174
 
806
1175
  /** @deprecated Prefer `DgaSelectOption` — alias kept for existing imports. */
@@ -867,6 +1236,144 @@ declare class DgaTimePicker {
867
1236
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTimePicker, "dga-time-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hourLabel": { "alias": "hourLabel"; "required": false; "isSignal": true; }; "minuteLabel": { "alias": "minuteLabel"; "required": false; "isSignal": true; }; "periodLabel": { "alias": "periodLabel"; "required": false; "isSignal": true; }; "amLabel": { "alias": "amLabel"; "required": false; "isSignal": true; }; "pmLabel": { "alias": "pmLabel"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "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; }; }, { "value": "valueChange"; }, never, never, true, never>;
868
1237
  }
869
1238
 
1239
+ /**
1240
+ * Canvas signature pad for Saudi e-services.
1241
+ *
1242
+ * @example
1243
+ * ```html
1244
+ * <dga-signature-pad [(value)]="sig" label="التوقيع" />
1245
+ * ```
1246
+ */
1247
+ declare class DgaSignaturePad implements ControlValueAccessor {
1248
+ private readonly canvasRef;
1249
+ private readonly host;
1250
+ readonly width: _angular_core.InputSignal<number>;
1251
+ readonly height: _angular_core.InputSignal<number>;
1252
+ readonly penColor: _angular_core.InputSignal<string>;
1253
+ readonly lineWidth: _angular_core.InputSignal<number>;
1254
+ readonly label: _angular_core.InputSignal<string>;
1255
+ readonly clearLabel: _angular_core.InputSignal<string>;
1256
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
1257
+ private readonly cvaDisabled;
1258
+ readonly disabled: _angular_core.Signal<boolean>;
1259
+ /** PNG data URL. */
1260
+ readonly value: _angular_core.ModelSignal<string>;
1261
+ private readonly uiLocale;
1262
+ private readonly ar;
1263
+ readonly hintText: _angular_core.Signal<"وقّع هنا" | "Sign here">;
1264
+ readonly drawing: _angular_core.WritableSignal<boolean>;
1265
+ private readonly stroked;
1266
+ private lastX;
1267
+ private lastY;
1268
+ /** Skip restoring from `value` while we own the canvas. */
1269
+ private localWrite;
1270
+ private onChange;
1271
+ private onTouched;
1272
+ constructor();
1273
+ readonly wrapClasses: _angular_core.Signal<string>;
1274
+ isEmpty(): boolean;
1275
+ clear(): void;
1276
+ onPointerDown(event: PointerEvent): void;
1277
+ onPointerMove(event: PointerEvent): void;
1278
+ onPointerUp(event: PointerEvent): void;
1279
+ onPointerLeave(event: PointerEvent): void;
1280
+ writeValue(value: string): void;
1281
+ registerOnChange(fn: (value: string) => void): void;
1282
+ registerOnTouched(fn: () => void): void;
1283
+ setDisabledState(isDisabled: boolean): void;
1284
+ private emitStroke;
1285
+ private commit;
1286
+ private resetCanvasSurface;
1287
+ private coords;
1288
+ private resolvePenColor;
1289
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSignaturePad, never>;
1290
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSignaturePad, "dga-signature-pad", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "penColor": { "alias": "penColor"; "required": false; "isSignal": true; }; "lineWidth": { "alias": "lineWidth"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1291
+ }
1292
+
1293
+ type DgaRichTool = 'bold' | 'italic' | 'underline' | 'strike' | 'h2' | 'h3' | 'ul' | 'ol' | 'quote' | 'alignStart' | 'alignCenter' | 'alignEnd' | 'link' | 'clear';
1294
+ /**
1295
+ * Contenteditable rich-text field: inline styles, headings, lists, quote,
1296
+ * alignment, and links. `value` is sanitized HTML.
1297
+ *
1298
+ * @example
1299
+ * ```html
1300
+ * <dga-rich-text [(value)]="html" label="الوصف" />
1301
+ * ```
1302
+ */
1303
+ declare class DgaRichText {
1304
+ private readonly destroyRef;
1305
+ private readonly editorRef;
1306
+ private readonly linkInputRef;
1307
+ readonly value: _angular_core.ModelSignal<string>;
1308
+ readonly placeholder: _angular_core.InputSignal<string>;
1309
+ readonly label: _angular_core.InputSignal<string>;
1310
+ readonly minHeight: _angular_core.InputSignal<number>;
1311
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1312
+ private readonly uiLocale;
1313
+ private readonly ar;
1314
+ private readonly active;
1315
+ private readonly block;
1316
+ /** Last HTML this component published. External writes differ from this. */
1317
+ private owned;
1318
+ private range;
1319
+ readonly empty: _angular_core.WritableSignal<boolean>;
1320
+ readonly linkOpen: _angular_core.WritableSignal<boolean>;
1321
+ readonly linkUrl: _angular_core.WritableSignal<string>;
1322
+ readonly labelId: string;
1323
+ readonly toolbarLabel: _angular_core.Signal<"شريط التنسيق" | "Formatting toolbar">;
1324
+ readonly labels: _angular_core.Signal<{
1325
+ bold: string;
1326
+ italic: string;
1327
+ underline: string;
1328
+ strike: string;
1329
+ h2: string;
1330
+ h3: string;
1331
+ ul: string;
1332
+ ol: string;
1333
+ quote: string;
1334
+ alignStart: string;
1335
+ alignCenter: string;
1336
+ alignEnd: string;
1337
+ link: string;
1338
+ clear: string;
1339
+ linkUrl: string;
1340
+ apply: string;
1341
+ cancel: string;
1342
+ }>;
1343
+ readonly tools: _angular_core.Signal<{
1344
+ id: DgaRichTool;
1345
+ label: string;
1346
+ text: boolean;
1347
+ sep: boolean;
1348
+ }[]>;
1349
+ constructor();
1350
+ pressed(id: DgaRichTool): boolean;
1351
+ keepSelection(event: Event): void;
1352
+ onTool(id: DgaRichTool): void;
1353
+ onInput(): void;
1354
+ onBlur(): void;
1355
+ onCaret(): void;
1356
+ onKeydown(event: KeyboardEvent): void;
1357
+ openLink(): void;
1358
+ closeLink(): void;
1359
+ applyLink(): void;
1360
+ private exec;
1361
+ private formatBlock;
1362
+ private clearFormat;
1363
+ private explicitAlign;
1364
+ private alignCommand;
1365
+ private refreshActive;
1366
+ private publish;
1367
+ private restoreSelection;
1368
+ private captureRange;
1369
+ private rangeIsCollapsed;
1370
+ private anchorFromSelection;
1371
+ private direction;
1372
+ private editorEl;
1373
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaRichText, never>;
1374
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaRichText, "dga-rich-text", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1375
+ }
1376
+
870
1377
  type DgaDialogSize = 'sm' | 'md' | 'lg';
871
1378
  declare class DgaDialog {
872
1379
  private readonly injector;
@@ -895,6 +1402,46 @@ declare class DgaDialog {
895
1402
  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>;
896
1403
  }
897
1404
 
1405
+ type DgaConfirmTone = 'default' | 'danger';
1406
+ /**
1407
+ * Standardized confirm dialog preset (cancel + confirm). Use `tone="danger"` for
1408
+ * destructive deletes.
1409
+ *
1410
+ * @example
1411
+ * ```html
1412
+ * <dga-confirm
1413
+ * [(open)]="open"
1414
+ * tone="danger"
1415
+ * title="حذف الطلب؟"
1416
+ * message="لا يمكن التراجع عن هذا الإجراء."
1417
+ * (confirmed)="onDelete()"
1418
+ * />
1419
+ * ```
1420
+ */
1421
+ declare class DgaConfirm {
1422
+ readonly open: _angular_core.ModelSignal<boolean>;
1423
+ readonly title: _angular_core.InputSignal<string>;
1424
+ readonly message: _angular_core.InputSignal<string>;
1425
+ readonly size: _angular_core.InputSignal<DgaDialogSize>;
1426
+ readonly tone: _angular_core.InputSignal<DgaConfirmTone>;
1427
+ readonly confirmLabel: _angular_core.InputSignal<string>;
1428
+ readonly cancelLabel: _angular_core.InputSignal<string>;
1429
+ readonly closeLabel: _angular_core.InputSignal<string>;
1430
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
1431
+ readonly confirmed: _angular_core.OutputEmitterRef<void>;
1432
+ readonly cancelled: _angular_core.OutputEmitterRef<void>;
1433
+ readonly confirmVariant: _angular_core.Signal<"primary" | "danger">;
1434
+ defaultCloseLabel(): string;
1435
+ defaultCancelLabel(): string;
1436
+ defaultConfirmLabel(): string;
1437
+ confirm(): void;
1438
+ cancel(): void;
1439
+ /** Escape / backdrop / X — `closed` only fires from those paths on `dga-dialog`. */
1440
+ onDialogClosed(): void;
1441
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaConfirm, never>;
1442
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaConfirm, "dga-confirm", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "confirmLabel": { "alias": "confirmLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "confirmed": "confirmed"; "cancelled": "cancelled"; }, never, ["*"], true, never>;
1443
+ }
1444
+
898
1445
  type DgaModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
899
1446
  type DgaModalAnimation = 'fade' | 'scale' | 'slide' | 'none';
900
1447
  declare class DgaModal {
@@ -1001,8 +1548,8 @@ declare class DgaToast implements OnDestroy {
1001
1548
  /** Clear sticky announcement / reserved chrome, then a small gap. */
1002
1549
  readonly edgeTop: _angular_core.Signal<"calc(var(--dga-announcement-offset, 0px) + 1rem)" | null>;
1003
1550
  readonly edgeBottom: _angular_core.Signal<"1rem" | null>;
1004
- readonly iconName: _angular_core.Signal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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">;
1005
- readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
1551
+ readonly iconName: _angular_core.Signal<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut">;
1552
+ readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1006
1553
  readonly showCountdown: _angular_core.Signal<boolean>;
1007
1554
  readonly reduceMotion: _angular_core.WritableSignal<boolean>;
1008
1555
  private readonly animClass;
@@ -1179,8 +1726,13 @@ declare class DgaMenu {
1179
1726
  readonly open: _angular_core.ModelSignal<boolean>;
1180
1727
  readonly triggerLabel: _angular_core.InputSignal<string>;
1181
1728
  /** Optional leading glyph (e.g. share on page heroes). */
1182
- readonly leadingIcon: _angular_core.InputSignal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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" | null>;
1729
+ readonly leadingIcon: _angular_core.InputSignal<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut" | null>;
1183
1730
  readonly showChevron: _angular_core.InputSignalWithTransform<boolean, unknown>;
1731
+ /**
1732
+ * `default` = bordered labeled trigger.
1733
+ * `icon` = compact ghost icon button (table row actions).
1734
+ */
1735
+ readonly appearance: _angular_core.InputSignal<"default" | "icon">;
1184
1736
  /** Minimum panel width (e.g. share menus). */
1185
1737
  readonly menuMinWidth: _angular_core.InputSignal<string>;
1186
1738
  /** Emits the full selected item. */
@@ -1220,7 +1772,7 @@ declare class DgaMenu {
1220
1772
  private cssLengthToPx;
1221
1773
  private focusItem;
1222
1774
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaMenu, never>;
1223
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMenu, "dga-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "leadingIcon": { "alias": "leadingIcon"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; "menuMinWidth": { "alias": "menuMinWidth"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "selected": "selected"; "selectedValue": "selectedValue"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
1775
+ 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; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "menuMinWidth": { "alias": "menuMinWidth"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "selected": "selected"; "selectedValue": "selectedValue"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
1224
1776
  }
1225
1777
 
1226
1778
  type DgaContextMenuItemType = 'item' | 'checkbox' | 'radio' | 'divider' | 'label';
@@ -1441,6 +1993,99 @@ declare class DgaDrawer {
1441
1993
  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>;
1442
1994
  }
1443
1995
 
1996
+ type DgaBottomSheetSnap = 'peek' | 'half' | 'full';
1997
+ declare class DgaBottomSheet {
1998
+ private readonly doc;
1999
+ private readonly destroyRef;
2000
+ private readonly injector;
2001
+ private readonly rootRef;
2002
+ private readonly panel;
2003
+ readonly open: _angular_core.ModelSignal<boolean>;
2004
+ readonly title: _angular_core.InputSignal<string>;
2005
+ /** Controls max-height: peek 40%, half 60%, full 85%. */
2006
+ readonly snap: _angular_core.InputSignal<DgaBottomSheetSnap>;
2007
+ readonly closeLabel: _angular_core.InputSignal<string>;
2008
+ readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2009
+ readonly closed: _angular_core.OutputEmitterRef<void>;
2010
+ readonly titleId: string;
2011
+ readonly dragging: _angular_core.WritableSignal<boolean>;
2012
+ private readonly dragY;
2013
+ private dragPointerId;
2014
+ private dragStartY;
2015
+ private previousFocus;
2016
+ private previousBodyOverflow;
2017
+ private previousHtmlOverflow;
2018
+ private scrollLocked;
2019
+ readonly maxHeight: _angular_core.Signal<string>;
2020
+ readonly panelTransform: _angular_core.Signal<string | null>;
2021
+ readonly panelClasses: _angular_core.Signal<string>;
2022
+ constructor();
2023
+ close(): void;
2024
+ onBackdrop(): void;
2025
+ onKeydown(event: KeyboardEvent): void;
2026
+ onHandlePointerDown(event: PointerEvent): void;
2027
+ onHandlePointerMove(event: PointerEvent): void;
2028
+ onHandlePointerUp(event: PointerEvent): void;
2029
+ private resetDrag;
2030
+ private portalToBody;
2031
+ private removePortaledRoot;
2032
+ private focusInitial;
2033
+ private trapFocus;
2034
+ private getFocusable;
2035
+ private lockScroll;
2036
+ private unlockScroll;
2037
+ private restoreFocus;
2038
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaBottomSheet, never>;
2039
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaBottomSheet, "dga-bottom-sheet", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "snap": { "alias": "snap"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*", "[dgaBottomSheetActions]"], true, never>;
2040
+ }
2041
+
2042
+ /** Matches tooltip placements (logical start/end for RTL). */
2043
+ type DgaPopoverPlacement = 'top' | 'bottom' | 'start' | 'end';
2044
+ /**
2045
+ * Anchored popover: default slot = trigger; project the panel with `[dgaPopoverPanel]`.
2046
+ *
2047
+ * @example
2048
+ * ```html
2049
+ * <dga-popover [(open)]="open" placement="bottom">
2050
+ * <button type="button">فتح</button>
2051
+ * <div dgaPopoverPanel class="p-xl">محتوى اللوحة</div>
2052
+ * </dga-popover>
2053
+ * ```
2054
+ */
2055
+ declare class DgaPopover {
2056
+ private readonly host;
2057
+ private readonly destroyRef;
2058
+ private readonly injector;
2059
+ private readonly triggerRef;
2060
+ private readonly panelRef;
2061
+ readonly open: _angular_core.ModelSignal<boolean>;
2062
+ readonly placement: _angular_core.InputSignal<DgaPopoverPlacement>;
2063
+ readonly closeOnOutside: _angular_core.InputSignalWithTransform<boolean, unknown>;
2064
+ readonly opened: _angular_core.OutputEmitterRef<void>;
2065
+ readonly closed: _angular_core.OutputEmitterRef<void>;
2066
+ readonly panelStyle: _angular_core.WritableSignal<Record<string, string>>;
2067
+ private readonly seq;
2068
+ readonly triggerId: string;
2069
+ readonly panelId: string;
2070
+ private readonly onReposition;
2071
+ constructor();
2072
+ panelClasses(): string;
2073
+ onTriggerClick(event: MouseEvent): void;
2074
+ onTriggerKey(event: KeyboardEvent): void;
2075
+ onPanelKey(event: KeyboardEvent): void;
2076
+ toggle(): void;
2077
+ openPanel(): void;
2078
+ close(restoreFocus?: boolean): void;
2079
+ onDocumentPointer(event: PointerEvent): void;
2080
+ onDocumentKeydown(event: KeyboardEvent): void;
2081
+ private portalPanelToBody;
2082
+ private detachPortaledPanel;
2083
+ private focusPanel;
2084
+ private syncPanelPosition;
2085
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPopover, never>;
2086
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPopover, "dga-popover", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "closeOnOutside": { "alias": "closeOnOutside"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["*", "[dgaPopoverPanel]"], true, never>;
2087
+ }
2088
+
1444
2089
  interface DgaImagePopupImage {
1445
2090
  src: string;
1446
2091
  alt?: string;
@@ -1452,8 +2097,12 @@ type DgaImagePopupAnimation = 'fade' | 'scale' | 'slide' | 'zoom' | 'none';
1452
2097
  /** Cross-fade when changing the active image. */
1453
2098
  type DgaImagePopupImageTransition = 'fade' | 'none';
1454
2099
  declare class DgaImagePopup {
2100
+ private readonly doc;
1455
2101
  private readonly injector;
2102
+ private readonly host;
1456
2103
  private readonly panel;
2104
+ /** Marks the in-page slot while the host is moved to `document.body`. */
2105
+ private anchor;
1457
2106
  readonly images: _angular_core.InputSignal<DgaImagePopupSource[]>;
1458
2107
  readonly open: _angular_core.ModelSignal<boolean>;
1459
2108
  readonly activeIndex: _angular_core.ModelSignal<number>;
@@ -1496,6 +2145,9 @@ declare class DgaImagePopup {
1496
2145
  onKeydown(event: KeyboardEvent): void;
1497
2146
  onAnimationEnd(event: AnimationEvent): void;
1498
2147
  private finishClose;
2148
+ /** Lift the host out of ancestor stacking contexts (docs header / sidebar). */
2149
+ private portalHostToBody;
2150
+ private restoreHost;
1499
2151
  private focusInitial;
1500
2152
  private trapFocus;
1501
2153
  private getFocusable;
@@ -1506,6 +2158,63 @@ declare class DgaImagePopup {
1506
2158
  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>;
1507
2159
  }
1508
2160
 
2161
+ type DgaFilePreviewKind = 'image' | 'pdf' | 'unknown';
2162
+ /** Infer preview kind from MIME type and/or file name / URL path. */
2163
+ declare function dgaDetectFilePreviewKind(src: string, opts?: {
2164
+ fileName?: string;
2165
+ mimeType?: string;
2166
+ }): DgaFilePreviewKind;
2167
+
2168
+ type DgaFilePreviewPresentation = 'inline' | 'dialog' | 'drawer';
2169
+ /**
2170
+ * File preview for images and PDFs. Use `presentation="dialog"|"drawer"` with
2171
+ * `[(open)]` for overlay mode, or `inline` for embedded preview.
2172
+ *
2173
+ * @example
2174
+ * ```html
2175
+ * <dga-file-preview
2176
+ * [(open)]="open"
2177
+ * presentation="dialog"
2178
+ * [src]="url"
2179
+ * fileName="receipt.pdf"
2180
+ * />
2181
+ * ```
2182
+ */
2183
+ declare class DgaFilePreview {
2184
+ private readonly sanitizer;
2185
+ /** Object URL, remote URL, or data URL to preview. */
2186
+ readonly src: _angular_core.InputSignal<string>;
2187
+ /** Force kind, or `auto` to detect from name/MIME/URL. */
2188
+ readonly type: _angular_core.InputSignal<"auto" | DgaFilePreviewKind>;
2189
+ readonly fileName: _angular_core.InputSignal<string>;
2190
+ readonly mimeType: _angular_core.InputSignal<string>;
2191
+ readonly alt: _angular_core.InputSignal<string>;
2192
+ readonly title: _angular_core.InputSignal<string>;
2193
+ readonly presentation: _angular_core.InputSignal<DgaFilePreviewPresentation>;
2194
+ /** Overlay open state (dialog / drawer). */
2195
+ readonly open: _angular_core.ModelSignal<boolean>;
2196
+ readonly dialogSize: _angular_core.InputSignal<DgaDialogSize>;
2197
+ readonly drawerSide: _angular_core.InputSignal<DgaDrawerSide>;
2198
+ readonly showDownload: _angular_core.InputSignalWithTransform<boolean, unknown>;
2199
+ readonly downloadName: _angular_core.InputSignal<string>;
2200
+ readonly closeLabelInput: _angular_core.InputSignal<string>;
2201
+ readonly closed: _angular_core.OutputEmitterRef<void>;
2202
+ readonly downloaded: _angular_core.OutputEmitterRef<string>;
2203
+ readonly resolvedKind: _angular_core.Signal<DgaFilePreviewKind>;
2204
+ readonly safePdfSrc: _angular_core.Signal<SafeResourceUrl | null>;
2205
+ resolvedFileName(): string;
2206
+ resolvedTitle(): string;
2207
+ resolvedAlt(): string;
2208
+ closeLabel(): string;
2209
+ downloadLabel(): string;
2210
+ unknownTitle(): string;
2211
+ bodyClasses(): string;
2212
+ hostInlineClasses(): string;
2213
+ onDownload(): void;
2214
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFilePreview, never>;
2215
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaFilePreview, "dga-file-preview", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "mimeType": { "alias": "mimeType"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "presentation": { "alias": "presentation"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "dialogSize": { "alias": "dialogSize"; "required": false; "isSignal": true; }; "drawerSide": { "alias": "drawerSide"; "required": false; "isSignal": true; }; "showDownload": { "alias": "showDownload"; "required": false; "isSignal": true; }; "downloadName": { "alias": "downloadName"; "required": false; "isSignal": true; }; "closeLabelInput": { "alias": "closeLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; "downloaded": "downloaded"; }, never, never, true, never>;
2216
+ }
2217
+
1509
2218
  /** Logical placements (RTL-aware via inset-inline). */
1510
2219
  type DgaTourPlacement = 'top' | 'bottom' | 'start' | 'end' | 'auto';
1511
2220
  type DgaTourPersist = 'local' | 'session' | 'none';
@@ -1634,8 +2343,8 @@ declare class DgaAlert {
1634
2343
  readonly textClasses: _angular_core.Signal<"flex flex-col gap-xs" | "min-w-0">;
1635
2344
  readonly titleClasses: _angular_core.Signal<string>;
1636
2345
  readonly descriptionClasses: _angular_core.Signal<string>;
1637
- readonly iconName: _angular_core.Signal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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">;
1638
- readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
2346
+ readonly iconName: _angular_core.Signal<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut">;
2347
+ readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1639
2348
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1640
2349
  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>;
1641
2350
  }
@@ -1864,6 +2573,91 @@ declare class DgaShare {
1864
2573
  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>;
1865
2574
  }
1866
2575
 
2576
+ /**
2577
+ * Print-ready region: wraps ticket/receipt content, hides page chrome on print,
2578
+ * and triggers `window.print()`. Pair with `dga-qr` / `dga-barcode`.
2579
+ *
2580
+ * Mark non-printable chrome inside the region with class `dga-print-hide`
2581
+ * (or put the trigger outside and call `print()`).
2582
+ *
2583
+ * @example
2584
+ * ```html
2585
+ * <dga-print documentTitle="Ticket #42">
2586
+ * <dga-qr value="…" />
2587
+ * <dga-barcode value="TKT-42" />
2588
+ * </dga-print>
2589
+ * ```
2590
+ */
2591
+ declare class DgaPrint {
2592
+ private readonly host;
2593
+ private readonly destroyRef;
2594
+ /** Document title while the print dialog is open. */
2595
+ readonly documentTitle: _angular_core.InputSignal<string>;
2596
+ /** `@page` margin token (CSS length). */
2597
+ readonly margin: _angular_core.InputSignal<string>;
2598
+ /** Show the built-in print button. */
2599
+ readonly showTrigger: _angular_core.InputSignalWithTransform<boolean, unknown>;
2600
+ /** Override trigger label (defaults to Print / طباعة). */
2601
+ readonly triggerLabel: _angular_core.InputSignal<string>;
2602
+ readonly beforePrint: _angular_core.OutputEmitterRef<void>;
2603
+ readonly afterPrint: _angular_core.OutputEmitterRef<void>;
2604
+ private readonly onAfterPrint;
2605
+ private previousTitle;
2606
+ private printing;
2607
+ private fallbackTimer;
2608
+ constructor();
2609
+ hostClasses(): string;
2610
+ resolvedTriggerLabel(): string;
2611
+ /** Open the browser print dialog for this region. */
2612
+ print(): void;
2613
+ private cleanup;
2614
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPrint, never>;
2615
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPrint, "dga-print", never, { "documentTitle": { "alias": "documentTitle"; "required": false; "isSignal": true; }; "margin": { "alias": "margin"; "required": false; "isSignal": true; }; "showTrigger": { "alias": "showTrigger"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; }, { "beforePrint": "beforePrint"; "afterPrint": "afterPrint"; }, never, ["*"], true, never>;
2616
+ }
2617
+
2618
+ type DgaOfflineMode = 'offline' | 'online' | 'both';
2619
+ /**
2620
+ * Connection status banner for field apps. Listens to `online` / `offline`
2621
+ * events; override with `forceOffline` in demos.
2622
+ *
2623
+ * Distinct from site-wide `dga-announcement-bar` — this is a page/app status strip.
2624
+ *
2625
+ * @example
2626
+ * ```html
2627
+ * <dga-offline sticky />
2628
+ * ```
2629
+ */
2630
+ declare class DgaOffline {
2631
+ private readonly destroyRef;
2632
+ /** Show when offline, when back online, or both. */
2633
+ readonly mode: _angular_core.InputSignal<DgaOfflineMode>;
2634
+ /** Sticky top strip (uses `--z-index-banner`). */
2635
+ readonly sticky: _angular_core.InputSignalWithTransform<boolean, unknown>;
2636
+ /** Allow dismissing the current state until connectivity changes. */
2637
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
2638
+ readonly dismissLabel: _angular_core.InputSignal<string>;
2639
+ /** Override offline copy. */
2640
+ readonly offlineMessage: _angular_core.InputSignal<string>;
2641
+ /** Override online recovery copy. */
2642
+ readonly onlineMessage: _angular_core.InputSignal<string>;
2643
+ /** Demo / test override — when set, ignores navigator.onLine. */
2644
+ readonly forceOffline: _angular_core.InputSignal<boolean | null>;
2645
+ readonly onlineChange: _angular_core.OutputEmitterRef<boolean>;
2646
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
2647
+ private readonly navigatorOnline;
2648
+ private readonly dismissedState;
2649
+ readonly isOffline: _angular_core.Signal<boolean>;
2650
+ readonly visible: _angular_core.Signal<boolean>;
2651
+ readonly barClasses: _angular_core.Signal<string>;
2652
+ constructor();
2653
+ resolvedMessage(): string;
2654
+ defaultDismissLabel(): string;
2655
+ dismiss(): void;
2656
+ private setOnline;
2657
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaOffline, never>;
2658
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaOffline, "dga-offline", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "dismissLabel": { "alias": "dismissLabel"; "required": false; "isSignal": true; }; "offlineMessage": { "alias": "offlineMessage"; "required": false; "isSignal": true; }; "onlineMessage": { "alias": "onlineMessage"; "required": false; "isSignal": true; }; "forceOffline": { "alias": "forceOffline"; "required": false; "isSignal": true; }; }, { "onlineChange": "onlineChange"; "dismissed": "dismissed"; }, never, never, true, never>;
2659
+ }
2660
+
1867
2661
  /**
1868
2662
  * Visually hidden until focused — first tab stop for keyboard users.
1869
2663
  * Place near the top of the document; `href` should target main content id.
@@ -1878,6 +2672,37 @@ declare class DgaSkipLink {
1878
2672
  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>;
1879
2673
  }
1880
2674
 
2675
+ interface DgaNotificationItem {
2676
+ id: string;
2677
+ title: string;
2678
+ body?: string;
2679
+ time?: string;
2680
+ read?: boolean;
2681
+ href?: string;
2682
+ }
2683
+ /**
2684
+ * Page-level notification inbox (distinct from header overlay config).
2685
+ */
2686
+ declare class DgaNotificationInbox {
2687
+ private readonly uiLocale;
2688
+ private readonly ar;
2689
+ readonly items: _angular_core.InputSignal<DgaNotificationItem[]>;
2690
+ readonly title: _angular_core.InputSignal<string | undefined>;
2691
+ readonly itemClick: _angular_core.OutputEmitterRef<DgaNotificationItem>;
2692
+ readonly markRead: _angular_core.OutputEmitterRef<DgaNotificationItem>;
2693
+ readonly markAllRead: _angular_core.OutputEmitterRef<void>;
2694
+ readonly resolvedTitle: _angular_core.Signal<string>;
2695
+ readonly unreadCount: _angular_core.Signal<number>;
2696
+ readonly markAllLabel: _angular_core.Signal<"تعيين الكل كمقروء" | "Mark all as read">;
2697
+ readonly emptyTitle: _angular_core.Signal<"لا توجد إشعارات" | "No notifications">;
2698
+ readonly emptyBody: _angular_core.Signal<"ستظهر الإشعارات الجديدة هنا." | "New notifications will appear here.">;
2699
+ readonly unreadLabel: _angular_core.Signal<"غير مقروء" | "Unread">;
2700
+ itemClass(item: DgaNotificationItem): string;
2701
+ onItem(item: DgaNotificationItem): void;
2702
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNotificationInbox, never>;
2703
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNotificationInbox, "dga-notification-inbox", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "markRead": "markRead"; "markAllRead": "markAllRead"; }, never, never, true, never>;
2704
+ }
2705
+
1881
2706
  declare class DgaAccordionItem {
1882
2707
  private readonly accordion;
1883
2708
  readonly title: _angular_core.InputSignal<string>;
@@ -2106,6 +2931,8 @@ declare class DgaStepper {
2106
2931
  readonly steps: _angular_core.InputSignal<DgaStep[]>;
2107
2932
  readonly active: _angular_core.ModelSignal<number>;
2108
2933
  readonly label: _angular_core.InputSignal<string>;
2934
+ /** Pulses the current step. Off unless set, and skipped when motion is reduced. */
2935
+ readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
2109
2936
  /**
2110
2937
  * Optional veto for step clicks (e.g. form wizard validation).
2111
2938
  * Return false to keep the current step.
@@ -2118,7 +2945,7 @@ declare class DgaStepper {
2118
2945
  railTone(index: number): string;
2119
2946
  go(index: number): void;
2120
2947
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaStepper, never>;
2121
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaStepper, "dga-stepper", never, { "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "beforeActiveChange": { "alias": "beforeActiveChange"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, never, never, true, never>;
2948
+ 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; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "beforeActiveChange": { "alias": "beforeActiveChange"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, never, never, true, never>;
2122
2949
  }
2123
2950
 
2124
2951
  interface DgaTocItem {
@@ -2137,6 +2964,56 @@ declare class DgaToc {
2137
2964
  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>;
2138
2965
  }
2139
2966
 
2967
+ /**
2968
+ * Accessible tree view (WAI-ARIA tree). Expand/collapse, keyboard navigation,
2969
+ * optional single or multi select.
2970
+ *
2971
+ * @example
2972
+ * ```html
2973
+ * <dga-tree
2974
+ * [items]="org"
2975
+ * [(expandedIds)]="expanded"
2976
+ * [(selectedIds)]="selected"
2977
+ * />
2978
+ * ```
2979
+ */
2980
+ declare class DgaTree {
2981
+ private static seq;
2982
+ private readonly host;
2983
+ private readonly uid;
2984
+ readonly items: _angular_core.InputSignal<DgaTreeItem[]>;
2985
+ readonly label: _angular_core.InputSignal<string>;
2986
+ readonly expandedIds: _angular_core.ModelSignal<string[]>;
2987
+ readonly selectedIds: _angular_core.ModelSignal<string[]>;
2988
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
2989
+ readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2990
+ /** Expand a node when it becomes selected. */
2991
+ readonly expandOnSelect: _angular_core.InputSignalWithTransform<boolean, unknown>;
2992
+ readonly selectionChange: _angular_core.OutputEmitterRef<string[]>;
2993
+ readonly expandChange: _angular_core.OutputEmitterRef<string[]>;
2994
+ readonly focusId: _angular_core.WritableSignal<string | null>;
2995
+ readonly expandedSet: _angular_core.Signal<Set<string>>;
2996
+ readonly selectedSet: _angular_core.Signal<Set<string>>;
2997
+ readonly visibleNodes: _angular_core.Signal<DgaTreeItem[]>;
2998
+ resolvedLabel(): string;
2999
+ nodeDomId(id: string): string;
3000
+ hasChildren(item: DgaTreeItem): boolean;
3001
+ isExpanded(id: string): boolean;
3002
+ isSelected(id: string): boolean;
3003
+ twistIcon(id: string): 'chevronDown' | 'chevronLeft' | 'chevronRight';
3004
+ expandAria(item: DgaTreeItem): string;
3005
+ onNodeFocus(id: string): void;
3006
+ onNodeClick(item: DgaTreeItem, event: MouseEvent): void;
3007
+ toggleExpand(id: string, event?: Event): void;
3008
+ selectNode(id: string): void;
3009
+ onTreeKey(event: KeyboardEvent): void;
3010
+ private parentOf;
3011
+ private moveFocus;
3012
+ private focusNode;
3013
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTree, never>;
3014
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTree, "dga-tree", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandOnSelect": { "alias": "expandOnSelect"; "required": false; "isSignal": true; }; }, { "expandedIds": "expandedIdsChange"; "selectedIds": "selectedIdsChange"; "selectionChange": "selectionChange"; "expandChange": "expandChange"; }, never, never, true, never>;
3015
+ }
3016
+
2140
3017
  interface DgaSideNavItem {
2141
3018
  label: string;
2142
3019
  value: string;
@@ -2277,7 +3154,7 @@ declare class DgaNavRail {
2277
3154
  readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2278
3155
  readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
2279
3156
  readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
2280
- readonly edgeAttr: _angular_core.Signal<"start" | "end" | "left" | "right" | null>;
3157
+ readonly edgeAttr: _angular_core.Signal<"right" | "left" | "start" | "end" | null>;
2281
3158
  readonly offsetCss: _angular_core.Signal<string>;
2282
3159
  readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
2283
3160
  readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;
@@ -2317,6 +3194,54 @@ declare class DgaFilterBar {
2317
3194
  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>;
2318
3195
  }
2319
3196
 
3197
+ type DgaSearchBarSize = DgaFormControlSize;
3198
+ /**
3199
+ * Composed search chrome: leading icon, field, clear, and submit.
3200
+ * Distinct from `dga-autocomplete` (suggestion picker).
3201
+ *
3202
+ * @example
3203
+ * ```html
3204
+ * <dga-search-bar
3205
+ * [(value)]="q"
3206
+ * [placeholder]="'Search services'"
3207
+ * (submit)="onSearch($event)"
3208
+ * />
3209
+ * ```
3210
+ */
3211
+ declare class DgaSearchBar implements ControlValueAccessor {
3212
+ readonly value: _angular_core.ModelSignal<string>;
3213
+ readonly controlId: _angular_core.InputSignal<string>;
3214
+ readonly name: _angular_core.InputSignal<string>;
3215
+ readonly label: _angular_core.InputSignal<string>;
3216
+ readonly placeholder: _angular_core.InputSignal<string>;
3217
+ readonly submitLabelInput: _angular_core.InputSignal<string>;
3218
+ readonly size: _angular_core.InputSignal<DgaFormControlSize>;
3219
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
3220
+ readonly showSubmit: _angular_core.InputSignalWithTransform<boolean, unknown>;
3221
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
3222
+ private readonly cvaDisabled;
3223
+ readonly disabled: _angular_core.Signal<boolean>;
3224
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
3225
+ readonly submit: _angular_core.OutputEmitterRef<string>;
3226
+ readonly cleared: _angular_core.OutputEmitterRef<void>;
3227
+ readonly resolvedStatus: _angular_core.Signal<_a_nemreen_dga_ui.DgaFormStatus>;
3228
+ readonly groupClasses: _angular_core.Signal<string>;
3229
+ private onChange;
3230
+ onTouched: () => void;
3231
+ resolvedLabel(): string;
3232
+ submitLabel(): string;
3233
+ clearAria(): string;
3234
+ onInput(raw: string): void;
3235
+ onClear(): void;
3236
+ onSubmit(event: Event): void;
3237
+ writeValue(value: string): void;
3238
+ registerOnChange(fn: (value: string) => void): void;
3239
+ registerOnTouched(fn: () => void): void;
3240
+ setDisabledState(isDisabled: boolean): void;
3241
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSearchBar, never>;
3242
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSearchBar, "dga-search-bar", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "submitLabelInput": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "showSubmit": { "alias": "showSubmit"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "submit": "submit"; "cleared": "cleared"; }, never, never, true, never>;
3243
+ }
3244
+
2320
3245
  declare class DgaToolbar {
2321
3246
  readonly label: _angular_core.InputSignal<string>;
2322
3247
  readonly barClasses: _angular_core.Signal<string>;
@@ -2418,7 +3343,7 @@ declare class DgaCard {
2418
3343
  /** Clamp description lines (0 = no clamp). */
2419
3344
  readonly descriptionClamp: _angular_core.InputSignal<number>;
2420
3345
  /** Featured logo icon (renders `dga-icon-badge` unless `[dgaCardLead]` is projected). */
2421
- readonly icon: _angular_core.InputSignal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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" | null>;
3346
+ readonly icon: _angular_core.InputSignal<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut" | null>;
2422
3347
  readonly iconSize: _angular_core.InputSignal<DgaIconBadgeSize>;
2423
3348
  readonly iconAppearance: _angular_core.InputSignal<DgaIconBadgeAppearance>;
2424
3349
  readonly badges: _angular_core.InputSignal<DgaCardBadge[]>;
@@ -2457,7 +3382,7 @@ declare class DgaCardMedia {
2457
3382
  readonly src: _angular_core.InputSignal<string>;
2458
3383
  readonly alt: _angular_core.InputSignal<string>;
2459
3384
  /** Aspect ratio utility; default 16/10 portal news cards. */
2460
- readonly ratio: _angular_core.InputSignal<"video" | "wide" | "square">;
3385
+ readonly ratio: _angular_core.InputSignal<"video" | "square" | "wide">;
2461
3386
  readonly classes: _angular_core.Signal<string>;
2462
3387
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCardMedia, never>;
2463
3388
  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>;
@@ -2823,11 +3748,14 @@ interface DgaHeroSlide {
2823
3748
  declare class DgaHero {
2824
3749
  private readonly destroyRef;
2825
3750
  private readonly host;
3751
+ private readonly doc;
2826
3752
  private readonly swipe;
2827
3753
  private autoplayTimer;
2828
3754
  private readonly autoplayPaused;
2829
3755
  /** Skip CSS transitions on first layout so slides don't animate in like a locale wipe. */
2830
3756
  private readonly motionReady;
3757
+ /** First portal image already hinted in `<head>`, so later slides don't compete. */
3758
+ private lcpPreloadHref;
2831
3759
  /** Single-slide API. */
2832
3760
  readonly title: _angular_core.InputSignal<string>;
2833
3761
  readonly description: _angular_core.InputSignal<string>;
@@ -2881,6 +3809,8 @@ declare class DgaHero {
2881
3809
  portalCtaVariant(): 'inverse' | 'primary';
2882
3810
  /** Secondary is always outline - inverse outline on dark portal surfaces. */
2883
3811
  secondaryCtaVariant(): 'outlineInverse' | 'outline';
3812
+ /** Off-screen carousel slides stay in the DOM for the push animation. */
3813
+ slideInactive(i: number): boolean;
2884
3814
  slideShellClass(i: number): string;
2885
3815
  clampedIndex(): number;
2886
3816
  activeTitle(): string;
@@ -2911,6 +3841,10 @@ declare class DgaHero {
2911
3841
  onPointerUp(event: PointerEvent): void;
2912
3842
  onPointerCancel(event: PointerEvent): void;
2913
3843
  private isRtl;
3844
+ /** Portal background that should win LCP. Carousels hint the first slide only. */
3845
+ private lcpImage;
3846
+ private mountLcpPreload;
3847
+ private upsertImagePreload;
2914
3848
  pauseAutoplay(): void;
2915
3849
  resumeAutoplay(): void;
2916
3850
  onPrimary(index?: number): void;
@@ -2967,7 +3901,7 @@ declare class DgaAnnouncementBar {
2967
3901
  readonly align: _angular_core.InputSignal<DgaAnnouncementAlign>;
2968
3902
  readonly actionVariant: _angular_core.InputSignal<DgaAnnouncementActionVariant>;
2969
3903
  readonly elevation: _angular_core.InputSignal<DgaAnnouncementElevation>;
2970
- readonly icon: _angular_core.InputSignal<"success" | "info" | "warning" | "error" | "access" | "check" | "close" | "helpCircle" | "alertCircle" | "eye" | "eyeOff" | "eyeOffSlash" | "filter" | "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" | null>;
3904
+ readonly icon: _angular_core.InputSignal<"link" | "close" | "copy" | "error" | "pause" | "menu" | "search" | "filter" | "mask" | "success" | "info" | "warning" | "access" | "alertCircle" | "ambulance" | "apple" | "arrowDown" | "arrowDown02" | "arrowLeft" | "arrowLeft02" | "arrowNext" | "arrowNext02" | "arrowPrev" | "arrowPrev02" | "arrowRight" | "arrowRight02" | "arrowUp" | "arrowUp02" | "award" | "badgeCheck" | "bell" | "bellAlt" | "book" | "bookType" | "brain" | "building" | "calendar" | "calendarAlt" | "cart" | "check" | "checkCircle" | "checkCircleAlt" | "chevronDown" | "chevronLeft" | "chevronRight" | "clock" | "cloud" | "colorPicker" | "colors" | "cookie" | "desert" | "devices" | "disability" | "door" | "download" | "droplet" | "external" | "eye" | "eyeOff" | "eyeOffSlash" | "facebook" | "fire" | "flash" | "folder" | "glasses" | "globe" | "heading" | "headphones" | "helpCircle" | "highlighter" | "home" | "huawei" | "idCard" | "instagram" | "letterSpacing" | "linkAlt" | "linkedin" | "location" | "lock" | "lockPassword" | "logout" | "mail" | "maximize" | "menuAlt" | "message" | "mic" | "minus" | "moon" | "moonAlt" | "moonCloud" | "moreHorizontal" | "moreVertical" | "paintBoard" | "phone" | "playStore" | "plus" | "plusSign" | "police" | "printer" | "rain" | "rainZap" | "refresh" | "riyal" | "share" | "shrink" | "smartphone" | "snow" | "sort" | "sortDown" | "sortUp" | "star" | "starFilled" | "sun" | "sunAlt" | "sunCloud" | "textAlign" | "textFont" | "textUnderline" | "touch" | "tradeDown" | "tradeUp" | "translation" | "upload" | "user" | "users" | "whatsapp" | "wheelchair" | "wind" | "x" | "youtube" | "zoomIn" | "zoomOut" | null>;
2971
3905
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
2972
3906
  readonly dismissLabel: _angular_core.InputSignal<string>;
2973
3907
  readonly actionLabel: _angular_core.InputSignal<string>;
@@ -3115,6 +4049,68 @@ declare class DgaLogoTile {
3115
4049
  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>;
3116
4050
  }
3117
4051
 
4052
+ type DgaThemeToggleSurface = 'default' | 'compact';
4053
+ /**
4054
+ * Dark / light theme toggle wired to {@link DgaThemeService}.
4055
+ * Bind icons and labels to `themeChanges` (updated when the reveal commits).
4056
+ *
4057
+ * @example
4058
+ * ```html
4059
+ * <dga-theme-toggle />
4060
+ * <dga-theme-toggle surface="compact" />
4061
+ * ```
4062
+ */
4063
+ declare class DgaThemeToggle {
4064
+ private readonly theme;
4065
+ /** Tooltip / aria when switching *to* dark. */
4066
+ readonly darkLabel: _angular_core.InputSignal<string>;
4067
+ /** Tooltip / aria when switching *to* light. */
4068
+ readonly lightLabel: _angular_core.InputSignal<string>;
4069
+ /** Hit-target sizing. */
4070
+ readonly surface: _angular_core.InputSignal<DgaThemeToggleSurface>;
4071
+ readonly isDark: _angular_core.Signal<boolean>;
4072
+ readonly label: _angular_core.Signal<string>;
4073
+ readonly btnSize: _angular_core.Signal<"sm" | "md">;
4074
+ readonly iconSize: _angular_core.Signal<"sm" | "md">;
4075
+ readonly actionClass: _angular_core.Signal<string>;
4076
+ onToggle(event: Event): void;
4077
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaThemeToggle, never>;
4078
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaThemeToggle, "dga-theme-toggle", never, { "darkLabel": { "alias": "darkLabel"; "required": false; "isSignal": true; }; "lightLabel": { "alias": "lightLabel"; "required": false; "isSignal": true; }; "surface": { "alias": "surface"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4079
+ }
4080
+
4081
+ /**
4082
+ * Language picker listing registered locales from {@link DgaLocaleService}.
4083
+ * Closes on outside pointer / Escape. Dropdown is absolutely positioned.
4084
+ *
4085
+ * @example
4086
+ * ```html
4087
+ * <dga-locale-toggle />
4088
+ * <dga-locale-toggle tooltipLabel="Language" />
4089
+ * ```
4090
+ */
4091
+ declare class DgaLocaleToggle {
4092
+ private readonly localeService;
4093
+ private readonly hostRef;
4094
+ private readonly destroyRef;
4095
+ /** Override the automatic “Language: …” tooltip. */
4096
+ readonly tooltipLabel: _angular_core.InputSignal<string | undefined>;
4097
+ readonly locales: readonly _a_nemreen_dga_tokens.DgaLocaleDefinition[];
4098
+ readonly open: _angular_core.WritableSignal<boolean>;
4099
+ readonly locale: _angular_core.Signal<string>;
4100
+ private readonly seq;
4101
+ readonly listId: string;
4102
+ readonly triggerClass: string;
4103
+ readonly menuClass: string;
4104
+ readonly tooltip: _angular_core.Signal<string>;
4105
+ constructor();
4106
+ toggleMenu(event: Event): void;
4107
+ pick(code: DgaLocale, event: Event): void;
4108
+ onDocPointer(event: PointerEvent): void;
4109
+ onEscape(): void;
4110
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaLocaleToggle, never>;
4111
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaLocaleToggle, "dga-locale-toggle", never, { "tooltipLabel": { "alias": "tooltipLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4112
+ }
4113
+
3118
4114
  declare class DgaPersona {
3119
4115
  readonly name: _angular_core.InputSignal<string>;
3120
4116
  readonly subtitle: _angular_core.InputSignal<string>;
@@ -3366,6 +4362,198 @@ declare class DgaRiyal {
3366
4362
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaRiyal, "dga-riyal", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "amount": { "alias": "amount"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3367
4363
  }
3368
4364
 
4365
+ type DgaQrErrorCorrection = 'L' | 'M' | 'Q' | 'H';
4366
+ interface DgaQrMatrix {
4367
+ /** Modules per side (21–177). */
4368
+ size: number;
4369
+ /** modules[y][x] — true = dark. */
4370
+ modules: boolean[][];
4371
+ }
4372
+ /**
4373
+ * Encode text/URL into a QR module matrix.
4374
+ * Throws RangeError when the payload exceeds QR capacity.
4375
+ */
4376
+ declare function dgaEncodeQr(text: string, errorCorrection?: DgaQrErrorCorrection): DgaQrMatrix;
4377
+
4378
+ type DgaQrView = 'svg' | 'canvas' | 'img';
4379
+ type DgaQrSizeToken = 'sm' | 'md' | 'lg' | 'xl';
4380
+ type DgaQrSize = DgaQrSizeToken | number;
4381
+ type DgaQrAnimate = 'none' | 'fade' | 'scale' | 'reveal';
4382
+
4383
+ /**
4384
+ * QR code generator: pass a URL/text via `value` and it renders automatically.
4385
+ *
4386
+ * @example
4387
+ * ```html
4388
+ * <dga-qr value="https://example.gov.sa" size="md" [actions]="true" />
4389
+ * <dga-qr value="https://example.gov.sa" view="canvas" color="#006c35" animate="scale" />
4390
+ * ```
4391
+ */
4392
+ declare class DgaQr {
4393
+ private readonly toasts;
4394
+ private readonly canvasEl;
4395
+ /** Payload to encode (URL or any text). */
4396
+ readonly value: _angular_core.InputSignal<string>;
4397
+ /** Render target. */
4398
+ readonly view: _angular_core.InputSignal<DgaQrView>;
4399
+ /** Token size or pixel length. */
4400
+ readonly size: _angular_core.InputSignal<DgaQrSize>;
4401
+ /** Dark module color. */
4402
+ readonly color: _angular_core.InputSignal<string>;
4403
+ /** Light / background color. */
4404
+ readonly background: _angular_core.InputSignal<string>;
4405
+ /** Error correction level. */
4406
+ readonly errorCorrection: _angular_core.InputSignal<DgaQrErrorCorrection>;
4407
+ /** Quiet-zone modules around the symbol. */
4408
+ readonly margin: _angular_core.InputSignalWithTransform<number, unknown>;
4409
+ /** Accessible label when the QR is meaningful alone. */
4410
+ readonly label: _angular_core.InputSignal<string>;
4411
+ /** Show Download + Copy buttons. */
4412
+ readonly actions: _angular_core.InputSignalWithTransform<boolean, unknown>;
4413
+ /** Load-in animation; replays when `value` changes. */
4414
+ readonly animate: _angular_core.InputSignal<DgaQrAnimate>;
4415
+ /** Download filename base (extension added automatically). */
4416
+ readonly downloadName: _angular_core.InputSignal<string>;
4417
+ readonly ready: _angular_core.OutputEmitterRef<DgaQrMatrix>;
4418
+ readonly downloaded: _angular_core.OutputEmitterRef<string>;
4419
+ readonly copied: _angular_core.OutputEmitterRef<string>;
4420
+ readonly matrix: _angular_core.WritableSignal<DgaQrMatrix | null>;
4421
+ readonly playTick: _angular_core.WritableSignal<number>;
4422
+ readonly imgSrc: _angular_core.WritableSignal<string>;
4423
+ readonly sizeToken: _angular_core.Signal<DgaQrSizeToken | null>;
4424
+ readonly pixelSize: _angular_core.Signal<number>;
4425
+ readonly sizeCss: _angular_core.Signal<string>;
4426
+ readonly svgViewBox: _angular_core.Signal<string>;
4427
+ readonly svgPath: _angular_core.Signal<string>;
4428
+ constructor();
4429
+ hostClasses(): string;
4430
+ frameClasses(): string;
4431
+ actionsLabel(): string;
4432
+ downloadLabel(): string;
4433
+ copyLabel(): string;
4434
+ onCopy(): Promise<void>;
4435
+ onDownload(): void;
4436
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaQr, never>;
4437
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaQr, "dga-qr", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "errorCorrection": { "alias": "errorCorrection"; "required": false; "isSignal": true; }; "margin": { "alias": "margin"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "downloadName": { "alias": "downloadName"; "required": false; "isSignal": true; }; }, { "ready": "ready"; "downloaded": "downloaded"; "copied": "copied"; }, never, never, true, never>;
4438
+ }
4439
+
4440
+ /**
4441
+ * Compact Code 128 encoder (Code Set B + Auto C for digit pairs).
4442
+ * Patterns follow ISO/IEC 15417. Zero npm deps — same approach as dga-qr.
4443
+ */
4444
+ interface DgaBarcodeMatrix {
4445
+ /** Bar/space modules left→right (true = bar). Includes quiet zones. */
4446
+ modules: boolean[];
4447
+ /** Human-readable payload that was encoded. */
4448
+ text: string;
4449
+ /** Quiet-zone modules on each side. */
4450
+ quietZone: number;
4451
+ }
4452
+ /**
4453
+ * Encode text as Code 128 (auto B/C). Throws if a character cannot be encoded.
4454
+ */
4455
+ declare function dgaEncodeBarcode(text: string, quietZone?: number): DgaBarcodeMatrix;
4456
+
4457
+ type DgaBarcodeFormat = 'code128';
4458
+ /**
4459
+ * Linear barcode (Code 128). Pair with `dga-qr` on tickets and receipts.
4460
+ *
4461
+ * @example
4462
+ * ```html
4463
+ * <dga-barcode value="TKT-2026-0042" [displayValue]="true" [actions]="true" />
4464
+ * ```
4465
+ */
4466
+ declare class DgaBarcode {
4467
+ /** Payload to encode (ASCII printable). */
4468
+ readonly value: _angular_core.InputSignal<string>;
4469
+ /** Symbology — Code 128 only for now. */
4470
+ readonly format: _angular_core.InputSignal<"code128">;
4471
+ /** Bar height in CSS pixels. */
4472
+ readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
4473
+ /** Module (bar unit) width in CSS pixels. */
4474
+ readonly moduleWidth: _angular_core.InputSignalWithTransform<number, unknown>;
4475
+ /** Quiet-zone modules on each side. */
4476
+ readonly quietZone: _angular_core.InputSignalWithTransform<number, unknown>;
4477
+ /** Show human-readable text under the bars. */
4478
+ readonly displayValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
4479
+ /** Bar color. */
4480
+ readonly color: _angular_core.InputSignal<string>;
4481
+ /** Background / quiet-zone color. */
4482
+ readonly background: _angular_core.InputSignal<string>;
4483
+ /** Accessible label when the barcode is meaningful alone. */
4484
+ readonly label: _angular_core.InputSignal<string>;
4485
+ /** Show download action. */
4486
+ readonly actions: _angular_core.InputSignalWithTransform<boolean, unknown>;
4487
+ /** Download filename base. */
4488
+ readonly downloadName: _angular_core.InputSignal<string>;
4489
+ readonly ready: _angular_core.OutputEmitterRef<DgaBarcodeMatrix>;
4490
+ readonly downloaded: _angular_core.OutputEmitterRef<string>;
4491
+ readonly matrix: _angular_core.WritableSignal<DgaBarcodeMatrix | null>;
4492
+ readonly barHeight: _angular_core.Signal<number>;
4493
+ readonly modulePx: _angular_core.Signal<number>;
4494
+ readonly svgWidth: _angular_core.Signal<number>;
4495
+ readonly svgViewBox: _angular_core.Signal<string>;
4496
+ readonly svgPath: _angular_core.Signal<string>;
4497
+ constructor();
4498
+ hostClasses(): string;
4499
+ actionsLabel(): string;
4500
+ downloadLabel(): string;
4501
+ onDownload(): void;
4502
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaBarcode, never>;
4503
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaBarcode, "dga-barcode", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "moduleWidth": { "alias": "moduleWidth"; "required": false; "isSignal": true; }; "quietZone": { "alias": "quietZone"; "required": false; "isSignal": true; }; "displayValue": { "alias": "displayValue"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "downloadName": { "alias": "downloadName"; "required": false; "isSignal": true; }; }, { "ready": "ready"; "downloaded": "downloaded"; }, never, never, true, never>;
4504
+ }
4505
+
4506
+ type DgaMapEmbedAspect = 'video' | 'wide' | 'square' | 'portrait';
4507
+ /**
4508
+ * Safe map iframe — only allowlisted embed URLs (Google / Apple / OSM / .gov.sa).
4509
+ * Arbitrary iframes are rejected and an accessible error is shown instead.
4510
+ *
4511
+ * @example
4512
+ * ```html
4513
+ * <dga-map-embed
4514
+ * title="Headquarters"
4515
+ * src="https://www.google.com/maps/embed?pb=…"
4516
+ * aspect="video"
4517
+ * />
4518
+ * ```
4519
+ */
4520
+ declare class DgaMapEmbed {
4521
+ private readonly sanitizer;
4522
+ /** Embed URL — must pass `dgaIsAllowedMapEmbedUrl`. */
4523
+ readonly src: _angular_core.InputSignal<string>;
4524
+ /** Required accessible name for the iframe. */
4525
+ readonly title: _angular_core.InputSignal<string>;
4526
+ /** Aspect-ratio token. */
4527
+ readonly aspect: _angular_core.InputSignal<DgaMapEmbedAspect>;
4528
+ /**
4529
+ * Optional iframe sandbox tokens. Empty by default — Google Maps embeds break
4530
+ * under sandbox; rely on the URL allowlist instead. Set explicitly when needed.
4531
+ */
4532
+ readonly sandbox: _angular_core.InputSignal<string>;
4533
+ /** Optional fixed height in px (overrides aspect when set). */
4534
+ readonly height: _angular_core.InputSignalWithTransform<number | null, unknown>;
4535
+ readonly allowed: _angular_core.Signal<boolean>;
4536
+ readonly canEmbed: _angular_core.Signal<boolean>;
4537
+ readonly safeSrc: _angular_core.Signal<SafeResourceUrl>;
4538
+ readonly aspectCss: _angular_core.Signal<string | null>;
4539
+ readonly shellStyle: _angular_core.Signal<{
4540
+ height: string | null;
4541
+ aspectRatio: string | null;
4542
+ }>;
4543
+ frameClasses(): string;
4544
+ blockedTitle(): string;
4545
+ blockedBody(): string;
4546
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaMapEmbed, never>;
4547
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMapEmbed, "dga-map-embed", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "aspect": { "alias": "aspect"; "required": false; "isSignal": true; }; "sandbox": { "alias": "sandbox"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4548
+ }
4549
+
4550
+ /**
4551
+ * Allowlist check for map embed iframes — never load arbitrary URLs.
4552
+ * Google Maps embed, Apple Maps, OpenStreetMap, and common .gov.sa GIS embeds.
4553
+ */
4554
+ /** True when `url` is a permitted map embed (https + allowlisted host/path). */
4555
+ declare function dgaIsAllowedMapEmbedUrl(url: string): boolean;
4556
+
3369
4557
  type DgaMetricTrend = 'up' | 'down' | 'neutral';
3370
4558
  /** `stat` = portal home metrics (icon well, value, label, centered). */
3371
4559
  type DgaMetricAppearance = 'default' | 'stat';
@@ -3384,23 +4572,267 @@ declare class DgaMetric {
3384
4572
  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>;
3385
4573
  }
3386
4574
 
4575
+ type DgaStatStripTrend = DgaMetricTrend;
4576
+ interface DgaStatStripItem {
4577
+ id?: string;
4578
+ label: string;
4579
+ value: string;
4580
+ delta?: string;
4581
+ trend?: DgaStatStripTrend;
4582
+ }
4583
+ /**
4584
+ * Dense horizontal KPI strip for portal dashboards.
4585
+ * Prefer `dga-metric` when each KPI needs a full card.
4586
+ *
4587
+ * @example
4588
+ * ```html
4589
+ * <dga-stat-strip [items]="stats" />
4590
+ * ```
4591
+ */
4592
+ declare class DgaStatStrip {
4593
+ private readonly uiLocale;
4594
+ readonly items: _angular_core.InputSignal<DgaStatStripItem[]>;
4595
+ /** Accessible name for the strip. */
4596
+ readonly label: _angular_core.InputSignal<string>;
4597
+ /** `divided` adds separators between items. */
4598
+ readonly appearance: _angular_core.InputSignal<"plain" | "divided" | "card">;
4599
+ readonly listClasses: _angular_core.Signal<string>;
4600
+ readonly itemClasses: _angular_core.Signal<string>;
4601
+ trackItem(item: DgaStatStripItem, index: number): string;
4602
+ deltaClasses(trend: DgaStatStripTrend | undefined): string;
4603
+ trendGlyph(trend: DgaStatStripTrend | undefined): string;
4604
+ trendLabel(trend: DgaStatStripTrend | undefined): string;
4605
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaStatStrip, never>;
4606
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaStatStrip, "dga-stat-strip", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4607
+ }
4608
+
4609
+ interface DgaFaqItem {
4610
+ id: string;
4611
+ question: string;
4612
+ answer: string;
4613
+ /** Open this item on first render. */
4614
+ open?: boolean;
4615
+ }
4616
+ /**
4617
+ * FAQ pattern on top of `dga-accordion`: Q&A sections plus optional FAQPage JSON-LD.
4618
+ *
4619
+ * @example
4620
+ * ```html
4621
+ * <dga-faq [items]="items" heading="الأسئلة الشائعة" />
4622
+ * ```
4623
+ */
4624
+ declare class DgaFaq {
4625
+ private readonly document;
4626
+ private readonly destroyRef;
4627
+ readonly items: _angular_core.InputSignal<readonly DgaFaqItem[]>;
4628
+ /** Optional visible heading above the accordion. */
4629
+ readonly heading: _angular_core.InputSignal<string>;
4630
+ /** Accessible name when heading is empty. */
4631
+ readonly label: _angular_core.InputSignal<string>;
4632
+ /** Allow multiple answers open at once. */
4633
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
4634
+ /** Emit FAQPage JSON-LD into `<head>` while mounted. */
4635
+ readonly jsonLd: _angular_core.InputSignalWithTransform<boolean, unknown>;
4636
+ readonly sections: _angular_core.Signal<DgaAccordionSection[]>;
4637
+ private scriptEl;
4638
+ constructor();
4639
+ private writeJsonLd;
4640
+ private removeJsonLd;
4641
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFaq, never>;
4642
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaFaq, "dga-faq", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "jsonLd": { "alias": "jsonLd"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4643
+ }
4644
+
4645
+ /** Calendar system for date values and the picker UI. */
4646
+ type DgaDateCalendar = 'gregorian' | 'hijri';
4647
+ /** Picker UI mode — inferred from `format` tokens when not set explicitly. */
4648
+ type DgaDatePickerMode = 'day' | 'month' | 'year';
4649
+ type DgaDateLocale = string;
4650
+ interface DgaCalendarParts {
4651
+ year: number;
4652
+ month: number;
4653
+ day: number;
4654
+ }
4655
+ declare const DGA_HIJRI_MONTHS: {
4656
+ readonly ar: readonly ["محرم", "صفر", "ربيع الأول", "ربيع الثاني", "جمادى الأولى", "جمادى الآخرة", "رجب", "شعبان", "رمضان", "شوال", "ذو القعدة", "ذو الحجة"];
4657
+ 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"];
4658
+ };
4659
+ declare const DGA_GREGORIAN_MONTHS: {
4660
+ readonly ar: readonly ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"];
4661
+ readonly en: readonly ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
4662
+ };
4663
+ declare const DGA_WEEKDAYS: {
4664
+ readonly ar: readonly ["أحد", "إثن", "ثلا", "أرب", "خمي", "جمع", "سبت"];
4665
+ readonly en: readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
4666
+ };
4667
+ /** Read calendar parts for a Date (UTC day). */
4668
+ declare function dgaGetCalendarParts(date: Date, calendar: DgaDateCalendar): DgaCalendarParts;
4669
+ /**
4670
+ * Convert calendar parts to a Date (UTC midnight).
4671
+ * Hijri conversion uses binary search against islamic-umalqura.
4672
+ */
4673
+ declare function dgaPartsToDate(parts: DgaCalendarParts, calendar: DgaDateCalendar): Date;
4674
+ declare function dgaDaysInMonth(year: number, month: number, calendar: DgaDateCalendar): number;
4675
+ declare function dgaAddMonths(parts: DgaCalendarParts, delta: number, calendar: DgaDateCalendar): DgaCalendarParts;
4676
+ /** Infer mode from format tokens (YYYY / MM / DD). */
4677
+ declare function dgaModeFromFormat(format: string): DgaDatePickerMode;
4678
+ declare function dgaFormatDate(date: Date, format: string, calendar: DgaDateCalendar): string;
4679
+ declare function dgaParseDate(value: string, format: string, calendar: DgaDateCalendar): Date | null;
4680
+ declare function dgaSameDay(a: Date | null, b: Date | null, calendar?: DgaDateCalendar): boolean;
4681
+ declare function dgaCompareDays(a: Date | null, b: Date | null, calendar?: DgaDateCalendar): number;
4682
+ declare function dgaClampDate(date: Date, min?: Date | null, max?: Date | null, calendar?: DgaDateCalendar): Date;
4683
+ declare function dgaMonthNames(calendar: DgaDateCalendar, locale: string): readonly string[];
4684
+ /** First weekday (0=Sun) of the given calendar month. */
4685
+ declare function dgaMonthStartWeekday(year: number, month: number, calendar: DgaDateCalendar): number;
4686
+ declare function dgaTodayUtc(): Date;
4687
+ /** Coerce string | Date | null to UTC date using format when string. */
4688
+ declare function dgaCoerceDate(value: string | Date | null | undefined, format: string, calendar: DgaDateCalendar): Date | null;
4689
+
4690
+ interface DgaCalendarEvent {
4691
+ id: string;
4692
+ title: string;
4693
+ /** ISO Gregorian date `yyyy-mm-dd` (events stay Gregorian across calendars). */
4694
+ date: string;
4695
+ /** Optional accent color for the event indicator (CSS color). */
4696
+ tone?: string;
4697
+ }
4698
+ /**
4699
+ * Month grid with events (appointments / queues).
4700
+ * Named `DgaEventCalendar` to avoid clashing with top-bar `DgaCalendar` type.
4701
+ * Supports Gregorian and Hijri (Umm al-Qura) display via `calendar`.
4702
+ */
4703
+ declare class DgaEventCalendar {
4704
+ private readonly uiLocale;
4705
+ private readonly ar;
4706
+ readonly events: _angular_core.InputSignal<DgaCalendarEvent[]>;
4707
+ /** Anchor date for the visible month (any day in that Gregorian month works). */
4708
+ readonly month: _angular_core.ModelSignal<Date>;
4709
+ readonly selectedDay: _angular_core.ModelSignal<string>;
4710
+ /** Display calendar system. */
4711
+ readonly calendar: _angular_core.ModelSignal<DgaDateCalendar>;
4712
+ readonly daySelect: _angular_core.OutputEmitterRef<string>;
4713
+ readonly eventSelect: _angular_core.OutputEmitterRef<DgaCalendarEvent>;
4714
+ readonly weekdays: _angular_core.Signal<string[]>;
4715
+ readonly monthLabel: _angular_core.Signal<string>;
4716
+ readonly prevLabel: _angular_core.Signal<"الشهر السابق" | "Previous month">;
4717
+ readonly nextLabel: _angular_core.Signal<"الشهر التالي" | "Next month">;
4718
+ readonly todayLabel: _angular_core.Signal<"اليوم" | "Today">;
4719
+ readonly eventsLabel: _angular_core.Signal<"أحداث اليوم" | "Events for day">;
4720
+ readonly pickDayLabel: _angular_core.Signal<"الأحداث" | "Events">;
4721
+ readonly pickDayHint: _angular_core.Signal<"اختر يوماً لعرض الأحداث" | "Select a day to view events">;
4722
+ readonly noEventsLabel: _angular_core.Signal<"لا توجد أحداث في هذا اليوم" | "No events on this day">;
4723
+ readonly gregorianLabel: _angular_core.Signal<"ميلادي" | "Gregorian">;
4724
+ readonly hijriLabel: _angular_core.Signal<"هجري" | "Hijri">;
4725
+ readonly calendarGroupLabel: _angular_core.Signal<"نظام التقويم" | "Calendar system">;
4726
+ readonly selectedDayLabel: _angular_core.Signal<string>;
4727
+ readonly eventsByDate: _angular_core.Signal<Map<string, DgaCalendarEvent[]>>;
4728
+ readonly todayIso: _angular_core.Signal<string>;
4729
+ readonly cells: _angular_core.Signal<{
4730
+ key: string;
4731
+ day: number;
4732
+ iso: string;
4733
+ inMonth: boolean;
4734
+ count: number;
4735
+ tones: string[];
4736
+ isToday: boolean;
4737
+ }[]>;
4738
+ readonly dayEvents: _angular_core.Signal<DgaCalendarEvent[]>;
4739
+ shiftMonth(delta: number): void;
4740
+ goToday(): void;
4741
+ selectDay(iso: string): void;
4742
+ dayClass(cell: {
4743
+ inMonth: boolean;
4744
+ iso: string;
4745
+ count: number;
4746
+ isToday: boolean;
4747
+ }): string;
4748
+ eventCountLabel(n: number): string;
4749
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaEventCalendar, never>;
4750
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaEventCalendar, "dga-event-calendar", never, { "events": { "alias": "events"; "required": false; "isSignal": true; }; "month": { "alias": "month"; "required": false; "isSignal": true; }; "selectedDay": { "alias": "selectedDay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; }, { "month": "monthChange"; "selectedDay": "selectedDayChange"; "calendar": "calendarChange"; "daySelect": "daySelect"; "eventSelect": "eventSelect"; }, never, never, true, never>;
4751
+ }
4752
+
4753
+ /** Cell template: `<ng-template dgaCellDef="status" let-row>…</ng-template>` */
4754
+ declare class DgaCellDef {
4755
+ readonly dgaCellDef: _angular_core.InputSignal<string>;
4756
+ readonly template: TemplateRef<any>;
4757
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCellDef, never>;
4758
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaCellDef, "ng-template[dgaCellDef]", never, { "dgaCellDef": { "alias": "dgaCellDef"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
4759
+ }
4760
+ /** Expandable row body: `<ng-template dgaExpandDef let-row>…</ng-template>` */
4761
+ declare class DgaExpandDef {
4762
+ readonly template: TemplateRef<any>;
4763
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaExpandDef, never>;
4764
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaExpandDef, "ng-template[dgaExpandDef]", never, {}, {}, never, never, true, never>;
4765
+ }
4766
+ /** Row overflow actions: `<ng-template dgaRowActions let-row>…</ng-template>` */
4767
+ declare class DgaRowActionsDef {
4768
+ readonly template: TemplateRef<any>;
4769
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaRowActionsDef, never>;
4770
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaRowActionsDef, "ng-template[dgaRowActions]", never, {}, {}, never, never, true, never>;
4771
+ }
4772
+ /** Custom mobile card: `<ng-template dgaCardDef let-row>…</ng-template>` */
4773
+ declare class DgaCardDef {
4774
+ readonly template: TemplateRef<any>;
4775
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCardDef, never>;
4776
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaCardDef, "ng-template[dgaCardDef]", never, {}, {}, never, never, true, never>;
4777
+ }
4778
+ interface DgaCellContext {
4779
+ $implicit: Record<string, unknown>;
4780
+ row: Record<string, unknown>;
4781
+ column?: string;
4782
+ index: number;
4783
+ }
4784
+
3387
4785
  interface DgaTableColumn<T = Record<string, unknown>> {
3388
4786
  key: string;
3389
4787
  label: string;
3390
4788
  sortable?: boolean;
4789
+ /** Show a text filter under the header. */
4790
+ filterable?: boolean;
4791
+ /** Pin column to the inline-start or inline-end edge while scrolling. */
4792
+ pinned?: 'start' | 'end';
4793
+ /** Optional CSS width (e.g. `8rem`, `120px`). */
4794
+ width?: string;
4795
+ /** Client sort strategy when not using `compare`. */
4796
+ sortType?: 'string' | 'number' | 'date';
4797
+ /** Custom client comparator (a, b cell values). */
4798
+ compare?: (a: unknown, b: unknown) => number;
3391
4799
  }
3392
4800
  type DgaSortDir = 'asc' | 'desc';
3393
4801
  type DgaTableDensity = 'comfortable' | 'compact';
4802
+ type DgaTableViewMode = 'table' | 'cards' | 'auto';
4803
+ type DgaTableResolvedView = 'table' | 'cards';
4804
+ interface DgaTableSortEvent {
4805
+ key: string;
4806
+ dir: DgaSortDir;
4807
+ }
4808
+ interface DgaTableFilterEvent {
4809
+ /** Column key → filter query (empty string clears). */
4810
+ filters: Record<string, string>;
4811
+ }
4812
+ interface DgaTablePageEvent {
4813
+ page: number;
4814
+ pageSize: number;
4815
+ }
3394
4816
  declare class DgaTable {
4817
+ private readonly destroyRef;
3395
4818
  private readonly uiLocale;
3396
4819
  private readonly ar;
3397
4820
  readonly columns: _angular_core.InputSignal<DgaTableColumn<Record<string, unknown>>[]>;
3398
4821
  readonly rows: _angular_core.InputSignal<Record<string, unknown>[]>;
3399
4822
  readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
4823
+ /** Enables expand controls; requires an `ng-template dgaExpandDef`. */
4824
+ readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
4825
+ /**
4826
+ * When true, sort/filter/page only emit events — host owns the row list
4827
+ * (server-driven tables).
4828
+ */
4829
+ readonly serverSide: _angular_core.InputSignalWithTransform<boolean, unknown>;
3400
4830
  readonly idKey: _angular_core.InputSignal<string>;
3401
4831
  readonly selectedKeys: _angular_core.ModelSignal<string[]>;
3402
4832
  readonly sortKey: _angular_core.ModelSignal<string>;
3403
4833
  readonly sortDir: _angular_core.ModelSignal<DgaSortDir>;
4834
+ readonly columnFilters: _angular_core.ModelSignal<Record<string, string>>;
4835
+ readonly expandedKeys: _angular_core.ModelSignal<string[]>;
3404
4836
  readonly label: _angular_core.InputSignal<string | undefined>;
3405
4837
  readonly selectAllLabel: _angular_core.InputSignal<string | undefined>;
3406
4838
  readonly emptyLabel: _angular_core.InputSignal<string | undefined>;
@@ -3409,35 +4841,217 @@ declare class DgaTable {
3409
4841
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
3410
4842
  readonly stickyHeader: _angular_core.InputSignalWithTransform<boolean, unknown>;
3411
4843
  readonly hiddenKeys: _angular_core.ModelSignal<string[]>;
4844
+ /** 1-based page. Pagination UI shows when `pageSize > 0`. */
4845
+ readonly page: _angular_core.ModelSignal<number>;
4846
+ /** Page size; `0` disables pagination (show all rows). */
4847
+ readonly pageSize: _angular_core.ModelSignal<number>;
4848
+ /** Total rows for server-side pagination; client mode uses filtered length. */
4849
+ readonly total: _angular_core.InputSignal<number | undefined>;
4850
+ readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
4851
+ /** Debounce for `filterChange` output (ms). Model updates stay immediate. */
4852
+ readonly filterDebounceMs: _angular_core.InputSignalWithTransform<number, unknown>;
4853
+ /** Error message; renders alert + retry when set. */
4854
+ readonly error: _angular_core.InputSignal<string | null>;
4855
+ /**
4856
+ * Presentation mode. `auto` follows `cardsBreakpoint` via matchMedia.
4857
+ */
4858
+ readonly viewMode: _angular_core.ModelSignal<DgaTableViewMode>;
4859
+ readonly cardsBreakpoint: _angular_core.InputSignal<string>;
4860
+ /** Column key used as card title; defaults to first visible column. */
4861
+ readonly cardTitleKey: _angular_core.InputSignal<string | undefined>;
4862
+ readonly sortChange: _angular_core.OutputEmitterRef<DgaTableSortEvent>;
4863
+ readonly filterChange: _angular_core.OutputEmitterRef<DgaTableFilterEvent>;
4864
+ /** Emits when the page index or page size changes (includes both). */
4865
+ readonly pagingChange: _angular_core.OutputEmitterRef<DgaTablePageEvent>;
4866
+ readonly errorRetry: _angular_core.OutputEmitterRef<void>;
3412
4867
  readonly skeletonRows: number[];
4868
+ private readonly cellDefs;
4869
+ private readonly expandDef;
4870
+ private readonly rowActionsDef;
4871
+ private readonly cardDef;
4872
+ private readonly selectAllEl;
4873
+ private readonly cellMap;
4874
+ private readonly mqMatches;
4875
+ /** Cards-mode global search (matches any visible column). */
4876
+ readonly cardsQuery: _angular_core.WritableSignal<string>;
4877
+ private filterTimer;
4878
+ private skipPageEmit;
3413
4879
  readonly resolvedLabel: _angular_core.Signal<string>;
3414
4880
  readonly resolvedSelectAllLabel: _angular_core.Signal<string>;
3415
4881
  readonly resolvedEmptyLabel: _angular_core.Signal<string>;
3416
4882
  readonly selectedCountLabel: _angular_core.Signal<string>;
3417
- private readonly selectAllEl;
4883
+ readonly retryLabel: _angular_core.Signal<"إعادة المحاولة" | "Retry">;
4884
+ readonly clearFiltersLabel: _angular_core.Signal<"مسح التصفية" | "Clear filters">;
4885
+ readonly actionsLabel: _angular_core.Signal<"إجراءات" | "Actions">;
4886
+ readonly pageSizeLabel: _angular_core.Signal<"لكل صفحة" | "Per page">;
4887
+ readonly errorTitle: _angular_core.Signal<"تعذر التحميل" | "Failed to load">;
4888
+ readonly cardsSearchLabel: _angular_core.Signal<"بحث" | "Search">;
4889
+ readonly cardsSearchPlaceholder: _angular_core.Signal<"ابحث في النتائج…" | "Search results…">;
4890
+ readonly cardsSortLabel: _angular_core.Signal<"فرز حسب" | "Sort by">;
4891
+ readonly cardsSortPlaceholder: _angular_core.Signal<"بدون فرز" | "No sort">;
4892
+ readonly cardsSortDirLabel: _angular_core.Signal<"تصاعدي — انقر للتبديل" | "Ascending — click to toggle" | "تنازلي — انقر للتبديل" | "Descending — click to toggle">;
4893
+ readonly resolvedView: _angular_core.Signal<DgaTableResolvedView>;
4894
+ readonly paginationEnabled: _angular_core.Signal<boolean>;
4895
+ readonly filteredCount: _angular_core.Signal<number>;
4896
+ readonly totalPages: _angular_core.Signal<number>;
4897
+ readonly rangeLabel: _angular_core.Signal<string>;
3418
4898
  constructor();
4899
+ private bindBreakpoint;
3419
4900
  readonly visibleColumns: _angular_core.Signal<DgaTableColumn<Record<string, unknown>>[]>;
4901
+ readonly filterableColumns: _angular_core.Signal<DgaTableColumn<Record<string, unknown>>[]>;
4902
+ readonly sortableColumns: _angular_core.Signal<DgaTableColumn<Record<string, unknown>>[]>;
4903
+ readonly cardTitleColumn: _angular_core.Signal<DgaTableColumn<Record<string, unknown>>>;
4904
+ readonly cardBodyColumns: _angular_core.Signal<DgaTableColumn<Record<string, unknown>>[]>;
3420
4905
  readonly selectPad: _angular_core.Signal<"w-4xl px-lg py-xs" | "w-4xl px-lg py-md">;
3421
4906
  readonly headerPad: _angular_core.Signal<string>;
3422
4907
  readonly bodyPad: _angular_core.Signal<string>;
4908
+ readonly cardPad: _angular_core.Signal<"px-md py-sm" | "px-lg py-md">;
3423
4909
  readonly rowClasses: _angular_core.Signal<string>;
3424
- readonly sortedRows: _angular_core.Signal<Record<string, unknown>[]>;
4910
+ /** Filter + sort (client) or raw rows (server). */
4911
+ readonly filteredRows: _angular_core.Signal<Record<string, unknown>[]>;
4912
+ /** Current page of rows (or all when pagination off / serverSide). */
4913
+ readonly displayRows: _angular_core.Signal<Record<string, unknown>[]>;
3425
4914
  readonly allSelected: _angular_core.Signal<boolean>;
3426
4915
  readonly someSelected: _angular_core.Signal<boolean>;
4916
+ hasRowActions(): boolean;
4917
+ hasFilterOrSortChrome(): boolean;
4918
+ hasActiveFilters(): boolean;
4919
+ onCardsSearch(value: string): void;
4920
+ onCardsSortKey(key: string): void;
4921
+ emptyHint(): string;
4922
+ cellTemplate(key: string): TemplateRef<DgaCellContext> | null;
4923
+ expandTemplate(): TemplateRef<DgaCellContext> | null;
4924
+ rowActionsTemplate(): TemplateRef<DgaCellContext> | null;
4925
+ cardTemplate(): TemplateRef<DgaCellContext> | null;
4926
+ cellContext(row: Record<string, unknown>, column: string | undefined, index: number): DgaCellContext;
4927
+ headerCellClass(col: DgaTableColumn): string;
4928
+ bodyCellClass(col: DgaTableColumn): string;
4929
+ private pinClass;
4930
+ filterPlaceholder(): string;
4931
+ filterAria(col: DgaTableColumn): string;
3427
4932
  rowKey(row: Record<string, unknown>): string;
3428
4933
  cellValue(row: Record<string, unknown>, key: string): string;
4934
+ cardTitle(row: Record<string, unknown>): string;
3429
4935
  isSelected(row: Record<string, unknown>): boolean;
4936
+ isExpanded(row: Record<string, unknown>): boolean;
4937
+ expandLabel(row: Record<string, unknown>): string;
3430
4938
  rowSelectLabel(row: Record<string, unknown>): string;
3431
4939
  selectAllAria(): 'true' | 'false' | 'mixed';
3432
4940
  emptyColspan(): number;
3433
4941
  ariaSort(key: string): 'ascending' | 'descending' | 'none' | null;
3434
4942
  sortGlyph(key: string): string;
3435
4943
  toggleSort(key: string): void;
4944
+ onFilter(key: string, value: string): void;
4945
+ clearFilters(): void;
4946
+ onPageSizeChange(size: number): void;
4947
+ onPageModelChange(next: number): void;
4948
+ toggleExpand(row: Record<string, unknown>): void;
3436
4949
  toggleRow(row: Record<string, unknown>): void;
3437
4950
  toggleAll(): void;
3438
4951
  private rowKeys;
3439
4952
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTable, never>;
3440
- 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>;
4953
+ 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; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "serverSide": { "alias": "serverSide"; "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; }; "columnFilters": { "alias": "columnFilters"; "required": false; "isSignal": true; }; "expandedKeys": { "alias": "expandedKeys"; "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; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "filterDebounceMs": { "alias": "filterDebounceMs"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "viewMode": { "alias": "viewMode"; "required": false; "isSignal": true; }; "cardsBreakpoint": { "alias": "cardsBreakpoint"; "required": false; "isSignal": true; }; "cardTitleKey": { "alias": "cardTitleKey"; "required": false; "isSignal": true; }; }, { "selectedKeys": "selectedKeysChange"; "sortKey": "sortKeyChange"; "sortDir": "sortDirChange"; "columnFilters": "columnFiltersChange"; "expandedKeys": "expandedKeysChange"; "hiddenKeys": "hiddenKeysChange"; "page": "pageChange"; "pageSize": "pageSizeChange"; "viewMode": "viewModeChange"; "sortChange": "sortChange"; "filterChange": "filterChange"; "pagingChange": "pagingChange"; "errorRetry": "errorRetry"; }, ["cellDefs", "expandDef", "rowActionsDef", "cardDef"], ["[dgaTableToolbar]", "[dgaTableError]", "[dgaTableBulk]", "[dgaTableFooter]", "[dgaTableEmpty]"], true, never>;
4954
+ }
4955
+
4956
+ /**
4957
+ * Checkbox list that two-way binds `hiddenKeys` for `dga-table`.
4958
+ * Project into `[dgaTableToolbar]` or place beside the table.
4959
+ */
4960
+ declare class DgaTableColumnPicker {
4961
+ private readonly uiLocale;
4962
+ private readonly ar;
4963
+ readonly columns: _angular_core.InputSignal<DgaTableColumn<Record<string, unknown>>[]>;
4964
+ readonly hiddenKeys: _angular_core.ModelSignal<string[]>;
4965
+ readonly label: _angular_core.InputSignal<string | undefined>;
4966
+ readonly resolvedLabel: _angular_core.Signal<string>;
4967
+ isVisible(key: string): boolean;
4968
+ toggle(key: string): void;
4969
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTableColumnPicker, never>;
4970
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTableColumnPicker, "dga-table-column-picker", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "hiddenKeys": { "alias": "hiddenKeys"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "hiddenKeys": "hiddenKeysChange"; }, never, never, true, never>;
4971
+ }
4972
+
4973
+ /** Context for `ng-template dgaVirtualItem let-item let-index="index"`. */
4974
+ interface DgaVirtualItemContext<T = unknown> {
4975
+ $implicit: T;
4976
+ index: number;
4977
+ }
4978
+ /**
4979
+ * Marks the item row template for {@link DgaVirtualList}.
4980
+ *
4981
+ * @example
4982
+ * ```html
4983
+ * <ng-template dgaVirtualItem let-item let-index="index">
4984
+ * {{ index }} — {{ item.name }}
4985
+ * </ng-template>
4986
+ * ```
4987
+ */
4988
+ declare class DgaVirtualItem<T = unknown> {
4989
+ readonly template: TemplateRef<any>;
4990
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaVirtualItem<any>, never>;
4991
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaVirtualItem<any>, "ng-template[dgaVirtualItem]", never, {}, {}, never, never, true, never>;
4992
+ }
4993
+ interface VisibleRow {
4994
+ item: unknown;
4995
+ index: number;
4996
+ track: string | number;
4997
+ }
4998
+ /**
4999
+ * Pure Angular virtual list (no CDK). Renders a window of rows with a
5000
+ * transform / total-height spacer. Emits `scrolledToEnd` near the bottom
5001
+ * for infinite-scroll consumers.
5002
+ *
5003
+ * @example
5004
+ * ```html
5005
+ * <dga-virtual-list
5006
+ * [items]="rows"
5007
+ * [itemHeight]="48"
5008
+ * trackByKey="id"
5009
+ * [loadingMore]="busy"
5010
+ * (scrolledToEnd)="loadMore()"
5011
+ * >
5012
+ * <ng-template dgaVirtualItem let-item let-index="index">
5013
+ * <div class="px-lg py-md">{{ item.label }}</div>
5014
+ * </ng-template>
5015
+ * <span dgaVirtualLoading>تحميل المزيد…</span>
5016
+ * </dga-virtual-list>
5017
+ * ```
5018
+ */
5019
+ declare class DgaVirtualList {
5020
+ private readonly injector;
5021
+ private readonly viewportRef;
5022
+ /** Projected item template (`ng-template dgaVirtualItem`). */
5023
+ readonly itemDef: _angular_core.Signal<DgaVirtualItem<any> | undefined>;
5024
+ /** Full data set (only the visible window is rendered). */
5025
+ readonly items: _angular_core.InputSignal<unknown[]>;
5026
+ /** Fixed row height in pixels. */
5027
+ readonly itemHeight: _angular_core.InputSignalWithTransform<number, unknown>;
5028
+ /** Extra rows above/below the viewport. */
5029
+ readonly overscan: _angular_core.InputSignalWithTransform<number, unknown>;
5030
+ /** CSS height of the scroll viewport. */
5031
+ readonly height: _angular_core.InputSignal<string>;
5032
+ /**
5033
+ * When set, track rows by `item[trackByKey]` (object id field).
5034
+ * Otherwise track by index.
5035
+ */
5036
+ readonly trackByKey: _angular_core.InputSignal<string | undefined>;
5037
+ /** Show the loading footer (infinite scroll). */
5038
+ readonly loadingMore: _angular_core.InputSignalWithTransform<boolean, unknown>;
5039
+ /** Fires when the user scrolls near the bottom. */
5040
+ readonly scrolledToEnd: _angular_core.OutputEmitterRef<void>;
5041
+ private readonly scrollTop;
5042
+ private readonly viewportHeight;
5043
+ private endEmittedForLength;
5044
+ readonly totalHeight: _angular_core.Signal<number>;
5045
+ readonly startIndex: _angular_core.Signal<number>;
5046
+ readonly endIndex: _angular_core.Signal<number>;
5047
+ readonly offsetY: _angular_core.Signal<number>;
5048
+ readonly visibleRows: _angular_core.Signal<VisibleRow[]>;
5049
+ constructor();
5050
+ onScroll(): void;
5051
+ private checkScrolledToEnd;
5052
+ private trackOf;
5053
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaVirtualList, never>;
5054
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaVirtualList, "dga-virtual-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "overscan": { "alias": "overscan"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "trackByKey": { "alias": "trackByKey"; "required": false; "isSignal": true; }; "loadingMore": { "alias": "loadingMore"; "required": false; "isSignal": true; }; }, { "scrolledToEnd": "scrolledToEnd"; }, ["itemDef"], ["[dgaVirtualLoading]"], true, never>;
3441
5055
  }
3442
5056
 
3443
5057
  interface DgaExportColumn {
@@ -3597,5 +5211,5 @@ declare function dgaSafeCssColor(value: string | null | undefined, fallback?: st
3597
5211
  /** Join truthy class names. */
3598
5212
  declare function dgaCx(...parts: Array<string | false | null | undefined>): string;
3599
5213
 
3600
- export { DGA_ICON_NAMES, DGA_LOGICAL_ICON_NAMES, DGA_PHONE_COUNTRIES, DGA_RIYAL_SVG_PATH, DGA_RIYAL_VIEWBOX, DgaAccordion, DgaAccordionItem, DgaAlert, DgaAnnouncementBar, DgaAppShell, DgaAuthCard, DgaAutocomplete, DgaAvatar, DgaBadge, DgaBreadcrumb, DgaButton, DgaCard, DgaCardMedia, DgaCarousel, DgaCarouselSlideDirective, DgaCheckbox, DgaChip, DgaChipInput, DgaClamp, DgaCode, DgaCommand, DgaContentSwitcher, DgaContentSwitcherPanel, DgaContextMenu, DgaContextMenuTrigger, DgaCopy, DgaDescriptionList, DgaDialog, DgaDivider, DgaDrawer, DgaDualNav, DgaEmpty, DgaExpandable, DgaExport, DgaExportToolbar, DgaFeedback, DgaField, DgaFilterBar, DgaFooter, DgaFormControl, DgaFormEnd, DgaFormStart, DgaGrid, DgaHero, DgaIcon, DgaIconBadge, DgaIconFontService, DgaImagePopup, DgaInfoList, DgaInput, DgaKbd, DgaKbdGroup, DgaLabel, DgaLink, DgaList, DgaLogoTile, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNativeSelect, DgaNavRail, DgaNumber, DgaNumberInput, DgaOtp, DgaPageFeedback, DgaPageHero, DgaPagination, DgaPersona, DgaPhoneInput, DgaPreloader, DgaProgress, DgaQuote, DgaRadio, DgaRating, DgaRiyal, DgaScrollTop, DgaSection, DgaSelect, DgaShare, DgaSideInfo, DgaSideNav, DgaSkeleton, DgaSkipLink, DgaSlider, DgaSpinner, DgaStepper, DgaSwitch, DgaTab, DgaTable, DgaTabs, DgaTimePicker, DgaTimeline, DgaToast, DgaToastOutlet, DgaToastService, DgaToc, DgaToolbar, DgaTooltip, DgaTopBar, DgaTour, DgaUpload, DgaVideoPlayer, DgaWriting, dgaCurrentLocale, dgaCx, dgaFormStatusFromInvalid, dgaIsArabic, dgaIsRtl, dgaNormalizeTime, dgaProvideValueAccessor, dgaResolveAppHref, dgaResolveLocalized, dgaResolveVideoSource, dgaSafeCssColor, dgaSafeHref, dgaUiLocale };
3601
- export type { DgaAccordionSection, DgaAlertDisplay, DgaAlertVariant, DgaAnnouncementActionVariant, DgaAnnouncementAlign, DgaAnnouncementDensity, DgaAnnouncementElevation, DgaAnnouncementPersist, DgaAnnouncementTone, DgaAppShellAppearance, DgaAutocompleteOption, DgaAvatarSize, DgaBadgeSize, DgaBadgeVariant, DgaBreadcrumbItem, DgaBreadcrumbSeparator, DgaButtonSize, DgaButtonVariant, DgaCalendar, DgaCardActionsAlign, DgaCardAppearance, DgaCardBadge, DgaCardBorder, DgaCardPadding, DgaCardShadow, DgaCarouselSlide, DgaCheckboxSize, DgaChipVariant, DgaCommandAppearance, DgaCommandGroup, DgaCommandItem, DgaContentSwitcherItem, DgaContextMenuItem, DgaContextMenuItemType, DgaCurrency, DgaDescriptionItem, DgaDescriptionLayout, DgaDialogSize, DgaDividerOrientation, DgaDrawerSide, DgaDualNavCategory, DgaDualNavSection, DgaEmptyAppearance, DgaExportColumn, DgaExportData, DgaExportScope, DgaFeedbackSubmit, DgaFilterItem, DgaFooterAppearance, DgaFooterColumn, DgaFooterIconGroup, DgaFooterIconLink, DgaFooterLink, DgaFooterLogo, DgaFormControlSize, DgaFormStatus, DgaGridCols, DgaGridGap, DgaHeroAppearance, DgaHeroImageMask, DgaHeroOverlayTone, DgaHeroSlide, DgaHeroTransition, DgaIconBadgeAppearance, DgaIconBadgeSize, DgaIconName, DgaIconSize, DgaIconTone, DgaImagePopupAnimation, DgaImagePopupImage, DgaImagePopupImageTransition, DgaImagePopupSource, DgaInfoListItem, DgaInputSize, DgaLinkVariant, DgaLocalizedString, DgaMenuItem, DgaMetricAppearance, DgaMetricTrend, DgaModalAnimation, DgaModalSize, DgaMultiselectOption, DgaNativeSelectSize, DgaNavRailActiveStyle, DgaNavRailAppearance, DgaNavRailItem, DgaNavRailPosition, DgaNavRailSize, DgaPageFeedbackAgreementLink, DgaPageFeedbackAnswer, DgaPageFeedbackOption, DgaPageFeedbackPhase, DgaPageFeedbackSubmit, DgaPageHeroTone, DgaPhoneCountry, DgaPhoneCountryName, DgaPreloaderPersist, DgaProgressAppearance, DgaProgressSize, DgaProgressTone, DgaRadioSize, DgaRatingSize, DgaRiyalAppearance, DgaRiyalSize, DgaRiyalTone, DgaScrollTopPosition, DgaSectionTone, DgaSectionWidth, DgaSelectOpenMode, DgaSelectOption, DgaSelectSize, DgaShareAppearance, DgaSideInfoItem, DgaSideNavGroup, DgaSideNavItem, DgaSkeletonAnimation, DgaSkeletonRadius, DgaSkeletonShape, DgaSkeletonSize, DgaSortDir, DgaSpinnerSize, DgaSpinnerTone, DgaStampNotice, DgaStep, DgaStepStatus, DgaSwitchSize, DgaTabItem, DgaTableColumn, DgaTableDensity, DgaTimeFormat, DgaTimePickerFormat, DgaTimePickerSize, DgaTimelineItem, DgaToastAnimation, DgaToastLocation, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaTourPersist, DgaTourPlacement, DgaTourStep, DgaUploadAppearance, DgaUploadFile, DgaUploadRejectReason, DgaUploadRejection, DgaVideoProvider, DgaVideoRatio, DgaVideoSourceInfo, DgaWritingEffect };
5214
+ export { DGA_GREGORIAN_MONTHS, DGA_HIJRI_MONTHS, DGA_IBAN_COUNTRY, DGA_IBAN_LENGTH, DGA_ICON_NAMES, DGA_ICON_OVERRIDES, DGA_LOGICAL_ICON_NAMES, DGA_PHONE_COUNTRIES, DGA_RIYAL_SVG_PATH, DGA_RIYAL_VIEWBOX, DGA_WEEKDAYS, DgaAccordion, DgaAccordionItem, DgaAlert, DgaAnnouncementBar, DgaAppShell, DgaAuthCard, DgaAutocomplete, DgaAvatar, DgaBadge, DgaBarcode, DgaBottomSheet, DgaBreadcrumb, DgaButton, DgaCard, DgaCardDef, DgaCardMedia, DgaCarousel, DgaCarouselSlideDirective, DgaCellDef, DgaCheckbox, DgaChip, DgaChipInput, DgaChoiceGroup, DgaClamp, DgaCode, DgaCommand, DgaConfirm, DgaContentSwitcher, DgaContentSwitcherPanel, DgaContextMenu, DgaContextMenuTrigger, DgaCopy, DgaDescriptionList, DgaDialog, DgaDivider, DgaDrawer, DgaDualNav, DgaEmpty, DgaEventCalendar, DgaExpandDef, DgaExpandable, DgaExport, DgaExportToolbar, DgaFaq, DgaFeedback, DgaField, DgaFilePreview, DgaFilterBar, DgaFooter, DgaFormControl, DgaFormEnd, DgaFormStart, DgaGrid, DgaHero, DgaIbanInput, DgaIcon, DgaIconBadge, DgaIconFontService, DgaIconRegistry, DgaImagePopup, DgaInfoList, DgaInput, DgaKbd, DgaKbdGroup, DgaLabel, DgaLink, DgaList, DgaLocaleToggle, DgaLogoTile, DgaMapEmbed, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNationalId, DgaNativeSelect, DgaNavRail, DgaNotificationInbox, DgaNumber, DgaNumberInput, DgaOffline, DgaOtp, DgaPageFeedback, DgaPageHero, DgaPagination, DgaPassword, DgaPersona, DgaPhoneInput, DgaPopover, DgaPreloader, DgaPrint, DgaProgress, DgaQr, DgaQuote, DgaRadio, DgaRating, DgaRichText, DgaRiyal, DgaRowActionsDef, DgaScrollTop, DgaSearchBar, DgaSection, DgaSelect, DgaShare, DgaSideInfo, DgaSideNav, DgaSignaturePad, DgaSkeleton, DgaSkipLink, DgaSlider, DgaSpinner, DgaStatStrip, DgaStepper, DgaSwitch, DgaTab, DgaTable, DgaTableColumnPicker, DgaTabs, DgaThemeToggle, DgaTimePicker, DgaTimeline, DgaToast, DgaToastOutlet, DgaToastService, DgaToc, DgaToolbar, DgaTooltip, DgaTopBar, DgaTour, DgaTree, DgaTreeSelect, DgaUpload, DgaVideoPlayer, DgaVirtualItem, DgaVirtualList, DgaWriting, dgaAddMonths, dgaClampDate, dgaCoerceDate, dgaCompareDays, dgaCurrentLocale, dgaCx, dgaDaysInMonth, dgaDetectFilePreviewKind, dgaEncodeBarcode, dgaEncodeQr, dgaFilterTree, dgaFindTreeItem, dgaFlattenTree, dgaFormStatusFromInvalid, dgaFormatDate, dgaFormatIban, dgaFormatNationalId, dgaGetCalendarParts, dgaIsAllowedMapEmbedUrl, dgaIsArabic, dgaIsRtl, dgaIsValidIban, dgaIsValidNationalId, dgaModeFromFormat, dgaMonthNames, dgaMonthStartWeekday, dgaNationalIdKind, dgaNormalizeIban, dgaNormalizeNationalId, dgaNormalizeTime, dgaParseDate, dgaPartsToDate, dgaPasswordStrength, dgaProvideValueAccessor, dgaResolveAppHref, dgaResolveLocalized, dgaResolveVideoSource, dgaSafeCssColor, dgaSafeHref, dgaSameDay, dgaTodayUtc, dgaTreeAncestors, dgaUiLocale, dgaVisibleTreeNodes, provideDgaIcons };
5215
+ export type { DgaAccordionSection, DgaAlertDisplay, DgaAlertVariant, DgaAnnouncementActionVariant, DgaAnnouncementAlign, DgaAnnouncementDensity, DgaAnnouncementElevation, DgaAnnouncementPersist, DgaAnnouncementTone, DgaAppShellAppearance, DgaAutocompleteOption, DgaAvatarSize, DgaBadgeSize, DgaBadgeVariant, DgaBarcodeFormat, DgaBarcodeMatrix, DgaBottomSheetSnap, DgaBreadcrumbItem, DgaBreadcrumbSeparator, DgaButtonEffect, DgaButtonSize, DgaButtonVariant, DgaCalendar, DgaCalendarEvent, DgaCalendarParts, DgaCardActionsAlign, DgaCardAppearance, DgaCardBadge, DgaCardBorder, DgaCardPadding, DgaCardShadow, DgaCarouselSlide, DgaCellContext, DgaCheckboxSize, DgaChipVariant, DgaChoiceLayout, DgaCommandAppearance, DgaCommandGroup, DgaCommandItem, DgaConfirmTone, DgaContentSwitcherItem, DgaContextMenuItem, DgaContextMenuItemType, DgaCurrency, DgaDateCalendar, DgaDateLocale, DgaDatePickerMode, DgaDescriptionItem, DgaDescriptionLayout, DgaDialogSize, DgaDividerOrientation, DgaDrawerSide, DgaDualNavCategory, DgaDualNavSection, DgaEmptyAppearance, DgaExportColumn, DgaExportData, DgaExportScope, DgaFaqItem, DgaFeedbackSubmit, DgaFilePreviewKind, DgaFilePreviewPresentation, DgaFilterItem, DgaFooterAppearance, DgaFooterColumn, DgaFooterIconGroup, DgaFooterIconLink, DgaFooterLink, DgaFooterLogo, DgaFormControlSize, DgaFormStatus, DgaGridCols, DgaGridGap, DgaHeroAppearance, DgaHeroImageMask, DgaHeroOverlayTone, DgaHeroSlide, DgaHeroTransition, DgaIconBadgeAppearance, DgaIconBadgeSize, DgaIconName, DgaIconNameInput, DgaIconSize, DgaIconTone, DgaImagePopupAnimation, DgaImagePopupImage, DgaImagePopupImageTransition, DgaImagePopupSource, DgaInfoListItem, DgaInputSize, DgaLinkVariant, DgaLocalizedString, DgaMapEmbedAspect, DgaMenuItem, DgaMetricAppearance, DgaMetricTrend, DgaModalAnimation, DgaModalSize, DgaMultiselectOption, DgaNationalIdKind, DgaNativeSelectSize, DgaNavRailActiveStyle, DgaNavRailAppearance, DgaNavRailItem, DgaNavRailPosition, DgaNavRailSize, DgaNotificationItem, DgaOfflineMode, DgaPageFeedbackAgreementLink, DgaPageFeedbackAnswer, DgaPageFeedbackOption, DgaPageFeedbackPhase, DgaPageFeedbackSubmit, DgaPageHeroTone, DgaPasswordStrength, DgaPasswordStrengthResult, DgaPhoneCountry, DgaPhoneCountryName, DgaPopoverPlacement, DgaPreloaderPersist, DgaProgressAppearance, DgaProgressSize, DgaProgressTone, DgaQrAnimate, DgaQrErrorCorrection, DgaQrMatrix, DgaQrSize, DgaQrSizeToken, DgaQrView, DgaRadioSize, DgaRatingSize, DgaRiyalAppearance, DgaRiyalSize, DgaRiyalTone, DgaScrollTopPosition, DgaSearchBarSize, DgaSectionTone, DgaSectionWidth, DgaSelectOpenMode, DgaSelectOption, DgaSelectSize, DgaShareAppearance, DgaSideInfoItem, DgaSideNavGroup, DgaSideNavItem, DgaSkeletonAnimation, DgaSkeletonRadius, DgaSkeletonShape, DgaSkeletonSize, DgaSliderSize, DgaSortDir, DgaSpinnerSize, DgaSpinnerTone, DgaStampNotice, DgaStatStripItem, DgaStatStripTrend, DgaStep, DgaStepStatus, DgaSwitchSize, DgaTabItem, DgaTableColumn, DgaTableDensity, DgaTableFilterEvent, DgaTablePageEvent, DgaTableResolvedView, DgaTableSortEvent, DgaTableViewMode, DgaThemeToggleSurface, DgaTimeFormat, DgaTimePickerFormat, DgaTimePickerSize, DgaTimelineItem, DgaToastAnimation, DgaToastLocation, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaTourPersist, DgaTourPlacement, DgaTourStep, DgaTreeItem, DgaTreeSelectSize, DgaUploadAppearance, DgaUploadFile, DgaUploadRejectReason, DgaUploadRejection, DgaVideoProvider, DgaVideoRatio, DgaVideoSourceInfo, DgaVirtualItemContext, DgaWritingEffect };