yukit-web 0.0.24 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  import * as _angular_core from '@angular/core';
3
- import { ModelSignal, Type, Provider, InputSignal, InputSignalWithTransform, TemplateRef, OnInit, Signal } from '@angular/core';
3
+ import { ModelSignal, Type, Provider, InputSignal, InputSignalWithTransform, TemplateRef, WritableSignal, Signal, OnInit } from '@angular/core';
4
4
  import { ControlValueAccessor } from '@angular/forms';
5
+ import { SortingState, PaginationState, columnFilteringFeature, columnVisibilityFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, RowData, ColumnDef, ColumnFiltersState, ColumnVisibilityState, RowSelectionState } from '@tanstack/table-core';
5
6
  import { ButtonVariants } from 'yukit-web/helm/button';
6
7
  import * as i1 from 'yukit-web/helm/badge';
7
8
  import * as yukit_web from 'yukit-web';
@@ -13,7 +14,6 @@ import * as i1$3 from 'yukit-web/helm/empty';
13
14
  import * as i1$4 from 'yukit-web/helm/context-menu';
14
15
  import * as i2 from 'yukit-web/helm/dropdown-menu';
15
16
  import * as i1$5 from 'yukit-web/helm/table';
16
- import { columnFilteringFeature, columnVisibilityFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, RowData, ColumnDef, ColumnFiltersState, ColumnVisibilityState, PaginationState, RowSelectionState, SortingState } from '@tanstack/table-core';
17
17
  import * as class_variance_authority_types from 'class-variance-authority/types';
18
18
  import * as _tanstack_angular_table from '@tanstack/angular-table';
19
19
  import * as i1$6 from 'yukit-web/helm/item';
@@ -101,24 +101,55 @@ declare function provideValueAccessor(component: Type<unknown>): Provider;
101
101
  * and `control.disable()` go through). Letting either one own a single signal means the last
102
102
  * writer wins and the other is silently ignored — the classic bug in hand-rolled accessors.
103
103
  *
104
- * They're kept as two separate signals and OR'd together in `disabledState`: disabled by *either*
104
+ * They're kept as two separate signals and OR'd together in `_disabled`: disabled by *either*
105
105
  * source means disabled. That's the only combination that never drops a caller's intent.
106
106
  */
