@ngneers/controls 0.0.1-next.1 → 0.0.1-next.2

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 (115) hide show
  1. package/fesm2022/ngneers-controls-api-ng.mjs +11 -18
  2. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-badge.mjs +160 -0
  4. package/fesm2022/ngneers-controls-badge.mjs.map +1 -0
  5. package/fesm2022/ngneers-controls-base.mjs +85 -8
  6. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  7. package/fesm2022/{ngneers-controls-calendar-time-CJT5AFlA.mjs → ngneers-controls-calendar-time-paM6WVpV.mjs} +2 -2
  8. package/fesm2022/{ngneers-controls-calendar-time-CJT5AFlA.mjs.map → ngneers-controls-calendar-time-paM6WVpV.mjs.map} +1 -1
  9. package/fesm2022/ngneers-controls-calendar.mjs +13 -6
  10. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-checkbox.mjs +3 -3
  12. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-color-picker.mjs +336 -0
  14. package/fesm2022/ngneers-controls-color-picker.mjs.map +1 -0
  15. package/fesm2022/ngneers-controls-default-icons.mjs +5 -0
  16. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -1
  17. package/fesm2022/ngneers-controls-directives.mjs +64 -7
  18. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  19. package/fesm2022/ngneers-controls-edit-inplace.mjs +15 -5
  20. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-errors.mjs +203 -148
  22. package/fesm2022/ngneers-controls-errors.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-filter.mjs +2 -2
  24. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-hint.mjs +18 -1
  26. package/fesm2022/ngneers-controls-hint.mjs.map +1 -1
  27. package/fesm2022/ngneers-controls-i18n-translations-de.mjs +14 -0
  28. package/fesm2022/ngneers-controls-i18n-translations-de.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-i18n-translations-en.mjs +16 -0
  30. package/fesm2022/ngneers-controls-i18n-translations-en.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-icon.mjs +23 -6
  32. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-input-field.mjs +18 -2
  34. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-input.mjs +49 -9
  36. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  37. package/fesm2022/ngneers-controls-list-box.mjs +2 -2
  38. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  39. package/fesm2022/ngneers-controls-mask-input.mjs +4 -1
  40. package/fesm2022/ngneers-controls-mask-input.mjs.map +1 -1
  41. package/fesm2022/ngneers-controls-number-input.mjs +4 -4
  42. package/fesm2022/ngneers-controls-number-input.mjs.map +1 -1
  43. package/fesm2022/ngneers-controls-otp.mjs +16 -4
  44. package/fesm2022/ngneers-controls-otp.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-paginator.mjs +36 -9
  46. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-radio.mjs +4 -4
  48. package/fesm2022/ngneers-controls-radio.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-rating.mjs +180 -0
  50. package/fesm2022/ngneers-controls-rating.mjs.map +1 -0
  51. package/fesm2022/ngneers-controls-scroll-shadow.mjs +33 -7
  52. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-scroller.mjs +4 -2
  54. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-select-button.mjs +2 -1
  56. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-select.mjs +24 -4
  58. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-slider.mjs +3 -3
  60. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-stepper.mjs +142 -0
  62. package/fesm2022/ngneers-controls-stepper.mjs.map +1 -0
  63. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  64. package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
  65. package/fesm2022/ngneers-controls-table.mjs +282 -15
  66. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-tabs.mjs +2 -2
  68. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-toggle-button.mjs +3 -3
  70. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  71. package/fesm2022/ngneers-controls-tooltip.mjs +16 -28
  72. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-tree.mjs +2 -2
  74. package/fesm2022/ngneers-controls-tree.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-utils.mjs +138 -1
  76. package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
  77. package/package.json +18 -2
  78. package/types/ngneers-controls-api-ng.d.ts +12 -9
  79. package/types/ngneers-controls-badge.d.ts +67 -0
  80. package/types/ngneers-controls-base.d.ts +61 -4
  81. package/types/ngneers-controls-breadcrumb.d.ts +14 -0
  82. package/types/ngneers-controls-calendar.d.ts +21 -6
  83. package/types/ngneers-controls-chip.d.ts +14 -0
  84. package/types/ngneers-controls-color-picker.d.ts +119 -0
  85. package/types/ngneers-controls-dialog.d.ts +14 -0
  86. package/types/ngneers-controls-directives.d.ts +31 -2
  87. package/types/ngneers-controls-drawer.d.ts +14 -0
  88. package/types/ngneers-controls-edit-inplace.d.ts +20 -0
  89. package/types/ngneers-controls-errors.d.ts +105 -16
  90. package/types/ngneers-controls-filter.d.ts +27 -13
  91. package/types/ngneers-controls-hint.d.ts +8 -1
  92. package/types/ngneers-controls-i18n-translations-de.d.ts +14 -0
  93. package/types/ngneers-controls-i18n-translations-en.d.ts +14 -0
  94. package/types/ngneers-controls-i18n.d.ts +14 -0
  95. package/types/ngneers-controls-icon.d.ts +2 -2
  96. package/types/ngneers-controls-input-field.d.ts +25 -2
  97. package/types/ngneers-controls-input.d.ts +35 -3
  98. package/types/ngneers-controls-list-box.d.ts +14 -0
  99. package/types/ngneers-controls-mask-input.d.ts +14 -0
  100. package/types/ngneers-controls-otp.d.ts +19 -0
  101. package/types/ngneers-controls-paginator.d.ts +31 -3
  102. package/types/ngneers-controls-rating.d.ts +69 -0
  103. package/types/ngneers-controls-scroll-shadow.d.ts +11 -2
  104. package/types/ngneers-controls-scroller.d.ts +3 -1
  105. package/types/ngneers-controls-select.d.ts +27 -3
  106. package/types/ngneers-controls-snackbar.d.ts +14 -0
  107. package/types/ngneers-controls-splitter.d.ts +14 -0
  108. package/types/ngneers-controls-state.d.ts +2 -2
  109. package/types/ngneers-controls-stepper.d.ts +68 -0
  110. package/types/ngneers-controls-table.d.ts +273 -169
  111. package/types/ngneers-controls-toast.d.ts +14 -0
  112. package/types/ngneers-controls-tooltip.d.ts +0 -1
  113. package/types/ngneers-controls-tree.d.ts +14 -0
  114. package/types/ngneers-controls-upload.d.ts +14 -0
  115. package/types/ngneers-controls-utils.d.ts +27 -2
