@a.nemreen/dga-ui 0.2.3 → 0.2.5

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,27 +1,37 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnDestroy, OnInit } from '@angular/core';
2
+ import { Type, Provider, OnDestroy, OnInit } from '@angular/core';
3
3
  import { SafeHtml } from '@angular/platform-browser';
4
+ import { ControlValueAccessor } from '@angular/forms';
5
+ export { ControlValueAccessor } from '@angular/forms';
4
6
  import * as _a_nemreen_dga_ui from '@a.nemreen/dga-ui';
5
7
 
6
8
  type DgaButtonVariant = 'primary' | 'secondary' | 'subtle' | 'outline' | 'outlineMuted' | 'outlineInverse' | 'ghost' | 'danger' | 'inverse';
7
9
  type DgaButtonSize = 'sm' | 'md' | 'lg';
8
10
  declare class DgaButton {
9
11
  private readonly destroyRef;
12
+ private readonly host;
13
+ private readonly renderer;
10
14
  readonly variant: _angular_core.InputSignal<DgaButtonVariant>;
11
15
  readonly size: _angular_core.InputSignal<DgaButtonSize>;
12
16
  /** Square control sized to the icon (no horizontal padding). */
13
17
  readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
14
- /** When > 0, disables the host for this many ms after each click. */
18
+ /** When > 0, disables the host for this many ms after each click and shows a spinner. */
15
19
  readonly cooldownMs: _angular_core.InputSignal<number>;
20
+ /** Manual loading state — shows spinner and disables the control. */
21
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
16
22
  /** Exposed for host bindings (Angular 22 requires public host expressions). */
17
23
  readonly cooling: _angular_core.WritableSignal<boolean>;
18
24
  private cooldownTimer;
25
+ private spinnerEl;
26
+ readonly busy: _angular_core.Signal<boolean>;
19
27
  readonly classes: _angular_core.Signal<string>;
20
28
  constructor();
21
29
  onHostClick(): void;
30
+ private attachSpinner;
31
+ private detachSpinner;
22
32
  private clearCooldown;
23
33
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaButton, never>;
24
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaButton, "button[dgaButton], a[dgaButton]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "cooldownMs": { "alias": "cooldownMs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
34
+ 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; }; }, {}, never, never, true, never>;
25
35
  }
26
36
 
27
37
  type DgaBadgeVariant = 'neutral' | 'primary' | 'success' | 'info' | 'warning' | 'error';