107
107
  declare abstract class YuwValueAccessorBase<T> implements ControlValueAccessor {
108
+ private readonly _host;
109
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
110
+ protected abstract readonly _focusSelectors: readonly string[];
108
111
  protected readonly _formDisabled: _angular_core.WritableSignal<boolean>;
109
112
  private _onChange;
110
113
  private _onTouched;
111
114
  abstract readonly value: ModelSignal<T>;
115
+ protected readonly _disabled: _angular_core.Signal<boolean>;
116
+ blur(): void;
117
+ focus(options?: FocusOptions): void;
112
118
  registerOnChange(fn: (value: T) => void): void;
113
119
  registerOnTouched(fn: () => void): void;
114
120
  setDisabledState(isDisabled: boolean): void;
115
121
  writeValue(value: T | null | undefined): void;
116
122
  protected _commit(next: T): void;
117
123
  protected abstract _emptyValue(): T;
118
- protected _isDisabled(ownDisabled: boolean): boolean;
119
124
  protected _onBlur(): void;
125
+ private _focusTarget;
120
126
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwValueAccessorBase<any>, never>;
121
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwValueAccessorBase<any>, never, never, {}, {}, never, never, true, never>;
127
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwValueAccessorBase<any>, never, never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
128
+ }
129
+
130
+ /**
131
+ * Shared surface of every string-valued field that renders helper and error text under itself
132
+ * (`yuw-input-otp` and, through `YuwTextFieldBase`, the four text controls).
133
+ *
134
+ * Holds only what all of them honor: the value, the control `id` with its generated fallback, the
135
+ * invalid flag, the feedback texts and the `class` passthrough. Anything a subset can't support —
136
+ * `placeholder`, `readonly`, `required`, `name`, `autocomplete`, which `brn-input-otp` doesn't
137
+ * forward to its native input — lives one level down, per the Liskov rule in `AGENTS.md`.
138
+ *
139
+ * Subclasses provide `_autoId`, the fallback `id` used when the consumer sets no `inputId`.
140
+ */
141
+ declare abstract class YuwFieldBase extends YuwValueAccessorBase<string> {
142
+ readonly errorText: _angular_core.InputSignal<string | undefined>;
143
+ readonly helperText: _angular_core.InputSignal<string | undefined>;
144
+ readonly inputId: _angular_core.InputSignal<string | undefined>;
145
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
146
+ readonly userClass: _angular_core.InputSignal<string>;
147
+ readonly value: _angular_core.ModelSignal<string>;
148
+ protected abstract readonly _autoId: string;
149
+ protected readonly _inputId: _angular_core.Signal<string>;
150
+ protected _emptyValue(): string;
151
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwFieldBase, never>;
152
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwFieldBase, never, never, { "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
122
153
  }
123
154
 
124
155
  type YuwInputTypeDto = 'text' | 'email' | 'tel' | 'url' | 'number';
@@ -138,6 +169,198 @@ interface YuwTextFieldContract {
138
169
  readonly autocomplete: InputSignal<string | undefined>;
139
170
  }
140
171
 
172
+ /**
173
+ * Shared surface of the single-value text controls (`yuw-input`, `yuw-password-input`,
174
+ * `yuw-textarea`, `yuw-search-input`).
175
+ *
176
+ * Adds to `YuwFieldBase` the native text-input attributes all four forward, plus `committed`, so
177
+ * the controls can't drift apart — the Liskov rule in `AGENTS.md`: same-role components share one
178
+ * input contract. Anything only some of them honor (`maxlength`, `size`, `enterPressed`, …) stays
179
+ * on the component, never here.
180
+ */
181
+ declare abstract class YuwTextFieldBase extends YuwFieldBase implements YuwTextFieldContract {
182
+ readonly autocomplete: _angular_core.InputSignal<string | undefined>;
183
+ readonly name: _angular_core.InputSignal<string | undefined>;
184
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
185
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
186
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
187
+ readonly committed: _angular_core.OutputEmitterRef<string>;
188
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwTextFieldBase, never>;
189
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwTextFieldBase, never, never, { "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, { "committed": "committed"; }, never, never, true, never>;
190
+ }
191
+
192
+ /**
193
+ * A single entry in `<yuw-combobox>`'s `options` input.
194
+ *
195
+ * `label` is data the parent supplies, not a component-owned default — the same rule
196
+ * `YuwSelectOptionDto` and `YuwBreadcrumbItemDto` follow. It doubles as the text the search
197
+ * filters on and the text shown in the trigger/chip once selected, so it must be the
198
+ * already-translated string.
199
+ *
200
+ * `data` carries whatever the consumer needs when rendering a custom item template
201
+ * (`*yuwComboboxItem`) — an avatar URL, a count, a nested entity. The component itself never
202
+ * reads it.
203
+ */
204
+ interface YuwComboboxOptionDto<TData = unknown> {
205
+ value: string;
206
+ label: string;
207
+ disabled?: boolean;
208
+ data?: TData;
209
+ }
210
+
211
+ /** The `let-` context of a `*yuwComboboxItem` template. `$implicit` is the option itself, so
212
+ * `let-option` works; `selected` is passed alongside because an item that renders its own
213
+ * markup loses the default check glyph and often needs to show that state some other way. */
214
+ interface YuwComboboxItemContext<TData = unknown> {
215
+ $implicit: YuwComboboxOptionDto<TData>;
216
+ option: YuwComboboxOptionDto<TData>;
217
+ selected: boolean;
218
+ }
219
+ /**
220
+ * Structural directive for custom option item templates in `yuw-combobox`.
221
+ *
222
+ * Exposes the option object (`let-option`) and selection state (`let-selected="selected"`).
223
+ *
224
+ * Usage:
225
+ * ```html
226
+ * <yuw-combobox [options]="users" [(value)]="userId">
227
+ * <ng-template yuwComboboxItem let-option let-selected="selected">
228
+ * <img [src]="option.data.avatar" /> {{ option.label }}
229
+ * </ng-template>
230
+ * </yuw-combobox>
231
+ * ```
232
+ */
233
+ declare class YuwComboboxItemDirective<TData = unknown> {
234
+ readonly templateRef: TemplateRef<YuwComboboxItemContext<TData>>;
235
+ readonly typeOf: _angular_core.InputSignal<YuwComboboxOptionDto<TData>[] | undefined>;
236
+ static ngTemplateContextGuard<TData>(_directive: YuwComboboxItemDirective<TData>, _context: unknown): _context is YuwComboboxItemContext<TData>;
237
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwComboboxItemDirective<any>, never>;
238
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwComboboxItemDirective<any>, "[yuwComboboxItem]", never, { "typeOf": { "alias": "yuwComboboxItemTypeOf"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
239
+ }
240
+
241
+ type YuwComboboxValue = string | string[] | undefined;
242
+ /**
243
+ * Searchable select combobox component supporting single or multiple selections, search filtering, and custom option rendering.
244
+ *
245
+ * Inputs / Models:
246
+ * - `options`: Required array of option items (`YuwComboboxOptionDto<TData>[]`).
247
+ * - `value`: Two-way selected value(s) (`string` for single mode, `string[]` for multiple mode).
248
+ * Emits `valueChange` on every selection change.
249
+ * - `size`: Control height (`'default'` 40px, `'xs'` 28px, `'sm'` 36px, `'lg'` 44px), matching the
250
+ * `<yuw-button>` size of the same name. Applies to whichever control shape renders; the popover
251
+ * panel and its inner search field keep their own compact sizing.
252
+ * - `multiple`: Enables multi-selection mode with removable tags/chips.
253
+ * - `disabled`: Disables combobox interaction.
254
+ * - `placeholder`: Placeholder text when no option is selected.
255
+ * - `searchPlaceholder`: Placeholder text inside the search field popover.
256
+ * - `emptyText`: Message text displayed when search yields no matching options.
257
+ * - `search`: Two-way search filter query string.
258
+ * - `triggerAriaLabel`: Required accessible name for the icon-only popover trigger (the chevron
259
+ * button). User-facing text — the consuming app is responsible for providing it translated.
260
+ * Only rendered by the single-select input shape, but required in every mode so switching
261
+ * modes never silently drops the label.
262
+ * - `clearAriaLabel`: When set, the clear button is shown on the single-selection control and
263
+ * this is its accessible name; when absent, there is no clear button. One input, one source of
264
+ * truth. User-facing text — the consuming app is responsible for providing it translated.
265
+ * - `inputId`: HTML `id` for the focusable control (the search input, or the trigger button when
266
+ * `readonlyTrigger` is set), enabling external `<label for="...">` association.
267
+ * - `readonlyTrigger`: Renders control as a button showing selected label, placing search input inside popover.
268
+ * - `invalid`: Forces invalid styling.
269
+ *
270
+ * `multiple` takes precedence over `readonlyTrigger`: when both are set the multi-select
271
+ * chips shape renders and `readonlyTrigger` is ignored.
272
+ *
273
+ * Usage:
274
+ * ```html
275
+ * <yuw-combobox [options]="userOptions" [(value)]="selectedUser" placeholder="Select user..."
276
+ * triggerAriaLabel="Toggle options" clearAriaLabel="Clear selection" />
277
+ * <yuw-combobox [options]="categoryOptions" [(value)]="selectedCategories" multiple
278
+ * triggerAriaLabel="Toggle options" />
279
+ * ```
280
+ */
281
+ declare class YuwComboboxComponent<TData = unknown> extends YuwValueAccessorBase<YuwComboboxValue> {
282
+ private readonly _panel;
283
+ protected readonly itemTemplate: _angular_core.Signal<YuwComboboxItemDirective<TData> | undefined>;
284
+ readonly clearAriaLabel: _angular_core.InputSignal<string | undefined>;
285
+ readonly emptyText: _angular_core.InputSignal<string | undefined>;
286
+ readonly inputId: _angular_core.InputSignal<string | undefined>;
287
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
288
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
289
+ readonly options: _angular_core.InputSignal<YuwComboboxOptionDto<TData>[]>;
290
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
291
+ readonly readonlyTrigger: _angular_core.InputSignalWithTransform<boolean, unknown>;
292
+ readonly search: _angular_core.ModelSignal<string>;
293
+ readonly searchPlaceholder: _angular_core.InputSignal<string | undefined>;
294
+ readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
295
+ readonly triggerAriaLabel: _angular_core.InputSignal<string>;
296
+ readonly value: _angular_core.ModelSignal<YuwComboboxValue>;
297
+ protected readonly _focusSelectors: string[];
298
+ private readonly _generatedId;
299
+ protected readonly _itemToString: (value: string) => string;
300
+ protected readonly _chipsClass: _angular_core.Signal<string>;
301
+ protected readonly _clearVisible: _angular_core.Signal<boolean>;
302
+ protected readonly _controlId: _angular_core.Signal<string>;
303
+ protected readonly _fieldClass: _angular_core.Signal<string>;
304
+ private readonly _labelByValue;
305
+ protected readonly _multipleValue: _angular_core.Signal<string[]>;
306
+ protected readonly _selectedChips: _angular_core.Signal<{
307
+ value: string;
308
+ label: string;
309
+ }[]>;
310
+ protected readonly _selectedValues: _angular_core.Signal<Set<string>>;
311
+ protected readonly _singleValue: _angular_core.Signal<string | undefined>;
312
+ protected readonly _triggerClass: _angular_core.Signal<string>;
313
+ protected _emptyValue(): YuwComboboxValue;
314
+ protected _onFocusOut(event: FocusEvent): void;
315
+ protected onValueChange(next: YuwComboboxValue | null): void;
316
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwComboboxComponent<any>, never>;
317
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwComboboxComponent<any>, "yuw-combobox", never, { "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonlyTrigger": { "alias": "readonlyTrigger"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "triggerAriaLabel": { "alias": "triggerAriaLabel"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "search": "searchChange"; "value": "valueChange"; }, ["itemTemplate"], never, true, never>;
318
+ }
319
+
320
+ interface YuwPageSort {
321
+ field: string;
322
+ direction: 'asc' | 'desc';
323
+ }
324
+ /** Question a paged list asks its data source; `Filters` is the consumer's own filter shape. */
325
+ interface YuwPageQuery<Filters> {
326
+ offset: number;
327
+ limit: number;
328
+ search: string;
329
+ filters: Filters;
330
+ sort?: YuwPageSort;
331
+ }
332
+ interface YuwPageRange {
333
+ start: number;
334
+ end: number;
335
+ total: number;
336
+ }
337
+ interface YuwPagedListOptions<Filters> {
338
+ filters: Signal<Filters>;
339
+ total: Signal<number>;
340
+ load: (query: YuwPageQuery<Filters>) => void;
341
+ pageSize?: number;
342
+ }
343
+ /** `page` and `goToPage` count from 1, like `yuw-pagination`; `pagination` from 0, like `yuw-datatable`. */
344
+ interface YuwPagedList<Filters> {
345
+ readonly searchTerm: WritableSignal<string>;
346
+ readonly pageSize: WritableSignal<YuwComboboxValue>;
347
+ readonly pageSizeOptions: YuwComboboxOptionDto[];
348
+ readonly sorting: WritableSignal<SortingState>;
349
+ readonly pagination: WritableSignal<PaginationState>;
350
+ readonly query: Signal<YuwPageQuery<Filters>>;
351
+ readonly page: Signal<number>;
352
+ readonly totalPages: Signal<number>;
353
+ readonly range: Signal<YuwPageRange>;
354
+ goToPage(page: number): void;
355
+ }
356
+
357
+ /**
358
+ * State of a list paged at the source and the query derived from it. Changing search, filters,
359
+ * sorting or size returns to the first page within the same query; a total below the current page
360
+ * steps back to the last existing one. Must be created in an injection context.
361
+ */
362
+ declare function createPagedList<Filters>(options: YuwPagedListOptions<Filters>): YuwPagedList<Filters>;
363
+
141
364
  type YuwColorDto = 'primary' | 'secondary' | 'destructive' | 'success' | 'warning' | 'info' | 'muted' | 'violet';
142
365
 
143
366
  /**
@@ -191,12 +414,12 @@ declare class YuwButtonComponent {
191
414
  readonly transparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
192
415
  readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
193
416
  readonly userClass: _angular_core.InputSignal<string>;
194
- readonly variant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
417
+ readonly variant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
195
418
  readonly yuwDropdownMenuTrigger: _angular_core.InputSignal<TemplateRef<unknown> | undefined>;
196
419
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
197
420
  protected readonly _animationDisabled: _angular_core.Signal<boolean>;
198
421
  protected readonly _btnClass: _angular_core.Signal<string>;
199
- protected readonly _effectiveVariant: _angular_core.Signal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
422
+ protected readonly _effectiveVariant: _angular_core.Signal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
200
423
  protected onClick(event: MouseEvent): void;
201
424
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwButtonComponent, never>;
202
425
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwButtonComponent, "yuw-button", never, { "animationDisabled": { "alias": "animationDisabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "transparent": { "alias": "transparent"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "yuwDropdownMenuTrigger": { "alias": "yuwDropdownMenuTrigger"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*", "*"], true, never>;
@@ -309,14 +532,14 @@ declare class YuwButtonGroupComponent {
309
532
  readonly color: _angular_core.InputSignal<YuwColorDto>;
310
533
  readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
311
534
  readonly selectedColor: _angular_core.InputSignal<YuwColorDto | undefined>;
312
- readonly selectedVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
535
+ readonly selectedVariant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
313
536
  readonly size: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
314
- readonly variant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
537
+ readonly variant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
315
538
  readonly buttonClicked: _angular_core.OutputEmitterRef<YuwButtonGroupClickDto>;
316
539
  protected readonly _resolved: _angular_core.Signal<{
317
540
  interactive: boolean;
318
541
  template: _angular_core.TemplateRef<unknown> | undefined;
319
- variant: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined;
542
+ variant: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
320
543
  size: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
321
544
  color: YuwColorDto;
322
545
  transparent: boolean;
@@ -380,7 +603,7 @@ declare class YuwBadgeComponent {
380
603
  readonly color: _angular_core.InputSignal<YuwColorDto>;
381
604
  readonly dot: _angular_core.InputSignalWithTransform<boolean, unknown>;
382
605
  readonly removeLabel: _angular_core.InputSignal<string | undefined>;
383
- readonly variant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
606
+ readonly variant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
384
607
  readonly removed: _angular_core.OutputEmitterRef<void>;
385
608
  protected readonly dotClass: _angular_core.Signal<"" | "size-4 p-0">;
386
609
  protected readonly removeClass: _angular_core.Signal<string>;
@@ -419,6 +642,33 @@ declare class YuwBreadcrumbComponent {
419
642
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwBreadcrumbComponent, "yuw-breadcrumb", never, { "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
420
643
  }
421
644
 
645
+ /**
646
+ * A crumb declared in a route's `data.breadcrumb`. `labelKey` is an opaque key the consumer
647
+ * resolves; `label` is final text and wins over it. A crumb without `href` is plain text.
648
+ */
649
+ interface YuwBreadcrumbCrumb {
650
+ readonly labelKey?: string;
651
+ readonly label?: string;
652
+ readonly href?: string;
653
+ }
654
+ /** Each route declares its full trail, so a page's breadcrumb reads in one place. */
655
+ interface YuwBreadcrumbRouteData {
656
+ readonly breadcrumb: readonly YuwBreadcrumbCrumb[];
657
+ }
658
+
659
+ /**
660
+ * Deepest `data.breadcrumb` along the primary outlet, so a child route overrides its parent. The
661
+ * walk starts at `router.routerState.root` because, as a root service, this is built by whichever
662
+ * routed component asks first, whose own route is not the tree's root.
663
+ */
664
+ declare class YuwBreadcrumbTrailService {
665
+ private readonly router;
666
+ readonly crumbs: _angular_core.Signal<readonly YuwBreadcrumbCrumb[]>;
667
+ private resolveDeepestTrail;
668
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwBreadcrumbTrailService, never>;
669
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<YuwBreadcrumbTrailService>;
670
+ }
671
+
422
672
  /**
423
673
  * Sizes accepted by `<yuw-pagination>`'s `size` input. Mirrors the helm button sizes so the
424
674
  * public API doesn't leak the helm's `ButtonVariants` type.
@@ -466,133 +716,60 @@ type YuwPaginationRangeItem = number | 'ellipsis';
466
716
  */
467
717
  declare function getPaginationRange(page: number, totalPages: number): YuwPaginationRangeItem[];
468
718
 
469
- /**
470
- * A single entry in `<yuw-combobox>`'s `options` input.
471
- *
472
- * `label` is data the parent supplies, not a component-owned default — the same rule
473
- * `YuwSelectOptionDto` and `YuwBreadcrumbItemDto` follow. It doubles as the text the search
474
- * filters on and the text shown in the trigger/chip once selected, so it must be the
475
- * already-translated string.
476
- *
477
- * `data` carries whatever the consumer needs when rendering a custom item template
478
- * (`*yuwComboboxItem`) — an avatar URL, a count, a nested entity. The component itself never
479
- * reads it.
480
- */
481
- interface YuwComboboxOptionDto<TData = unknown> {
482
- value: string;
483
- label: string;
484
- disabled?: boolean;
485
- data?: TData;
719
+ /** Text of the page size selector and its range message. */
720
+ interface YuwPageSizeLabels {
721
+ readonly label: string;
722
+ readonly empty: string;
723
+ readonly range: (range: YuwPageRange) => string;
724
+ }
725
+ /** Text of the standalone pagination footer. */
726
+ interface YuwListPaginationLabels {
727
+ readonly pageSize: YuwPageSizeLabels;
728
+ readonly ariaLabel: string;
729
+ readonly previous: string;
730
+ readonly next: string;
731
+ readonly ellipsis: string;
486
732
  }
487
733
 
488
- /** The `let-` context of a `*yuwComboboxItem` template. `$implicit` is the option itself, so
489
- * `let-option` works; `selected` is passed alongside because an item that renders its own
490
- * markup loses the default check glyph and often needs to show that state some other way. */
491
- interface YuwComboboxItemContext<TData = unknown> {
492
- $implicit: YuwComboboxOptionDto<TData>;
493
- option: YuwComboboxOptionDto<TData>;
494
- selected: boolean;
734
+ /** Page size selector and range message of a `YuwPagedList`; in a datatable it takes the pagination slot. */
735
+ declare class YuwPageSizeComponent {
736
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
737
+ readonly labels: _angular_core.InputSignal<YuwPageSizeLabels>;
738
+ readonly list: _angular_core.InputSignal<YuwPagedList<unknown>>;
739
+ protected readonly message: _angular_core.Signal<string>;
740
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwPageSizeComponent, never>;
741
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwPageSizeComponent, "yuw-page-size", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": true; "isSignal": true; }; "list": { "alias": "list"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
495
742
  }
496
- /**
497
- * Structural directive for custom option item templates in `yuw-combobox`.
498
- *
499
- * Exposes the option object (`let-option`) and selection state (`let-selected="selected"`).
500
- *
501
- * Usage:
502
- * ```html
503
- * <yuw-combobox [options]="users" [(value)]="userId">
504
- * <ng-template yuwComboboxItem let-option let-selected="selected">
505
- * <img [src]="option.data.avatar" /> {{ option.label }}
506
- * </ng-template>
507
- * </yuw-combobox>
508
- * ```
509
- */
510
- declare class YuwComboboxItemDirective<TData = unknown> {
511
- readonly templateRef: TemplateRef<YuwComboboxItemContext<TData>>;
512
- readonly typeOf: _angular_core.InputSignal<YuwComboboxOptionDto<TData>[] | undefined>;
513
- static ngTemplateContextGuard<TData>(_directive: YuwComboboxItemDirective<TData>, _context: unknown): _context is YuwComboboxItemContext<TData>;
514
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwComboboxItemDirective<any>, never>;
515
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwComboboxItemDirective<any>, "[yuwComboboxItem]", never, { "typeOf": { "alias": "yuwComboboxItemTypeOf"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
743
+
744
+ /** Pagination footer for lists without a datatable. A disabled `fieldset` blocks its buttons. */
745
+ declare class YuwListPaginationComponent {
746
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
747
+ readonly labels: _angular_core.InputSignal<YuwListPaginationLabels>;
748
+ readonly list: _angular_core.InputSignal<YuwPagedList<unknown>>;
749
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwListPaginationComponent, never>;
750
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwListPaginationComponent, "yuw-list-pagination", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": true; "isSignal": true; }; "list": { "alias": "list"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
516
751
  }
517
752
 
518
- type YuwComboboxValue = string | string[] | undefined;
519
753
  /**
520
- * Searchable select combobox component supporting single or multiple selections, search filtering, and custom option rendering.
521
- *
522
- * Inputs / Models:
523
- * - `options`: Required array of option items (`YuwComboboxOptionDto<TData>[]`).
524
- * - `value`: Two-way selected value(s) (`string` for single mode, `string[]` for multiple mode).
525
- * Emits `valueChange` on every selection change.
526
- * - `size`: Control height (`'default'` 40px, `'xs'` 28px, `'sm'` 36px, `'lg'` 44px), matching the
527
- * `<yuw-button>` size of the same name. Applies to whichever control shape renders; the popover
528
- * panel and its inner search field keep their own compact sizing.
529
- * - `multiple`: Enables multi-selection mode with removable tags/chips.
530
- * - `disabled`: Disables combobox interaction.
531
- * - `placeholder`: Placeholder text when no option is selected.
532
- * - `searchPlaceholder`: Placeholder text inside the search field popover.
533
- * - `emptyText`: Message text displayed when search yields no matching options.
534
- * - `search`: Two-way search filter query string.
535
- * - `triggerAriaLabel`: Required accessible name for the icon-only popover trigger (the chevron
536
- * button). User-facing text — the consuming app is responsible for providing it translated.
537
- * Only rendered by the single-select input shape, but required in every mode so switching
538
- * modes never silently drops the label.
539
- * - `clearAriaLabel`: When set, the clear button is shown on the single-selection control and
540
- * this is its accessible name; when absent, there is no clear button. One input, one source of
541
- * truth. User-facing text — the consuming app is responsible for providing it translated.
542
- * - `inputId`: HTML `id` for the focusable control (the search input, or the trigger button when
543
- * `readonlyTrigger` is set), enabling external `<label for="...">` association.
544
- * - `readonlyTrigger`: Renders control as a button showing selected label, placing search input inside popover.
545
- * - `invalid`: Forces invalid styling.
546
- *
547
- * `multiple` takes precedence over `readonlyTrigger`: when both are set the multi-select
548
- * chips shape renders and `readonlyTrigger` is ignored.
549
- *
550
- * Usage:
551
- * ```html
552
- * <yuw-combobox [options]="userOptions" [(value)]="selectedUser" placeholder="Select user..."
553
- * triggerAriaLabel="Toggle options" clearAriaLabel="Clear selection" />
554
- * <yuw-combobox [options]="categoryOptions" [(value)]="selectedCategories" multiple
555
- * triggerAriaLabel="Toggle options" />
556
- * ```
754
+ * Page title, optional description and up to two actions, each rendered when its label is set.
755
+ * On mobile the primary action shows only its icon, or `primaryMobileLabel`. Icons are `@ng-icons`
756
+ * names; the consumer registers any beyond `lucidePlus` with `provideIcons`.
557
757
  */
558
- declare class YuwComboboxComponent<TData = unknown> extends YuwValueAccessorBase<YuwComboboxValue> {
559
- private readonly _panel;
560
- protected readonly itemTemplate: _angular_core.Signal<YuwComboboxItemDirective<TData> | undefined>;
561
- readonly clearAriaLabel: _angular_core.InputSignal<string | undefined>;
562
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
563
- readonly emptyText: _angular_core.InputSignal<string | undefined>;
564
- readonly inputId: _angular_core.InputSignal<string | undefined>;
565
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
566
- readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
567
- readonly options: _angular_core.InputSignal<YuwComboboxOptionDto<TData>[]>;
568
- readonly placeholder: _angular_core.InputSignal<string | undefined>;
569
- readonly readonlyTrigger: _angular_core.InputSignalWithTransform<boolean, unknown>;
570
- readonly search: _angular_core.ModelSignal<string>;
571
- readonly searchPlaceholder: _angular_core.InputSignal<string | undefined>;
572
- readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
573
- readonly triggerAriaLabel: _angular_core.InputSignal<string>;
574
- readonly value: _angular_core.ModelSignal<YuwComboboxValue>;
575
- private readonly _generatedId;
576
- protected readonly _itemToString: (value: string) => string;
577
- protected readonly _chipsClass: _angular_core.Signal<string>;
578
- protected readonly _clearVisible: _angular_core.Signal<boolean>;
579
- protected readonly _controlId: _angular_core.Signal<string>;
580
- protected readonly _disabled: _angular_core.Signal<boolean>;
581
- protected readonly _fieldClass: _angular_core.Signal<string>;
582
- private readonly _labelByValue;
583
- protected readonly _multipleValue: _angular_core.Signal<string[]>;
584
- protected readonly _selectedChips: _angular_core.Signal<{
585
- value: string;
586
- label: string;
587
- }[]>;
588
- protected readonly _selectedValues: _angular_core.Signal<Set<string>>;
589
- protected readonly _singleValue: _angular_core.Signal<string | undefined>;
590
- protected readonly _triggerClass: _angular_core.Signal<string>;
591
- protected _emptyValue(): YuwComboboxValue;
592
- protected _onFocusOut(event: FocusEvent): void;
593
- protected onValueChange(next: YuwComboboxValue | null): void;
594
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwComboboxComponent<any>, never>;
595
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwComboboxComponent<any>, "yuw-combobox", never, { "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonlyTrigger": { "alias": "readonlyTrigger"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "triggerAriaLabel": { "alias": "triggerAriaLabel"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "search": "searchChange"; "value": "valueChange"; }, ["itemTemplate"], never, true, never>;
758
+ declare class YuwPageHeaderComponent {
759
+ readonly backLabel: _angular_core.InputSignal<string | undefined>;
760
+ readonly description: _angular_core.InputSignal<string | undefined>;
761
+ readonly primaryIcon: _angular_core.InputSignal<string | undefined>;
762
+ readonly primaryLabel: _angular_core.InputSignal<string | undefined>;
763
+ readonly primaryMobileLabel: _angular_core.InputSignal<string | undefined>;
764
+ readonly secondaryIcon: _angular_core.InputSignal<string | undefined>;
765
+ readonly secondaryLabel: _angular_core.InputSignal<string | undefined>;
766
+ readonly title: _angular_core.InputSignal<string>;
767
+ readonly backClicked: _angular_core.OutputEmitterRef<MouseEvent>;
768
+ readonly primaryClicked: _angular_core.OutputEmitterRef<MouseEvent>;
769
+ readonly secondaryClicked: _angular_core.OutputEmitterRef<MouseEvent>;
770
+ protected readonly isMobile: _angular_core.Signal<boolean>;
771
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwPageHeaderComponent, never>;
772
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwPageHeaderComponent, "yuw-page-header", never, { "backLabel": { "alias": "backLabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "primaryIcon": { "alias": "primaryIcon"; "required": false; "isSignal": true; }; "primaryLabel": { "alias": "primaryLabel"; "required": false; "isSignal": true; }; "primaryMobileLabel": { "alias": "primaryMobileLabel"; "required": false; "isSignal": true; }; "secondaryIcon": { "alias": "secondaryIcon"; "required": false; "isSignal": true; }; "secondaryLabel": { "alias": "secondaryLabel"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; }, { "backClicked": "backClicked"; "primaryClicked": "primaryClicked"; "secondaryClicked": "secondaryClicked"; }, never, never, true, never>;
596
773
  }
597
774
 
598
775
  /**
@@ -703,38 +880,25 @@ declare const YuwAccordionImports: readonly [typeof YuwAccordion, typeof YuwAcco
703
880
  * </yuw-input>
704
881
  * ```
705
882
  */
706
- declare class YuwInputComponent extends YuwValueAccessorBase<string> implements YuwTextFieldContract {
883
+ declare class YuwInputComponent extends YuwTextFieldBase {
707
884
  private readonly _leftAddons;
708
885
  private readonly _rightAddons;
709
- readonly autocomplete: _angular_core.InputSignal<string | undefined>;
710
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
711
- readonly errorText: _angular_core.InputSignal<string | undefined>;
712
- readonly helperText: _angular_core.InputSignal<string | undefined>;
713
- readonly inputId: _angular_core.InputSignal<string | undefined>;
714
886
  readonly inputmode: _angular_core.InputSignal<YuwInputModeDto | undefined>;
715
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
716
887
  readonly maxlength: _angular_core.InputSignal<number | undefined>;
717
- readonly name: _angular_core.InputSignal<string | undefined>;
718
- readonly placeholder: _angular_core.InputSignal<string | undefined>;
719
- readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
720
- readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
721
888
  readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
722
889
  readonly type: _angular_core.InputSignal<YuwInputTypeDto>;
723
- readonly userClass: _angular_core.InputSignal<string>;
724
- readonly value: _angular_core.ModelSignal<string>;
725
- readonly committed: _angular_core.OutputEmitterRef<string>;
890
+ readonly enterPressed: _angular_core.OutputEmitterRef<void>;
726
891
  protected readonly _autoId: string;
892
+ protected readonly _focusSelectors: string[];
727
893
  protected readonly _classes: _angular_core.Signal<string>;
728
- protected readonly _disabled: _angular_core.Signal<boolean>;
729
894
  protected readonly _hasLeftAddon: _angular_core.Signal<boolean>;
730
895
  protected readonly _hasRightAddon: _angular_core.Signal<boolean>;
731
896
  protected readonly _hasAddons: _angular_core.Signal<boolean>;
732
- protected readonly _inputId: _angular_core.Signal<string>;
733
- protected _emptyValue(): string;
734
897
  protected onChange(): void;
898
+ protected onEnterPressed(): void;
735
899
  protected onInput(event: Event): void;
736
900
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwInputComponent, never>;
737
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwInputComponent, "yuw-input", never, { "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "committed": "committed"; }, ["_leftAddons", "_rightAddons"], ["yuw-left-addon", "yuw-right-addon"], true, never>;
901
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwInputComponent, "yuw-input", never, { "inputmode": { "alias": "inputmode"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "enterPressed": "enterPressed"; }, ["_leftAddons", "_rightAddons"], ["yuw-left-addon", "yuw-right-addon"], true, never>;
738
902
  }
739
903
 
740
904
  /**
@@ -783,36 +947,21 @@ declare const YuwInputAddonImports: readonly [typeof YuwLeftAddonDirective, type
783
947
  * <yuw-textarea formControlName="comments" [maxlength]="500" />
784
948
  * ```
785
949
  */
786
- declare class YuwTextareaComponent extends YuwValueAccessorBase<string> implements YuwTextFieldContract {
950
+ declare class YuwTextareaComponent extends YuwTextFieldBase {
787
951
  private readonly _leftAddons;
788
952
  private readonly _rightAddons;
789
- readonly autocomplete: _angular_core.InputSignal<string | undefined>;
790
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
791
- readonly errorText: _angular_core.InputSignal<string | undefined>;
792
- readonly helperText: _angular_core.InputSignal<string | undefined>;
793
- readonly inputId: _angular_core.InputSignal<string | undefined>;
794
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
795
953
  readonly maxlength: _angular_core.InputSignal<number | undefined>;
796
- readonly name: _angular_core.InputSignal<string | undefined>;
797
- readonly placeholder: _angular_core.InputSignal<string | undefined>;
798
- readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
799
- readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
800
954
  readonly rows: _angular_core.InputSignal<number | undefined>;
801
- readonly userClass: _angular_core.InputSignal<string>;
802
- readonly value: _angular_core.ModelSignal<string>;
803
- readonly committed: _angular_core.OutputEmitterRef<string>;
804
955
  protected readonly _autoId: string;
956
+ protected readonly _focusSelectors: string[];
805
957
  protected readonly _classes: _angular_core.Signal<string>;
806
- protected readonly _disabled: _angular_core.Signal<boolean>;
807
958
  protected readonly _hasLeftAddon: _angular_core.Signal<boolean>;
808
959
  protected readonly _hasRightAddon: _angular_core.Signal<boolean>;
809
960
  protected readonly _hasAddons: _angular_core.Signal<boolean>;
810
- protected readonly _inputId: _angular_core.Signal<string>;
811
- protected _emptyValue(): string;
812
961
  protected onChange(): void;
813
962
  protected onInput(event: Event): void;
814
963
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwTextareaComponent, never>;
815
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwTextareaComponent, "yuw-textarea", never, { "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "committed": "committed"; }, ["_leftAddons", "_rightAddons"], ["yuw-left-addon", "yuw-right-addon"], true, never>;
964
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwTextareaComponent, "yuw-textarea", never, { "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; }, {}, ["_leftAddons", "_rightAddons"], ["yuw-left-addon", "yuw-right-addon"], true, never>;
816
965
  }
817
966
 
818
967
  /**
@@ -882,44 +1031,34 @@ type YuwSearchInputCollapseFromDto = 'left' | 'right';
882
1031
  * />
883
1032
  * ```
884
1033
  */
885
- declare class YuwSearchInputComponent extends YuwValueAccessorBase<string> implements YuwTextFieldContract {
1034
+ declare class YuwSearchInputComponent extends YuwTextFieldBase {
886
1035
  private readonly _injector;
887
1036
  private readonly _input;
888
- readonly autocomplete: _angular_core.InputSignal<string | undefined>;
889
1037
  readonly clearAriaLabel: _angular_core.InputSignal<string | undefined>;
890
1038
  readonly collapseFrom: _angular_core.InputSignal<YuwSearchInputCollapseFromDto | undefined>;
891
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
892
- readonly errorText: _angular_core.InputSignal<string | undefined>;
893
1039
  readonly expandAriaLabel: _angular_core.InputSignal<string | undefined>;
894
1040
  readonly expandedWidth: _angular_core.InputSignal<string>;
895
- readonly helperText: _angular_core.InputSignal<string | undefined>;
896
- readonly inputId: _angular_core.InputSignal<string | undefined>;
897
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
898
- readonly name: _angular_core.InputSignal<string | undefined>;
899
- readonly placeholder: _angular_core.InputSignal<string | undefined>;
900
- readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
901
- readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
902
1041
  readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
903
1042
  readonly transparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
904
- readonly userClass: _angular_core.InputSignal<string>;
905
- readonly value: _angular_core.ModelSignal<string>;
906
- readonly committed: _angular_core.OutputEmitterRef<string>;
907
1043
  readonly searched: _angular_core.OutputEmitterRef<string>;
908
1044
  protected readonly _autoId: string;
1045
+ protected readonly _focusSelectors: string[];
909
1046
  private readonly _open;
910
1047
  protected readonly _classes: _angular_core.Signal<string>;
911
1048
  protected readonly _collapsible: _angular_core.Signal<boolean>;
912
- protected readonly _disabled: _angular_core.Signal<boolean>;
913
1049
  protected readonly _expandButtonClasses: _angular_core.Signal<string>;
914
1050
  protected readonly _fieldClasses: _angular_core.Signal<string>;
915
1051
  protected readonly _iconClasses: _angular_core.Signal<string>;
916
- protected readonly _inputId: _angular_core.Signal<string>;
917
1052
  readonly expanded: _angular_core.Signal<boolean>;
918
1053
  protected readonly _showClear: _angular_core.Signal<boolean>;
919
1054
  protected readonly _showExpandButton: _angular_core.Signal<boolean>;
920
1055
  protected readonly _wrapperClasses: _angular_core.Signal<string>;
921
1056
  protected readonly _wrapperMaxWidth: _angular_core.Signal<string | null>;
922
- protected _emptyValue(): string;
1057
+ /**
1058
+ * Routed through `onExpand()` so a collapsed field opens before it takes focus; a plain focus
1059
+ * would land on an input that is still `tabindex="-1"` and `aria-hidden`.
1060
+ */
1061
+ focus(): void;
923
1062
  protected onBlur(): void;
924
1063
  protected onClear(): void;
925
1064
  protected onEnter(): void;
@@ -941,7 +1080,7 @@ declare class YuwSearchInputComponent extends YuwValueAccessorBase<string> imple
941
1080
  protected onExpandFocus(event: FocusEvent): void;
942
1081
  protected onInput(event: Event): void;
943
1082
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSearchInputComponent, never>;
944
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSearchInputComponent, "yuw-search-input", never, { "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "collapseFrom": { "alias": "collapseFrom"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "expandAriaLabel": { "alias": "expandAriaLabel"; "required": false; "isSignal": true; }; "expandedWidth": { "alias": "expandedWidth"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "transparent": { "alias": "transparent"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "committed": "committed"; "searched": "searched"; }, never, never, true, never>;
1083
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSearchInputComponent, "yuw-search-input", never, { "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "collapseFrom": { "alias": "collapseFrom"; "required": false; "isSignal": true; }; "expandAriaLabel": { "alias": "expandAriaLabel"; "required": false; "isSignal": true; }; "expandedWidth": { "alias": "expandedWidth"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "transparent": { "alias": "transparent"; "required": false; "isSignal": true; }; }, { "searched": "searched"; }, never, never, true, never>;
945
1084
  }
946
1085
 
947
1086
  /**
@@ -975,36 +1114,23 @@ declare class YuwSearchInputComponent extends YuwValueAccessorBase<string> imple
975
1114
  * <yuw-password-input formControlName="password" autocomplete="current-password" />
976
1115
  * ```
977
1116
  */
978
- declare class YuwPasswordInputComponent extends YuwValueAccessorBase<string> implements YuwTextFieldContract {
1117
+ declare class YuwPasswordInputComponent extends YuwTextFieldBase {
979
1118
  private readonly _leftAddons;
980
- readonly autocomplete: _angular_core.InputSignal<string | undefined>;
981
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
982
- readonly errorText: _angular_core.InputSignal<string | undefined>;
983
- readonly helperText: _angular_core.InputSignal<string | undefined>;
984
- readonly inputId: _angular_core.InputSignal<string | undefined>;
985
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
986
1119
  readonly masked: _angular_core.ModelSignal<boolean>;
987
- readonly name: _angular_core.InputSignal<string | undefined>;
988
- readonly placeholder: _angular_core.InputSignal<string | undefined>;
989
- readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
990
- readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
991
1120
  readonly revealAriaLabel: _angular_core.InputSignal<string | undefined>;
992
1121
  readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
993
- readonly userClass: _angular_core.InputSignal<string>;
994
- readonly value: _angular_core.ModelSignal<string>;
995
- readonly committed: _angular_core.OutputEmitterRef<string>;
1122
+ readonly enterPressed: _angular_core.OutputEmitterRef<void>;
996
1123
  protected readonly _autoId: string;
1124
+ protected readonly _focusSelectors: string[];
997
1125
  protected readonly _classes: _angular_core.Signal<string>;
998
- protected readonly _disabled: _angular_core.Signal<boolean>;
999
1126
  protected readonly _hasLeftAddon: _angular_core.Signal<boolean>;
1000
- protected readonly _inputId: _angular_core.Signal<string>;
1001
1127
  protected readonly _reveal: _angular_core.Signal<yukit_web.YuwPasswordRevealStateDto>;
1002
- protected _emptyValue(): string;
1003
1128
  protected onChange(): void;
1129
+ protected onEnterPressed(): void;
1004
1130
  protected onInput(event: Event): void;
1005
1131
  protected onToggleReveal(): void;
1006
1132
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwPasswordInputComponent, never>;
1007
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwPasswordInputComponent, "yuw-password-input", never, { "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "masked": { "alias": "masked"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "revealAriaLabel": { "alias": "revealAriaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "masked": "maskedChange"; "value": "valueChange"; "committed": "committed"; }, ["_leftAddons"], ["yuw-left-addon"], true, never>;
1133
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwPasswordInputComponent, "yuw-password-input", never, { "masked": { "alias": "masked"; "required": false; "isSignal": true; }; "revealAriaLabel": { "alias": "revealAriaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "masked": "maskedChange"; "enterPressed": "enterPressed"; }, ["_leftAddons"], ["yuw-left-addon"], true, never>;
1008
1134
  }
1009
1135
 
1010
1136
  /**
@@ -1054,30 +1180,23 @@ type YuwInputOtpModeDto = 'numeric' | 'text';
1054
1180
  * <yuw-input-otp formControlName="otpCode" [groupSizes]="[6]" mode="numeric" />
1055
1181
  * ```
1056
1182
  */
1057
- declare class YuwInputOtpComponent extends YuwValueAccessorBase<string> {
1183
+ declare class YuwInputOtpComponent extends YuwFieldBase {
1058
1184
  readonly autofocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
1059
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1060
- readonly errorText: _angular_core.InputSignal<string | undefined>;
1061
1185
  readonly groupSizes: _angular_core.InputSignal<readonly number[]>;
1062
- readonly helperText: _angular_core.InputSignal<string | undefined>;
1063
- readonly inputId: _angular_core.InputSignal<string | undefined>;
1064
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1065
1186
  readonly mode: _angular_core.InputSignal<YuwInputOtpModeDto>;
1066
1187
  readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
1067
1188
  readonly transformPaste: _angular_core.InputSignal<(pastedText: string, length: number) => string>;
1068
- readonly userClass: _angular_core.InputSignal<string>;
1069
- readonly value: _angular_core.ModelSignal<string>;
1070
1189
  readonly completed: _angular_core.OutputEmitterRef<string>;
1190
+ readonly enterPressed: _angular_core.OutputEmitterRef<void>;
1071
1191
  protected readonly _autoId: string;
1192
+ protected readonly _focusSelectors: string[];
1072
1193
  protected readonly _classes: _angular_core.Signal<string>;
1073
- protected readonly _disabled: _angular_core.Signal<boolean>;
1074
1194
  protected readonly _groups: _angular_core.Signal<yukit_web.YuwInputOtpGroupDto[]>;
1075
- protected readonly _inputId: _angular_core.Signal<string>;
1076
1195
  protected readonly _length: _angular_core.Signal<number>;
1077
- protected _emptyValue(): string;
1196
+ protected onEnterPressed(): void;
1078
1197
  protected onValueChange(next: string): void;
1079
1198
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwInputOtpComponent, never>;
1080
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwInputOtpComponent, "yuw-input-otp", never, { "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "groupSizes": { "alias": "groupSizes"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "transformPaste": { "alias": "transformPaste"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "completed": "completed"; }, never, never, true, never>;
1199
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwInputOtpComponent, "yuw-input-otp", never, { "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "groupSizes": { "alias": "groupSizes"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "transformPaste": { "alias": "transformPaste"; "required": false; "isSignal": true; }; }, { "completed": "completed"; "enterPressed": "enterPressed"; }, never, never, true, never>;
1081
1200
  }
1082
1201
 
1083
1202
  /**
@@ -1163,7 +1282,6 @@ declare class YuwCheckboxComponent extends YuwValueAccessorBase<boolean> {
1163
1282
  readonly ariaDescribedby: _angular_core.InputSignal<string | undefined>;
1164
1283
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1165
1284
  readonly ariaLabelledby: _angular_core.InputSignal<string | undefined>;
1166
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1167
1285
  readonly indeterminate: _angular_core.ModelSignal<boolean>;
1168
1286
  readonly inputId: _angular_core.InputSignal<string | undefined>;
1169
1287
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -1171,12 +1289,12 @@ declare class YuwCheckboxComponent extends YuwValueAccessorBase<boolean> {
1171
1289
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
1172
1290
  readonly secondary: _angular_core.InputSignalWithTransform<boolean, unknown>;
1173
1291
  readonly value: _angular_core.ModelSignal<boolean>;
1292
+ protected readonly _focusSelectors: string[];
1174
1293
  protected readonly _class: _angular_core.Signal<string>;
1175
- protected readonly _disabled: _angular_core.Signal<boolean>;
1176
1294
  protected _emptyValue(): boolean;
1177
1295
  protected onCheckedChange(checked: boolean): void;
1178
1296
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwCheckboxComponent, never>;
1179
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwCheckboxComponent, "yuw-checkbox", never, { "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "secondary": { "alias": "secondary"; "required": false; "isSignal": true; }; "value": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "indeterminate": "indeterminateChange"; "value": "checkedChange"; }, never, ["*"], true, never>;
1297
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwCheckboxComponent, "yuw-checkbox", never, { "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "secondary": { "alias": "secondary"; "required": false; "isSignal": true; }; "value": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "indeterminate": "indeterminateChange"; "value": "checkedChange"; }, never, ["*"], true, never>;
1180
1298
  }
1181
1299
 
1182
1300
  type YuwSwitchSizeDto = 'default' | 'xs' | 'sm' | 'lg';
@@ -1206,17 +1324,16 @@ declare class YuwSwitchComponent extends YuwValueAccessorBase<boolean> {
1206
1324
  readonly ariaDescribedby: _angular_core.InputSignal<string | undefined>;
1207
1325
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1208
1326
  readonly ariaLabelledby: _angular_core.InputSignal<string | undefined>;
1209
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1210
1327
  readonly inputId: _angular_core.InputSignal<string | undefined>;
1211
1328
  readonly size: _angular_core.InputSignal<YuwSwitchSizeDto>;
1212
1329
  readonly value: _angular_core.ModelSignal<boolean>;
1213
- protected readonly _disabled: _angular_core.Signal<boolean>;
1330
+ protected readonly _focusSelectors: string[];
1214
1331
  protected readonly _helmSize: _angular_core.Signal<"default" | "sm">;
1215
1332
  protected readonly _switchClass: _angular_core.Signal<string>;
1216
1333
  protected _emptyValue(): boolean;
1217
1334
  protected onCheckedChange(checked: boolean): void;
1218
1335
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSwitchComponent, never>;
1219
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSwitchComponent, "yuw-switch", never, { "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "value": "checkedChange"; }, never, ["*"], true, never>;
1336
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSwitchComponent, "yuw-switch", never, { "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "value": "checkedChange"; }, never, ["*"], true, never>;
1220
1337
  }
1221
1338
 
1222
1339
  /**
@@ -1260,20 +1377,19 @@ interface YuwRadioOptionDto {
1260
1377
  declare class YuwRadioGroupComponent extends YuwValueAccessorBase<string | undefined> {
1261
1378
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1262
1379
  readonly ariaLabelledby: _angular_core.InputSignal<string | undefined>;
1263
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1264
1380
  readonly name: _angular_core.InputSignal<string | undefined>;
1265
1381
  readonly options: _angular_core.InputSignal<readonly YuwRadioOptionDto[]>;
1266
1382
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
1267
1383
  readonly userClass: _angular_core.InputSignal<string>;
1268
1384
  readonly value: _angular_core.ModelSignal<string | undefined>;
1385
+ protected readonly _focusSelectors: string[];
1269
1386
  private readonly _generatedName;
1270
- protected readonly _disabled: _angular_core.Signal<boolean>;
1271
1387
  protected readonly _groupClass: _angular_core.Signal<string>;
1272
1388
  protected readonly _name: _angular_core.Signal<string>;
1273
1389
  protected _emptyValue(): string | undefined;
1274
1390
  protected onValueChange(next: string): void;
1275
1391
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwRadioGroupComponent, never>;
1276
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwRadioGroupComponent, "yuw-radio-group", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1392
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwRadioGroupComponent, "yuw-radio-group", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1277
1393
  }
1278
1394
 
1279
1395
  /**
@@ -1292,6 +1408,30 @@ declare class YuwSkeletonDirective {
1292
1408
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSkeletonDirective, "[yuwSkeleton]", never, {}, {}, never, never, true, [{ directive: typeof i1$1.HlmSkeleton; inputs: {}; outputs: {}; }]>;
1293
1409
  }
1294
1410
 
1411
+ /**
1412
+ * Grid of projected cards, usually `yuw-card-grid-item`s in an `@for`. `loading` shows
1413
+ * `skeletonCount` placeholders shaped by `skeletonClass`; `empty` shows `emptyText`; `columnsClass`
1414
+ * holds the Tailwind column utilities.
1415
+ */
1416
+ declare class YuwCardGridComponent {
1417
+ readonly columnsClass: _angular_core.InputSignal<string>;
1418
+ readonly empty: _angular_core.InputSignalWithTransform<boolean, unknown>;
1419
+ readonly emptyText: _angular_core.InputSignal<string>;
1420
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1421
+ readonly skeletonClass: _angular_core.InputSignal<string>;
1422
+ readonly skeletonCount: _angular_core.InputSignalWithTransform<number, unknown>;
1423
+ protected readonly skeletons: _angular_core.Signal<number[]>;
1424
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwCardGridComponent, never>;
1425
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwCardGridComponent, "yuw-card-grid", never, { "columnsClass": { "alias": "columnsClass"; "required": false; "isSignal": true; }; "empty": { "alias": "empty"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "skeletonClass": { "alias": "skeletonClass"; "required": false; "isSignal": true; }; "skeletonCount": { "alias": "skeletonCount"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1426
+ }
1427
+
1428
+ /** While `pending` the card stays hidden in place under a skeleton, so the grid does not jump. */
1429
+ declare class YuwCardGridItemComponent {
1430
+ readonly pending: _angular_core.InputSignalWithTransform<boolean, unknown>;
1431
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwCardGridItemComponent, never>;
1432
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwCardGridItemComponent, "yuw-card-grid-item", never, { "pending": { "alias": "pending"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1433
+ }
1434
+
1295
1435
  /**
1296
1436
  * Container directive for card components.
1297
1437
  * Accepts optional `size` input (e.g. `'default'` or `'sm'`).
@@ -1631,10 +1771,9 @@ type YuwDatepickerModeDto = 'single' | 'range' | 'multiple' | 'monthYear';
1631
1771
  * ```
1632
1772
  */
1633
1773
  declare class YuwDatepickerComponent extends YuwValueAccessorBase<YuwDatepickerValue> {
1634
- readonly align: _angular_core.InputSignal<"start" | "center" | "end">;
1774
+ readonly align: _angular_core.InputSignal<"center" | "start" | "end">;
1635
1775
  readonly buttonId: _angular_core.InputSignal<string | undefined>;
1636
- readonly captionLayout: _angular_core.InputSignal<"dropdown" | "label" | "dropdown-months" | "dropdown-years">;
1637
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1776
+ readonly captionLayout: _angular_core.InputSignal<"label" | "dropdown" | "dropdown-months" | "dropdown-years">;
1638
1777
  readonly formatDate: _angular_core.InputSignal<((date: Date) => string) | undefined>;
1639
1778
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1640
1779
  readonly maxDate: _angular_core.InputSignal<Date | undefined>;
@@ -1644,13 +1783,13 @@ declare class YuwDatepickerComponent extends YuwValueAccessorBase<YuwDatepickerV
1644
1783
  readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
1645
1784
  readonly userClass: _angular_core.InputSignal<string>;
1646
1785
  readonly value: _angular_core.ModelSignal<YuwDatepickerValue>;
1786
+ protected readonly _focusSelectors: string[];
1647
1787
  private readonly _generatedButtonId;
1648
1788
  private readonly _monthYearConfig;
1649
1789
  private readonly _multiConfig;
1650
1790
  private readonly _rangeConfig;
1651
1791
  private readonly _singleConfig;
1652
1792
  protected readonly _buttonId: _angular_core.Signal<string>;
1653
- protected readonly _disabled: _angular_core.Signal<boolean>;
1654
1793
  protected readonly _formatMonthYear: _angular_core.Signal<(date: Date) => string>;
1655
1794
  protected readonly _formatMulti: _angular_core.Signal<(dates: Date[]) => string>;
1656
1795
  protected readonly _formatRange: _angular_core.Signal<(dates: [Date | null, Date | null]) => string>;
@@ -1662,7 +1801,7 @@ declare class YuwDatepickerComponent extends YuwValueAccessorBase<YuwDatepickerV
1662
1801
  protected _emptyValue(): YuwDatepickerValue;
1663
1802
  protected onValueChange(next: YuwDatepickerValue): void;
1664
1803
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwDatepickerComponent, never>;
1665
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwDatepickerComponent, "yuw-datepicker", never, { "align": { "alias": "align"; "required": false; "isSignal": true; }; "buttonId": { "alias": "buttonId"; "required": false; "isSignal": true; }; "captionLayout": { "alias": "captionLayout"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "formatDate": { "alias": "formatDate"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1804
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwDatepickerComponent, "yuw-datepicker", never, { "align": { "alias": "align"; "required": false; "isSignal": true; }; "buttonId": { "alias": "buttonId"; "required": false; "isSignal": true; }; "captionLayout": { "alias": "captionLayout"; "required": false; "isSignal": true; }; "formatDate": { "alias": "formatDate"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1666
1805
  }
1667
1806
 
1668
1807
  /**
@@ -1734,6 +1873,74 @@ declare class YuwDatatablePaginationDirective {
1734
1873
  /** Every table part, for a consumer's `imports`. */
1735
1874
  declare const YuwTableImports: readonly [typeof YuwTableContainerDirective, typeof YuwTableDirective, typeof YuwTHeadDirective, typeof YuwTBodyDirective, typeof YuwTFootDirective, typeof YuwTrDirective, typeof YuwThDirective, typeof YuwTdDirective, typeof YuwCaptionDirective, typeof YuwDatatablePaginationDirective];
1736
1875
 
1876
+ interface YuwFilterOptionDto {
1877
+ readonly value: string;
1878
+ readonly label: string;
1879
+ readonly disabled?: boolean;
1880
+ }
1881
+ /** `single` keeps one value, `multiple` a set; both render as checkboxes. */
1882
+ type YuwFilterGroupMode = 'single' | 'multiple';
1883
+ interface YuwFilterGroupDto {
1884
+ readonly id: string;
1885
+ readonly label: string;
1886
+ readonly mode: YuwFilterGroupMode;
1887
+ readonly options: readonly YuwFilterOptionDto[];
1888
+ }
1889
+ /** Selection keyed by `YuwFilterGroupDto.id`: a string for `single` groups, an array for `multiple`. */
1890
+ type YuwFilterSelection = Readonly<Record<string, string | readonly string[]>>;
1891
+ interface YuwListToolbarFilterLabels {
1892
+ readonly title: string;
1893
+ readonly clearAll: string;
1894
+ readonly close: string;
1895
+ readonly apply: string;
1896
+ readonly clear: string;
1897
+ readonly pending: string;
1898
+ readonly selected: (count: number) => string;
1899
+ }
1900
+ interface YuwListToolbarSearchLabels {
1901
+ readonly expand: string;
1902
+ readonly clear: string;
1903
+ }
1904
+ interface YuwListToolbarColumnsLabels {
1905
+ readonly trigger: string;
1906
+ readonly placeholder: string;
1907
+ readonly empty: string;
1908
+ readonly toggle: string;
1909
+ }
1910
+ /** Every text the toolbar prints; the consumer translates them. */
1911
+ interface YuwListToolbarLabels {
1912
+ readonly filters: YuwListToolbarFilterLabels;
1913
+ readonly search: YuwListToolbarSearchLabels;
1914
+ readonly columns: YuwListToolbarColumnsLabels;
1915
+ readonly export: string;
1916
+ }
1917
+
1918
+ /**
1919
+ * Toolbar of a list page: filters on the leading edge, search, export and column visibility on the
1920
+ * trailing one, and projected content after them.
1921
+ *
1922
+ * Each control renders only when its input is set: `filterGroups`, `searchPlaceholder`,
1923
+ * `showExport`, `hideableColumns`. `labels` holds every text and the consumer translates it;
1924
+ * `idleColor` is the filter trigger tone while nothing is applied.
1925
+ */
1926
+ declare class YuwListToolbarComponent {
1927
+ readonly filterGroups: _angular_core.InputSignal<readonly YuwFilterGroupDto[] | undefined>;
1928
+ readonly filtersDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1929
+ readonly hideableColumns: _angular_core.InputSignal<YuwComboboxOptionDto<unknown>[] | undefined>;
1930
+ readonly idleColor: _angular_core.InputSignal<YuwColorDto>;
1931
+ readonly labels: _angular_core.InputSignal<YuwListToolbarLabels>;
1932
+ readonly search: _angular_core.ModelSignal<string>;
1933
+ readonly searchPlaceholder: _angular_core.InputSignal<string | undefined>;
1934
+ readonly selection: _angular_core.ModelSignal<Readonly<Record<string, string | readonly string[]>>>;
1935
+ readonly showExport: _angular_core.InputSignalWithTransform<boolean, unknown>;
1936
+ readonly exported: _angular_core.OutputEmitterRef<MouseEvent>;
1937
+ readonly hiddenColumnsChange: _angular_core.OutputEmitterRef<YuwComboboxValue[]>;
1938
+ readonly searched: _angular_core.OutputEmitterRef<string>;
1939
+ protected readonly isMobile: _angular_core.Signal<boolean>;
1940
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwListToolbarComponent, never>;
1941
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwListToolbarComponent, "yuw-list-toolbar", never, { "filterGroups": { "alias": "filterGroups"; "required": false; "isSignal": true; }; "filtersDisabled": { "alias": "filtersDisabled"; "required": false; "isSignal": true; }; "hideableColumns": { "alias": "hideableColumns"; "required": false; "isSignal": true; }; "idleColor": { "alias": "idleColor"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": true; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "showExport": { "alias": "showExport"; "required": false; "isSignal": true; }; }, { "search": "searchChange"; "selection": "selectionChange"; "exported": "exported"; "hiddenColumnsChange": "hiddenColumnsChange"; "searched": "searched"; }, never, ["*"], true, never>;
1942
+ }
1943
+
1737
1944
  type YuwDatatableAlign = 'start' | 'center' | 'end';
1738
1945
  /**
1739
1946
  * Default floor for a column that opts into `meta.wrap`, as a Tailwind `min-w-*` class.
@@ -2024,6 +2231,22 @@ declare class YuwDatatableRowSelect {
2024
2231
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwDatatableRowSelect, "yuw-datatable-row-select", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "onToggle": { "alias": "onToggle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2025
2232
  }
2026
2233
 
2234
+ /**
2235
+ * Gear button cell that runs `onEdit`, an input because `flexRenderComponent` does not subscribe
2236
+ * outputs. The host stops the click so a clickable row does not fire twice.
2237
+ */
2238
+ declare class YuwActionsCellComponent {
2239
+ readonly label: _angular_core.InputSignal<string>;
2240
+ readonly onEdit: _angular_core.InputSignal<() => void>;
2241
+ protected edit(): void;
2242
+ protected onHostClick(event: Event): void;
2243
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwActionsCellComponent, never>;
2244
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwActionsCellComponent, "yuw-actions-cell", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "onEdit": { "alias": "onEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2245
+ }
2246
+
2247
+ /** Headerless `actions` column; `label` is the button's accessible name, already translated. */
2248
+ declare function buildYuwActionsColumn<Row extends RowData>(label: string, onEdit: (row: Row) => void, cellClass?: string): YuwDatatableColumnDef<Row>;
2249
+
2027
2250
  /** A single entry in `<yuw-avatar>`'s `group` input, which turns it into a stack of overlapping avatars. */
2028
2251
  interface YuwAvatarGroupItemDto {
2029
2252
  alt: string;
@@ -2222,7 +2445,7 @@ declare class YuwSheetComponent {
2222
2445
  readonly side: _angular_core.InputSignal<YuwSheetSideDto>;
2223
2446
  readonly title: _angular_core.InputSignal<string | undefined>;
2224
2447
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2225
- readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2448
+ readonly triggerVariant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
2226
2449
  protected readonly _sheetState: _angular_core.Signal<"open" | "closed">;
2227
2450
  constructor();
2228
2451
  protected onStateChanged(state: 'open' | 'closed'): void;
@@ -2296,7 +2519,7 @@ declare class YuwPopoverComponent {
2296
2519
  readonly triggerColor: _angular_core.InputSignal<YuwColorDto>;
2297
2520
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2298
2521
  readonly triggerTransparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
2299
- readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2522
+ readonly triggerVariant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
2300
2523
  protected readonly _popoverState: _angular_core.Signal<"open" | "closed">;
2301
2524
  protected onOpenChange(state: 'open' | 'closed'): void;
2302
2525
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwPopoverComponent, never>;
@@ -2549,7 +2772,7 @@ declare class YuwDialogComponent {
2549
2772
  readonly title: _angular_core.InputSignal<string | undefined>;
2550
2773
  readonly triggerColor: _angular_core.InputSignal<YuwColorDto>;
2551
2774
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2552
- readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2775
+ readonly triggerVariant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
2553
2776
  protected readonly _dialogState: _angular_core.Signal<"open" | "closed">;
2554
2777
  protected onStateChanged(state: 'open' | 'closed'): void;
2555
2778
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwDialogComponent, never>;
@@ -2627,14 +2850,14 @@ declare class YuwAlertDialogComponent {
2627
2850
  protected readonly hasMedia: _angular_core.Signal<YuwAlertDialogMediaDirective | undefined>;
2628
2851
  readonly cancelLabel: _angular_core.InputSignal<string>;
2629
2852
  readonly confirmLabel: _angular_core.InputSignal<string>;
2630
- readonly confirmVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2853
+ readonly confirmVariant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
2631
2854
  readonly description: _angular_core.InputSignal<string | undefined>;
2632
2855
  readonly open: _angular_core.ModelSignal<boolean>;
2633
2856
  readonly showTrigger: _angular_core.InputSignalWithTransform<boolean, unknown>;
2634
2857
  readonly size: _angular_core.InputSignal<YuwAlertDialogSizeDto>;
2635
2858
  readonly title: _angular_core.InputSignal<string>;
2636
2859
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2637
- readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2860
+ readonly triggerVariant: _angular_core.InputSignal<"link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined>;
2638
2861
  readonly cancelled: _angular_core.OutputEmitterRef<void>;
2639
2862
  readonly confirmed: _angular_core.OutputEmitterRef<void>;
2640
2863
  protected readonly _dialogState: _angular_core.Signal<"open" | "closed">;
@@ -3634,5 +3857,5 @@ declare class YuwCommandDialogComponent {
3634
3857
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwCommandDialogComponent, "yuw-command-dialog", never, { "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; }, { "open": "openChange"; "search": "searchChange"; "commandSelected": "commandSelected"; }, never, never, true, never>;
3635
3858
  }
3636
3859
 
3637
- export { DATATABLE_ALIGN_CLASS, DATATABLE_LAYOUT_CLASS, DATATABLE_WRAP_CONTENT_CLASS, YUW_DATATABLE_FEATURES, YUW_DATATABLE_WRAP_MIN_WIDTH, YUW_PASSWORD_REVEAL_STATES, YUW_SIDEBAR_RAIL_ICON_SIZE, YUW_SIDEBAR_RAIL_PADDING, YUW_SIDEBAR_RAIL_WIDTH, YuwAccordion, YuwAccordionContentComponent, YuwAccordionImports, YuwAccordionItem, YuwAccordionTriggerComponent, YuwAlertActionDirective, YuwAlertComponent, YuwAlertDescriptionDirective, YuwAlertDialogComponent, YuwAlertDialogMediaDirective, YuwAlertDialogTriggerDirective, YuwAlertImports, YuwAlertTitleDirective, YuwAttachmentActionDirective, YuwAttachmentActionsDirective, YuwAttachmentContentDirective, YuwAttachmentDescriptionDirective, YuwAttachmentDirective, YuwAttachmentGroupDirective, YuwAttachmentMediaDirective, YuwAttachmentTitleDirective, YuwAttachmentTriggerDirective, YuwAvatarComponent, YuwBadgeComponent, YuwBreadcrumbComponent, YuwButtonComponent, YuwButtonGroupComponent, YuwButtonGroupContentDirective, YuwCaptionDirective, YuwCardActionDirective, YuwCardContentDirective, YuwCardDescriptionDirective, YuwCardDirective, YuwCardFooterDirective, YuwCardHeaderDirective, YuwCardImports, YuwCardTitleDirective, YuwCheckboxComponent, YuwClassDirective, YuwComboboxComponent, YuwComboboxItemDirective, YuwCommandComponent, YuwCommandDialogComponent, YuwContextMenuCheckboxDirective, YuwContextMenuCheckboxIndicatorComponent, YuwContextMenuDirective, YuwContextMenuGroupDirective, YuwContextMenuImports, YuwContextMenuItemDirective, YuwContextMenuLabelDirective, YuwContextMenuRadioDirective, YuwContextMenuRadioIndicatorComponent, YuwContextMenuSeparatorDirective, YuwContextMenuShortcutDirective, YuwContextMenuSubDirective, YuwContextMenuSubIndicatorComponent, YuwContextMenuSubTriggerDirective, YuwContextMenuTriggerDirective, YuwDatatableComponent, YuwDatatablePaginationDirective, YuwDatatableRowSelect, YuwDatepickerComponent, YuwDialogCloseDirective, YuwDialogComponent, YuwDialogFooterDirective, YuwDialogImports, YuwDialogTriggerDirective, YuwEmptyContentDirective, YuwEmptyDescriptionDirective, YuwEmptyDirective, YuwEmptyHeaderDirective, YuwEmptyImports, YuwEmptyMediaDirective, YuwEmptyTitleDirective, YuwInputAddonImports, YuwInputComponent, YuwInputOtpComponent, YuwItemActionsDirective, YuwItemContentDirective, YuwItemDescriptionDirective, YuwItemDirective, YuwItemFooterDirective, YuwItemGroupDirective, YuwItemHeaderDirective, YuwItemImports, YuwItemMediaDirective, YuwItemSeparatorDirective, YuwItemTitleDirective, YuwLabel, YuwLeftAddonDirective, YuwPaginationComponent, YuwPasswordInputComponent, YuwPopoverComponent, YuwPopoverTriggerDirective, YuwRadioGroupComponent, YuwRightAddonDirective, YuwSearchInputComponent, YuwSheetCloseDirective, YuwSheetComponent, YuwSheetFooterDirective, YuwSheetImports, YuwSheetTriggerDirective, YuwSidebarComponent, YuwSidebarContentDirective, YuwSidebarContentExtraDirective, YuwSidebarFooterDirective, YuwSidebarFooterExtraDirective, YuwSidebarGroupContentDirective, YuwSidebarGroupDirective, YuwSidebarGroupLabelDirective, YuwSidebarHeaderDirective, YuwSidebarInsetDirective, YuwSidebarMenuAvatarButtonDirective, YuwSidebarMenuBadgeDirective, YuwSidebarMenuButtonDirective, YuwSidebarMenuDirective, YuwSidebarMenuItemDirective, YuwSidebarMenuSubButtonDirective, YuwSidebarMenuSubDirective, YuwSidebarMenuSubItemDirective, YuwSidebarRailDirective, YuwSidebarRailService, YuwSidebarSeparatorDirective, YuwSidebarSubmenuService, YuwSidebarTriggerComponent, YuwSidebarWrapperDirective, YuwSkeletonDirective, YuwSpinnerComponent, YuwSwitchComponent, YuwTBodyDirective, YuwTFootDirective, YuwTHeadDirective, YuwTabContentDirective, YuwTabPanelDirective, YuwTableContainerDirective, YuwTableDirective, YuwTableImports, YuwTabsComponent, YuwTdDirective, YuwTextareaComponent, YuwThDirective, YuwToasterComponent, YuwTooltipDirective, YuwTrDirective, YuwValueAccessorBase, buildInputOtpGroups, cn, datatableCellVariants, datatableContainerVariants, datatableHeadVariants, datatableHeaderCellVariants, datatableRowVariants, getPaginationRange, provideValueAccessor, totalInputOtpLength, yuwCommandDefaultFilter };
3638
- export type { YuwAlertDialogSizeDto, YuwAlertVariantDto, YuwAvatarGroupItemDto, YuwAvatarSizeDto, YuwBreadcrumbItemDto, YuwButtonGroupClickDto, YuwButtonGroupItemDto, YuwColorDto, YuwComboboxItemContext, YuwComboboxOptionDto, YuwComboboxValue, YuwCommandGroupDto, YuwCommandItemDto, YuwDatatableAlign, YuwDatatableAppearanceDto, YuwDatatableColumnDef, YuwDatatableColumnMeta, YuwDatatableFeatures, YuwDatatableRowClass, YuwDatepickerModeDto, YuwDatepickerValue, YuwFieldSizeDto, YuwInputModeDto, YuwInputOtpGroupDto, YuwInputOtpModeDto, YuwInputTypeDto, YuwPaginationRangeItem, YuwPaginationSizeDto, YuwPasswordRevealStateDto, YuwPopoverAlignDto, YuwRadioOptionDto, YuwSearchInputCollapseFromDto, YuwSheetScrollStrategyDto, YuwSheetSideDto, YuwSidebarAvatarDto, YuwSidebarCollapsibleDto, YuwSidebarContentDto, YuwSidebarGroupDto, YuwSidebarItemClickDto, YuwSidebarItemDto, YuwSidebarSideDto, YuwSidebarSubItemDto, YuwSidebarVariantDto, YuwSwitchSizeDto, YuwTabItemDto, YuwTabsActivationModeDto, YuwTabsOrientationDto, YuwTabsVariantDto, YuwTextFieldContract, YuwToasterPositionDto, YuwToasterThemeDto, YuwTooltipPositionDto };
3860
+ export { DATATABLE_ALIGN_CLASS, DATATABLE_LAYOUT_CLASS, DATATABLE_WRAP_CONTENT_CLASS, YUW_DATATABLE_FEATURES, YUW_DATATABLE_WRAP_MIN_WIDTH, YUW_PASSWORD_REVEAL_STATES, YUW_SIDEBAR_RAIL_ICON_SIZE, YUW_SIDEBAR_RAIL_PADDING, YUW_SIDEBAR_RAIL_WIDTH, YuwAccordion, YuwAccordionContentComponent, YuwAccordionImports, YuwAccordionItem, YuwAccordionTriggerComponent, YuwActionsCellComponent, YuwAlertActionDirective, YuwAlertComponent, YuwAlertDescriptionDirective, YuwAlertDialogComponent, YuwAlertDialogMediaDirective, YuwAlertDialogTriggerDirective, YuwAlertImports, YuwAlertTitleDirective, YuwAttachmentActionDirective, YuwAttachmentActionsDirective, YuwAttachmentContentDirective, YuwAttachmentDescriptionDirective, YuwAttachmentDirective, YuwAttachmentGroupDirective, YuwAttachmentMediaDirective, YuwAttachmentTitleDirective, YuwAttachmentTriggerDirective, YuwAvatarComponent, YuwBadgeComponent, YuwBreadcrumbComponent, YuwBreadcrumbTrailService, YuwButtonComponent, YuwButtonGroupComponent, YuwButtonGroupContentDirective, YuwCaptionDirective, YuwCardActionDirective, YuwCardContentDirective, YuwCardDescriptionDirective, YuwCardDirective, YuwCardFooterDirective, YuwCardGridComponent, YuwCardGridItemComponent, YuwCardHeaderDirective, YuwCardImports, YuwCardTitleDirective, YuwCheckboxComponent, YuwClassDirective, YuwComboboxComponent, YuwComboboxItemDirective, YuwCommandComponent, YuwCommandDialogComponent, YuwContextMenuCheckboxDirective, YuwContextMenuCheckboxIndicatorComponent, YuwContextMenuDirective, YuwContextMenuGroupDirective, YuwContextMenuImports, YuwContextMenuItemDirective, YuwContextMenuLabelDirective, YuwContextMenuRadioDirective, YuwContextMenuRadioIndicatorComponent, YuwContextMenuSeparatorDirective, YuwContextMenuShortcutDirective, YuwContextMenuSubDirective, YuwContextMenuSubIndicatorComponent, YuwContextMenuSubTriggerDirective, YuwContextMenuTriggerDirective, YuwDatatableComponent, YuwDatatablePaginationDirective, YuwDatatableRowSelect, YuwDatepickerComponent, YuwDialogCloseDirective, YuwDialogComponent, YuwDialogFooterDirective, YuwDialogImports, YuwDialogTriggerDirective, YuwEmptyContentDirective, YuwEmptyDescriptionDirective, YuwEmptyDirective, YuwEmptyHeaderDirective, YuwEmptyImports, YuwEmptyMediaDirective, YuwEmptyTitleDirective, YuwFieldBase, YuwInputAddonImports, YuwInputComponent, YuwInputOtpComponent, YuwItemActionsDirective, YuwItemContentDirective, YuwItemDescriptionDirective, YuwItemDirective, YuwItemFooterDirective, YuwItemGroupDirective, YuwItemHeaderDirective, YuwItemImports, YuwItemMediaDirective, YuwItemSeparatorDirective, YuwItemTitleDirective, YuwLabel, YuwLeftAddonDirective, YuwListPaginationComponent, YuwListToolbarComponent, YuwPageHeaderComponent, YuwPageSizeComponent, YuwPaginationComponent, YuwPasswordInputComponent, YuwPopoverComponent, YuwPopoverTriggerDirective, YuwRadioGroupComponent, YuwRightAddonDirective, YuwSearchInputComponent, YuwSheetCloseDirective, YuwSheetComponent, YuwSheetFooterDirective, YuwSheetImports, YuwSheetTriggerDirective, YuwSidebarComponent, YuwSidebarContentDirective, YuwSidebarContentExtraDirective, YuwSidebarFooterDirective, YuwSidebarFooterExtraDirective, YuwSidebarGroupContentDirective, YuwSidebarGroupDirective, YuwSidebarGroupLabelDirective, YuwSidebarHeaderDirective, YuwSidebarInsetDirective, YuwSidebarMenuAvatarButtonDirective, YuwSidebarMenuBadgeDirective, YuwSidebarMenuButtonDirective, YuwSidebarMenuDirective, YuwSidebarMenuItemDirective, YuwSidebarMenuSubButtonDirective, YuwSidebarMenuSubDirective, YuwSidebarMenuSubItemDirective, YuwSidebarRailDirective, YuwSidebarRailService, YuwSidebarSeparatorDirective, YuwSidebarSubmenuService, YuwSidebarTriggerComponent, YuwSidebarWrapperDirective, YuwSkeletonDirective, YuwSpinnerComponent, YuwSwitchComponent, YuwTBodyDirective, YuwTFootDirective, YuwTHeadDirective, YuwTabContentDirective, YuwTabPanelDirective, YuwTableContainerDirective, YuwTableDirective, YuwTableImports, YuwTabsComponent, YuwTdDirective, YuwTextFieldBase, YuwTextareaComponent, YuwThDirective, YuwToasterComponent, YuwTooltipDirective, YuwTrDirective, YuwValueAccessorBase, buildInputOtpGroups, buildYuwActionsColumn, cn, createPagedList, datatableCellVariants, datatableContainerVariants, datatableHeadVariants, datatableHeaderCellVariants, datatableRowVariants, getPaginationRange, provideValueAccessor, totalInputOtpLength, yuwCommandDefaultFilter };
3861
+ export type { YuwAlertDialogSizeDto, YuwAlertVariantDto, YuwAvatarGroupItemDto, YuwAvatarSizeDto, YuwBreadcrumbCrumb, YuwBreadcrumbItemDto, YuwBreadcrumbRouteData, YuwButtonGroupClickDto, YuwButtonGroupItemDto, YuwColorDto, YuwComboboxItemContext, YuwComboboxOptionDto, YuwComboboxValue, YuwCommandGroupDto, YuwCommandItemDto, YuwDatatableAlign, YuwDatatableAppearanceDto, YuwDatatableColumnDef, YuwDatatableColumnMeta, YuwDatatableFeatures, YuwDatatableRowClass, YuwDatepickerModeDto, YuwDatepickerValue, YuwFieldSizeDto, YuwFilterGroupDto, YuwFilterGroupMode, YuwFilterOptionDto, YuwFilterSelection, YuwInputModeDto, YuwInputOtpGroupDto, YuwInputOtpModeDto, YuwInputTypeDto, YuwListPaginationLabels, YuwListToolbarColumnsLabels, YuwListToolbarFilterLabels, YuwListToolbarLabels, YuwListToolbarSearchLabels, YuwPageQuery, YuwPageRange, YuwPageSizeLabels, YuwPageSort, YuwPagedList, YuwPagedListOptions, YuwPaginationRangeItem, YuwPaginationSizeDto, YuwPasswordRevealStateDto, YuwPopoverAlignDto, YuwRadioOptionDto, YuwSearchInputCollapseFromDto, YuwSheetScrollStrategyDto, YuwSheetSideDto, YuwSidebarAvatarDto, YuwSidebarCollapsibleDto, YuwSidebarContentDto, YuwSidebarGroupDto, YuwSidebarItemClickDto, YuwSidebarItemDto, YuwSidebarSideDto, YuwSidebarSubItemDto, YuwSidebarVariantDto, YuwSwitchSizeDto, YuwTabItemDto, YuwTabsActivationModeDto, YuwTabsOrientationDto, YuwTabsVariantDto, YuwTextFieldContract, YuwToasterPositionDto, YuwToasterThemeDto, YuwTooltipPositionDto };