@@ -179,6 +179,8 @@ declare class NgnOtp extends ValueControlBase<'otp', string | null> {
179
179
  selectedCount: string;
180
180
  page: string;
181
181
  resultCount: string;
182
+ retry: string;
183
+ loadError: string;
182
184
  };
183
185
  state: {
184
186
  loading: string;
@@ -187,6 +189,18 @@ declare class NgnOtp extends ValueControlBase<'otp', string | null> {
187
189
  error: string;
188
190
  cancelled: string;
189
191
  };
192
+ errors: {
193
+ pending: string;
194
+ required: string;
195
+ email: string;
196
+ minlength: string;
197
+ maxlength: string;
198
+ minLength: string;
199
+ maxLength: string;
200
+ min: string;
201
+ max: string;
202
+ pattern: string;
203
+ };
190
204
  }, "_">;
191
205
  /**
192
206
  * The number of character cells the code is split across.
@@ -229,6 +243,11 @@ declare class NgnOtp extends ValueControlBase<'otp', string | null> {
229
243
  protected onBeforeInput(index: number, event: InputEvent): void;
230
244
  protected onKeyDown(index: number, event: KeyboardEvent): void;
231
245
  protected onPaste(event: ClipboardEvent): void;
246
+ /**
247
+ * Mark touched once focus leaves the whole group — moving between cells keeps
248
+ * the host focused, so those intra-cell hops don't count as a blur.
249
+ */
250
+ protected onFocusOut(event: FocusEvent): void;
232
251
  /** Clears every cell (also serves a surrounding field's clear button). */
