ngwr 7.1.0 → 7.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.
Files changed (99) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -3
  3. package/alert/styles/_index.scss +2 -0
  4. package/back-top/styles/_index.scss +4 -2
  5. package/carousel/styles/_index.scss +2 -0
  6. package/cascader/styles/_index.scss +16 -0
  7. package/color-picker/styles/_index.scss +7 -0
  8. package/command-palette/styles/_index.scss +28 -0
  9. package/density/styles/_index.scss +10 -0
  10. package/descriptions/styles/_index.scss +59 -0
  11. package/dialog/styles/_index.scss +2 -0
  12. package/drawer/styles/_index.scss +2 -0
  13. package/dropdown/styles/_index.scss +1 -0
  14. package/fesm2022/ngwr-carousel.mjs +45 -4
  15. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  16. package/fesm2022/ngwr-cascader.mjs +2 -2
  17. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  18. package/fesm2022/ngwr-command-palette.mjs +17 -3
  19. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  20. package/fesm2022/ngwr-context-menu.mjs +77 -5
  21. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  22. package/fesm2022/ngwr-density.mjs +3 -3
  23. package/fesm2022/ngwr-density.mjs.map +1 -1
  24. package/fesm2022/ngwr-descriptions.mjs +11 -2
  25. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  26. package/fesm2022/ngwr-dialog.mjs +11 -4
  27. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  28. package/fesm2022/ngwr-drag-drop.mjs +13 -3
  29. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  30. package/fesm2022/ngwr-drawer.mjs +66 -5
  31. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  32. package/fesm2022/ngwr-dropdown.mjs +35 -11
  33. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  34. package/fesm2022/ngwr-lightbox.mjs +45 -2
  35. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  36. package/fesm2022/ngwr-overlay.mjs +70 -1
  37. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  38. package/fesm2022/ngwr-page-header.mjs +11 -3
  39. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  40. package/fesm2022/ngwr-pagination.mjs +11 -3
  41. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  42. package/fesm2022/ngwr-popover.mjs +36 -10
  43. package/fesm2022/ngwr-popover.mjs.map +1 -1
  44. package/fesm2022/ngwr-rotating-text.mjs +15 -4
  45. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  46. package/fesm2022/ngwr-select.mjs +35 -14
  47. package/fesm2022/ngwr-select.mjs.map +1 -1
  48. package/fesm2022/ngwr-stepper.mjs +11 -2
  49. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  50. package/fesm2022/ngwr-table.mjs +10 -4
  51. package/fesm2022/ngwr-table.mjs.map +1 -1
  52. package/fesm2022/ngwr-tabs.mjs +38 -6
  53. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  54. package/fesm2022/ngwr-toast.mjs +54 -2
  55. package/fesm2022/ngwr-toast.mjs.map +1 -1
  56. package/fesm2022/ngwr-toolbar.mjs +11 -4
  57. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  58. package/fesm2022/ngwr-version.mjs +1 -1
  59. package/fesm2022/ngwr-version.mjs.map +1 -1
  60. package/lightbox/styles/_index.scss +4 -0
  61. package/llms-full.txt +673 -0
  62. package/llms.txt +106 -0
  63. package/overlay/styles/_index.scss +31 -0
  64. package/package.json +6 -5
  65. package/page-header/styles/_index.scss +16 -0
  66. package/pagination/styles/_index.scss +34 -0
  67. package/popover/styles/_index.scss +1 -0
  68. package/select/styles/_index.scss +27 -0
  69. package/slider/styles/_index.scss +3 -0
  70. package/splitter/styles/_index.scss +3 -0
  71. package/stepper/styles/_index.scss +30 -0
  72. package/styles.scss +1 -0
  73. package/table/styles/_index.scss +61 -0
  74. package/tabs/styles/_index.scss +24 -0
  75. package/theme/styles/_mixins.scss +47 -0
  76. package/toast/styles/_index.scss +32 -1
  77. package/toolbar/styles/_index.scss +29 -0
  78. package/tree/styles/_index.scss +15 -0
  79. package/types/ngwr-carousel.d.ts +8 -1
  80. package/types/ngwr-command-palette.d.ts +13 -1
  81. package/types/ngwr-context-menu.d.ts +25 -3
  82. package/types/ngwr-density.d.ts +2 -2
  83. package/types/ngwr-descriptions.d.ts +8 -1
  84. package/types/ngwr-dialog.d.ts +7 -0
  85. package/types/ngwr-drag-drop.d.ts +13 -1
  86. package/types/ngwr-drawer.d.ts +11 -3
  87. package/types/ngwr-dropdown.d.ts +10 -1
  88. package/types/ngwr-lightbox.d.ts +5 -0
  89. package/types/ngwr-overlay.d.ts +69 -1
  90. package/types/ngwr-page-header.d.ts +8 -1
  91. package/types/ngwr-pagination.d.ts +7 -1
  92. package/types/ngwr-popover.d.ts +10 -1
  93. package/types/ngwr-rotating-text.d.ts +1 -0
  94. package/types/ngwr-select.d.ts +10 -1
  95. package/types/ngwr-stepper.d.ts +8 -1
  96. package/types/ngwr-table.d.ts +7 -1
  97. package/types/ngwr-tabs.d.ts +6 -0
  98. package/types/ngwr-toolbar.d.ts +7 -1
  99. package/types/ngwr-version.d.ts +1 -1
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ElementRef } from '@angular/core';
3
+ import { BooleanInput } from '@angular/cdk/coercion';
3
4
  import { WrIconName } from 'ngwr/icon';
