@ndwnu/design-system 8.0.1 → 9.1.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.
Files changed (62) hide show
  1. package/assets/images/map-backgrounds/osm-basic.webp +0 -0
  2. package/assets/images/map-backgrounds/osm-color-blind.webp +0 -0
  3. package/assets/images/map-backgrounds/osm-dark-with-highlighted-main-roads.webp +0 -0
  4. package/assets/images/map-backgrounds/osm-dark.webp +0 -0
  5. package/assets/images/map-backgrounds/osm-default-no-roads.webp +0 -0
  6. package/assets/images/map-backgrounds/osm-default-with-fcd-links_1-5.webp +0 -0
  7. package/assets/images/map-backgrounds/osm-default-with-fcd-roads.webp +0 -0
  8. package/assets/images/map-backgrounds/osm-default-with-fcd-segments.webp +0 -0
  9. package/assets/images/map-backgrounds/osm-default-with-mst.webp +0 -0
  10. package/assets/images/map-backgrounds/osm-default-with-nwb-roads-white.webp +0 -0
  11. package/assets/images/map-backgrounds/osm-default-with-nwb-roads.webp +0 -0
  12. package/assets/images/map-backgrounds/osm-default.webp +0 -0
  13. package/assets/images/map-backgrounds/osm-front-office-dark.webp +0 -0
  14. package/assets/images/map-backgrounds/osm-front-office-light-with-nwb-roads.webp +0 -0
  15. package/assets/images/map-backgrounds/osm-front-office-light.webp +0 -0
  16. package/assets/images/map-backgrounds/osm-green.webp +0 -0
  17. package/assets/images/map-button-icons.svg +38 -0
  18. package/assets/images/map-layers/actueelverkeer1.webp +0 -0
  19. package/assets/images/map-layers/actueelverkeerv2.webp +0 -0
  20. package/assets/images/map-layers/beeldstand1.webp +0 -0
  21. package/assets/images/map-layers/beeldstand2.webp +0 -0
  22. package/assets/images/map-layers/hectometrering.webp +0 -0
  23. package/assets/images/map-layers/wegwerkzaamheden.webp +0 -0
  24. package/fesm2022/ndwnu-design-system.mjs +634 -343
  25. package/fesm2022/ndwnu-design-system.mjs.map +1 -1
  26. package/lib/components/badge/badge.component.d.ts +6 -1
  27. package/lib/components/favorite/favorite.component.d.ts +7 -0
  28. package/lib/components/favorite/index.d.ts +1 -0
  29. package/lib/components/form-field/autosuggest/autosuggest.directive.d.ts +2 -2
  30. package/lib/components/form-field/checkbox/checkbox.component.d.ts +1 -0
  31. package/lib/components/form-field/radio-button/radio-button.component.d.ts +1 -2
  32. package/lib/components/form-field/textarea/max-char.directive.d.ts +15 -3
  33. package/lib/components/index.d.ts +4 -0
  34. package/lib/components/layout/layout.component.d.ts +4 -5
  35. package/lib/components/main-navigation/main-navigation-header/index.d.ts +1 -0
  36. package/lib/components/main-navigation/main-navigation-header/main-navigation-header.component.d.ts +17 -0
  37. package/lib/components/main-navigation/main-navigation-menu/main-navigation-menu.component.d.ts +16 -0
  38. package/lib/components/main-navigation/main-navigation.component.d.ts +15 -32
  39. package/lib/components/main-navigation/main-navigation.model.d.ts +12 -10
  40. package/lib/components/map-button/index.d.ts +2 -0
  41. package/lib/components/map-button/map-button.component.d.ts +14 -0
  42. package/lib/components/map-button/map-button.model.d.ts +4 -0
  43. package/lib/components/map-display/backgrounds.d.ts +21 -0
  44. package/lib/components/map-display/index.d.ts +3 -0
  45. package/lib/components/map-display/layers.d.ts +10 -0
  46. package/lib/components/map-display/map-display-option/index.d.ts +2 -0
  47. package/lib/components/map-display/map-display-option/map-display-option.component.d.ts +11 -0
  48. package/lib/components/map-display/map-display-option/map-display-option.model.d.ts +14 -0
  49. package/lib/components/map-display/map-display.component.d.ts +30 -0
  50. package/lib/components/multi-select/multi-select.component.d.ts +1 -1
  51. package/lib/components/summary-card/summary-card-actions/summary-card-actions.component.d.ts +1 -1
  52. package/lib/components/tab/tab.component.d.ts +2 -1
  53. package/lib/components/tab-group/tab-group.component.d.ts +1 -0
  54. package/lib/components/toast/toast.component.d.ts +6 -5
  55. package/package.json +4 -4
  56. package/styles/base/_typography.scss +5 -1
  57. package/styles/components/_input.scss +7 -0
  58. package/styles/components/_summary-card.scss +4 -0
  59. package/lib/components/form-field/autosuggest/match-bold.pipe.d.ts +0 -7
  60. package/lib/components/main-navigation/main-navigation.imports.d.ts +0 -10
  61. package/lib/components/main-navigation-menu/main-navigation-menu.component.d.ts +0 -10
  62. /package/lib/components/{main-navigation-menu → main-navigation/main-navigation-menu}/index.d.ts +0 -0