233
252
  clearValue(): boolean;
234
253
  private _setCell;
@@ -202,6 +202,8 @@ declare class NgnPaginator extends NgnBase<'paginator'> {
202
202
  selectedCount: string;
203
203
  page: string;
204
204
  resultCount: string;
205
+ retry: string;
206
+ loadError: string;
205
207
  };
206
208
  state: {
207
209
  loading: string;
@@ -210,15 +212,41 @@ declare class NgnPaginator extends NgnBase<'paginator'> {
210
212
  error: string;
211
213
  cancelled: string;
212
214
  };
215
+ errors: {
216
+ pending: string;
217
+ required: string;
218
+ email: string;
219
+ minlength: string;
220
+ maxlength: string;
221
+ minLength: string;
222
+ maxLength: string;
223
+ min: string;
224
+ max: string;
225
+ pattern: string;
226
+ };
213
227
  }, "_">;
214
228
  /**
215
- * Total number of items to paginate.
229
+ * Total number of items to paginate. Required in `'pages'` mode (drives the
230
+ * page count); ignored in `'compact'` mode.
216
231
  */
217
- readonly totalItems: _angular_core.InputSignal<number>;
232
+ readonly totalItems: _angular_core.InputSignal<number | undefined>;
218
233
  /**
219
234
  * Number of items per page. If not set, the first value from {@link possiblePageSizes} is used.
220
235
  */
221
236
  readonly pageSize: _angular_core.ModelSignal<number | undefined>;
