yukit-web 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yukit-web",
3
3
  "description": "Angular UI component library for Yurest web applications.",
4
- "version": "0.0.2",
4
+ "version": "0.0.4",
5
5
  "author": {
6
6
  "name": "Yurest Solutions",
7
7
  "email": "develop@yurest.com"
@@ -180,8 +180,8 @@
180
180
  --sidebar-foreground: var(--neutrals-element-high);
181
181
  --sidebar-primary: var(--accent-primary);
182
182
  --sidebar-primary-foreground: var(--neutrals-white);
183
- --sidebar-accent: var(--neutrals-overlay-accent);
184
- --sidebar-accent-foreground: var(--neutrals-element-high);
183
+ --sidebar-accent: #FFECEC;
184
+ --sidebar-accent-foreground: #F95A5C;
185
185
  --sidebar-border: var(--neutrals-outline);
186
186
  --sidebar-ring: var(--accent-primary);
187
187
 
@@ -202,6 +202,10 @@
202
202
  .dark {
203
203
  color-scheme: dark;
204
204
  --neutrals-element-high-gradient-hover: linear-gradient(to bottom, var(--neutrals-element-high-gradient-start-hover) 50%, var(--neutrals-white) 100%);
205
+
206
+ /** || Sidebar || */
207
+ --sidebar-accent: #3A1F22;
208
+ --sidebar-accent-foreground: #FF7A7C;
205
209
 
206
210
  /** || Accent || */
207
211
  --accent-primary-darker-ext: oklch(0.27 0.145 281.565);
@@ -15,6 +15,7 @@ import * as i2 from 'yukit-web/helm/dropdown-menu';
15
15
  import * as i1$5 from 'yukit-web/helm/table';
16
16
  import * as _tanstack_angular_table from '@tanstack/angular-table';
17
17
  import { columnFilteringFeature, columnVisibilityFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, RowData, ColumnDef, SortingState, ColumnFiltersState, ColumnVisibilityState, RowSelectionState, PaginationState } from '@tanstack/table-core';
18
+ import * as class_variance_authority_types from 'class-variance-authority/types';
18
19
  import * as i1$6 from 'yukit-web/helm/item';
19
20
  import { HlmItemSeparator } from 'yukit-web/helm/item';
20
21
  import * as i1$7 from '@spartan-ng/brain/sheet';
@@ -115,6 +116,7 @@ type YuwColorDto = 'primary' | 'secondary' | 'destructive' | 'success' | 'warnin
115
116
  interface YuwButtonGroupItemDto {
116
117
  id: string;
117
118
  label: string;
119
+ kind?: 'button';
118
120
  variant?: ButtonVariants['variant'];
119
121
  size?: ButtonVariants['size'];
120
122
  color?: YuwColorDto;
@@ -126,6 +128,31 @@ interface YuwButtonGroupItemDto {
126
128
  yuwDropdownMenuTrigger?: TemplateRef<unknown> | undefined;
127
129
  transparent?: boolean;
128
130
  }
131
+ /**
132
+ * A static, non-interactive segment welded into the same row as the buttons — a leading caption, a
133
+ * trailing unit, a checkbox that applies to the whole group.
134
+ *
135
+ * A separate type rather than optional fields on `YuwButtonGroupItemDto`: a text segment honors none
136
+ * of that interface's button surface, and merging them would hand consumers fields that silently do
137
+ * nothing on half the entries.
138
+ *
139
+ * `label` renders as-is. For content a string can't express (a `yuw-checkbox`, custom markup),
140
+ * declare an `<ng-template yuwButtonGroupText="<id>">` whose id matches this entry; the template
141
+ * wins over `label` when both are present.
142
+ */
143
+ interface YuwButtonGroupTextDto {
144
+ id: string;
145
+ kind: 'text';
146
+ label?: string;
147
+ }
148
+ /**
149
+ * What `<yuw-button>`'s `buttons` input accepts: buttons, text segments, in whatever order the
150
+ * consumer lists them.
151
+ *
152
+ * `kind` is optional on the button variant, so existing `{id, label}` arrays keep working: an entry
153
+ * without `kind` is a button.
154
+ */
155
+ type YuwButtonGroupEntryDto = YuwButtonGroupItemDto | YuwButtonGroupTextDto;
129
156
  /** What `<yuw-button>` emits from `buttonClicked` in the group form. */
130
157
  interface YuwButtonGroupClickDto {
131
158
  id: string;
@@ -147,7 +174,9 @@ interface YuwButtonGroupClickDto {
147
174
  * - `class`: Extra CSS classes merged onto the inner button/anchor (single and link mode); merged last, so they win over the component's own classes.
148
175
  * - `yuwDropdownMenuTrigger`: Optional dropdown menu template reference to trigger.
149
176
  * - `ariaLabel`: Accessible label for screen readers.
150
- * - `buttons`: Array of button items (`YuwButtonGroupItemDto[]`) to render as a welded button group.
177
+ * - `buttons`: Array of group entries (`YuwButtonGroupEntryDto[]`) to render as a welded button group.
178
+ * A `kind: 'text'` entry renders a static, non-interactive segment instead of a button; give it an
179
+ * `<ng-template yuwButtonGroupText="<id>">` to fill it with markup rather than a plain `label`.
151
180
  * - `orientation`: Group layout orientation (`'horizontal'` or `'vertical'`). Default is `'horizontal'`.
152
181
  * - `groupAriaLabel`: Accessible name for button group container.
153
182
  *
@@ -170,9 +199,16 @@ interface YuwButtonGroupClickDto {
170
199
  * Button Group Usage:
171
200
  * ```html
172
201
  * <yuw-button [buttons]="actionList" (buttonClicked)="onAction($event)" />
202
+ *
203
+ * <yuw-button [buttons]="[{id: 'caption', kind: 'text', label: 'Sort by'}, ...sortActions]">
204
+ * <ng-template yuwButtonGroupText="select-all">
205
+ * <yuw-checkbox [(checked)]="allSelected" />
206
+ * </ng-template>
207
+ * </yuw-button>
173
208
  * ```
174
209
  */
175
210
  declare class YuwButtonComponent {
211
+ private readonly _host;
176
212
  readonly variant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
177
213
  readonly size: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
178
214
  readonly color: _angular_core.InputSignal<YuwColorDto>;
@@ -183,21 +219,34 @@ declare class YuwButtonComponent {
183
219
  readonly transparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
184
220
  readonly yuwDropdownMenuTrigger: _angular_core.InputSignal<TemplateRef<unknown> | undefined>;
185
221
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
186
- readonly buttons: _angular_core.InputSignal<YuwButtonGroupItemDto[] | undefined>;
222
+ readonly buttons: _angular_core.InputSignal<YuwButtonGroupEntryDto[] | undefined>;
187
223
  readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
188
224
  readonly groupAriaLabel: _angular_core.InputSignal<string | undefined>;
189
- /**
190
- * Consumer CSS classes for the inner button/anchor (single and link mode). Merged last with
191
- * `cn`, so they win over the component's own variant/transparent classes.
192
- */
225
+ readonly animationDisabled: _angular_core.InputSignal<boolean>;
193
226
  readonly userClass: _angular_core.InputSignal<string>;
194
227
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
195
228
  readonly buttonClicked: _angular_core.OutputEmitterRef<YuwButtonGroupClickDto>;
229
+ protected readonly _textClass = "bg-transparent text-foreground border-border dark:border-input";
196
230
  protected readonly _isGroup: _angular_core.Signal<boolean>;
231
+ protected readonly _animationDisabled: _angular_core.Signal<boolean>;
197
232
  protected readonly _effectiveVariant: _angular_core.Signal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
198
233
  /** Classes for the single-mode button/anchor: our variant layer + the consumer's `class`, which goes last so it wins. */
199
234
  protected readonly _btnClass: _angular_core.Signal<string>;
200
- protected readonly _resolved: _angular_core.Signal<{
235
+ private readonly _texts;
236
+ /**
237
+ * The group's entries, each carrying everything its branch of the template needs.
238
+ *
239
+ * A text entry has no variant/size/color to fall back to, so it takes its own path rather than
240
+ * being run through the button resolver, which would invent fields its DTO doesn't declare. Its
241
+ * content template is looked up through a `Map` rather than a per-entry `.find()`, which would
242
+ * make an n-entry group cost n² comparisons.
243
+ */
244
+ protected readonly _resolved: _angular_core.Signal<({
245
+ template: TemplateRef<unknown> | undefined;
246
+ id: string;
247
+ kind: "text";
248
+ label?: string;
249
+ } | {
201
250
  variant: "secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined;
202
251
  size: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
203
252
  color: YuwColorDto;
@@ -206,16 +255,42 @@ declare class YuwButtonComponent {
206
255
  class: string;
207
256
  id: string;
208
257
  label: string;
258
+ kind?: "button";
209
259
  href?: string;
210
260
  target?: string;
211
261
  ariaLabel?: string;
212
262
  yuwDropdownMenuTrigger?: TemplateRef<unknown> | undefined;
213
263
  transparent?: boolean;
214
- }[]>;
264
+ })[]>;
215
265
  protected onClick(event: MouseEvent): void;
216
266
  protected onGroupClick(button: YuwButtonGroupItemDto, event: MouseEvent): void;
217
267
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwButtonComponent, never>;
218
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwButtonComponent, "yuw-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "transparent": { "alias": "transparent"; "required": false; "isSignal": true; }; "yuwDropdownMenuTrigger": { "alias": "yuwDropdownMenuTrigger"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "groupAriaLabel": { "alias": "groupAriaLabel"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "buttonClicked": "buttonClicked"; }, never, ["[yuwButtonIcon]", "*", "[yuwButtonIcon]", "*"], true, never>;
268
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwButtonComponent, "yuw-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "transparent": { "alias": "transparent"; "required": false; "isSignal": true; }; "yuwDropdownMenuTrigger": { "alias": "yuwDropdownMenuTrigger"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "groupAriaLabel": { "alias": "groupAriaLabel"; "required": false; "isSignal": true; }; "animationDisabled": { "alias": "animationDisabled"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "buttonClicked": "buttonClicked"; }, ["_texts"], ["[yuwButtonIcon]", "*", "[yuwButtonIcon]", "*"], true, never>;
269
+ }
270
+
271
+ /**
272
+ * Declares the content of a single text segment inside `<yuw-button>`'s button group. Apply it to
273
+ * an `<ng-template>` and pass the id of the `kind: 'text'` entry it belongs to, matching an entry
274
+ * in the `buttons` input.
275
+ *
276
+ * Exists because a text segment often isn't text — a checkbox, a badge, an icon with a count — and a
277
+ * component cannot travel through a data array. An entry whose id has no matching template falls
278
+ * back to its `label`, so the plain-string case needs no template at all.
279
+ *
280
+ * Usage:
281
+ * ```html
282
+ * <yuw-button [buttons]="entries">
283
+ * <ng-template yuwButtonGroupText="select-all">
284
+ * <yuw-checkbox [(checked)]="allSelected" />
285
+ * </ng-template>
286
+ * </yuw-button>
287
+ * ```
288
+ */
289
+ declare class YuwButtonGroupTextDirective {
290
+ readonly entryId: _angular_core.InputSignal<string>;
291
+ readonly templateRef: TemplateRef<unknown>;
292
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwButtonGroupTextDirective, never>;
293
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwButtonGroupTextDirective, "ng-template[yuwButtonGroupText]", never, { "entryId": { "alias": "yuwButtonGroupText"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
219
294
  }
220
295
 
221
296
  /**
@@ -650,7 +725,15 @@ declare class YuwTextareaComponent extends YuwValueAccessorBase<string> implemen
650
725
  }
651
726
 
652
727
  /**
653
- * Search input control featuring a leading search icon, optional clear button, and form integration (`ngModel`, `formControlName`).
728
+ * Edge a collapsible `yuw-search-input` stays anchored to while the opposite edge travels.
729
+ *
730
+ * `'right'` keeps the right edge fixed so the field grows leftwards; `'left'` mirrors it.
731
+ */
732
+ type YuwSearchInputCollapseFromDto = 'left' | 'right';
733
+
734
+ /**
735
+ * Search input control featuring a leading search icon, optional clear button, an optional
736
+ * collapsible mode, and form integration (`ngModel`, `formControlName`).
654
737
  *
655
738
  * Inputs / Models:
656
739
  * - `value`: Two-way search query string.
@@ -663,6 +746,16 @@ declare class YuwTextareaComponent extends YuwValueAccessorBase<string> implemen
663
746
  * - `autocomplete`: Native `autocomplete` attribute.
664
747
  * - `placeholder`: Hint text shown inside the empty field.
665
748
  * - `clearAriaLabel`: Accessible name for the clear button. Supplying it enables the clear button; omit to hide it.
749
+ * - `collapseFrom`: Enables collapsible mode and picks the anchored edge — `'right'` collapses back
750
+ * towards the right edge (the field grows leftwards), `'left'` mirrors it. Omit for a field that
751
+ * is always expanded.
752
+ * - `expandAriaLabel`: Accessible name for the collapsed search button. Required to make collapsible
753
+ * mode usable, since the collapsed control has no visible text — user-facing text the consuming
754
+ * app is responsible for translating.
755
+ * - `expandedWidth`: CSS width the field animates out to, e.g. `'18rem'`. Default is `'16rem'`.
756
+ * Collapsible mode only.
757
+ * - `transparent`: Removes the field's resting border and background so it sits directly on its
758
+ * container — for search inside a toolbar or a colored surface. The focus and invalid rings stay.
666
759
  * - `class`: Extra classes merged onto the input group.
667
760
  *
668
761
  * Outputs:
@@ -670,9 +763,26 @@ declare class YuwTextareaComponent extends YuwValueAccessorBase<string> implemen
670
763
  * - `committed`: Emits the current query string when the user presses Enter — for searches that
671
764
  * hit a server on explicit submit rather than on every keystroke.
672
765
  *
766
+ * ## Collapsible mode
767
+ *
768
+ * Collapsed, the control is a square icon button; activating it animates the same element out to its
769
+ * expanded width and focuses the field. It collapses again on Escape, or on blur while the query is
770
+ * empty — a blur with text still in the field keeps the field open, because collapsing would hide a
771
+ * query the user can no longer see or edit.
772
+ *
773
+ * Button and field are one element tree rather than two swapped views, so the transition is
774
+ * continuous and the input is never re-created mid-animation (which would drop focus and the caret).
775
+ *
673
776
  * Usage:
674
777
  * ```html
675
778
  * <yuw-search-input [(value)]="query" placeholder="Search items..." clearAriaLabel="Clear search" (searched)="onSearch($event)" />
779
+ *
780
+ * <yuw-search-input
781
+ * [(value)]="query"
782
+ * collapseFrom="right"
783
+ * * expandAriaLabel="Open search"
784
+ * placeholder="Search items..."
785
+ * />
676
786
  * ```
677
787
  */
678
788
  declare class YuwSearchInputComponent extends YuwValueAccessorBase<string> implements YuwTextFieldContract {
@@ -686,21 +796,51 @@ declare class YuwSearchInputComponent extends YuwValueAccessorBase<string> imple
686
796
  readonly autocomplete: _angular_core.InputSignal<string | undefined>;
687
797
  readonly placeholder: _angular_core.InputSignal<string | undefined>;
688
798
  readonly clearAriaLabel: _angular_core.InputSignal<string | undefined>;
799
+ readonly collapseFrom: _angular_core.InputSignal<YuwSearchInputCollapseFromDto | undefined>;
800
+ readonly expandedWidth: _angular_core.InputSignal<string>;
801
+ readonly expandAriaLabel: _angular_core.InputSignal<string | undefined>;
802
+ readonly transparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
689
803
  readonly userClass: _angular_core.InputSignal<string>;
804
+ private readonly _open;
805
+ protected readonly _autoId: string;
806
+ private readonly _input;
807
+ private readonly _injector;
690
808
  readonly searched: _angular_core.OutputEmitterRef<string>;
691
809
  readonly committed: _angular_core.OutputEmitterRef<string>;
692
- protected readonly _autoId: string;
693
810
  protected readonly _inputId: _angular_core.Signal<string>;
694
811
  protected readonly _classes: _angular_core.Signal<string>;
695
812
  protected readonly _disabled: _angular_core.Signal<boolean>;
813
+ protected readonly _collapsible: _angular_core.Signal<boolean>;
814
+ protected readonly _expanded: _angular_core.Signal<boolean>;
815
+ protected readonly _wrapperClasses: _angular_core.Signal<string>;
816
+ protected readonly _wrapperMaxWidth: _angular_core.Signal<string | null>;
817
+ protected readonly _iconClasses: _angular_core.Signal<string>;
818
+ protected readonly _fieldClasses: _angular_core.Signal<string>;
819
+ protected readonly _showExpandButton: _angular_core.Signal<boolean>;
696
820
  protected readonly _showClear: _angular_core.Signal<boolean>;
697
- private readonly _input;
698
821
  protected _emptyValue(): string;
699
822
  protected onInput(event: Event): void;
700
823
  protected onEnter(): void;
701
824
  protected onClear(): void;
825
+ /**
826
+ * Focus is deferred to the next render: while collapsed the input carries `tabindex="-1"` and
827
+ * `aria-hidden`, and focusing it before those bindings clear would be dropped by the browser.
828
+ */
829
+ protected onExpand(): void;
830
+ /**
831
+ * Expands when the collapsed button receives focus, so reaching it with Tab opens the field
832
+ * instead of leaving the user on a button they must also activate.
833
+ *
834
+ * Gated on `:focus-visible` to stay out of a focus loop: collapsing on blur remounts this button,
835
+ * and if the browser then lands focus on it, an ungated handler would re-expand and the control
836
+ * could never be tabbed past. `:focus-visible` is set for keyboard traversal but not for the
837
+ * programmatic/pointer focus that a collapse produces.
838
+ */
839
+ protected onExpandFocus(event: FocusEvent): void;
840
+ protected onEscape(): void;
841
+ protected onBlur(): void;
702
842
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSearchInputComponent, never>;
703
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSearchInputComponent, "yuw-search-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "searched": "searched"; "committed": "committed"; }, never, never, true, never>;
843
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSearchInputComponent, "yuw-search-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "collapseFrom": { "alias": "collapseFrom"; "required": false; "isSignal": true; }; "expandedWidth": { "alias": "expandedWidth"; "required": false; "isSignal": true; }; "expandAriaLabel": { "alias": "expandAriaLabel"; "required": false; "isSignal": true; }; "transparent": { "alias": "transparent"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "searched": "searched"; "committed": "committed"; }, never, never, true, never>;
704
844
  }
705
845
 
706
846
  /**
@@ -1464,6 +1604,37 @@ declare class YuwCaptionDirective {
1464
1604
  /** Every table part, for a consumer's `imports`. */
1465
1605
  declare const YuwTableImports: readonly [typeof YuwTableContainerDirective, typeof YuwTableDirective, typeof YuwTHeadDirective, typeof YuwTBodyDirective, typeof YuwTFootDirective, typeof YuwTrDirective, typeof YuwThDirective, typeof YuwTdDirective, typeof YuwCaptionDirective];
1466
1606
 
1607
+ type YuwDatatableAlign = 'start' | 'center' | 'end';
1608
+ /**
1609
+ * Class maps for `yuw-datatable`, layered on top of the Hlm table directives' own classes.
1610
+ *
1611
+ * `DATATABLE_ALIGN_CLASS` is keyed by a column's `meta.align` and shared by header and body cells,
1612
+ * so a column declares its alignment once and both honour it; `start` maps to an empty string
1613
+ * rather than re-stating what `HlmTh`/`HlmTd` already apply.
1614
+ *
1615
+ * The `appearance` maps are split per element because the treatment is not uniform: `card` frames
1616
+ * the container so the header tint clips to the radius instead of squaring off against a
1617
+ * consumer's wrapper, then drops the header's bottom border, since a rule underneath a filled
1618
+ * strip reads as a seam. `default` resolves to an empty string throughout, leaving a table that
1619
+ * does not opt in byte-identical to what the Hlm directives render alone.
1620
+ */
1621
+ declare const DATATABLE_ALIGN_CLASS: Record<YuwDatatableAlign, string>;
1622
+ declare const datatableContainerVariants: (props?: ({
1623
+ appearance?: "default" | "card" | null | undefined;
1624
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1625
+ declare const datatableHeadVariants: (props?: ({
1626
+ appearance?: "default" | "card" | null | undefined;
1627
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1628
+ declare const datatableHeaderCellVariants: (props?: ({
1629
+ appearance?: "default" | "card" | null | undefined;
1630
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1631
+ declare const datatableCellVariants: (props?: ({
1632
+ appearance?: "default" | "card" | null | undefined;
1633
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1634
+ declare const datatableRowVariants: (props?: ({
1635
+ appearance?: "default" | "card" | null | undefined;
1636
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1637
+
1467
1638
  /**
1468
1639
  * The feature set `yuw-datatable` enables.
1469
1640
  *
@@ -1474,14 +1645,28 @@ declare const YuwTableImports: readonly [typeof YuwTableContainerDirective, type
1474
1645
  * (`getState`, `getCanNextPage`, …) missing from the instance type.
1475
1646
  */
1476
1647
  interface YuwDatatableFeatures {
1648
+ columnMeta: YuwDatatableColumnMeta;
1477
1649
  columnFilteringFeature: typeof columnFilteringFeature;
1478
1650
  columnVisibilityFeature: typeof columnVisibilityFeature;
1479
1651
  rowPaginationFeature: typeof rowPaginationFeature;
1480
1652
  rowSelectionFeature: typeof rowSelectionFeature;
1481
1653
  rowSortingFeature: typeof rowSortingFeature;
1482
1654
  }
1655
+ /**
1656
+ * Per-column options `yuw-datatable` reads off TanStack's `meta`, where `align` sets the
1657
+ * horizontal alignment of that column's header and body cells and defaults to `'start'`.
1658
+ *
1659
+ * TanStack resolves `columnDef.meta` from a feature set's own `columnMeta` slot when it declares
1660
+ * one, falling back to its global declaration-merged `ColumnMeta` otherwise. Declaring the slot on
1661
+ * `YuwDatatableFeatures` is what constrains our columns to this shape — without it, `meta` is the
1662
+ * empty global interface, which accepts any object and would catch no typo.
1663
+ */
1664
+ interface YuwDatatableColumnMeta {
1665
+ align?: YuwDatatableAlign;
1666
+ }
1483
1667
  declare const YUW_DATATABLE_FEATURES: YuwDatatableFeatures;
1484
1668
  type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatures, TData>;
1669
+ type YuwDatatableAppearanceDto = 'default' | 'card';
1485
1670
  /**
1486
1671
  * Full-featured data table component supporting sorting, filtering, pagination, row selection,
1487
1672
  * loading skeleton state, and column visibility.
@@ -1504,10 +1689,23 @@ type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatur
1504
1689
  * User-facing text the consuming app is responsible for translating.
1505
1690
  * - `nextPageLabel` (required): Accessible name for the footer's next-page button. User-facing
1506
1691
  * text the consuming app is responsible for translating.
1692
+ * - `paginationEllipsisSrText` (required): Screen-reader text for the pagination ellipsis.
1693
+ * User-facing text the consuming app is responsible for translating.
1694
+ * - `paginationAriaLabel` (required): Accessible name for the pagination navigation landmark.
1695
+ * User-facing text the consuming app is responsible for translating.
1507
1696
  * - `caption`: Optional `<caption>` text for the table. User-facing text the consuming app is
1508
1697
  * responsible for translating; when absent, no caption is rendered.
1509
1698
  * - `tableClass`: Extra classes merged onto the inner `<table>` element. The host is
1510
1699
  * `display: contents`, so a plain `class` on `<yuw-datatable>` would never reach the table.
1700
+ * - `appearance`: Visual treatment (`YuwDatatableAppearanceDto`). Default is `'default'` —
1701
+ * Spartan's plain table. `'card'` frames the table in its own rounded bordered surface with a
1702
+ * tinted uppercase header strip and taller rows; the consumer needs no wrapper of its own.
1703
+ *
1704
+ * Per-column, through TanStack's `meta`:
1705
+ * - `meta.align`: `'start' | 'center' | 'end'`, applied to both the header and body cells of that
1706
+ * column. Default is `'start'`. Alignment and the appearance's own cell classes are resolved
1707
+ * once into a per-column-id lookup rather than in the template, because a template method would
1708
+ * re-run the class merge for every cell on every change-detection pass.
1511
1709
  * - `sorting`: Two-way sorting state (`SortingState`).
1512
1710
  * - `columnFilters`: Two-way column filters state (`ColumnFiltersState`).
1513
1711
  * - `columnVisibility`: Two-way column visibility state (`ColumnVisibilityState`).
@@ -1524,6 +1722,7 @@ type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatur
1524
1722
  * [columns]="columns"
1525
1723
  * [data]="users"
1526
1724
  * [(sorting)]="sorting"
1725
+ * appearance="card"
1527
1726
  * paginated
1528
1727
  * selectable
1529
1728
  * previousPageLabel="Página anterior"
@@ -1531,6 +1730,13 @@ type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatur
1531
1730
  * (selectedRowsChange)="onSelect($event)"
1532
1731
  * />
1533
1732
  * ```
1733
+ *
1734
+ * ```ts
1735
+ * const columns: YuwDatatableColumnDef<Client>[] = [
1736
+ * { accessorKey: 'name', header: 'Nombre' },
1737
+ * { accessorKey: 'cif', header: 'CIF', meta: { align: 'center' } },
1738
+ * ];
1739
+ * ```
1534
1740
  */
1535
1741
  declare class YuwDatatableComponent<TData extends RowData> implements OnInit {
1536
1742
  readonly columns: _angular_core.InputSignal<YuwDatatableColumnDef<TData>[]>;
@@ -1543,13 +1749,19 @@ declare class YuwDatatableComponent<TData extends RowData> implements OnInit {
1543
1749
  readonly loadingRows: _angular_core.InputSignalWithTransform<number, unknown>;
1544
1750
  readonly previousPageLabel: _angular_core.InputSignal<string>;
1545
1751
  readonly nextPageLabel: _angular_core.InputSignal<string>;
1752
+ readonly paginationEllipsisSrText: _angular_core.InputSignal<string>;
1753
+ readonly paginationAriaLabel: _angular_core.InputSignal<string>;
1546
1754
  readonly caption: _angular_core.InputSignal<string | undefined>;
1547
1755
  readonly tableClass: _angular_core.InputSignal<string | undefined>;
1756
+ readonly appearance: _angular_core.InputSignal<YuwDatatableAppearanceDto>;
1548
1757
  readonly sorting: _angular_core.ModelSignal<SortingState>;
1549
1758
  readonly columnFilters: _angular_core.ModelSignal<ColumnFiltersState>;
1550
1759
  readonly columnVisibility: _angular_core.ModelSignal<ColumnVisibilityState>;
1551
1760
  readonly rowSelection: _angular_core.ModelSignal<RowSelectionState>;
1552
1761
  readonly pagination: _angular_core.ModelSignal<PaginationState>;
1762
+ protected readonly currentPage: _angular_core.WritableSignal<number>;
1763
+ /** Translates a 1-based page from `<yuw-pagination>` back into TanStack's zero-based state. */
1764
+ protected onPageChange(page: number): void;
1553
1765
  private readonly _options;
1554
1766
  protected readonly table: _tanstack_angular_table.AngularTable<YuwDatatableFeatures, TData>;
1555
1767
  private readonly _selectedRows;
@@ -1573,9 +1785,17 @@ declare class YuwDatatableComponent<TData extends RowData> implements OnInit {
1573
1785
  protected readonly _columnCount: _angular_core.Signal<number>;
1574
1786
  protected readonly _skeletonRows: _angular_core.Signal<number[]>;
1575
1787
  protected readonly _tableClass: _angular_core.Signal<string>;
1788
+ protected readonly _containerClass: _angular_core.Signal<string>;
1789
+ protected readonly _headClass: _angular_core.Signal<string>;
1790
+ protected readonly _rowClass: _angular_core.Signal<string>;
1791
+ protected readonly _cellClasses: _angular_core.Signal<Map<string, {
1792
+ readonly header: string;
1793
+ readonly cell: string;
1794
+ }>>;
1576
1795
  protected readonly _ariaSort: Record<'asc' | 'desc', 'ascending' | 'descending'>;
1796
+ protected readonly _sortIcon: Record<'asc' | 'desc' | 'none', string>;
1577
1797
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwDatatableComponent<any>, never>;
1578
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwDatatableComponent<any>, "yuw-datatable", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "paginated": { "alias": "paginated"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingRows": { "alias": "loadingRows"; "required": false; "isSignal": true; }; "previousPageLabel": { "alias": "previousPageLabel"; "required": true; "isSignal": true; }; "nextPageLabel": { "alias": "nextPageLabel"; "required": true; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "tableClass": { "alias": "tableClass"; "required": false; "isSignal": true; }; "sorting": { "alias": "sorting"; "required": false; "isSignal": true; }; "columnFilters": { "alias": "columnFilters"; "required": false; "isSignal": true; }; "columnVisibility": { "alias": "columnVisibility"; "required": false; "isSignal": true; }; "rowSelection": { "alias": "rowSelection"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; }, { "sorting": "sortingChange"; "columnFilters": "columnFiltersChange"; "columnVisibility": "columnVisibilityChange"; "rowSelection": "rowSelectionChange"; "pagination": "paginationChange"; "selectedRowsChange": "selectedRowsChange"; }, never, never, true, never>;
1798
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwDatatableComponent<any>, "yuw-datatable", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "paginated": { "alias": "paginated"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingRows": { "alias": "loadingRows"; "required": false; "isSignal": true; }; "previousPageLabel": { "alias": "previousPageLabel"; "required": true; "isSignal": true; }; "nextPageLabel": { "alias": "nextPageLabel"; "required": true; "isSignal": true; }; "paginationEllipsisSrText": { "alias": "paginationEllipsisSrText"; "required": true; "isSignal": true; }; "paginationAriaLabel": { "alias": "paginationAriaLabel"; "required": true; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "tableClass": { "alias": "tableClass"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "sorting": { "alias": "sorting"; "required": false; "isSignal": true; }; "columnFilters": { "alias": "columnFilters"; "required": false; "isSignal": true; }; "columnVisibility": { "alias": "columnVisibility"; "required": false; "isSignal": true; }; "rowSelection": { "alias": "rowSelection"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; }, { "sorting": "sortingChange"; "columnFilters": "columnFiltersChange"; "columnVisibility": "columnVisibilityChange"; "rowSelection": "rowSelectionChange"; "pagination": "paginationChange"; "selectedRowsChange": "selectedRowsChange"; }, never, never, true, never>;
1579
1799
  }
1580
1800
 
1581
1801
  /** A single entry in `<yuw-avatar>`'s `group` input, which turns it into a stack of overlapping avatars. */
@@ -2508,5 +2728,5 @@ declare class YuwSidebarInsetDirective {
2508
2728
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarInsetDirective, "main[yuwSidebarInset]", never, {}, {}, never, never, true, [{ directive: typeof i1$d.HlmSidebarInset; inputs: {}; outputs: {}; }]>;
2509
2729
  }
2510
2730
 
2511
- export { YUW_DATATABLE_FEATURES, YUW_PASSWORD_REVEAL_STATES, 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, YuwCaptionDirective, YuwCardActionDirective, YuwCardContentDirective, YuwCardDescriptionDirective, YuwCardDirective, YuwCardFooterDirective, YuwCardHeaderDirective, YuwCardImports, YuwCardTitleDirective, YuwCheckboxComponent, YuwComboboxComponent, YuwComboboxItemDirective, YuwContextMenuCheckboxDirective, YuwContextMenuCheckboxIndicatorComponent, YuwContextMenuDirective, YuwContextMenuGroupDirective, YuwContextMenuImports, YuwContextMenuItemDirective, YuwContextMenuLabelDirective, YuwContextMenuRadioDirective, YuwContextMenuRadioIndicatorComponent, YuwContextMenuSeparatorDirective, YuwContextMenuShortcutDirective, YuwContextMenuSubDirective, YuwContextMenuSubIndicatorComponent, YuwContextMenuSubTriggerDirective, YuwContextMenuTriggerDirective, YuwDatatableComponent, 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, YuwSidebarFooterDirective, YuwSidebarGroupContentDirective, YuwSidebarGroupDirective, YuwSidebarGroupLabelDirective, YuwSidebarHeaderDirective, YuwSidebarInsetDirective, YuwSidebarMenuBadgeDirective, YuwSidebarMenuButtonDirective, YuwSidebarMenuDirective, YuwSidebarMenuItemDirective, YuwSidebarMenuSubButtonDirective, YuwSidebarMenuSubDirective, YuwSidebarMenuSubItemDirective, YuwSidebarRailDirective, YuwSidebarSeparatorDirective, YuwSidebarTriggerComponent, YuwSidebarWrapperDirective, YuwSkeletonDirective, YuwSpinnerComponent, YuwSwitchComponent, YuwTBodyDirective, YuwTFootDirective, YuwTHeadDirective, YuwTabPanelDirective, YuwTableContainerDirective, YuwTableDirective, YuwTableImports, YuwTabsComponent, YuwTdDirective, YuwTextareaComponent, YuwThDirective, YuwToasterComponent, YuwTooltipDirective, YuwTrDirective, YuwValueAccessorBase, buildInputOtpGroups, cn, getPaginationRange, provideValueAccessor, totalInputOtpLength };
2512
- export type { YuwAlertDialogSizeDto, YuwAlertVariantDto, YuwAvatarGroupItemDto, YuwAvatarSizeDto, YuwBreadcrumbItemDto, YuwButtonGroupClickDto, YuwButtonGroupItemDto, YuwColorDto, YuwComboboxItemContext, YuwComboboxOptionDto, YuwComboboxValue, YuwDatatableColumnDef, YuwDatatableFeatures, YuwDatepickerModeDto, YuwDatepickerValue, YuwInputModeDto, YuwInputOtpGroupDto, YuwInputOtpModeDto, YuwInputTypeDto, YuwPaginationRangeItem, YuwPaginationSizeDto, YuwPasswordRevealStateDto, YuwPopoverAlignDto, YuwRadioOptionDto, YuwSheetSideDto, YuwSidebarCollapsibleDto, YuwSidebarSideDto, YuwSidebarVariantDto, YuwSwitchSizeDto, YuwTabItemDto, YuwTabsActivationModeDto, YuwTabsOrientationDto, YuwTabsVariantDto, YuwTextFieldContract, YuwToasterPositionDto, YuwToasterThemeDto, YuwTooltipPositionDto };
2731
+ export { DATATABLE_ALIGN_CLASS, YUW_DATATABLE_FEATURES, YUW_PASSWORD_REVEAL_STATES, 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, YuwButtonGroupTextDirective, YuwCaptionDirective, YuwCardActionDirective, YuwCardContentDirective, YuwCardDescriptionDirective, YuwCardDirective, YuwCardFooterDirective, YuwCardHeaderDirective, YuwCardImports, YuwCardTitleDirective, YuwCheckboxComponent, YuwComboboxComponent, YuwComboboxItemDirective, YuwContextMenuCheckboxDirective, YuwContextMenuCheckboxIndicatorComponent, YuwContextMenuDirective, YuwContextMenuGroupDirective, YuwContextMenuImports, YuwContextMenuItemDirective, YuwContextMenuLabelDirective, YuwContextMenuRadioDirective, YuwContextMenuRadioIndicatorComponent, YuwContextMenuSeparatorDirective, YuwContextMenuShortcutDirective, YuwContextMenuSubDirective, YuwContextMenuSubIndicatorComponent, YuwContextMenuSubTriggerDirective, YuwContextMenuTriggerDirective, YuwDatatableComponent, 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, YuwSidebarFooterDirective, YuwSidebarGroupContentDirective, YuwSidebarGroupDirective, YuwSidebarGroupLabelDirective, YuwSidebarHeaderDirective, YuwSidebarInsetDirective, YuwSidebarMenuBadgeDirective, YuwSidebarMenuButtonDirective, YuwSidebarMenuDirective, YuwSidebarMenuItemDirective, YuwSidebarMenuSubButtonDirective, YuwSidebarMenuSubDirective, YuwSidebarMenuSubItemDirective, YuwSidebarRailDirective, YuwSidebarSeparatorDirective, YuwSidebarTriggerComponent, YuwSidebarWrapperDirective, YuwSkeletonDirective, YuwSpinnerComponent, YuwSwitchComponent, YuwTBodyDirective, YuwTFootDirective, YuwTHeadDirective, YuwTabPanelDirective, YuwTableContainerDirective, YuwTableDirective, YuwTableImports, YuwTabsComponent, YuwTdDirective, YuwTextareaComponent, YuwThDirective, YuwToasterComponent, YuwTooltipDirective, YuwTrDirective, YuwValueAccessorBase, buildInputOtpGroups, cn, datatableCellVariants, datatableContainerVariants, datatableHeadVariants, datatableHeaderCellVariants, datatableRowVariants, getPaginationRange, provideValueAccessor, totalInputOtpLength };
2732
+ export type { YuwAlertDialogSizeDto, YuwAlertVariantDto, YuwAvatarGroupItemDto, YuwAvatarSizeDto, YuwBreadcrumbItemDto, YuwButtonGroupClickDto, YuwButtonGroupEntryDto, YuwButtonGroupItemDto, YuwButtonGroupTextDto, YuwColorDto, YuwComboboxItemContext, YuwComboboxOptionDto, YuwComboboxValue, YuwDatatableAlign, YuwDatatableAppearanceDto, YuwDatatableColumnDef, YuwDatatableColumnMeta, YuwDatatableFeatures, YuwDatepickerModeDto, YuwDatepickerValue, YuwInputModeDto, YuwInputOtpGroupDto, YuwInputOtpModeDto, YuwInputTypeDto, YuwPaginationRangeItem, YuwPaginationSizeDto, YuwPasswordRevealStateDto, YuwPopoverAlignDto, YuwRadioOptionDto, YuwSearchInputCollapseFromDto, YuwSheetSideDto, YuwSidebarCollapsibleDto, YuwSidebarSideDto, YuwSidebarVariantDto, YuwSwitchSizeDto, YuwTabItemDto, YuwTabsActivationModeDto, YuwTabsOrientationDto, YuwTabsVariantDto, YuwTextFieldContract, YuwToasterPositionDto, YuwToasterThemeDto, YuwTooltipPositionDto };