@a.nemreen/dga-ui 0.2.8 → 0.3.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a.nemreen/dga-ui",
3
- "version": "0.2.8",
3
+ "version": "0.3.0",
4
4
  "description": "DGA Angular UI library — standalone forms, overlays, navigation, and portal shell with RTL-first Tailwind styling",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -42,7 +42,7 @@
42
42
  "@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
43
43
  "@angular/forms": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
44
44
  "@angular/platform-browser": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
45
- "@a.nemreen/dga-tokens": "^0.2.0",
45
+ "@a.nemreen/dga-tokens": "^0.2.0 || ^0.3.0",
46
46
  "@platformscode/icons": "^0.0.11"
47
47
  },
48
48
  "engines": {
@@ -19,6 +19,11 @@ declare class DgaButton {
19
19
  readonly cooldownMs: _angular_core.InputSignal<number>;
20
20
  /** Manual loading state — shows spinner and disables the control. */
21
21
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
+ /**
23
+ * Extra classes merged with variant styles.
24
+ * Prefer this over a bare `[class]` on the host — the directive owns `[class]`.
25
+ */
26
+ readonly buttonClass: _angular_core.InputSignal<string>;
22
27
  /** Exposed for host bindings (Angular 22 requires public host expressions). */
23
28
  readonly cooling: _angular_core.WritableSignal<boolean>;
24
29
  private cooldownTimer;
@@ -31,7 +36,7 @@ declare class DgaButton {
31
36
  private detachSpinner;
32
37
  private clearCooldown;
33
38
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaButton, 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>;
39
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DgaButton, "button[dgaButton], a[dgaButton]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "cooldownMs": { "alias": "cooldownMs"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "buttonClass": { "alias": "dgaButtonClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
35
40
  }
36
41
 
37
42
  type DgaBadgeVariant = 'neutral' | 'primary' | 'success' | 'info' | 'warning' | 'error';
@@ -1037,8 +1042,10 @@ declare class DgaToast implements OnDestroy {
1037
1042
  readonly closed: _angular_core.OutputEmitterRef<void>;
1038
1043
  private timer;
1039
1044
  readonly classes: _angular_core.Signal<string>;
1045
+ /** Clear sticky announcement / reserved chrome, then a small gap. */
1046
+ readonly topOffset: _angular_core.Signal<string>;
1040
1047
  readonly iconName: _angular_core.Signal<DgaIconName>;
1041
- readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "current" | "muted">;
1048
+ readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
1042
1049
  constructor();
1043
1050
  ngOnDestroy(): void;
1044
1051
  dismiss(): void;
@@ -1337,7 +1344,7 @@ declare class DgaAlert {
1337
1344
  readonly titleClasses: _angular_core.Signal<string>;
1338
1345
  readonly descriptionClasses: _angular_core.Signal<string>;
1339
1346
  readonly iconName: _angular_core.Signal<DgaIconName>;
1340
- readonly iconTone: _angular_core.Signal<"error" | "success" | "warning" | "current" | "muted">;
1347
+ readonly iconTone: _angular_core.Signal<"success" | "warning" | "error" | "muted" | "current">;
1341
1348
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaAlert, never>;
1342
1349
  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>;
1343
1350
  }
@@ -1856,6 +1863,7 @@ type DgaA11yLetterSpacing = '0' | '0.04em' | '0.08em' | '0.12em';
1856
1863
  type DgaA11yWordSpacing = '0' | '0.16em' | '0.32em' | '0.48em';
1857
1864
  declare class DgaAccessibilityService {
1858
1865
  private readonly doc;
1866
+ private readonly zone;
1859
1867
  private liveRegion;
1860
1868
  private opener;
1861
1869
  private mqMotion;
@@ -1872,15 +1880,20 @@ declare class DgaAccessibilityService {
1872
1880
  readonly maskBand: _angular_core.WritableSignal<number>;
1873
1881
  /** Center Y of the reading-mask band in px. */
1874
1882
  readonly maskY: _angular_core.WritableSignal<number>;
1875
- readonly reduceMotion: _angular_core.WritableSignal<boolean>;
1876
- readonly highlightLinks: _angular_core.WritableSignal<boolean>;
1877
- readonly highlightTitles: _angular_core.WritableSignal<boolean>;
1878
- readonly highContrast: _angular_core.WritableSignal<boolean>;
1879
- readonly dyslexia: _angular_core.WritableSignal<boolean>;
1880
- readonly readingMask: _angular_core.WritableSignal<boolean>;
1881
- readonly motorTargets: _angular_core.WritableSignal<boolean>;
1882
- /** Signal bumped when locale attrs change (for computed copy). */
1883
- readonly localeEpoch: _angular_core.WritableSignal<number>;
1883
+ readonly reduceMotion: _angular_core.Signal<boolean>;
1884
+ readonly highlightLinks: _angular_core.Signal<boolean>;
1885
+ readonly highlightTitles: _angular_core.Signal<boolean>;
1886
+ readonly highContrast: _angular_core.Signal<boolean>;
1887
+ readonly dyslexia: _angular_core.Signal<boolean>;
1888
+ readonly readingMask: _angular_core.Signal<boolean>;
1889
+ readonly motorTargets: _angular_core.Signal<boolean>;
1890
+ /**
1891
+ * Reactive UI locale — kept in sync with `<html lang>` / `data-locale`
1892
+ * (including when `DgaLocaleService` updates the document).
1893
+ */
1894
+ readonly locale: _angular_core.WritableSignal<"ar" | "en">;
1895
+ private readonly effectiveModes;
1896
+ private localeObserver;
1884
1897
  constructor();
1885
1898
  open(opener?: HTMLElement | null): void;
1886
1899
  close(): void;
@@ -1896,23 +1909,29 @@ declare class DgaAccessibilityService {
1896
1909
  cycleLineHeight(): void;
1897
1910
  cycleLetterSpacing(): void;
1898
1911
  cycleWordSpacing(): void;
1912
+ /** Step font size (−1 / +1), wrapping within available levels. */
1913
+ stepFontStep(delta: number): void;
1914
+ stepTextAlign(delta: number): void;
1915
+ stepLineHeight(delta: number): void;
1916
+ stepLetterSpacing(delta: number): void;
1917
+ stepWordSpacing(delta: number): void;
1899
1918
  adjustMaskBand(delta: number): void;
1900
1919
  setMaskY(y: number): void;
1901
1920
  reset(): void;
1902
1921
  announce(msg: string): void;
1903
- /** Current UI locale inferred from `<html lang>`. */
1904
- get locale(): 'ar' | 'en';
1922
+ /** Current UI locale inferred from `<html lang>` / `data-locale`. */
1923
+ private readDomLocale;
1924
+ /** Keep `locale` reactive when portal / DgaLocaleService mutates `<html>`. */
1925
+ private bindLocaleObserver;
1905
1926
  /**
1906
1927
  * Toggle AR/EN on `<html>` (`lang` / `dir` / `data-locale`).
1907
1928
  * Compatible with DgaLocaleService attribute contract.
1908
1929
  */
1909
1930
  toggleLocale(): 'ar' | 'en';
1910
1931
  activeModeCount(section: 'modes' | 'readable' | 'visual'): number;
1932
+ /** Total active settings across profiles + tools + filters (for FAB badge). */
1933
+ activeSettingCount(): number;
1911
1934
  private applyBundleExtras;
1912
- /** Primitive left on by direct toggle (not only via a bundle). */
1913
- private userKeptPrimitive;
1914
- private syncDerived;
1915
- /** Lazily inject OpenDyslexic (Latin). Arabic falls through to Readex Pro. */
1916
1935
  private ensureDyslexiaFont;
1917
1936
  private applyToDocument;
1918
1937
  private persist;
@@ -1924,8 +1943,8 @@ declare class DgaAccessibilityService {
1924
1943
  }
1925
1944
 
1926
1945
  type DgaAccessibilityPosition = 'end' | 'start' | 'left' | 'right';
1927
- type SectionId = 'modes' | 'readable' | 'visual';
1928
- type SectionOpen = SectionId | null;
1946
+ type AdjustToggleId = 'dyslexia' | 'highlight-titles' | 'highlight-links' | 'reading-mask' | 'reduce-motion';
1947
+ type AdjustStepperId = 'font' | 'align' | 'line' | 'letter' | 'word';
1929
1948
  declare class DgaAccessibility {
1930
1949
  readonly a11y: DgaAccessibilityService;
1931
1950
  readonly position: _angular_core.InputSignal<DgaAccessibilityPosition>;
@@ -1937,7 +1956,6 @@ declare class DgaAccessibility {
1937
1956
  readonly panelId = "dga-accessibility-panel";
1938
1957
  private readonly panelRef;
1939
1958
  readonly fabBottom: _angular_core.Signal<string>;
1940
- readonly sectionOpen: _angular_core.WritableSignal<SectionOpen>;
1941
1959
  readonly resetArmed: _angular_core.WritableSignal<boolean>;
1942
1960
  readonly liveMsg: _angular_core.WritableSignal<string>;
1943
1961
  private resetTimer;
@@ -1947,10 +1965,14 @@ declare class DgaAccessibility {
1947
1965
  close: string;
1948
1966
  panelLabel: string;
1949
1967
  title: string;
1950
- sectionModes: string;
1951
- sectionReadable: string;
1952
- sectionVisual: string;
1953
- langToggle: string;
1968
+ sectionActive: string;
1969
+ sectionProfiles: string;
1970
+ sectionAdjust: string;
1971
+ sectionFilters: string;
1972
+ profilesHint: string;
1973
+ chipJump: string;
1974
+ stepDecrease: string;
1975
+ stepIncrease: string;
1954
1976
  reset: string;
1955
1977
  resetConfirm: string;
1956
1978
  announcedReset: string;
@@ -2020,23 +2042,32 @@ declare class DgaAccessibility {
2020
2042
  label: string;
2021
2043
  desc: string;
2022
2044
  }[]>;
2023
- readonly readableTiles: _angular_core.Signal<{
2024
- id: string;
2045
+ readonly adjustToggles: _angular_core.Signal<{
2046
+ id: AdjustToggleId;
2047
+ mode: DgaA11yMode;
2048
+ icon: DgaIconName;
2049
+ label: string;
2050
+ active: boolean;
2051
+ }[]>;
2052
+ readonly adjustSteppers: _angular_core.Signal<{
2053
+ id: AdjustStepperId;
2025
2054
  icon: DgaIconName;
2026
2055
  label: string;
2027
- kind: "cycle" | "toggle";
2028
2056
  active: boolean;
2029
- level: number;
2030
2057
  valueLabel: string;
2031
- ariaLabel: string;
2032
- onClick: () => void;
2033
2058
  }[]>;
2034
2059
  readonly visualTiles: _angular_core.Signal<{
2035
- value: DgaA11yVisualFilter;
2060
+ value: Exclude<DgaA11yVisualFilter, "none">;
2036
2061
  label: string;
2037
2062
  icon: DgaIconName;
2038
2063
  active: boolean;
2039
2064
  }[]>;
2065
+ readonly activeChips: _angular_core.Signal<{
2066
+ id: string;
2067
+ label: string;
2068
+ controlId: string;
2069
+ }[]>;
2070
+ readonly activeBadgeCount: _angular_core.Signal<number>;
2040
2071
  readonly fabClasses: _angular_core.Signal<string>;
2041
2072
  readonly panelClasses: _angular_core.Signal<string>;
2042
2073
  constructor();
@@ -2044,14 +2075,13 @@ declare class DgaAccessibility {
2044
2075
  onPointerMove(event: PointerEvent): void;
2045
2076
  onPointerUp(): void;
2046
2077
  onFabClick(event: MouseEvent): void;
2047
- toggleSection(id: SectionId): void;
2048
2078
  onBundle(id: DgaA11yBundle, enabled: boolean): void;
2049
- onToggleMode(mode: DgaA11yMode): void;
2079
+ onToggleMode(mode: DgaA11yMode, enabled?: boolean): void;
2080
+ onStep(id: AdjustStepperId, delta: number): void;
2050
2081
  onFilter(value: DgaA11yVisualFilter): void;
2051
- onLocale(): void;
2082
+ focusControl(controlId: string): void;
2052
2083
  onReset(): void;
2053
2084
  onMaskDragStart(event: PointerEvent): void;
2054
- tileClasses(active: boolean): string;
2055
2085
  private panelPositionClass;
2056
2086
  private announce;
2057
2087
  private onMaskKeys;
@@ -2394,7 +2424,7 @@ declare class DgaNavRail {
2394
2424
  readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2395
2425
  readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
2396
2426
  readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
2397
- readonly edgeAttr: _angular_core.Signal<"left" | "right" | "start" | "end" | null>;
2427
+ readonly edgeAttr: _angular_core.Signal<"start" | "end" | "left" | "right" | null>;
2398
2428
  readonly offsetCss: _angular_core.Signal<string>;
2399
2429
  readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
2400
2430
  readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;
@@ -3337,7 +3367,14 @@ declare class DgaAnnouncementBar {
3337
3367
  /** Fired when the action control has no `actionHref` (button / chip / link-as-button). */
3338
3368
  readonly action: _angular_core.OutputEmitterRef<void>;
3339
3369
  readonly dismissed: _angular_core.WritableSignal<boolean>;
3370
+ private readonly doc;
3371
+ private readonly hostEl;
3372
+ private readonly destroyRef;
3373
+ private resizeObserver;
3340
3374
  constructor();
3375
+ private bindLayoutOffset;
3376
+ private syncLayoutOffset;
3377
+ private clearLayoutOffset;
3341
3378
  readonly iconTone: _angular_core.Signal<DgaIconTone>;
3342
3379
  readonly iconShellClasses: _angular_core.Signal<string>;
3343
3380
  readonly barClasses: _angular_core.Signal<string>;