@@ -123,7 +133,7 @@ declare class DgaProgress {
123
133
  readonly circumference: number;
124
134
  readonly clamped: _angular_core.Signal<number>;
125
135
  readonly dashOffset: _angular_core.Signal<number>;
126
- readonly hostClasses: _angular_core.Signal<"block w-full" | "inline-flex">;
136
+ readonly hostClasses: _angular_core.Signal<"inline-flex" | "block w-full">;
127
137
  readonly trackClasses: _angular_core.Signal<string>;
128
138
  readonly barClasses: _angular_core.Signal<string>;
129
139
  readonly radialWrapClasses: _angular_core.Signal<string>;
@@ -285,6 +295,28 @@ declare class DgaFormControl {
285
295
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaFormControl, "dga-form-control", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "filled": { "alias": "filled"; "required": false; "isSignal": true; }; "startIcon": { "alias": "startIcon"; "required": false; "isSignal": true; }; "endIcon": { "alias": "endIcon"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaStart]", "*", "[dgaEnd]"], true, never>;
286
296
  }
287
297
 
298
+ /**
299
+ * Registers `component` as an `NG_VALUE_ACCESSOR`, so it can be used with
300
+ * `formControl` / `formControlName` / `ngModel`.
301
+ *
302
+ * Usage on a standalone component:
303
+ * ```ts
304
+ * @Component({
305
+ * ...
306
+ * providers: [dgaProvideValueAccessor(DgaMyControl)],
307
+ * })
308
+ * export class DgaMyControl implements ControlValueAccessor { ... }
309
+ * ```
310
+ *
311
+ * Each CVA component should:
312
+ * - keep its existing `input`/`model`/`output` two-way-binding API untouched;
313
+ * - implement `writeValue`, `registerOnChange`, `registerOnTouched` and,
314
+ * when relevant, `setDisabledState`;
315
+ * - call the registered `onChange` alongside its existing `*Change` output
316
+ * emit, and call `onTouched` on blur.
317
+ */
318
+ declare function dgaProvideValueAccessor(component: Type<unknown>): Provider;
319
+
288
320
  declare class DgaLabel {
289
321
  /** Optional required indicator styling hook. */
290
322
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -330,7 +362,7 @@ interface DgaSelectOption {
330
362
  }
331
363
  type DgaSelectOpenMode = 'dropdown' | 'always';
332
364
  type DgaSelectSize = DgaFormControlSize;
333
- declare class DgaSelect {
365
+ declare class DgaSelect implements ControlValueAccessor {
334
366
  private static nextId;
335
367
  private readonly host;
336
368
  readonly listId: string;
@@ -349,9 +381,13 @@ declare class DgaSelect {
349
381
  readonly removeLabel: _angular_core.InputSignal<string>;
350
382
  readonly clearLabel: _angular_core.InputSignal<string>;
351
383
  readonly emptyLabel: _angular_core.InputSignal<string>;
352
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
384
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
385
+ private readonly cvaDisabled;
386
+ readonly disabled: _angular_core.Signal<boolean>;
353
387
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
354
388
  readonly valueChange: _angular_core.OutputEmitterRef<string | string[]>;
389
+ private onChange;
390
+ private onTouched;
355
391
  readonly open: _angular_core.WritableSignal<boolean>;
356
392
  readonly query: _angular_core.WritableSignal<string>;
357
393
  readonly activeIndex: _angular_core.WritableSignal<number>;
@@ -381,11 +417,15 @@ declare class DgaSelect {
381
417
  clear(): void;
382
418
  onDocClick(event: MouseEvent): void;
383
419
  private commit;
420
+ writeValue(value: string | string[]): void;
421
+ registerOnChange(fn: (value: string | string[]) => void): void;
422
+ registerOnTouched(fn: () => void): void;
423
+ setDisabledState(isDisabled: boolean): void;
384
424
  private moveActive;
385
425
  private firstEnabledIndex;
386
426
  private lastEnabledIndex;
387
427
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSelect, never>;
388
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSelect, "dga-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "openMode": { "alias": "openMode"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
428
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSelect, "dga-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "openMode": { "alias": "openMode"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
389
429
  }
390
430
 
391
431
  /**
@@ -410,20 +450,28 @@ declare class DgaField {
410
450
  }
411
451
 
412
452
  type DgaSwitchSize = 'sm' | 'md' | 'lg';
413
- declare class DgaSwitch {
453
+ declare class DgaSwitch implements ControlValueAccessor {
414
454
  readonly checked: _angular_core.ModelSignal<boolean>;
415
455
  readonly size: _angular_core.InputSignal<DgaSwitchSize>;
416
456
  readonly label: _angular_core.InputSignal<string>;
417
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
457
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
458
+ private readonly cvaDisabled;
459
+ readonly disabled: _angular_core.Signal<boolean>;
418
460
  readonly changed: _angular_core.OutputEmitterRef<boolean>;
461
+ private onChange;
462
+ onTouched: () => void;
419
463
  readonly trackClasses: _angular_core.Signal<string>;
420
464
  readonly thumbClasses: _angular_core.Signal<string>;
421
465
  toggle(): void;
466
+ writeValue(value: boolean): void;
467
+ registerOnChange(fn: (value: boolean) => void): void;
468
+ registerOnTouched(fn: () => void): void;
469
+ setDisabledState(isDisabled: boolean): void;
422
470
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSwitch, never>;
423
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSwitch, "dga-switch", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
471
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSwitch, "dga-switch", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
424
472
  }
425
473
 
426
- declare class DgaNumberInput {
474
+ declare class DgaNumberInput implements ControlValueAccessor {
427
475
  readonly valueInput: _angular_core.InputSignal<number>;
428
476
  readonly value: _angular_core.WritableSignal<number>;
429
477
  readonly min: _angular_core.InputSignal<number>;
@@ -431,12 +479,18 @@ declare class DgaNumberInput {
431
479
  readonly stepSize: _angular_core.InputSignal<number>;
432
480
  readonly size: _angular_core.InputSignal<DgaFormControlSize>;
433
481
  readonly label: _angular_core.InputSignal<string>;
482
+ readonly controlId: _angular_core.InputSignal<string>;
483
+ readonly name: _angular_core.InputSignal<string>;
434
484
  readonly incrementLabel: _angular_core.InputSignal<string>;
435
485
  readonly decrementLabel: _angular_core.InputSignal<string>;
436
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
486
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
487
+ private readonly cvaDisabled;
488
+ readonly disabled: _angular_core.Signal<boolean>;
437
489
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
438
490
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
439
491
  readonly valueChange: _angular_core.OutputEmitterRef<number>;
492
+ private onChange;
493
+ onTouched: () => void;
440
494
  readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
441
495
  readonly wrapClasses: _angular_core.Signal<string>;
442
496
  step(dir: 1 | -1): void;
@@ -444,8 +498,12 @@ declare class DgaNumberInput {
444
498
  finiteOrNull(n: number): number | null;
445
499
  private clamp;
446
500
  private commit;
501
+ writeValue(value: number): void;
502
+ registerOnChange(fn: (value: number) => void): void;
503
+ registerOnTouched(fn: () => void): void;
504
+ setDisabledState(isDisabled: boolean): void;
447
505
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNumberInput, never>;
448
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNumberInput, "dga-number-input", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "stepSize": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "incrementLabel": { "alias": "incrementLabel"; "required": false; "isSignal": true; }; "decrementLabel": { "alias": "decrementLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
506
+ 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>;
449
507
  }
450
508
 
451
509
  declare class DgaSlider {
@@ -455,43 +513,63 @@ declare class DgaSlider {
455
513
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaSlider, "input[type=\"range\"][dgaSlider]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
456
514
  }
457
515
 
458
- declare class DgaOtp {
516
+ declare class DgaOtp implements ControlValueAccessor {
459
517
  private cells;
460
518
  readonly length: _angular_core.InputSignal<number>;
461
519
  readonly value: _angular_core.ModelSignal<string>;
462
520
  readonly label: _angular_core.InputSignal<string>;
463
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
521
+ /** When `true`, allow `A-Z0-9` instead of digits only. */
522
+ readonly alphanumeric: _angular_core.InputSignalWithTransform<boolean, unknown>;
523
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
524
+ private readonly cvaDisabled;
525
+ readonly disabled: _angular_core.Signal<boolean>;
464
526
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
465
527
  readonly completed: _angular_core.OutputEmitterRef<string>;
528
+ private onChange;
529
+ onTouched: () => void;
466
530
  get slots(): number[];
467
531
  chars(): string[];
532
+ private sanitize;
468
533
  cellClasses(): string;
469
534
  onInput(index: number, raw: string): void;
470
535
  onKey(index: number, event: KeyboardEvent): void;
471
536
  onPaste(event: ClipboardEvent): void;
472
537
  private commit;
538
+ writeValue(value: string): void;
539
+ registerOnChange(fn: (value: string) => void): void;
540
+ registerOnTouched(fn: () => void): void;
541
+ setDisabledState(isDisabled: boolean): void;
473
542
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaOtp, never>;
474
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaOtp, "dga-otp", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "completed": "completed"; }, never, never, true, never>;
543
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaOtp, "dga-otp", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "alphanumeric": { "alias": "alphanumeric"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "completed": "completed"; }, never, never, true, never>;
475
544
  }
476
545
 
477
- declare class DgaChipInput {
546
+ declare class DgaChipInput implements ControlValueAccessor {
478
547
  readonly valueInput: _angular_core.InputSignal<string[]>;
479
548
  readonly value: _angular_core.WritableSignal<string[]>;
480
549
  readonly placeholder: _angular_core.InputSignal<string>;
481
550
  readonly label: _angular_core.InputSignal<string>;
482
551
  readonly removeLabel: _angular_core.InputSignal<string>;
483
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
552
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
553
+ private readonly cvaDisabled;
554
+ readonly disabled: _angular_core.Signal<boolean>;
484
555
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
485
556
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
486
557
  readonly valueChange: _angular_core.OutputEmitterRef<string[]>;
487
558
  draft: string;
559
+ private onChange;
560
+ onTouched: () => void;
488
561
  readonly resolvedStatus: _angular_core.Signal<DgaFormStatus>;
489
562
  readonly wrapClasses: _angular_core.Signal<string>;
490
563
  commit(event: Event): void;
491
564
  remove(tag: string): void;
492
565
  onBackspace(): void;
566
+ writeValue(value: string[]): void;
567
+ registerOnChange(fn: (value: string[]) => void): void;
568
+ registerOnTouched(fn: () => void): void;
569
+ setDisabledState(isDisabled: boolean): void;
570
+ private emitValue;
493
571
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChipInput, never>;
494
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChipInput, "dga-chip-input", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
572
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChipInput, "dga-chip-input", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
495
573
  }
496
574
 
497
575
  interface DgaUploadFile {
@@ -500,8 +578,13 @@ interface DgaUploadFile {
500
578
  size: number;
501
579
  file?: File;
502
580
  }
581
+ type DgaUploadRejectReason = 'maxSize' | 'accept' | 'maxFiles';
582
+ interface DgaUploadRejection {
583
+ file: File;
584
+ reason: DgaUploadRejectReason;
585
+ }
503
586
  type DgaUploadAppearance = 'zone' | 'browse';
504
- declare class DgaUpload {
587
+ declare class DgaUpload implements ControlValueAccessor {
505
588
  readonly filesInput: _angular_core.InputSignal<DgaUploadFile[]>;
506
589
  readonly files: _angular_core.WritableSignal<DgaUploadFile[]>;
507
590
  readonly accept: _angular_core.InputSignal<string>;
@@ -511,10 +594,18 @@ declare class DgaUpload {
511
594
  readonly hint: _angular_core.InputSignal<string>;
512
595
  readonly browseLabel: _angular_core.InputSignal<string>;
513
596
  readonly removeLabel: _angular_core.InputSignal<string>;
514
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
597
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
598
+ private readonly cvaDisabled;
599
+ readonly disabled: _angular_core.Signal<boolean>;
515
600
  readonly maxSize: _angular_core.InputSignal<number>;
601
+ /** Max files kept when `multiple` is true (`0` = unlimited). */
602
+ readonly maxFiles: _angular_core.InputSignal<number>;
516
603
  readonly filesChange: _angular_core.OutputEmitterRef<DgaUploadFile[]>;
604
+ /** Emitted when picked/dropped files were filtered out (size, accept, or maxFiles). */
605
+ readonly rejected: _angular_core.OutputEmitterRef<DgaUploadRejection[]>;
517
606
  readonly dragging: _angular_core.ModelSignal<boolean>;
607
+ private onChange;
608
+ onTouched: () => void;
518
609
  readonly zoneClasses: _angular_core.Signal<string>;
519
610
  onDragOver(event: DragEvent): void;
520
611
  onDrop(event: DragEvent): void;
@@ -522,9 +613,15 @@ declare class DgaUpload {
522
613
  remove(id: string): void;
523
614
  formatSize(bytes: number): string;
524
615
  private addFiles;
616
+ /** Enforce `accept` for both picker and drag-drop (HTML accept is advisory). */
617
+ private matchesAccept;
525
618
  private commit;
619
+ writeValue(value: DgaUploadFile[]): void;
620
+ registerOnChange(fn: (value: DgaUploadFile[]) => void): void;
621
+ registerOnTouched(fn: () => void): void;
622
+ setDisabledState(isDisabled: boolean): void;
526
623
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaUpload, never>;
527
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaUpload, "dga-upload", never, { "filesInput": { "alias": "files"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "browseLabel": { "alias": "browseLabel"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "dragging": { "alias": "dragging"; "required": false; "isSignal": true; }; }, { "filesChange": "filesChange"; "dragging": "draggingChange"; }, never, never, true, never>;
624
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaUpload, "dga-upload", never, { "filesInput": { "alias": "files"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "browseLabel": { "alias": "browseLabel"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "dragging": { "alias": "dragging"; "required": false; "isSignal": true; }; }, { "filesChange": "filesChange"; "rejected": "rejected"; "dragging": "draggingChange"; }, never, never, true, never>;
528
625
  }
529
626
 
530
627
  interface DgaPhoneCountry {
@@ -541,7 +638,7 @@ declare const DGA_PHONE_COUNTRIES: DgaPhoneCountry[];
541
638
  * Phone field with country-code prefix select.
542
639
  * The control group is always LTR so digits and codes read correctly in RTL pages.
543
640
  */
544
- declare class DgaPhoneInput {
641
+ declare class DgaPhoneInput implements ControlValueAccessor {
545
642
  readonly countries: _angular_core.InputSignal<DgaPhoneCountry[]>;
546
643
  readonly countryCode: _angular_core.ModelSignal<string>;
547
644
  readonly nationalNumber: _angular_core.ModelSignal<string>;
@@ -550,14 +647,24 @@ declare class DgaPhoneInput {
550
647
  readonly placeholder: _angular_core.InputSignal<string>;
551
648
  readonly autocomplete: _angular_core.InputSignal<string>;
552
649
  readonly codeLabel: _angular_core.InputSignal<string>;
553
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
650
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
651
+ private readonly cvaDisabled;
652
+ readonly disabled: _angular_core.Signal<boolean>;
554
653
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
555
654
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
556
- /** Full E.164-ish value: code + national digits. */
557
- readonly value: _angular_core.Signal<string>;
655
+ /** Full E.164-ish combined value: country code + national digits. */
656
+ readonly value: _angular_core.ModelSignal<string>;
558
657
  readonly groupClasses: _angular_core.Signal<string>;
658
+ private onChange;
659
+ onTouched: () => void;
660
+ constructor();
661
+ writeValue(value: string): void;
662
+ registerOnChange(fn: (value: string) => void): void;
663
+ registerOnTouched(fn: () => void): void;
664
+ setDisabledState(isDisabled: boolean): void;
665
+ private parseValue;
559
666
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPhoneInput, never>;
560
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPhoneInput, "dga-phone-input", never, { "countries": { "alias": "countries"; "required": false; "isSignal": true; }; "countryCode": { "alias": "countryCode"; "required": false; "isSignal": true; }; "nationalNumber": { "alias": "nationalNumber"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "codeLabel": { "alias": "codeLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "countryCode": "countryCodeChange"; "nationalNumber": "nationalNumberChange"; }, never, never, true, never>;
667
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPhoneInput, "dga-phone-input", never, { "countries": { "alias": "countries"; "required": false; "isSignal": true; }; "countryCode": { "alias": "countryCode"; "required": false; "isSignal": true; }; "nationalNumber": { "alias": "nationalNumber"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "codeLabel": { "alias": "codeLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "countryCode": "countryCodeChange"; "nationalNumber": "nationalNumberChange"; "value": "valueChange"; }, never, never, true, never>;
561
668
  }
562
669
 
563
670
  /** @deprecated Prefer `DgaSelectOption` — alias kept for existing imports. */
@@ -569,13 +676,15 @@ declare class DgaAutocomplete {
569
676
  readonly value: _angular_core.WritableSignal<string>;
570
677
  readonly placeholder: _angular_core.InputSignal<string>;
571
678
  readonly label: _angular_core.InputSignal<string>;
679
+ readonly size: _angular_core.InputSignal<_a_nemreen_dga_ui.DgaFormControlSize>;
680
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
572
681
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
573
682
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
574
683
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
575
684
  readonly valueChange: _angular_core.OutputEmitterRef<string>;
576
685
  onValueChange(next: string | string[]): void;
577
686
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAutocomplete, never>;
578
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAutocomplete, "dga-autocomplete", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
687
+ 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>;
579
688
  }
580
689
 
581
690
  /** @deprecated Prefer `DgaSelectOption` — alias kept for existing imports. */
@@ -588,13 +697,16 @@ declare class DgaMultiselect {
588
697
  readonly placeholder: _angular_core.InputSignal<string>;
589
698
  readonly label: _angular_core.InputSignal<string>;
590
699
  readonly removeLabel: _angular_core.InputSignal<string>;
700
+ readonly size: _angular_core.InputSignal<_a_nemreen_dga_ui.DgaFormControlSize>;
701
+ readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
702
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
591
703
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
592
704
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
593
705
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
594
706
  readonly valueChange: _angular_core.OutputEmitterRef<string[]>;
595
707
  onValueChange(next: string | string[]): void;
596
708
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaMultiselect, never>;
597
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMultiselect, "dga-multiselect", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
709
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMultiselect, "dga-multiselect", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
598
710
  }
599
711
 
600
712
  /** Calendar system for date values and the picker UI. */
@@ -647,7 +759,7 @@ interface DgaDateRangeValue {
647
759
  end: string;
648
760
  }
649
761
  type PanelView = DgaDatePickerMode;
650
- declare class DgaDatePickerComponent {
762
+ declare class DgaDatePickerComponent implements ControlValueAccessor {
651
763
  private readonly host;
652
764
  private readonly destroyRef;
653
765
  readonly inputId: string;
@@ -656,6 +768,8 @@ declare class DgaDatePickerComponent {
656
768
  readonly value: _angular_core.WritableSignal<string>;
657
769
  readonly startValue: _angular_core.ModelSignal<string>;
658
770
  readonly endValue: _angular_core.ModelSignal<string>;
771
+ private onChange;
772
+ private onTouched;
659
773
  readonly calendar: _angular_core.InputSignal<DgaDateCalendar>;
660
774
  readonly range: _angular_core.InputSignalWithTransform<boolean, unknown>;
661
775
  readonly format: _angular_core.InputSignal<string>;
@@ -669,7 +783,9 @@ declare class DgaDatePickerComponent {
669
783
  readonly controlId: _angular_core.InputSignal<string>;
670
784
  readonly name: _angular_core.InputSignal<string>;
671
785
  readonly size: _angular_core.InputSignal<DgaFormControlSize>;
672
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
786
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
787
+ private readonly cvaDisabled;
788
+ readonly disabled: _angular_core.Signal<boolean>;
673
789
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
674
790
  readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
675
791
  readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -771,12 +887,16 @@ declare class DgaDatePickerComponent {
771
887
  private syncDraftFromModels;
772
888
  private parseRangeFromValue;
773
889
  private emitValues;
890
+ writeValue(value: string): void;
891
+ registerOnChange(fn: (value: string) => void): void;
892
+ registerOnTouched(fn: () => void): void;
893
+ setDisabledState(isDisabled: boolean): void;
774
894
  private isDateDisabled;
775
895
  private isMonthDisabled;
776
896
  private isYearDisabled;
777
897
  private initialViewParts;
778
898
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDatePickerComponent, never>;
779
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDatePickerComponent, "dga-date-picker", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "startValue": { "alias": "startValue"; "required": false; "isSignal": true; }; "endValue": { "alias": "endValue"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "yearBefore": { "alias": "yearBefore"; "required": false; "isSignal": true; }; "yearAfter": { "alias": "yearAfter"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "saveLabel": { "alias": "saveLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "startValue": "startValueChange"; "endValue": "endValueChange"; "valueChange": "valueChange"; "rangeChange": "rangeChange"; }, never, never, true, never>;
899
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDatePickerComponent, "dga-date-picker", never, { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "startValue": { "alias": "startValue"; "required": false; "isSignal": true; }; "endValue": { "alias": "endValue"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "yearBefore": { "alias": "yearBefore"; "required": false; "isSignal": true; }; "yearAfter": { "alias": "yearAfter"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "invalid": { "alias": "dgaInvalid"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "saveLabel": { "alias": "saveLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "startValue": "startValueChange"; "endValue": "endValueChange"; "valueChange": "valueChange"; "rangeChange": "rangeChange"; }, never, never, true, never>;
780
900
  }
781
901
  interface DayCell {
782
902
  key: string;
@@ -791,6 +911,48 @@ interface DayCell {
791
911
  label?: string;
792
912
  }
793
913
 
914
+ type DgaTimePickerSize = DgaNativeSelectSize;
915
+ type DgaTimePickerFormat = '24h' | '12h';
916
+ declare function pad2(n: number): string;
917
+ /** Normalize to `HH:mm` (24h). Empty string when incomplete. */
918
+ declare function dgaNormalizeTime(value: string): string;
919
+ /**
920
+ * Time-of-day control (hour / minute selects). Value is `HH:mm` (24h).
921
+ * Pair with `dga-date-picker` for appointment-style datetime flows.
922
+ */
923
+ declare class DgaTimePicker {
924
+ /** 24h `HH:mm` string. */
925
+ readonly value: _angular_core.ModelSignal<string>;
926
+ readonly format: _angular_core.InputSignal<DgaTimePickerFormat>;
927
+ readonly size: _angular_core.InputSignal<_a_nemreen_dga_ui.DgaFormControlSize>;
928
+ readonly label: _angular_core.InputSignal<string>;
929
+ readonly hourLabel: _angular_core.InputSignal<string>;
930
+ readonly minuteLabel: _angular_core.InputSignal<string>;
931
+ readonly periodLabel: _angular_core.InputSignal<string>;
932
+ readonly amLabel: _angular_core.InputSignal<string>;
933
+ readonly pmLabel: _angular_core.InputSignal<string>;
934
+ /** Minute step (1, 5, 15, …). */
935
+ readonly minuteStep: _angular_core.InputSignal<number>;
936
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
937
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
938
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
939
+ readonly pad: typeof pad2;
940
+ readonly minuteOptions: _angular_core.Signal<number[]>;
941
+ readonly hourOptions: _angular_core.Signal<{
942
+ value: string;
943
+ label: string;
944
+ }[]>;
945
+ hourSelect(): string;
946
+ minuteSelect(): string;
947
+ periodSelect(): string;
948
+ onHour(raw: string): void;
949
+ onMinute(raw: string): void;
950
+ onPeriod(raw: string): void;
951
+ private commit;
952
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTimePicker, never>;
953
+ 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>;
954
+ }
955
+
794
956
  type DgaDialogSize = 'sm' | 'md' | 'lg';
795
957
  declare class DgaDialog {
796
958
  private readonly injector;
@@ -876,7 +1038,7 @@ declare class DgaToast implements OnDestroy {
876
1038
  private timer;
877
1039
  readonly classes: _angular_core.Signal<string>;
878
1040
  readonly iconName: _angular_core.Signal<DgaIconName>;
879
- readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1041
+ readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
880
1042
  constructor();
881
1043
  ngOnDestroy(): void;
882
1044
  dismiss(): void;
@@ -995,10 +1157,16 @@ declare class DgaTooltip {
995
1157
  }
996
1158
 
997
1159
  interface DgaMenuItem {
998
- label: string;
999
- value: string;
1160
+ /** Required for actionable items; optional when `divider` is true. */
1161
+ label?: string;
1162
+ /** Required for actionable items; optional when `divider` is true. */
1163
+ value?: string;
1000
1164
  icon?: DgaIconName;
1001
1165
  danger?: boolean;
1166
+ /** Skipped in keyboard nav / click selection; renders with disabled styling. */
1167
+ disabled?: boolean;
1168
+ /** Renders as a separator (`role="separator"`) instead of a menu item. */
1169
+ divider?: boolean;
1002
1170
  }
1003
1171
  declare class DgaMenu {
1004
1172
  private readonly host;
@@ -1014,7 +1182,12 @@ declare class DgaMenu {
1014
1182
  readonly showChevron: _angular_core.InputSignalWithTransform<boolean, unknown>;
1015
1183
  /** Minimum panel width (e.g. share menus). */
1016
1184
  readonly menuMinWidth: _angular_core.InputSignal<string>;
1017
- readonly selected: _angular_core.OutputEmitterRef<string>;
1185
+ /** Emits the full selected item. */
1186
+ readonly selected: _angular_core.OutputEmitterRef<DgaMenuItem>;
1187
+ /** Emits `item.value` alongside `selected` — handy for quick migrations. */
1188
+ readonly selectedValue: _angular_core.OutputEmitterRef<string>;
1189
+ readonly opened: _angular_core.OutputEmitterRef<void>;
1190
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1018
1191
  /** Viewport coords - panel is portaled to body so ancestors cannot clip it. */
1019
1192
  readonly panelStyle: _angular_core.WritableSignal<Record<string, string>>;
1020
1193
  private readonly seq;
@@ -1026,6 +1199,7 @@ declare class DgaMenu {
1026
1199
  triggerClasses(): string;
1027
1200
  menuClasses(): string;
1028
1201
  itemId(index: number): string;
1202
+ trackItem(item: DgaMenuItem, index: number): string;
1029
1203
  itemClass(item: DgaMenuItem): string;
1030
1204
  toggle(event: Event): void;
1031
1205
  openMenu(): void;
@@ -1035,12 +1209,17 @@ declare class DgaMenu {
1035
1209
  onMenuKey(event: KeyboardEvent): void;
1036
1210
  onDocumentClick(event: MouseEvent): void;
1037
1211
  onDocumentKeydown(event: KeyboardEvent): void;
1212
+ private isSelectable;
1213
+ private firstSelectableIndex;
1214
+ private lastSelectableIndex;
1215
+ private stepIndex;
1038
1216
  private portalMenuToBody;
1039
1217
  private detachPortaledMenu;
1040
1218
  private syncPanelPosition;
1219
+ private cssLengthToPx;
1041
1220
  private focusItem;
1042
1221
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaMenu, never>;
1043
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaMenu, "dga-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "leadingIcon": { "alias": "leadingIcon"; "required": false; "isSignal": true; }; "showChevron": { "alias": "showChevron"; "required": false; "isSignal": true; }; "menuMinWidth": { "alias": "menuMinWidth"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "selected": "selected"; }, never, never, true, never>;
1222
+ 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>;
1044
1223
  }
1045
1224
 
1046
1225
  type DgaDrawerSide = 'start' | 'end';
@@ -1049,6 +1228,7 @@ declare class DgaDrawer {
1049
1228
  private readonly panel;
1050
1229
  readonly open: _angular_core.ModelSignal<boolean>;
1051
1230
  readonly title: _angular_core.InputSignal<string>;
1231
+ /** `start` = inline-start edge; `end` = inline-end (LTR right / RTL left). */
1052
1232
  readonly side: _angular_core.InputSignal<DgaDrawerSide>;
1053
1233
  readonly closeLabel: _angular_core.InputSignal<string>;
1054
1234
  readonly closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -1157,7 +1337,7 @@ declare class DgaAlert {
1157
1337
  readonly titleClasses: _angular_core.Signal<string>;
1158
1338
  readonly descriptionClasses: _angular_core.Signal<string>;
1159
1339
  readonly iconName: _angular_core.Signal<DgaIconName>;
1160
- readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1340
+ readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
1161
1341
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1162
1342
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAlert, "dga-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, ["*", "[dgaAlertActions]"], true, never>;
1163
1343
  }
@@ -1275,32 +1455,107 @@ declare class DgaPageFeedback {
1275
1455
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPageFeedback, "dga-page-feedback", never, { "question": { "alias": "question"; "required": false; "isSignal": true; }; "yesLabel": { "alias": "yesLabel"; "required": false; "isSignal": true; }; "noLabel": { "alias": "noLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "whyLabel": { "alias": "whyLabel"; "required": false; "isSignal": true; }; "whyHint": { "alias": "whyHint"; "required": false; "isSignal": true; }; "genderLabel": { "alias": "genderLabel"; "required": false; "isSignal": true; }; "commentLabel": { "alias": "commentLabel"; "required": false; "isSignal": true; }; "commentPlaceholder": { "alias": "commentPlaceholder"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "statistic": { "alias": "statistic"; "required": false; "isSignal": true; }; "thankYouMessage": { "alias": "thankYouMessage"; "required": false; "isSignal": true; }; "agreementBefore": { "alias": "agreementBefore"; "required": false; "isSignal": true; }; "participationLabel": { "alias": "participationLabel"; "required": false; "isSignal": true; }; "participationHref": { "alias": "participationHref"; "required": false; "isSignal": true; }; "agreementAnd": { "alias": "agreementAnd"; "required": false; "isSignal": true; }; "rulesLabel": { "alias": "rulesLabel"; "required": false; "isSignal": true; }; "rulesHref": { "alias": "rulesHref"; "required": false; "isSignal": true; }; "agreementAfter": { "alias": "agreementAfter"; "required": false; "isSignal": true; }; "defaultAgreement": { "alias": "defaultAgreement"; "required": false; "isSignal": true; }; "yesReasons": { "alias": "yesReasons"; "required": false; "isSignal": true; }; "noReasons": { "alias": "noReasons"; "required": false; "isSignal": true; }; "genderOptions": { "alias": "genderOptions"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; }, { "submitted": "submitted"; "closed": "closed"; }, never, ["[dgaPageFeedbackAgreement]"], true, never>;
1276
1456
  }
1277
1457
 
1278
- type DgaCookieConsent = 'accepted' | 'declined' | null;
1458
+ /** Stored consent outcome. `custom` = per-category preferences were saved. */
1459
+ type DgaCookieConsent = 'accepted' | 'declined' | 'custom' | null;
1460
+ /** Horizontal placement. Logical `start`/`end` follow reading direction. */
1461
+ type DgaCookiesAlign = 'start' | 'center' | 'end';
1462
+ /**
1463
+ * Banner anchor on the viewport.
1464
+ * - `start` | `center` | `end` → bottom edge + that alignment (compact)
1465
+ * - `bottom` | `top` → that edge, centered
1466
+ * - `bottom-start` / `top-end` / … → explicit edge + alignment
1467
+ */
1468
+ type DgaCookiesPosition = DgaCookiesAlign | 'bottom' | 'top' | 'bottom-start' | 'bottom-center' | 'bottom-end' | 'top-start' | 'top-center' | 'top-end';
1469
+ /** Optional cookie category for granular consent (GDPR-style preferences). */
1470
+ interface DgaCookieCategory {
1471
+ id: string;
1472
+ label: string;
1473
+ description?: string;
1474
+ /** Always enabled; toggle is disabled. */
1475
+ required?: boolean;
1476
+ /** Initial state when no stored preference exists (ignored when `required`). */
1477
+ defaultEnabled?: boolean;
1478
+ }
1479
+ type DgaCookiePreferences = Record<string, boolean>;
1480
+ interface DgaCookieDecision {
1481
+ consent: Exclude<DgaCookieConsent, null>;
1482
+ preferences: DgaCookiePreferences;
1483
+ }
1279
1484
  /**
1280
1485
  * Privacy-compliant cookie consent banner.
1281
- * Persists choice for 365 days; optional GA gating via `gaTrackingIds`.
1486
+ * Persists choice (default 365 days); optional category preferences and GA gating.
1282
1487
  */
1283
1488
  declare class DgaCookies implements OnInit {
1284
1489
  private readonly destroyRef;
1490
+ private readonly hostRef;
1491
+ /** Original parent before body portal (restored on destroy). */
1492
+ private portalHome;
1285
1493
  readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
1494
+ /**
1495
+ * Viewport anchor. Use `start` / `center` / `end` for bottom placement,
1496
+ * or compound values like `top-end`. Prefer `align` to set horizontal only.
1497
+ */
1498
+ readonly position: _angular_core.InputSignal<DgaCookiesPosition>;
1499
+ /** Horizontal alignment (`start` | `center` | `end`). Overrides `position` when set. */
1500
+ readonly align: _angular_core.InputSignal<"" | DgaCookiesAlign>;
1286
1501
  /** Auto-open delay when no consent is stored. `0` disables auto-show. */
1287
1502
  readonly delayMs: _angular_core.InputSignal<number>;
1503
+ /** When false, never auto-opens (call `show()` manually). */
1504
+ readonly autoShow: _angular_core.InputSignalWithTransform<boolean, unknown>;
1505
+ /** Show the dismiss (X) control. Dismiss does not persist a decision. */
1506
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1507
+ /** Show the reject / decline non-essential button. */
1508
+ readonly showDecline: _angular_core.InputSignalWithTransform<boolean, unknown>;
1509
+ /** Show policy / terms links row. */
1510
+ readonly showLinks: _angular_core.InputSignalWithTransform<boolean, unknown>;
1511
+ /** Show Customize when `categories` are provided. */
1512
+ readonly showCustomize: _angular_core.InputSignalWithTransform<boolean, unknown>;
1513
+ /** Dim the page behind the banner (modal-style overlay). */
1514
+ readonly overlay: _angular_core.InputSignalWithTransform<boolean, unknown>;
1515
+ /**
1516
+ * @deprecated Prefer `overlay`. Same behavior — kept for backward compatibility.
1517
+ */
1518
+ readonly blocking: _angular_core.InputSignalWithTransform<boolean, unknown>;
1519
+ /** Close the banner when the overlay backdrop is clicked (requires dismissible). */
1520
+ readonly overlayClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
1288
1521
  readonly termsHref: _angular_core.InputSignal<string>;
1289
1522
  readonly privacyHref: _angular_core.InputSignal<string>;
1523
+ /** Optional third policy link (cookie policy). Empty hides it. */
1524
+ readonly cookiePolicyHref: _angular_core.InputSignal<string>;
1525
+ readonly termsLabel: _angular_core.InputSignal<string>;
1526
+ readonly privacyLabel: _angular_core.InputSignal<string>;
1527
+ readonly cookiePolicyLabel: _angular_core.InputSignal<string>;
1290
1528
  readonly title: _angular_core.InputSignal<string>;
1291
1529
  readonly description: _angular_core.InputSignal<string>;
1292
1530
  readonly acceptLabel: _angular_core.InputSignal<string>;
1293
1531
  readonly declineLabel: _angular_core.InputSignal<string>;
1294
- /** Google Analytics IDs to disable on decline. */
1532
+ readonly customizeLabel: _angular_core.InputSignal<string>;
1533
+ readonly saveLabel: _angular_core.InputSignal<string>;
1534
+ readonly icon: _angular_core.InputSignal<DgaIconName>;
1535
+ /** Google Analytics IDs to disable on decline / when analytics is off. */
1295
1536
  readonly gaTrackingIds: _angular_core.InputSignal<string | readonly string[]>;
1537
+ /** Consent cookie lifetime in days. */
1538
+ readonly consentDays: _angular_core.InputSignal<number>;
1539
+ /** Consent cookie name (also used as localStorage key prefix). */
1540
+ readonly consentCookieName: _angular_core.InputSignal<string>;
1541
+ /** Extra cookies to delete when analytics/marketing is denied. */
1542
+ readonly analyticsCookieNames: _angular_core.InputSignal<readonly string[]>;
1543
+ /** Granular categories. When set, Customize / Save Preferences become available. */
1544
+ readonly categories: _angular_core.InputSignal<readonly DgaCookieCategory[]>;
1296
1545
  readonly accepted: _angular_core.OutputEmitterRef<void>;
1297
1546
  readonly declined: _angular_core.OutputEmitterRef<void>;
1298
1547
  readonly closed: _angular_core.OutputEmitterRef<void>;
1299
- readonly decided: _angular_core.OutputEmitterRef<"accepted" | "declined">;
1548
+ readonly decided: _angular_core.OutputEmitterRef<"accepted" | "declined" | "custom">;
1549
+ readonly preferencesChange: _angular_core.OutputEmitterRef<DgaCookiePreferences>;
1550
+ readonly decision: _angular_core.OutputEmitterRef<DgaCookieDecision>;
1300
1551
  /** Controls enter/exit animation state. */
1301
1552
  readonly visible: _angular_core.WritableSignal<boolean>;
1302
1553
  /** Keeps the panel in the DOM while exit animation plays. */
1303
1554
  readonly mounted: _angular_core.WritableSignal<boolean>;
1555
+ /** Whether the category preferences panel is expanded. */
1556
+ readonly customizing: _angular_core.WritableSignal<boolean>;
1557
+ /** Draft toggles while customizing. */
1558
+ readonly draftPrefs: _angular_core.WritableSignal<DgaCookiePreferences>;
1304
1559
  private readonly seq;
1305
1560
  readonly titleId: string;
1306
1561
  readonly bodyId: string;
@@ -1311,31 +1566,87 @@ declare class DgaCookies implements OnInit {
1311
1566
  body: string;
1312
1567
  terms: string;
1313
1568
  privacy: string;
1569
+ cookiePolicy: string;
1314
1570
  accept: string;
1571
+ acceptAll: string;
1315
1572
  decline: string;
1573
+ customize: string;
1574
+ save: string;
1575
+ categories: string;
1576
+ policies: string;
1316
1577
  close: string;
1317
1578
  }>;
1579
+ readonly resolvedCategories: _angular_core.Signal<DgaCookieCategory[]>;
1580
+ readonly resolvedLinks: _angular_core.Signal<{
1581
+ href: string;
1582
+ label: string;
1583
+ }[]>;
1584
+ /**
1585
+ * Accept + Decline share a row; Customize / Save spans full width underneath
1586
+ * so Arabic labels stay on one line. Actions stay pinned below the scroll body.
1587
+ */
1588
+ readonly actionsClasses: _angular_core.Signal<string>;
1589
+ /** Resolved vertical edge + horizontal align (logical start/end). */
1590
+ readonly placement: _angular_core.Signal<{
1591
+ edge: "top" | "bottom";
1592
+ align: DgaCookiesAlign;
1593
+ }>;
1594
+ /** Whether a dimmed backdrop is shown (`overlay` or legacy `blocking`). */
1595
+ readonly hasOverlay: _angular_core.Signal<boolean>;
1318
1596
  readonly panelClasses: _angular_core.Signal<string>;
1319
1597
  constructor();
1320
1598
  ngOnInit(): void;
1321
- /** Re-open the banner (e.g. from a footer Cookie Settings link). */
1599
+ hasCategories(): boolean;
1600
+ hasLinks(): boolean;
1601
+ /**
1602
+ * Re-open the banner (e.g. from a footer Cookie Settings link).
1603
+ * Portals to `document.body` so overflow/transform ancestors cannot clip it.
1604
+ */
1322
1605
  show(): void;
1323
1606
  /** Hide without persisting a decision. */
1324
1607
  dismiss(): void;
1608
+ /** Backdrop click — dismiss only when overlayClose + dismissible. */
1609
+ onOverlayClick(): void;
1610
+ openCustomize(): void;
1611
+ onCategoryToggle(id: string, enabled: boolean): void;
1325
1612
  accept(): void;
1326
1613
  decline(): void;
1614
+ savePreferences(): void;
1615
+ private commit;
1616
+ private buildDefaultPrefs;
1617
+ private buildAllPrefs;
1618
+ private readStored;
1327
1619
  private hidePanel;
1328
1620
  private trackingIds;
1621
+ /** Move host to `body` so fixed positioning escapes overflow/transform ancestors. */
1622
+ private ensureBodyPortal;
1623
+ private restorePortal;
1329
1624
  private clearTimer;
1330
1625
  private clearCloseTimer;
1331
- static getConsent(): DgaCookieConsent;
1332
- static setConsent(value: Exclude<DgaCookieConsent, null>): void;
1333
- static clearConsent(): void;
1626
+ static getConsent(cookieName?: string): DgaCookieConsent;
1627
+ static getPreferences(cookieName?: string): DgaCookiePreferences | null;
1628
+ static setConsent(value: Exclude<DgaCookieConsent, null>, options?: {
1629
+ name?: string;
1630
+ days?: number;
1631
+ preferences?: DgaCookiePreferences;
1632
+ }): void;
1633
+ static clearConsent(cookieName?: string): void;
1634
+ /** @internal */
1635
+ static parseStored(raw: string | null): {
1636
+ consent: DgaCookieConsent;
1637
+ preferences: DgaCookiePreferences | null;
1638
+ };
1639
+ /** @internal */
1640
+ static writeConsent(status: Exclude<DgaCookieConsent, null>, preferences: DgaCookiePreferences | null, opts: {
1641
+ name: string;
1642
+ days: number;
1643
+ hasCategories: boolean;
1644
+ }): void;
1334
1645
  static get(name: string): string | null;
1335
1646
  static set(name: string, value: string, days?: number): void;
1336
1647
  static delete(name: string): void;
1337
1648
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaCookies, never>;
1338
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCookies, "dga-cookies", never, { "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "delayMs": { "alias": "delayMs"; "required": false; "isSignal": true; }; "termsHref": { "alias": "termsHref"; "required": false; "isSignal": true; }; "privacyHref": { "alias": "privacyHref"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "acceptLabel": { "alias": "acceptLabel"; "required": false; "isSignal": true; }; "declineLabel": { "alias": "declineLabel"; "required": false; "isSignal": true; }; "gaTrackingIds": { "alias": "gaTrackingIds"; "required": false; "isSignal": true; }; }, { "accepted": "accepted"; "declined": "declined"; "closed": "closed"; "decided": "decided"; }, never, never, true, never>;
1649
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaCookies, "dga-cookies", never, { "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "delayMs": { "alias": "delayMs"; "required": false; "isSignal": true; }; "autoShow": { "alias": "autoShow"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "showDecline": { "alias": "showDecline"; "required": false; "isSignal": true; }; "showLinks": { "alias": "showLinks"; "required": false; "isSignal": true; }; "showCustomize": { "alias": "showCustomize"; "required": false; "isSignal": true; }; "overlay": { "alias": "overlay"; "required": false; "isSignal": true; }; "blocking": { "alias": "blocking"; "required": false; "isSignal": true; }; "overlayClose": { "alias": "overlayClose"; "required": false; "isSignal": true; }; "termsHref": { "alias": "termsHref"; "required": false; "isSignal": true; }; "privacyHref": { "alias": "privacyHref"; "required": false; "isSignal": true; }; "cookiePolicyHref": { "alias": "cookiePolicyHref"; "required": false; "isSignal": true; }; "termsLabel": { "alias": "termsLabel"; "required": false; "isSignal": true; }; "privacyLabel": { "alias": "privacyLabel"; "required": false; "isSignal": true; }; "cookiePolicyLabel": { "alias": "cookiePolicyLabel"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "acceptLabel": { "alias": "acceptLabel"; "required": false; "isSignal": true; }; "declineLabel": { "alias": "declineLabel"; "required": false; "isSignal": true; }; "customizeLabel": { "alias": "customizeLabel"; "required": false; "isSignal": true; }; "saveLabel": { "alias": "saveLabel"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "gaTrackingIds": { "alias": "gaTrackingIds"; "required": false; "isSignal": true; }; "consentDays": { "alias": "consentDays"; "required": false; "isSignal": true; }; "consentCookieName": { "alias": "consentCookieName"; "required": false; "isSignal": true; }; "analyticsCookieNames": { "alias": "analyticsCookieNames"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; }, { "accepted": "accepted"; "declined": "declined"; "closed": "closed"; "decided": "decided"; "preferencesChange": "preferencesChange"; "decision": "decision"; }, never, never, true, never>;
1339
1650
  }
1340
1651
 
1341
1652
  type DgaRatingSize = 'sm' | 'md' | 'lg';
@@ -1428,7 +1739,7 @@ declare class DgaShare {
1428
1739
  readonly inlineClasses: _angular_core.Signal<string>;
1429
1740
  resolvedUrl(): string;
1430
1741
  resolvedTitle(): string;
1431
- onMenuSelect(value: string): void;
1742
+ onMenuSelect(item: DgaMenuItem | string): void;
1432
1743
  share(channel: string): void;
1433
1744
  copyLink(): Promise<void>;
1434
1745
  onCopied(): void;
@@ -1436,6 +1747,104 @@ declare class DgaShare {
1436
1747
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaShare, "dga-share", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; "shareTitle": { "alias": "shareTitle"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "buttonVariant": { "alias": "buttonVariant"; "required": false; "isSignal": true; }; "buttonSize": { "alias": "buttonSize"; "required": false; "isSignal": true; }; }, { "shared": "shared"; "linkCopied": "linkCopied"; }, never, never, true, never>;
1437
1748
  }
1438
1749
 
1750
+ type DgaChatbotPosition = 'end' | 'start' | 'left' | 'right';
1751
+ type DgaChatbotAnimation = 'fade' | 'slide' | 'scale' | 'none';
1752
+ type DgaChatbotSize = 'sm' | 'md' | 'lg';
1753
+ type DgaChatbotFabTone = 'primary' | 'secondary';
1754
+ interface DgaChatbotMessage {
1755
+ id: string;
1756
+ role: 'bot' | 'user';
1757
+ text: string;
1758
+ }
1759
+ /**
1760
+ * Floating live-chat launcher + panel. Place once near the app root
1761
+ * (beside `dga-scroll-top` / `dga-accessibility`).
1762
+ *
1763
+ * Use `stack` so FABs share one vertical dock:
1764
+ * a11y `0` → scroll-top `1` → chatbot `2`.
1765
+ */
1766
+ declare class DgaChatbot {
1767
+ private readonly destroyRef;
1768
+ private readonly injector;
1769
+ private readonly composerRef;
1770
+ private readonly logRef;
1771
+ /** Corner for FAB + panel. `end` / `start` follow reading direction. */
1772
+ readonly position: _angular_core.InputSignal<DgaChatbotPosition>;
1773
+ /** Panel enter animation. Honors `prefers-reduced-motion`. */
1774
+ readonly animation: _angular_core.InputSignal<DgaChatbotAnimation>;
1775
+ readonly size: _angular_core.InputSignal<DgaChatbotSize>;
1776
+ readonly title: _angular_core.InputSignal<string>;
1777
+ readonly subtitle: _angular_core.InputSignal<string>;
1778
+ readonly fabLabel: _angular_core.InputSignal<string>;
1779
+ readonly placeholder: _angular_core.InputSignal<string>;
1780
+ readonly fabIcon: _angular_core.InputSignal<DgaIconName>;
1781
+ /** Prefer a directional arrow so send ≠ chat bubble. */
1782
+ readonly sendIcon: _angular_core.InputSignal<DgaIconName>;
1783
+ readonly agentIcon: _angular_core.InputSignal<DgaIconName>;
1784
+ readonly fabTone: _angular_core.InputSignal<DgaChatbotFabTone>;
1785
+ /** Dim page behind the panel. */
1786
+ readonly overlay: _angular_core.InputSignalWithTransform<boolean, unknown>;
1787
+ /** Close when clicking the overlay. */
1788
+ readonly overlayClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
1789
+ /** Green online dot on the agent avatar. */
1790
+ readonly online: _angular_core.InputSignalWithTransform<boolean, unknown>;
1791
+ /** Hide launcher while the panel is open (recommended). */
1792
+ readonly hideFabWhenOpen: _angular_core.InputSignalWithTransform<boolean, unknown>;
1793
+ /**
1794
+ * 0-based slot in the shared FAB dock (bottom → top).
1795
+ * Typical: a11y=0, scroll-top=1, chatbot=2.
1796
+ */
1797
+ readonly stack: _angular_core.InputSignalWithTransform<number, unknown>;
1798
+ /**
1799
+ * @deprecated Prefer `stack`. When true and `stack` is unset legacy path —
1800
+ * kept for callers; `stack` wins.
1801
+ */
1802
+ readonly clearFab: _angular_core.InputSignalWithTransform<boolean, unknown>;
1803
+ /**
1804
+ * Anchor FAB/panel inside a relative parent (gallery / docs preview)
1805
+ * instead of the viewport — avoids a second global FAB.
1806
+ */
1807
+ readonly embedded: _angular_core.InputSignalWithTransform<boolean, unknown>;
1808
+ readonly initialMessages: _angular_core.InputSignal<readonly DgaChatbotMessage[]>;
1809
+ readonly sent: _angular_core.OutputEmitterRef<string>;
1810
+ readonly opened: _angular_core.OutputEmitterRef<void>;
1811
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1812
+ readonly open: _angular_core.WritableSignal<boolean>;
1813
+ readonly draft: _angular_core.WritableSignal<string>;
1814
+ readonly messages: _angular_core.WritableSignal<DgaChatbotMessage[]>;
1815
+ private readonly seq;
1816
+ readonly panelId: string;
1817
+ private msgSeq;
1818
+ private seeded;
1819
+ private prevOverflow;
1820
+ readonly copy: _angular_core.Signal<{
1821
+ title: string;
1822
+ subtitle: string;
1823
+ open: string;
1824
+ close: string;
1825
+ send: string;
1826
+ input: string;
1827
+ placeholder: string;
1828
+ panelLabel: string;
1829
+ welcome: string;
1830
+ }>;
1831
+ readonly fabBottom: _angular_core.Signal<string>;
1832
+ readonly fabClasses: _angular_core.Signal<string>;
1833
+ readonly panelClasses: _angular_core.Signal<string>;
1834
+ constructor();
1835
+ private ensureSeed;
1836
+ toggle(): void;
1837
+ show(): void;
1838
+ close(): void;
1839
+ onBackdrop(): void;
1840
+ onSubmit(event: Event): void;
1841
+ private scrollLogToEnd;
1842
+ private lockScroll;
1843
+ private unlockScroll;
1844
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChatbot, never>;
1845
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaChatbot, "dga-chatbot", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "fabLabel": { "alias": "fabLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "fabIcon": { "alias": "fabIcon"; "required": false; "isSignal": true; }; "sendIcon": { "alias": "sendIcon"; "required": false; "isSignal": true; }; "agentIcon": { "alias": "agentIcon"; "required": false; "isSignal": true; }; "fabTone": { "alias": "fabTone"; "required": false; "isSignal": true; }; "overlay": { "alias": "overlay"; "required": false; "isSignal": true; }; "overlayClose": { "alias": "overlayClose"; "required": false; "isSignal": true; }; "online": { "alias": "online"; "required": false; "isSignal": true; }; "hideFabWhenOpen": { "alias": "hideFabWhenOpen"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "clearFab": { "alias": "clearFab"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; "initialMessages": { "alias": "initialMessages"; "required": false; "isSignal": true; }; }, { "sent": "sent"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
1846
+ }
1847
+
1439
1848
  /** One-tap accessibility presets (compose primitives + settings). */
1440
1849
  type DgaA11yBundle = 'epilepsy-safe' | 'visually-impaired' | 'cognitive-disability' | 'motor-impaired' | 'colorblind' | 'dyslexia-friendly' | 'adhd-friendly';
1441
1850
  /** Primitive toggles stamped on `data-a11y`. */
@@ -1520,8 +1929,14 @@ type SectionOpen = SectionId | null;
1520
1929
  declare class DgaAccessibility {
1521
1930
  readonly a11y: DgaAccessibilityService;
1522
1931
  readonly position: _angular_core.InputSignal<DgaAccessibilityPosition>;
1932
+ /**
1933
+ * 0-based slot in the shared FAB dock (bottom → top).
1934
+ * Typical: a11y=0, scroll-top=1, chatbot=2.
1935
+ */
1936
+ readonly stack: _angular_core.InputSignalWithTransform<number, unknown>;
1523
1937
  readonly panelId = "dga-accessibility-panel";
1524
1938
  private readonly panelRef;
1939
+ readonly fabBottom: _angular_core.Signal<string>;
1525
1940
  readonly sectionOpen: _angular_core.WritableSignal<SectionOpen>;
1526
1941
  readonly resetArmed: _angular_core.WritableSignal<boolean>;
1527
1942
  readonly liveMsg: _angular_core.WritableSignal<string>;
@@ -1641,7 +2056,7 @@ declare class DgaAccessibility {
1641
2056
  private announce;
1642
2057
  private onMaskKeys;
1643
2058
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccessibility, never>;
1644
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccessibility, "dga-accessibility", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2059
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccessibility, "dga-accessibility", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1645
2060
  }
1646
2061
 
1647
2062
  /**
@@ -1667,13 +2082,29 @@ declare class DgaAccordionItem {
1667
2082
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccordionItem, "dga-accordion-item", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
1668
2083
  }
1669
2084
 
2085
+ interface DgaAccordionSection {
2086
+ id: string;
2087
+ title: string;
2088
+ content?: string;
2089
+ open?: boolean;
2090
+ }
1670
2091
  declare class DgaAccordion {
1671
2092
  /** Allow multiple panels open at once. */
1672
2093
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
2094
+ /** Optional data-driven sections; when non-empty, renders items from this list instead of `<ng-content>`. */
2095
+ readonly sections: _angular_core.InputSignal<DgaAccordionSection[]>;
1673
2096
  readonly items: _angular_core.Signal<readonly DgaAccordionItem[]>;
2097
+ private readonly seq;
2098
+ private readonly openSectionIds;
2099
+ private sectionsInitialized;
2100
+ constructor();
2101
+ headerId(section: DgaAccordionSection): string;
2102
+ panelId(section: DgaAccordionSection): string;
2103
+ isSectionOpen(section: DgaAccordionSection): boolean;
2104
+ toggleSection(section: DgaAccordionSection): void;
1674
2105
  onItemOpen(item: DgaAccordionItem): void;
1675
2106
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAccordion, never>;
1676
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccordion, "dga-accordion", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
2107
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAccordion, "dga-accordion", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
1677
2108
  }
1678
2109
 
1679
2110
  interface DgaBreadcrumbItem {
@@ -1685,58 +2116,79 @@ declare class DgaBreadcrumb {
1685
2116
  readonly items: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
1686
2117
  readonly label: _angular_core.InputSignal<string>;
1687
2118
  readonly separator: _angular_core.InputSignal<DgaBreadcrumbSeparator>;
2119
+ /** Emits the clicked item for non-last links. Navigation via `href` is not prevented. */
2120
+ readonly itemClick: _angular_core.OutputEmitterRef<DgaBreadcrumbItem>;
2121
+ onItemClick(item: DgaBreadcrumbItem): void;
1688
2122
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaBreadcrumb, never>;
1689
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaBreadcrumb, "dga-breadcrumb", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2123
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaBreadcrumb, "dga-breadcrumb", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
1690
2124
  }
1691
2125
 
1692
2126
  declare class DgaPagination {
1693
- readonly pageInput: _angular_core.InputSignal<number>;
1694
- readonly page: _angular_core.WritableSignal<number>;
2127
+ /** Two-way bindable via `[(page)]`; also emits the built-in `pageChange` output. */
2128
+ readonly page: _angular_core.ModelSignal<number>;
1695
2129
  readonly totalPages: _angular_core.InputSignal<number>;
1696
2130
  readonly label: _angular_core.InputSignal<string>;
1697
2131
  readonly prevLabel: _angular_core.InputSignal<string>;
1698
2132
  readonly nextLabel: _angular_core.InputSignal<string>;
1699
- readonly pageChange: _angular_core.OutputEmitterRef<number>;
1700
2133
  readonly pages: _angular_core.Signal<(number | "…")[]>;
1701
2134
  btnClass(active: boolean): string;
1702
2135
  go(next: number): void;
1703
2136
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPagination, never>;
1704
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPagination, "dga-pagination", never, { "pageInput": { "alias": "page"; "required": false; "isSignal": true; }; "totalPages": { "alias": "totalPages"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
2137
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPagination, "dga-pagination", never, { "page": { "alias": "page"; "required": false; "isSignal": true; }; "totalPages": { "alias": "totalPages"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; }, never, never, true, never>;
1705
2138
  }
1706
2139
 
1707
2140
  declare class DgaTab {
1708
2141
  private readonly tabs;
1709
2142
  readonly value: _angular_core.InputSignal<string>;
1710
2143
  readonly label: _angular_core.InputSignal<string>;
2144
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1711
2145
  readonly seq: number;
1712
2146
  readonly tabId: string;
1713
2147
  readonly panelId: string;
1714
2148
  readonly active: _angular_core.Signal<boolean>;
1715
2149
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTab, never>;
1716
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTab, "dga-tab", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2150
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTab, "dga-tab", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1717
2151
  }
1718
2152
 
2153
+ interface DgaTabItem {
2154
+ value: string;
2155
+ label: string;
2156
+ disabled?: boolean;
2157
+ }
1719
2158
  declare class DgaTabs {
1720
2159
  private readonly host;
2160
+ private readonly seq;
1721
2161
  readonly selected: _angular_core.ModelSignal<string>;
1722
2162
  readonly label: _angular_core.InputSignal<string>;
2163
+ /** Optional data-driven tab headers; when non-empty, renders the tablist from this list. */
2164
+ readonly items: _angular_core.InputSignal<DgaTabItem[]>;
1723
2165
  readonly tabs: _angular_core.Signal<readonly DgaTab[]>;
2166
+ readonly headerItems: _angular_core.Signal<DgaTabItem[]>;
1724
2167
  constructor();
1725
- tabButtonClass(value: string): string;
2168
+ tabButtonClass(value: string, disabled: boolean): string;
2169
+ tabIdFor(value: string): string;
2170
+ panelIdFor(value: string): string;
1726
2171
  select(value: string): void;
1727
2172
  onTablistKey(event: KeyboardEvent): void;
2173
+ private stepIndex;
2174
+ private lastEnabledIndex;
1728
2175
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTabs, never>;
1729
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTabs, "dga-tabs", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; }, ["tabs"], ["*"], true, never>;
2176
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTabs, "dga-tabs", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; }, ["tabs"], ["*"], true, never>;
1730
2177
  }
1731
2178
 
2179
+ type DgaStepStatus = 'pending' | 'active' | 'completed' | 'error';
1732
2180
  interface DgaStep {
1733
2181
  label: string;
1734
2182
  description?: string;
2183
+ disabled?: boolean;
2184
+ /** Overrides the status normally derived from the active index. */
2185
+ status?: DgaStepStatus;
1735
2186
  }
1736
2187
  declare class DgaStepper {
1737
2188
  readonly steps: _angular_core.InputSignal<DgaStep[]>;
1738
2189
  readonly active: _angular_core.ModelSignal<number>;
1739
2190
  readonly label: _angular_core.InputSignal<string>;
2191
+ stepStatus(index: number): DgaStepStatus;
1740
2192
  stepButtonClasses(index: number): string;
1741
2193
  indicatorClasses(index: number): string;
1742
2194
  go(index: number): void;
@@ -1763,31 +2215,153 @@ declare class DgaToc {
1763
2215
  interface DgaSideNavItem {
1764
2216
  label: string;
1765
2217
  value: string;
1766
- icon?: string;
2218
+ icon?: DgaIconName;
2219
+ disabled?: boolean;
2220
+ /** Optional link target — when set, the item renders as an anchor. */
2221
+ href?: string;
2222
+ badge?: string;
2223
+ /** Nested level-2 items (expandable on desktop). */
2224
+ children?: DgaSideNavItem[];
2225
+ /** Start expanded when children exist (default: true if active child). */
2226
+ expanded?: boolean;
2227
+ }
2228
+ /** Category / section in a multi-level admin side nav. */
2229
+ interface DgaSideNavGroup {
2230
+ id: string;
2231
+ /** Optional section heading (hidden when sidebar is narrow). */
2232
+ label?: string;
2233
+ items: DgaSideNavItem[];
1767
2234
  }
1768
2235
  /**
1769
- * Side navigation.
1770
- * Below `lg`: horizontal scroll rail (mobile-friendly).
2236
+ * Side navigation with optional groups and nested children.
2237
+ * Below `lg`: horizontal scroll rail (top-level only).
1771
2238
  * From `lg`: vertical sidebar (optional collapse to icons).
1772
2239
  */
1773
2240
  declare class DgaSideNav {
2241
+ /** Flat item list (backward compatible). Ignored when `groups` is set. */
1774
2242
  readonly items: _angular_core.InputSignal<DgaSideNavItem[]>;
2243
+ /** Grouped / categorized navigation (preferred for admin shells). */
2244
+ readonly groups: _angular_core.InputSignal<DgaSideNavGroup[]>;
1775
2245
  readonly active: _angular_core.ModelSignal<string>;
1776
2246
  readonly collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1777
2247
  readonly label: _angular_core.InputSignal<string>;
1778
2248
  readonly toggleLabel: _angular_core.InputSignal<string>;
1779
2249
  readonly select: _angular_core.OutputEmitterRef<DgaSideNavItem>;
1780
2250
  readonly narrow: _angular_core.ModelSignal<boolean>;
1781
- itemClasses(value: string): string;
2251
+ /** Values of parents forced open by the user. */
2252
+ private readonly expanded;
2253
+ /** Values of parents forced closed by the user. */
2254
+ private readonly collapsed;
2255
+ readonly resolvedGroups: _angular_core.Signal<DgaSideNavGroup[]>;
2256
+ hasChildren(item: DgaSideNavItem): boolean;
2257
+ isExpanded(item: DgaSideNavItem): boolean;
2258
+ isActive(item: DgaSideNavItem): boolean;
2259
+ itemClasses(item: DgaSideNavItem, depth: number): string;
1782
2260
  toggleNarrow(): void;
1783
- onSelect(item: DgaSideNavItem): void;
2261
+ onSelect(item: DgaSideNavItem, event?: Event): void;
2262
+ private childIsActive;
2263
+ private toggleExpanded;
1784
2264
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaSideNav, never>;
1785
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSideNav, "dga-side-nav", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "toggleLabel": { "alias": "toggleLabel"; "required": false; "isSignal": true; }; "narrow": { "alias": "narrow"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "select": "select"; "narrow": "narrowChange"; }, never, never, true, never>;
2265
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSideNav, "dga-side-nav", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "toggleLabel": { "alias": "toggleLabel"; "required": false; "isSignal": true; }; "narrow": { "alias": "narrow"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "select": "select"; "narrow": "narrowChange"; }, never, never, true, never>;
2266
+ }
2267
+
2268
+ /** Category block inside a dual-nav secondary panel. */
2269
+ interface DgaDualNavCategory {
2270
+ id: string;
2271
+ label?: string;
2272
+ items: DgaSideNavItem[];
2273
+ }
2274
+ /** Top-level rail section (icon) + secondary panel categories. */
2275
+ interface DgaDualNavSection {
2276
+ id: string;
2277
+ label: string;
2278
+ icon: DgaIconName;
2279
+ badge?: string;
2280
+ categories: DgaDualNavCategory[];
2281
+ }
2282
+ /**
2283
+ * Metronic Demo 4–style dual navigation:
2284
+ * slim icon rail + secondary panel with categorized links.
2285
+ * @see https://keenthemes.com/metronic/tailwind/demo4/
2286
+ */
2287
+ declare class DgaDualNav {
2288
+ readonly sections: _angular_core.InputSignal<DgaDualNavSection[]>;
2289
+ readonly active: _angular_core.ModelSignal<string>;
2290
+ readonly activeSectionId: _angular_core.ModelSignal<string>;
2291
+ readonly panelOpen: _angular_core.ModelSignal<boolean>;
2292
+ readonly railLabel: _angular_core.InputSignal<string>;
2293
+ readonly panelEyebrow: _angular_core.InputSignal<string>;
2294
+ readonly closePanelLabel: _angular_core.InputSignal<string>;
2295
+ readonly select: _angular_core.OutputEmitterRef<DgaSideNavItem>;
2296
+ readonly activeSection: _angular_core.Signal<DgaDualNavSection>;
2297
+ constructor();
2298
+ selectSection(id: string): void;
2299
+ onSelect(item: DgaSideNavItem): void;
2300
+ linkClasses(item: DgaSideNavItem, nested?: boolean): string;
2301
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDualNav, never>;
2302
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDualNav, "dga-dual-nav", never, { "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "activeSectionId": { "alias": "activeSectionId"; "required": false; "isSignal": true; }; "panelOpen": { "alias": "panelOpen"; "required": false; "isSignal": true; }; "railLabel": { "alias": "railLabel"; "required": false; "isSignal": true; }; "panelEyebrow": { "alias": "panelEyebrow"; "required": false; "isSignal": true; }; "closePanelLabel": { "alias": "closePanelLabel"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "activeSectionId": "activeSectionIdChange"; "panelOpen": "panelOpenChange"; "select": "select"; }, never, ["[dgaDualNavBrand]", "[dgaDualNavRailFoot]"], true, never>;
2303
+ }
2304
+
2305
+ type DgaNavRailPosition = 'static' | 'start' | 'end' | 'left' | 'right';
2306
+ type DgaNavRailAppearance = 'plain' | 'elevated' | 'outline';
2307
+ type DgaNavRailSize = 'sm' | 'md' | 'lg';
2308
+ type DgaNavRailActiveStyle = 'soft' | 'solid' | 'ring';
2309
+ interface DgaNavRailItem {
2310
+ /** Accessible label (also used for tooltip). */
2311
+ label: string;
2312
+ /** Stable id used for `active` binding / selection. */
2313
+ value: string;
2314
+ icon: DgaIconName;
2315
+ disabled?: boolean;
2316
+ /** Optional in-page or external link (`#section` for section jumps). */
2317
+ href?: string;
2318
+ }
2319
+ /**
2320
+ * Slim icon rail for jumping between page sections or compact app areas.
2321
+ * Distinct from `dga-side-nav` (labeled sidebar) and `dga-toc` (text outline).
2322
+ */
2323
+ declare class DgaNavRail {
2324
+ readonly items: _angular_core.InputSignal<readonly DgaNavRailItem[]>;
2325
+ readonly active: _angular_core.ModelSignal<string>;
2326
+ readonly label: _angular_core.InputSignal<string>;
2327
+ readonly expandLabel: _angular_core.InputSignal<string>;
2328
+ /** `static` for in-flow layout; otherwise docks to a viewport edge. */
2329
+ readonly position: _angular_core.InputSignal<DgaNavRailPosition>;
2330
+ readonly appearance: _angular_core.InputSignal<DgaNavRailAppearance>;
2331
+ readonly size: _angular_core.InputSignal<DgaNavRailSize>;
2332
+ readonly activeStyle: _angular_core.InputSignal<DgaNavRailActiveStyle>;
2333
+ /** Edge inset in px when `position` is fixed. */
2334
+ readonly offset: _angular_core.InputSignalWithTransform<number, unknown>;
2335
+ /** Show a chevron control that emits `expandChange`. */
2336
+ readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2337
+ readonly expanded: _angular_core.ModelSignal<boolean>;
2338
+ /** Smooth-scroll to `#href` targets inside the page. */
2339
+ readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2340
+ readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
2341
+ readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
2342
+ readonly edgeAttr: _angular_core.Signal<"start" | "end" | "right" | "left" | null>;
2343
+ readonly offsetCss: _angular_core.Signal<string>;
2344
+ readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
2345
+ readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;
2346
+ readonly expandIcon: _angular_core.Signal<"chevronLeft" | "chevronRight">;
2347
+ readonly listGapClass: _angular_core.Signal<"gap-xs" | "gap-sm" | "gap-md">;
2348
+ readonly railClasses: _angular_core.Signal<string>;
2349
+ expandBtnClasses(): string;
2350
+ itemClasses(item: DgaNavRailItem): string;
2351
+ onSelect(item: DgaNavRailItem, event?: MouseEvent): void;
2352
+ toggleExpand(): void;
2353
+ private prefersReducedMotion;
2354
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNavRail, never>;
2355
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNavRail, "dga-nav-rail", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "activeStyle": { "alias": "activeStyle"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "smoothScroll": { "alias": "smoothScroll"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "expanded": "expandedChange"; "select": "select"; "expandChange": "expandChange"; }, never, never, true, never>;
1786
2356
  }
1787
2357
 
1788
2358
  interface DgaFilterItem {
1789
2359
  id: string;
1790
2360
  label: string;
2361
+ /** Optional result count shown as a trailing badge. */
2362
+ count?: number;
2363
+ disabled?: boolean;
2364
+ icon?: DgaIconName;
1791
2365
  }
1792
2366
  declare class DgaFilterBar {
1793
2367
  readonly filters: _angular_core.InputSignal<DgaFilterItem[]>;
@@ -1796,8 +2370,9 @@ declare class DgaFilterBar {
1796
2370
  readonly clearLabel: _angular_core.InputSignal<string>;
1797
2371
  readonly activeSet: _angular_core.Signal<Set<string>>;
1798
2372
  isActive(id: string): boolean;
1799
- chipClass(active: boolean): string;
1800
- toggle(id: string): void;
2373
+ chipClass(active: boolean, disabled: boolean): string;
2374
+ countClass(active: boolean): string;
2375
+ toggle(id: string, disabled?: boolean): void;
1801
2376
  clearAll(): void;
1802
2377
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFilterBar, never>;
1803
2378
  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>;
@@ -1829,11 +2404,16 @@ declare class DgaScrollTop {
1829
2404
  /** Use smooth scrolling when supported. */
1830
2405
  readonly smooth: _angular_core.InputSignalWithTransform<boolean, unknown>;
1831
2406
  /**
1832
- * Lift the button above a typical `dga-accessibility` FAB
1833
- * (56px + edge margin + gap).
2407
+ * 0-based slot in the shared FAB dock (bottom top).
2408
+ * Typical: a11y=0, scroll-top=1, chatbot=2.
2409
+ */
2410
+ readonly stack: _angular_core.InputSignalWithTransform<number, unknown>;
2411
+ /**
2412
+ * @deprecated Prefer `stack`. Kept for older callers.
1834
2413
  */
1835
2414
  readonly clearFab: _angular_core.InputSignalWithTransform<boolean, unknown>;
1836
2415
  readonly visible: _angular_core.WritableSignal<boolean>;
2416
+ readonly fabBottom: _angular_core.Signal<string>;
1837
2417
  private ticking;
1838
2418
  private readonly onScroll;
1839
2419
  readonly btnClasses: _angular_core.Signal<string>;
@@ -1842,7 +2422,7 @@ declare class DgaScrollTop {
1842
2422
  scrollToTop(): void;
1843
2423
  private syncVisibility;
1844
2424
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaScrollTop, never>;
1845
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaScrollTop, "dga-scroll-top", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "clearFab": { "alias": "clearFab"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2425
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaScrollTop, "dga-scroll-top", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "clearFab": { "alias": "clearFab"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1846
2426
  }
1847
2427
 
1848
2428
  /** Maps official card surface: stroke / elevation / fill. */
@@ -2000,6 +2580,37 @@ declare class DgaExpandable {
2000
2580
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaExpandable, "dga-expandable", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "summary": { "alias": "summary"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
2001
2581
  }
2002
2582
 
2583
+ /**
2584
+ * `content` — sticky aside inside page flow (portal templates).
2585
+ * `viewport` — fixed full-height admin shell (Metronic-style app chrome).
2586
+ */
2587
+ type DgaAppShellAppearance = 'content' | 'viewport';
2588
+ /**
2589
+ * App shell: aside nav + optional header + main column.
2590
+ *
2591
+ * Projection hooks (class selectors — more reliable than camelCase attrs):
2592
+ * - `.dga-app-shell-brand` — sidebar brand
2593
+ * - `.dga-app-shell-nav` — side navigation
2594
+ * - `.dga-app-shell-nav-foot` — sidebar footer
2595
+ * - `.dga-app-shell-header` — main top bar
2596
+ * - default slot — scrollable main body
2597
+ */
2598
+ declare class DgaAppShell {
2599
+ /** Accessible name for the nav aside. */
2600
+ readonly navLabel: _angular_core.InputSignal<string>;
2601
+ /** `viewport` = full-height admin shell; `content` = in-flow sticky aside. */
2602
+ readonly appearance: _angular_core.InputSignal<DgaAppShellAppearance>;
2603
+ /** Soften viewport body padding (default true for viewport). */
2604
+ readonly padded: _angular_core.InputSignalWithTransform<boolean, unknown>;
2605
+ readonly isViewport: _angular_core.Signal<boolean>;
2606
+ readonly layoutClasses: _angular_core.Signal<string>;
2607
+ readonly navClasses: _angular_core.Signal<string>;
2608
+ readonly mainClasses: _angular_core.Signal<string>;
2609
+ readonly bodyClasses: _angular_core.Signal<string>;
2610
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAppShell, never>;
2611
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAppShell, "dga-app-shell", never, { "navLabel": { "alias": "navLabel"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "padded": { "alias": "padded"; "required": false; "isSignal": true; }; }, {}, never, [".dga-app-shell-brand, [dgaAppShellBrand]", ".dga-app-shell-nav, [dgaAppShellNav]", ".dga-app-shell-nav-foot, [dgaAppShellNavFoot]", ".dga-app-shell-header, [dgaAppShellHeader]", "*"], true, never>;
2612
+ }
2613
+
2003
2614
  type DgaHeaderAppearance = 'default' | 'portal';
2004
2615
  /**
2005
2616
  * Mobile / narrow navigation chrome (portal header, `md` and below):
@@ -2222,6 +2833,8 @@ declare class DgaHeader {
2222
2833
  }>;
2223
2834
  readonly logout: _angular_core.OutputEmitterRef<void>;
2224
2835
  readonly userLinkClick: _angular_core.OutputEmitterRef<DgaHeaderUserMenuLink>;
2836
+ /** Emits on click of any top-level nav link or dropdown link (desktop + mobile). */
2837
+ readonly navLinkClick: _angular_core.OutputEmitterRef<DgaNavLink | DgaNavItem>;
2225
2838
  readonly mobileOpen: _angular_core.WritableSignal<boolean>;
2226
2839
  readonly openDropdown: _angular_core.WritableSignal<number | null>;
2227
2840
  readonly searchOpen: _angular_core.WritableSignal<boolean>;
@@ -2343,9 +2956,10 @@ declare class DgaHeader {
2343
2956
  onKey(event: KeyboardEvent): void;
2344
2957
  onScroll(): void;
2345
2958
  onResize(): void;
2959
+ onNavLinkClick(link: DgaNavLink | DgaNavItem, event: MouseEvent): void;
2346
2960
  onDocClick(event: MouseEvent): void;
2347
2961
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaHeader, never>;
2348
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaHeader, "dga-header", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "brandSlogan": { "alias": "brandSlogan"; "required": false; "isSignal": true; }; "brandLogo": { "alias": "brandLogo"; "required": false; "isSignal": true; }; "brandLogoAlt": { "alias": "brandLogoAlt"; "required": false; "isSignal": true; }; "brandPlaceholder": { "alias": "brandPlaceholder"; "required": false; "isSignal": true; }; "brandHref": { "alias": "brandHref"; "required": false; "isSignal": true; }; "navLabel": { "alias": "navLabel"; "required": false; "isSignal": true; }; "menuToggleLabel": { "alias": "menuToggleLabel"; "required": false; "isSignal": true; }; "menuCloseLabel": { "alias": "menuCloseLabel"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "mobileNav": { "alias": "mobileNav"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "searchQuery": { "alias": "searchQuery"; "required": false; "isSignal": true; }; "notifications": { "alias": "notifications"; "required": false; "isSignal": true; }; "login": { "alias": "login"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "authenticated": { "alias": "authenticated"; "required": false; "isSignal": true; }; }, { "searchQuery": "searchQueryChange"; "authenticated": "authenticatedChange"; "actionClick": "actionClick"; "searchSubmit": "searchSubmit"; "searchSuggestionSelect": "searchSuggestionSelect"; "searchVoice": "searchVoice"; "notificationAction": "notificationAction"; "loginSubmit": "loginSubmit"; "logout": "logout"; "userLinkClick": "userLinkClick"; }, never, ["[dgaHeaderBrand]", "*", "[dgaHeaderEnd]"], true, never>;
2962
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaHeader, "dga-header", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "brandSlogan": { "alias": "brandSlogan"; "required": false; "isSignal": true; }; "brandLogo": { "alias": "brandLogo"; "required": false; "isSignal": true; }; "brandLogoAlt": { "alias": "brandLogoAlt"; "required": false; "isSignal": true; }; "brandPlaceholder": { "alias": "brandPlaceholder"; "required": false; "isSignal": true; }; "brandHref": { "alias": "brandHref"; "required": false; "isSignal": true; }; "navLabel": { "alias": "navLabel"; "required": false; "isSignal": true; }; "menuToggleLabel": { "alias": "menuToggleLabel"; "required": false; "isSignal": true; }; "menuCloseLabel": { "alias": "menuCloseLabel"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "mobileNav": { "alias": "mobileNav"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "searchQuery": { "alias": "searchQuery"; "required": false; "isSignal": true; }; "notifications": { "alias": "notifications"; "required": false; "isSignal": true; }; "login": { "alias": "login"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "authenticated": { "alias": "authenticated"; "required": false; "isSignal": true; }; }, { "searchQuery": "searchQueryChange"; "authenticated": "authenticatedChange"; "actionClick": "actionClick"; "searchSubmit": "searchSubmit"; "searchSuggestionSelect": "searchSuggestionSelect"; "searchVoice": "searchVoice"; "notificationAction": "notificationAction"; "loginSubmit": "loginSubmit"; "logout": "logout"; "userLinkClick": "userLinkClick"; "navLinkClick": "navLinkClick"; }, never, ["[dgaHeaderBrand]", "*", "[dgaHeaderEnd]"], true, never>;
2349
2963
  }
2350
2964
 
2351
2965
  interface DgaStampNotice {
@@ -2597,6 +3211,100 @@ declare class DgaHero {
2597
3211
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaHero, "dga-hero", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "primaryCta": { "alias": "primaryCta"; "required": false; "isSignal": true; }; "secondaryCta": { "alias": "secondaryCta"; "required": false; "isSignal": true; }; "primaryHref": { "alias": "primaryHref"; "required": false; "isSignal": true; }; "secondaryHref": { "alias": "secondaryHref"; "required": false; "isSignal": true; }; "imageDesktop": { "alias": "imageDesktop"; "required": false; "isSignal": true; }; "imageMobile": { "alias": "imageMobile"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "imageOverlay": { "alias": "imageOverlay"; "required": false; "isSignal": true; }; "imageMaskVariant": { "alias": "imageMaskVariant"; "required": false; "isSignal": true; }; "slides": { "alias": "slides"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "transition": { "alias": "transition"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "autoplayMs": { "alias": "autoplayMs"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "dotsLabel": { "alias": "dotsLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; "primaryClick": "primaryClick"; "secondaryClick": "secondaryClick"; "slideChange": "slideChange"; }, never, ["[dgaHeroBreadcrumb]", "[dgaHeroFloat]", "*", "*"], true, never>;
2598
3212
  }
2599
3213
 
3214
+ type DgaPageHeroTone = 'faint' | 'body' | 'surface';
3215
+ /**
3216
+ * Compact portal page header: breadcrumb + title + lede + optional actions slot.
3217
+ * Prefer this over hand-rolled `*-hero` bands on inner portal pages.
3218
+ */
3219
+ declare class DgaPageHero {
3220
+ readonly title: _angular_core.InputSignal<string>;
3221
+ readonly description: _angular_core.InputSignal<string>;
3222
+ readonly breadcrumbs: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
3223
+ readonly breadcrumbLabel: _angular_core.InputSignal<string>;
3224
+ readonly tone: _angular_core.InputSignal<DgaPageHeroTone>;
3225
+ /** Extra bottom padding for denser pages. */
3226
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
3227
+ private readonly seq;
3228
+ readonly titleId: string;
3229
+ readonly sectionClasses: _angular_core.Signal<string>;
3230
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPageHero, never>;
3231
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaPageHero, "dga-page-hero", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; "breadcrumbLabel": { "alias": "breadcrumbLabel"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaPageHeroActions]", "*"], true, never>;
3232
+ }
3233
+
3234
+ type DgaAnnouncementTone = 'info' | 'warning' | 'success' | 'neutral' | 'critical' | 'brand';
3235
+ type DgaAnnouncementDensity = 'compact' | 'comfortable';
3236
+ type DgaAnnouncementAlign = 'start' | 'center';
3237
+ type DgaAnnouncementActionVariant = 'link' | 'button' | 'chip';
3238
+ type DgaAnnouncementPersist = 'none' | 'session' | 'local';
3239
+ type DgaAnnouncementElevation = 'none' | 'soft';
3240
+ /**
3241
+ * Site-wide campaign / outage strip for chrome (above or below `dga-top-bar`).
3242
+ * Distinct from page-level `dga-alert`.
3243
+ *
3244
+ * Layout note: use full-bleed width + `--wrapper-padding` only.
3245
+ * Do NOT add `max-w-(--container-*)` — that double-shrinks with wrapper padding.
3246
+ */
3247
+ declare class DgaAnnouncementBar {
3248
+ readonly title: _angular_core.InputSignal<string>;
3249
+ readonly message: _angular_core.InputSignal<string>;
3250
+ readonly label: _angular_core.InputSignal<string>;
3251
+ readonly tone: _angular_core.InputSignal<DgaAnnouncementTone>;
3252
+ readonly density: _angular_core.InputSignal<DgaAnnouncementDensity>;
3253
+ readonly align: _angular_core.InputSignal<DgaAnnouncementAlign>;
3254
+ readonly actionVariant: _angular_core.InputSignal<DgaAnnouncementActionVariant>;
3255
+ readonly elevation: _angular_core.InputSignal<DgaAnnouncementElevation>;
3256
+ readonly icon: _angular_core.InputSignal<DgaIconName | null>;
3257
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
3258
+ readonly dismissLabel: _angular_core.InputSignal<string>;
3259
+ readonly actionLabel: _angular_core.InputSignal<string>;
3260
+ readonly actionHref: _angular_core.InputSignal<string>;
3261
+ readonly actionExternal: _angular_core.InputSignalWithTransform<boolean, unknown>;
3262
+ /** Sticky under the viewport top while scrolling. */
3263
+ readonly sticky: _angular_core.InputSignalWithTransform<boolean, unknown>;
3264
+ /** Start accent stripe (alert-style). Off by default for site chrome. */
3265
+ readonly accent: _angular_core.InputSignalWithTransform<boolean, unknown>;
3266
+ /** Start dismissed (e.g. after reading storage). */
3267
+ readonly initiallyDismissed: _angular_core.InputSignalWithTransform<boolean, unknown>;
3268
+ /**
3269
+ * Persist dismiss across reloads.
3270
+ * Uses `persistKey` when set, otherwise a hash of title+message.
3271
+ */
3272
+ readonly persist: _angular_core.InputSignal<DgaAnnouncementPersist>;
3273
+ readonly persistKey: _angular_core.InputSignal<string>;
3274
+ readonly dismissedChange: _angular_core.OutputEmitterRef<boolean>;
3275
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3276
+ readonly dismissed: _angular_core.WritableSignal<boolean>;
3277
+ constructor();
3278
+ readonly iconTone: _angular_core.Signal<DgaIconTone>;
3279
+ readonly iconShellClasses: _angular_core.Signal<string>;
3280
+ readonly barClasses: _angular_core.Signal<string>;
3281
+ dismiss(): void;
3282
+ show(): void;
3283
+ private storageKey;
3284
+ private storage;
3285
+ private readPersisted;
3286
+ private writePersisted;
3287
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAnnouncementBar, never>;
3288
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAnnouncementBar, "dga-announcement-bar", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "actionVariant": { "alias": "actionVariant"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "dismissLabel": { "alias": "dismissLabel"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; "actionExternal": { "alias": "actionExternal"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "accent": { "alias": "accent"; "required": false; "isSignal": true; }; "initiallyDismissed": { "alias": "initiallyDismissed"; "required": false; "isSignal": true; }; "persist": { "alias": "persist"; "required": false; "isSignal": true; }; "persistKey": { "alias": "persistKey"; "required": false; "isSignal": true; }; }, { "dismissedChange": "dismissedChange"; "closed": "closed"; }, never, ["*"], true, never>;
3289
+ }
3290
+
3291
+ /**
3292
+ * Centered auth / registration shell: logo, optional chrome tools, form slot.
3293
+ * Not an IdP SDK — drop Nafath / OAuth buttons into the default slot.
3294
+ */
3295
+ declare class DgaAuthCard {
3296
+ readonly title: _angular_core.InputSignal<string>;
3297
+ readonly description: _angular_core.InputSignal<string>;
3298
+ readonly logoSrc: _angular_core.InputSignal<string>;
3299
+ readonly logoAlt: _angular_core.InputSignal<string>;
3300
+ readonly cardId: _angular_core.InputSignal<string>;
3301
+ /** Full-viewport centered layout (registration pages). */
3302
+ readonly centered: _angular_core.InputSignalWithTransform<boolean, unknown>;
3303
+ readonly shellClasses: _angular_core.Signal<string>;
3304
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAuthCard, never>;
3305
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaAuthCard, "dga-auth-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "logoAlt": { "alias": "logoAlt"; "required": false; "isSignal": true; }; "cardId": { "alias": "cardId"; "required": false; "isSignal": true; }; "centered": { "alias": "centered"; "required": false; "isSignal": true; }; }, {}, never, ["[dgaAuthTools]", "[dgaAuthLogo]", "*"], true, never>;
3306
+ }
3307
+
2600
3308
  interface DgaSideInfoItem {
2601
3309
  label: string;
2602
3310
  href?: string;
@@ -2726,6 +3434,49 @@ declare class DgaDescriptionList {
2726
3434
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaDescriptionList, "dga-description-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2727
3435
  }
2728
3436
 
3437
+ interface DgaInfoListItem {
3438
+ id?: string;
3439
+ label: string;
3440
+ value: string;
3441
+ icon?: DgaIconName;
3442
+ href?: string;
3443
+ /** Open href in a new tab. */
3444
+ external?: boolean;
3445
+ /** Show a copy control for the value. */
3446
+ copyable?: boolean;
3447
+ }
3448
+ /**
3449
+ * Icon + label + value rows for contact channels, service meta, and side panels.
3450
+ */
3451
+ declare class DgaInfoList {
3452
+ readonly items: _angular_core.InputSignal<readonly DgaInfoListItem[]>;
3453
+ readonly label: _angular_core.InputSignal<string>;
3454
+ readonly copyLabel: _angular_core.InputSignal<string>;
3455
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
3456
+ readonly copy: _angular_core.OutputEmitterRef<DgaInfoListItem>;
3457
+ readonly listClasses: _angular_core.Signal<string>;
3458
+ onCopy(item: DgaInfoListItem): void;
3459
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaInfoList, never>;
3460
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaInfoList, "dga-info-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "copyLabel": { "alias": "copyLabel"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, { "copy": "copy"; }, never, never, true, never>;
3461
+ }
3462
+
3463
+ interface DgaTimelineItem {
3464
+ title: string;
3465
+ meta?: string;
3466
+ description?: string;
3467
+ }
3468
+ /**
3469
+ * Vertical timeline (dot + connector) for experience, history, and status flows.
3470
+ */
3471
+ declare class DgaTimeline {
3472
+ readonly items: _angular_core.InputSignal<readonly DgaTimelineItem[]>;
3473
+ readonly label: _angular_core.InputSignal<string>;
3474
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
3475
+ readonly listClasses: _angular_core.Signal<string>;
3476
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTimeline, never>;
3477
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaTimeline, "dga-timeline", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3478
+ }
3479
+
2729
3480
  type DgaCurrency = 'SAR' | 'USD' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'INR' | 'KRW' | 'TRY';
2730
3481
  /**
2731
3482
  * Locale-aware number display with optional currency/unit and scroll-triggered counter.
@@ -2761,6 +3512,59 @@ declare class DgaNumber implements OnInit {
2761
3512
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaNumber, "dga-number", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; "free": { "alias": "free"; "required": false; "isSignal": true; }; "counter": { "alias": "counter"; "required": false; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2762
3513
  }
2763
3514
 
3515
+ /**
3516
+ * Official Saudi Riyal symbol path (SAMA / Saudi Riyal Font, OFL-1.1).
3517
+ * Unicode: U+20C1 SAUDI RIYAL SIGN
3518
+ */
3519
+ declare const DGA_RIYAL_SVG_PATH = "M750 1119C730 1163 716 1211 711 1262L1136 1172C1156 1127 1169 1079 1174 1028L750 1119ZM1136 901C1156 857 1169 809 1174 758L843 828V693L1136 631C1156 587 1169 538 1174 488L843 558V72C793 100 748 138 711 183V586L579 614V6C528 34 483 72 447 117V642L151 705C131 750 117 798 112 849L447 777V948L88 1024C68 1068 55 1117 50 1167L425 1088C456 1081 482 1063 499 1038L568 936C575 926 579 913 579 899V749L711 721V992L1136 901Z";
3520
+ /** Tight viewBox around the official glyph (aspect ≈ 0.89). */
3521
+ declare const DGA_RIYAL_VIEWBOX = "50 0 1124 1268";
3522
+ /**
3523
+ * Size tokens. Prefer `em` so the glyph matches surrounding text height
3524
+ * (SAMA alignment rule). Fixed sizes are for standalone chrome use.
3525
+ */
3526
+ type DgaRiyalSize = 'em' | 'sm' | 'md' | 'lg' | 'xl';
3527
+ type DgaRiyalTone = 'current' | 'primary' | 'muted' | 'on-color';
3528
+ /** `contained` adds circular clear-space ≈ ⅓ of the glyph height (SAMA). */
3529
+ type DgaRiyalAppearance = 'plain' | 'contained';
3530
+ /**
3531
+ * Official Saudi Riyal currency symbol.
3532
+ *
3533
+ * SAMA usage rules enforced by the component:
3534
+ * - Symbol stays to the **left** of any amount (all languages)
3535
+ * - Single space between symbol and amount
3536
+ * - Default height matches text (`1em`); geometry is never stretched/mirrored
3537
+ *
3538
+ * @example
3539
+ * ```html
3540
+ * <dga-riyal />
3541
+ * <dga-riyal [amount]="1250" />
3542
+ * <dga-riyal amount="-123" />
3543
+ * <dga-riyal amount="123 million" />
3544
+ * <dga-riyal appearance="contained" size="lg" />
3545
+ * ```
3546
+ */
3547
+ declare class DgaRiyal {
3548
+ readonly path = "M750 1119C730 1163 716 1211 711 1262L1136 1172C1156 1127 1169 1079 1174 1028L750 1119ZM1136 901C1156 857 1169 809 1174 758L843 828V693L1136 631C1156 587 1169 538 1174 488L843 558V72C793 100 748 138 711 183V586L579 614V6C528 34 483 72 447 117V642L151 705C131 750 117 798 112 849L447 777V948L88 1024C68 1068 55 1117 50 1167L425 1088C456 1081 482 1063 499 1038L568 936C575 926 579 913 579 899V749L711 721V992L1136 901Z";
3549
+ readonly viewBox = "50 0 1124 1268";
3550
+ /** Glyph height. Default `em` matches accompanying text (SAMA). */
3551
+ readonly size: _angular_core.InputSignal<DgaRiyalSize>;
3552
+ readonly tone: _angular_core.InputSignal<DgaRiyalTone>;
3553
+ readonly appearance: _angular_core.InputSignal<DgaRiyalAppearance>;
3554
+ /**
3555
+ * Numeric / formatted amount. Negative values keep the minus after the
3556
+ * symbol (SAMA: `⃁ -123`). Written units stay after the number
3557
+ * (e.g. `123 million`).
3558
+ */
3559
+ readonly amount: _angular_core.InputSignal<string | number | null>;
3560
+ /** Accessible name when the glyph is used alone (decorative when empty). */
3561
+ readonly label: _angular_core.InputSignal<string>;
3562
+ readonly amountText: _angular_core.Signal<string>;
3563
+ readonly hostClasses: _angular_core.Signal<string>;
3564
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaRiyal, never>;
3565
+ 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>;
3566
+ }
3567
+
2764
3568
  type DgaMetricTrend = 'up' | 'down' | 'neutral';
2765
3569
  /** `stat` = portal home metrics (icon well, value, label, centered). */
2766
3570
  type DgaMetricAppearance = 'default' | 'stat';
@@ -3120,5 +3924,5 @@ declare function dgaSaudiCityOptions(locale?: 'ar' | 'en', cities?: readonly Dga
3120
3924
  value: string;
3121
3925
  }[];
3122
3926
 
3123
- export { DGA_GREGORIAN_MONTHS, DGA_HIJRI_MONTHS, DGA_ICON_NAMES, DGA_ICON_SVG, DGA_LOGICAL_ICON_NAMES, DGA_PHONE_COUNTRIES, DGA_SAUDI_CITIES, DGA_WEEKDAYS, DgaAccessibility, DgaAccessibilityService, DgaAccordion, DgaAccordionItem, DgaAlert, DgaAutocomplete, DgaAvatar, DgaBadge, DgaBreadcrumb, DgaButton, DgaCard, DgaCardMedia, DgaCarousel, DgaCarouselSlideDirective, DgaChart, DgaCheckbox, DgaChip, DgaChipInput, DgaClamp, DgaCode, DgaCookies, DgaCopy, DgaDatePickerComponent as DgaDatePicker, DgaDescriptionList, DgaDialog, DgaDivider, DgaDrawer, DgaEmpty, DgaExpandable, DgaExport, DgaExportToolbar, DgaFeedback, DgaField, DgaFilterBar, DgaFooter, DgaFormControl, DgaFormEnd, DgaFormStart, DgaGrid, DgaHeader, DgaHero, DgaIcon, DgaIconBadge, DgaIconFontService, DgaImagePopup, DgaInput, DgaLabel, DgaLink, DgaList, DgaLogoTile, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNativeSelect, DgaNumber, DgaNumberInput, DgaOtp, DgaPageFeedback, DgaPagination, DgaPersona, DgaPhoneInput, DgaPreloader, DgaProgress, DgaQuote, DgaRadio, DgaRating, DgaScrollTop, DgaSection, DgaSelect, DgaShare, DgaSideInfo, DgaSideNav, DgaSkeleton, DgaSkipLink, DgaSlider, DgaSpinner, DgaStepper, DgaSwitch, DgaTab, DgaTable, DgaTabs, DgaToast, DgaToastOutlet, DgaToastService, DgaToc, DgaToolbar, DgaTooltip, DgaTopBar, DgaUpload, decodePlatformscodeSvg, dgaAddMonths, dgaClampDate, dgaCoerceDate, dgaCompareDays, dgaDaysInMonth, dgaFormatDate, dgaGetCalendarParts, dgaGroupSaudiCitiesByRegion, dgaModeFromFormat, dgaMonthNames, dgaMonthStartWeekday, dgaParseDate, dgaPartsToDate, dgaSameDay, dgaSaudiCityOptions, dgaTodayUtc };
3124
- export type { DgaA11yBundle, DgaA11yMode, DgaA11yVisualFilter, DgaAccessibilityPosition, DgaAlertDisplay, DgaAlertVariant, DgaAutocompleteOption, DgaAvatarSize, DgaBadgeSize, DgaBadgeVariant, DgaBreadcrumbItem, DgaBreadcrumbSeparator, DgaButtonSize, DgaButtonVariant, DgaCalendar, DgaCalendarParts, DgaCardActionsAlign, DgaCardAppearance, DgaCardBadge, DgaCardBorder, DgaCardPadding, DgaCardShadow, DgaCarouselSlide, DgaChartDataset, DgaChartPoint, DgaChartType, DgaCheckboxSize, DgaChipVariant, DgaCookieConsent, DgaCurrency, DgaDateCalendar, DgaDatePickerMode, DgaDateRangeValue, DgaDescriptionItem, DgaDescriptionLayout, DgaDialogSize, DgaDividerOrientation, DgaDrawerSide, DgaEmptyAppearance, DgaExportColumn, DgaExportData, DgaExportScope, DgaFeedbackSubmit, DgaFilterItem, DgaFooterAppearance, DgaFooterColumn, DgaFooterIconGroup, DgaFooterIconLink, DgaFooterLink, DgaFooterLogo, DgaFormControlSize, DgaFormStatus, DgaGridCols, DgaGridGap, DgaHeaderAction, DgaHeaderAppearance, DgaHeaderLoginConfig, DgaHeaderNotification, DgaHeaderNotificationAction, DgaHeaderNotificationTone, DgaHeaderNotificationsConfig, DgaHeaderSearchConfig, DgaHeaderSearchSuggestion, DgaHeaderUserConfig, DgaHeaderUserMenuLink, DgaHeroAppearance, DgaHeroImageMask, DgaHeroOverlayTone, DgaHeroSlide, DgaHeroTransition, DgaIconBadgeAppearance, DgaIconBadgeSize, DgaIconName, DgaIconSize, DgaIconTone, DgaImagePopupAnimation, DgaImagePopupImage, DgaImagePopupImageTransition, DgaImagePopupSource, DgaInputSize, DgaLinkVariant, DgaMenuItem, DgaMetricAppearance, DgaMetricTrend, DgaMobileNavMode, DgaModalAnimation, DgaModalSize, DgaMultiselectOption, DgaNativeSelectSize, DgaNavColumn, DgaNavDropdown, DgaNavDropdownLayout, DgaNavDropdownVariant, DgaNavFeatured, DgaNavItem, DgaNavLink, DgaPageFeedbackAgreementLink, DgaPageFeedbackAnswer, DgaPageFeedbackOption, DgaPageFeedbackPhase, DgaPageFeedbackSubmit, DgaPhoneCountry, DgaPreloaderPersist, DgaProgressAppearance, DgaProgressSize, DgaProgressTone, DgaRadioSize, DgaRatingSize, DgaSaudiCity, DgaScrollTopPosition, DgaSectionTone, DgaSectionWidth, DgaSelectOpenMode, DgaSelectOption, DgaSelectSize, DgaShareAppearance, DgaSideInfoItem, DgaSideNavItem, DgaSkeletonAnimation, DgaSkeletonRadius, DgaSkeletonShape, DgaSkeletonSize, DgaSortDir, DgaSpinnerSize, DgaSpinnerTone, DgaStampNotice, DgaStep, DgaSwitchSize, DgaTableColumn, DgaTableDensity, DgaTimeFormat, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaUploadAppearance, DgaUploadFile };
3927
+ export { DGA_GREGORIAN_MONTHS, DGA_HIJRI_MONTHS, DGA_ICON_NAMES, DGA_ICON_SVG, DGA_LOGICAL_ICON_NAMES, DGA_PHONE_COUNTRIES, DGA_RIYAL_SVG_PATH, DGA_RIYAL_VIEWBOX, DGA_SAUDI_CITIES, DGA_WEEKDAYS, DgaAccessibility, DgaAccessibilityService, DgaAccordion, DgaAccordionItem, DgaAlert, DgaAnnouncementBar, DgaAppShell, DgaAuthCard, DgaAutocomplete, DgaAvatar, DgaBadge, DgaBreadcrumb, DgaButton, DgaCard, DgaCardMedia, DgaCarousel, DgaCarouselSlideDirective, DgaChart, DgaChatbot, DgaCheckbox, DgaChip, DgaChipInput, DgaClamp, DgaCode, DgaCookies, DgaCopy, DgaDatePickerComponent as DgaDatePicker, DgaDescriptionList, DgaDialog, DgaDivider, DgaDrawer, DgaDualNav, DgaEmpty, DgaExpandable, DgaExport, DgaExportToolbar, DgaFeedback, DgaField, DgaFilterBar, DgaFooter, DgaFormControl, DgaFormEnd, DgaFormStart, DgaGrid, DgaHeader, DgaHero, DgaIcon, DgaIconBadge, DgaIconFontService, DgaImagePopup, DgaInfoList, DgaInput, DgaLabel, DgaLink, DgaList, DgaLogoTile, DgaMenu, DgaMetric, DgaModal, DgaMultiselect, DgaNativeSelect, DgaNavRail, DgaNumber, DgaNumberInput, DgaOtp, DgaPageFeedback, DgaPageHero, DgaPagination, DgaPersona, DgaPhoneInput, DgaPreloader, DgaProgress, DgaQuote, DgaRadio, DgaRating, DgaRiyal, DgaScrollTop, DgaSection, DgaSelect, DgaShare, DgaSideInfo, DgaSideNav, DgaSkeleton, DgaSkipLink, DgaSlider, DgaSpinner, DgaStepper, DgaSwitch, DgaTab, DgaTable, DgaTabs, DgaTimePicker, DgaTimeline, DgaToast, DgaToastOutlet, DgaToastService, DgaToc, DgaToolbar, DgaTooltip, DgaTopBar, DgaUpload, decodePlatformscodeSvg, dgaAddMonths, dgaClampDate, dgaCoerceDate, dgaCompareDays, dgaDaysInMonth, dgaFormatDate, dgaGetCalendarParts, dgaGroupSaudiCitiesByRegion, dgaModeFromFormat, dgaMonthNames, dgaMonthStartWeekday, dgaNormalizeTime, dgaParseDate, dgaPartsToDate, dgaProvideValueAccessor, dgaSameDay, dgaSaudiCityOptions, dgaTodayUtc };
3928
+ export type { DgaA11yBundle, DgaA11yMode, DgaA11yVisualFilter, DgaAccessibilityPosition, DgaAccordionSection, DgaAlertDisplay, DgaAlertVariant, DgaAnnouncementActionVariant, DgaAnnouncementAlign, DgaAnnouncementDensity, DgaAnnouncementElevation, DgaAnnouncementPersist, DgaAnnouncementTone, DgaAppShellAppearance, DgaAutocompleteOption, DgaAvatarSize, DgaBadgeSize, DgaBadgeVariant, DgaBreadcrumbItem, DgaBreadcrumbSeparator, DgaButtonSize, DgaButtonVariant, DgaCalendar, DgaCalendarParts, DgaCardActionsAlign, DgaCardAppearance, DgaCardBadge, DgaCardBorder, DgaCardPadding, DgaCardShadow, DgaCarouselSlide, DgaChartDataset, DgaChartPoint, DgaChartType, DgaChatbotAnimation, DgaChatbotFabTone, DgaChatbotMessage, DgaChatbotPosition, DgaChatbotSize, DgaCheckboxSize, DgaChipVariant, DgaCookieCategory, DgaCookieConsent, DgaCookieDecision, DgaCookiePreferences, DgaCookiesAlign, DgaCookiesPosition, DgaCurrency, DgaDateCalendar, DgaDatePickerMode, DgaDateRangeValue, DgaDescriptionItem, DgaDescriptionLayout, DgaDialogSize, DgaDividerOrientation, DgaDrawerSide, DgaDualNavCategory, DgaDualNavSection, DgaEmptyAppearance, DgaExportColumn, DgaExportData, DgaExportScope, DgaFeedbackSubmit, DgaFilterItem, DgaFooterAppearance, DgaFooterColumn, DgaFooterIconGroup, DgaFooterIconLink, DgaFooterLink, DgaFooterLogo, DgaFormControlSize, DgaFormStatus, DgaGridCols, DgaGridGap, DgaHeaderAction, DgaHeaderAppearance, DgaHeaderLoginConfig, DgaHeaderNotification, DgaHeaderNotificationAction, DgaHeaderNotificationTone, DgaHeaderNotificationsConfig, DgaHeaderSearchConfig, DgaHeaderSearchSuggestion, DgaHeaderUserConfig, DgaHeaderUserMenuLink, DgaHeroAppearance, DgaHeroImageMask, DgaHeroOverlayTone, DgaHeroSlide, DgaHeroTransition, DgaIconBadgeAppearance, DgaIconBadgeSize, DgaIconName, DgaIconSize, DgaIconTone, DgaImagePopupAnimation, DgaImagePopupImage, DgaImagePopupImageTransition, DgaImagePopupSource, DgaInfoListItem, DgaInputSize, DgaLinkVariant, DgaMenuItem, DgaMetricAppearance, DgaMetricTrend, DgaMobileNavMode, DgaModalAnimation, DgaModalSize, DgaMultiselectOption, DgaNativeSelectSize, DgaNavColumn, DgaNavDropdown, DgaNavDropdownLayout, DgaNavDropdownVariant, DgaNavFeatured, DgaNavItem, DgaNavLink, DgaNavRailActiveStyle, DgaNavRailAppearance, DgaNavRailItem, DgaNavRailPosition, DgaNavRailSize, DgaPageFeedbackAgreementLink, DgaPageFeedbackAnswer, DgaPageFeedbackOption, DgaPageFeedbackPhase, DgaPageFeedbackSubmit, DgaPageHeroTone, DgaPhoneCountry, DgaPreloaderPersist, DgaProgressAppearance, DgaProgressSize, DgaProgressTone, DgaRadioSize, DgaRatingSize, DgaRiyalAppearance, DgaRiyalSize, DgaRiyalTone, DgaSaudiCity, DgaScrollTopPosition, DgaSectionTone, DgaSectionWidth, DgaSelectOpenMode, DgaSelectOption, DgaSelectSize, DgaShareAppearance, DgaSideInfoItem, DgaSideNavGroup, DgaSideNavItem, DgaSkeletonAnimation, DgaSkeletonRadius, DgaSkeletonShape, DgaSkeletonSize, DgaSortDir, DgaSpinnerSize, DgaSpinnerTone, DgaStampNotice, DgaStep, DgaStepStatus, DgaSwitchSize, DgaTabItem, DgaTableColumn, DgaTableDensity, DgaTimeFormat, DgaTimePickerFormat, DgaTimePickerSize, DgaTimelineItem, DgaToastRequest, DgaToastShowOptions, DgaToastVariant, DgaTocItem, DgaTooltipPlacement, DgaTooltipVariant, DgaUploadAppearance, DgaUploadFile, DgaUploadRejectReason, DgaUploadRejection };