237
+ /**
238
+ * Layout mode.
239
+ * - `'pages'`: full paginator with numbered page buttons (needs {@link totalItems}).
240
+ * - `'compact'`: prev/next buttons only, no page indicators, no total required.
241
+ * @default 'pages'
242
+ */
243
+ readonly mode: _angular_core.InputSignal<"pages" | "compact">;
244
+ /**
245
+ * `'compact'` mode only: whether a next page exists. Disables the "next" button
246
+ * when `false`. Bind to a lazy data source's `hasMore`.
247
+ * @default true
248
+ */
249
+ readonly hasNext: _angular_core.InputSignalWithTransform<boolean, unknown>;
222
250
  /**
223
251
  * Possible page sizes to choose from.
224
252
  * @default [5, 10, 25, 50]
@@ -251,7 +279,7 @@ declare class NgnPaginator extends NgnBase<'paginator'> {
251
279
  [klass: string]: string;
252
280
  };
253
281
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnPaginator, never>;
254
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnPaginator, "ngn-paginator", never, { "totalItems": { "alias": "totalItems"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "possiblePageSizes": { "alias": "possiblePageSizes"; "required": false; "isSignal": true; }; "fixedPageSize": { "alias": "fixedPageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; }, { "pageSize": "pageSizeChange"; "value": "value"; "page": "pageChange"; }, never, never, true, never>;
282
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnPaginator, "ngn-paginator", never, { "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "hasNext": { "alias": "hasNext"; "required": false; "isSignal": true; }; "possiblePageSizes": { "alias": "possiblePageSizes"; "required": false; "isSignal": true; }; "fixedPageSize": { "alias": "fixedPageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; }, { "pageSize": "pageSizeChange"; "value": "value"; "page": "pageChange"; }, never, never, true, never>;
255
283
  }
256
284
 
257
285
  export { NgnPaginator };
@@ -0,0 +1,69 @@
1
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
2
+ import * as _iconify_types from '@iconify/types';
3
+ import * as _angular_core from '@angular/core';
4
+ import { TemplateRef } from '@angular/core';
5
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
6
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
7
+ import { ValueControlBase } from '@ngneers/controls/base';
8
+
9
+ /** Context for a custom {@link NgnRating} symbol template. */
10
+ interface RatingIndicatorContext {
11
+ /** Fill ratio for this symbol, 0..1. */
12
+ $implicit: number;
13
+ /** Zero-based symbol index. */
14
+ index: number;
15
+ }
16
+ declare abstract class RatingTemplates extends ValueControlBase<'rating', number | null> {
17
+ private readonly _userIndicatorTemplate;
18
+ /**
19
+ * Custom template for a single symbol. Receives the fill ratio (`$implicit`,
20
+ * 0..1) and `index`. Can also be set with an `<ng-template #indicator>`.
21
+ * When set, it replaces the default full/empty icon rendering per symbol.
22
+ */
23
+ readonly indicatorTemplate: _angular_core.InputSignal<TemplateRef<RatingIndicatorContext> | null>;
24
+ protected readonly resolvedIndicatorTemplate: _angular_core.Signal<TemplateRef<RatingIndicatorContext> | null>;
25
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RatingTemplates, never>;
26
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RatingTemplates, never, never, { "indicatorTemplate": { "alias": "indicatorTemplate"; "required": false; "isSignal": true; }; }, {}, ["_userIndicatorTemplate"], never, true, never>;
27
+ }
28
+
29
+ /**
30
+ * @category control
31
+ */
32
+ declare class NgnRating extends RatingTemplates {
33
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"rating", ["root", "symbol", "full", "empty", "invalid", "readonly", "disabled"], readonly []>>;
34
+ private readonly _hover;
35
+ /** Number of symbols. @default 5 */
36
+ readonly count: _angular_core.InputSignal<number>;
37
+ /** The value increment; supports fractions (e.g. 0.5). @default 1 */
38
+ readonly step: _angular_core.InputSignal<number>;
39
+ /** The filled symbol icon. Falls back to a filled star ({@link https://tabler.io/icons}). */
40
+ readonly iconFull: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
41
+ /** The empty symbol icon. Falls back to an outline star. */
42
+ readonly iconEmpty: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
43
+ /** Clicking the current value clears the rating back to `null`. @default true */
44
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
45
+ /** Accessible value text; overrides the numeric readout. */
46
+ readonly valueText: _angular_core.InputSignal<string | undefined>;
47
+ /** Function producing accessible value text from the value. */
48
+ readonly valueTextFn: _angular_core.InputSignal<((value: number) => string) | undefined>;
49
+ /** The value the UI should paint: hover preview when hovering, else the model value. */
50
+ protected readonly displayValue: _angular_core.Signal<number>;
51
+ /** Zero-based indices for the symbols. */
52
+ protected readonly symbols: _angular_core.Signal<number[]>;
53
+ protected readonly valueTextValue: _angular_core.Signal<string | null>;
54
+ /** Fill ratio 0..1 for symbol `index` given the current display value (hover ?? value). */
55
+ protected fillRatio(index: number): number;
56
+ protected onKeyDown(event: KeyboardEvent): void;
57
+ /** Pointer moved over symbol `index` at fractional `offset` (0..1 within the symbol). */
58
+ protected onPointerMove(event: PointerEvent, index: number): void;
59
+ protected clearHover(): void;
60
+ protected onClick(event: PointerEvent, index: number): void;
61
+ /** Resolve the stepped value for a pointer position within symbol `index`. */
62
+ private valueAt;
63
+ private clamp;
64
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnRating, never>;
65
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnRating, "ngn-rating", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "iconFull": { "alias": "iconFull"; "required": false; "isSignal": true; }; "iconEmpty": { "alias": "iconEmpty"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "valueText": { "alias": "valueText"; "required": false; "isSignal": true; }; "valueTextFn": { "alias": "valueTextFn"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
66
+ }
67
+
68
+ export { NgnRating, RatingTemplates };
69
+ export type { RatingIndicatorContext };
@@ -3,9 +3,10 @@ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
3
3
  import * as _ngneers_controls_themes from '@ngneers/controls-themes';
4
4
 
5
5
  declare class NgnScrollShadow {
6
- protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"scrollShadow", ["root", "scrolled-start", "scrolled-end", "scrolled-top", "scrolled-bottom"], readonly []>>;
6
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"scrollShadow", ["root", "scrolled-start", "scrolled-end", "scrolled-top", "scrolled-bottom", "overlay", "surface", "unstyled"], readonly []>>;
7
7
  private readonly _el;
8
8
  private readonly _injector;
9
+ private readonly _renderer;
9
10
  /**
10
11
  * Which scroll axis to track and add shadow classes for.
11
12
  * @default 'horizontal'
@@ -17,9 +18,17 @@ declare class NgnScrollShadow {
17
18
  * @default undefined
18
19
  */
19
20
  readonly scrollShadowTarget: _angular_core.InputSignal<HTMLElement | undefined>;
21
+ /**
22
+ * Suppress the built-in edge-shadow overlay's styling (the theme hides it). The overlay element
23
+ * is still injected but rendered inert, so it never disturbs the scroll container's layout.
24
+ * Set this when the consumer paints its own shadows off the `scrolled-*` classes — e.g. the
25
+ * table anchors them to its sticky-column edges, reusing the shared `--ngn-scroll-shadow-color`.
26
+ * @default false
27
+ */
28
+ readonly unstyled: _angular_core.InputSignalWithTransform<boolean, unknown>;
20
29
  constructor();
21
30
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnScrollShadow, never>;
22
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgnScrollShadow, "[ngnScrollShadow]", never, { "ngnScrollShadow": { "alias": "ngnScrollShadow"; "required": false; "isSignal": true; }; "scrollShadowTarget": { "alias": "scrollShadowTarget"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
31
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgnScrollShadow, "[ngnScrollShadow]", never, { "ngnScrollShadow": { "alias": "ngnScrollShadow"; "required": false; "isSignal": true; }; "scrollShadowTarget": { "alias": "scrollShadowTarget"; "required": false; "isSignal": true; }; "unstyled": { "alias": "ngnScrollShadowUnstyled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
23
32
  }
24
33
 
25
34
  export { NgnScrollShadow };
@@ -48,6 +48,8 @@ declare class NgnScroller<T> extends ScrollerTemplates<T> {
48
48
  protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly []>>;
49
49
  private readonly _el;
50
50
  private readonly _scrollAmount;
51
+ /** Remaining vertical scroll distance to the bottom (px). Proxied from the host scroll directive. */
52
+ readonly distanceFromEnd: _angular_core.Signal<number>;
51
53
  /**
52
54
  * The items to be displayed in the scroller.
53
55
  * This is a required input and should be an array of items of type {@link T}.
@@ -131,7 +133,7 @@ declare class NgnScroller<T> extends ScrollerTemplates<T> {
131
133
  index: number;
132
134
  }): unknown;
133
135
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnScroller<any>, never>;
134
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnScroller<any>, "ngn-scroller, [ngn-scroller]", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "fieldId": { "alias": "fieldId"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "virtualPadding": { "alias": "virtualPadding"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "fieldSticky": { "alias": "fieldSticky"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.NgnScrollAmount; inputs: { "ngnScrollAmountContainer": "scrollContainer"; }; outputs: {}; }]>;
136
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnScroller<any>, "ngn-scroller, [ngn-scroller]", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "fieldId": { "alias": "fieldId"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "virtualPadding": { "alias": "virtualPadding"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "fieldSticky": { "alias": "fieldSticky"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.NgnScrollAmount; inputs: { "ngnScrollAmountContainer": "scrollContainer"; }; outputs: {}; }]>;
135
137
  }
136
138
 
137
139
  declare class NgnScrollerItem implements AfterViewInit {
@@ -109,7 +109,7 @@ type SelectFilterFn<T extends object> = FilterFn<NgnItem<T>>;
109
109
  */
110
110
  declare class NgnSelect<V, Editable extends boolean = false, Multiple extends boolean = false> extends SelectTemplates<V, Editable, Multiple> {
111
111
  readonly isFieldControl = true;
112
- protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter-icon", "list-box-empty"], readonly [{
112
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "empty", "placeholder", "input", "icon", "input-editable", "popover-content", "filter-icon", "list-box-empty"], readonly [{
113
113
  readonly class: "popover";
114
114
  readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
115
115
  }, {
@@ -123,7 +123,7 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
123
123
  }]>;
124
124
  }, {
125
125
  readonly class: "filter";
126
- readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
126
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "filled", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`, `kind-${string}`], readonly [{
127
127
  readonly class: "input";
128
128
  readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
129
129
  readonly projected: true;
@@ -285,6 +285,8 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
285
285
  selectedCount: string;
286
286
  page: string;
287
287
  resultCount: string;
288
+ retry: string;
289
+ loadError: string;
288
290
  };
289
291
  state: {
290
292
  loading: string;
@@ -293,6 +295,18 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
293
295
  error: string;
294
296
  cancelled: string;
295
297
  };
298
+ errors: {
299
+ pending: string;
300
+ required: string;
301
+ email: string;
302
+ minlength: string;
303
+ maxlength: string;
304
+ minLength: string;
305
+ maxLength: string;
306
+ min: string;
307
+ max: string;
308
+ pattern: string;
309
+ };
296
310
  }, "_">;
297
311
  private readonly _popover;
298
312
  private readonly _field;
@@ -377,7 +391,17 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
377
391
  * @default multiple()
378
392
  */
379
393
  readonly checkbox: _angular_core.InputSignal<boolean | undefined>;
394
+ /**
395
+ * Text shown in the trigger when no value is selected.
396
+ * @default undefined
397
+ */
398
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
380
399
  protected readonly maybeCallback: typeof maybeCallback;
400
+ /**
401
+ * Whether the control holds no value. Drives the empty status class and lets a
402
+ * wrapping {@link NgnInputField} float its label. See {@link value}.
403
+ */
404
+ readonly empty: Signal<boolean>;
381
405
  private readonly _listbox;
382
406
  private _userChangedEditableInput;
383
407
  protected get anchorElement(): HTMLElement;
@@ -405,7 +429,7 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
405
429
  protected onEditableChange(value: string | null): void;
406
430
  protected potentiallyBlurred(): void;
407
431
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnSelect<any, any, any>, never>;
408
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnSelect<any, any, any>, "ngn-select", never, { "popoverOptions": { "alias": "popoverOptions"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterText": { "alias": "filterText"; "required": false; "isSignal": true; }; "iconFilter": { "alias": "iconFilter"; "required": false; "isSignal": true; }; "iconDropdown": { "alias": "iconDropdown"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "editableAutoFilter": { "alias": "editableAutoFilter"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "scrollToSelectedItemOnOpen": { "alias": "scrollToSelectedItemOnOpen"; "required": false; "isSignal": true; }; "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "checkbox": { "alias": "checkbox"; "required": false; "isSignal": true; }; }, {}, ["_customEditableInput"], ["[ngnInput]"], true, never>;
432
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnSelect<any, any, any>, "ngn-select", never, { "popoverOptions": { "alias": "popoverOptions"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterText": { "alias": "filterText"; "required": false; "isSignal": true; }; "iconFilter": { "alias": "iconFilter"; "required": false; "isSignal": true; }; "iconDropdown": { "alias": "iconDropdown"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "editableAutoFilter": { "alias": "editableAutoFilter"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "scrollToSelectedItemOnOpen": { "alias": "scrollToSelectedItemOnOpen"; "required": false; "isSignal": true; }; "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "checkbox": { "alias": "checkbox"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, ["_customEditableInput"], ["[ngnInput]"], true, never>;
409
433
  }
410
434
 
411
435
  export { NgnSelect };
@@ -224,6 +224,8 @@ declare class NgnSnackbar extends SnackbarTemplates implements OnInit {
224
224
  selectedCount: string;
225
225
  page: string;
226
226
  resultCount: string;
227
+ retry: string;
228
+ loadError: string;
227
229
  };
228
230
  state: {
229
231
  loading: string;
@@ -232,6 +234,18 @@ declare class NgnSnackbar extends SnackbarTemplates implements OnInit {
232
234
  error: string;
233
235
  cancelled: string;
234
236
  };
237
+ errors: {
238
+ pending: string;
239
+ required: string;
240
+ email: string;
241
+ minlength: string;
242
+ maxlength: string;
243
+ minLength: string;
244
+ maxLength: string;
245
+ min: string;
246
+ max: string;
247
+ pattern: string;
248
+ };
235
249
  }, "_">;
236
250
  private readonly _host;
237
251
  /** Heading text shown at the top of the snackbar. Overridden by {@link templateHeader}. */
@@ -336,6 +336,8 @@ declare class NgnSplitter extends NgnBase<'splitter'> implements OnDestroy {
336
336
  selectedCount: string;
337
337
  page: string;
338
338
  resultCount: string;
339
+ retry: string;
340
+ loadError: string;
339
341
  };
340
342
  state: {
341
343
  loading: string;
@@ -344,6 +346,18 @@ declare class NgnSplitter extends NgnBase<'splitter'> implements OnDestroy {
344
346
  error: string;
345
347
  cancelled: string;
346
348
  };
349
+ errors: {
350
+ pending: string;
351
+ required: string;
352
+ email: string;
353
+ minlength: string;
354
+ maxlength: string;
355
+ minLength: string;
356
+ maxLength: string;
357
+ min: string;
358
+ max: string;
359
+ pattern: string;
360
+ };
347
361
  }, "_">;
348
362
  /**
349
363
  * The layout of the splitter.
@@ -75,7 +75,7 @@ declare class NgnState extends NgnBase<'state'> {
75
75
  readonly projected: true;
76
76
  }, {
77
77
  readonly class: "input-field";
78
- readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
78
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "filled", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`, `kind-${string}`], readonly [{
79
79
  readonly class: "input";
80
80
  readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
81
81
  readonly projected: true;
@@ -83,7 +83,7 @@ declare class NgnState extends NgnBase<'state'> {
83
83
  readonly projected: true;
84
84
  }]>>;
85
85
  protected readonly icon: _angular_core.Signal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
86
- protected readonly defaultIcon: _angular_core.Signal<"accordion-collapse" | "accordion-expand" | "breadcrumb-separator" | "breadcrumb-overflow" | "calendar-trigger" | "calendar-previous-month" | "calendar-next-month" | "checkbox-checked" | "checkbox-indeterminate" | "chip-remove" | "dialog-close" | "drawer-close" | "dropdown-toggle" | "edit-confirm" | "filter-active" | "filter-inactive" | "filter-remove" | "hint-info" | "hint-success" | "hint-warning" | "hint-error" | "input-clear" | "menu-submenu" | "paginator-previous" | "paginator-next" | "search" | "sort-neutral" | "sort-ascending" | "sort-descending" | "spin-decrement" | "spin-increment" | "table-group-toggle" | "tabs-scroll-left" | "tabs-scroll-right" | "toast-close" | "snackbar-close" | "upload-trigger" | "upload-done" | "upload-failed" | "upload-retry" | "upload-cancel" | "upload-remove" | undefined>;
86
+ protected readonly defaultIcon: _angular_core.Signal<"accordion-collapse" | "accordion-expand" | "breadcrumb-separator" | "breadcrumb-overflow" | "calendar-trigger" | "calendar-previous-month" | "calendar-next-month" | "checkbox-checked" | "checkbox-indeterminate" | "chip-remove" | "dialog-close" | "drawer-close" | "dropdown-toggle" | "edit-confirm" | "filter-active" | "filter-inactive" | "filter-remove" | "hint-info" | "hint-success" | "hint-warning" | "hint-error" | "input-clear" | "menu-submenu" | "paginator-previous" | "paginator-next" | "rating-full" | "rating-empty" | "search" | "sort-neutral" | "sort-ascending" | "sort-descending" | "spin-decrement" | "spin-increment" | "stepper-completed" | "table-group-toggle" | "tabs-scroll-left" | "tabs-scroll-right" | "toast-close" | "snackbar-close" | "upload-trigger" | "upload-done" | "upload-failed" | "upload-retry" | "upload-cancel" | "upload-remove" | undefined>;
87
87
  /**
88
88
  * Accessible label for the current state: the explicit {@link label} input,
89
89
  * else a localized default for the applied kind. `undefined` when the
@@ -0,0 +1,68 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
4
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
5
+ import { NgnBase } from '@ngneers/controls/base';
6
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
7
+ import * as _iconify_types from '@iconify/types';
8
+
9
+ /**
10
+ * A single step within an `ngn-stepper`. Declares the step's header metadata and
11
+ * projects its content via `<ng-template #content>`.
12
+ * @category control
13
+ */
14
+ declare class NgnStep extends NgnBase<'stepper'> {
15
+ protected readonly theme: null;
16
+ /** The step's header label. */
17
+ readonly label: _angular_core.InputSignal<string>;
18
+ /** Custom marker icon; when unset the 1-based step number is shown. */
19
+ readonly iconStep: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
20
+ /** Marks the step optional (shown as a hint; skippable in linear mode). @default false */
21
+ readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
+ /** Disables navigation to this step. @default false */
23
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
24
+ /** Renders the step's marker in an error state. @default false */
25
+ readonly error: _angular_core.InputSignalWithTransform<boolean, unknown>;
26
+ /**
27
+ * Whether the step is complete. The app sets this; in linear mode it gates
28
+ * forward navigation past this step. @default false
29
+ */
30
+ readonly completed: _angular_core.ModelSignal<boolean>;
31
+ readonly content: _angular_core.Signal<TemplateRef<unknown> | undefined>;
32
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnStep, never>;
33
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnStep, "ngn-step", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "iconStep": { "alias": "iconStep"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "completed": { "alias": "completed"; "required": false; "isSignal": true; }; }, { "completed": "completedChange"; }, ["content"], never, true, never>;
34
+ }
35
+
36
+ /**
37
+ * @category control
38
+ */
39
+ declare class NgnStepper extends NgnBase<'stepper'> {
40
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"stepper", ["root", "header", "step", "marker", "marker-index", "marker-icon", "connector", "label", "optional", "content", "active", "completed", "error", "disabled"], readonly []>>;
41
+ protected readonly steps: _angular_core.Signal<readonly NgnStep[]>;
42
+ /** The header buttons' roving items, in step order (one per step; connectors are plain spans). */
43
+ private readonly _rovingItems;
44
+ /** The active step index (zero-based). @default 0 */
45
+ readonly active: _angular_core.ModelSignal<number>;
46
+ /** Gate forward navigation on prior steps being `completed`. @default false */
47
+ readonly linear: _angular_core.InputSignalWithTransform<boolean, unknown>;
48
+ /** Lazily render step content (forwarded to `ngn-defer`). @default true */
49
+ readonly lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
50
+ /** Keep opened step content in the DOM to preserve state (forwarded to `ngn-defer`). @default true */
51
+ readonly cache: _angular_core.InputSignalWithTransform<boolean, unknown>;
52
+ /**
53
+ * Index of the first step that is not yet completed (the furthest reachable in linear mode).
54
+ * Optional steps are exempt — an incomplete optional step never blocks forward progress.
55
+ */
56
+ private readonly _firstIncomplete;
57
+ constructor();
58
+ /** Whether navigation to `index` is currently permitted. */
59
+ canGoTo(index: number): boolean;
60
+ goTo(index: number): void;
61
+ next(): void;
62
+ previous(): void;
63
+ protected onHeaderActivate(index: number): void;
64
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnStepper, never>;
65
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnStepper, "ngn-stepper", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "cache": { "alias": "cache"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["steps"], never, true, never>;
66
+ }
67
+
68
+ export { NgnStep, NgnStepper };