yukit-web 0.0.4 → 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.
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.4",
4
+ "version": "0.0.5",
5
5
  "author": {
6
6
  "name": "Yurest Solutions",
7
7
  "email": "develop@yurest.com"
@@ -19,7 +19,6 @@
19
19
  --yuw-accent-foreground: var(--background);
20
20
  --secondary: var(--neutrals-element-low);
21
21
  --secondary-foreground: var(--neutrals-overlay-accent);
22
- --border: var(--neutrals-outline-accent);
23
22
  }
24
23
 
25
24
  [data-yuw-color='secondary'] button.bg-primary:not(:disabled) {
@@ -107,6 +106,10 @@
107
106
  --input: var(--yuw-accent);
108
107
  }
109
108
 
109
+ [data-yuw-color='secondary'] {
110
+ --border: var(--neutrals-outline-accent);
111
+ }
112
+
110
113
  [data-yuw-color] button:not(:disabled) {
111
114
  --ring: var(--yuw-accent);
112
115
  }
@@ -27,6 +27,7 @@ import * as i1$a from '@spartan-ng/brain/dialog';
27
27
  import * as i1$b from '@spartan-ng/brain/alert-dialog';
28
28
  import * as i1$c from 'yukit-web/helm/attachment';
29
29
  import { HlmAttachmentAction } from 'yukit-web/helm/attachment';
30
+ import { RouterLink } from '@angular/router';
30
31
  import * as i1$d from 'yukit-web/helm/sidebar';
31
32
  export { HlmSidebarConfig as YuwSidebarConfigDto, HlmSidebarService as YuwSidebarService, SidebarVariant as YuwSidebarServiceVariantDto, provideHlmSidebarConfig as provideYuwSidebarConfig } from 'yukit-web/helm/sidebar';
32
33
 