4
5
 
5
6
  /**
@@ -69,10 +70,20 @@ declare class WrCommandPalette {
69
70
  protected readonly resolvedEmpty: _angular_core.Signal<string>;
70
71
  /** Auto-close on `(picked)`. Set false to keep open. @default true */
71
72
  readonly closeOnPick: _angular_core.InputSignalWithTransform<boolean, any>;
73
+ /**
74
+ * Present the palette full-screen on small viewports instead of a centred
75
+ * modal. `undefined` follows the app-wide `provideWrResponsiveOverlays()`
76
+ * setting; `true`/`false` overrides it. The palette docks to the top (it
77
+ * auto-focuses its input, so the on-screen keyboard stays clear).
78
+ * @default undefined
79
+ */
80
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean | undefined, BooleanInput>;
72
81
  /** Fires when the user commits an item (Enter / click). */
73
82
  readonly picked: _angular_core.OutputEmitterRef<WrCommandItem>;
74
83
  protected readonly query: _angular_core.WritableSignal<string>;
75
84
  protected readonly activeIndex: _angular_core.WritableSignal<number>;
85
+ /** Whether the current opening is presented full-screen. Decided on open. */
86
+ protected readonly presentAsSheet: _angular_core.WritableSignal<boolean>;
76
87
  protected readonly inputEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
77
88
  protected readonly panelEl: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
78
89
  /** Listbox id (referenced by the input's `aria-controls`). */
