@life-cockpit/angular-ui-kit 1.5.0 → 1.6.1

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,6 +1,6 @@
1
1
  {
2
2
  "name": "@life-cockpit/angular-ui-kit",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "Life Cockpit Design System - Angular UI component library",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -2853,6 +2853,12 @@ declare class HeaderComponent {
2853
2853
  * Logo image source URL
2854
2854
  */
2855
2855
  logo: string;
2856
+ /**
2857
+ * Whether to show the logo in the header.
2858
+ * Set to false when the sidenav owns the logo (sidebar-first layout).
2859
+ * @default true
2860
+ */
2861
+ showLogo: boolean;
2856
2862
  /**
2857
2863
  * Optional title to display next to logo
2858
2864
  */
@@ -2960,7 +2966,7 @@ declare class HeaderComponent {
2960
2966
  */
2961
2967
  onMenuItemClick(item: MenuItem): void;
2962
2968
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderComponent, never>;
2963
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderComponent, "lc-header", never, { "theme": { "alias": "theme"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "userEmail": { "alias": "userEmail"; "required": false; }; "userName": { "alias": "userName"; "required": false; }; "showHamburger": { "alias": "showHamburger"; "required": false; }; "showThemeButton": { "alias": "showThemeButton"; "required": false; }; "contextName": { "alias": "contextName"; "required": false; }; "contextLabel": { "alias": "contextLabel"; "required": false; }; "menuSize": { "alias": "menuSize"; "required": false; }; "showProfileMenuItem": { "alias": "showProfileMenuItem"; "required": false; }; }, { "hamburgerClick": "hamburgerClick"; "themeToggleClick": "themeToggleClick"; "logoutClick": "logoutClick"; "profileClick": "profileClick"; "contextClick": "contextClick"; }, never, never, true, never>;
2969
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderComponent, "lc-header", never, { "theme": { "alias": "theme"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "showLogo": { "alias": "showLogo"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "userEmail": { "alias": "userEmail"; "required": false; }; "userName": { "alias": "userName"; "required": false; }; "showHamburger": { "alias": "showHamburger"; "required": false; }; "showThemeButton": { "alias": "showThemeButton"; "required": false; }; "contextName": { "alias": "contextName"; "required": false; }; "contextLabel": { "alias": "contextLabel"; "required": false; }; "menuSize": { "alias": "menuSize"; "required": false; }; "showProfileMenuItem": { "alias": "showProfileMenuItem"; "required": false; }; }, { "hamburgerClick": "hamburgerClick"; "themeToggleClick": "themeToggleClick"; "logoutClick": "logoutClick"; "profileClick": "profileClick"; "contextClick": "contextClick"; }, never, never, true, never>;
2964
2970
  }
2965
2971
 
2966
2972
  type PaginationSize = 'sm' | 'md' | 'lg';
@@ -3030,28 +3036,53 @@ type SidenavMode = 'drawer' | 'docked';
3030
3036
  *
3031
3037
  * Features:
3032
3038
  * - Drawer (overlay) and docked (persistent) modes
3033
- * - Collapsed icon-rail mode (narrow 56px sidebar with icons only)
3034
- * - Hierarchical navigation with collapsible groups
3035
- * - Section headlines for item grouping
3036
- * - Active route highlighting
3037
- * - Keyboard navigation support
3039
+ * - Responsive mobile mode docked automatically switches to drawer below a configurable breakpoint
3040
+ * - Collapsed icon-rail mode (narrow 56px sidebar with icons only and hover tooltips)
3041
+ * - Integrated logo area with collapse-toggle (sidebar-first layouts)
3042
+ * - Hierarchical navigation with collapsible groups (up to 3 levels)
3043
+ * - Section headlines for item grouping with optional action buttons
3044
+ * - Action buttons on any item (hover-reveal)
3045
+ * - Badge support on items (count / status indicator)
3046
+ * - Active route highlighting (no hover color change on active items)
3047
+ * - Keyboard navigation support (Escape closes drawer)
3038
3048
  * - Configurable width and position (left/right)
3039
3049
  * - Optional backdrop overlay
3050
+ * - Theme variants: auto, light, dark (with teal accent for dark mode)
3040
3051
  * - Accessible with ARIA navigation role
3041
3052
  *
3042
3053
  * @example
3043
3054
  * ```html
3044
- * <lc-sidenav [isOpen]="isOpen" mode="docked" [collapsed]="isCollapsed" [items]="navItems"
3045
- * (closed)="isOpen = false" (itemClicked)="navigate($event)" />
3055
+ * <lc-sidenav
3056
+ * [isOpenInput]="isOpen"
3057
+ * modeInput="docked"
3058
+ * [collapsedInput]="isCollapsed"
3059
+ * [showLogoInput]="true"
3060
+ * [mobileBreakpointInput]="768"
3061
+ * [itemsInput]="navItems"
3062
+ * activeRouteInput="/dashboard"
3063
+ * theme="dark"
3064
+ * (closed)="isOpen = false"
3065
+ * (itemClicked)="navigate($event)"
3066
+ * (itemAction)="onAction($event)" />
3046
3067
  * ```
3047
3068
  */
3048
- declare class SidenavComponent {
3069
+ declare class SidenavComponent implements OnInit, OnDestroy {
3049
3070
  /** Whether the sidenav is collapsed to icon-only rail */
3050
3071
  collapsed: _angular_core.WritableSignal<boolean>;
3072
+ /** Whether to show the logo at the top of the sidenav */
3073
+ showLogo: _angular_core.WritableSignal<boolean>;
3051
3074
  /** Whether the sidenav is open */
3052
3075
  isOpen: _angular_core.WritableSignal<boolean>;
3053
3076
  /** Display mode: 'drawer' (overlay) or 'docked' (persistent sidebar) */
3054
3077
  mode: _angular_core.WritableSignal<SidenavMode>;
3078
+ /** Mobile breakpoint in pixels. Below this width, docked mode switches to drawer. */
3079
+ mobileBreakpoint: _angular_core.WritableSignal<number>;
3080
+ /** Whether the viewport is below the mobile breakpoint */
3081
+ isMobile: _angular_core.WritableSignal<boolean>;
3082
+ /** Effective mode: switches docked → drawer on mobile */
3083
+ effectiveMode: _angular_core.Signal<SidenavMode>;
3084
+ private mediaQuery;
3085
+ private mediaHandler;
3055
3086
  /** Position of the sidenav (left or right) */
3056
3087
  position: _angular_core.WritableSignal<SidenavPosition>;
3057
3088
  /** Width of the sidenav drawer */
@@ -3106,6 +3137,14 @@ declare class SidenavComponent {
3106
3137
  * Input setter for collapsed
3107
3138
  */
3108
3139
  set collapsedInput(value: boolean);
3140
+ /**
3141
+ * Input setter for showLogo
3142
+ */
3143
+ set showLogoInput(value: boolean);
3144
+ /**
3145
+ * Input setter for mobileBreakpoint
3146
+ */
3147
+ set mobileBreakpointInput(value: number);
3109
3148
  /** Theme variant for the sidenav */
3110
3149
  themeMode: _angular_core.WritableSignal<"light" | "dark" | "auto">;
3111
3150
  /**
@@ -3124,6 +3163,10 @@ declare class SidenavComponent {
3124
3163
  * Event emitted when an item's action button is clicked
3125
3164
  */
3126
3165
  readonly itemAction: EventEmitter<NavigationItem>;
3166
+ ngOnInit(): void;
3167
+ ngOnDestroy(): void;
3168
+ private setupMediaQuery;
3169
+ private teardownMediaQuery;
3127
3170
  /**
3128
3171
  * Computed CSS classes for the sidenav
3129
3172
  */
@@ -3159,7 +3202,8 @@ declare class SidenavComponent {
3159
3202
  */
3160
3203
  hasActiveChild(item: NavigationItem): boolean;
3161
3204
  /**
3162
- * Toggle expansion of a parent item
3205
+ * Toggle expansion of a parent item.
3206
+ * If the sidenav is collapsed, expand it first.
3163
3207
  */
3164
3208
  toggleExpanded(item: NavigationItem): void;
3165
3209
  /**
@@ -3171,7 +3215,7 @@ declare class SidenavComponent {
3171
3215
  */
3172
3216
  handleKeydown(event: KeyboardEvent): void;
3173
3217
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidenavComponent, never>;
3174
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidenavComponent, "lc-sidenav", never, { "isOpenInput": { "alias": "isOpenInput"; "required": false; }; "modeInput": { "alias": "modeInput"; "required": false; }; "positionInput": { "alias": "positionInput"; "required": false; }; "widthInput": { "alias": "widthInput"; "required": false; }; "ariaLabelInput": { "alias": "ariaLabelInput"; "required": false; }; "hasOverlayInput": { "alias": "hasOverlayInput"; "required": false; }; "itemsInput": { "alias": "itemsInput"; "required": false; }; "activeRouteInput": { "alias": "activeRouteInput"; "required": false; }; "collapsedInput": { "alias": "collapsedInput"; "required": false; }; "themeInput": { "alias": "theme"; "required": false; }; }, { "closed": "closed"; "itemClicked": "itemClicked"; "itemAction": "itemAction"; }, never, ["*"], true, never>;
3218
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidenavComponent, "lc-sidenav", never, { "isOpenInput": { "alias": "isOpenInput"; "required": false; }; "modeInput": { "alias": "modeInput"; "required": false; }; "positionInput": { "alias": "positionInput"; "required": false; }; "widthInput": { "alias": "widthInput"; "required": false; }; "ariaLabelInput": { "alias": "ariaLabelInput"; "required": false; }; "hasOverlayInput": { "alias": "hasOverlayInput"; "required": false; }; "itemsInput": { "alias": "itemsInput"; "required": false; }; "activeRouteInput": { "alias": "activeRouteInput"; "required": false; }; "collapsedInput": { "alias": "collapsedInput"; "required": false; }; "showLogoInput": { "alias": "showLogoInput"; "required": false; }; "mobileBreakpointInput": { "alias": "mobileBreakpointInput"; "required": false; }; "themeInput": { "alias": "theme"; "required": false; }; }, { "closed": "closed"; "itemClicked": "itemClicked"; "itemAction": "itemAction"; }, never, ["*"], true, never>;
3175
3219
  }
3176
3220
 
3177
3221
  type TabOrientation = 'horizontal' | 'vertical';