{"version":3,"file":"fiscal-io-ds-components-sidebar.mjs","sources":["../../../../projects/fiscal-io/ds-components/src/lib/components/ds-sidebar/ds-sidebar.component.ts","../../../../projects/fiscal-io/ds-components/src/lib/components/ds-sidebar/ds-sidebar.component.html","../../../../projects/fiscal-io/ds-components/src/fiscal-io-ds-components-sidebar.ts"],"sourcesContent":["import {\r\n  Component,\r\n  ViewEncapsulation,\r\n  effect,\r\n  computed,\r\n  ElementRef,\r\n  Renderer2,\r\n  viewChild,\r\n  DestroyRef,\r\n  ChangeDetectionStrategy,\r\n  input,\r\n  output,\r\n  inject,\r\n  signal,\r\n  AfterViewInit,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BreakpointObserver } from '@angular/cdk/layout';\r\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\r\nimport { filter, map } from 'rxjs';\r\nimport { DsButtonComponent } from '@fiscal-io/ds-components/button';\r\nimport { DsSidebarService } from '@fiscal-io/ds-components';\r\nimport {\r\n  DsAppsMenuComponent,\r\n  AppMenuItem,\r\n} from '@fiscal-io/ds-components/apps-menu';\r\n\r\nexport type SidebarType = 'Auto' | 'Over' | 'Push' | 'Slide';\r\n\r\nexport interface MenuItemModel {\r\n  text?: string;\r\n  iconCss?: string;\r\n  cssClass?: string;\r\n  url?: string;\r\n  target?: string;\r\n  items?: MenuItemModel[];\r\n  expanded?: boolean;\r\n  [key: string]: any;\r\n}\r\n\r\n@Component({\r\n  selector: 'ds-sidebar',\r\n  imports: [CommonModule, RouterModule, DsButtonComponent, DsAppsMenuComponent],\r\n  templateUrl: './ds-sidebar.component.html',\r\n  styleUrls: ['./ds-sidebar.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DsSidebarComponent implements AfterViewInit {\r\n  // Inputs matching previous API\r\n  title = input<string>('');\r\n  logoSrc = input<string>('');\r\n  logoAlt = input<string>('Logo');\r\n  showGridButton = input<boolean>(true);\r\n  gridDisabled = input<boolean>(false);\r\n  readonly width = input<string>('270px');\r\n  readonly enableDock = input<boolean>(true);\r\n  readonly dockSize = input<string>('51px');\r\n  readonly canOpen = input<boolean>(true);\r\n  readonly menuItems = input<MenuItemModel[]>([]);\r\n  /** Lista de aplicativos exibida no painel do botão grid */\r\n  readonly apps = input<AppMenuItem[]>([]);\r\n  /** Number of columns for the apps grid */\r\n  readonly appsColumns = input<number>(3);\r\n  /** The id of the currently active app, if any */\r\n  readonly activeAppId = input<string | undefined>(undefined);\r\n\r\n  // Service-based control\r\n  private sidebarService = inject(DsSidebarService);\r\n\r\n  // Computed final status\r\n  readonly isExpansionAllowed = computed(() => {\r\n    const manualAllow = this.canOpen();\r\n    const serviceLocked = this.sidebarService.isLocked();\r\n\r\n    // If explicitly locked manually via input, always block\r\n    if (!manualAllow) return false;\r\n\r\n    // If locked via service (page-slot), only block if we are on Desktop\r\n    if (serviceLocked && this.isDesktop()) {\r\n      return false;\r\n    }\r\n\r\n    // Default to allowed (includes Mobile/Tablet even if locked via service)\r\n    return true;\r\n  });\r\n  itemClick = output<MenuItemModel>();\r\n  /** Emitido quando o usuário clica em um app no painel */\r\n  closed = output<void>();\r\n  appClick = output<string>();\r\n  target = input<string | HTMLElement | undefined>(undefined);\r\n  type = input<SidebarType>('Auto');\r\n  mediaQuery = input<string>('(min-width: 992px)');\r\n  preventExpansion = input<boolean>(false);\r\n\r\n  // Internal State\r\n  protected preventExpansionInternal = signal<boolean>(false);\r\n  protected isOpen = signal(false);\r\n  /** Controla a abertura do painel de apps */\r\n  protected appsMenuOpen = signal(false);\r\n\r\n  // Apps Menu Positioning State\r\n  protected appsPanelLeft = signal(0);\r\n  protected appsPanelTop = signal(0);\r\n  protected appsPanelHeight = signal(0);\r\n\r\n  // Responsive State\r\n  protected isDesktop = signal(false); // >= 992px\r\n  protected isTablet = signal(false); // 768px - 991.98px\r\n  protected isPhone = signal(false); // < 768px\r\n\r\n  // Computed State\r\n  protected isMobile = computed(() => this.isPhone() || this.isTablet()); // For backward compat or general \"small screen\" logic\r\n\r\n  shouldShowBackdrop = computed(() => {\r\n    // Backdrop needed if open AND (Phone OR Tablet/Overlay mode)\r\n    // Actually, on Tablet/Phone, sidebar is always \"Over\" when open.\r\n    return this.isOpen() && !this.isDesktop();\r\n  });\r\n\r\n  isDocked = computed(() => {\r\n    // Dock is visible if:\r\n    // 1. Sidebar is closed\r\n    // 2. Docking is enabled\r\n    // 3. Not on Phone (Phone hides dock)\r\n    // 4. Not in 'Over' or 'Slide' mode explicitly (though on Tablet it behaves like Over when open, but Docked when closed)\r\n    return (\r\n      !this.isOpen() &&\r\n      this.enableDock() &&\r\n      !this.isPhone() &&\r\n      this.type() !== 'Over' &&\r\n      this.type() !== 'Slide'\r\n    );\r\n  });\r\n\r\n  sidebarWidth = computed(() => {\r\n    if (this.isOpen()) return this.width();\r\n    if (this.isDocked()) return this.dockSize();\r\n    return '0px';\r\n  });\r\n\r\n  // View Children\r\n  readonly scrollContainer =\r\n    viewChild<ElementRef<HTMLDivElement>>('scrollContainer');\r\n  readonly sidebarAside = viewChild<ElementRef<HTMLElement>>('sidebarAside');\r\n\r\n  // Scroll Indicators State\r\n  protected showTopArrow = signal(false);\r\n  protected showBottomArrow = signal(false);\r\n  protected isHovering = signal(false);\r\n\r\n  // Services\r\n  private router = inject(Router);\r\n  private breakpointObserver = inject(BreakpointObserver);\r\n  private renderer = inject(Renderer2);\r\n  private destroyRef = inject(DestroyRef);\r\n\r\n  constructor() {\r\n    this.destroyRef.onDestroy(() => {\r\n      // Cleanup Push styling if needed\r\n      const targetSelector = this.target();\r\n      if (targetSelector) {\r\n        const targetEl = this.resolveTarget(targetSelector);\r\n        if (targetEl) {\r\n          this.renderer.removeStyle(targetEl, 'marginLeft');\r\n          this.renderer.removeStyle(targetEl, 'transition');\r\n        }\r\n      }\r\n    });\r\n\r\n    // Sync preventExpansion input with internal signal\r\n    effect(() => {\r\n      this.preventExpansionInternal.set(this.preventExpansion());\r\n    });\r\n\r\n    // Close on preventExpansion\r\n    effect(() => {\r\n      if (this.preventExpansionInternal()) {\r\n        this.isOpen.set(false);\r\n      }\r\n    });\r\n\r\n    // Close sidebar immediately if canOpen becomes false\r\n    effect(() => {\r\n      if (!this.isExpansionAllowed() && this.isOpen()) {\r\n        this.isOpen.set(false);\r\n      }\r\n    });\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // Breakpoints:\r\n    // Phone: < 768px\r\n    // Tablet: 768px - 991.98px\r\n    // Desktop: >= 992px\r\n\r\n    this.breakpointObserver\r\n      .observe(['(min-width: 992px)', '(min-width: 768px)'])\r\n      .subscribe((state) => {\r\n        const isDesktop = state.breakpoints['(min-width: 992px)'];\r\n        const isTablet = !isDesktop && state.breakpoints['(min-width: 768px)']; // Not desktop but > 768\r\n        const isPhone = !isDesktop && !isTablet;\r\n\r\n        this.isDesktop.set(isDesktop);\r\n        this.isTablet.set(isTablet);\r\n        this.isPhone.set(isPhone);\r\n\r\n        // Initialization Logic & State reaction\r\n        if (isDesktop) {\r\n          if (!this.preventExpansion()) {\r\n            this.isOpen.set(true);\r\n          } else {\r\n            this.isOpen.set(false);\r\n          }\r\n        } else {\r\n          // Tablet or Phone: Close sidebar by default\r\n          this.isOpen.set(false);\r\n        }\r\n\r\n        // Check scroll on any layout change\r\n        setTimeout(() => this.checkScroll(), 350);\r\n      });\r\n  }\r\n\r\n  protected checkScroll(): void {\r\n    const el = this.scrollContainer()?.nativeElement;\r\n    if (!el) return;\r\n\r\n    const hasScroll = el.scrollHeight > el.clientHeight;\r\n    if (!hasScroll) {\r\n      this.showTopArrow.set(false);\r\n      this.showBottomArrow.set(false);\r\n      return;\r\n    }\r\n\r\n    const atTop = el.scrollTop === 0;\r\n    const atBottom =\r\n      Math.abs(el.scrollHeight - el.clientHeight - el.scrollTop) < 2;\r\n\r\n    this.showTopArrow.set(!atTop);\r\n    this.showBottomArrow.set(!atBottom);\r\n  }\r\n\r\n  protected onScroll(event: Event): void {\r\n    this.checkScroll();\r\n  }\r\n\r\n  protected onMouseEnter(): void {\r\n    this.isHovering.set(true);\r\n  }\r\n\r\n  protected onMouseLeave(): void {\r\n    this.isHovering.set(false);\r\n  }\r\n\r\n  // --- Actions ---\r\n\r\n  protected onGridClick(): void {\r\n    if (this.gridDisabled()) return;\r\n\r\n    const isOpening = !this.appsMenuOpen();\r\n\r\n    if (isOpening) {\r\n      const asideEl = this.sidebarAside()?.nativeElement;\r\n      if (asideEl) {\r\n        const rect = asideEl.getBoundingClientRect();\r\n\r\n        if (this.isPhone()) {\r\n          // Mobile (Phone): Retract sidebar first\r\n          this.isOpen.set(false);\r\n          this.appsPanelLeft.set(0);\r\n          this.appsPanelTop.set(0);\r\n          this.appsPanelHeight.set(rect.height);\r\n\r\n          // Wait for sidebar finish retraction (250ms) before opening apps\r\n          setTimeout(() => {\r\n            this.appsMenuOpen.set(true);\r\n          }, 250);\r\n          return;\r\n        } else {\r\n          // Desktop & Tablet\r\n          this.appsPanelLeft.set(rect.width);\r\n          this.appsPanelTop.set(0);\r\n          this.appsPanelHeight.set(rect.height);\r\n        }\r\n      }\r\n    }\r\n\r\n    this.appsMenuOpen.update((v) => !v);\r\n  }\r\n\r\n  protected onAppsMenuClosed(): void {\r\n    this.appsMenuOpen.set(false);\r\n  }\r\n\r\n  protected onAppClick(appId: string): void {\r\n    this.appClick.emit(appId);\r\n  }\r\n\r\n  private shouldBlockExpansion(): boolean {\r\n    if (!this.preventExpansion()) return false;\r\n    // Only block if mode is effectively Push (Push or Auto on Desktop)\r\n    const isOverMode =\r\n      this.type() === 'Over' || this.type() === 'Slide' || !this.isDesktop();\r\n    return !isOverMode;\r\n  }\r\n\r\n  toggle(): void {\r\n    if (this.isOpen()) {\r\n      // Always allow closing\r\n      this.isOpen.set(false);\r\n    } else {\r\n      // Check block condition for opening\r\n      if (this.shouldBlockExpansion() || !this.isExpansionAllowed()) return;\r\n      this.isOpen.set(true);\r\n    }\r\n  }\r\n\r\n  close(): void {\r\n    this.isOpen.set(false);\r\n  }\r\n\r\n  open(): void {\r\n    if (this.shouldBlockExpansion() || !this.isExpansionAllowed()) return;\r\n    this.isOpen.set(true);\r\n  }\r\n\r\n  // --- Navigation & Routing ---\r\n\r\n  private currentUrl = toSignal(\r\n    this.router.events.pipe(\r\n      filter((e) => e instanceof NavigationEnd),\r\n      map((e: any) => e.urlAfterRedirects),\r\n    ),\r\n    { initialValue: this.router.url },\r\n  );\r\n\r\n  isActive(itemUrl: string | undefined): boolean {\r\n    if (!itemUrl) return false;\r\n    const current = this.currentUrl();\r\n    if (!current) return false;\r\n\r\n    const cleanItem = itemUrl.split('?')[0];\r\n    const cleanCurrent = current.split('?')[0];\r\n\r\n    if (cleanItem === '/') return cleanCurrent === '/';\r\n    return cleanCurrent.startsWith(cleanItem);\r\n  }\r\n\r\n  onItemClick(item: MenuItemModel, event: Event): void {\r\n    event.preventDefault();\r\n    this.itemClick.emit(item);\r\n\r\n    if (item.url) {\r\n      if (item.url.startsWith('http://') || item.url.startsWith('https://')) {\r\n        window.open(item.url, item.target || '_blank');\r\n      } else {\r\n        this.router.navigate([item.url]);\r\n      }\r\n    }\r\n\r\n    // On mobile, close sidebar after click\r\n    // On mobile/tablet, close sidebar after click\r\n    if (\r\n      !this.isDesktop() ||\r\n      this.type() === 'Over' ||\r\n      this.type() === 'Slide'\r\n    ) {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  // --- Helpers ---\r\n\r\n  private resolveTarget(target: string | HTMLElement): HTMLElement | null {\r\n    if (typeof target === 'string') {\r\n      return document.querySelector(target);\r\n    }\r\n    return target;\r\n  }\r\n}\r\n","@if (shouldShowBackdrop()) {\n  <div class=\"ds-sidebar-backdrop\" (click)=\"close()\" role=\"presentation\"></div>\n}\n\n<!-- Sidebar Container -->\n@if (isTablet() && enableDock()) {\n  <div\n    class=\"ds-sidebar-spacer\"\n    [style.width]=\"dockSize()\"\n    [style.min-width]=\"dockSize()\"\n  ></div>\n}\n<aside #sidebarAside\n  class=\"ds-sidebar-container\"\n  [class.docked]=\"isDocked()\"\n  [class.mobile-closed]=\"isMobile() && !isOpen() && !isDocked()\"\n  [class.mobile-over]=\"isMobile() || type() === 'Over'\"\n  [class.open]=\"isOpen()\"\n  [style.width]=\"sidebarWidth()\"\n>\n  <!-- Header -->\n  @if (title() || logoSrc()) {\n    <div class=\"ds-sidebar-header\" [class.has-grid]=\"showGridButton()\">\n      <div class=\"ds-sidebar-header-wrapper\" [class.is-docked]=\"!isOpen()\">\n        <div class=\"ds-sidebar-logo-title-group\">\n          <div\n            class=\"ds-sidebar-logo\"\n            [style.--logo-url]=\"'url(' + logoSrc() + ')'\"\n            [attr.aria-label]=\"logoAlt()\"\n          ></div>\n          <span class=\"ds-sidebar-title\" [class.hidden]=\"!isOpen()\">{{\n            title()\n          }}</span>\n        </div>\n\n        @if (showGridButton()) {\n          <ds-button\n            iconCss=\"bi bi-grid fs-5\"\n            [disabled]=\"gridDisabled()\"\n            [cssClass]=\"'grid-button-header border-0 bg-transparent fs-5 px-2 ' + (appsMenuOpen() ? 'text-primary' : 'text-secondary')\"\n            (clicked)=\"onGridClick()\"\n          ></ds-button>\n        }\n      </div>\n    </div>\n  }\n\n  <!-- Content (Menu) -->\n  <!-- Top Indicator -->\n  @if (!isHovering() && showTopArrow()) {\n    <div class=\"ds-sidebar-scroll-indicator ds-sidebar-scroll-indicator-top\">\n      <i class=\"bi bi-chevron-compact-up\"></i>\n    </div>\n  }\n\n  <div\n    class=\"ds-sidebar-content\"\n    #scrollContainer\n    (scroll)=\"onScroll($event)\"\n    (mouseenter)=\"onMouseEnter()\"\n    (mouseleave)=\"onMouseLeave()\"\n  >\n    <ng-content></ng-content>\n\n    @if (menuItems().length > 0) {\n      <ul class=\"ds-menu-list\">\n        @for (item of menuItems(); track $index) {\n          <li>\n            <a\n              class=\"ds-menu-item\"\n              [class]=\"item.cssClass\"\n              [class.active]=\"isActive(item.url)\"\n              [attr.href]=\"item.url\"\n              (click)=\"onItemClick(item, $event)\"\n              [attr.title]=\"isDocked() ? item.text : ''\"\n            >\n              @if (item.iconCss) {\n                <span class=\"ds-menu-icon\" [class]=\"item.iconCss\"></span>\n              }\n              <span class=\"ds-menu-text\">{{ item.text }}</span>\n            </a>\n          </li>\n        }\n      </ul>\n    }\n  </div>\n\n  <!-- Bottom Indicator -->\n  @if (!isHovering() && showBottomArrow()) {\n    <div class=\"ds-sidebar-scroll-indicator ds-sidebar-scroll-indicator-bottom\">\n      <i class=\"bi bi-chevron-compact-down\"></i>\n    </div>\n  }\n</aside>\n\n<!-- Painel de Aplicativos (ativado pelo botão bi-grid) -->\n@if (showGridButton()) {\n  <ds-apps-menu\n    [apps]=\"apps()\"\n    [columns]=\"appsColumns()\"\n    [activeAppId]=\"activeAppId()\"\n    [isOpen]=\"appsMenuOpen()\"\n    [panelLeft]=\"appsPanelLeft()\"\n    [panelTop]=\"appsPanelTop()\"\n    [panelHeight]=\"appsPanelHeight()\"\n    (closed)=\"onAppsMenuClosed()\"\n    (appClick)=\"onAppClick($event)\"\n  ></ds-apps-menu>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './sidebar';\n"],"names":[],"mappings":"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"}