yukit-web 0.0.3 → 0.0.5

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.
@@ -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';
@@ -26,6 +27,7 @@ import * as i1$a from '@spartan-ng/brain/dialog';
26
27
  import * as i1$b from '@spartan-ng/brain/alert-dialog';
27
28
  import * as i1$c from 'yukit-web/helm/attachment';
28
29
  import { HlmAttachmentAction } from 'yukit-web/helm/attachment';
30
+ import { RouterLink } from '@angular/router';
29
31
  import * as i1$d from 'yukit-web/helm/sidebar';
30
32
  export { HlmSidebarConfig as YuwSidebarConfigDto, HlmSidebarService as YuwSidebarService, SidebarVariant as YuwSidebarServiceVariantDto, provideHlmSidebarConfig as provideYuwSidebarConfig } from 'yukit-web/helm/sidebar';
31
33
 
@@ -88,6 +90,7 @@ declare abstract class YuwValueAccessorBase<T> implements ControlValueAccessor {
88
90
 
89
91
  type YuwInputTypeDto = 'text' | 'email' | 'tel' | 'url' | 'number';
90
92
  type YuwInputModeDto = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
93
+ type YuwFieldSizeDto = 'default' | 'xs' | 'sm' | 'lg';
91
94
  interface YuwTextFieldContract {
92
95
  readonly value: ModelSignal<string>;
93
96
  readonly inputId: InputSignal<string | undefined>;
@@ -207,7 +210,8 @@ interface YuwButtonGroupClickDto {
207
210
  * ```
208
211
  */
209
212
  declare class YuwButtonComponent {
210
- readonly variant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
213
+ private readonly _host;
214
+ readonly variant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
211
215
  readonly size: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
212
216
  readonly color: _angular_core.InputSignal<YuwColorDto>;
213
217
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -220,16 +224,14 @@ declare class YuwButtonComponent {
220
224
  readonly buttons: _angular_core.InputSignal<YuwButtonGroupEntryDto[] | undefined>;
221
225
  readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
222
226
  readonly groupAriaLabel: _angular_core.InputSignal<string | undefined>;
223
- /**
224
- * Consumer CSS classes for the inner button/anchor (single and link mode). Merged last with
225
- * `cn`, so they win over the component's own variant/transparent classes.
226
- */
227
+ readonly animationDisabled: _angular_core.InputSignal<boolean>;
227
228
  readonly userClass: _angular_core.InputSignal<string>;
228
229
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
229
230
  readonly buttonClicked: _angular_core.OutputEmitterRef<YuwButtonGroupClickDto>;
230
- protected readonly _textClass = "bg-transparent text-foreground";
231
+ protected readonly _textClass = "bg-transparent text-foreground border-border dark:border-input";
231
232
  protected readonly _isGroup: _angular_core.Signal<boolean>;
232
- protected readonly _effectiveVariant: _angular_core.Signal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
233
+ protected readonly _animationDisabled: _angular_core.Signal<boolean>;
234
+ protected readonly _effectiveVariant: _angular_core.Signal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
233
235
  /** Classes for the single-mode button/anchor: our variant layer + the consumer's `class`, which goes last so it wins. */
234
236
  protected readonly _btnClass: _angular_core.Signal<string>;
235
237
  private readonly _texts;
@@ -247,7 +249,7 @@ declare class YuwButtonComponent {
247
249
  kind: "text";
248
250
  label?: string;
249
251
  } | {
250
- variant: "secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined;
252
+ variant: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined;
251
253
  size: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
252
254
  color: YuwColorDto;
253
255
  disabled: boolean;
@@ -265,7 +267,7 @@ declare class YuwButtonComponent {
265
267
  protected onClick(event: MouseEvent): void;
266
268
  protected onGroupClick(button: YuwButtonGroupItemDto, event: MouseEvent): void;
267
269
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwButtonComponent, 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; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "buttonClicked": "buttonClicked"; }, ["_texts"], ["[yuwButtonIcon]", "*", "[yuwButtonIcon]", "*"], true, never>;
270
+ 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
271
  }
270
272
 
271
273
  /**
@@ -308,7 +310,7 @@ declare class YuwButtonGroupTextDirective {
308
310
  * ```
309
311
  */
310
312
  declare class YuwBadgeComponent {
311
- readonly variant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
313
+ readonly variant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
312
314
  readonly color: _angular_core.InputSignal<YuwColorDto>;
313
315
  readonly removeLabel: _angular_core.InputSignal<string | undefined>;
314
316
  readonly dot: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -454,6 +456,9 @@ type YuwComboboxValue = string | string[] | undefined;
454
456
  * - `options`: Required array of option items (`YuwComboboxOptionDto<TData>[]`).
455
457
  * - `value`: Two-way selected value(s) (`string` for single mode, `string[]` for multiple mode).
456
458
  * Emits `valueChange` on every selection change.
459
+ * - `size`: Control height (`'default'` 40px, `'xs'` 28px, `'sm'` 36px, `'lg'` 44px), matching the
460
+ * `<yuw-button>` size of the same name. Applies to whichever control shape renders; the popover
461
+ * panel and its inner search field keep their own compact sizing.
457
462
  * - `multiple`: Enables multi-selection mode with removable tags/chips.
458
463
  * - `disabled`: Disables combobox interaction.
459
464
  * - `placeholder`: Placeholder text when no option is selected.
@@ -486,6 +491,7 @@ type YuwComboboxValue = string | string[] | undefined;
486
491
  declare class YuwComboboxComponent<TData = unknown> extends YuwValueAccessorBase<YuwComboboxValue> {
487
492
  readonly options: _angular_core.InputSignal<YuwComboboxOptionDto<TData>[]>;
488
493
  readonly value: _angular_core.ModelSignal<YuwComboboxValue>;
494
+ readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
489
495
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
490
496
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
491
497
  readonly placeholder: _angular_core.InputSignal<string | undefined>;
@@ -501,6 +507,9 @@ declare class YuwComboboxComponent<TData = unknown> extends YuwValueAccessorBase
501
507
  private readonly _panel;
502
508
  protected readonly _disabled: _angular_core.Signal<boolean>;
503
509
  protected readonly _clearVisible: _angular_core.Signal<boolean>;
510
+ protected readonly _fieldClass: _angular_core.Signal<string>;
511
+ protected readonly _chipsClass: _angular_core.Signal<string>;
512
+ protected readonly _triggerClass: _angular_core.Signal<string>;
504
513
  private readonly _generatedId;
505
514
  protected readonly _controlId: _angular_core.Signal<string>;
506
515
  protected readonly _singleValue: _angular_core.Signal<string | undefined>;
@@ -516,7 +525,7 @@ declare class YuwComboboxComponent<TData = unknown> extends YuwValueAccessorBase
516
525
  protected onValueChange(next: YuwComboboxValue | null): void;
517
526
  protected _onFocusOut(event: FocusEvent): void;
518
527
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwComboboxComponent<any>, never>;
519
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwComboboxComponent<any>, "yuw-combobox", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "triggerAriaLabel": { "alias": "triggerAriaLabel"; "required": true; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "readonlyTrigger": { "alias": "readonlyTrigger"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "search": "searchChange"; }, ["itemTemplate"], never, true, never>;
528
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwComboboxComponent<any>, "yuw-combobox", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "triggerAriaLabel": { "alias": "triggerAriaLabel"; "required": true; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "readonlyTrigger": { "alias": "readonlyTrigger"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "search": "searchChange"; }, ["itemTemplate"], never, true, never>;
520
529
  }
521
530
 
522
531
  /**
@@ -598,6 +607,8 @@ declare const YuwAccordionImports: readonly [typeof YuwAccordion, typeof YuwAcco
598
607
  * - `value`: Two-way text string.
599
608
  * - `inputId`: `id` applied to the native input, for external `<label for>` association.
600
609
  * - `type`: HTML input type (`'text'`, `'email'`, `'number'`, etc.). Default is `'text'`.
610
+ * - `size`: Control height (`'default'` 40px, `'xs'` 28px, `'sm'` 36px, `'lg'` 44px), matching the
611
+ * `<yuw-button>` size of the same name. Default is `'default'`.
601
612
  * - `inputmode`: Virtual keyboard hint (e.g. `'numeric'`).
602
613
  * - `disabled`: Disables input interaction.
603
614
  * - `readonly`: Makes the field read-only.
@@ -625,6 +636,7 @@ declare class YuwInputComponent extends YuwValueAccessorBase<string> implements
625
636
  readonly value: _angular_core.ModelSignal<string>;
626
637
  readonly inputId: _angular_core.InputSignal<string | undefined>;
627
638
  readonly type: _angular_core.InputSignal<YuwInputTypeDto>;
639
+ readonly size: _angular_core.InputSignal<YuwFieldSizeDto>;
628
640
  readonly inputmode: _angular_core.InputSignal<YuwInputModeDto | undefined>;
629
641
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
630
642
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -649,7 +661,7 @@ declare class YuwInputComponent extends YuwValueAccessorBase<string> implements
649
661
  protected _emptyValue(): string;
650
662
  protected onChange(): void;
651
663
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwInputComponent, never>;
652
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwInputComponent, "yuw-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "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; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "committed": "committed"; }, ["_leftAddons", "_rightAddons"], ["yuw-left-addon", "yuw-right-addon"], true, never>;
664
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwInputComponent, "yuw-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "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; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "committed": "committed"; }, ["_leftAddons", "_rightAddons"], ["yuw-left-addon", "yuw-right-addon"], true, never>;
653
665
  }
654
666
 
655
667
  /**
@@ -754,6 +766,8 @@ type YuwSearchInputCollapseFromDto = 'left' | 'right';
754
766
  * app is responsible for translating.
755
767
  * - `expandedWidth`: CSS width the field animates out to, e.g. `'18rem'`. Default is `'16rem'`.
756
768
  * Collapsible mode only.
769
+ * - `transparent`: Removes the field's resting border and background so it sits directly on its
770
+ * container — for search inside a toolbar or a colored surface. The focus and invalid rings stay.
757
771
  * - `class`: Extra classes merged onto the input group.
758
772
  *
759
773
  * Outputs:
@@ -797,6 +811,7 @@ declare class YuwSearchInputComponent extends YuwValueAccessorBase<string> imple
797
811
  readonly collapseFrom: _angular_core.InputSignal<YuwSearchInputCollapseFromDto | undefined>;
798
812
  readonly expandedWidth: _angular_core.InputSignal<string>;
799
813
  readonly expandAriaLabel: _angular_core.InputSignal<string | undefined>;
814
+ readonly transparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
800
815
  readonly userClass: _angular_core.InputSignal<string>;
801
816
  private readonly _open;
802
817
  protected readonly _autoId: string;
@@ -837,7 +852,7 @@ declare class YuwSearchInputComponent extends YuwValueAccessorBase<string> imple
837
852
  protected onEscape(): void;
838
853
  protected onBlur(): void;
839
854
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSearchInputComponent, never>;
840
- 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; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "searched": "searched"; "committed": "committed"; }, never, never, true, never>;
855
+ 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>;
841
856
  }
842
857
 
843
858
  /**
@@ -1601,6 +1616,37 @@ declare class YuwCaptionDirective {
1601
1616
  /** Every table part, for a consumer's `imports`. */
1602
1617
  declare const YuwTableImports: readonly [typeof YuwTableContainerDirective, typeof YuwTableDirective, typeof YuwTHeadDirective, typeof YuwTBodyDirective, typeof YuwTFootDirective, typeof YuwTrDirective, typeof YuwThDirective, typeof YuwTdDirective, typeof YuwCaptionDirective];
1603
1618
 
1619
+ type YuwDatatableAlign = 'start' | 'center' | 'end';
1620
+ /**
1621
+ * Class maps for `yuw-datatable`, layered on top of the Hlm table directives' own classes.
1622
+ *
1623
+ * `DATATABLE_ALIGN_CLASS` is keyed by a column's `meta.align` and shared by header and body cells,
1624
+ * so a column declares its alignment once and both honour it; `start` maps to an empty string
1625
+ * rather than re-stating what `HlmTh`/`HlmTd` already apply.
1626
+ *
1627
+ * The `appearance` maps are split per element because the treatment is not uniform: `card` frames
1628
+ * the container so the header tint clips to the radius instead of squaring off against a
1629
+ * consumer's wrapper, then drops the header's bottom border, since a rule underneath a filled
1630
+ * strip reads as a seam. `default` resolves to an empty string throughout, leaving a table that
1631
+ * does not opt in byte-identical to what the Hlm directives render alone.
1632
+ */
1633
+ declare const DATATABLE_ALIGN_CLASS: Record<YuwDatatableAlign, string>;
1634
+ declare const datatableContainerVariants: (props?: ({
1635
+ appearance?: "default" | "card" | null | undefined;
1636
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1637
+ declare const datatableHeadVariants: (props?: ({
1638
+ appearance?: "default" | "card" | null | undefined;
1639
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1640
+ declare const datatableHeaderCellVariants: (props?: ({
1641
+ appearance?: "default" | "card" | null | undefined;
1642
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1643
+ declare const datatableCellVariants: (props?: ({
1644
+ appearance?: "default" | "card" | null | undefined;
1645
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1646
+ declare const datatableRowVariants: (props?: ({
1647
+ appearance?: "default" | "card" | null | undefined;
1648
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1649
+
1604
1650
  /**
1605
1651
  * The feature set `yuw-datatable` enables.
1606
1652
  *
@@ -1611,14 +1657,28 @@ declare const YuwTableImports: readonly [typeof YuwTableContainerDirective, type
1611
1657
  * (`getState`, `getCanNextPage`, …) missing from the instance type.
1612
1658
  */
1613
1659
  interface YuwDatatableFeatures {
1660
+ columnMeta: YuwDatatableColumnMeta;
1614
1661
  columnFilteringFeature: typeof columnFilteringFeature;
1615
1662
  columnVisibilityFeature: typeof columnVisibilityFeature;
1616
1663
  rowPaginationFeature: typeof rowPaginationFeature;
1617
1664
  rowSelectionFeature: typeof rowSelectionFeature;
1618
1665
  rowSortingFeature: typeof rowSortingFeature;
1619
1666
  }
1667
+ /**
1668
+ * Per-column options `yuw-datatable` reads off TanStack's `meta`, where `align` sets the
1669
+ * horizontal alignment of that column's header and body cells and defaults to `'start'`.
1670
+ *
1671
+ * TanStack resolves `columnDef.meta` from a feature set's own `columnMeta` slot when it declares
1672
+ * one, falling back to its global declaration-merged `ColumnMeta` otherwise. Declaring the slot on
1673
+ * `YuwDatatableFeatures` is what constrains our columns to this shape — without it, `meta` is the
1674
+ * empty global interface, which accepts any object and would catch no typo.
1675
+ */
1676
+ interface YuwDatatableColumnMeta {
1677
+ align?: YuwDatatableAlign;
1678
+ }
1620
1679
  declare const YUW_DATATABLE_FEATURES: YuwDatatableFeatures;
1621
1680
  type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatures, TData>;
1681
+ type YuwDatatableAppearanceDto = 'default' | 'card';
1622
1682
  /**
1623
1683
  * Full-featured data table component supporting sorting, filtering, pagination, row selection,
1624
1684
  * loading skeleton state, and column visibility.
@@ -1649,6 +1709,15 @@ type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatur
1649
1709
  * responsible for translating; when absent, no caption is rendered.
1650
1710
  * - `tableClass`: Extra classes merged onto the inner `<table>` element. The host is
1651
1711
  * `display: contents`, so a plain `class` on `<yuw-datatable>` would never reach the table.
1712
+ * - `appearance`: Visual treatment (`YuwDatatableAppearanceDto`). Default is `'default'` —
1713
+ * Spartan's plain table. `'card'` frames the table in its own rounded bordered surface with a
1714
+ * tinted uppercase header strip and taller rows; the consumer needs no wrapper of its own.
1715
+ *
1716
+ * Per-column, through TanStack's `meta`:
1717
+ * - `meta.align`: `'start' | 'center' | 'end'`, applied to both the header and body cells of that
1718
+ * column. Default is `'start'`. Alignment and the appearance's own cell classes are resolved
1719
+ * once into a per-column-id lookup rather than in the template, because a template method would
1720
+ * re-run the class merge for every cell on every change-detection pass.
1652
1721
  * - `sorting`: Two-way sorting state (`SortingState`).
1653
1722
  * - `columnFilters`: Two-way column filters state (`ColumnFiltersState`).
1654
1723
  * - `columnVisibility`: Two-way column visibility state (`ColumnVisibilityState`).
@@ -1665,6 +1734,7 @@ type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatur
1665
1734
  * [columns]="columns"
1666
1735
  * [data]="users"
1667
1736
  * [(sorting)]="sorting"
1737
+ * appearance="card"
1668
1738
  * paginated
1669
1739
  * selectable
1670
1740
  * previousPageLabel="Página anterior"
@@ -1672,6 +1742,13 @@ type YuwDatatableColumnDef<TData extends RowData> = ColumnDef<YuwDatatableFeatur
1672
1742
  * (selectedRowsChange)="onSelect($event)"
1673
1743
  * />
1674
1744
  * ```
1745
+ *
1746
+ * ```ts
1747
+ * const columns: YuwDatatableColumnDef<Client>[] = [
1748
+ * { accessorKey: 'name', header: 'Nombre' },
1749
+ * { accessorKey: 'cif', header: 'CIF', meta: { align: 'center' } },
1750
+ * ];
1751
+ * ```
1675
1752
  */
1676
1753
  declare class YuwDatatableComponent<TData extends RowData> implements OnInit {
1677
1754
  readonly columns: _angular_core.InputSignal<YuwDatatableColumnDef<TData>[]>;
@@ -1688,6 +1765,7 @@ declare class YuwDatatableComponent<TData extends RowData> implements OnInit {
1688
1765
  readonly paginationAriaLabel: _angular_core.InputSignal<string>;
1689
1766
  readonly caption: _angular_core.InputSignal<string | undefined>;
1690
1767
  readonly tableClass: _angular_core.InputSignal<string | undefined>;
1768
+ readonly appearance: _angular_core.InputSignal<YuwDatatableAppearanceDto>;
1691
1769
  readonly sorting: _angular_core.ModelSignal<SortingState>;
1692
1770
  readonly columnFilters: _angular_core.ModelSignal<ColumnFiltersState>;
1693
1771
  readonly columnVisibility: _angular_core.ModelSignal<ColumnVisibilityState>;
@@ -1719,9 +1797,17 @@ declare class YuwDatatableComponent<TData extends RowData> implements OnInit {
1719
1797
  protected readonly _columnCount: _angular_core.Signal<number>;
1720
1798
  protected readonly _skeletonRows: _angular_core.Signal<number[]>;
1721
1799
  protected readonly _tableClass: _angular_core.Signal<string>;
1800
+ protected readonly _containerClass: _angular_core.Signal<string>;
1801
+ protected readonly _headClass: _angular_core.Signal<string>;
1802
+ protected readonly _rowClass: _angular_core.Signal<string>;
1803
+ protected readonly _cellClasses: _angular_core.Signal<Map<string, {
1804
+ readonly header: string;
1805
+ readonly cell: string;
1806
+ }>>;
1722
1807
  protected readonly _ariaSort: Record<'asc' | 'desc', 'ascending' | 'descending'>;
1808
+ protected readonly _sortIcon: Record<'asc' | 'desc' | 'none', string>;
1723
1809
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwDatatableComponent<any>, never>;
1724
- 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; }; "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>;
1810
+ 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>;
1725
1811
  }
1726
1812
 
1727
1813
  /** A single entry in `<yuw-avatar>`'s `group` input, which turns it into a stack of overlapping avatars. */
@@ -1902,7 +1988,7 @@ declare class YuwSheetComponent {
1902
1988
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1903
1989
  readonly closeLabel: _angular_core.InputSignal<string | undefined>;
1904
1990
  readonly panelClass: _angular_core.InputSignal<string | undefined>;
1905
- readonly triggerVariant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
1991
+ readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
1906
1992
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
1907
1993
  protected readonly hasFooter: _angular_core.Signal<YuwSheetFooterDirective | undefined>;
1908
1994
  protected readonly _sheetState: _angular_core.Signal<"open" | "closed">;
@@ -1969,7 +2055,7 @@ declare class YuwPopoverComponent {
1969
2055
  readonly title: _angular_core.InputSignal<string | undefined>;
1970
2056
  readonly description: _angular_core.InputSignal<string | undefined>;
1971
2057
  readonly panelClass: _angular_core.InputSignal<string | undefined>;
1972
- readonly triggerVariant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
2058
+ readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
1973
2059
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
1974
2060
  readonly triggerTransparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
1975
2061
  readonly triggerClass: _angular_core.InputSignal<string>;
@@ -2216,7 +2302,7 @@ declare class YuwDialogComponent {
2216
2302
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
2217
2303
  readonly closeLabel: _angular_core.InputSignal<string | undefined>;
2218
2304
  readonly panelClass: _angular_core.InputSignal<string | undefined>;
2219
- readonly triggerVariant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
2305
+ readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2220
2306
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2221
2307
  protected readonly hasFooter: _angular_core.Signal<YuwDialogFooterDirective | undefined>;
2222
2308
  protected readonly _dialogState: _angular_core.Signal<"open" | "closed">;
@@ -2299,9 +2385,9 @@ declare class YuwAlertDialogComponent {
2299
2385
  readonly description: _angular_core.InputSignal<string | undefined>;
2300
2386
  readonly confirmLabel: _angular_core.InputSignal<string>;
2301
2387
  readonly cancelLabel: _angular_core.InputSignal<string>;
2302
- readonly confirmVariant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
2388
+ readonly confirmVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2303
2389
  readonly size: _angular_core.InputSignal<YuwAlertDialogSizeDto>;
2304
- readonly triggerVariant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
2390
+ readonly triggerVariant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
2305
2391
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2306
2392
  readonly confirmed: _angular_core.OutputEmitterRef<void>;
2307
2393
  readonly cancelled: _angular_core.OutputEmitterRef<void>;
@@ -2463,6 +2549,103 @@ declare class YuwAttachmentTriggerDirective {
2463
2549
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwAttachmentTriggerDirective, "button[yuwAttachmentTrigger], a[yuwAttachmentTrigger]", never, {}, {}, never, never, true, [{ directive: typeof i1$c.HlmAttachmentTrigger; inputs: { "type": "type"; }; outputs: {}; }]>;
2464
2550
  }
2465
2551
 
2552
+ /**
2553
+ * Where a sidebar entry points.
2554
+ *
2555
+ * Split across two target fields rather than one, because they drive different mechanisms: `route`
2556
+ * binds `[routerLink]` (in-app navigation, and the source of the entry's automatic active state),
2557
+ * `href` binds a plain `[href]` (full page load, external URLs). `helm/breadcrumb` shows the cost of
2558
+ * conflating them — its DTO field is named `href` but is wired to `routerLink`, so a consumer
2559
+ * passing an external URL gets silent router navigation to a route that doesn't exist.
2560
+ *
2561
+ * An entry with neither renders as a `<button>` and reports through `itemClicked`.
2562
+ *
2563
+ * - `route`: in-app target, accepting anything `[routerLink]` does, including a command array.
2564
+ * - `href`: external or non-router target, bound to a plain anchor.
2565
+ * - `target`: `target` attribute, only meaningful alongside `href`.
2566
+ * - `exact`: whether the active state requires a full URL match, mapping to
2567
+ * `routerLinkActiveOptions.exact`; applies only to a `route`. Default is `false`, so a parent
2568
+ * route stays highlighted while a child is open — set it on a root path like `/` that would
2569
+ * otherwise match everything.
2570
+ */
2571
+ interface YuwSidebarNavigationDto {
2572
+ route?: RouterLink['routerLink'];
2573
+ href?: string;
2574
+ target?: string;
2575
+ exact?: boolean;
2576
+ }
2577
+ /**
2578
+ * A submenu entry, nested under a {@link YuwSidebarItemDto}.
2579
+ *
2580
+ * Deliberately not the same type as its parent: the helm sub-button renders no icon, no badge and
2581
+ * no further nesting, so reusing `YuwSidebarItemDto` here would hand consumers three fields that
2582
+ * silently do nothing. Same reasoning as `YuwButtonGroupTextDto`.
2583
+ *
2584
+ * `label` is supplied already translated — the sidebar owns no user-facing copy.
2585
+ */
2586
+ interface YuwSidebarSubItemDto extends YuwSidebarNavigationDto {
2587
+ id: string;
2588
+ label: string;
2589
+ disabled?: boolean;
2590
+ }
2591
+ /**
2592
+ * A single entry of a sidebar menu.
2593
+ *
2594
+ * Renders an anchor when it carries a `route` or `href`, and a `<button>` otherwise — the data says
2595
+ * which it is, so there is no `kind` field to keep in sync with it.
2596
+ *
2597
+ * - `label`: text of the entry, supplied already translated — the sidebar owns no user-facing copy.
2598
+ * - `icon`: name of a registered `@ng-icons` icon. Because the *consumer* chooses this name, the
2599
+ * consuming app is responsible for `provideIcons()`-ing it; `provideIcons` is a component-level
2600
+ * provider, so a name registered on the component hosting the sidebar resolves here through the
2601
+ * injector chain. Same contract as `<yuw-spinner icon="…">`.
2602
+ * - `badge`: short trailing count or status, hidden automatically while collapsed to icons.
2603
+ * - `tooltip`: label shown while collapsed to icons, where `label` is not visible. Falls back to
2604
+ * `label` when absent, so the common case needs no second field.
2605
+ */
2606
+ interface YuwSidebarItemDto extends YuwSidebarNavigationDto {
2607
+ id: string;
2608
+ label: string;
2609
+ icon?: string;
2610
+ badge?: string;
2611
+ tooltip?: string;
2612
+ disabled?: boolean;
2613
+ children?: YuwSidebarSubItemDto[];
2614
+ }
2615
+ /**
2616
+ * A titled section of the sidebar.
2617
+ *
2618
+ * `label` is heading text, already translated; omitting it renders the menu with no heading.
2619
+ * `separatorAfter` draws a divider after the group — for separating a settings block from the
2620
+ * main nav.
2621
+ */
2622
+ interface YuwSidebarGroupDto {
2623
+ id: string;
2624
+ label?: string;
2625
+ items: YuwSidebarItemDto[];
2626
+ separatorAfter?: boolean;
2627
+ }
2628
+ /**
2629
+ * What `<yuw-sidebar>`'s `content` and `footer` inputs accept.
2630
+ *
2631
+ * An object rather than a bare `YuwSidebarGroupDto[]` so the shape can grow without a breaking
2632
+ * change to the input's type.
2633
+ */
2634
+ interface YuwSidebarContentDto {
2635
+ groups: YuwSidebarGroupDto[];
2636
+ }
2637
+ /**
2638
+ * What `<yuw-sidebar>` emits from `itemClicked`.
2639
+ *
2640
+ * Only entries with neither `route` nor `href` emit: a navigating entry's click is the router's or
2641
+ * the browser's to handle. Carries the `id` rather than the whole entry, matching
2642
+ * `YuwButtonGroupClickDto`.
2643
+ */
2644
+ interface YuwSidebarItemClickDto {
2645
+ id: string;
2646
+ event: MouseEvent;
2647
+ }
2648
+
2466
2649
  type YuwSidebarSideDto = 'left' | 'right';
2467
2650
  type YuwSidebarVariantDto = 'sidebar' | 'floating' | 'inset';
2468
2651
  type YuwSidebarCollapsibleDto = 'offcanvas' | 'icon' | 'none';
@@ -2480,6 +2663,25 @@ type YuwSidebarCollapsibleDto = 'offcanvas' | 'icon' | 'none';
2480
2663
  * - `collapsible`: Collapse behaviour (`'offcanvas'` slides away, `'icon'` shrinks to icons, `'none'` always open). Default is `'offcanvas'`.
2481
2664
  * - `sidebarWidthMobile`: Width of the mobile slide-in sheet (any CSS length). Defaults to the helm sidebar config (`18rem`).
2482
2665
  * - `sidebarContainerClass`: Extra classes merged onto the desktop fixed container (the helm merges them last, so they win).
2666
+ * - `content`: Renders the scrollable nav from a `YuwSidebarContentDto` instead of hand-written
2667
+ * markup. Groups → items → optional one level of children. An item with a `route` becomes a
2668
+ * `[routerLink]` anchor whose active state, `aria-current` and pointer-lock resolve automatically
2669
+ * from `routerLinkActive`; one with an `href` becomes a plain anchor; one with neither becomes a
2670
+ * button that reports through `itemClicked`.
2671
+ * - `footer`: The same, rendered into the footer region.
2672
+ *
2673
+ * Outputs:
2674
+ * - `itemClicked`: Emits `{id, event}` when a non-navigating entry (no `route`, no `href`) is
2675
+ * activated, in either `content` or `footer`.
2676
+ *
2677
+ * The two forms compose rather than exclude each other, unlike `<yuw-button>`'s `buttons` input
2678
+ * which drops projected content when set. `content`/`footer` render their own region; anything
2679
+ * projected still renders, so a data-driven nav can sit alongside a hand-written block. To place
2680
+ * extra markup *inside* the object-rendered regions — where it scrolls with the nav and inherits the
2681
+ * content area's flex sizing — mark it `[yuwSidebarContentExtra]` or `[yuwSidebarFooterExtra]`; the
2682
+ * default slot keeps everything else, so existing projection-only usage is unaffected.
2683
+ *
2684
+ * `header` has no object form: it is a free-form branding area with no repeating structure to model.
2483
2685
  *
2484
2686
  * Deliberately not exposed from the helm sidebar (add a wrapper only when a real consumer needs
2485
2687
  * them): `HlmSidebarMenuAction`, `HlmSidebarMenuSkeleton`, `HlmSidebarInput` and
@@ -2496,6 +2698,29 @@ type YuwSidebarCollapsibleDto = 'offcanvas' | 'icon' | 'none';
2496
2698
  * </div>
2497
2699
  * </yuw-sidebar>
2498
2700
  * ```
2701
+ *
2702
+ * Object form:
2703
+ * ```html
2704
+ * <yuw-sidebar collapsible="icon" [content]="nav" [footer]="footerNav"
2705
+ * (itemClicked)="onAction($event.id)">
2706
+ * <div yuwSidebarHeader>Yurest</div>
2707
+ * </yuw-sidebar>
2708
+ * ```
2709
+ * ```ts
2710
+ * nav: YuwSidebarContentDto = {
2711
+ * groups: [{
2712
+ * id: 'management',
2713
+ * label: 'Gestión',
2714
+ * items: [
2715
+ * {id: 'orders', label: 'Pedidos', icon: 'lucideReceipt', route: '/orders', badge: '12'},
2716
+ * {id: 'reports', label: 'Informes', icon: 'lucideChartLine', children: [
2717
+ * {id: 'sales', label: 'Ventas', route: '/reports/sales'},
2718
+ * ]},
2719
+ * {id: 'sync', label: 'Sincronizar'},
2720
+ * ],
2721
+ * }],
2722
+ * };
2723
+ * ```
2499
2724
  */
2500
2725
  declare class YuwSidebarComponent {
2501
2726
  private readonly config;
@@ -2504,8 +2729,11 @@ declare class YuwSidebarComponent {
2504
2729
  readonly collapsible: _angular_core.InputSignal<YuwSidebarCollapsibleDto>;
2505
2730
  readonly sidebarWidthMobile: _angular_core.InputSignal<string>;
2506
2731
  readonly sidebarContainerClass: _angular_core.InputSignal<string>;
2732
+ readonly content: _angular_core.InputSignal<YuwSidebarContentDto | undefined>;
2733
+ readonly footer: _angular_core.InputSignal<YuwSidebarContentDto | undefined>;
2734
+ readonly itemClicked: _angular_core.OutputEmitterRef<YuwSidebarItemClickDto>;
2507
2735
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarComponent, never>;
2508
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSidebarComponent, "yuw-sidebar", never, { "side": { "alias": "side"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "sidebarWidthMobile": { "alias": "sidebarWidthMobile"; "required": false; "isSignal": true; }; "sidebarContainerClass": { "alias": "sidebarContainerClass"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2736
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuwSidebarComponent, "yuw-sidebar", never, { "side": { "alias": "side"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "sidebarWidthMobile": { "alias": "sidebarWidthMobile"; "required": false; "isSignal": true; }; "sidebarContainerClass": { "alias": "sidebarContainerClass"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "footer": { "alias": "footer"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, ["[yuwSidebarHeader], yuw-sidebar-header", "[yuwSidebarContentExtra]", "*", "[yuwSidebarFooterExtra]"], true, never>;
2509
2737
  }
2510
2738
 
2511
2739
  /**
@@ -2596,6 +2824,23 @@ declare class YuwSidebarMenuDirective {
2596
2824
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarMenuDirective, never>;
2597
2825
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarMenuDirective, "ul[yuwSidebarMenu]", never, {}, {}, never, never, true, [{ directive: typeof i1$d.HlmSidebarMenu; inputs: {}; outputs: {}; }]>;
2598
2826
  }
2827
+ /**
2828
+ * Marks projected markup that belongs *inside* the region `<yuw-sidebar>` renders from its `content`
2829
+ * input, after the object-driven groups — a hand-written group alongside a data-driven nav.
2830
+ *
2831
+ * Only meaningful when `content` is set; without it the marker is inert and the element falls
2832
+ * through to the default slot like any other projected node. Carries no styling of its own: it is a
2833
+ * projection selector, and whatever it is applied to (usually a `[yuwSidebarGroup]`) keeps its own.
2834
+ */
2835
+ declare class YuwSidebarContentExtraDirective {
2836
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarContentExtraDirective, never>;
2837
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarContentExtraDirective, "[yuwSidebarContentExtra]", never, {}, {}, never, never, true, never>;
2838
+ }
2839
+ /** The `footer` counterpart of {@link YuwSidebarContentExtraDirective}. */
2840
+ declare class YuwSidebarFooterExtraDirective {
2841
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarFooterExtraDirective, never>;
2842
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarFooterExtraDirective, "[yuwSidebarFooterExtra]", never, {}, {}, never, never, true, never>;
2843
+ }
2599
2844
  /** A single entry of a sidebar menu. Apply to an `<li>`. */
2600
2845
  declare class YuwSidebarMenuItemDirective {
2601
2846
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarMenuItemDirective, never>;
@@ -2607,9 +2852,17 @@ declare class YuwSidebarMenuItemDirective {
2607
2852
  *
2608
2853
  * To label the item while the sidebar is collapsed to icons, add Spartan's `tooltip` input
2609
2854
  * alongside this directive — it comes from the underlying menu-button primitive and is only shown
2610
- * in the collapsed state.
2855
+ * in the collapsed state. It cannot be re-forwarded through this wrapper's `hostDirectives`
2856
+ * (`tooltip` is the alias `HlmSidebarMenuButton` gives its own composed `BrnTooltip`, not a public
2857
+ * input of its own), so bind it with `[attr.tooltip]` rather than `[tooltip]` when the value comes
2858
+ * from an expression.
2859
+ *
2860
+ * Carries `yuwSidebarMenuButtonClass`, our hover/expanded colouring and collapsed-to-icon geometry.
2861
+ * The `classes()` registration below runs after the composed `HlmSidebarMenuButton`'s own, so our
2862
+ * classes merge last and win — see `sidebar.variants.ts`.
2611
2863
  */
2612
2864
  declare class YuwSidebarMenuButtonDirective {
2865
+ constructor();
2613
2866
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarMenuButtonDirective, never>;
2614
2867
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarMenuButtonDirective, "button[yuwSidebarMenuButton], a[yuwSidebarMenuButton]", never, {}, {}, never, never, true, [{ directive: typeof i1$d.HlmSidebarMenuButton; inputs: { "variant": "variant"; "size": "size"; "isActive": "isActive"; "closeMobileSidebarOnClick": "closeMobileSidebarOnClick"; }; outputs: {}; }]>;
2615
2868
  }
@@ -2654,5 +2907,5 @@ declare class YuwSidebarInsetDirective {
2654
2907
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarInsetDirective, "main[yuwSidebarInset]", never, {}, {}, never, never, true, [{ directive: typeof i1$d.HlmSidebarInset; inputs: {}; outputs: {}; }]>;
2655
2908
  }
2656
2909
 
2657
- 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, 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, getPaginationRange, provideValueAccessor, totalInputOtpLength };
2658
- export type { YuwAlertDialogSizeDto, YuwAlertVariantDto, YuwAvatarGroupItemDto, YuwAvatarSizeDto, YuwBreadcrumbItemDto, YuwButtonGroupClickDto, YuwButtonGroupEntryDto, YuwButtonGroupItemDto, YuwButtonGroupTextDto, YuwColorDto, YuwComboboxItemContext, YuwComboboxOptionDto, YuwComboboxValue, YuwDatatableColumnDef, 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 };
2910
+ 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, YuwSidebarContentExtraDirective, YuwSidebarFooterDirective, YuwSidebarFooterExtraDirective, 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 };
2911
+ export type { YuwAlertDialogSizeDto, YuwAlertVariantDto, YuwAvatarGroupItemDto, YuwAvatarSizeDto, YuwBreadcrumbItemDto, YuwButtonGroupClickDto, YuwButtonGroupEntryDto, YuwButtonGroupItemDto, YuwButtonGroupTextDto, YuwColorDto, YuwComboboxItemContext, YuwComboboxOptionDto, YuwComboboxValue, YuwDatatableAlign, YuwDatatableAppearanceDto, YuwDatatableColumnDef, YuwDatatableColumnMeta, YuwDatatableFeatures, YuwDatepickerModeDto, YuwDatepickerValue, YuwFieldSizeDto, YuwInputModeDto, YuwInputOtpGroupDto, YuwInputOtpModeDto, YuwInputTypeDto, YuwPaginationRangeItem, YuwPaginationSizeDto, YuwPasswordRevealStateDto, YuwPopoverAlignDto, YuwRadioOptionDto, YuwSearchInputCollapseFromDto, YuwSheetSideDto, YuwSidebarCollapsibleDto, YuwSidebarContentDto, YuwSidebarGroupDto, YuwSidebarItemClickDto, YuwSidebarItemDto, YuwSidebarSideDto, YuwSidebarSubItemDto, YuwSidebarVariantDto, YuwSwitchSizeDto, YuwTabItemDto, YuwTabsActivationModeDto, YuwTabsOrientationDto, YuwTabsVariantDto, YuwTextFieldContract, YuwToasterPositionDto, YuwToasterThemeDto, YuwTooltipPositionDto };