@@ -89,6 +90,7 @@ declare abstract class YuwValueAccessorBase<T> implements ControlValueAccessor {
89
90
 
90
91
  type YuwInputTypeDto = 'text' | 'email' | 'tel' | 'url' | 'number';
91
92
  type YuwInputModeDto = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
93
+ type YuwFieldSizeDto = 'default' | 'xs' | 'sm' | 'lg';
92
94
  interface YuwTextFieldContract {
93
95
  readonly value: ModelSignal<string>;
94
96
  readonly inputId: InputSignal<string | undefined>;
@@ -209,7 +211,7 @@ interface YuwButtonGroupClickDto {
209
211
  */
210
212
  declare class YuwButtonComponent {
211
213
  private readonly _host;
212
- readonly variant: _angular_core.InputSignal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
214
+ readonly variant: _angular_core.InputSignal<"default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | null | undefined>;
213
215
  readonly size: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
214
216
  readonly color: _angular_core.InputSignal<YuwColorDto>;
215
217
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -229,7 +231,7 @@ declare class YuwButtonComponent {
229
231
  protected readonly _textClass = "bg-transparent text-foreground border-border dark:border-input";
230
232
  protected readonly _isGroup: _angular_core.Signal<boolean>;
231
233
  protected readonly _animationDisabled: _angular_core.Signal<boolean>;
232
- protected readonly _effectiveVariant: _angular_core.Signal<"secondary" | "destructive" | "default" | "outline" | "ghost" | "link" | null | undefined>;
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;
@@ -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
  /**
@@ -1976,7 +1988,7 @@ declare class YuwSheetComponent {
1976
1988
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1977
1989
  readonly closeLabel: _angular_core.InputSignal<string | undefined>;
1978
1990
  readonly panelClass: _angular_core.InputSignal<string | undefined>;
1979
- 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>;
1980
1992
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
1981
1993
  protected readonly hasFooter: _angular_core.Signal<YuwSheetFooterDirective | undefined>;
1982
1994
  protected readonly _sheetState: _angular_core.Signal<"open" | "closed">;
@@ -2043,7 +2055,7 @@ declare class YuwPopoverComponent {
2043
2055
  readonly title: _angular_core.InputSignal<string | undefined>;
2044
2056
  readonly description: _angular_core.InputSignal<string | undefined>;
2045
2057
  readonly panelClass: _angular_core.InputSignal<string | undefined>;
2046
- 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>;
2047
2059
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2048
2060
  readonly triggerTransparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
2049
2061
  readonly triggerClass: _angular_core.InputSignal<string>;
@@ -2290,7 +2302,7 @@ declare class YuwDialogComponent {
2290
2302
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
2291
2303
  readonly closeLabel: _angular_core.InputSignal<string | undefined>;
2292
2304
  readonly panelClass: _angular_core.InputSignal<string | undefined>;
2293
- 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>;
2294
2306
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2295
2307
  protected readonly hasFooter: _angular_core.Signal<YuwDialogFooterDirective | undefined>;
2296
2308
  protected readonly _dialogState: _angular_core.Signal<"open" | "closed">;
@@ -2373,9 +2385,9 @@ declare class YuwAlertDialogComponent {
2373
2385
  readonly description: _angular_core.InputSignal<string | undefined>;
2374
2386
  readonly confirmLabel: _angular_core.InputSignal<string>;
2375
2387
  readonly cancelLabel: _angular_core.InputSignal<string>;
2376
- 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>;
2377
2389
  readonly size: _angular_core.InputSignal<YuwAlertDialogSizeDto>;
2378
- 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>;
2379
2391
  readonly triggerSize: _angular_core.InputSignal<"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined>;
2380
2392
  readonly confirmed: _angular_core.OutputEmitterRef<void>;
2381
2393
  readonly cancelled: _angular_core.OutputEmitterRef<void>;
@@ -2537,6 +2549,103 @@ declare class YuwAttachmentTriggerDirective {
2537
2549
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwAttachmentTriggerDirective, "button[yuwAttachmentTrigger], a[yuwAttachmentTrigger]", never, {}, {}, never, never, true, [{ directive: typeof i1$c.HlmAttachmentTrigger; inputs: { "type": "type"; }; outputs: {}; }]>;
2538
2550
  }
2539
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
+
2540
2649
  type YuwSidebarSideDto = 'left' | 'right';
2541
2650
  type YuwSidebarVariantDto = 'sidebar' | 'floating' | 'inset';
2542
2651
  type YuwSidebarCollapsibleDto = 'offcanvas' | 'icon' | 'none';
@@ -2554,6 +2663,25 @@ type YuwSidebarCollapsibleDto = 'offcanvas' | 'icon' | 'none';
2554
2663
  * - `collapsible`: Collapse behaviour (`'offcanvas'` slides away, `'icon'` shrinks to icons, `'none'` always open). Default is `'offcanvas'`.
2555
2664
  * - `sidebarWidthMobile`: Width of the mobile slide-in sheet (any CSS length). Defaults to the helm sidebar config (`18rem`).
2556
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.
2557
2685
  *
2558
2686
  * Deliberately not exposed from the helm sidebar (add a wrapper only when a real consumer needs
2559
2687
  * them): `HlmSidebarMenuAction`, `HlmSidebarMenuSkeleton`, `HlmSidebarInput` and
@@ -2570,6 +2698,29 @@ type YuwSidebarCollapsibleDto = 'offcanvas' | 'icon' | 'none';
2570
2698
  * </div>
2571
2699
  * </yuw-sidebar>
2572
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
+ * ```
2573
2724
  */
2574
2725
  declare class YuwSidebarComponent {
2575
2726
  private readonly config;
@@ -2578,8 +2729,11 @@ declare class YuwSidebarComponent {
2578
2729
  readonly collapsible: _angular_core.InputSignal<YuwSidebarCollapsibleDto>;
2579
2730
  readonly sidebarWidthMobile: _angular_core.InputSignal<string>;
2580
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>;
2581
2735
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarComponent, never>;
2582
- 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>;
2583
2737
  }
2584
2738
 
2585
2739
  /**
@@ -2670,6 +2824,23 @@ declare class YuwSidebarMenuDirective {
2670
2824
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarMenuDirective, never>;
2671
2825
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarMenuDirective, "ul[yuwSidebarMenu]", never, {}, {}, never, never, true, [{ directive: typeof i1$d.HlmSidebarMenu; inputs: {}; outputs: {}; }]>;
2672
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
+ }
2673
2844
  /** A single entry of a sidebar menu. Apply to an `<li>`. */
2674
2845
  declare class YuwSidebarMenuItemDirective {
2675
2846
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarMenuItemDirective, never>;
@@ -2681,9 +2852,17 @@ declare class YuwSidebarMenuItemDirective {
2681
2852
  *
2682
2853
  * To label the item while the sidebar is collapsed to icons, add Spartan's `tooltip` input
2683
2854
  * alongside this directive — it comes from the underlying menu-button primitive and is only shown
2684
- * 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`.
2685
2863
  */
2686
2864
  declare class YuwSidebarMenuButtonDirective {
2865
+ constructor();
2687
2866
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuwSidebarMenuButtonDirective, never>;
2688
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: {}; }]>;
2689
2868
  }
@@ -2728,5 +2907,5 @@ declare class YuwSidebarInsetDirective {
2728
2907
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<YuwSidebarInsetDirective, "main[yuwSidebarInset]", never, {}, {}, never, never, true, [{ directive: typeof i1$d.HlmSidebarInset; inputs: {}; outputs: {}; }]>;
2729
2908
  }
2730
2909
 
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 };
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 };