{"version":3,"file":"talenra-ngx-base-workspace-sidepanel.mjs","sources":["../../../projects/ngx-base/workspace-sidepanel/src/sideplanel-service/sidepanel.service.ts","../../../projects/ngx-base/workspace-sidepanel/src/sidepanel/sidepanel.component.ts","../../../projects/ngx-base/workspace-sidepanel/src/sidepanel/sidepanel.component.html","../../../projects/ngx-base/workspace-sidepanel/src/sidepanel-tabbar/sidepanel-tab/sidepanel-tab.component.ts","../../../projects/ngx-base/workspace-sidepanel/src/sidepanel-tabbar/sidepanel-tab/sidepanel-tab.component.html","../../../projects/ngx-base/workspace-sidepanel/src/sidepanel-tabbar/sidepanel-tabbar.component.ts","../../../projects/ngx-base/workspace-sidepanel/src/sidepanel-tabbar/sidepanel-tabbar.component.html","../../../projects/ngx-base/workspace-sidepanel/src/sidebar/sidebar-button/sidebar-button.component.ts","../../../projects/ngx-base/workspace-sidepanel/src/sidebar/sidebar-button/sidebar-button.component.html","../../../projects/ngx-base/workspace-sidepanel/src/sidebar/sidebar.component.ts","../../../projects/ngx-base/workspace-sidepanel/src/sidebar/sidebar.component.html","../../../projects/ngx-base/workspace-sidepanel/src/workspace-sidepanel/workspace-sidepanel.component.ts","../../../projects/ngx-base/workspace-sidepanel/src/workspace-sidepanel/workspace-sidepanel.component.html","../../../projects/ngx-base/workspace-sidepanel/talenra-ngx-base-workspace-sidepanel.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * Provides control and state of the sidepanel used in workspace-sidepanel.\n *\n * ### Import\n *\n * ```typescript\n * import { SidepanelService } from '@talenra/ngx-base/workspace-sidepanel';\n * ```\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class SidepanelService {\n  // --- Hidden state\n\n  /**\n   * Provides whether the sidepanel is hidden. Note that the state\n   * (hidden or visible) is kept even if the current layout does not involve\n   * a sidepanel.\n   *\n   * Used by\n   * - {@link WorkspaceSidepanelComponent}\n   */\n  public readonly isHidden$ = new BehaviorSubject(false);\n\n  /**\n   * Hide or show the sidepanel\n   *\n   * see {@link WorkspaceSidepanelComponent}\n   */\n  public setHidden(isHidden: boolean): void {\n    this.isHidden$.next(isHidden);\n  }\n\n  // --- Expanded state\n\n  /**\n   * Provides whether the sidepanel is expanded. Note that the state\n   * (collapsed or expanded) is kept even if the current layout does not involve\n   * a sidepanel.\n   *\n   * Used by\n   * - {@link WorkspaceSidepanelComponent}\n   */\n  public readonly isExpanded$ = new BehaviorSubject(false);\n\n  /**\n   * Collapses or expands the sidepanel\n   *\n   * see {@link WorkspaceSidepanelComponent}\n   */\n  public setExpanded(isExpanded: boolean): void {\n    this.isExpanded$.next(isExpanded);\n  }\n\n  // --- Selected item\n\n  /**\n   * Provides the sidepanel's state (current item).\n   *\n   * Used by\n   * - {@link WorkspaceSidepanelComponent}\n   */\n  public readonly selectedItem$ = new BehaviorSubject<null | string>(null);\n\n  /**\n   * Updates the current sidepanel item.\n   */\n  public setSelectedItem(key: null | string): void {\n    this.selectedItem$.next(key);\n  }\n}\n","import {\n  Component,\n  Input,\n  OnInit,\n  Output,\n  EventEmitter,\n  booleanAttribute,\n  numberAttribute,\n  DestroyRef,\n  inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ScrollContainerComponent } from '@talenra/ngx-base/scroll-container';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { SidepanelService } from '../sideplanel-service/sidepanel.service';\n\n/**\n * Wrapper for content do be displayed in a sidepanel.\n *\n * see {@link WorkspaceSidepanelComponent}\n *\n * ### Import\n *\n * ```typescript\n * import { WorkspaceSidepanelModule } from '@talenra/ngx-base/workspace-sidepanel';\n * ```\n *\n * <example-url>../../#/workspace-layout/workspace-sidepanel</example-url>\n */\n@Component({\n  selector: 'talenra-sidepanel',\n  templateUrl: './sidepanel.component.html',\n  styleUrls: ['./sidepanel.component.scss'],\n  host: {\n    '[class.fullwidth]': 'fullwidth',\n    '[class.selected]': 'isSelected',\n  },\n  imports: [ScrollContainerComponent, NgTemplateOutlet],\n})\nexport class SidepanelComponent implements OnInit {\n  /**\n   * Unique identifier for the sidepanel\n   */\n  @Input() public key = '';\n\n  /**\n   * The name of the sidepanel as displayed to the user\n   */\n  @Input() public label = '';\n\n  /**\n   * Identifier of the icon displayed. A list of all icons supported is\n   * included in the README of package `@talenra/icons`.\n   */\n  @Input() public icon = '';\n\n  /**\n   * A counter value attached to the icon (visually represented as badge/call-out). Typically a number that represents\n   * the number of items contained in this sidepanel.\n   */\n  @Input({ transform: numberAttribute })\n  /** Get  counter value */\n  get counter(): number | undefined {\n    return this._counter;\n  }\n  /** Set counter value */\n  set counter(value: number | undefined) {\n    this._counter = value;\n    this.counterUpdate.emit(value);\n  }\n  private _counter?: number;\n\n  /**\n   * The maximum value of the counter. If the counter value exceeds this limit, \"<counterMax>+\" will be displayed (e.g.\n   * \"99+\").\n   *\n   * ```html\n   * <talenra-sidepanel ... counterMax=\"99\"></talenra-sidepanel>\n   * ```\n   */\n  @Input({ transform: numberAttribute })\n  /** Get counterMax value */\n  get counterMax(): number | undefined {\n    return this._counterMax;\n  }\n  /** Set counterMax value */\n  set counterMax(value: number | undefined) {\n    this._counterMax = value;\n    this.counterMaxUpdate.emit(value);\n  }\n  private _counterMax?: number = 99;\n\n  /**\n   * Determine whether a vertical scroll is applied if the sidepanel's content\n   * exceeds the available height.\n   */\n  @Input({ transform: booleanAttribute }) public useScroll = true;\n\n  /**\n   * Determine whether the panel shall indent its content horizontally (false)\n   * or not (true). Be aware, that '{ fullwidth: true, useScroll: true }' will\n   * render a space for the vertical scrollbar. Use '{ fullwidth: true, useScroll: false }'\n   * will render the content edge-to-edge and gives you the opportunity to implement\n   * a custom scroll behavior.\n   */\n  @Input({ transform: booleanAttribute })\n  public fullwidth = false;\n\n  /**\n   * Triggered whenever counter value is updated.\n   */\n  @Output() counterUpdate: EventEmitter<number> = new EventEmitter();\n\n  /**\n   * Triggered whenever counterMax value is updated.\n   */\n  @Output() counterMaxUpdate: EventEmitter<number> = new EventEmitter();\n\n  private isSelected = false;\n\n  private sidepanelService = inject(SidepanelService);\n  private destroyRef: DestroyRef = inject(DestroyRef);\n\n  /** @internal */\n  ngOnInit(): void {\n    this.sidepanelService.selectedItem$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((key) => {\n      this.isSelected = key === this.key;\n    });\n  }\n}\n","@if (useScroll) {\n  <talenra-scroll-container class=\"scroll-container\">\n    <ng-container *ngTemplateOutlet=\"content\" />\n  </talenra-scroll-container>\n} @else {\n  <ng-container *ngTemplateOutlet=\"content\" />\n}\n<ng-template #content><ng-content /></ng-template>\n","import { booleanAttribute, Component, inject, input, numberAttribute } from '@angular/core';\nimport { IconComponent } from '@talenra/ngx-base/icons';\nimport { BadgeComponent } from '@talenra/ngx-base/badge';\nimport { SidepanelService } from '../../sideplanel-service/sidepanel.service';\n\n/** @internal */\n@Component({\n  selector: 'talenra-sidepanel-tab',\n  templateUrl: './sidepanel-tab.component.html',\n  styleUrls: ['./sidepanel-tab.component.scss'],\n  imports: [IconComponent, BadgeComponent],\n  host: {\n    '[class.selected]': 'isSelected()',\n    '[class.stretched]': 'isSelected() || sidepanelService.selectedItem$.value === null',\n  },\n})\nexport class SidepanelTabComponent {\n  /**\n   * Name of the icon displayed to the user.\n   *\n   * ```html\n   * <talenra-sidepanel-tab ... icon=\"chat-bubble-outline\" />\n   * ```\n   */\n  public icon = input<string>('');\n\n  /**\n   * Determines whether the tab is currently selected.\n   *\n   * ```html\n   * <talenra-sidepanel-tab ... isSelected />\n   * ```\n   */\n  public isSelected = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n  /**\n   * Number displayed in the badge beside the icon.\n   *\n   * ```html\n   * <talenra-sidepanel-tab ... counter=\"5\" />\n   * ```\n   */\n  public counter = input<number, unknown>(0, { transform: numberAttribute });\n\n  /**\n   * Maximum value displayed in the badge. If the counter exceeds this value, it will display as '<counterMax>+'\n   * (e.g. '99+').\n   *\n   * ```html\n   * <talenra-sidepanel-tab ... counterMax=\"10\" />\n   * ```\n   */\n  public counterMax = input<number | undefined, unknown>(undefined, { transform: numberAttribute });\n\n  private sidepanelService: SidepanelService = inject(SidepanelService);\n}\n","<button class=\"button\">\n  <talenra-icon class=\"icon\" [name]=\"icon()\" />\n</button>\n<talenra-badge [counter]=\"counter()\" [maxVal]=\"counterMax()\" class=\"badge\" />\n","import { Component, inject, input } from '@angular/core';\nimport { IconComponent } from '@talenra/ngx-base/icons';\nimport { AsyncPipe } from '@angular/common';\nimport { SidepanelTabComponent } from './sidepanel-tab/sidepanel-tab.component';\nimport { SidepanelService } from '../sideplanel-service/sidepanel.service';\nimport { SidepanelItem } from '../workspace-sidepanel/workspace-sidepanel.types';\n\n/** @internal */\n@Component({\n  selector: 'talenra-sidepanel-tabbar',\n  templateUrl: './sidepanel-tabbar.component.html',\n  styleUrls: ['./sidepanel-tabbar.component.scss'],\n  imports: [SidepanelTabComponent, IconComponent, AsyncPipe],\n})\nexport class SidepanelTabbarComponent {\n  /** Array of Sidepanel items available. A Sidebar Button is rendered for each item. */\n  public panels = input<SidepanelItem[]>([]);\n\n  protected sidepanelService = inject(SidepanelService);\n\n  public selectPanel(key: string): void {\n    // Select item if not already selected\n    this.sidepanelService.selectedItem$.value !== key && this.sidepanelService.setSelectedItem(key);\n    // Expand sidepanel if not already expanded\n    !this.sidepanelService.isExpanded$.value && this.sidepanelService.setExpanded(true);\n  }\n}\n","@for (panel of panels(); track panel.key) {\n  <talenra-sidepanel-tab\n    [icon]=\"panel.icon\"\n    [counter]=\"panel.counter\"\n    [counterMax]=\"panel.counterMax\"\n    [isSelected]=\"panel.key === (sidepanelService.selectedItem$ | async)\"\n    (click)=\"selectPanel(panel.key)\" />\n}\n<button (click)=\"sidepanelService.setExpanded(false)\" class=\"collapse\">\n  <talenra-icon class=\"icon\" name=\"fast-forward\" />\n</button>\n","import { Component, input, numberAttribute } from '@angular/core';\nimport { IconComponent } from '@talenra/ngx-base/icons';\nimport { BadgeComponent } from '@talenra/ngx-base/badge';\nimport { TooltipDirective } from '@talenra/ngx-base/tooltip';\n\n/** @internal */\n@Component({\n  selector: 'talenra-sidebar-button',\n  templateUrl: './sidebar-button.component.html',\n  styleUrls: ['./sidebar-button.component.scss'],\n  imports: [IconComponent, BadgeComponent, TooltipDirective],\n})\nexport class SidebarButtonComponent {\n  /**\n   * Name of the icon displayed to the user.\n   *\n   * ```html\n   * <talenra-sidebar-button ... icon=\"chat-bubble-outline\" />\n   * ```\n   */\n  public icon = input<string>('');\n\n  /**\n   * Number displayed in the badge beside the icon.\n   *\n   * ```html\n   * <talenra-sidebar-button ... counter=\"5\" />\n   * ```\n   */\n  public counter = input<number, unknown>(0, { transform: numberAttribute });\n\n  /**\n   * Text displayed in the tooltip when hovering over the button.\n   *\n   * ```html\n   * <talenra-sidebar-button ... label=\"Chat\" />\n   * ```\n   */\n  public label = input<string>('');\n\n  /**\n   * Maximum value displayed in the badge. If the counter exceeds this value, it will display as '<counterMax>+'\n   * (e.g. '99+').\n   *\n   * ```html\n   * <talenra-sidebar-button ... counterMax=\"10\" />\n   * ```\n   */\n  public counterMax = input<number | undefined, unknown>(undefined, { transform: numberAttribute });\n}\n","<button class=\"button\" [talenraTooltip]=\"label()\" talenraTooltipPosition=\"west\">\n  <talenra-icon class=\"icon\" [name]=\"icon()\" />\n</button>\n<talenra-badge [counter]=\"counter()\" [maxVal]=\"counterMax()\" class=\"badge\" />\n","import { Component, inject, input } from '@angular/core';\nimport { LayoutService } from '@talenra/ngx-base/layout-service';\nimport { SidebarButtonComponent } from './sidebar-button/sidebar-button.component';\nimport { SidepanelService } from '../sideplanel-service/sidepanel.service';\nimport { SidepanelItem } from '../workspace-sidepanel/workspace-sidepanel.types';\n\n/** @internal */\n@Component({\n  selector: 'talenra-sidebar',\n  templateUrl: './sidebar.component.html',\n  styleUrls: ['./sidebar.component.scss'],\n  host: {\n    '(mouseenter)': 'handleMouseEnter()',\n  },\n  imports: [SidebarButtonComponent],\n})\nexport class SidebarComponent {\n  /** Array of Sidepanel items available. A Sidebar Button is rendered for each item. */\n  public panels = input<SidepanelItem[]>([]);\n\n  private sidepanelService = inject(SidepanelService);\n  private layoutService = inject(LayoutService);\n\n  /** Handles clicks on Sidebar Buttons. Selects the clicked button and expands the corresponding panel. */\n  protected selectPanel(key: string): void {\n    // Update selected item if not already selected\n    this.sidepanelService.selectedItem$.value !== key && this.sidepanelService.setSelectedItem(key);\n    // Expand sidepanel if not already expanded\n    !this.sidepanelService.isExpanded$.value && this.sidepanelService.setExpanded(true);\n  }\n\n  /**\n   * Auto expand on mouse enter while in overlay-mode (small viewports).\n   */\n  private handleMouseEnter(): void {\n    if (!this.layoutService.useOverlayLayout()) return;\n    this.sidepanelService.setExpanded(true);\n  }\n}\n","@for (panel of panels(); track panel.key) {\n  <talenra-sidebar-button\n    [label]=\"panel.label\"\n    [icon]=\"panel.icon\"\n    [counter]=\"panel.counter\"\n    [counterMax]=\"panel.counterMax\"\n    (click)=\"selectPanel(panel.key)\" />\n}\n","import {\n  AfterContentInit,\n  booleanAttribute,\n  Component,\n  computed,\n  contentChild,\n  ContentChildren,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  numberAttribute,\n  QueryList,\n  signal,\n} from '@angular/core';\nimport { asapScheduler } from 'rxjs';\nimport { ContentLayoutComponent } from '@talenra/ngx-base/content-layout';\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { WorkspaceHeaderComponent } from '@talenra/ngx-base/workspace-header';\nimport { deprecationWarning } from '@talenra/ngx-base/dev-kit';\nimport { SidepanelItem } from './workspace-sidepanel.types';\nimport { SidepanelService } from '../sideplanel-service/sidepanel.service';\nimport { SidepanelComponent } from '../sidepanel/sidepanel.component';\nimport { SidepanelTabbarComponent } from '../sidepanel-tabbar/sidepanel-tabbar.component';\nimport { SidebarComponent } from '../sidebar/sidebar.component';\n\n/**\n * Provides a template for content that involves the sidepanel feature.\n *\n * ### Import\n *\n * ```typescript\n * import { WorkspaceSidepanelModule } from '@talenra/ngx-base/workspace-sidepanel';\n * ```\n *\n * <example-url>../../#/workspace-layout/workspace-sidepanel</example-url>\n */\n@Component({\n  selector: 'talenra-workspace-sidepanel',\n  templateUrl: './workspace-sidepanel.component.html',\n  styleUrls: ['./workspace-sidepanel.component.scss'],\n  host: {\n    '[class.use-transition]': 'useTransition()',\n  },\n  imports: [ContentLayoutComponent, NgTemplateOutlet, SidepanelTabbarComponent, SidebarComponent, AsyncPipe],\n})\nexport class WorkspaceSidepanelComponent implements AfterContentInit {\n  /**\n   * If true, the content passed to the component will be wrapped by Content Layout component that controls  the\n   * vertical layout and behaviour (e.g. takes care of scrolling).\n   *\n   * ```html\n   * <talenra-workspace-sidepanel useContentLayout>\n   *   <div header>My header</div>\n   *   <div sticky-bar>My toolbar</div>\n   *   <div>My content</div>\n   * </talenra-workspace-sidepanel>\n   * ```\n   *\n   * @see {@link ContentLayoutComponent}\n   */\n  public useContentLayout = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n  /**\n   * Determines whether the layout uses a header element. Has no effect if `useContentLayout` is `false`.\n   *\n   * ```html\n   * <!-- As `useHeader` defaults `true`, you could safely omit the input in this case. -->\n   * <talenra-workspace-sidepanel useContentLayout useHeader>\n   *   <div header>My header</div>\n   * </talenra-workspace-sidepanel>\n   * ```\n   *\n   * @see {@link ContentLayoutComponent#useHeader}\n   */\n  public useHeader = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n  /**\n   * Determines whether the layout uses a sticky bar element. Has no effect if `useContentLayout` is `false`.\n   *\n   * ```html\n   * <!-- As `useStickyBar` defaults `true`, you could safely omit the input in this case. -->\n   * <talenra-workspace-sidepanel useContentLayout useStickyBar>\n   *   <div sticky-bar>My sticky bar</div>\n   * </talenra-workspace-sidepanel>\n   */\n  public useStickyBar = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n  /**\n   * Determines whether the layout uses a sticky footer element. Has no effect if `useContentLayout` is `false`.\n   *\n   * @see {@link ContentLayoutComponent#useStickyFooter} for more information.\n   *\n   * @example\n   * <!-- As `useStickyFooter` defaults `true`, you could safely omit the input in this case. -->\n   * <talenra-workspace-sidepanel useContentLayout useStickyFooter>\n   *   <div sticky-footer>My sticky footer</div>\n   * </talenra-workspace-sidepanel>\n   */\n  public useStickyFooter = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n  /**\n   * Determines whether the content is allowed to take the full height and to cover the\n   * header when scrolled. Has no effect if `useContentLayout` is `false`.\n   *\n   * @see {@link ContentLayoutComponent#overscrollHeader} for more information.\n   *\n   * @example\n   * <talenra-workspace-sidepanel useContentLayout [overscrollHeader]=\"false\">\n   *   <div header>My header</div>\n   *   <div>My scrollable Content</div>\n   * </talenra-workspace-sidepanel>\n   */\n  public overscrollHeader = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n  /**\n   * Vertical offset of sidebar and panels\n   *\n   * @deprecation\n   */\n  public headerHeightLegacy = input<number, unknown>(0, {\n    alias: 'headerHeight',\n    transform: (value: unknown): number => {\n      deprecationWarning({\n        submodule: 'workspace-sidepanel',\n        className: this.constructor.name,\n        member: 'Input property `headerHeight`',\n        instructions: 'Please get in touch with us if you think we should keep support for `headerHeight`.',\n      });\n      return numberAttribute(value);\n    },\n  });\n\n  /** @internal */\n  public panels: SidepanelItem[] = [];\n\n  /** Reference to Workspace Header instance's element */\n  private headerElement = contentChild(WorkspaceHeaderComponent, { read: ElementRef });\n  /** Resize Observer used to track header's height and align position of Sidepanels and Sidebar */\n  private headerObserver: ResizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n    this.headerHeight.set(entries[0].contentRect.height);\n  });\n  /** Height of the header element */\n  private headerHeight = signal<number>(0);\n\n  /** @internal */\n  @ContentChildren(SidepanelComponent) panelsContent!: QueryList<SidepanelComponent>;\n\n  /**\n   * Determines whether UI transitions are active. Used to block transitions during initialization to prevent\n   * flickering.\n   */\n  private useTransition = signal<boolean>(false);\n\n  private readonly destroyRef: DestroyRef = inject(DestroyRef);\n  protected sidepanelService = inject(SidepanelService);\n\n  /** @internal */\n  constructor() {\n    // Track header height. Used to adjust vertical position of Sidepanels and Sidebar.\n    effect(() => {\n      // Unobserve previous header element as required\n      this.headerObserver?.disconnect();\n      // Start observing the current header element\n      if (this.headerElement()?.nativeElement) {\n        this.headerObserver.observe(this.headerElement()?.nativeElement);\n      }\n    });\n  }\n\n  /** @internal */\n  ngAfterContentInit(): void {\n    // Subscribe for panel changes and re-initialize\n    this.panelsContent.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.initPanels());\n    // Initialize panels\n    this.initPanels();\n    // Subscribe to counter/counterMax updates to update the panels property whenever a counter changes.\n    this.panelsContent.forEach((panel: SidepanelComponent, index: number) => {\n      panel.counterUpdate\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe((value: number | undefined) => (this.panels[index].counter = value));\n      panel.counterMaxUpdate\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe((value: number | undefined) => (this.panels[index].counterMax = value));\n    });\n    // Activation of transitions is slightly delayed to prevent transition during initialization.\n    setTimeout(() => this.useTransition.set(true), 500);\n  }\n\n  /**\n   * Read properties from panels and store in property `panels`\n   */\n  private initPanels(): void {\n    const panels = this.panelsContent.map((panel: SidepanelComponent) => {\n      const { key, label, icon, counter, counterMax } = panel;\n      return { key, label, icon, counter, counterMax };\n    });\n    this.panels = panels;\n    // Select the first item if no item is selected\n    if (this.sidepanelService.selectedItem$.value) return;\n    asapScheduler.schedule(() => {\n      this.sidepanelService.setSelectedItem(panels[0]?.key || null);\n    });\n  }\n\n  /**\n   * This is fancy: We need to adjust the vertical offset of sidebar and panels\n   * from _outside_. This method returns the styles needed. -> Better solutions\n   * welcome!\n   *\n   * @internal\n   */\n  protected panelStyleAdjust = computed<{ marginTop: string; height: string }>(() => {\n    const offset: number =\n      this.useContentLayout() && (this.headerHeight() < 1 || !this.useHeader() || this.overscrollHeader())\n        ? 8\n        : this.headerHeight();\n    return {\n      marginTop: `${offset}px`,\n      height: `calc(100% - ${offset}px)`,\n    };\n  });\n}\n","<div class=\"main\" [class.panel-expanded]=\"sidepanelService.isExpanded$ | async\">\n  <div class=\"content\">\n    @if (useContentLayout()) {\n      <talenra-content-layout\n        [useHeader]=\"useHeader()\"\n        [useStickyBar]=\"useStickyBar()\"\n        [useStickyFooter]=\"useStickyFooter()\"\n        [overscrollHeader]=\"overscrollHeader()\">\n        <ng-container *ngTemplateOutlet=\"header\" header />\n        <ng-container *ngTemplateOutlet=\"stickyBar\" sticky-bar />\n        <ng-container *ngTemplateOutlet=\"content\" />\n        <ng-container *ngTemplateOutlet=\"stickyFooter\" sticky-footer />\n      </talenra-content-layout>\n    } @else {\n      <ng-container *ngTemplateOutlet=\"content\" />\n    }\n  </div>\n</div>\n\n<div class=\"panel\" [class.expanded]=\"sidepanelService.isExpanded$ | async\" [style]=\"panelStyleAdjust()\">\n  <talenra-sidepanel-tabbar [panels]=\"panels\" />\n  <div class=\"panels\">\n    <div class=\"panels-inner\">\n      <ng-content select=\"[panel]\" />\n    </div>\n  </div>\n</div>\n\n<talenra-sidebar\n  class=\"sidebar\"\n  [class.hidden]=\"sidepanelService.isHidden$ | async\"\n  [panels]=\"panels\"\n  [style]=\"panelStyleAdjust()\" />\n\n<ng-template #header><ng-content select=\"[header]\" /></ng-template>\n<ng-template #stickyBar><ng-content select=\"[sticky-bar]\" /></ng-template>\n<ng-template #content><ng-content /></ng-template>\n<ng-template #stickyFooter><ng-content select=\"[sticky-footer]\" /></ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}