@@ -8,6 +8,11 @@ export declare class BadgeComponent {
8
8
  * The aria label, used by screen readers to give context.
9
9
  */
10
10
  ariaLabel: import("@angular/core").InputSignal<string | undefined>;
11
+ /**
12
+ * When true, the badge will display values above 99.
13
+ * When false (default), the badge will display values above 99 as a dot
14
+ */
15
+ displayLargeNumbers: import("@angular/core").InputSignal<boolean>;
11
16
  static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "ndw-badge", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "ndw-badge", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "displayLargeNumbers": { "alias": "displayLargeNumbers"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13
18
  }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FavoriteComponent {
3
+ checked: import("@angular/core").ModelSignal<boolean>;
4
+ uuid: `${string}-${string}-${string}-${string}-${string}`;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<FavoriteComponent, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<FavoriteComponent, "ndw-favorite", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, never>;
7
+ }
@@ -0,0 +1 @@
1
+ export * from './favorite.component';
@@ -6,6 +6,7 @@ import * as i0 from "@angular/core";
6
6
  export declare class AutosuggestDirective<T> implements ControlValueAccessor, AfterViewInit, OnDestroy {
7
7
  readonly ndwAutosuggest: import("@angular/core").InputSignal<AutosuggestPanelComponent<T>>;
8
8
  readonly filter: import("@angular/core").OutputEmitterRef<string>;
9
+ readonly placeholder: import("@angular/core").InputSignal<string>;
9
10
  private overlayAttached;
10
11
  private overlayRef;
11
12
  private portal;
@@ -62,10 +63,9 @@ export declare class AutosuggestDirective<T> implements ControlValueAccessor, Af
62
63
  private getDisplayValue;
63
64
  private updateNativeInputValue;
64
65
  private scrollToOption;
65
- private setTriggerValue;
66
66
  private clearPreviousSelectedOption;
67
67
  private canOpen;
68
68
  private getWindow;
69
69
  static ɵfac: i0.ɵɵFactoryDeclaration<AutosuggestDirective<any>, never>;
70
- static ɵdir: i0.ɵɵDirectiveDeclaration<AutosuggestDirective<any>, "input[ndwAutosuggest], textarea[ndwAutosuggest]", ["ndwAutosuggestTrigger"], { "ndwAutosuggest": { "alias": "ndwAutosuggest"; "required": true; "isSignal": true; }; }, { "filter": "filter"; }, never, never, true, never>;
70
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AutosuggestDirective<any>, "input[ndwAutosuggest], textarea[ndwAutosuggest]", ["ndwAutosuggestTrigger"], { "ndwAutosuggest": { "alias": "ndwAutosuggest"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "filter": "filter"; }, never, never, true, never>;
71
71
  }
@@ -11,6 +11,7 @@ export declare class CheckboxComponent implements ControlValueAccessor {
11
11
  uuid: `${string}-${string}-${string}-${string}-${string}`;
12
12
  onClick(): void;
13
13
  onKeyDown(event: KeyboardEvent): void;
14
+ onInputChange(event: Event): void;
14
15
  writeValue(value: boolean): void;
15
16
  registerOnChange(fn: (value: boolean) => void): void;
16
17
  registerOnTouched(): void;
@@ -9,8 +9,7 @@ export declare class RadioButtonComponent implements ControlValueAccessor {
9
9
  required: import("@angular/core").InputSignal<boolean>;
10
10
  value: import("@angular/core").ModelSignal<unknown>;
11
11
  uuid: `${string}-${string}-${string}-${string}-${string}`;
12
- onClick(): void;
13
- onKeyDown(event: KeyboardEvent): void;
12
+ onInputChange(event: Event): void;
14
13
  writeValue(value: boolean): void;
15
14
  registerOnChange(fn: (value: boolean) => void): void;
16
15
  registerOnTouched(): void;
@@ -1,14 +1,26 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
1
2
  import * as i0 from "@angular/core";
2
- export declare class MaxCharDirective {
3
+ export declare class MaxCharDirective implements OnInit, OnDestroy {
3
4
  ndwMaxChar: import("@angular/core").InputSignal<number>;
4
5
  maxCharText: import("@angular/core").InputSignal<string>;
5
6
  private readonly elementRef;
6
7
  private readonly renderer;
8
+ private readonly destroyRef;
7
9
  private counterElement;
8
- get element(): HTMLTextAreaElement;
10
+ private originalParentStyle;
11
+ private originalElementStyle;
12
+ private get element();
13
+ private get parentStyle();
14
+ private readonly isRendered;
15
+ private readonly isDisabled;
16
+ private readonly ngControl;
17
+ private disabledAttrObserver;
9
18
  constructor();
19
+ ngOnInit(): void;
20
+ ngOnDestroy(): void;
10
21
  onInput(): void;
11
- private createCounterElement;
22
+ private monitorDisabledState;
23
+ private addCounterElement;
12
24
  private removeCounterElement;
13
25
  static ɵfac: i0.ɵɵFactoryDeclaration<MaxCharDirective, never>;
14
26
  static ɵdir: i0.ɵɵDirectiveDeclaration<MaxCharDirective, "textarea[ndwMaxChar]", never, { "ndwMaxChar": { "alias": "ndwMaxChar"; "required": false; "isSignal": true; }; "maxCharText": { "alias": "maxCharText"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -11,12 +11,16 @@ export * from './collapsible';
11
11
  export * from './dashboard-card';
12
12
  export * from './dropdown';
13
13
  export * from './edit-bar';
14
+ export * from './favorite';
14
15
  export * from './form-field';
15
16
  export * from './icon';
16
17
  export * from './layout';
17
18
  export * from './layout-banners';
18
19
  export * from './loader';
19
20
  export * from './main-navigation';
21
+ export * from './map-button';
22
+ export * from './map-display';
23
+ export * from './map-display/map-display-option';
20
24
  export * from './modal';
21
25
  export * from './multi-select';
22
26
  export * from './pill';
@@ -1,15 +1,14 @@
1
- import { MenuItem, NdwBrand } from '../main-navigation';
1
+ import { Environment, MenuItem } from '../main-navigation';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class LayoutComponent {
4
4
  applicationName: import("@angular/core").InputSignal<string>;
5
+ topMenuItems: import("@angular/core").InputSignal<MenuItem[]>;
5
6
  bottomMenuItems: import("@angular/core").InputSignal<MenuItem[] | undefined>;
6
- brand: import("@angular/core").InputSignal<NdwBrand>;
7
+ environment: import("@angular/core").InputSignal<Environment | undefined>;
7
8
  isCollapsible: import("@angular/core").InputSignal<boolean>;
8
9
  isExpanded: import("@angular/core").InputSignal<boolean>;
9
10
  menuFooterTexts: import("@angular/core").InputSignal<string[] | undefined>;
10
- topMenuItems: import("@angular/core").InputSignal<MenuItem[]>;
11
11
  version: import("@angular/core").InputSignal<string | undefined>;
12
- environment: import("@angular/core").InputSignal<"local" | "staging" | "acceptance" | undefined>;
13
12
  static ɵfac: i0.ɵɵFactoryDeclaration<LayoutComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<LayoutComponent, "ndw-layout", never, { "applicationName": { "alias": "applicationName"; "required": true; "isSignal": true; }; "bottomMenuItems": { "alias": "bottomMenuItems"; "required": false; "isSignal": true; }; "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "isCollapsible": { "alias": "isCollapsible"; "required": false; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": false; "isSignal": true; }; "menuFooterTexts": { "alias": "menuFooterTexts"; "required": false; "isSignal": true; }; "topMenuItems": { "alias": "topMenuItems"; "required": true; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "environment": { "alias": "environment"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<LayoutComponent, "ndw-layout", never, { "applicationName": { "alias": "applicationName"; "required": true; "isSignal": true; }; "topMenuItems": { "alias": "topMenuItems"; "required": true; "isSignal": true; }; "bottomMenuItems": { "alias": "bottomMenuItems"; "required": false; "isSignal": true; }; "environment": { "alias": "environment"; "required": false; "isSignal": true; }; "isCollapsible": { "alias": "isCollapsible"; "required": false; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": false; "isSignal": true; }; "menuFooterTexts": { "alias": "menuFooterTexts"; "required": false; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
15
14
  }
@@ -0,0 +1 @@
1
+ export * from './main-navigation-header.component';
@@ -0,0 +1,17 @@
1
+ import { Environment } from '../main-navigation.model';
2
+ import * as i0 from "@angular/core";
3
+ export declare class MainNavigationHeaderComponent {
4
+ applicationName: import("@angular/core").InputSignal<string>;
5
+ closeButtonLabel: import("@angular/core").InputSignal<string>;
6
+ isExpanded: import("@angular/core").InputSignal<boolean>;
7
+ isMobile: import("@angular/core").InputSignal<boolean>;
8
+ menuButtonLabel: import("@angular/core").InputSignal<string>;
9
+ theme: import("@angular/core").InputSignal<string>;
10
+ themeImagePath: import("@angular/core").InputSignal<string>;
11
+ environment: import("@angular/core").InputSignal<Environment | undefined>;
12
+ isMobileMenuOpen: import("@angular/core").ModelSignal<boolean>;
13
+ environmentColor: import("@angular/core").Signal<"blue" | "green" | "yellow" | "gray">;
14
+ toggleMobileMenu(): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<MainNavigationHeaderComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<MainNavigationHeaderComponent, "ndw-main-navigation-header", never, { "applicationName": { "alias": "applicationName"; "required": true; "isSignal": true; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": true; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": true; "isSignal": true; }; "isMobile": { "alias": "isMobile"; "required": true; "isSignal": true; }; "menuButtonLabel": { "alias": "menuButtonLabel"; "required": true; "isSignal": true; }; "theme": { "alias": "theme"; "required": true; "isSignal": true; }; "themeImagePath": { "alias": "themeImagePath"; "required": true; "isSignal": true; }; "environment": { "alias": "environment"; "required": false; "isSignal": true; }; "isMobileMenuOpen": { "alias": "isMobileMenuOpen"; "required": true; "isSignal": true; }; }, { "isMobileMenuOpen": "isMobileMenuOpenChange"; }, never, never, true, never>;
17
+ }
@@ -0,0 +1,16 @@
1
+ import { MenuItem, SubMenuItem } from '../main-navigation.model';
2
+ import * as i0 from "@angular/core";
3
+ export declare class MainNavigationMenuComponent {
4
+ isExpanded: import("@angular/core").InputSignal<boolean>;
5
+ isMobile: import("@angular/core").InputSignal<boolean>;
6
+ items: import("@angular/core").InputSignal<MenuItem[]>;
7
+ closed: import("@angular/core").OutputEmitterRef<void>;
8
+ activeMobileItem: import("@angular/core").WritableSignal<MenuItem | undefined>;
9
+ closeMobileMenu(item?: SubMenuItem): void;
10
+ getItemKey(item: MenuItem | SubMenuItem): string;
11
+ handleMobileItemKeydown(event: KeyboardEvent, item: MenuItem): void;
12
+ setActiveMobileItem(item: MenuItem | undefined): void;
13
+ toggleActiveMobileItem(item: MenuItem): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<MainNavigationMenuComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<MainNavigationMenuComponent, "ndw-main-navigation-menu", never, { "isExpanded": { "alias": "isExpanded"; "required": true; "isSignal": true; }; "isMobile": { "alias": "isMobile"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
16
+ }
@@ -1,44 +1,27 @@
1
- import { ConnectedPosition } from '@angular/cdk/overlay';
2
- import { TemplatePortal } from '@angular/cdk/portal';
3
- import { AfterViewInit, ElementRef, OnDestroy, TemplateRef } from '@angular/core';
4
- import { MainNavigationMenuComponent } from '../main-navigation-menu';
5
- import { Environment, MenuItem, NdwBrand, SimpleMenuItem } from './main-navigation.model';
1
+ import { AfterViewInit } from '@angular/core';
2
+ import { Environment, MenuItem, Theme } from './main-navigation.model';
6
3
  import * as i0 from "@angular/core";
7
- export declare class MainNavigationComponent implements AfterViewInit, OnDestroy {
4
+ export declare class MainNavigationComponent implements AfterViewInit {
8
5
  #private;
9
6
  applicationName: import("@angular/core").InputSignal<string>;
7
+ topMenuItems: import("@angular/core").InputSignal<MenuItem[]>;
10
8
  bottomMenuItems: import("@angular/core").InputSignal<MenuItem[] | undefined>;
11
- brand: import("@angular/core").InputSignal<NdwBrand>;
9
+ closeButtonLabel: import("@angular/core").InputSignal<string>;
10
+ environment: import("@angular/core").InputSignal<Environment | undefined>;
12
11
  footerTexts: import("@angular/core").InputSignal<string[] | undefined>;
13
12
  isCollapsible: import("@angular/core").InputSignal<boolean>;
14
- topMenuItems: import("@angular/core").InputSignal<MenuItem[]>;
15
- version: import("@angular/core").InputSignal<string | undefined>;
16
- environment: import("@angular/core").InputSignal<Environment | undefined>;
17
- closeButtonLabel: import("@angular/core").InputSignal<string>;
18
13
  menuButtonLabel: import("@angular/core").InputSignal<string>;
19
- isExpanded: import("@angular/core").ModelSignal<boolean>;
20
- isMobileExpanded: import("@angular/core").ModelSignal<boolean>;
21
- buttons: import("@angular/core").Signal<readonly ElementRef<HTMLButtonElement>[]>;
22
- childMenuTemplate: import("@angular/core").Signal<TemplateRef<MainNavigationMenuComponent>>;
14
+ version: import("@angular/core").InputSignal<string | undefined>;
23
15
  isMobile: import("@angular/core").WritableSignal<boolean>;
24
- brandImagePath: import("@angular/core").Signal<string>;
25
- environmentPillColor: import("@angular/core").Signal<"blue" | "green" | "yellow" | "gray">;
26
- activeId?: number;
27
- protected mobilePortal?: TemplatePortal<MainNavigationMenuComponent>;
28
- onMouseMove(event: MouseEvent): void;
29
- onWindowResize(): void;
30
- activeChildItems: SimpleMenuItem[];
31
- overlayPositions: ConnectedPosition[];
32
- constructor();
16
+ isMobileMenuOpen: import("@angular/core").WritableSignal<boolean>;
17
+ theme: import("@angular/core").WritableSignal<Theme>;
18
+ isExpanded: import("@angular/core").ModelSignal<boolean>;
19
+ mobileMenuItems: import("@angular/core").Signal<MenuItem[]>;
20
+ themeImagePath: import("@angular/core").Signal<string>;
33
21
  ngAfterViewInit(): void;
34
- ngOnDestroy(): void;
35
- close(activeItem?: SimpleMenuItem, toggleMobileView?: boolean): void;
36
- handleClick(activeItem: MenuItem): void;
37
- handleLogoClick(): void;
38
- open(item: MenuItem): void;
39
- toggleChildMenu(item: MenuItem, event?: KeyboardEvent): void;
40
- toggleMobileView(): void;
22
+ closeMobileMenu(): void;
23
+ onWindowResize(): void;
41
24
  toggleView(): void;
42
25
  static ɵfac: i0.ɵɵFactoryDeclaration<MainNavigationComponent, never>;
43
- static ɵcmp: i0.ɵɵComponentDeclaration<MainNavigationComponent, "ndw-main-navigation", never, { "applicationName": { "alias": "applicationName"; "required": true; "isSignal": true; }; "bottomMenuItems": { "alias": "bottomMenuItems"; "required": false; "isSignal": true; }; "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "footerTexts": { "alias": "footerTexts"; "required": false; "isSignal": true; }; "isCollapsible": { "alias": "isCollapsible"; "required": false; "isSignal": true; }; "topMenuItems": { "alias": "topMenuItems"; "required": true; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "environment": { "alias": "environment"; "required": false; "isSignal": true; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": false; "isSignal": true; }; "menuButtonLabel": { "alias": "menuButtonLabel"; "required": false; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": false; "isSignal": true; }; "isMobileExpanded": { "alias": "isMobileExpanded"; "required": false; "isSignal": true; }; }, { "isExpanded": "isExpandedChange"; "isMobileExpanded": "isMobileExpandedChange"; }, never, never, true, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<MainNavigationComponent, "ndw-main-navigation", never, { "applicationName": { "alias": "applicationName"; "required": true; "isSignal": true; }; "topMenuItems": { "alias": "topMenuItems"; "required": true; "isSignal": true; }; "bottomMenuItems": { "alias": "bottomMenuItems"; "required": false; "isSignal": true; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": false; "isSignal": true; }; "environment": { "alias": "environment"; "required": false; "isSignal": true; }; "footerTexts": { "alias": "footerTexts"; "required": false; "isSignal": true; }; "isCollapsible": { "alias": "isCollapsible"; "required": false; "isSignal": true; }; "menuButtonLabel": { "alias": "menuButtonLabel"; "required": false; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": false; "isSignal": true; }; }, { "isExpanded": "isExpandedChange"; }, never, never, true, never>;
44
27
  }
@@ -1,13 +1,15 @@
1
- export interface SimpleMenuItem {
2
- active?: boolean;
3
- id: number;
1
+ import { Params } from '@angular/router';
2
+ export interface SubMenuItem {
4
3
  label: string;
5
- callback?: (id: number) => void;
6
- }
7
- export interface MenuItem extends SimpleMenuItem {
8
- children?: SimpleMenuItem[];
9
- icon?: string;
4
+ active?: boolean;
5
+ callback?: () => void;
10
6
  notifications?: number;
7
+ path?: string[];
8
+ queryParams?: Params;
9
+ }
10
+ export interface MenuItem extends SubMenuItem {
11
+ icon: string;
12
+ children?: SubMenuItem[];
11
13
  }
12
- export type NdwBrand = 'NDW' | 'NWB';
13
- export type Environment = 'local' | 'staging' | 'acceptance';
14
+ export type Theme = 'ndw' | 'nwb';
15
+ export type Environment = 'Local' | 'Staging' | 'Acceptance';
@@ -0,0 +1,2 @@
1
+ export * from './map-button.component';
2
+ export * from './map-button.model';
@@ -0,0 +1,14 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class MapButtonComponent {
3
+ #private;
4
+ readonly icon: import("@angular/core").InputSignal<"search" | "direction" | "gps" | "high-res" | "layers" | "polygon" | "zoom-in" | "zoom-out" | "hectometer" | "low-res" | "zoom-to-content">;
5
+ readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
6
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
7
+ readonly active: import("@angular/core").InputSignal<boolean>;
8
+ readonly clicked: import("@angular/core").OutputEmitterRef<void>;
9
+ protected readonly buttonIcon: import("@angular/core").Signal<string>;
10
+ protected readonly svgIcon: import("@angular/core").Signal<string | undefined>;
11
+ protected readonly iconLabel: import("@angular/core").Signal<string>;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapButtonComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<MapButtonComponent, "ndw-map-button", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
14
+ }
@@ -0,0 +1,4 @@
1
+ export declare const fontMapButtonIcons: readonly ["direction", "gps", "high-res", "layers", "polygon", "search", "zoom-in", "zoom-out"];
2
+ export declare const svgMapButtonIcons: readonly ["hectometer", "low-res", "zoom-to-content"];
3
+ export declare const mapButtonIcons: readonly ["direction", "gps", "high-res", "layers", "polygon", "search", "zoom-in", "zoom-out", "hectometer", "low-res", "zoom-to-content"];
4
+ export type MapButtonIcon = (typeof mapButtonIcons)[number];
@@ -0,0 +1,21 @@
1
+ import { MapBackgrounds } from './map-display-option/map-display-option.model';
2
+ export declare const MAP_BACKGROUND_IMAGES: {
3
+ OSM_DEFAULT: string;
4
+ OSM_BASIC: string;
5
+ OSM_COLOR_BLIND: string;
6
+ OSM_DARK: string;
7
+ OSM_NO_ROADS: string;
8
+ OSM_FCD_LINKS: string;
9
+ OSM_FCD_ROADS: string;
10
+ OSM_FCD_SEGMENTS: string;
11
+ OSM_MST: string;
12
+ OSM_NWB_ROADS_WHITE: string;
13
+ OSM_NWB_ROADS: string;
14
+ OSM_DEFAULT_FULL: string;
15
+ OSM_FRONT_DARK: string;
16
+ OSM_FRONT_LIGHT_NWB: string;
17
+ OSM_FRONT_LIGHT: string;
18
+ OSM_GREEN: string;
19
+ };
20
+ export declare const MAP_BACKGROUNDS: MapBackgrounds;
21
+ export declare const DEFAULT_BACKGROUNDS: import("./map-display-option/map-display-option.model").MapBackgroundOption<string>[];
@@ -0,0 +1,3 @@
1
+ export * from './map-display.component';
2
+ export * from './backgrounds';
3
+ export * from './layers';
@@ -0,0 +1,10 @@
1
+ import { MapDisplayOption } from './map-display-option';
2
+ export declare const MAP_LAYER_IMAGES: {
3
+ ACTUAL_TRAFFIC_V1: string;
4
+ ACTUAL_TRAFFIC_V2: string;
5
+ IMAGE_MODE_V1: string;
6
+ IMAGE_MODE_V2: string;
7
+ HECTOMETRY: string;
8
+ ROAD_WORKS: string;
9
+ };
10
+ export declare const MAP_LAYERS: Record<string, MapDisplayOption>;
@@ -0,0 +1,2 @@
1
+ export * from './map-display-option.model';
2
+ export * from './map-display-option.component';
@@ -0,0 +1,11 @@
1
+ import { DisplayOptionDirection, DisplayOptionType, MapDisplayOption } from './map-display-option.model';
2
+ import * as i0 from "@angular/core";
3
+ export declare class MapDisplayOptionComponent {
4
+ option: import("@angular/core").InputSignal<MapDisplayOption>;
5
+ direction: import("@angular/core").InputSignal<DisplayOptionDirection>;
6
+ type: import("@angular/core").InputSignal<DisplayOptionType>;
7
+ group: import("@angular/core").InputSignal<string | undefined>;
8
+ selectionChange: import("@angular/core").OutputEmitterRef<MapDisplayOption>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapDisplayOptionComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<MapDisplayOptionComponent, "ndw-map-display-option", never, { "option": { "alias": "option"; "required": true; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
11
+ }
@@ -0,0 +1,14 @@
1
+ export type DisplayOptionType = 'none' | 'button' | 'radio' | 'checkbox';
2
+ export type DisplayOptionDirection = 'row' | 'column';
3
+ export interface MapDisplayOption {
4
+ id: string;
5
+ name: string;
6
+ active?: boolean;
7
+ imageLink?: string;
8
+ description?: string;
9
+ [key: string]: unknown;
10
+ }
11
+ export type MapBackgroundOption<T = string> = MapDisplayOption & {
12
+ style: T;
13
+ };
14
+ export type MapBackgrounds = Record<string, MapBackgroundOption>;
@@ -0,0 +1,30 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { MapBackgroundOption, MapDisplayOption } from './map-display-option';
3
+ import * as i0 from "@angular/core";
4
+ export declare class MapDisplayComponent implements OnInit {
5
+ #private;
6
+ title: import("@angular/core").InputSignal<string>;
7
+ backgroundsTitle: import("@angular/core").InputSignal<string>;
8
+ layersTitle: import("@angular/core").InputSignal<string>;
9
+ enableClearLayers: import("@angular/core").InputSignal<boolean>;
10
+ layerOptionType: import("@angular/core").InputSignal<"radio" | "checkbox">;
11
+ backgroundOptions: import("@angular/core").InputSignalWithTransform<MapBackgroundOption[], MapBackgroundOption[]>;
12
+ layerOptions: import("@angular/core").InputSignalWithTransform<MapDisplayOption[], MapDisplayOption[]>;
13
+ readonly backgroundChange: import("@angular/core").OutputEmitterRef<MapBackgroundOption>;
14
+ readonly layerChange: import("@angular/core").OutputEmitterRef<MapDisplayOption>;
15
+ readonly clearAllLayers: import("@angular/core").OutputEmitterRef<void>;
16
+ readonly open: import("@angular/core").ModelSignal<boolean>;
17
+ readonly htmlIsRendered: import("@angular/core").WritableSignal<boolean>;
18
+ readonly showPopover: import("@angular/core").Signal<boolean>;
19
+ readonly linkedBackgroundOptions: import("@angular/core").WritableSignal<MapBackgroundOption[]>;
20
+ readonly activeBackgroundOption: import("@angular/core").Signal<MapBackgroundOption | undefined>;
21
+ readonly linkedLayerOptions: import("@angular/core").WritableSignal<MapDisplayOption[]>;
22
+ readonly numberOfSelectedLayers: import("@angular/core").Signal<number>;
23
+ constructor();
24
+ ngOnInit(): void;
25
+ selectBackground(option: MapDisplayOption): void;
26
+ toggleLayer(option: MapDisplayOption): void;
27
+ clearLayers(): void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapDisplayComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<MapDisplayComponent, "ndw-map-display", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "backgroundsTitle": { "alias": "backgroundsTitle"; "required": false; "isSignal": true; }; "layersTitle": { "alias": "layersTitle"; "required": false; "isSignal": true; }; "enableClearLayers": { "alias": "enableClearLayers"; "required": false; "isSignal": true; }; "layerOptionType": { "alias": "layerOptionType"; "required": false; "isSignal": true; }; "backgroundOptions": { "alias": "backgroundOptions"; "required": false; "isSignal": true; }; "layerOptions": { "alias": "layerOptions"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "backgroundChange": "backgroundChange"; "layerChange": "layerChange"; "clearAllLayers": "clearAllLayers"; "open": "openChange"; }, never, never, true, never>;
30
+ }
@@ -24,5 +24,5 @@ export declare class MultiSelectComponent {
24
24
  isOpenChanged(isOpen: boolean): void;
25
25
  private determineLastCheckedElement;
26
26
  static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectComponent, never>;
27
- static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectComponent, "ndw-multi-select", never, { "buttonText": { "alias": "buttonText"; "required": true; "isSignal": true; }; "searchLabel": { "alias": "searchLabel"; "required": true; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "noResultText": { "alias": "noResultText"; "required": false; "isSignal": true; }; "chevron": { "alias": "chevron"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selectAllText": { "alias": "selectAllText"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "lastCheckedElementId": { "alias": "lastCheckedElementId"; "required": false; "isSignal": true; }; "searchInputValue": { "alias": "searchInputValue"; "required": false; "isSignal": true; }; }, { "dataSource": "dataSourceChange"; "lastCheckedElementId": "lastCheckedElementIdChange"; "searchInputValue": "searchInputValueChange"; }, never, never, true, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectComponent, "ndw-multi-select", never, { "buttonText": { "alias": "buttonText"; "required": true; "isSignal": true; }; "searchLabel": { "alias": "searchLabel"; "required": false; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "noResultText": { "alias": "noResultText"; "required": false; "isSignal": true; }; "chevron": { "alias": "chevron"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selectAllText": { "alias": "selectAllText"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "lastCheckedElementId": { "alias": "lastCheckedElementId"; "required": false; "isSignal": true; }; "searchInputValue": { "alias": "searchInputValue"; "required": false; "isSignal": true; }; }, { "dataSource": "dataSourceChange"; "lastCheckedElementId": "lastCheckedElementIdChange"; "searchInputValue": "searchInputValueChange"; }, never, never, true, never>;
28
28
  }
@@ -5,5 +5,5 @@ export declare class SummaryCardActionsComponent {
5
5
  readonly view: import("@angular/core").InputSignal<SummaryActionsView>;
6
6
  readonly actions: import("@angular/core").Signal<readonly SummaryCardActionComponent[]>;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<SummaryCardActionsComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<SummaryCardActionsComponent, "ndw-summary-card-actions", never, { "view": { "alias": "view"; "required": false; "isSignal": true; }; }, {}, ["actions"], never, true, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<SummaryCardActionsComponent, "ndw-summary-card-actions", never, { "view": { "alias": "view"; "required": false; "isSignal": true; }; }, {}, ["actions"], ["ndw-favorite"], true, never>;
9
9
  }
@@ -8,10 +8,11 @@ export declare class TabComponent implements OnInit {
8
8
  private readonly _contentTemplate;
9
9
  get content(): TemplatePortal | null;
10
10
  title: import("@angular/core").InputSignal<string>;
11
+ disabled: import("@angular/core").InputSignal<boolean>;
11
12
  active: boolean;
12
13
  id: `${string}-${string}-${string}-${string}-${string}`;
13
14
  ngOnInit(): void;
14
15
  getNativeElement(): HTMLElement;
15
16
  static ɵfac: i0.ɵɵFactoryDeclaration<TabComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "ndw-tab", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "ndw-tab", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
17
18
  }
@@ -7,6 +7,7 @@ export declare class TabGroupComponent {
7
7
  activeTab: import("@angular/core").ModelSignal<number>;
8
8
  selectTab(index: number): void;
9
9
  onKeyDown(event: KeyboardEvent): void;
10
+ private getNextEnabledIndex;
10
11
  static ɵfac: i0.ɵɵFactoryDeclaration<TabGroupComponent, never>;
11
12
  static ɵcmp: i0.ɵɵComponentDeclaration<TabGroupComponent, "ndw-tab-group", never, { "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, { "activeTab": "activeTabChange"; }, ["_tabs"], never, true, never>;
12
13
  }
@@ -2,18 +2,19 @@ import { OnDestroy, OnInit } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class ToastComponent implements OnInit, OnDestroy {
4
4
  private readonly renderer;
5
+ readonly message: import("@angular/core").InputSignal<string>;
5
6
  readonly close: import("@angular/core").OutputEmitterRef<void>;
6
- readonly message: import("@angular/core").ModelSignal<string>;
7
7
  private readonly toastContainer;
8
+ private readonly toastProgress;
8
9
  private interval;
10
+ private timeout;
9
11
  ngOnInit(): void;
10
12
  ngOnDestroy(): void;
11
13
  open(): void;
12
- private updateGradient;
14
+ private updateProgressWidth;
13
15
  protected startFadeOut(): void;
14
- private checkForExistingToast;
15
16
  private clearInterval;
16
- private truncateText;
17
+ private clearTimeout;
17
18
  static ɵfac: i0.ɵɵFactoryDeclaration<ToastComponent, never>;
18
- static ɵcmp: i0.ɵɵComponentDeclaration<ToastComponent, "ndw-toast", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; }, { "close": "close"; "message": "messageChange"; }, never, never, true, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToastComponent, "ndw-toast", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, never, true, never>;
19
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndwnu/design-system",
3
- "version": "8.0.1",
3
+ "version": "9.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^19.0.0",
6
6
  "@angular/cdk": "^19.0.0",
@@ -8,9 +8,9 @@
8
8
  "@angular/core": "^19.0.0",
9
9
  "@angular/forms": "^19.0.0",
10
10
  "@angular/router": "^19.0.0",
11
- "@ndwnu/core": "0.0.1-beta.1",
12
- "@storybook/addon-actions": "8.5.0",
13
- "@storybook/angular": "8.5.0",
11
+ "@ndwnu/core": "0.0.2-beta.1",
12
+ "@storybook/addon-actions": "8.6.12",
13
+ "@storybook/angular": "8.6.12",
14
14
  "rxjs": "^7.8.0"
15
15
  },
16
16
  "sideEffects": false,
@@ -1,4 +1,8 @@
1
- @import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400..650;1,9..40,400..650&family=Material+Symbols+Rounded:opsz,wght@20..48,400&family=Nunito+Sans:ital,opsz,wght@0,6..12,400..650;1,6..12,400..650&family=Roboto+Flex:opsz,wght@8..144,100..1000&display=block');
1
+ @import url('https://fonts.googleapis.com/css2\
2
+ ?family=DM+Sans:ital,opsz,wght@0,9..40,400..650;1,9..40,400..650\
3
+ &family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,400,0..1\
4
+ &family=Nunito+Sans:ital,opsz,wght@0,6..12,400..650;1,6..12,400..650\
5
+ &display=block');
2
6
 
3
7
  /* Mixins */
4
8
  @mixin ndw-heading-xl {
@@ -83,6 +83,13 @@
83
83
  }
84
84
  }
85
85
 
86
+ @mixin input-focus-visible-label {
87
+ outline-color: Highlight;
88
+ outline-color: -webkit-focus-ring-color;
89
+ outline-style: auto;
90
+ outline-width: 1px;
91
+ }
92
+
86
93
  .input-container:has(> [ndwInput][error]) {
87
94
  background-color: var(--ndw-color-critical-100);
88
95
  border-color: var(--ndw-color-critical-500);
@@ -143,6 +143,10 @@
143
143
  display: flex;
144
144
  justify-content: flex-end;
145
145
 
146
+ ndw-favorite {
147
+ margin-right: var(--ndw-spacing-sm);
148
+ }
149
+
146
150
  &--auto {
147
151
  container-type: inline-size;
148
152
  }
@@ -1,7 +0,0 @@
1
- import { PipeTransform } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export declare class MatchBoldPipe implements PipeTransform {
4
- transform(value: unknown, searchTerm: string): string;
5
- static ɵfac: i0.ɵɵFactoryDeclaration<MatchBoldPipe, never>;
6
- static ɵpipe: i0.ɵɵPipeDeclaration<MatchBoldPipe, "matchBold", true>;
7
- }
@@ -1,10 +0,0 @@
1
- import { OverlayModule } from '@angular/cdk/overlay';
2
- import { CdkPortalOutlet } from '@angular/cdk/portal';
3
- import { NgClass, NgTemplateOutlet } from '@angular/common';
4
- import { RouterLink } from '@angular/router';
5
- import { BadgeComponent } from '../badge';
6
- import { IconComponent } from '../icon';
7
- import { MainNavigationMenuComponent } from '../main-navigation-menu';
8
- import { TooltipDirective } from '../tooltip';
9
- import { PillComponent } from '../pill';
10
- export declare const MAIN_NAVIGATION_IMPORTS: (typeof BadgeComponent | typeof IconComponent | typeof NgClass | typeof NgTemplateOutlet | typeof RouterLink | typeof TooltipDirective | typeof MainNavigationMenuComponent | typeof PillComponent | typeof CdkPortalOutlet | typeof OverlayModule)[];
@@ -1,10 +0,0 @@
1
- import { SimpleMenuItem } from '../main-navigation';
2
- import * as i0 from "@angular/core";
3
- export declare class MainNavigationMenuComponent {
4
- menuItems: import("@angular/core").InputSignal<SimpleMenuItem[]>;
5
- isMobile: import("@angular/core").InputSignal<boolean>;
6
- close: import("@angular/core").OutputEmitterRef<SimpleMenuItem>;
7
- handleSelected(activeItem: SimpleMenuItem): void;
8
- static ɵfac: i0.ɵɵFactoryDeclaration<MainNavigationMenuComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<MainNavigationMenuComponent, "ndw-main-navigation-menu", never, { "menuItems": { "alias": "menuItems"; "required": true; "isSignal": true; }; "isMobile": { "alias": "isMobile"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, never, true, never>;
10
- }