@@ -82,6 +93,7 @@ declare class WrCommandPalette {
82
93
  /** Id of the active option for `aria-activedescendant`. */
83
94
  protected readonly activeOptionId: _angular_core.Signal<string | null>;
84
95
  private readonly hotkeys;
96
+ private readonly responsiveConfig;
85
97
  private readonly destroyRef;
86
98
  private readonly focusTrapFactory;
87
99
  private readonly isBrowser;
@@ -106,7 +118,7 @@ declare class WrCommandPalette {
106
118
  close(): void;
107
119
  private commit;
108
120
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCommandPalette, never>;
109
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCommandPalette, "wr-command-palette", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "closeOnPick": { "alias": "closeOnPick"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "picked": "picked"; }, never, never, true, never>;
121
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCommandPalette, "wr-command-palette", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "closeOnPick": { "alias": "closeOnPick"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "picked": "picked"; }, never, never, true, never>;
110
122
  }
111
123
 
112
124
  export { WrCommandPalette };
@@ -24,9 +24,9 @@ declare class WrContextMenuPanel {
24
24
 
25
25
  /**
26
26
  * Attach to any element to show a `<wr-context-menu>` at the pointer
27
- * position when the user right-clicks (or sends a `contextmenu` event by
28
- * any means — long-press on touch, Shift+F10, etc.). The native browser
29
- * menu is suppressed for the host element.
27
+ * position when the user right-clicks, long-presses on touch, or otherwise
28
+ * sends a `contextmenu` event (Shift+F10, etc.). The native browser menu is
29
+ * suppressed for the host element.
30
30
  *
31
31
  * @example
32
32
  * ```html
@@ -79,9 +79,31 @@ declare class WrContextMenu {
79
79
  * on a deliberate hover-out.
80
80
  */
81
81
  private static readonly LEAVE_DELAY;
82
+ /** Hold duration (ms) before a stationary touch press opens the menu. */
83
+ private static readonly LONG_PRESS_MS;
84
+ /** Movement (px) that reclassifies a press as a scroll and cancels it. */
85
+ private static readonly LONG_PRESS_MOVE_TOLERANCE;
86
+ private longPressTimer;
87
+ private touchStartX;
88
+ private touchStartY;
89
+ private longPressFired;
90
+ private suppressContextMenuUntil;
82
91
  constructor();
83
92
  /** @internal Right-click handler — opens at the pointer (or re-positions if already open). */
84
93
  protected onContextMenu(event: MouseEvent): void;
94
+ /**
95
+ * @internal Touch long-press → open the menu. Native `contextmenu` is
96
+ * unreliable on touch (iOS doesn't fire it, Android's timing varies), so we
97
+ * detect the press ourselves: a stationary hold for `LONG_PRESS_MS` opens
98
+ * the menu at the touch point; moving the finger reclassifies it as a
99
+ * scroll and cancels.
100
+ */
101
+ protected onTouchStart(event: TouchEvent): void;
102
+ /** @internal Cancel a pending long-press once the finger travels (a scroll). */
103
+ protected onTouchMove(event: TouchEvent): void;
104
+ /** @internal Release — drop a pending press; swallow the synthetic click a fired press would emit. */
105
+ protected onTouchEnd(event: TouchEvent): void;
106
+ private clearLongPress;
85
107
  /** Close the menu. */
86
108
  close(): void;
87
109
  private openOverlay;
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
3
3
 
4
4
  /** Density scale. Components multiply their paddings by the matching multiplier. */
5
- type WrDensityValue = 'compact' | 'default' | 'comfortable';
5
+ type WrDensityValue = 'compact' | 'default' | 'comfortable' | 'touch';
6
6
  /** Configuration for {@link WrDensityValueService}. */
7
7
  interface WrDensityConfig {
8
8
  /** Initial density used when no persisted value is present. @default 'default' */
@@ -52,7 +52,7 @@ declare class WrDensity {
52
52
  constructor();
53
53
  /** Switch the active density. Ignores unknown values. */
54
54
  set(density: WrDensityValue): void;
55
- /** Cycle compact → default → comfortable → compact … */
55
+ /** Cycle compact → default → comfortable → touch → compact … */
56
56
  cycle(): void;
57
57
  private readPersisted;
58
58
  private persist;
@@ -23,9 +23,16 @@ declare class WrDescriptions {
23
23
  readonly inline: _angular_core.InputSignalWithTransform<boolean, any>;
24
24
  /** Add visible borders around each row. @default false */
25
25
  readonly bordered: _angular_core.InputSignalWithTransform<boolean, any>;
26
+ /**
27
+ * Reflow `inline` rows back to a stacked layout when the box itself is
28
+ * narrow (a container query on its own width, not the viewport — so it
29
+ * adapts inside a narrow card or side panel). Makes the box fill its
30
+ * container's width. @default false
31
+ */
32
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
26
33
  protected readonly classes: _angular_core.Signal<string>;
27
34
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDescriptions, never>;
28
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDescriptions, "wr-descriptions", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
35
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDescriptions, "wr-descriptions", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
29
36
  }
30
37
 
31
38
  /**
@@ -66,6 +66,12 @@ interface WrDialogOptions<D = unknown> {
66
66
  readonly maxWidth?: string;
67
67
  /** Extra CSS class(es) added to the panel. */
68
68
  readonly panelClass?: string | readonly string[];
69
+ /**
70
+ * Present as a full-width bottom-sheet on small viewports instead of a
71
+ * centred modal. `undefined` follows the app-wide
72
+ * `provideWrResponsiveOverlays()` setting; `true`/`false` overrides it.
73
+ */
74
+ readonly responsive?: boolean;
69
75
  }
70
76
 
71
77
  /**
@@ -96,6 +102,7 @@ declare class WrDialog {
96
102
  private readonly parentInjector;
97
103
  private readonly focusTrapFactory;
98
104
  private readonly isBrowser;
105
+ private readonly responsiveConfig;
99
106
  open<C, R = unknown, D = unknown>(component: ComponentType<C>, options?: WrDialogOptions<D>): WrDialogRef<C, R>;
100
107
  static ɵfac: i0.ɵɵFactoryDeclaration<WrDialog, never>;
101
108
  static ɵprov: i0.ɵɵInjectableDeclaration<WrDialog>;
@@ -47,6 +47,18 @@ declare class WrSortableList<T = unknown> {
47
47
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
48
48
  /** Locked axis — restrict drag movement to one axis even diagonally. */
49
49
  readonly lockAxis: _angular_core.InputSignal<"x" | "y" | undefined>;
50
+ /**
51
+ * Delay (ms) before a drag begins after the pointer goes down. The touch
52
+ * delay is the fix for the classic CDK touch snag: without it, the
53
+ * `touch-action: none` CDK puts on each item blocks scrolling the list on a
54
+ * phone. With a small touch delay, a quick swipe scrolls and a brief hold
55
+ * starts the drag; mouse stays instant. Pass a single number to apply one
56
+ * delay to both pointers. @default { touch: 150, mouse: 0 }
57
+ */
58
+ readonly dragStartDelay: _angular_core.InputSignal<number | {
59
+ touch: number;
60
+ mouse: number;
61
+ }>;
50
62
  /** `trackBy` for the inner `@for`. Defaults to identity. */
51
63
  readonly trackBy: _angular_core.InputSignal<(index: number, item: T) => unknown>;
52
64
  /** Fired after a successful reorder with the new array + indices. */
@@ -54,7 +66,7 @@ declare class WrSortableList<T = unknown> {
54
66
  protected readonly rowTemplate: _angular_core.Signal<TemplateRef<any>>;
55
67
  protected onDrop(event: CdkDragDrop<T[]>): void;
56
68
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSortableList<any>, never>;
57
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSortableList<any>, "wr-sortable-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "lockAxis": { "alias": "lockAxis"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "reorder": "reorder"; }, ["rowTemplate"], never, true, never>;
69
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSortableList<any>, "wr-sortable-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "lockAxis": { "alias": "lockAxis"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "reorder": "reorder"; }, ["rowTemplate"], never, true, never>;
58
70
  }
59
71
 
60
72
  /**
@@ -51,9 +51,9 @@ declare class WrDrawer {
51
51
  */
52
52
  readonly rounded: _angular_core.InputSignalWithTransform<boolean, any>;
53
53
  /**
54
- * Render a grab handle at the leading edge. Visual affordance for
55
- * "swipe to dismiss" patterns. Cosmetic — no swipe logic attached.
56
- * @default false
54
+ * Render a grab handle at the leading edge and enable swipe-to-dismiss:
55
+ * drag the handle toward the drawer's edge (down for `bottom`, left for
56
+ * `left`, …) and release past ~30% of the panel to close. @default false
57
57
  */
58
58
  readonly showHandle: _angular_core.InputSignalWithTransform<boolean, any>;
59
59
  /**
@@ -69,6 +69,14 @@ declare class WrDrawer {
69
69
  readonly closeOnEscape: _angular_core.InputSignalWithTransform<boolean, any>;
70
70
  protected readonly panelTpl: _angular_core.Signal<TemplateRef<any>>;
71
71
  protected panelClass(): string;
72
+ private swipeStartX;
73
+ private swipeStartY;
74
+ private swiping;
75
+ protected onSwipeStart(event: TouchEvent): void;
76
+ protected onSwipeMove(event: TouchEvent, panel: HTMLElement): void;
77
+ protected onSwipeEnd(event: TouchEvent, panel: HTMLElement): void;
78
+ /** Axis + sign of the closing direction for the current position. */
79
+ private closeAxis;
72
80
  private readonly overlay;
73
81
  private readonly vcr;
74
82
  private readonly destroyRef;
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef } from '@angular/core';
3
+ import { BooleanInput } from '@angular/cdk/coercion';
3
4
 
4
5
  /**
5
6
  * Holds the menu content rendered when a {@link WrDropdown} opens.
@@ -59,12 +60,20 @@ declare class WrDropdown {
59
60
  readonly trigger: _angular_core.InputSignal<WrDropdownTrigger>;
60
61
  /** Where the menu anchors relative to the trigger. @default 'bottom-start' */
61
62
  readonly position: _angular_core.InputSignal<WrDropdownPosition>;
63
+ /**
64
+ * Present the menu as a full-width bottom-sheet on small viewports instead
65
+ * of an anchored panel. `undefined` follows the app-wide
66
+ * `provideWrResponsiveOverlays()` setting; `true`/`false` overrides it.
67
+ * @default undefined
68
+ */
69
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean | undefined, BooleanInput>;
62
70
  /** Fires after the menu opens. */
63
71
  readonly opened: _angular_core.OutputEmitterRef<void>;
64
72
  /** Fires after the menu closes. */
65
73
  readonly closed: _angular_core.OutputEmitterRef<void>;
66
74
  private readonly host;
67
75
  private readonly overlay;
76
+ private readonly responsiveConfig;
68
77
  private readonly vcr;
69
78
  private readonly scrollStrategies;
70
79
  private readonly destroyRef;
@@ -95,7 +104,7 @@ declare class WrDropdown {
95
104
  private focusItemAt;
96
105
  private readonly onOverlayMouseLeave;
97
106
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDropdown, never>;
98
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrDropdown, "[wrDropdown]", never, { "menu": { "alias": "wrDropdown"; "required": true; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
107
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrDropdown, "[wrDropdown]", never, { "menu": { "alias": "wrDropdown"; "required": true; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
99
108
  }
100
109
 
101
110
  /**
@@ -40,6 +40,11 @@ declare class WrLightbox {
40
40
  constructor();
41
41
  protected onClick(): void;
42
42
  protected onClose(): void;
43
+ private viewerStartY;
44
+ private viewerSwiping;
45
+ protected onViewerSwipeStart(event: TouchEvent): void;
46
+ protected onViewerSwipeMove(event: TouchEvent, viewer: HTMLElement): void;
47
+ protected onViewerSwipeEnd(event: TouchEvent, viewer: HTMLElement): void;
43
48
  protected onLoad(): void;
44
49
  private openOverlay;
45
50
  private closeOverlay;
@@ -68,6 +68,74 @@ declare class WrOverlayContainer extends OverlayContainer {
68
68
  */
69
69
  declare function provideWrOverlay(): EnvironmentProviders;
70
70
 
71
+ /**
72
+ * @license
73
+ *
74
+ * Use of this source code is governed by an MIT-style license that can be
75
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
76
+ */
77
+
78
+ /** Configuration for responsive (bottom-sheet) overlay presentation. */
79
+ interface WrResponsiveOverlaysConfig {
80
+ /**
81
+ * Viewport width (CSS px) at or below which overlays present as a
82
+ * bottom-sheet instead of a floating panel. @default 640
83
+ */
84
+ readonly breakpoint: number;
85
+ }
86
+ /**
87
+ * When set, overlay services (dialog, select, dropdown, …) present as a
88
+ * slide-up bottom-sheet on viewports at or below `breakpoint`. `null`
89
+ * (the default) keeps every overlay floating. Configure via
90
+ * {@link provideWrResponsiveOverlays}; override per call with a
91
+ * component's `responsive` option.
92
+ *
93
+ * @internal
94
+ */
95
+ declare const WR_RESPONSIVE_OVERLAYS: InjectionToken<WrResponsiveOverlaysConfig | null>;
96
+ /**
97
+ * Decide whether an overlay should present as a bottom-sheet for the
98
+ * current viewport.
99
+ *
100
+ * - `responsive === true` — sheet on small viewports regardless of config.
101
+ * - `responsive === false` — never a sheet.
102
+ * - `responsive === undefined` — follow the global config (sheet when
103
+ * {@link provideWrResponsiveOverlays} is configured).
104
+ *
105
+ * SSR-safe: returns `false` when there's no `window`.
106
+ *
107
+ * @internal
108
+ */
109
+ declare function wrPresentAsSheet(responsive: boolean | undefined, config: WrResponsiveOverlaysConfig | null): boolean;
110
+
111
+ /**
112
+ * @license
113
+ *
114
+ * Use of this source code is governed by an MIT-style license that can be
115
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
116
+ */
117
+
118
+ /**
119
+ * Opt every NGWR overlay into responsive presentation — on viewports at or
120
+ * below `breakpoint`, dialogs / selects / dropdowns and friends slide up as
121
+ * a full-width bottom-sheet instead of a floating panel. Built on the same
122
+ * overlay plumbing, so focus-trap, backdrop and scroll-blocking carry over.
123
+ *
124
+ * Individual components can still opt out (or in) per instance via their
125
+ * `responsive` option.
126
+ *
127
+ * @example
128
+ * ```ts
129
+ * bootstrapApplication(AppComponent, {
130
+ * providers: [provideWrOverlay(), provideWrResponsiveOverlays()],
131
+ * });
132
+ *
133
+ * // Custom breakpoint:
134
+ * provideWrResponsiveOverlays({ breakpoint: 768 });
135
+ * ```
136
+ */
137
+ declare function provideWrResponsiveOverlays(config?: Partial<WrResponsiveOverlaysConfig>): EnvironmentProviders;
138
+
71
139
  /**
72
140
  * @license
73
141
  *
@@ -107,4 +175,4 @@ declare const WR_OVERLAY: InjectionToken<Overlay>;
107
175
  */
108
176
  declare const WR_OVERLAY_CONTAINER: InjectionToken<OverlayContainer>;
109
177
 
110
- export { WR_OVERLAY, WR_OVERLAY_CONTAINER, WrOverlayContainer, provideWrOverlay };
178
+ export { WR_OVERLAY, WR_OVERLAY_CONTAINER, WR_RESPONSIVE_OVERLAYS, WrOverlayContainer, provideWrOverlay, provideWrResponsiveOverlays, wrPresentAsSheet };
@@ -28,8 +28,15 @@ declare class WrPageHeader {
28
28
  readonly title: _angular_core.InputSignal<string>;
29
29
  /** Secondary line below the title. */
30
30
  readonly subtitle: _angular_core.InputSignal<string>;
31
+ /**
32
+ * Stack the title and actions vertically when the header's own box is too
33
+ * narrow to sit them side by side (a container query on its own width, not
34
+ * the viewport — so it adapts inside a narrow column or split pane).
35
+ * @default false
36
+ */
37
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
31
38
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrPageHeader, never>;
32
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrPageHeader, "wr-page-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; }, {}, never, ["[wrPageHeaderBreadcrumbs]", "[wrPageHeaderActions]", "[wrPageHeaderExtra]"], true, never>;
39
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrPageHeader, "wr-page-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, {}, never, ["[wrPageHeaderBreadcrumbs]", "[wrPageHeaderActions]", "[wrPageHeaderExtra]"], true, never>;
33
40
  }
34
41
 
35
42
  export { WrPageHeader };
@@ -83,6 +83,12 @@ declare class WrPagination {
83
83
  readonly shape: _angular_core.InputSignal<WrPaginationShape>;
84
84
  /** Disable interaction. @default false */
85
85
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
86
+ /**
87
+ * Collapse to a compact `‹ page / total ›` pager when the control's own box
88
+ * is too narrow for the full numbered strip (a container query on its own
89
+ * width, not the viewport). @default false
90
+ */
91
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
86
92
  /** Localised text between range and total ("X–Y of Z"). Falls back to `pagination.of` then `'of'`. */
87
93
  readonly ofLabel: _angular_core.InputSignal<string | null>;
88
94
  /** Previous-page button aria-label. Falls back to `pagination.prev`. */
@@ -112,7 +118,7 @@ declare class WrPagination {
112
118
  protected goTo(page: number | typeof ELLIPSIS): void;
113
119
  protected onSizeChange(size: number): void;
114
120
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrPagination, never>;
115
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrPagination, "wr-pagination", never, { "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showSizeChanger": { "alias": "showSizeChanger"; "required": false; "isSignal": true; }; "showTotal": { "alias": "showTotal"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; }, { "currentPage": "currentPageChange"; "pageSize": "pageSizeChange"; }, never, never, true, never>;
121
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrPagination, "wr-pagination", never, { "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showSizeChanger": { "alias": "showSizeChanger"; "required": false; "isSignal": true; }; "showTotal": { "alias": "showTotal"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; }, { "currentPage": "currentPageChange"; "pageSize": "pageSizeChange"; }, never, never, true, never>;
116
122
  }
117
123
 
118
124
  export { WrPagination };
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef } from '@angular/core';
3
+ import { BooleanInput } from '@angular/cdk/coercion';
3
4
 
4
5
  /**
5
6
  * @license
@@ -37,12 +38,20 @@ declare class WrPopover {
37
38
  readonly showDelay: _angular_core.InputSignalWithTransform<number, unknown>;
38
39
  /** Tooltip only — delay before hiding, in ms. @default 60 */
39
40
  readonly hideDelay: _angular_core.InputSignalWithTransform<number, unknown>;
41
+ /**
42
+ * Popover mode only — present the panel as a full-width bottom-sheet on
43
+ * small viewports instead of an anchored panel. `undefined` follows the
44
+ * app-wide `provideWrResponsiveOverlays()` setting; `true`/`false`
45
+ * overrides it. Tooltips never become sheets. @default undefined
46
+ */
47
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean | undefined, BooleanInput>;
40
48
  /** Fires after the panel opens. */
41
49
  readonly opened: _angular_core.OutputEmitterRef<void>;
42
50
  /** Fires after the panel closes. */
43
51
  readonly closed: _angular_core.OutputEmitterRef<void>;
44
52
  private readonly host;
45
53
  private readonly overlay;
54
+ private readonly responsiveConfig;
46
55
  private readonly vcr;
47
56
  private readonly scrollStrategies;
48
57
  private readonly destroyRef;
@@ -83,7 +92,7 @@ declare class WrPopover {
83
92
  private scheduleHoverClose;
84
93
  private clearHoverClose;
85
94
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrPopover, never>;
86
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrPopover, "[wrPopover]", never, { "content": { "alias": "wrPopover"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "showDelay": { "alias": "showDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "hideDelay"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
95
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrPopover, "[wrPopover]", never, { "content": { "alias": "wrPopover"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "showDelay": { "alias": "showDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "hideDelay"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
87
96
  }
88
97
 
89
98
  export { WrPopover };
@@ -49,6 +49,7 @@ declare class WrRotatingText {
49
49
  protected readonly current: _angular_core.Signal<string>;
50
50
  protected readonly words: _angular_core.Signal<readonly Word[]>;
51
51
  private readonly host;
52
+ private readonly injector;
52
53
  private readonly destroyRef;
53
54
  private readonly isBrowser;
54
55
  private readonly platform;
@@ -1,6 +1,7 @@
1
1
  import * as ngwr_i18n from 'ngwr/i18n';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { InjectionToken, Signal, TemplateRef, ElementRef } from '@angular/core';
4
+ import { BooleanInput } from '@angular/cdk/coercion';
4
5
  import { ControlValueAccessor } from '@angular/forms';
5
6
  import { Observable } from 'rxjs';
6
7
 
@@ -154,6 +155,13 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
154
155
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
155
156
  /** Pill-shaped corners on the trigger. @default false */
156
157
  readonly rounded: _angular_core.InputSignalWithTransform<boolean, any>;
158
+ /**
159
+ * Present the option panel as a full-width bottom-sheet on small
160
+ * viewports instead of an anchored dropdown. `undefined` follows the
161
+ * app-wide `provideWrResponsiveOverlays()` setting; `true`/`false`
162
+ * overrides it. @default undefined
163
+ */
164
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean | undefined, BooleanInput>;
157
165
  /**
158
166
  * Behavior mode. `<wr-select>` is the unified combobox primitive —
159
167
  * pick the shape via `[mode]`:
@@ -309,6 +317,7 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
309
317
  protected readonly searchDisplay: _angular_core.Signal<string>;
310
318
  private readonly host;
311
319
  private readonly overlay;
320
+ private readonly responsiveConfig;
312
321
  private readonly vcr;
313
322
  private readonly scrollStrategies;
314
323
  private readonly destroyRef;
@@ -346,7 +355,7 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
346
355
  private openOverlay;
347
356
  private closeOverlay;
348
357
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSelect, never>;
349
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSelect, "wr-select", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "loader": { "alias": "loader"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "freeText": { "alias": "freeText"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "maxTagCount": { "alias": "maxTagCount"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
358
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSelect, "wr-select", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "loader": { "alias": "loader"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "freeText": { "alias": "freeText"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "maxTagCount": { "alias": "maxTagCount"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
350
359
  }
351
360
 
352
361
  /**
@@ -80,6 +80,13 @@ declare class WrStepper implements WrStepperContext {
80
80
  readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
81
81
  /** Lock steps after the latest completed one. @default false */
82
82
  readonly linear: _angular_core.InputSignalWithTransform<boolean, any>;
83
+ /**
84
+ * Drop a horizontal stepper to a vertical layout when its own box is too
85
+ * narrow for the row (a container query on its own width, not the
86
+ * viewport — so it adapts inside a narrow column or side panel). No effect
87
+ * when `orientation` is already `vertical`. @default false
88
+ */
89
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
83
90
  protected readonly steps: _angular_core.Signal<readonly WrStep[]>;
84
91
  protected readonly classes: _angular_core.Signal<string>;
85
92
  constructor();
@@ -92,7 +99,7 @@ declare class WrStepper implements WrStepperContext {
92
99
  next(): void;
93
100
  prev(): void;
94
101
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrStepper, never>;
95
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrStepper, "wr-stepper", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["steps"], ["*"], true, never>;
102
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrStepper, "wr-stepper", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["steps"], ["*"], true, never>;
96
103
  }
97
104
 
98
105
  export { WR_STEPPER, WrStep, WrStepper };
@@ -139,6 +139,12 @@ declare class WrTable {
139
139
  readonly items: _angular_core.InputSignal<readonly Record<string, unknown>[] | null | undefined>;
140
140
  /** Show the loading spinner overlay. @default false */
141
141
  readonly loading: _angular_core.InputSignalWithTransform<boolean, any>;
142
+ /**
143
+ * Collapse each row to a labelled card when the table's own box is too narrow
144
+ * for columns (a container query on its own width, not the viewport). Every
145
+ * cell shows its column title as a label. @default false
146
+ */
147
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
142
148
  /** Two-way bindable sort array. Order in array = application order. */
143
149
  readonly sort: _angular_core.ModelSignal<readonly WrTableSortState[]>;
144
150
  /** Fires whenever a column's filter selection changes. */
@@ -174,7 +180,7 @@ declare class WrTable {
174
180
  protected getValue(item: Record<string, unknown>, key: unknown): unknown;
175
181
  protected templateFor(key: unknown): TemplateRef<WrTableCellContext> | undefined;
176
182
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTable, never>;
177
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTable, "wr-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; "filterChange": "filterChange"; "page": "pageChange"; }, ["cellTemplates"], never, true, never>;
183
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTable, "wr-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; "filterChange": "filterChange"; "page": "pageChange"; }, ["cellTemplates"], never, true, never>;
178
184
  }
179
185
 
180
186
  /**
@@ -110,6 +110,12 @@ declare class WrTabs implements WrTabsContext {
110
110
  }): void;
111
111
  unregister(): void;
112
112
  protected readonly stripRef: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
113
+ /** Whether the strip is scrolled away from its start / end — drives the edge fades. */
114
+ protected readonly canScrollStart: _angular_core.WritableSignal<boolean>;
115
+ protected readonly canScrollEnd: _angular_core.WritableSignal<boolean>;
116
+ constructor();
117
+ /** Recompute which edges can scroll, from the strip's scroll metrics. @internal */
118
+ protected updateFades(): void;
113
119
  protected onTabClick(tab: WrTab): void;
114
120
  /** Header id for `aria-labelledby` on the panel. @internal */
115
121
  headerId(key: string): string;
@@ -23,8 +23,14 @@ import * as i0 from '@angular/core';
23
23
  * @see https://ngwr.dev/components/toolbar
24
24
  */
25
25
  declare class WrToolbar {
26
+ /**
27
+ * Stack the zones vertically when the toolbar's own box is too narrow to fit
28
+ * them in a row (a container query on its own width, not the viewport — so it
29
+ * adapts inside a narrow column or split pane). @default false
30
+ */
31
+ readonly responsive: i0.InputSignalWithTransform<boolean, any>;
26
32
  static ɵfac: i0.ɵɵFactoryDeclaration<WrToolbar, never>;
27
- static ɵcmp: i0.ɵɵComponentDeclaration<WrToolbar, "wr-toolbar", never, {}, {}, never, ["[wrToolbarStart]", "[wrToolbarCenter]", "[wrToolbarEnd]"], true, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<WrToolbar, "wr-toolbar", never, { "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, {}, never, ["[wrToolbarStart]", "[wrToolbarCenter]", "[wrToolbarEnd]"], true, never>;
28
34
  }
29
35
 
30
36
  export { WrToolbar };
@@ -16,7 +16,7 @@ import { InjectionToken } from '@angular/core';
16
16
  * Distinct from `Version` exported by `@angular/core`, which reports the
17
17
  * loaded Angular runtime version (e.g. `'21.2.13'`), not ngwr's.
18
18
  */
19
- declare const NGWR_VERSION = "7.1.0";
19
+ declare const NGWR_VERSION = "7.3.0";
20
20
 
21
21
  /**
22
22
  * @license