@a.nemreen/dga-ui 0.2.3 → 0.2.4

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';
@@ -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,12 @@ interface DgaUploadFile {
500
578
  size: number;
501
579
  file?: File;
502
580
  }
581
+ interface DgaUploadRejection {
582
+ file: File;
583
+ reason: 'maxSize';
584
+ }
503
585
  type DgaUploadAppearance = 'zone' | 'browse';
504
- declare class DgaUpload {
586
+ declare class DgaUpload implements ControlValueAccessor {
505
587
  readonly filesInput: _angular_core.InputSignal<DgaUploadFile[]>;
506
588
  readonly files: _angular_core.WritableSignal<DgaUploadFile[]>;
507
589
  readonly accept: _angular_core.InputSignal<string>;
@@ -511,10 +593,16 @@ declare class DgaUpload {
511
593
  readonly hint: _angular_core.InputSignal<string>;
512
594
  readonly browseLabel: _angular_core.InputSignal<string>;
513
595
  readonly removeLabel: _angular_core.InputSignal<string>;
514
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
596
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
597
+ private readonly cvaDisabled;
598
+ readonly disabled: _angular_core.Signal<boolean>;
515
599
  readonly maxSize: _angular_core.InputSignal<number>;
516
600
  readonly filesChange: _angular_core.OutputEmitterRef<DgaUploadFile[]>;
601
+ /** Emitted when picked/dropped files were filtered out because they exceed `maxSize`. */
602
+ readonly rejected: _angular_core.OutputEmitterRef<DgaUploadRejection[]>;
517
603
  readonly dragging: _angular_core.ModelSignal<boolean>;
604
+ private onChange;
605
+ onTouched: () => void;
518
606
  readonly zoneClasses: _angular_core.Signal<string>;
519
607
  onDragOver(event: DragEvent): void;
520
608
  onDrop(event: DragEvent): void;
@@ -523,8 +611,12 @@ declare class DgaUpload {
523
611
  formatSize(bytes: number): string;
524
612
  private addFiles;
525
613
  private commit;
614
+ writeValue(value: DgaUploadFile[]): void;
615
+ registerOnChange(fn: (value: DgaUploadFile[]) => void): void;
616
+ registerOnTouched(fn: () => void): void;
617
+ setDisabledState(isDisabled: boolean): void;
526
618
  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>;
619
+ 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; }; "dragging": { "alias": "dragging"; "required": false; "isSignal": true; }; }, { "filesChange": "filesChange"; "rejected": "rejected"; "dragging": "draggingChange"; }, never, never, true, never>;
528
620
  }
529
621
 
530
622
  interface DgaPhoneCountry {
@@ -541,7 +633,7 @@ declare const DGA_PHONE_COUNTRIES: DgaPhoneCountry[];
541
633
  * Phone field with country-code prefix select.
542
634
  * The control group is always LTR so digits and codes read correctly in RTL pages.
543
635
  */
544
- declare class DgaPhoneInput {
636
+ declare class DgaPhoneInput implements ControlValueAccessor {
545
637
  readonly countries: _angular_core.InputSignal<DgaPhoneCountry[]>;
546
638
  readonly countryCode: _angular_core.ModelSignal<string>;
547
639
  readonly nationalNumber: _angular_core.ModelSignal<string>;
@@ -550,14 +642,24 @@ declare class DgaPhoneInput {
550
642
  readonly placeholder: _angular_core.InputSignal<string>;
551
643
  readonly autocomplete: _angular_core.InputSignal<string>;
552
644
  readonly codeLabel: _angular_core.InputSignal<string>;
553
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
645
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
646
+ private readonly cvaDisabled;
647
+ readonly disabled: _angular_core.Signal<boolean>;
554
648
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
555
649
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
556
- /** Full E.164-ish value: code + national digits. */
557
- readonly value: _angular_core.Signal<string>;
650
+ /** Full E.164-ish combined value: country code + national digits. */
651
+ readonly value: _angular_core.ModelSignal<string>;
558
652
  readonly groupClasses: _angular_core.Signal<string>;
653
+ private onChange;
654
+ onTouched: () => void;
655
+ constructor();
656
+ writeValue(value: string): void;
657
+ registerOnChange(fn: (value: string) => void): void;
658
+ registerOnTouched(fn: () => void): void;
659
+ setDisabledState(isDisabled: boolean): void;
660
+ private parseValue;
559
661
  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>;
662
+ 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
663
  }
562
664
 
563
665
  /** @deprecated Prefer `DgaSelectOption` — alias kept for existing imports. */
@@ -569,13 +671,15 @@ declare class DgaAutocomplete {
569
671
  readonly value: _angular_core.WritableSignal<string>;
570
672
  readonly placeholder: _angular_core.InputSignal<string>;
571
673
  readonly label: _angular_core.InputSignal<string>;
674
+ readonly size: _angular_core.InputSignal<_a_nemreen_dga_ui.DgaFormControlSize>;
675
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
572
676
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
573
677
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
574
678
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
575
679
  readonly valueChange: _angular_core.OutputEmitterRef<string>;
576
680
  onValueChange(next: string | string[]): void;
577
681
  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>;
682
+ 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
683
  }
580
684
 
581
685
  /** @deprecated Prefer `DgaSelectOption` — alias kept for existing imports. */
@@ -588,13 +692,16 @@ declare class DgaMultiselect {
588
692
  readonly placeholder: _angular_core.InputSignal<string>;
589
693
  readonly label: _angular_core.InputSignal<string>;
590
694
  readonly removeLabel: _angular_core.InputSignal<string>;
695
+ readonly size: _angular_core.InputSignal<_a_nemreen_dga_ui.DgaFormControlSize>;
696
+ readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
697
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
591
698
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
592
699
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
593
700
  readonly status: _angular_core.InputSignal<DgaFormStatus>;
594
701
  readonly valueChange: _angular_core.OutputEmitterRef<string[]>;
595
702
  onValueChange(next: string | string[]): void;
596
703
  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>;
704
+ 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
705
  }
599
706
 
600
707
  /** Calendar system for date values and the picker UI. */
@@ -647,7 +754,7 @@ interface DgaDateRangeValue {
647
754
  end: string;
648
755
  }
649
756
  type PanelView = DgaDatePickerMode;
650
- declare class DgaDatePickerComponent {
757
+ declare class DgaDatePickerComponent implements ControlValueAccessor {
651
758
  private readonly host;
652
759
  private readonly destroyRef;
653
760
  readonly inputId: string;
@@ -656,6 +763,8 @@ declare class DgaDatePickerComponent {
656
763
  readonly value: _angular_core.WritableSignal<string>;
657
764
  readonly startValue: _angular_core.ModelSignal<string>;
658
765
  readonly endValue: _angular_core.ModelSignal<string>;
766
+ private onChange;
767
+ private onTouched;
659
768
  readonly calendar: _angular_core.InputSignal<DgaDateCalendar>;
660
769
  readonly range: _angular_core.InputSignalWithTransform<boolean, unknown>;
661
770
  readonly format: _angular_core.InputSignal<string>;
@@ -669,7 +778,9 @@ declare class DgaDatePickerComponent {
669
778
  readonly controlId: _angular_core.InputSignal<string>;
670
779
  readonly name: _angular_core.InputSignal<string>;
671
780
  readonly size: _angular_core.InputSignal<DgaFormControlSize>;
672
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
781
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
782
+ private readonly cvaDisabled;
783
+ readonly disabled: _angular_core.Signal<boolean>;
673
784
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
674
785
  readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
675
786
  readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -771,12 +882,16 @@ declare class DgaDatePickerComponent {
771
882
  private syncDraftFromModels;
772
883
  private parseRangeFromValue;
773
884
  private emitValues;
885
+ writeValue(value: string): void;
886
+ registerOnChange(fn: (value: string) => void): void;
887
+ registerOnTouched(fn: () => void): void;
888
+ setDisabledState(isDisabled: boolean): void;
774
889
  private isDateDisabled;
775
890
  private isMonthDisabled;
776
891
  private isYearDisabled;
777
892
  private initialViewParts;
778
893
  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>;
894
+ 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
895
  }
781
896
  interface DayCell {
782
897
  key: string;
@@ -791,6 +906,48 @@ interface DayCell {
791
906
  label?: string;
792
907
  }
793
908
 
909
+ type DgaTimePickerSize = DgaNativeSelectSize;
910
+ type DgaTimePickerFormat = '24h' | '12h';
911
+ declare function pad2(n: number): string;
912
+ /** Normalize to `HH:mm` (24h). Empty string when incomplete. */
913
+ declare function dgaNormalizeTime(value: string): string;
914
+ /**
915
+ * Time-of-day control (hour / minute selects). Value is `HH:mm` (24h).
916
+ * Pair with `dga-date-picker` for appointment-style datetime flows.
917
+ */
918
+ declare class DgaTimePicker {
919
+ /** 24h `HH:mm` string. */
920
+ readonly value: _angular_core.ModelSignal<string>;
921
+ readonly format: _angular_core.InputSignal<DgaTimePickerFormat>;
922
+ readonly size: _angular_core.InputSignal<_a_nemreen_dga_ui.DgaFormControlSize>;
923
+ readonly label: _angular_core.InputSignal<string>;
924
+ readonly hourLabel: _angular_core.InputSignal<string>;
925
+ readonly minuteLabel: _angular_core.InputSignal<string>;
926
+ readonly periodLabel: _angular_core.InputSignal<string>;
927
+ readonly amLabel: _angular_core.InputSignal<string>;
928
+ readonly pmLabel: _angular_core.InputSignal<string>;
929
+ /** Minute step (1, 5, 15, …). */
930
+ readonly minuteStep: _angular_core.InputSignal<number>;
931
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
932
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
933
+ readonly status: _angular_core.InputSignal<DgaFormStatus>;
934
+ readonly pad: typeof pad2;
935
+ readonly minuteOptions: _angular_core.Signal<number[]>;
936
+ readonly hourOptions: _angular_core.Signal<{
937
+ value: string;
938
+ label: string;
939
+ }[]>;
940
+ hourSelect(): string;
941
+ minuteSelect(): string;
942
+ periodSelect(): string;
943
+ onHour(raw: string): void;
944
+ onMinute(raw: string): void;
945
+ onPeriod(raw: string): void;
946
+ private commit;
947
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTimePicker, never>;
948
+ 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>;
949
+ }
950
+
794
951
  type DgaDialogSize = 'sm' | 'md' | 'lg';
795
952
  declare class DgaDialog {
796
953
  private readonly injector;
@@ -876,7 +1033,7 @@ declare class DgaToast implements OnDestroy {
876
1033
  private timer;
877
1034
  readonly classes: _angular_core.Signal<string>;
878
1035
  readonly iconName: _angular_core.Signal<DgaIconName>;
879
- readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1036
+ readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
880
1037
  constructor();
881
1038
  ngOnDestroy(): void;
882
1039
  dismiss(): void;
@@ -995,10 +1152,16 @@ declare class DgaTooltip {
995
1152
  }
996
1153
 
997
1154
  interface DgaMenuItem {
998
- label: string;
999
- value: string;
1155
+ /** Required for actionable items; optional when `divider` is true. */
1156
+ label?: string;
1157
+ /** Required for actionable items; optional when `divider` is true. */
1158
+ value?: string;
1000
1159
  icon?: DgaIconName;
1001
1160
  danger?: boolean;
1161
+ /** Skipped in keyboard nav / click selection; renders with disabled styling. */
1162
+ disabled?: boolean;
1163
+ /** Renders as a separator (`role="separator"`) instead of a menu item. */
1164
+ divider?: boolean;
1002
1165
  }
1003
1166
  declare class DgaMenu {
1004
1167
  private readonly host;
@@ -1014,7 +1177,12 @@ declare class DgaMenu {
1014
1177
  readonly showChevron: _angular_core.InputSignalWithTransform<boolean, unknown>;
1015
1178
  /** Minimum panel width (e.g. share menus). */
1016
1179
  readonly menuMinWidth: _angular_core.InputSignal<string>;
1017
- readonly selected: _angular_core.OutputEmitterRef<string>;
1180
+ /** Emits the full selected item. */
1181
+ readonly selected: _angular_core.OutputEmitterRef<DgaMenuItem>;
1182
+ /** Emits `item.value` alongside `selected` — handy for quick migrations. */
1183
+ readonly selectedValue: _angular_core.OutputEmitterRef<string>;
1184
+ readonly opened: _angular_core.OutputEmitterRef<void>;
1185
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1018
1186
  /** Viewport coords - panel is portaled to body so ancestors cannot clip it. */
1019
1187
  readonly panelStyle: _angular_core.WritableSignal<Record<string, string>>;
1020
1188
  private readonly seq;
@@ -1026,6 +1194,7 @@ declare class DgaMenu {
1026
1194
  triggerClasses(): string;
1027
1195
  menuClasses(): string;
1028
1196
  itemId(index: number): string;
1197
+ trackItem(item: DgaMenuItem, index: number): string;
1029
1198
  itemClass(item: DgaMenuItem): string;
1030
1199
  toggle(event: Event): void;
1031
1200
  openMenu(): void;
@@ -1035,12 +1204,17 @@ declare class DgaMenu {
1035
1204
  onMenuKey(event: KeyboardEvent): void;
1036
1205
  onDocumentClick(event: MouseEvent): void;
1037
1206
  onDocumentKeydown(event: KeyboardEvent): void;
1207
+ private isSelectable;
1208
+ private firstSelectableIndex;
1209
+ private lastSelectableIndex;
1210
+ private stepIndex;
1038
1211
  private portalMenuToBody;
1039
1212
  private detachPortaledMenu;
1040
1213
  private syncPanelPosition;
1214
+ private cssLengthToPx;
1041
1215
  private focusItem;
1042
1216
  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>;
1217
+ 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
1218
  }
1045
1219
 
1046
1220
  type DgaDrawerSide = 'start' | 'end';
@@ -1157,7 +1331,7 @@ declare class DgaAlert {
1157
1331
  readonly titleClasses: _angular_core.Signal<string>;
1158
1332
  readonly descriptionClasses: _angular_core.Signal<string>;
1159
1333
  readonly iconName: _angular_core.Signal<DgaIconName>;
1160
- readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "muted" | "current">;
1334
+ readonly iconTone: _angular_core.Signal<"warning" | "error" | "success" | "muted" | "current">;
1161
1335
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1162
1336
  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
1337
  }
@@ -1275,32 +1449,107 @@ declare class DgaPageFeedback {
1275
1449
  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
1450
  }
1277
1451
 
1278
- type DgaCookieConsent = 'accepted' | 'declined' | null;
1452
+ /** Stored consent outcome. `custom` = per-category preferences were saved. */
1453
+ type DgaCookieConsent = 'accepted' | 'declined' | 'custom' | null;
1454
+ /** Horizontal placement. Logical `start`/`end` follow reading direction. */
1455
+ type DgaCookiesAlign = 'start' | 'center' | 'end';
1456
+ /**
1457
+ * Banner anchor on the viewport.
1458
+ * - `start` | `center` | `end` → bottom edge + that alignment (compact)
1459
+ * - `bottom` | `top` → that edge, centered
1460
+ * - `bottom-start` / `top-end` / … → explicit edge + alignment
1461
+ */
1462
+ type DgaCookiesPosition = DgaCookiesAlign | 'bottom' | 'top' | 'bottom-start' | 'bottom-center' | 'bottom-end' | 'top-start' | 'top-center' | 'top-end';
1463
+ /** Optional cookie category for granular consent (GDPR-style preferences). */
1464
+ interface DgaCookieCategory {
1465
+ id: string;
1466
+ label: string;
1467
+ description?: string;
1468
+ /** Always enabled; toggle is disabled. */
1469
+ required?: boolean;
1470
+ /** Initial state when no stored preference exists (ignored when `required`). */
1471
+ defaultEnabled?: boolean;
1472
+ }
1473
+ type DgaCookiePreferences = Record<string, boolean>;
1474
+ interface DgaCookieDecision {
1475
+ consent: Exclude<DgaCookieConsent, null>;
1476
+ preferences: DgaCookiePreferences;
1477
+ }
1279
1478
  /**
1280
1479
  * Privacy-compliant cookie consent banner.
1281
- * Persists choice for 365 days; optional GA gating via `gaTrackingIds`.
1480
+ * Persists choice (default 365 days); optional category preferences and GA gating.
1282
1481
  */
1283
1482
  declare class DgaCookies implements OnInit {
1284
1483
  private readonly destroyRef;
1484
+ private readonly hostRef;
1485
+ /** Original parent before body portal (restored on destroy). */
1486
+ private portalHome;
1285
1487
  readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
1488
+ /**
1489
+ * Viewport anchor. Use `start` / `center` / `end` for bottom placement,
1490
+ * or compound values like `top-end`. Prefer `align` to set horizontal only.
1491
+ */
1492
+ readonly position: _angular_core.InputSignal<DgaCookiesPosition>;
1493
+ /** Horizontal alignment (`start` | `center` | `end`). Overrides `position` when set. */
1494
+ readonly align: _angular_core.InputSignal<"" | DgaCookiesAlign>;
1286
1495
  /** Auto-open delay when no consent is stored. `0` disables auto-show. */
1287
1496
  readonly delayMs: _angular_core.InputSignal<number>;
1497
+ /** When false, never auto-opens (call `show()` manually). */
1498
+ readonly autoShow: _angular_core.InputSignalWithTransform<boolean, unknown>;
1499
+ /** Show the dismiss (X) control. Dismiss does not persist a decision. */
1500
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1501
+ /** Show the reject / decline non-essential button. */
1502
+ readonly showDecline: _angular_core.InputSignalWithTransform<boolean, unknown>;
1503
+ /** Show policy / terms links row. */
1504
+ readonly showLinks: _angular_core.InputSignalWithTransform<boolean, unknown>;
1505
+ /** Show Customize when `categories` are provided. */
1506
+ readonly showCustomize: _angular_core.InputSignalWithTransform<boolean, unknown>;
1507
+ /** Dim the page behind the banner (modal-style overlay). */
1508
+ readonly overlay: _angular_core.InputSignalWithTransform<boolean, unknown>;
1509
+ /**
1510
+ * @deprecated Prefer `overlay`. Same behavior — kept for backward compatibility.
1511
+ */
1512
+ readonly blocking: _angular_core.InputSignalWithTransform<boolean, unknown>;
1513
+ /** Close the banner when the overlay backdrop is clicked (requires dismissible). */
1514
+ readonly overlayClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
1288
1515
  readonly termsHref: _angular_core.InputSignal<string>;
1289
1516
  readonly privacyHref: _angular_core.InputSignal<string>;
1517
+ /** Optional third policy link (cookie policy). Empty hides it. */
1518
+ readonly cookiePolicyHref: _angular_core.InputSignal<string>;
1519
+ readonly termsLabel: _angular_core.InputSignal<string>;
1520
+ readonly privacyLabel: _angular_core.InputSignal<string>;
1521
+ readonly cookiePolicyLabel: _angular_core.InputSignal<string>;
1290
1522
  readonly title: _angular_core.InputSignal<string>;
1291
1523
  readonly description: _angular_core.InputSignal<string>;
1292
1524
  readonly acceptLabel: _angular_core.InputSignal<string>;
1293
1525
  readonly declineLabel: _angular_core.InputSignal<string>;
1294
- /** Google Analytics IDs to disable on decline. */
1526
+ readonly customizeLabel: _angular_core.InputSignal<string>;
1527
+ readonly saveLabel: _angular_core.InputSignal<string>;
1528
+ readonly icon: _angular_core.InputSignal<DgaIconName>;
1529
+ /** Google Analytics IDs to disable on decline / when analytics is off. */
1295
1530
  readonly gaTrackingIds: _angular_core.InputSignal<string | readonly string[]>;
1531
+ /** Consent cookie lifetime in days. */
1532
+ readonly consentDays: _angular_core.InputSignal<number>;
1533
+ /** Consent cookie name (also used as localStorage key prefix). */
1534
+ readonly consentCookieName: _angular_core.InputSignal<string>;
1535
+ /** Extra cookies to delete when analytics/marketing is denied. */
1536
+ readonly analyticsCookieNames: _angular_core.InputSignal<readonly string[]>;
1537
+ /** Granular categories. When set, Customize / Save Preferences become available. */
1538
+ readonly categories: _angular_core.InputSignal<readonly DgaCookieCategory[]>;
1296
1539
  readonly accepted: _angular_core.OutputEmitterRef<void>;
1297
1540
  readonly declined: _angular_core.OutputEmitterRef<void>;
1298
1541
  readonly closed: _angular_core.OutputEmitterRef<void>;
1299
- readonly decided: _angular_core.OutputEmitterRef<"accepted" | "declined">;
1542
+ readonly decided: _angular_core.OutputEmitterRef<"accepted" | "declined" | "custom">;
1543
+ readonly preferencesChange: _angular_core.OutputEmitterRef<DgaCookiePreferences>;
1544
+ readonly decision: _angular_core.OutputEmitterRef<DgaCookieDecision>;
1300
1545
  /** Controls enter/exit animation state. */
1301
1546
  readonly visible: _angular_core.WritableSignal<boolean>;
1302
1547
  /** Keeps the panel in the DOM while exit animation plays. */
1303
1548
  readonly mounted: _angular_core.WritableSignal<boolean>;
1549
+ /** Whether the category preferences panel is expanded. */
1550
+ readonly customizing: _angular_core.WritableSignal<boolean>;
1551
+ /** Draft toggles while customizing. */
1552
+ readonly draftPrefs: _angular_core.WritableSignal<DgaCookiePreferences>;
1304
1553
  private readonly seq;
1305
1554
  readonly titleId: string;
1306
1555
  readonly bodyId: string;
@@ -1311,31 +1560,87 @@ declare class DgaCookies implements OnInit {
1311
1560
  body: string;
1312
1561
  terms: string;
1313
1562
  privacy: string;
1563
+ cookiePolicy: string;
1314
1564
  accept: string;
1565
+ acceptAll: string;
1315
1566
  decline: string;
1567
+ customize: string;
1568
+ save: string;
1569
+ categories: string;
1570
+ policies: string;
1316
1571
  close: string;
1317
1572
  }>;
1573
+ readonly resolvedCategories: _angular_core.Signal<DgaCookieCategory[]>;
1574
+ readonly resolvedLinks: _angular_core.Signal<{
1575
+ href: string;
1576
+ label: string;
1577
+ }[]>;
1578
+ /**
1579
+ * Accept + Decline share a row; Customize / Save spans full width underneath
1580
+ * so Arabic labels stay on one line. Actions stay pinned below the scroll body.
1581
+ */
1582
+ readonly actionsClasses: _angular_core.Signal<string>;
1583
+ /** Resolved vertical edge + horizontal align (logical start/end). */
1584
+ readonly placement: _angular_core.Signal<{
1585
+ edge: "top" | "bottom";
1586
+ align: DgaCookiesAlign;
1587
+ }>;
1588
+ /** Whether a dimmed backdrop is shown (`overlay` or legacy `blocking`). */
1589
+ readonly hasOverlay: _angular_core.Signal<boolean>;
1318
1590
  readonly panelClasses: _angular_core.Signal<string>;
1319
1591
  constructor();
1320
1592
  ngOnInit(): void;
1321
- /** Re-open the banner (e.g. from a footer Cookie Settings link). */
1593
+ hasCategories(): boolean;
1594
+ hasLinks(): boolean;
1595
+ /**
1596
+ * Re-open the banner (e.g. from a footer Cookie Settings link).
1597
+ * Portals to `document.body` so overflow/transform ancestors cannot clip it.
1598
+ */
1322
1599
  show(): void;
1323
1600
  /** Hide without persisting a decision. */
1324
1601
  dismiss(): void;
1602
+ /** Backdrop click — dismiss only when overlayClose + dismissible. */
1603
+ onOverlayClick(): void;
1604
+ openCustomize(): void;
1605
+ onCategoryToggle(id: string, enabled: boolean): void;
1325
1606
  accept(): void;
1326
1607
  decline(): void;
1608
+ savePreferences(): void;
1609
+ private commit;
1610
+ private buildDefaultPrefs;
1611
+ private buildAllPrefs;
1612
+ private readStored;
1327
1613
  private hidePanel;
1328
1614
  private trackingIds;
1615
+ /** Move host to `body` so fixed positioning escapes overflow/transform ancestors. */
1616
+ private ensureBodyPortal;
1617
+ private restorePortal;
1329
1618
  private clearTimer;
1330
1619
  private clearCloseTimer;
1331
- static getConsent(): DgaCookieConsent;
1332
- static setConsent(value: Exclude<DgaCookieConsent, null>): void;
1333
- static clearConsent(): void;
1620
+ static getConsent(cookieName?: string): DgaCookieConsent;
1621
+ static getPreferences(cookieName?: string): DgaCookiePreferences | null;
1622
+ static setConsent(value: Exclude<DgaCookieConsent, null>, options?: {
1623
+ name?: string;
1624
+ days?: number;
1625
+ preferences?: DgaCookiePreferences;
1626
+ }): void;
1627
+ static clearConsent(cookieName?: string): void;
1628
+ /** @internal */
1629
+ static parseStored(raw: string | null): {
1630
+ consent: DgaCookieConsent;
1631
+ preferences: DgaCookiePreferences | null;
1632
+ };
1633
+ /** @internal */
1634
+ static writeConsent(status: Exclude<DgaCookieConsent, null>, preferences: DgaCookiePreferences | null, opts: {
1635
+ name: string;
1636
+ days: number;
1637
+ hasCategories: boolean;
1638
+ }): void;
1334
1639
  static get(name: string): string | null;
1335
1640
  static set(name: string, value: string, days?: number): void;
1336
1641
  static delete(name: string): void;
1337
1642
  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>;
1643
+ 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
1644
  }
1340
1645
 
1341
1646
  type DgaRatingSize = 'sm' | 'md' | 'lg';
@@ -1428,7 +1733,7 @@ declare class DgaShare {
1428
1733
  readonly inlineClasses: _angular_core.Signal<string>;
1429
1734
  resolvedUrl(): string;
1430
1735
  resolvedTitle(): string;
1431
- onMenuSelect(value: string): void;
1736
+ onMenuSelect(item: DgaMenuItem | string): void;
1432
1737
  share(channel: string): void;
1433
1738
  copyLink(): Promise<void>;
1434
1739
  onCopied(): void;
@@ -1436,6 +1741,104 @@ declare class DgaShare {
1436
1741
  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
1742
  }
1438
1743
 
1744
+ type DgaChatbotPosition = 'end' | 'start' | 'left' | 'right';
1745
+ type DgaChatbotAnimation = 'fade' | 'slide' | 'scale' | 'none';
1746
+ type DgaChatbotSize = 'sm' | 'md' | 'lg';
1747
+ type DgaChatbotFabTone = 'primary' | 'secondary';
1748
+ interface DgaChatbotMessage {
1749
+ id: string;
1750
+ role: 'bot' | 'user';
1751
+ text: string;
1752
+ }
1753
+ /**
1754
+ * Floating live-chat launcher + panel. Place once near the app root
1755
+ * (beside `dga-scroll-top` / `dga-accessibility`).
1756
+ *
1757
+ * Use `stack` so FABs share one vertical dock:
1758
+ * a11y `0` → scroll-top `1` → chatbot `2`.
1759
+ */
1760
+ declare class DgaChatbot {
1761
+ private readonly destroyRef;
1762
+ private readonly injector;
1763
+ private readonly composerRef;
1764
+ private readonly logRef;
1765
+ /** Corner for FAB + panel. `end` / `start` follow reading direction. */
1766
+ readonly position: _angular_core.InputSignal<DgaChatbotPosition>;
1767
+ /** Panel enter animation. Honors `prefers-reduced-motion`. */
1768
+ readonly animation: _angular_core.InputSignal<DgaChatbotAnimation>;
1769
+ readonly size: _angular_core.InputSignal<DgaChatbotSize>;
1770
+ readonly title: _angular_core.InputSignal<string>;
1771
+ readonly subtitle: _angular_core.InputSignal<string>;
1772
+ readonly fabLabel: _angular_core.InputSignal<string>;
1773
+ readonly placeholder: _angular_core.InputSignal<string>;
1774
+ readonly fabIcon: _angular_core.InputSignal<DgaIconName>;
1775
+ /** Prefer a directional arrow so send ≠ chat bubble. */
1776
+ readonly sendIcon: _angular_core.InputSignal<DgaIconName>;
1777
+ readonly agentIcon: _angular_core.InputSignal<DgaIconName>;
1778
+ readonly fabTone: _angular_core.InputSignal<DgaChatbotFabTone>;
1779
+ /** Dim page behind the panel. */
1780
+ readonly overlay: _angular_core.InputSignalWithTransform<boolean, unknown>;
1781
+ /** Close when clicking the overlay. */
1782
+ readonly overlayClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
1783
+ /** Green online dot on the agent avatar. */
1784
+ readonly online: _angular_core.InputSignalWithTransform<boolean, unknown>;
1785
+ /** Hide launcher while the panel is open (recommended). */
1786
+ readonly hideFabWhenOpen: _angular_core.InputSignalWithTransform<boolean, unknown>;
1787
+ /**
1788
+ * 0-based slot in the shared FAB dock (bottom → top).
1789
+ * Typical: a11y=0, scroll-top=1, chatbot=2.
1790
+ */
1791
+ readonly stack: _angular_core.InputSignalWithTransform<number, unknown>;
1792
+ /**
1793
+ * @deprecated Prefer `stack`. When true and `stack` is unset legacy path —
1794
+ * kept for callers; `stack` wins.
1795
+ */
1796
+ readonly clearFab: _angular_core.InputSignalWithTransform<boolean, unknown>;
1797
+ /**
1798
+ * Anchor FAB/panel inside a relative parent (gallery / docs preview)
1799
+ * instead of the viewport — avoids a second global FAB.
1800
+ */
1801
+ readonly embedded: _angular_core.InputSignalWithTransform<boolean, unknown>;
1802
+ readonly initialMessages: _angular_core.InputSignal<readonly DgaChatbotMessage[]>;
1803
+ readonly sent: _angular_core.OutputEmitterRef<string>;
1804
+ readonly opened: _angular_core.OutputEmitterRef<void>;
1805
+ readonly closed: _angular_core.OutputEmitterRef<void>;
1806
+ readonly open: _angular_core.WritableSignal<boolean>;
1807
+ readonly draft: _angular_core.WritableSignal<string>;
1808
+ readonly messages: _angular_core.WritableSignal<DgaChatbotMessage[]>;
1809
+ private readonly seq;
1810
+ readonly panelId: string;
1811
+ private msgSeq;
1812
+ private seeded;
1813
+ private prevOverflow;
1814
+ readonly copy: _angular_core.Signal<{
1815
+ title: string;
1816
+ subtitle: string;
1817
+ open: string;
1818
+ close: string;
1819
+ send: string;
1820
+ input: string;
1821
+ placeholder: string;
1822
+ panelLabel: string;
1823
+ welcome: string;
1824
+ }>;
1825
+ readonly fabBottom: _angular_core.Signal<string>;
1826
+ readonly fabClasses: _angular_core.Signal<string>;
1827
+ readonly panelClasses: _angular_core.Signal<string>;
1828
+ constructor();
1829
+ private ensureSeed;
1830
+ toggle(): void;
1831
+ show(): void;
1832
+ close(): void;
1833
+ onBackdrop(): void;
1834
+ onSubmit(event: Event): void;
1835
+ private scrollLogToEnd;
1836
+ private lockScroll;
1837
+ private unlockScroll;
1838
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaChatbot, never>;
1839
+ 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>;
1840
+ }
1841
+
1439
1842
  /** One-tap accessibility presets (compose primitives + settings). */
1440
1843
  type DgaA11yBundle = 'epilepsy-safe' | 'visually-impaired' | 'cognitive-disability' | 'motor-impaired' | 'colorblind' | 'dyslexia-friendly' | 'adhd-friendly';
1441
1844
  /** Primitive toggles stamped on `data-a11y`. */
@@ -1520,8 +1923,14 @@ type SectionOpen = SectionId | null;
1520
1923
  declare class DgaAccessibility {
1521
1924
  readonly a11y: DgaAccessibilityService;
1522
1925
  readonly position: _angular_core.InputSignal<DgaAccessibilityPosition>;
1926
+ /**
1927
+ * 0-based slot in the shared FAB dock (bottom → top).
1928
+ * Typical: a11y=0, scroll-top=1, chatbot=2.
1929
+ */
1930
+ readonly stack: _angular_core.InputSignalWithTransform<number, unknown>;
1523
1931
  readonly panelId = "dga-accessibility-panel";
1524
1932
  private readonly panelRef;
1933
+ readonly fabBottom: _angular_core.Signal<string>;
1525
1934
  readonly sectionOpen: _angular_core.WritableSignal<SectionOpen>;
1526
1935
  readonly resetArmed: _angular_core.WritableSignal<boolean>;
1527
1936
  readonly liveMsg: _angular_core.WritableSignal<string>;
@@ -1641,7 +2050,7 @@ declare class DgaAccessibility {
1641
2050
  private announce;
1642
2051
  private onMaskKeys;
1643
2052
  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>;
2053
+ 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
2054
  }
1646
2055
 
1647
2056
  /**
@@ -1667,13 +2076,29 @@ declare class DgaAccordionItem {
1667
2076
  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
2077
  }
1669
2078
 
2079
+ interface DgaAccordionSection {
2080
+ id: string;
2081
+ title: string;
2082
+ content?: string;
2083
+ open?: boolean;
2084
+ }
1670
2085
  declare class DgaAccordion {
1671
2086
  /** Allow multiple panels open at once. */
1672
2087
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
2088
+ /** Optional data-driven sections; when non-empty, renders items from this list instead of `<ng-content>`. */
2089
+ readonly sections: _angular_core.InputSignal<DgaAccordionSection[]>;
1673
2090
  readonly items: _angular_core.Signal<readonly DgaAccordionItem[]>;
2091
+ private readonly seq;
2092
+ private readonly openSectionIds;
2093
+ private sectionsInitialized;
2094
+ constructor();
2095
+ headerId(section: DgaAccordionSection): string;
2096
+ panelId(section: DgaAccordionSection): string;
2097
+ isSectionOpen(section: DgaAccordionSection): boolean;
2098
+ toggleSection(section: DgaAccordionSection): void;
1674
2099
  onItemOpen(item: DgaAccordionItem): void;
1675
2100
  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>;
2101
+ 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
2102
  }
1678
2103
 
1679
2104
  interface DgaBreadcrumbItem {
@@ -1685,58 +2110,79 @@ declare class DgaBreadcrumb {
1685
2110
  readonly items: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
1686
2111
  readonly label: _angular_core.InputSignal<string>;
1687
2112
  readonly separator: _angular_core.InputSignal<DgaBreadcrumbSeparator>;
2113
+ /** Emits the clicked item for non-last links. Navigation via `href` is not prevented. */
2114
+ readonly itemClick: _angular_core.OutputEmitterRef<DgaBreadcrumbItem>;
2115
+ onItemClick(item: DgaBreadcrumbItem): void;
1688
2116
  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>;
2117
+ 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
2118
  }
1691
2119
 
1692
2120
  declare class DgaPagination {
1693
- readonly pageInput: _angular_core.InputSignal<number>;
1694
- readonly page: _angular_core.WritableSignal<number>;
2121
+ /** Two-way bindable via `[(page)]`; also emits the built-in `pageChange` output. */
2122
+ readonly page: _angular_core.ModelSignal<number>;
1695
2123
  readonly totalPages: _angular_core.InputSignal<number>;
1696
2124
  readonly label: _angular_core.InputSignal<string>;
1697
2125
  readonly prevLabel: _angular_core.InputSignal<string>;
1698
2126
  readonly nextLabel: _angular_core.InputSignal<string>;
1699
- readonly pageChange: _angular_core.OutputEmitterRef<number>;
1700
2127
  readonly pages: _angular_core.Signal<(number | "…")[]>;
1701
2128
  btnClass(active: boolean): string;
1702
2129
  go(next: number): void;
1703
2130
  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>;
2131
+ 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
2132
  }
1706
2133
 
1707
2134
  declare class DgaTab {
1708
2135
  private readonly tabs;
1709
2136
  readonly value: _angular_core.InputSignal<string>;
1710
2137
  readonly label: _angular_core.InputSignal<string>;
2138
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1711
2139
  readonly seq: number;
1712
2140
  readonly tabId: string;
1713
2141
  readonly panelId: string;
1714
2142
  readonly active: _angular_core.Signal<boolean>;
1715
2143
  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>;
2144
+ 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
2145
  }
1718
2146
 
2147
+ interface DgaTabItem {
2148
+ value: string;
2149
+ label: string;
2150
+ disabled?: boolean;
2151
+ }
1719
2152
  declare class DgaTabs {
1720
2153
  private readonly host;
2154
+ private readonly seq;
1721
2155
  readonly selected: _angular_core.ModelSignal<string>;
1722
2156
  readonly label: _angular_core.InputSignal<string>;
2157
+ /** Optional data-driven tab headers; when non-empty, renders the tablist from this list. */
2158
+ readonly items: _angular_core.InputSignal<DgaTabItem[]>;
1723
2159
  readonly tabs: _angular_core.Signal<readonly DgaTab[]>;
2160
+ readonly headerItems: _angular_core.Signal<DgaTabItem[]>;
1724
2161
  constructor();
1725
- tabButtonClass(value: string): string;
2162
+ tabButtonClass(value: string, disabled: boolean): string;
2163
+ tabIdFor(value: string): string;
2164
+ panelIdFor(value: string): string;
1726
2165
  select(value: string): void;
1727
2166
  onTablistKey(event: KeyboardEvent): void;
2167
+ private stepIndex;
2168
+ private lastEnabledIndex;
1728
2169
  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>;
2170
+ 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
2171
  }
1731
2172
 
2173
+ type DgaStepStatus = 'pending' | 'active' | 'completed' | 'error';
1732
2174
  interface DgaStep {
1733
2175
  label: string;
1734
2176
  description?: string;
2177
+ disabled?: boolean;
2178
+ /** Overrides the status normally derived from the active index. */
2179
+ status?: DgaStepStatus;
1735
2180
  }
1736
2181
  declare class DgaStepper {
1737
2182
  readonly steps: _angular_core.InputSignal<DgaStep[]>;
1738
2183
  readonly active: _angular_core.ModelSignal<number>;
1739
2184
  readonly label: _angular_core.InputSignal<string>;
2185
+ stepStatus(index: number): DgaStepStatus;
1740
2186
  stepButtonClasses(index: number): string;
1741
2187
  indicatorClasses(index: number): string;
1742
2188
  go(index: number): void;
@@ -1763,31 +2209,153 @@ declare class DgaToc {
1763
2209
  interface DgaSideNavItem {
1764
2210
  label: string;
1765
2211
  value: string;
1766
- icon?: string;
2212
+ icon?: DgaIconName;
2213
+ disabled?: boolean;
2214
+ /** Optional link target — when set, the item renders as an anchor. */
2215
+ href?: string;
2216
+ badge?: string;
2217
+ /** Nested level-2 items (expandable on desktop). */
2218
+ children?: DgaSideNavItem[];
2219
+ /** Start expanded when children exist (default: true if active child). */
2220
+ expanded?: boolean;
2221
+ }
2222
+ /** Category / section in a multi-level admin side nav. */
2223
+ interface DgaSideNavGroup {
2224
+ id: string;
2225
+ /** Optional section heading (hidden when sidebar is narrow). */
2226
+ label?: string;
2227
+ items: DgaSideNavItem[];
1767
2228
  }
1768
2229
  /**
1769
- * Side navigation.
1770
- * Below `lg`: horizontal scroll rail (mobile-friendly).
2230
+ * Side navigation with optional groups and nested children.
2231
+ * Below `lg`: horizontal scroll rail (top-level only).
1771
2232
  * From `lg`: vertical sidebar (optional collapse to icons).
1772
2233
  */
1773
2234
  declare class DgaSideNav {
2235
+ /** Flat item list (backward compatible). Ignored when `groups` is set. */
1774
2236
  readonly items: _angular_core.InputSignal<DgaSideNavItem[]>;
2237
+ /** Grouped / categorized navigation (preferred for admin shells). */
2238
+ readonly groups: _angular_core.InputSignal<DgaSideNavGroup[]>;
1775
2239
  readonly active: _angular_core.ModelSignal<string>;
1776
2240
  readonly collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1777
2241
  readonly label: _angular_core.InputSignal<string>;
1778
2242
  readonly toggleLabel: _angular_core.InputSignal<string>;
1779
2243
  readonly select: _angular_core.OutputEmitterRef<DgaSideNavItem>;
1780
2244
  readonly narrow: _angular_core.ModelSignal<boolean>;
1781
- itemClasses(value: string): string;
2245
+ /** Values of parents forced open by the user. */
2246
+ private readonly expanded;
2247
+ /** Values of parents forced closed by the user. */
2248
+ private readonly collapsed;
2249
+ readonly resolvedGroups: _angular_core.Signal<DgaSideNavGroup[]>;
2250
+ hasChildren(item: DgaSideNavItem): boolean;
2251
+ isExpanded(item: DgaSideNavItem): boolean;
2252
+ isActive(item: DgaSideNavItem): boolean;
2253
+ itemClasses(item: DgaSideNavItem, depth: number): string;
1782
2254
  toggleNarrow(): void;
1783
- onSelect(item: DgaSideNavItem): void;
2255
+ onSelect(item: DgaSideNavItem, event?: Event): void;
2256
+ private childIsActive;
2257
+ private toggleExpanded;
1784
2258
  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>;
2259
+ 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>;
2260
+ }
2261
+
2262
+ /** Category block inside a dual-nav secondary panel. */
2263
+ interface DgaDualNavCategory {
2264
+ id: string;
2265
+ label?: string;
2266
+ items: DgaSideNavItem[];
2267
+ }
2268
+ /** Top-level rail section (icon) + secondary panel categories. */
2269
+ interface DgaDualNavSection {
2270
+ id: string;
2271
+ label: string;
2272
+ icon: DgaIconName;
2273
+ badge?: string;
2274
+ categories: DgaDualNavCategory[];
2275
+ }
2276
+ /**
2277
+ * Metronic Demo 4–style dual navigation:
2278
+ * slim icon rail + secondary panel with categorized links.
2279
+ * @see https://keenthemes.com/metronic/tailwind/demo4/
2280
+ */
2281
+ declare class DgaDualNav {
2282
+ readonly sections: _angular_core.InputSignal<DgaDualNavSection[]>;
2283
+ readonly active: _angular_core.ModelSignal<string>;
2284
+ readonly activeSectionId: _angular_core.ModelSignal<string>;
2285
+ readonly panelOpen: _angular_core.ModelSignal<boolean>;
2286
+ readonly railLabel: _angular_core.InputSignal<string>;
2287
+ readonly panelEyebrow: _angular_core.InputSignal<string>;
2288
+ readonly closePanelLabel: _angular_core.InputSignal<string>;
2289
+ readonly select: _angular_core.OutputEmitterRef<DgaSideNavItem>;
2290
+ readonly activeSection: _angular_core.Signal<DgaDualNavSection>;
2291
+ constructor();
2292
+ selectSection(id: string): void;
2293
+ onSelect(item: DgaSideNavItem): void;
2294
+ linkClasses(item: DgaSideNavItem, nested?: boolean): string;
2295
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaDualNav, never>;
2296
+ 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>;
2297
+ }
2298
+
2299
+ type DgaNavRailPosition = 'static' | 'start' | 'end' | 'left' | 'right';
2300
+ type DgaNavRailAppearance = 'plain' | 'elevated' | 'outline';
2301
+ type DgaNavRailSize = 'sm' | 'md' | 'lg';
2302
+ type DgaNavRailActiveStyle = 'soft' | 'solid' | 'ring';
2303
+ interface DgaNavRailItem {
2304
+ /** Accessible label (also used for tooltip). */
2305
+ label: string;
2306
+ /** Stable id used for `active` binding / selection. */
2307
+ value: string;
2308
+ icon: DgaIconName;
2309
+ disabled?: boolean;
2310
+ /** Optional in-page or external link (`#section` for section jumps). */
2311
+ href?: string;
2312
+ }
2313
+ /**
2314
+ * Slim icon rail for jumping between page sections or compact app areas.
2315
+ * Distinct from `dga-side-nav` (labeled sidebar) and `dga-toc` (text outline).
2316
+ */
2317
+ declare class DgaNavRail {
2318
+ readonly items: _angular_core.InputSignal<readonly DgaNavRailItem[]>;
2319
+ readonly active: _angular_core.ModelSignal<string>;
2320
+ readonly label: _angular_core.InputSignal<string>;
2321
+ readonly expandLabel: _angular_core.InputSignal<string>;
2322
+ /** `static` for in-flow layout; otherwise docks to a viewport edge. */
2323
+ readonly position: _angular_core.InputSignal<DgaNavRailPosition>;
2324
+ readonly appearance: _angular_core.InputSignal<DgaNavRailAppearance>;
2325
+ readonly size: _angular_core.InputSignal<DgaNavRailSize>;
2326
+ readonly activeStyle: _angular_core.InputSignal<DgaNavRailActiveStyle>;
2327
+ /** Edge inset in px when `position` is fixed. */
2328
+ readonly offset: _angular_core.InputSignalWithTransform<number, unknown>;
2329
+ /** Show a chevron control that emits `expandChange`. */
2330
+ readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2331
+ readonly expanded: _angular_core.ModelSignal<boolean>;
2332
+ /** Smooth-scroll to `#href` targets inside the page. */
2333
+ readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2334
+ readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
2335
+ readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
2336
+ readonly edgeAttr: _angular_core.Signal<"start" | "end" | "right" | "left" | null>;
2337
+ readonly offsetCss: _angular_core.Signal<string>;
2338
+ readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
2339
+ readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;
2340
+ readonly expandIcon: _angular_core.Signal<"chevronLeft" | "chevronRight">;
2341
+ readonly listGapClass: _angular_core.Signal<"gap-xs" | "gap-sm" | "gap-md">;
2342
+ readonly railClasses: _angular_core.Signal<string>;
2343
+ expandBtnClasses(): string;
2344
+ itemClasses(item: DgaNavRailItem): string;
2345
+ onSelect(item: DgaNavRailItem, event?: MouseEvent): void;
2346
+ toggleExpand(): void;
2347
+ private prefersReducedMotion;
2348
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaNavRail, never>;
2349
+ 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
2350
  }
1787
2351
 
1788
2352
  interface DgaFilterItem {
1789
2353
  id: string;
1790
2354
  label: string;
2355
+ /** Optional result count shown as a trailing badge. */
2356
+ count?: number;
2357
+ disabled?: boolean;
2358
+ icon?: DgaIconName;
1791
2359
  }
1792
2360
  declare class DgaFilterBar {
1793
2361
  readonly filters: _angular_core.InputSignal<DgaFilterItem[]>;
@@ -1796,8 +2364,9 @@ declare class DgaFilterBar {
1796
2364
  readonly clearLabel: _angular_core.InputSignal<string>;
1797
2365
  readonly activeSet: _angular_core.Signal<Set<string>>;
1798
2366
  isActive(id: string): boolean;
1799
- chipClass(active: boolean): string;
1800
- toggle(id: string): void;
2367
+ chipClass(active: boolean, disabled: boolean): string;
2368
+ countClass(active: boolean): string;
2369
+ toggle(id: string, disabled?: boolean): void;
1801
2370
  clearAll(): void;
1802
2371
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaFilterBar, never>;
1803
2372
  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 +2398,16 @@ declare class DgaScrollTop {
1829
2398
  /** Use smooth scrolling when supported. */
1830
2399
  readonly smooth: _angular_core.InputSignalWithTransform<boolean, unknown>;
1831
2400
  /**
1832
- * Lift the button above a typical `dga-accessibility` FAB
1833
- * (56px + edge margin + gap).
2401
+ * 0-based slot in the shared FAB dock (bottom top).
2402
+ * Typical: a11y=0, scroll-top=1, chatbot=2.
2403
+ */
2404
+ readonly stack: _angular_core.InputSignalWithTransform<number, unknown>;
2405
+ /**
2406
+ * @deprecated Prefer `stack`. Kept for older callers.
1834
2407
  */
1835
2408
  readonly clearFab: _angular_core.InputSignalWithTransform<boolean, unknown>;
1836
2409
  readonly visible: _angular_core.WritableSignal<boolean>;
2410
+ readonly fabBottom: _angular_core.Signal<string>;
1837
2411
  private ticking;
1838
2412
  private readonly onScroll;
1839
2413
  readonly btnClasses: _angular_core.Signal<string>;
@@ -1842,7 +2416,7 @@ declare class DgaScrollTop {
1842
2416
  scrollToTop(): void;
1843
2417
  private syncVisibility;
1844
2418
  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>;
2419
+ 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
2420
  }
1847
2421
 
1848
2422
  /** Maps official card surface: stroke / elevation / fill. */
@@ -2000,6 +2574,37 @@ declare class DgaExpandable {
2000
2574
  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
2575
  }
2002
2576
 
2577
+ /**
2578
+ * `content` — sticky aside inside page flow (portal templates).
2579
+ * `viewport` — fixed full-height admin shell (Metronic-style app chrome).
2580
+ */
2581
+ type DgaAppShellAppearance = 'content' | 'viewport';
2582
+ /**
2583
+ * App shell: aside nav + optional header + main column.
2584
+ *
2585
+ * Projection hooks (class selectors — more reliable than camelCase attrs):
2586
+ * - `.dga-app-shell-brand` — sidebar brand
2587
+ * - `.dga-app-shell-nav` — side navigation
2588
+ * - `.dga-app-shell-nav-foot` — sidebar footer
2589
+ * - `.dga-app-shell-header` — main top bar
2590
+ * - default slot — scrollable main body
2591
+ */
2592
+ declare class DgaAppShell {
2593
+ /** Accessible name for the nav aside. */
2594
+ readonly navLabel: _angular_core.InputSignal<string>;
2595
+ /** `viewport` = full-height admin shell; `content` = in-flow sticky aside. */
2596
+ readonly appearance: _angular_core.InputSignal<DgaAppShellAppearance>;
2597
+ /** Soften viewport body padding (default true for viewport). */
2598
+ readonly padded: _angular_core.InputSignalWithTransform<boolean, unknown>;
2599
+ readonly isViewport: _angular_core.Signal<boolean>;
2600
+ readonly layoutClasses: _angular_core.Signal<string>;
2601
+ readonly navClasses: _angular_core.Signal<string>;
2602
+ readonly mainClasses: _angular_core.Signal<string>;
2603
+ readonly bodyClasses: _angular_core.Signal<string>;
2604
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAppShell, never>;
2605
+ 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>;
2606
+ }
2607
+
2003
2608
  type DgaHeaderAppearance = 'default' | 'portal';
2004
2609
  /**
2005
2610
  * Mobile / narrow navigation chrome (portal header, `md` and below):
@@ -2222,6 +2827,8 @@ declare class DgaHeader {
2222
2827
  }>;
2223
2828
  readonly logout: _angular_core.OutputEmitterRef<void>;
2224
2829
  readonly userLinkClick: _angular_core.OutputEmitterRef<DgaHeaderUserMenuLink>;
2830
+ /** Emits on click of any top-level nav link or dropdown link (desktop + mobile). */
2831
+ readonly navLinkClick: _angular_core.OutputEmitterRef<DgaNavLink | DgaNavItem>;
2225
2832
  readonly mobileOpen: _angular_core.WritableSignal<boolean>;
2226
2833
  readonly openDropdown: _angular_core.WritableSignal<number | null>;
2227
2834
  readonly searchOpen: _angular_core.WritableSignal<boolean>;
@@ -2343,9 +2950,10 @@ declare class DgaHeader {
2343
2950
  onKey(event: KeyboardEvent): void;
2344
2951
  onScroll(): void;
2345
2952
  onResize(): void;
2953
+ onNavLinkClick(link: DgaNavLink | DgaNavItem, event: MouseEvent): void;
2346
2954
  onDocClick(event: MouseEvent): void;
2347
2955
  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>;
2956
+ 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
2957
  }
2350
2958
 
2351
2959
  interface DgaStampNotice {
@@ -2597,6 +3205,100 @@ declare class DgaHero {
2597
3205
  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
3206
  }
2599
3207
 
3208
+ type DgaPageHeroTone = 'faint' | 'body' | 'surface';
3209
+ /**
3210
+ * Compact portal page header: breadcrumb + title + lede + optional actions slot.
3211
+ * Prefer this over hand-rolled `*-hero` bands on inner portal pages.
3212
+ */
3213
+ declare class DgaPageHero {
3214
+ readonly title: _angular_core.InputSignal<string>;
3215
+ readonly description: _angular_core.InputSignal<string>;
3216
+ readonly breadcrumbs: _angular_core.InputSignal<DgaBreadcrumbItem[]>;
3217
+ readonly breadcrumbLabel: _angular_core.InputSignal<string>;
3218
+ readonly tone: _angular_core.InputSignal<DgaPageHeroTone>;
3219
+ /** Extra bottom padding for denser pages. */
3220
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
3221
+ private readonly seq;
3222
+ readonly titleId: string;
3223
+ readonly sectionClasses: _angular_core.Signal<string>;
3224
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaPageHero, never>;
3225
+ 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>;
3226
+ }
3227
+
3228
+ type DgaAnnouncementTone = 'info' | 'warning' | 'success' | 'neutral' | 'critical' | 'brand';
3229
+ type DgaAnnouncementDensity = 'compact' | 'comfortable';
3230
+ type DgaAnnouncementAlign = 'start' | 'center';
3231
+ type DgaAnnouncementActionVariant = 'link' | 'button' | 'chip';
3232
+ type DgaAnnouncementPersist = 'none' | 'session' | 'local';
3233
+ type DgaAnnouncementElevation = 'none' | 'soft';
3234
+ /**
3235
+ * Site-wide campaign / outage strip for chrome (above or below `dga-top-bar`).
3236
+ * Distinct from page-level `dga-alert`.
3237
+ *
3238
+ * Layout note: use full-bleed width + `--wrapper-padding` only.
3239
+ * Do NOT add `max-w-(--container-*)` — that double-shrinks with wrapper padding.
3240
+ */
3241
+ declare class DgaAnnouncementBar {
3242
+ readonly title: _angular_core.InputSignal<string>;
3243
+ readonly message: _angular_core.InputSignal<string>;
3244
+ readonly label: _angular_core.InputSignal<string>;
3245
+ readonly tone: _angular_core.InputSignal<DgaAnnouncementTone>;
3246
+ readonly density: _angular_core.InputSignal<DgaAnnouncementDensity>;
3247
+ readonly align: _angular_core.InputSignal<DgaAnnouncementAlign>;
3248
+ readonly actionVariant: _angular_core.InputSignal<DgaAnnouncementActionVariant>;
3249
+ readonly elevation: _angular_core.InputSignal<DgaAnnouncementElevation>;
3250
+ readonly icon: _angular_core.InputSignal<DgaIconName | null>;
3251
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
3252
+ readonly dismissLabel: _angular_core.InputSignal<string>;
3253
+ readonly actionLabel: _angular_core.InputSignal<string>;
3254
+ readonly actionHref: _angular_core.InputSignal<string>;
3255
+ readonly actionExternal: _angular_core.InputSignalWithTransform<boolean, unknown>;
3256
+ /** Sticky under the viewport top while scrolling. */
3257
+ readonly sticky: _angular_core.InputSignalWithTransform<boolean, unknown>;
3258
+ /** Start accent stripe (alert-style). Off by default for site chrome. */
3259
+ readonly accent: _angular_core.InputSignalWithTransform<boolean, unknown>;
3260
+ /** Start dismissed (e.g. after reading storage). */
3261
+ readonly initiallyDismissed: _angular_core.InputSignalWithTransform<boolean, unknown>;
3262
+ /**
3263
+ * Persist dismiss across reloads.
3264
+ * Uses `persistKey` when set, otherwise a hash of title+message.
3265
+ */
3266
+ readonly persist: _angular_core.InputSignal<DgaAnnouncementPersist>;
3267
+ readonly persistKey: _angular_core.InputSignal<string>;
3268
+ readonly dismissedChange: _angular_core.OutputEmitterRef<boolean>;
3269
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3270
+ readonly dismissed: _angular_core.WritableSignal<boolean>;
3271
+ constructor();
3272
+ readonly iconTone: _angular_core.Signal<DgaIconTone>;
3273
+ readonly iconShellClasses: _angular_core.Signal<string>;
3274
+ readonly barClasses: _angular_core.Signal<string>;
3275
+ dismiss(): void;
3276
+ show(): void;
3277
+ private storageKey;
3278
+ private storage;
3279
+ private readPersisted;
3280
+ private writePersisted;
3281
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAnnouncementBar, never>;
3282
+ 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>;
3283
+ }
3284
+
3285
+ /**
3286
+ * Centered auth / registration shell: logo, optional chrome tools, form slot.
3287
+ * Not an IdP SDK — drop Nafath / OAuth buttons into the default slot.
3288
+ */
3289
+ declare class DgaAuthCard {
3290
+ readonly title: _angular_core.InputSignal<string>;
3291
+ readonly description: _angular_core.InputSignal<string>;
3292
+ readonly logoSrc: _angular_core.InputSignal<string>;
3293
+ readonly logoAlt: _angular_core.InputSignal<string>;
3294
+ readonly cardId: _angular_core.InputSignal<string>;
3295
+ /** Full-viewport centered layout (registration pages). */
3296
+ readonly centered: _angular_core.InputSignalWithTransform<boolean, unknown>;
3297
+ readonly shellClasses: _angular_core.Signal<string>;
3298
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAuthCard, never>;
3299
+ 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>;
3300
+ }
3301
+
2600
3302
  interface DgaSideInfoItem {
2601
3303
  label: string;
2602
3304
  href?: string;
@@ -2726,6 +3428,49 @@ declare class DgaDescriptionList {
2726
3428
  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
3429
  }
2728
3430
 
3431
+ interface DgaInfoListItem {
3432
+ id?: string;
3433
+ label: string;
3434
+ value: string;
3435
+ icon?: DgaIconName;
3436
+ href?: string;
3437
+ /** Open href in a new tab. */
3438
+ external?: boolean;
3439
+ /** Show a copy control for the value. */
3440
+ copyable?: boolean;
3441
+ }
3442
+ /**
3443
+ * Icon + label + value rows for contact channels, service meta, and side panels.
3444
+ */
3445
+ declare class DgaInfoList {
3446
+ readonly items: _angular_core.InputSignal<readonly DgaInfoListItem[]>;
3447
+ readonly label: _angular_core.InputSignal<string>;
3448
+ readonly copyLabel: _angular_core.InputSignal<string>;
3449
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
3450
+ readonly copy: _angular_core.OutputEmitterRef<DgaInfoListItem>;
3451
+ readonly listClasses: _angular_core.Signal<string>;
3452
+ onCopy(item: DgaInfoListItem): void;
3453
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaInfoList, never>;
3454
+ 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>;
3455
+ }
3456
+
3457
+ interface DgaTimelineItem {
3458
+ title: string;
3459
+ meta?: string;
3460
+ description?: string;
3461
+ }
3462
+ /**
3463
+ * Vertical timeline (dot + connector) for experience, history, and status flows.
3464
+ */
3465
+ declare class DgaTimeline {
3466
+ readonly items: _angular_core.InputSignal<readonly DgaTimelineItem[]>;
3467
+ readonly label: _angular_core.InputSignal<string>;
3468
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
3469
+ readonly listClasses: _angular_core.Signal<string>;
3470
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaTimeline, never>;
3471
+ 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>;
3472
+ }
3473
+
2729
3474
  type DgaCurrency = 'SAR' | 'USD' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'INR' | 'KRW' | 'TRY';
2730
3475
  /**
2731
3476
  * Locale-aware number display with optional currency/unit and scroll-triggered counter.
@@ -2761,6 +3506,59 @@ declare class DgaNumber implements OnInit {
2761
3506
  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
3507
  }
2763
3508
 
3509
+ /**
3510
+ * Official Saudi Riyal symbol path (SAMA / Saudi Riyal Font, OFL-1.1).
3511
+ * Unicode: U+20C1 SAUDI RIYAL SIGN
3512
+ */
3513
+ 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";
3514
+ /** Tight viewBox around the official glyph (aspect ≈ 0.89). */
3515
+ declare const DGA_RIYAL_VIEWBOX = "50 0 1124 1268";
3516
+ /**
3517
+ * Size tokens. Prefer `em` so the glyph matches surrounding text height
3518
+ * (SAMA alignment rule). Fixed sizes are for standalone chrome use.
3519
+ */
3520
+ type DgaRiyalSize = 'em' | 'sm' | 'md' | 'lg' | 'xl';
3521
+ type DgaRiyalTone = 'current' | 'primary' | 'muted' | 'on-color';
3522
+ /** `contained` adds circular clear-space ≈ ⅓ of the glyph height (SAMA). */
3523
+ type DgaRiyalAppearance = 'plain' | 'contained';
3524
+ /**
3525
+ * Official Saudi Riyal currency symbol.
3526
+ *
3527
+ * SAMA usage rules enforced by the component:
3528
+ * - Symbol stays to the **left** of any amount (all languages)
3529
+ * - Single space between symbol and amount
3530
+ * - Default height matches text (`1em`); geometry is never stretched/mirrored
3531
+ *
3532
+ * @example
3533
+ * ```html
3534
+ * <dga-riyal />
3535
+ * <dga-riyal [amount]="1250" />
3536
+ * <dga-riyal amount="-123" />
3537
+ * <dga-riyal amount="123 million" />
3538
+ * <dga-riyal appearance="contained" size="lg" />
3539
+ * ```
3540
+ */
3541
+ declare class DgaRiyal {
3542
+ 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";
3543
+ readonly viewBox = "50 0 1124 1268";
3544
+ /** Glyph height. Default `em` matches accompanying text (SAMA). */
3545
+ readonly size: _angular_core.InputSignal<DgaRiyalSize>;
3546
+ readonly tone: _angular_core.InputSignal<DgaRiyalTone>;
3547
+ readonly appearance: _angular_core.InputSignal<DgaRiyalAppearance>;
3548
+ /**
3549
+ * Numeric / formatted amount. Negative values keep the minus after the
3550
+ * symbol (SAMA: `⃁ -123`). Written units stay after the number
3551
+ * (e.g. `123 million`).
3552
+ */
3553
+ readonly amount: _angular_core.InputSignal<string | number | null>;
3554
+ /** Accessible name when the glyph is used alone (decorative when empty). */
3555
+ readonly label: _angular_core.InputSignal<string>;
3556
+ readonly amountText: _angular_core.Signal<string>;
3557
+ readonly hostClasses: _angular_core.Signal<string>;
3558
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaRiyal, never>;
3559
+ 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>;
3560
+ }
3561
+
2764
3562
  type DgaMetricTrend = 'up' | 'down' | 'neutral';
2765
3563
  /** `stat` = portal home metrics (icon well, value, label, centered). */
2766
3564
  type DgaMetricAppearance = 'default' | 'stat';
@@ -3120,5 +3918,5 @@ declare function dgaSaudiCityOptions(locale?: 'ar' | 'en', cities?: readonly Dga
3120
3918
  value: string;
3121
3919
  }[];
3122
3920
 
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 };
3921
+ 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 };
3922
+ 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, DgaUploadRejection };