{"version":3,"file":"stellarcyber-ui-kit.mjs","sources":["../../../../libs/ui-kit/src/layouts/components/application-base.component.ts","../../../../libs/ui-kit/src/utilities/services/local-storage.service.ts","../../../../libs/ui-kit/src/layouts/directives/resizable.directive.ts","../../../../libs/ui-kit/src/layouts/components/context-pane.component.ts","../../../../libs/ui-kit/src/layouts/components/inset-header.component.ts","../../../../libs/ui-kit/src/layouts/components/layout-common.component.ts","../../../../libs/ui-kit/src/layouts/components/layout-main.component.ts","../../../../libs/ui-kit/src/layouts/components/layout-header.component.ts","../../../../libs/ui-kit/src/layouts/components/nav-pane.component.ts","../../../../libs/ui-kit/src/layouts/components/page-index.component.ts","../../../../libs/ui-kit/src/themes/stellar/base/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/treeselect/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/iconfield/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/floatlabel/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/tabs/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/tree/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/iftalabel/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/fileupload/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/drawer/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/organizationchart/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/confirmpopup/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/tooltip/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/password/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/rating/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/card/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/panel/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/radiobutton/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/autocomplete/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/imagecompare/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/menubar/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/overlaybadge/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/galleria/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/accordion/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/toggleswitch/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/skeleton/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/dataview/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/panelmenu/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/datepicker/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/toast/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/chip/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/inputtext/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/toolbar/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/listbox/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/checkbox/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/togglebutton/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/splitter/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/selectbutton/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/terminal/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/contextmenu/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/slider/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/ripple/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/message/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/stepper/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/inputnumber/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/progressbar/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/carousel/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/image/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/inputotp/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/dialog/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/popover/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/tabview/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/picklist/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/blockui/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/textarea/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/speeddial/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/button/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/confirmdialog/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/treetable/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/divider/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/menu/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/dynamicdialog/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/avatar/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/colorpicker/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/inplace/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/fieldset/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/splitbutton/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/megamenu/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/orderlist/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/progressspinner/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/knob/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/tieredmenu/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/select/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/breadcrumb/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/virtualscroller/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/paginator/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/multiselect/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/cascadeselect/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/timeline/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/metergroup/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/tag/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/datatable/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/editor/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/dock/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/inputgroup/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/scrollpanel/index.ts","../../../../libs/ui-kit/src/themes/stellar/components/badge/index.ts","../../../../libs/ui-kit/src/themes/stellar/index.ts","../../../../libs/ui-kit/src/themes/abstract-base.theme.ts","../../../../libs/ui-kit/src/utilities/services/debug-log.service.ts","../../../../libs/ui-kit/src/utilities/services/media-query.service.ts","../../../../libs/ui-kit/src/utilities/services/window.service.ts","../../../../libs/ui-kit/src/utilities/@utilities.module.ts","../../../../libs/ui-kit/src/utilities/index.ts","../../../../libs/ui-kit/src/localization/pipes/locale-pipe-base.ts","../../../../libs/ui-kit/src/formatting/pipes/relative-time.pipe.ts","../../../../libs/ui-kit/src/formatting/components/code-block.component.ts","../../../../libs/ui-kit/src/localization/services/datetime-config.service.ts","../../../../libs/ui-kit/src/localization/pipes/app-datetime.pipe.ts","../../../../libs/ui-kit/src/localization/services/locale.service.ts","../../../../libs/ui-kit/src/localization/@localization.module.ts","../../../../libs/ui-kit/src/dashboard/components/chart-palette-picker.component.ts","../../../../libs/ui-kit/src/dashboard/components/dashboard-canvas.component.ts","../../../../libs/ui-kit/src/dashboard/components/dashboard-widget-base.component.ts","../../../../libs/ui-kit/src/dashboard/components/dashboard-widget-palette.component.ts","../../../../libs/ui-kit/src/dashboard-builder/chart-options.ts","../../../../libs/ui-kit/src/dashboard/components/widget-chart.component.ts","../../../../libs/ui-kit/src/sc-datepicker/sc-datepicker.component.ts","../../../../libs/ui-kit/src/sc-datepicker/sc-datepicker.component.html","../../../../libs/ui-kit/src/sc-datepicker/index.ts","../../../../libs/ui-kit/src/time-range-picker/time-range-picker.component.ts","../../../../libs/ui-kit/src/time-range-picker/time-range-picker.component.html","../../../../libs/ui-kit/src/filter-bar/filter-bar.models.ts","../../../../libs/ui-kit/src/filter-bar/components/base-filter-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/range-filter-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/discrete-filter-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/number-range-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/date-range-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/dropdown-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/text-input-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/autocomplete-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/number-input-row.component.ts","../../../../libs/ui-kit/src/filter-bar/components/filter-validation-messages.component.ts","../../../../libs/ui-kit/src/filter-bar/components/index.ts","../../../../libs/ui-kit/src/filter-bar/utils/filter-query-serializer.ts","../../../../libs/ui-kit/src/filter-bar/filter-value-selector-v2.component.ts","../../../../libs/ui-kit/src/filter-bar/filter-value-selector-v2.component.html","../../../../libs/ui-kit/src/filter-bar/filter-chip.component.ts","../../../../libs/ui-kit/src/filter-bar/filter-bar.store.ts","../../../../libs/ui-kit/src/filter-bar/filter-property-selector.component.ts","../../../../libs/ui-kit/src/filter-bar/add-filter-popover.component.ts","../../../../libs/ui-kit/src/filter-bar/filter-bar.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-config-view.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-config-modal.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-counter.component.ts","../../../../libs/ui-kit/src/dashboard/config/chart-styles.ts","../../../../libs/ui-kit/src/dashboard/config/stellar-echarts-theme.ts","../../../../libs/ui-kit/src/dashboard/components/widget-chart-v2.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-section-header.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-text-block.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-alert-table.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-incident-table.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-ranked-list.component.ts","../../../../libs/ui-kit/src/dashboard/components/widget-ai-summary.component.ts","../../../../libs/ui-kit/src/dashboard/models/dashboard.models.ts","../../../../libs/ui-kit/src/dashboard/config/widget-palette.config.ts","../../../../libs/ui-kit/src/dashboard/index.ts","../../../../libs/ui-kit/src/dashboard-builder/models.ts","../../../../libs/ui-kit/src/dashboard-builder/index.ts","../../../../libs/ui-kit/src/daily-picker/daily-picker.component.ts","../../../../libs/ui-kit/src/daily-picker/daily-picker.component.html","../../../../libs/ui-kit/src/page-title-bar/page-title-bar.component.ts","../../../../libs/ui-kit/src/page-title-bar/page-title-bar.component.html","../../../../libs/ui-kit/src/page-header/page-header.component.ts","../../../../libs/ui-kit/src/page-header/page-header.component.html","../../../../libs/ui-kit/src/panel/panel.component.ts","../../../../libs/ui-kit/src/panel/panel.component.html","../../../../libs/ui-kit/src/filter-bar/filter-value-selector.component.ts","../../../../libs/ui-kit/src/filter-bar/services/filter-validation.service.ts","../../../../libs/ui-kit/src/auto-refresh-button/auto-refresh-button.component.ts","../../../../libs/ui-kit/src/stellarcyber-ui-kit.ts"],"sourcesContent":["export abstract class ApplicationBaseComponent {\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class LocalStorageService {\n  public get(key: string): any {\n    const value = localStorage.getItem(this.getStorageKey(key));\n    return value === null ? null : JSON.parse(value);\n  }\n\n  public set(key: string, data: any): void {\n    localStorage.setItem(this.getStorageKey(key), JSON.stringify(data));\n  }\n\n  public remove(key: string): void {\n    localStorage.removeItem(this.getStorageKey(key));\n  }\n\n  public getStorageKey(key: string): string {\n    return 'qs:' + key;\n  }\n}\n","import { Directive, ElementRef, input, OnInit, OnDestroy, Renderer2, inject } from '@angular/core';\nimport { LocalStorageService } from '../../utilities/services/local-storage.service';\n\nexport const RESIZABLE_WIDTH_KEY_PREFIX = 'pref-width-';\n\n@Directive({\n  selector: '[scResizable]',\n  standalone: true,\n  providers: [LocalStorageService],\n})\nexport class ResizableDirective implements OnInit, OnDestroy {\n  minWidth = input(200);\n  maxWidth = input(400);\n  defaultWidth = input(300);\n  handlePosition = input<'left' | 'right'>('right');\n  storageKey = input<string | null>(null);\n\n  private readonly localStorageService = inject(LocalStorageService);\n  private readonly renderer = inject(Renderer2);\n  private readonly el = inject(ElementRef);\n\n  private readonly element: HTMLElement = this.el.nativeElement;\n\n  private isResizing = false;\n  private startX = 0;\n  private startWidth = 0;\n  private resizingElement?: HTMLElement;\n\n\n  public ngOnInit(): void {\n    this.renderer.setStyle(this.element, 'position', 'relative');\n    this.resizingElement = this.element;\n    this.createHandle();\n\n    // Load saved width from localStorage\n    const savedWidth = this.localStorageService.get(this.getStorageKey());\n    this.updateNavWidth(savedWidth ?? this.defaultWidth());\n  }\n\n  public ngOnDestroy(): void {\n    // Clean up event listeners if still attached\n    if (this.isResizing) {\n      document.removeEventListener('mousemove', this.onResizeMove);\n      document.removeEventListener('mouseup', this.onResizeEnd);\n    }\n  }\n\n  public createHandle(): void {\n    const handle = this.renderer.createElement('div');\n    this.renderer.addClass(handle, 'resize-handle');\n    this.renderer.addClass(handle, this.handlePosition());\n    this.renderer.listen(handle, 'mousedown', (event: MouseEvent) => this.onResizeStart(event));\n    this.renderer.appendChild(this.element, handle);\n  }\n\n  private getStorageKey(): string {\n    if (this.storageKey()) {\n      return `${ RESIZABLE_WIDTH_KEY_PREFIX }${ this.storageKey() }`;\n    }\n\n    const classList = Array.from(this.element.classList)\n      .filter(x => x !== 'ng-star-inserted');\n\n    return `${ RESIZABLE_WIDTH_KEY_PREFIX }${ classList.join('-') }`;\n  }\n\n  private onResizeStart(event: MouseEvent): void {\n    this.isResizing = true;\n    this.startX = event.clientX;\n    this.startWidth = this.resizingElement?.offsetWidth ?? 0;\n    document.addEventListener('mousemove', this.onResizeMove);\n    document.addEventListener('mouseup', this.onResizeEnd);\n    event.preventDefault();\n  }\n\n  private onResizeMove = (event: MouseEvent): void => {\n    if (!this.isResizing) {\n      return;\n    }\n\n    let deltaX = event.clientX - this.startX;\n    if (this.handlePosition() === 'left') {\n      deltaX = this.startX - event.clientX;\n    }\n    const newWidth = Math.max(this.minWidth(), Math.min(this.maxWidth(), this.startWidth + deltaX));\n    this.updateNavWidth(newWidth);\n  };\n\n  private onResizeEnd = (): void => {\n    if (!this.isResizing) {\n      return;\n    }\n\n    this.isResizing = false;\n    document.removeEventListener('mousemove', this.onResizeMove);\n    document.removeEventListener('mouseup', this.onResizeEnd);\n    this.localStorageService.set(this.getStorageKey(), this.resizingElement?.offsetWidth ?? 0);\n  };\n\n  private updateNavWidth(width: number): void {\n    if (!this.resizingElement) return;\n    this.renderer.setStyle(this.resizingElement, 'width', `${width}px`);\n    this.renderer.setStyle(this.resizingElement, 'flex', `0 0 ${width}px`);\n  }\n}\n","import { Component, Input, OnDestroy } from \"@angular/core\";\nimport { ResizableDirective } from '../directives/resizable.directive';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  imports: [ResizableDirective, CommonModule],\n  selector: 'sc-context-pane',\n  template: `\n    <!-- eslint-disable-next-line\n      @angular-eslint/template/click-events-have-key-events,\n      @angular-eslint/template/interactive-supports-focus -->\n    <div class=\"context-scrim\" [ngClass]=\"{ visible, closing }\" *ngIf=\"floating\" (click)=\"close()\"></div>\n    <button class=\"context-close\" [ngClass]=\"{ closing }\" *ngIf=\"visible && floating\" (click)=\"close()\">\n      <i class=\"pi pi-times\"></i>\n    </button>\n    <div *ngIf=\"visible\" class=\"context-content shaded\" [ngClass]=\"{ floating, closing }\" scResizable [minWidth]=\"minWidth\" [maxWidth]=\"maxWidth\" [defaultWidth]=\"defaultWidth\" handlePosition=\"left\" storageKey=\"context-pane\">\n      <ng-content></ng-content>\n    </div>\n  `,\n  styleUrl: './context-pane.component.scss'\n})\nexport class ContextPaneComponent implements OnDestroy {\n\n  @Input()\n  public minWidth = 200;\n\n  @Input()\n  public maxWidth = 1200;\n\n  @Input()\n  public defaultWidth = 600;\n\n  @Input()\n  public floating = false;\n\n  @Input()\n  public visible = true;\n\n  public closing = false;\n\n  private escListener: ((event: KeyboardEvent) => void) | null = null;\n\n  public close(): void {\n    this.closing = true;\n    this.removeEscListener();\n    setTimeout(() => {\n      this.closing = false;\n      this.visible = false;\n    }, 500);\n  }\n\n  public show(): void {\n    this.visible = true;\n    this.addEscListener();\n  }\n\n  private addEscListener(): void {\n    if (this.escListener) return;\n    this.escListener = (event: KeyboardEvent) => {\n      if (event.key === 'Escape' || event.key === 'Esc') {\n        this.close();\n      }\n    };\n    window.addEventListener('keydown', this.escListener);\n  }\n\n  private removeEscListener(): void {\n    if (this.escListener) {\n      window.removeEventListener('keydown', this.escListener);\n      this.escListener = null;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.removeEscListener();\n  }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n  selector: 'sc-inset-header',\n  template: `\n    <div class=\"inset-header shaded\">\n      <ng-content />\n    </div>\n  `,\n  styleUrl: './inset-header.component.scss'\n})\nexport class InsetHeaderComponent {\n\n}\n","import { AfterContentInit, Component, ElementRef, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, RouterModule, ActivatedRoute } from '@angular/router';\nimport { LocalStorageService } from '../../utilities/services/local-storage.service';\nimport { ResizableDirective } from '../directives/resizable.directive';\n\n@Component({\n  providers: [LocalStorageService],\n  imports: [CommonModule, RouterModule, ResizableDirective],\n  selector: 'sc-layout-common',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <div class=\"layout\">\n      <ng-content select=\"sc-nav-pane\" />\n      <div class=\"layout-content\" [ngClass]=\"{ 'limited-width': enforceMaxWidth }\" #content>\n        <ng-content select=\"sc-inset-header\" />\n        <ng-content select=\"p-tabs.primary\" />\n        <div class=\"content-wrapper\">\n          <ng-content />\n        </div>\n      </div>\n      <div class=\"index-content\" *ngIf=\"includeTableOfContents || showPageIndexPane\" scResizable handlePosition=\"left\" [defaultWidth]=\"indexDefaultWidth\" [minWidth]=\"indexMinWidth\" [maxWidth]=\"indexMaxWidth\">\n        <ul *ngIf=\"includeTableOfContents\">\n          <li *ngFor=\"let item of indexItems\" class=\"heading-{{ item.level }}\">\n            <a [href]=\"getAbsoluteUrl(item.id)\" (click)=\"scrollTo(item.id, $event)\">{{ item.text }}</a>\n          </li>\n        </ul>\n        <ng-content select=\"sc-page-index\" />\n      </div>\n      <ng-content select=\"sc-context-pane\" />\n    </div>\n  `,\n  styleUrl: './layout-common.component.scss',\n})\nexport class LayoutCommonComponent implements AfterContentInit, OnInit {\n\n  @ViewChild('content', { static: true })\n  content!: ElementRef;\n\n  public indexItems: any[] = [];\n\n  @Input()\n  public showNavPane = false;\n\n  @Input()\n  public showContextPane = false;\n\n  @Input()\n  public showPageIndexPane = false;\n\n  @Input()\n  public includeTableOfContents = false;\n\n  @Input()\n  public enforceMaxWidth = false;\n\n  @Input()\n  public selectedTab = '';\n\n  @Input()\n  public indexDefaultWidth = 300;\n\n  @Input()\n  public indexMinWidth = 300;\n\n  @Input()\n  public indexMaxWidth = 600;\n\n  constructor(private router: Router, private route: ActivatedRoute) {}\n\n  public onTabChange(value: string | number) {\n    this.router.navigate(['..', value.toString()], { relativeTo: this.route });\n    setTimeout(() => {\n      this.buildIndex();\n    });\n  }\n\n  public ngOnInit() {\n    this.route.params.subscribe((params) => {\n      this.selectedTab = params['tab'];\n    });\n  }\n\n  public ngAfterContentInit(): void {\n    setTimeout(() => {\n      this.buildIndex();\n      this.scrollToHash();\n    });\n  }\n\n  private scrollToHash(): void {\n    const hash = window.location.hash;\n    if (hash) {\n      const anchor = hash.substring(1); // Remove the # character\n      this.scrollToElement(anchor);\n    }\n  }\n\n  private scrollToElement(anchor: string): void {\n    const element = document.getElementById(anchor);\n    if (element) {\n      element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }\n\n  public scrollTo(anchor: string, event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.scrollToElement(anchor);\n    window.history.pushState({}, '', `${ location.pathname }#${ anchor }`);\n  }\n\n  public buildIndex(): void {\n    const headings = this.content.nativeElement.querySelectorAll('h1, h2, h3, h4, h5, h6');\n    headings.forEach((heading: any) => {\n      heading.id = heading.textContent?.replace(/[^\\w\\s]+/g, '').replace(/\\s+/g, '-').toLowerCase();\n      heading.style.scrollMarginTop = '3rem';\n    });\n\n    this.indexItems = Array.from(headings).filter((x: any) => !x.hasAttribute('data-omit-from-toc')).map((x: any) => {\n      return {\n        level: parseInt(x.tagName[1]),\n        text: x.textContent || '',\n        id: x.id,\n      };\n    });\n  }\n\n  public getAbsoluteUrl(anchor: string): string {\n    return `${ location.pathname }#${ anchor }`;\n  }\n\n}\n","import { Component, ChangeDetectionStrategy, contentChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResizableDirective } from '../directives/resizable.directive';\n\n\n@Component({\n  selector: 'sc-layout-left-pane',\n  template: `\n    <ng-content />\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutLeftPaneComponent {\n}\n\n@Component({\n  selector: 'sc-layout-right-pane',\n  template: `\n    <ng-content />\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutRightPaneComponent {\n}\n\n@Component({\n  selector: 'sc-layout-main',\n  standalone: true,\n  imports: [CommonModule, ResizableDirective],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"layout-main\">\n      <div\n        *ngIf=\"leftContent()\"\n        class=\"layout-main__left-pane\"\n        scResizable\n        handlePosition=\"right\"\n        [defaultWidth]=\"200\"\n        [minWidth]=\"150\"\n        [maxWidth]=\"400\"\n        storageKey=\"layout-left-pane\">\n        <ng-content select=\"sc-layout-left-pane\" />\n      </div>\n\n      <div class=\"layout-main__content\" [ngClass]=\"{\n        'layout-main__content--full': !leftContent() && !rightContent(),\n        'layout-main__content--with-left': leftContent() && !rightContent(),\n        'layout-main__content--with-right': !leftContent() && rightContent(),\n        'layout-main__content--with-panes': leftContent() && rightContent()\n      }\">\n        <ng-content select=\"sc-layout-header\" />\n        <div class=\"layout-main__body\">\n          <ng-content />\n        </div>\n      </div>\n\n      <div\n        *ngIf=\"rightContent()\"\n        class=\"layout-main__right-pane\"\n        scResizable\n        handlePosition=\"left\"\n        [defaultWidth]=\"350\"\n        [minWidth]=\"250\"\n        [maxWidth]=\"600\"\n        storageKey=\"layout-right-pane\">\n        <ng-content select=\"sc-layout-right-pane\" />\n      </div>\n    </div>\n  `,\n  styleUrl: './layout-main.component.scss'\n})\nexport class LayoutMainComponent {\n  leftContent = contentChild<LayoutLeftPaneComponent>(LayoutLeftPaneComponent);\n  rightContent = contentChild<LayoutRightPaneComponent>(LayoutRightPaneComponent);\n}\n","import { Component, ChangeDetectionStrategy, input, contentChild, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\nimport { MenuItem } from 'primeng/api'\n\n@Component({\n  selector: 'sc-layout-header-actions',\n  template: `\n    <ng-content />\n  `,\n  styles: [\n    `:host { display: flex; gap: 0.5rem; align-items: center; }`\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutHeaderActionsComponent {\n}\n\n@Component({\n  selector: 'sc-layout-header-title',\n  template: `\n    <ng-content />\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutHeaderTitleComponent {\n}\n\n@Component({\n  selector: 'sc-layout-header-tabs',\n  template: `\n    <ng-content />\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutHeaderTabsComponent {\n}\n\n@Component({\n  selector: 'sc-layout-header',\n  standalone: true,\n  imports: [CommonModule, BreadcrumbModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"layout-header\">\n      <div class=\"layout-header__main\">\n        <div class=\"layout-header__left\">\n          <p-breadcrumb\n            [model]=\"breadcrumbItems()\"\n            styleClass=\"!tw-pl-1 tw-text-sm\"\n            [home]=\"homeItem()\">\n          </p-breadcrumb>\n        </div>\n        <div class=\"layout-header__actions\">\n          <ng-content select=\"sc-layout-header-actions\" />\n        </div>\n      </div>\n      <div class=\"layout-header__title-row\">\n        <h1 class=\"layout-header__title tw-flex tw-items-center tw-gap-2 !tw-text-lg !tw-font-semibold\">\n          <ng-content select=\"sc-layout-header-title\" />\n        </h1>\n      </div>\n      <div class=\"layout-header__tabs\" *ngIf=\"hasTabs()\">\n        <ng-content select=\"sc-layout-header-tabs\" />\n      </div>\n    </div>\n  `,\n  styleUrl: './layout-header.component.scss'\n})\nexport class LayoutHeaderComponent {\n  tabsContent = contentChild<LayoutHeaderTabsComponent>(LayoutHeaderTabsComponent);\n\n  hasTabs = computed(() => !!this.tabsContent());\n\n  breadcrumbItems = input<MenuItem[]>([]);\n  homeItem = input<MenuItem>({ icon: 'pi pi-home', routerLink: '/' });\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { IconField } from 'primeng/iconfield';\nimport { PanelMenu } from 'primeng/panelmenu';\nimport { LocalStorageService } from '../../utilities/services/local-storage.service';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ResizableDirective } from '../directives/resizable.directive';\n\n@Component({\n  providers: [LocalStorageService],\n  imports: [CommonModule, IconField, InputIconModule, PanelMenu, RouterModule, ResizableDirective, InputTextModule],\n  selector: 'sc-nav-pane',\n  template: `\n    <div class=\"nav-content shaded\" scResizable [minWidth]=\"minWidth\" [maxWidth]=\"maxWidth\">\n      <p-iconfield *ngIf=\"items.length > 0\">\n        <p-inputicon class=\"pi pi-search\" />\n        <input type=\"text\" class=\"tw-w-full\" pInputText placeholder=\"Search\" pSize=\"small\" />\n      </p-iconfield>\n      <p-panelmenu [model]=\"items\" *ngIf=\"items.length > 0\">\n        <ng-template #item let-item>\n          <ng-container *ngIf=\"item.route; else navGroup\">\n              <a [routerLink]=\"item.route\" class=\"nav-link\">\n                <span [class]=\"item.icon\"></span>\n                <span>{{ item.label }}</span>\n              </a>\n          </ng-container>\n          <ng-template #navGroup>\n            <span class=\"nav-group\">\n              <span>{{ item.label }}</span>\n              <i *ngIf=\"item.items\" class=\"pi pi-angle-down\"></i>\n            </span>\n          </ng-template>\n        </ng-template>\n      </p-panelmenu>\n      <ng-content />\n    </div>\n  `,\n  styleUrl: './nav-pane.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NavPaneComponent {\n  @Input()\n  public items: MenuItem[] = [];\n\n  @Input()\n  public minWidth = 200;\n\n  @Input()\n  public maxWidth = 400;\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  imports: [CommonModule],\n  selector: 'sc-page-index',\n  template: `\n    <div class=\"index-content-inset tw-p-4 tw-mx-4\">\n      <ng-content />\n    </div>\n  `,\n})\nexport class PageIndexComponent {}\n","export const BaseTheme = {\n  primitive: {\n    borderRadius: {\n      none: \"0\",\n      xs: \"2px\",\n      sm: \"4px\",\n      md: \"6px\",\n      lg: \"8px\",\n      xl: \"12px\"\n    },\n    emerald: {\n      \"50\": \"#ecfdf5\",\n      \"100\": \"#d1fae5\",\n      \"200\": \"#a7f3d0\",\n      \"300\": \"#6ee7b7\",\n      \"400\": \"#34d399\",\n      \"500\": \"#10b981\",\n      \"600\": \"#059669\",\n      \"700\": \"#047857\",\n      \"800\": \"#065f46\",\n      \"900\": \"#064e3b\",\n      \"950\": \"#022c22\"\n    },\n    green: {\n      \"50\": \"#f0fdf4\",\n      \"100\": \"#dcfce7\",\n      \"200\": \"#bbf7d0\",\n      \"300\": \"#86efac\",\n      \"400\": \"#4ade80\",\n      \"500\": \"#22c55e\",\n      \"600\": \"#16a34a\",\n      \"700\": \"#15803d\",\n      \"800\": \"#166534\",\n      \"900\": \"#14532d\",\n      \"950\": \"#052e16\"\n    },\n    lime: {\n      \"50\": \"#f7fee7\",\n      \"100\": \"#ecfccb\",\n      \"200\": \"#d9f99d\",\n      \"300\": \"#bef264\",\n      \"400\": \"#a3e635\",\n      \"500\": \"#84cc16\",\n      \"600\": \"#65a30d\",\n      \"700\": \"#4d7c0f\",\n      \"800\": \"#3f6212\",\n      \"900\": \"#365314\",\n      \"950\": \"#1a2e05\"\n    },\n    red: {\n      \"50\": \"#fef2f2\",\n      \"100\": \"#fee2e2\",\n      \"200\": \"#fecaca\",\n      \"300\": \"#fca5a5\",\n      \"400\": \"#f87171\",\n      \"500\": \"#ef4444\",\n      \"600\": \"#dc2626\",\n      \"700\": \"#b91c1c\",\n      \"800\": \"#991b1b\",\n      \"900\": \"#7f1d1d\",\n      \"950\": \"#450a0a\"\n    },\n    orange: {\n      \"50\": \"#fff7ed\",\n      \"100\": \"#ffedd5\",\n      \"200\": \"#fed7aa\",\n      \"300\": \"#fdba74\",\n      \"400\": \"#fb923c\",\n      \"500\": \"#f97316\",\n      \"600\": \"#ea580c\",\n      \"700\": \"#c2410c\",\n      \"800\": \"#9a3412\",\n      \"900\": \"#7c2d12\",\n      \"950\": \"#431407\"\n    },\n    amber: {\n      \"50\": \"#fffbeb\",\n      \"100\": \"#fef3c7\",\n      \"200\": \"#fde68a\",\n      \"300\": \"#fcd34d\",\n      \"400\": \"#fbbf24\",\n      \"500\": \"#f59e0b\",\n      \"600\": \"#d97706\",\n      \"700\": \"#b45309\",\n      \"800\": \"#92400e\",\n      \"900\": \"#78350f\",\n      \"950\": \"#451a03\"\n    },\n    yellow: {\n      \"50\": \"#fefce8\",\n      \"100\": \"#fef9c3\",\n      \"200\": \"#fef08a\",\n      \"300\": \"#fde047\",\n      \"400\": \"#facc15\",\n      \"500\": \"#eab308\",\n      \"600\": \"#ca8a04\",\n      \"700\": \"#a16207\",\n      \"800\": \"#854d0e\",\n      \"900\": \"#713f12\",\n      \"950\": \"#422006\"\n    },\n    teal: {\n      \"50\": \"#f0fdfa\",\n      \"100\": \"#ccfbf1\",\n      \"200\": \"#99f6e4\",\n      \"300\": \"#5eead4\",\n      \"400\": \"#2dd4bf\",\n      \"500\": \"#14b8a6\",\n      \"600\": \"#0d9488\",\n      \"700\": \"#0f766e\",\n      \"800\": \"#115e59\",\n      \"900\": \"#134e4a\",\n      \"950\": \"#042f2e\"\n    },\n    cyan: {\n      \"50\": \"#ecfeff\",\n      \"100\": \"#cffafe\",\n      \"200\": \"#a5f3fc\",\n      \"300\": \"#67e8f9\",\n      \"400\": \"#22d3ee\",\n      \"500\": \"#06b6d4\",\n      \"600\": \"#0891b2\",\n      \"700\": \"#0e7490\",\n      \"800\": \"#155e75\",\n      \"900\": \"#164e63\",\n      \"950\": \"#083344\"\n    },\n    sky: {\n      \"50\": \"#f0f9ff\",\n      \"100\": \"#e0f2fe\",\n      \"200\": \"#bae6fd\",\n      \"300\": \"#7dd3fc\",\n      \"400\": \"#38bdf8\",\n      \"500\": \"#0ea5e9\",\n      \"600\": \"#0284c7\",\n      \"700\": \"#0369a1\",\n      \"800\": \"#075985\",\n      \"900\": \"#0c4a6e\",\n      \"950\": \"#082f49\"\n    },\n    blue: {\n      \"50\": \"#eff6ff\",\n      \"100\": \"#dbeafe\",\n      \"200\": \"#bfdbfe\",\n      \"300\": \"#93c5fd\",\n      \"400\": \"#60a5fa\",\n      \"500\": \"#3b82f6\",\n      \"600\": \"#2563eb\",\n      \"700\": \"#1d4ed8\",\n      \"800\": \"#1e40af\",\n      \"900\": \"#1e3a8a\",\n      \"950\": \"#172554\"\n    },\n    indigo: {\n      \"50\": \"#eef2ff\",\n      \"100\": \"#e0e7ff\",\n      \"200\": \"#c7d2fe\",\n      \"300\": \"#a5b4fc\",\n      \"400\": \"#818cf8\",\n      \"500\": \"#6366f1\",\n      \"600\": \"#4f46e5\",\n      \"700\": \"#4338ca\",\n      \"800\": \"#3730a3\",\n      \"900\": \"#312e81\",\n      \"950\": \"#1e1b4b\"\n    },\n    violet: {\n      \"50\": \"#f5f3ff\",\n      \"100\": \"#ede9fe\",\n      \"200\": \"#ddd6fe\",\n      \"300\": \"#c4b5fd\",\n      \"400\": \"#a78bfa\",\n      \"500\": \"#8b5cf6\",\n      \"600\": \"#7c3aed\",\n      \"700\": \"#6d28d9\",\n      \"800\": \"#5b21b6\",\n      \"900\": \"#4c1d95\",\n      \"950\": \"#2e1065\"\n    },\n    purple: {\n      \"50\": \"#faf5ff\",\n      \"100\": \"#f3e8ff\",\n      \"200\": \"#e9d5ff\",\n      \"300\": \"#d8b4fe\",\n      \"400\": \"#c084fc\",\n      \"500\": \"#a855f7\",\n      \"600\": \"#9333ea\",\n      \"700\": \"#7e22ce\",\n      \"800\": \"#6b21a8\",\n      \"900\": \"#581c87\",\n      \"950\": \"#3b0764\"\n    },\n    fuchsia: {\n      \"50\": \"#fdf4ff\",\n      \"100\": \"#fae8ff\",\n      \"200\": \"#f5d0fe\",\n      \"300\": \"#f0abfc\",\n      \"400\": \"#e879f9\",\n      \"500\": \"#d946ef\",\n      \"600\": \"#c026d3\",\n      \"700\": \"#a21caf\",\n      \"800\": \"#86198f\",\n      \"900\": \"#701a75\",\n      \"950\": \"#4a044e\"\n    },\n    pink: {\n      \"50\": \"#fdf2f8\",\n      \"100\": \"#fce7f3\",\n      \"200\": \"#fbcfe8\",\n      \"300\": \"#f9a8d4\",\n      \"400\": \"#f472b6\",\n      \"500\": \"#ec4899\",\n      \"600\": \"#db2777\",\n      \"700\": \"#be185d\",\n      \"800\": \"#9d174d\",\n      \"900\": \"#831843\",\n      \"950\": \"#500724\"\n    },\n    rose: {\n      \"50\": \"#fff1f2\",\n      \"100\": \"#ffe4e6\",\n      \"200\": \"#fecdd3\",\n      \"300\": \"#fda4af\",\n      \"400\": \"#fb7185\",\n      \"500\": \"#f43f5e\",\n      \"600\": \"#e11d48\",\n      \"700\": \"#be123c\",\n      \"800\": \"#9f1239\",\n      \"900\": \"#881337\",\n      \"950\": \"#4c0519\"\n    },\n    slate: {\n      \"50\": \"#f8fafc\",\n      \"100\": \"#f1f5f9\",\n      \"200\": \"#e2e8f0\",\n      \"300\": \"#cbd5e1\",\n      \"400\": \"#94a3b8\",\n      \"500\": \"#64748b\",\n      \"600\": \"#475569\",\n      \"700\": \"#334155\",\n      \"800\": \"#1e293b\",\n      \"900\": \"#0f172a\",\n      \"950\": \"#020617\"\n    },\n    gray: {\n      \"50\": \"#f9fafb\",\n      \"100\": \"#f3f4f6\",\n      \"200\": \"#e5e7eb\",\n      \"300\": \"#d1d5db\",\n      \"400\": \"#9ca3af\",\n      \"500\": \"#6b7280\",\n      \"600\": \"#4b5563\",\n      \"700\": \"#374151\",\n      \"800\": \"#1f2937\",\n      \"900\": \"#111827\",\n      \"950\": \"#030712\"\n    },\n    zinc: {\n      \"50\": \"#fafafa\",\n      \"100\": \"#f4f4f5\",\n      \"200\": \"#e4e4e7\",\n      \"300\": \"#d4d4d8\",\n      \"400\": \"#a1a1aa\",\n      \"500\": \"#71717a\",\n      \"600\": \"#52525b\",\n      \"700\": \"#3f3f46\",\n      \"800\": \"#27272a\",\n      \"900\": \"#18181b\",\n      \"950\": \"#09090b\"\n    },\n    neutral: {\n      \"50\": \"#fafafb\",\n      \"100\": \"#f3f3f6\",\n      \"200\": \"#e3e3e8\",\n      \"300\": \"#d2d2da\",\n      \"400\": \"#9d9dae\",\n      \"500\": \"#737378\",\n      \"600\": \"#555558\",\n      \"700\": \"#414144\",\n      \"800\": \"#282829\",\n      \"900\": \"#19191a\",\n      \"950\": \"#0a0a0a\"\n    },\n    stone: {\n      \"50\": \"#fafaf9\",\n      \"100\": \"#f5f5f4\",\n      \"200\": \"#e7e5e4\",\n      \"300\": \"#ececea\",\n      \"400\": \"#a8a29e\",\n      \"500\": \"#78716c\",\n      \"600\": \"#57534e\",\n      \"700\": \"#44403c\",\n      \"800\": \"#292524\",\n      \"900\": \"#1c1917\",\n      \"950\": \"#0c0a09\"\n    }\n  },\n  semantic: {\n    transitionDuration: \"0.2s\",\n    focusRing: {\n      width: \"1px\",\n      style: \"solid\",\n      color: \"{primary.color}\",\n      offset: \"2px\",\n      shadow: \"0px 0px 0px 0px rgba(0, 0, 0, 0)\"\n    },\n    disabledOpacity: \"0.6\",\n    iconSize: \"1rem\",\n    anchorGutter: \"2px\",\n    primary: {\n      \"50\": \"{blue.50}\",\n      \"100\": \"{blue.100}\",\n      \"200\": \"{blue.200}\",\n      \"300\": \"{blue.300}\",\n      \"400\": \"{blue.400}\",\n      \"500\": \"{blue.500}\",\n      \"600\": \"{blue.600}\",\n      \"700\": \"{blue.700}\",\n      \"800\": \"{blue.800}\",\n      \"900\": \"{blue.900}\",\n      \"950\": \"{blue.950}\"\n    },\n    formField: {\n      paddingX: \"0.75rem\",\n      paddingY: \"0.5rem\",\n      sm: {\n        fontSize: \"0.875rem\",\n        paddingX: \"0.625rem\",\n        paddingY: \"0.375rem\"\n      },\n      lg: {\n        fontSize: \"1.125rem\",\n        paddingX: \"0.875rem\",\n        paddingY: \"0.625rem\"\n      },\n      borderRadius: \"{border.radius.md}\",\n      focusRing: {\n        width: \"0px\",\n        style: \"none\",\n        color: \"transparent\",\n        offset: \"0px\",\n        shadow: \"0px 0px 0px 0px rgba(0, 0, 0, 0)\"\n      },\n      transitionDuration: \"{transition.duration}\"\n    },\n    list: {\n      padding: \"0.25rem 0.25rem\",\n      gap: \"2px\",\n      header: {\n        padding: \"0.5rem 1rem 0.25rem 1rem\"\n      },\n      option: {\n        padding: \"0.5rem 0.75rem\",\n        borderRadius: \"{border.radius.sm}\"\n      },\n      optionGroup: {\n        padding: \"0.5rem 0.75rem\",\n        fontWeight: \"600\"\n      }\n    },\n    content: {\n      borderRadius: \"{border.radius.md}\"\n    },\n    mask: {\n      transitionDuration: \"0.2s\"\n    },\n    navigation: {\n      list: {\n        padding: \"0.25rem 0.25rem\",\n        gap: \"2px\"\n      },\n      item: {\n        padding: \"0.5rem 0.75rem\",\n        borderRadius: \"{border.radius.sm}\",\n        gap: \"0.5rem\"\n      },\n      submenuLabel: {\n        padding: \"0.5rem 0.75rem\",\n        fontWeight: \"600\"\n      },\n      submenuIcon: {\n        size: \"0.875rem\"\n      }\n    },\n    overlay: {\n      select: {\n        borderRadius: \"{border.radius.md}\",\n        shadow: \"0px 4px 6px -1px rgba(0, 0, 0, 0.1), 0px 2px 4px -2px rgba(0, 0, 0, 0.1)\"\n      },\n      popover: {\n        borderRadius: \"{border.radius.md}\",\n        padding: \"0.75rem\",\n        shadow: \"0px 4px 6px -1px rgba(0, 0, 0, 0.1), 0px 2px 4px -2px rgba(0, 0, 0, 0.1)\"\n      },\n      modal: {\n        borderRadius: \"{border.radius.xl}\",\n        padding: \"1.25rem\",\n        shadow: \"0px 20px 25px -5px rgba(0, 0, 0, 0.1), 0px 8px 10px -6px rgba(0, 0, 0, 0.1)\"\n      },\n      navigation: {\n        shadow: \"0px 4px 6px -1px rgba(0, 0, 0, 0.1), 0px 2px 4px -2px rgba(0, 0, 0, 0.1)\"\n      }\n    },\n    colorScheme: {\n      light: {\n        surface: {\n          \"0\": \"#ffffff\",\n          \"50\": \"{stone.50}\",\n          \"100\": \"{stone.100}\",\n          \"200\": \"{stone.200}\",\n          \"300\": \"{stone.300}\",\n          \"400\": \"{stone.400}\",\n          \"500\": \"{stone.500}\",\n          \"600\": \"{stone.600}\",\n          \"700\": \"{stone.700}\",\n          \"800\": \"{stone.800}\",\n          \"900\": \"{stone.900}\",\n          \"950\": \"{stone.950}\"\n        },\n        primary: {\n          color: \"{primary.500}\",\n          contrastColor: \"#ffffff\",\n          hoverColor: \"{primary.600}\",\n          activeColor: \"{primary.700}\"\n        },\n        highlight: {\n          background: \"{primary.50}\",\n          focusBackground: \"{primary.100}\",\n          color: \"{primary.700}\",\n          focusColor: \"{primary.800}\"\n        },\n        mask: {\n          background: \"#00000066\",\n          color: \"{surface.200}\"\n        },\n        formField: {\n          background: \"transparent\",\n          disabledBackground: \"{surface.200}\",\n          filledBackground: \"{surface.0}\",\n          filledHoverBackground: \"{surface.0}\",\n          filledFocusBackground: \"{surface.0}\",\n          borderColor: \"{surface.300}\",\n          hoverBorderColor: \"{surface.400}\",\n          focusBorderColor: \"{primary.color}\",\n          invalidBorderColor: \"{red.400}\",\n          color: \"{surface.700}\",\n          disabledColor: \"{surface.500}\",\n          placeholderColor: \"{surface.600}\",\n          invalidPlaceholderColor: \"{red.600}\",\n          floatLabelColor: \"{surface.500}\",\n          floatLabelFocusColor: \"{surface.500}\",\n          floatLabelActiveColor: \"{surface.500}\",\n          floatLabelInvalidColor: \"{form.field.invalid.placeholder.color}\",\n          iconColor: \"{surface.400}\",\n          shadow: \"0px 1px 2px 0px rgba(18, 18, 23, 0.05)\"\n        },\n        text: {\n          color: \"{surface.700}\",\n          hoverColor: \"{surface.800}\",\n          mutedColor: \"{surface.500}\",\n          hoverMutedColor: \"{surface.600}\"\n        },\n        content: {\n          background: \"{surface.0}\",\n          hoverBackground: \"{surface.100}\",\n          borderColor: \"{surface.300}\",\n          color: \"{text.color}\",\n          hoverColor: \"{text.hover.color}\"\n        },\n        overlay: {\n          select: {\n            background: \"{surface.0}\",\n            borderColor: \"{surface.200}\",\n            color: \"{text.color}\"\n          },\n          popover: {\n            background: \"{surface.0}\",\n            borderColor: \"{surface.200}\",\n            color: \"{text.color}\"\n          },\n          modal: {\n            background: \"{surface.0}\",\n            borderColor: \"{surface.200}\",\n            color: \"{text.color}\"\n          }\n        },\n        list: {\n          option: {\n            focusBackground: \"{surface.100}\",\n            selectedBackground: \"{highlight.background}\",\n            selectedFocusBackground: \"{highlight.focus.background}\",\n            color: \"{text.color}\",\n            focusColor: \"{text.hover.color}\",\n            selectedColor: \"{highlight.color}\",\n            selectedFocusColor: \"{highlight.focus.color}\",\n            icon: {\n              color: \"{surface.400}\",\n              focusColor: \"{surface.500}\"\n            }\n          },\n          optionGroup: {\n            background: \"transparent\",\n            color: \"{text.muted.color}\"\n          }\n        },\n        navigation: {\n          item: {\n            focusBackground: \"{surface.100}\",\n            activeBackground: \"{surface.100}\",\n            color: \"{text.color}\",\n            focusColor: \"{text.hover.color}\",\n            activeColor: \"{text.hover.color}\",\n            icon: {\n              color: \"{surface.400}\",\n              focusColor: \"{surface.500}\",\n              activeColor: \"{surface.500}\"\n            }\n          },\n          submenuLabel: {\n            background: \"transparent\",\n            color: \"{text.muted.color}\"\n          },\n          submenuIcon: {\n            color: \"{surface.400}\",\n            focusColor: \"{surface.500}\",\n            activeColor: \"{surface.500}\"\n          }\n        }\n      },\n      dark: {\n        surface: {\n          \"0\": \"#ffffff\",\n          \"50\": \"{stone.50}\",\n          \"100\": \"{stone.100}\",\n          \"200\": \"{stone.200}\",\n          \"300\": \"{stone.300}\",\n          \"400\": \"{stone.400}\",\n          \"500\": \"{stone.500}\",\n          \"600\": \"{stone.600}\",\n          \"700\": \"{stone.700}\",\n          \"800\": \"{stone.800}\",\n          \"900\": \"{stone.900}\",\n          \"950\": \"{stone.950}\"\n        },\n        primary: {\n          color: \"{primary.400}\",\n          contrastColor: \"{surface.900}\",\n          hoverColor: \"{primary.300}\",\n          activeColor: \"{primary.200}\"\n        },\n        highlight: {\n          background: \"color-mix(in srgb, {primary.400}, transparent 84%)\",\n          focusBackground: \"color-mix(in srgb, {primary.400}, transparent 76%)\",\n          color: \"rgba(255,255,255,.87)\",\n          focusColor: \"rgba(255,255,255,.87)\"\n        },\n        mask: {\n          background: \"rgba(0,0,0,0.6)\",\n          color: \"{surface.200}\"\n        },\n        formField: {\n          background: \"transparent\",\n          disabledBackground: \"{surface.700}\",\n          filledBackground: \"{surface.800}\",\n          filledHoverBackground: \"{surface.800}\",\n          filledFocusBackground: \"{surface.800}\",\n          borderColor: \"{surface.600}\",\n          hoverBorderColor: \"{surface.500}\",\n          focusBorderColor: \"{primary.color}\",\n          invalidBorderColor: \"{red.300}\",\n          color: \"{surface.0}\",\n          disabledColor: \"{surface.400}\",\n          placeholderColor: \"{surface.400}\",\n          invalidPlaceholderColor: \"{red.400}\",\n          floatLabelColor: \"{surface.400}\",\n          floatLabelFocusColor: \"{surface.400}\",\n          floatLabelActiveColor: \"{surface.400}\",\n          floatLabelInvalidColor: \"{form.field.invalid.placeholder.color}\",\n          iconColor: \"{surface.400}\",\n          shadow: \"0px 1px 2px 0px rgba(18, 18, 23, 0.05)\"\n        },\n        text: {\n          color: \"{surface.0}\",\n          hoverColor: \"{surface.0}\",\n          mutedColor: \"{surface.400}\",\n          hoverMutedColor: \"{surface.300}\"\n        },\n        content: {\n          background: \"{surface.800}\",\n          hoverBackground: \"{surface.700}\",\n          borderColor: \"{surface.700}\",\n          color: \"{text.color}\",\n          hoverColor: \"{text.hover.color}\"\n        },\n        overlay: {\n          select: {\n            background: \"{surface.900}\",\n            borderColor: \"{surface.700}\",\n            color: \"{text.color}\"\n          },\n          popover: {\n            background: \"{surface.900}\",\n            borderColor: \"{surface.700}\",\n            color: \"{text.color}\"\n          },\n          modal: {\n            background: \"{surface.900}\",\n            borderColor: \"{surface.700}\",\n            color: \"{text.color}\"\n          }\n        },\n        list: {\n          option: {\n            focusBackground: \"{surface.800}\",\n            selectedBackground: \"{highlight.background}\",\n            selectedFocusBackground: \"{highlight.focus.background}\",\n            color: \"{text.color}\",\n            focusColor: \"{text.hover.color}\",\n            selectedColor: \"{highlight.color}\",\n            selectedFocusColor: \"{highlight.focus.color}\",\n            icon: {\n              color: \"{surface.500}\",\n              focusColor: \"{surface.400}\"\n            }\n          },\n          optionGroup: {\n            background: \"transparent\",\n            color: \"{text.muted.color}\"\n          }\n        },\n        navigation: {\n          item: {\n            focusBackground: \"{surface.700}\",\n            activeBackground: \"{surface.700}\",\n            color: \"{text.color}\",\n            focusColor: \"{text.hover.color}\",\n            activeColor: \"{text.hover.color}\",\n            icon: {\n              color: \"{surface.500}\",\n              focusColor: \"{surface.400}\",\n              activeColor: \"{surface.400}\"\n            }\n          },\n          submenuLabel: {\n            background: \"transparent\",\n            color: \"{text.muted.color}\"\n          },\n          submenuIcon: {\n            color: \"{surface.500}\",\n            focusColor: \"{surface.400}\",\n            activeColor: \"{surface.400}\"\n          }\n        }\n      }\n    }\n  }\n};\n","export const TreeselectTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    filledHoverBackground: \"{form.field.filled.hover.background}\",\n    filledFocusBackground: \"{form.field.filled.focus.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.focus.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    placeholderColor: \"{form.field.placeholder.color}\",\n    invalidPlaceholderColor: \"{form.field.invalid.placeholder.color}\",\n    shadow: \"{form.field.shadow}\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{form.field.focus.ring.width}\",\n      style: \"{form.field.focus.ring.style}\",\n      color: \"{form.field.focus.ring.color}\",\n      offset: \"{form.field.focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      fontSize: \"{form.field.sm.font.size}\",\n      paddingX: \"{form.field.sm.padding.x}\",\n      paddingY: \"{form.field.sm.padding.y}\"\n    },\n    lg: {\n      fontSize: \"{form.field.lg.font.size}\",\n      paddingX: \"{form.field.lg.padding.x}\",\n      paddingY: \"{form.field.lg.padding.y}\"\n    }\n  },\n  dropdown: {\n    width: \"2.5rem\",\n    color: \"{form.field.icon.color}\"\n  },\n  overlay: {\n    background: \"{overlay.select.background}\",\n    borderColor: \"{overlay.select.border.color}\",\n    borderRadius: \"{overlay.select.border.radius}\",\n    color: \"{overlay.select.color}\",\n    shadow: \"{overlay.select.shadow}\"\n  },\n  tree: {\n    padding: \"{list.padding}\"\n  },\n  clearIcon: {\n    color: \"{form.field.icon.color}\"\n  },\n  emptyMessage: {\n    padding: \"{list.option.padding}\"\n  },\n  chip: {\n    borderRadius: \"{border.radius.sm}\"\n  }\n};\n","export const IconfieldTheme = {\n  icon: {\n    color: \"{form.field.icon.color}\"\n  }\n};\n","export const FloatlabelTheme = {\n  root: {\n    color: \"{form.field.float.label.color}\",\n    focusColor: \"{form.field.float.label.focus.color}\",\n    activeColor: \"{form.field.float.label.active.color}\",\n    invalidColor: \"{form.field.float.label.invalid.color}\",\n    transitionDuration: \"0.2s\",\n    positionX: \"{form.field.padding.x}\",\n    positionY: \"{form.field.padding.y}\",\n    fontWeight: \"500\",\n    active: {\n      fontSize: \"0.75rem\",\n      fontWeight: \"400\"\n    }\n  },\n  over: {\n    active: {\n      top: \"-1.25rem\"\n    }\n  },\n  in: {\n    input: {\n      paddingTop: \"1.5rem\",\n      paddingBottom: \"{form.field.padding.y}\"\n    },\n    active: {\n      top: \"{form.field.padding.y}\"\n    }\n  },\n  on: {\n    borderRadius: \"{border.radius.xs}\",\n    active: {\n      background: \"inherit\",\n      padding: \"0 0.125rem\"\n    }\n  }\n};\n","export const TabsTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  tablist: {\n    borderWidth: \"0 0 1px 0\",\n    background: \"transparent\",\n    borderColor: \"{content.border.color}\"\n  },\n  tab: {\n    background: \"transparent\",\n    hoverBackground: \"transparent\",\n    activeBackground: \"transparent\",\n    borderWidth: \"0 0 1px 0\",\n    borderColor: \"{content.border.color}\",\n    hoverBorderColor: \"{content.border.color}\",\n    activeBorderColor: \"{primary.color}\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    activeColor: \"{primary.color}\",\n    padding: \"1rem 1.125rem\",\n    fontWeight: \"600\",\n    margin: \"0 0 -1px 0\",\n    gap: \"0.5rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"-1px\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  tabpanel: {\n    background: \"transparent\",\n    color: \"{content.color}\",\n    padding: \"0.875rem 1.125rem 1.125rem 1.125rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  navButton: {\n    background: \"{content.background}\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    width: \"2.5rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"-1px\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  activeBar: {\n    height: \"1px\",\n    bottom: \"-1px\",\n    background: \"{primary.color}\"\n  },\n  colorScheme: {\n    light: {\n      navButton: {\n        shadow: \"0px 0px 10px 50px rgba(255, 255, 255, 0.6)\"\n      }\n    },\n    dark: {\n      navButton: {\n        shadow: \"0px 0px 10px 50px #0F172A80\"\n      }\n    }\n  }\n};\n","export const TreeTheme = {\n  root: {\n    background: \"{content.background}\",\n    color: \"{content.color}\",\n    padding: \"1rem\",\n    gap: \"2px\",\n    indent: \"1rem\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  node: {\n    padding: \"0.25rem 0.5rem\",\n    borderRadius: \"{content.border.radius}\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{highlight.background}\",\n    color: \"{text.color}\",\n    hoverColor: \"{text.hover.color}\",\n    selectedColor: \"{highlight.color}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"-1px\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    gap: \"0.25rem\"\n  },\n  nodeIcon: {\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\",\n    selectedColor: \"{highlight.color}\"\n  },\n  nodeToggleButton: {\n    borderRadius: \"{tree.node.toggle.button.size} / 2\",\n    size: \"1.75rem\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedHoverBackground: \"{content.background}\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\",\n    selectedHoverColor: \"{primary.color}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  loadingIcon: {\n    size: \"2rem\"\n  },\n  filter: {\n    margin: \"0.5rem\"\n  }\n};\n","export const IftalabelTheme = {\n  root: {\n    color: \"{form.field.float.label.color}\",\n    focusColor: \"{form.field.float.label.focus.color}\",\n    invalidColor: \"{form.field.float.label.invalid.color}\",\n    transitionDuration: \"0.2s\",\n    positionX: \"{form.field.padding.x}\",\n    top: \"{form.field.padding.y}\",\n    fontSize: \"0.75rem\",\n    fontWeight: \"400\"\n  },\n  input: {\n    paddingTop: \"1.5rem\",\n    paddingBottom: \"{form.field.padding.y}\"\n  }\n};\n","export const FileuploadTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  header: {\n    background: \"transparent\",\n    color: \"{text.color}\",\n    padding: \"1.125rem\",\n    borderColor: \"#00000000\",\n    borderWidth: \"0px\",\n    borderRadius: \"0\",\n    gap: \"0.5rem\"\n  },\n  content: {\n    highlightBorderColor: \"{primary.color}\",\n    padding: \"0 1.125rem 1.125rem 1.125rem\",\n    gap: \"1rem\"\n  },\n  file: {\n    padding: \"1rem\",\n    gap: \"1rem\",\n    borderColor: \"{content.border.color}\",\n    info: {\n      gap: \"0.5rem\"\n    }\n  },\n  fileList: {\n    gap: \"0.5rem\"\n  },\n  progressbar: {\n    height: \"0.25rem\"\n  },\n  basic: {\n    gap: \"0.5rem\"\n  }\n};\n","export const DrawerTheme = {\n  root: {\n    background: \"{overlay.modal.background}\",\n    borderColor: \"{overlay.modal.border.color}\",\n    color: \"{overlay.modal.color}\",\n    borderRadius: \"{overlay.modal.border.radius}\",\n    shadow: \"{overlay.modal.shadow}\"\n  },\n  header: {\n    padding: \"{overlay.modal.padding}\"\n  },\n  title: {\n    fontSize: \"1.5rem\",\n    fontWeight: \"600\"\n  },\n  content: {\n    padding: \"0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}\"\n  },\n  footer: {\n    padding: \"{overlay.modal.padding}\"\n  }\n};\n","export const OrganizationchartTheme = {\n  root: {\n    gutter: \"0.75rem\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  node: {\n    background: \"{content.background}\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{highlight.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    selectedColor: \"{highlight.color}\",\n    hoverColor: \"{content.hover.color}\",\n    padding: \"0.75rem 1rem\",\n    toggleablePadding: \"0.75rem 1rem 1.25rem 1rem\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  nodeToggleButton: {\n    background: \"{content.background}\",\n    hoverBackground: \"{content.hover.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    size: \"1.5rem\",\n    borderRadius: \"{organizationchart.node.toggle.button.size} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  connector: {\n    color: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    height: \"24px\"\n  }\n};\n","export const ConfirmpopupTheme = {\n  root: {\n    background: \"{overlay.popover.background}\",\n    borderColor: \"{overlay.popover.border.color}\",\n    color: \"{overlay.popover.color}\",\n    borderRadius: \"{overlay.popover.border.radius}\",\n    shadow: \"{overlay.popover.shadow}\",\n    gutter: \"10px\",\n    arrowOffset: \"1.25rem\"\n  },\n  content: {\n    padding: \"{overlay.popover.padding}\",\n    gap: \"1rem\"\n  },\n  icon: {\n    size: \"1.5rem\",\n    color: \"{overlay.popover.color}\"\n  },\n  footer: {\n    gap: \"0.5rem\",\n    padding: \"0 {overlay.popover.padding} {overlay.popover.padding} {overlay.popover.padding}\"\n  }\n};\n","export const TooltipTheme = {\n  root: {\n    maxWidth: \"12.5rem\",\n    gutter: \"0.25rem\",\n    shadow: \"{overlay.popover.shadow}\",\n    padding: \"0.25rem 0.5rem\",\n    borderRadius: \"{border.radius.md}\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        background: \"{surface.700}\",\n        color: \"{surface.0}\"\n      }\n    },\n    dark: {\n      root: {\n        background: \"{surface.700}\",\n        color: \"{surface.0}\"\n      }\n    }\n  }\n};\n","export const PasswordTheme = {\n  meter: {\n    background: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    height: \"0.75rem\"\n  },\n  icon: {\n    color: \"{form.field.icon.color}\"\n  },\n  overlay: {\n    background: \"{overlay.popover.background}\",\n    borderColor: \"{overlay.popover.border.color}\",\n    borderRadius: \"{overlay.popover.border.radius}\",\n    color: \"{overlay.popover.color}\",\n    padding: \"{overlay.popover.padding}\",\n    shadow: \"{overlay.popover.shadow}\"\n  },\n  content: {\n    gap: \"0.5rem\"\n  },\n  colorScheme: {\n    light: {\n      strength: {\n        weakBackground: \"{red.500}\",\n        mediumBackground: \"{amber.500}\",\n        strongBackground: \"{green.500}\"\n      }\n    },\n    dark: {\n      strength: {\n        mediumBackground: \"{amber.400}\",\n        strongBackground: \"{green.400}\"\n      }\n    }\n  }\n};\n","export const RatingTheme = {\n  root: {\n    gap: \"0.25rem\",\n    transitionDuration: \"{transition.duration}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  icon: {\n    size: \"1rem\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{primary.color}\",\n    activeColor: \"{primary.color}\"\n  }\n};\n","export const CardTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderRadius: \"{border.radius.xl}\",\n    color: \"{content.color}\",\n    shadow: \"0px 1px 3px 0px rgba(0, 0, 0, 0.1), 0px 1px 2px -1px rgba(0, 0, 0, 0.1)\"\n  },\n  body: {\n    padding: \"1.25rem\",\n    gap: \"0.5rem\"\n  },\n  caption: {\n    gap: \"0.5rem\"\n  },\n  title: {\n    fontSize: \"1.25rem\",\n    fontWeight: \"500\"\n  },\n  subtitle: {\n    color: \"{text.muted.color}\"\n  }\n};\n","export const PanelTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  header: {\n    background: \"transparent\",\n    color: \"{text.color}\",\n    padding: \"1.125rem\",\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"0px\",\n    borderRadius: \"0\"\n  },\n  toggleableHeader: {\n    padding: \"0.375rem 1.125rem\"\n  },\n  title: {\n    fontWeight: \"normal\"\n  },\n  content: {\n    padding: \"0 1.125rem 1.125rem 1.125rem\"\n  },\n  footer: {\n    padding: \"0 1.125rem 1.125rem 1.125rem\"\n  }\n};\n","export const RadiobuttonTheme = {\n  root: {\n    width: \"1.25rem\",\n    height: \"1.25rem\",\n    background: \"{form.field.background}\",\n    checkedBackground: \"{primary.color}\",\n    checkedHoverBackground: \"{primary.hover.color}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.border.color}\",\n    checkedBorderColor: \"{primary.color}\",\n    checkedHoverBorderColor: \"{primary.hover.color}\",\n    checkedFocusBorderColor: \"{primary.color}\",\n    checkedDisabledBorderColor: \"{form.field.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    shadow: \"{form.field.shadow}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      width: \"1rem\",\n      height: \"1rem\"\n    },\n    lg: {\n      width: \"1.5rem\",\n      height: \"1.5rem\"\n    }\n  },\n  icon: {\n    size: \"0.75rem\",\n    checkedColor: \"{primary.contrast.color}\",\n    checkedHoverColor: \"{primary.contrast.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    sm: {\n      size: \"0.5rem\"\n    },\n    lg: {\n      size: \"1rem\"\n    }\n  }\n};\n","export const AutocompleteTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    filledHoverBackground: \"{form.field.filled.hover.background}\",\n    filledFocusBackground: \"{form.field.filled.focus.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.focus.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    placeholderColor: \"{form.field.placeholder.color}\",\n    invalidPlaceholderColor: \"{form.field.invalid.placeholder.color}\",\n    shadow: \"{form.field.shadow}\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{form.field.focus.ring.width}\",\n      style: \"{form.field.focus.ring.style}\",\n      color: \"{form.field.focus.ring.color}\",\n      offset: \"{form.field.focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    },\n    transitionDuration: \"{transition.duration}\"\n  },\n  overlay: {\n    background: \"{overlay.select.background}\",\n    borderColor: \"{overlay.select.border.color}\",\n    borderRadius: \"{overlay.select.border.radius}\",\n    color: \"{overlay.select.color}\",\n    shadow: \"{overlay.select.shadow}\"\n  },\n  list: {\n    padding: \"{list.padding}\",\n    gap: \"{list.gap}\"\n  },\n  option: {\n    focusBackground: \"{list.option.focus.background}\",\n    selectedBackground: \"{list.option.selected.background}\",\n    selectedFocusBackground: \"{list.option.selected.focus.background}\",\n    color: \"{list.option.color}\",\n    focusColor: \"{list.option.focus.color}\",\n    selectedColor: \"{list.option.selected.color}\",\n    selectedFocusColor: \"{list.option.selected.focus.color}\",\n    padding: \"{list.option.padding}\",\n    borderRadius: \"{list.option.border.radius}\"\n  },\n  optionGroup: {\n    background: \"{list.option.group.background}\",\n    color: \"{list.option.group.color}\",\n    fontWeight: \"{list.option.group.font.weight}\",\n    padding: \"{list.option.group.padding}\"\n  },\n  dropdown: {\n    width: \"2.5rem\",\n    sm: {\n      width: \"2rem\"\n    },\n    lg: {\n      width: \"3rem\"\n    },\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.border.color}\",\n    activeBorderColor: \"{form.field.border.color}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  chip: {\n    borderRadius: \"{border.radius.sm}\"\n  },\n  emptyMessage: {\n    padding: \"{list.option.padding}\"\n  },\n  colorScheme: {\n    light: {\n      chip: {\n        focusBackground: \"{surface.200}\",\n        focusColor: \"{surface.800}\"\n      },\n      dropdown: {\n        background: \"{surface.100}\",\n        hoverBackground: \"{surface.200}\",\n        activeBackground: \"{surface.300}\",\n        color: \"{surface.600}\",\n        hoverColor: \"{surface.700}\",\n        activeColor: \"{surface.800}\"\n      }\n    },\n    dark: {\n      chip: {\n        focusBackground: \"{surface.700}\",\n        focusColor: \"{surface.0}\"\n      },\n      dropdown: {\n        background: \"{surface.800}\",\n        hoverBackground: \"{surface.700}\",\n        activeBackground: \"{surface.600}\",\n        color: \"{surface.300}\",\n        hoverColor: \"{surface.200}\",\n        activeColor: \"{surface.100}\"\n      }\n    }\n  }\n};\n","export const ImagecompareTheme = {\n  handle: {\n    size: \"15px\",\n    hoverSize: \"30px\",\n    background: \"rgba(255, 255, 255, 0.3)\",\n    hoverBackground: \"rgba(255, 255, 255, 0.3)\",\n    borderColor: \"transparent\",\n    hoverBorderColor: \"transparent\",\n    borderWidth: \"0px\",\n    borderRadius: \"{imagecompare.handle.size} / 2\",\n    transitionDuration: \"{transition.duration}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"rgba(255, 255, 255, 0.3)\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  }\n};\n","export const MenubarTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    color: \"{content.color}\",\n    gap: \"0.5rem\",\n    padding: \"0.5rem 0.75rem\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  baseItem: {\n    borderRadius: \"{content.border.radius}\",\n    padding: \"{navigation.item.padding}\"\n  },\n  item: {\n    focusBackground: \"{navigation.item.focus.background}\",\n    activeBackground: \"{navigation.item.active.background}\",\n    color: \"{navigation.item.color}\",\n    focusColor: \"{navigation.item.focus.color}\",\n    activeColor: \"{navigation.item.active.color}\",\n    padding: \"{navigation.item.padding}\",\n    borderRadius: \"{navigation.item.border.radius}\",\n    gap: \"{navigation.item.gap}\",\n    icon: {\n      color: \"{navigation.item.icon.color}\",\n      focusColor: \"{navigation.item.icon.focus.color}\",\n      activeColor: \"{navigation.item.icon.active.color}\"\n    }\n  },\n  submenu: {\n    padding: \"{navigation.list.padding}\",\n    gap: \"{navigation.list.gap}\",\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    shadow: \"{overlay.navigation.shadow}\",\n    mobileIndent: \"1rem\",\n    icon: {\n      size: \"{navigation.submenu.icon.size}\",\n      color: \"{navigation.submenu.icon.color}\",\n      focusColor: \"{navigation.submenu.icon.focus.color}\",\n      activeColor: \"{navigation.submenu.icon.active.color}\"\n    }\n  },\n  separator: {\n    borderColor: \"{content.border.color}\"\n  },\n  mobileButton: {\n    borderRadius: \"{menubar.mobile.button.size} / 2\",\n    size: \"1.75rem\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\",\n    hoverBackground: \"{content.hover.background}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  }\n};\n","export const OverlaybadgeTheme = {\n  root: {\n    outline: {\n      width: \"2px\",\n      color: \"{content.background}\"\n    }\n  }\n};\n","export const GalleriaTheme = {\n  root: {\n    borderWidth: \"1px\",\n    borderColor: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  navButton: {\n    background: \"rgba(255, 255, 255, 0.1)\",\n    hoverBackground: \"rgba(255, 255, 255, 0.2)\",\n    color: \"{surface.100}\",\n    hoverColor: \"{surface.0}\",\n    size: \"3rem\",\n    gutter: \"0.5rem\",\n    prev: {\n      borderRadius: \"{galleria.nav.button.size} / 2\"\n    },\n    next: {\n      borderRadius: \"{galleria.nav.button.size} / 2\"\n    },\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  navIcon: {\n    size: \"1.5rem\"\n  },\n  thumbnailsContent: {\n    background: \"{content.background}\",\n    padding: \"1rem 0.25rem\"\n  },\n  thumbnailNavButton: {\n    size: \"2rem\",\n    borderRadius: \"{content.border.radius}\",\n    gutter: \"0.5rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  thumbnailNavButtonIcon: {\n    size: \"1rem\"\n  },\n  caption: {\n    background: \"rgba(0, 0, 0, 0.5)\",\n    color: \"{surface.100}\",\n    padding: \"1rem\"\n  },\n  indicatorList: {\n    gap: \"0.5rem\",\n    padding: \"1rem\"\n  },\n  indicatorButton: {\n    width: \"1rem\",\n    height: \"1rem\",\n    activeBackground: \"{primary.color}\",\n    borderRadius: \"{galleria.indicator.button.width} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  insetIndicatorList: {\n    background: \"rgba(0, 0, 0, 0.5)\"\n  },\n  insetIndicatorButton: {\n    background: \"rgba(255, 255, 255, 0.4)\",\n    hoverBackground: \"rgba(255, 255, 255, 0.6)\",\n    activeBackground: \"rgba(255, 255, 255, 0.9)\"\n  },\n  closeButton: {\n    size: \"3rem\",\n    gutter: \"0.5rem\",\n    background: \"rgba(255, 255, 255, 0.1)\",\n    hoverBackground: \"rgba(255, 255, 255, 0.2)\",\n    color: \"{surface.50}\",\n    hoverColor: \"{surface.0}\",\n    borderRadius: \"{galleria.close.button.size} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  closeButtonIcon: {\n    size: \"1.5rem\"\n  },\n  colorScheme: {\n    light: {\n      thumbnailNavButton: {\n        hoverBackground: \"{surface.100}\",\n        color: \"{surface.600}\",\n        hoverColor: \"{surface.700}\"\n      },\n      indicatorButton: {\n        background: \"{surface.200}\",\n        hoverBackground: \"{surface.300}\"\n      }\n    },\n    dark: {\n      thumbnailNavButton: {\n        hoverBackground: \"{surface.700}\",\n        color: \"{surface.400}\",\n        hoverColor: \"{surface.0}\"\n      },\n      indicatorButton: {\n        background: \"{surface.700}\",\n        hoverBackground: \"{surface.600}\"\n      }\n    }\n  }\n};\n","export const AccordionTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  panel: {\n    borderWidth: \"0 0 1px 0\",\n    borderColor: \"{content.border.color}\"\n  },\n  header: {\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    activeColor: \"{text.color}\",\n    padding: \"1.125rem\",\n    fontWeight: \"600\",\n    borderRadius: \"0\",\n    borderWidth: \"0px\",\n    borderColor: \"{content.border.color}\",\n    background: \"transparent\",\n    hoverBackground: \"transparent\",\n    activeBackground: \"transparent\",\n    activeHoverBackground: \"transparent\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    toggleIcon: {\n      color: \"{text.muted.color}\",\n      hoverColor: \"{text.color}\",\n      activeColor: \"{text.color}\",\n      activeHoverColor: \"{text.color}\"\n    },\n    first: {\n      topBorderRadius: \"{content.border.radius}\",\n      borderWidth: \"0px\"\n    },\n    last: {\n      bottomBorderRadius: \"{content.border.radius}\",\n      activeBottomBorderRadius: \"0\"\n    }\n  },\n  content: {\n    borderWidth: \"0px\",\n    borderColor: \"{content.border.color}\",\n    background: \"transparent\",\n    color: \"{text.color}\",\n    padding: \"0 1.125rem 1.125rem 1.125rem\"\n  }\n};\n","export const ToggleswitchTheme = {\n  root: {\n    width: \"2.5rem\",\n    height: \"1.5rem\",\n    borderRadius: \"30px\",\n    gap: \"0.25rem\",\n    shadow: \"{form.field.shadow}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    borderWidth: \"1px\",\n    borderColor: \"transparent\",\n    hoverBorderColor: \"transparent\",\n    checkedBorderColor: \"transparent\",\n    checkedHoverBorderColor: \"transparent\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    transitionDuration: \"{form.field.transition.duration}\",\n    slideDuration: \"0.2s\"\n  },\n  handle: {\n    borderRadius: \"{toggleswitch.handle.size} / 2\",\n    size: \"1rem\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        background: \"{surface.300}\",\n        disabledBackground: \"{form.field.disabled.background}\",\n        hoverBackground: \"{surface.400}\",\n        checkedBackground: \"{primary.color}\",\n        checkedHoverBackground: \"{primary.hover.color}\"\n      },\n      handle: {\n        background: \"{surface.0}\",\n        disabledBackground: \"{form.field.disabled.color}\",\n        hoverBackground: \"{surface.0}\",\n        checkedBackground: \"{surface.0}\",\n        checkedHoverBackground: \"{surface.0}\",\n        color: \"{text.muted.color}\",\n        hoverColor: \"{text.color}\",\n        checkedColor: \"{primary.color}\",\n        checkedHoverColor: \"{primary.hover.color}\"\n      }\n    },\n    dark: {\n      root: {\n        background: \"{surface.700}\",\n        disabledBackground: \"{form.field.disabled.background}\",\n        hoverBackground: \"{surface.600}\",\n        checkedBackground: \"{primary.color}\",\n        checkedHoverBackground: \"{primary.hover.color}\"\n      },\n      handle: {\n        background: \"{surface.400}\",\n        disabledBackground: \"{form.field.disabled.color}\",\n        hoverBackground: \"{surface.300}\",\n        checkedBackground: \"{surface.900}\",\n        checkedHoverBackground: \"{surface.900}\",\n        color: \"{surface.900}\",\n        hoverColor: \"{surface.800}\",\n        checkedColor: \"{primary.color}\",\n        checkedHoverColor: \"{primary.hover.color}\"\n      }\n    }\n  }\n};\n","export const SkeletonTheme = {\n  root: {\n    borderRadius: \"{content.border.radius}\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        background: \"{surface.200}\",\n        animationBackground: \"rgba(255,255,255,0.4)\"\n      }\n    },\n    dark: {\n      root: {\n        background: \"rgba(255, 255, 255, 0.06)\",\n        animationBackground: \"rgba(255, 255, 255, 0.04)\"\n      }\n    }\n  }\n};\n","export const DataviewTheme = {\n  root: {\n    borderColor: \"transparent\",\n    borderWidth: \"0px\",\n    borderRadius: \"0\",\n    padding: \"0px\"\n  },\n  header: {\n    background: \"transparent\",\n    color: \"{content.color}\",\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"0 0 1px 0\",\n    padding: \"0.75rem 1rem\",\n    borderRadius: \"0\"\n  },\n  content: {\n    background: \"transparent\",\n    color: \"{content.color}\",\n    borderColor: \"transparent\",\n    borderWidth: \"0px\",\n    padding: \"0px\",\n    borderRadius: \"0\"\n  },\n  footer: {\n    background: \"transparent\",\n    color: \"{content.color}\",\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"1px 0 0 0\",\n    padding: \"0.75rem 1rem\",\n    borderRadius: \"0\"\n  },\n  paginatorTop: {\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"0 0 1px 0\"\n  },\n  paginatorBottom: {\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"1px 0 0 0\"\n  }\n};\n","export const PanelmenuTheme = {\n  root: {\n    gap: \"0.5rem\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  panel: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"1px\",\n    color: \"{content.color}\",\n    padding: \"0.25rem 0.25rem\",\n    borderRadius: \"{content.border.radius}\",\n    first: {\n      borderWidth: \"1px\",\n      topBorderRadius: \"{content.border.radius}\"\n    },\n    last: {\n      borderWidth: \"1px\",\n      bottomBorderRadius: \"{content.border.radius}\"\n    }\n  },\n  item: {\n    focusBackground: \"{navigation.item.focus.background}\",\n    color: \"{navigation.item.color}\",\n    focusColor: \"{navigation.item.focus.color}\",\n    gap: \"0.5rem\",\n    padding: \"{navigation.item.padding}\",\n    borderRadius: \"{content.border.radius}\",\n    icon: {\n      color: \"{navigation.item.icon.color}\",\n      focusColor: \"{navigation.item.icon.focus.color}\"\n    }\n  },\n  submenu: {\n    indent: \"1rem\"\n  },\n  submenuIcon: {\n    color: \"{navigation.submenu.icon.color}\",\n    focusColor: \"{navigation.submenu.icon.focus.color}\"\n  }\n};\n","export const DatepickerTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  panel: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\",\n    shadow: \"{overlay.popover.shadow}\",\n    padding: \"{overlay.popover.padding}\"\n  },\n  header: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    padding: \"0 0 0.5rem 0\"\n  },\n  title: {\n    gap: \"0.5rem\",\n    fontWeight: \"500\"\n  },\n  dropdown: {\n    width: \"2.5rem\",\n    sm: {\n      width: \"2rem\"\n    },\n    lg: {\n      width: \"3rem\"\n    },\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.border.color}\",\n    activeBorderColor: \"{form.field.border.color}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  inputIcon: {\n    color: \"{form.field.icon.color}\"\n  },\n  selectMonth: {\n    hoverBackground: \"{content.hover.background}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    padding: \"0.25rem 0.5rem\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  selectYear: {\n    hoverBackground: \"{content.hover.background}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    padding: \"0.25rem 0.5rem\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  group: {\n    borderColor: \"{content.border.color}\",\n    gap: \"{overlay.popover.padding}\"\n  },\n  dayView: {\n    margin: \"0.5rem 0 0 0\"\n  },\n  weekDay: {\n    padding: \"0.25rem\",\n    fontWeight: \"500\",\n    color: \"{content.color}\"\n  },\n  date: {\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{primary.color}\",\n    rangeSelectedBackground: \"{highlight.background}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    selectedColor: \"{primary.contrast.color}\",\n    rangeSelectedColor: \"{highlight.color}\",\n    width: \"2rem\",\n    height: \"2rem\",\n    borderRadius: \"{datepicker.date.width} / 2\",\n    padding: \"0.25rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  monthView: {\n    margin: \"0.5rem 0 0 0\"\n  },\n  month: {\n    padding: \"0.375rem\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  yearView: {\n    margin: \"0.5rem 0 0 0\"\n  },\n  year: {\n    padding: \"0.375rem\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  buttonbar: {\n    padding: \"0.5rem 0 0 0\",\n    borderColor: \"{content.border.color}\"\n  },\n  timePicker: {\n    padding: \"0.5rem 0 0 0\",\n    borderColor: \"{content.border.color}\",\n    gap: \"0.5rem\",\n    buttonGap: \"0.25rem\"\n  },\n  colorScheme: {\n    light: {\n      dropdown: {\n        background: \"{surface.100}\",\n        hoverBackground: \"{surface.200}\",\n        activeBackground: \"{surface.300}\",\n        color: \"{surface.600}\",\n        hoverColor: \"{surface.700}\",\n        activeColor: \"{surface.800}\"\n      },\n      today: {\n        background: \"{surface.200}\",\n        color: \"{surface.900}\"\n      }\n    },\n    dark: {\n      dropdown: {\n        background: \"{surface.800}\",\n        hoverBackground: \"{surface.700}\",\n        activeBackground: \"{surface.600}\",\n        color: \"{surface.300}\",\n        hoverColor: \"{surface.200}\",\n        activeColor: \"{surface.100}\"\n      },\n      today: {\n        background: \"{surface.700}\",\n        color: \"{surface.0}\"\n      }\n    }\n  }\n};\n","export const ToastTheme = {\n  root: {\n    width: \"25rem\",\n    borderRadius: \"{content.border.radius}\",\n    borderWidth: \"1px\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  icon: {\n    size: \"1.125rem\"\n  },\n  content: {\n    padding: \"{overlay.popover.padding}\",\n    gap: \"0.5rem\"\n  },\n  text: {\n    gap: \"0.5rem\"\n  },\n  summary: {\n    fontWeight: \"500\",\n    fontSize: \"1rem\"\n  },\n  detail: {\n    fontWeight: \"500\",\n    fontSize: \"0.875rem\"\n  },\n  closeButton: {\n    width: \"1.75rem\",\n    height: \"1.75rem\",\n    borderRadius: \"{toast.close.button.width} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      offset: \"{focus.ring.offset}\"\n    }\n  },\n  closeIcon: {\n    size: \"1rem\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        blur: \"1.5px\"\n      },\n      info: {\n        background: \"color-mix(in srgb, {blue.50}, transparent 5%)\",\n        borderColor: \"{blue.200}\",\n        color: \"{blue.600}\",\n        detailColor: \"{surface.700}\",\n        shadow: \"0px 4px 8px 0px rgba(2, 5, 10, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{blue.100}\",\n          focusRing: {\n            color: \"{blue.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      },\n      success: {\n        background: \"color-mix(in srgb, {green.50}, transparent 5%)\",\n        borderColor: \"{green.200}\",\n        color: \"{green.600}\",\n        detailColor: \"{surface.700}\",\n        shadow: \"0px 4px 8px 0px rgba(1, 8, 4, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{green.100}\",\n          focusRing: {\n            color: \"{green.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      },\n      warn: {\n        background: \"color-mix(in srgb, {yellow.50}, transparent 5%)\",\n        borderColor: \"{yellow.200}\",\n        color: \"{yellow.600}\",\n        detailColor: \"{surface.700}\",\n        shadow: \"0px 4px 8px 0px rgba(9, 7, 0, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{yellow.100}\",\n          focusRing: {\n            color: \"{yellow.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      },\n      error: {\n        background: \"color-mix(in srgb, {red.50}, transparent 5%)\",\n        borderColor: \"{red.200}\",\n        color: \"{red.600}\",\n        detailColor: \"{surface.700}\",\n        shadow: \"0px 4px 8px 0px rgba(10, 3, 3, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{red.100}\",\n          focusRing: {\n            color: \"{red.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      },\n      secondary: {\n        background: \"{surface.100}\",\n        borderColor: \"{surface.200}\",\n        color: \"{surface.600}\",\n        detailColor: \"{surface.700}\",\n        shadow: \"0px 4px 8px 0px rgba(4, 5, 6, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.200}\",\n          focusRing: {\n            color: \"{surface.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      },\n      contrast: {\n        background: \"{surface.900}\",\n        borderColor: \"{surface.950}\",\n        color: \"{surface.50}\",\n        detailColor: \"{surface.0}\",\n        shadow: \"0px 4px 8px 0px rgba(0, 0, 1, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.800}\",\n          focusRing: {\n            color: \"{surface.50}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      }\n    },\n    dark: {\n      root: {\n        blur: \"10px\"\n      },\n      info: {\n        background: \"color-mix(in srgb, {blue.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {blue.700}, transparent 64%)\",\n        color: \"{blue.500}\",\n        detailColor: \"{surface.0}\",\n        shadow: \"0px 4px 8px 0px rgba(2, 5, 10, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{blue.500}\",\n            shadow: \"none\"\n          }\n        }\n      },\n      success: {\n        background: \"color-mix(in srgb, {green.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {green.700}, transparent 64%)\",\n        color: \"{green.500}\",\n        detailColor: \"{surface.0}\",\n        shadow: \"0px 4px 8px 0px rgba(1, 8, 4, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{green.500}\",\n            shadow: \"none\"\n          }\n        }\n      },\n      warn: {\n        background: \"color-mix(in srgb, {yellow.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {yellow.700}, transparent 64%)\",\n        color: \"{yellow.500}\",\n        detailColor: \"{surface.0}\",\n        shadow: \"0px 4px 8px 0px rgba(9, 7, 0, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{yellow.500}\",\n            shadow: \"none\"\n          }\n        }\n      },\n      error: {\n        background: \"color-mix(in srgb, {red.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {red.700}, transparent 64%)\",\n        color: \"{red.500}\",\n        detailColor: \"{surface.0}\",\n        shadow: \"0px 4px 8px 0px rgba(10, 3, 3, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{red.500}\",\n            shadow: \"none\"\n          }\n        }\n      },\n      secondary: {\n        background: \"{surface.800}\",\n        borderColor: \"{surface.700}\",\n        color: \"{surface.300}\",\n        detailColor: \"{surface.0}\",\n        shadow: \"0px 4px 8px 0px rgba(4, 5, 6, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.700}\",\n          focusRing: {\n            color: \"{surface.300}\",\n            shadow: \"none\"\n          }\n        }\n      },\n      contrast: {\n        background: \"{surface.0}\",\n        borderColor: \"{surface.100}\",\n        color: \"{surface.950}\",\n        detailColor: \"{surface.950}\",\n        shadow: \"0px 4px 8px 0px rgba(0, 0, 1, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.100}\",\n          focusRing: {\n            color: \"{surface.950}\",\n            shadow: \"none\"\n          }\n        }\n      }\n    }\n  }\n};\n","export const ChipTheme = {\n  root: {\n    borderRadius: \"16px\",\n    paddingX: \"0.75rem\",\n    paddingY: \"0.5rem\",\n    gap: \"0.5rem\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  image: {\n    width: \"2rem\",\n    height: \"2rem\"\n  },\n  icon: {\n    size: \"1rem\"\n  },\n  removeIcon: {\n    size: \"1rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    }\n  },\n  colorScheme: {\n    light: {\n      root: {\n        background: \"{surface.100}\",\n        color: \"{surface.800}\"\n      },\n      icon: {\n        color: \"{surface.800}\"\n      },\n      removeIcon: {\n        color: \"{surface.800}\"\n      }\n    },\n    dark: {\n      root: {\n        background: \"{surface.800}\",\n        color: \"{surface.0}\"\n      },\n      icon: {\n        color: \"{surface.0}\"\n      },\n      removeIcon: {\n        color: \"{surface.0}\"\n      }\n    }\n  }\n};\n","export const InputtextTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    filledHoverBackground: \"{form.field.filled.hover.background}\",\n    filledFocusBackground: \"{form.field.filled.focus.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.focus.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    placeholderColor: \"{form.field.placeholder.color}\",\n    invalidPlaceholderColor: \"{form.field.invalid.placeholder.color}\",\n    shadow: \"{form.field.shadow}\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{form.field.focus.ring.width}\",\n      style: \"{form.field.focus.ring.style}\",\n      color: \"{form.field.focus.ring.color}\",\n      offset: \"{form.field.focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      fontSize: \"0.875rem\",\n      paddingX: \"{form.field.sm.padding.x}\",\n      paddingY: \"{form.field.sm.padding.y}\"\n    },\n    lg: {\n      fontSize: \"1.125rem\",\n      paddingX: \"{form.field.lg.padding.x}\",\n      paddingY: \"{form.field.lg.padding.y}\"\n    }\n  }\n};\n","export const ToolbarTheme = {\n  root: {\n    background: \"transparent\",\n    borderColor: \"transparent\",\n    borderRadius: \"{content.border.radius}\",\n    color: \"{content.color}\",\n    gap: \"0.5rem\",\n    padding: \"0.75rem\"\n  }\n};\n","export const ListboxTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    borderColor: \"{form.field.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    shadow: \"{form.field.shadow}\",\n    borderRadius: \"{form.field.border.radius}\",\n    transitionDuration: \"{form.field.transition.duration}\"\n  },\n  list: {\n    padding: \"{list.padding}\",\n    gap: \"{list.gap}\",\n    header: {\n      padding: \"{list.header.padding}\"\n    }\n  },\n  option: {\n    focusBackground: \"{list.option.focus.background}\",\n    selectedBackground: \"{list.option.selected.background}\",\n    selectedFocusBackground: \"{list.option.selected.focus.background}\",\n    color: \"{list.option.color}\",\n    focusColor: \"{list.option.focus.color}\",\n    selectedColor: \"{list.option.selected.color}\",\n    selectedFocusColor: \"{list.option.selected.focus.color}\",\n    padding: \"{list.option.padding}\",\n    borderRadius: \"{list.option.border.radius}\"\n  },\n  optionGroup: {\n    background: \"{list.option.group.background}\",\n    color: \"{list.option.group.color}\",\n    fontWeight: \"{list.option.group.font.weight}\",\n    padding: \"{list.option.group.padding}\"\n  },\n  checkmark: {\n    color: \"{list.option.color}\",\n    gutterStart: \"-0.375rem\",\n    gutterEnd: \"0.375rem\"\n  },\n  emptyMessage: {\n    padding: \"{list.option.padding}\"\n  },\n  colorScheme: {\n    light: {\n      option: {\n        stripedBackground: \"{surface.50}\"\n      }\n    },\n    dark: {\n      option: {\n        stripedBackground: \"{surface.900}\"\n      }\n    }\n  }\n};\n","export const CheckboxTheme = {\n  root: {\n    borderRadius: \"{border.radius.sm}\",\n    width: \"1.25rem\",\n    height: \"1.25rem\",\n    background: \"{form.field.background}\",\n    checkedBackground: \"{primary.color}\",\n    checkedHoverBackground: \"{primary.hover.color}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.border.color}\",\n    checkedBorderColor: \"{primary.color}\",\n    checkedHoverBorderColor: \"{primary.hover.color}\",\n    checkedFocusBorderColor: \"{primary.color}\",\n    checkedDisabledBorderColor: \"{form.field.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    shadow: \"{form.field.shadow}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      width: \"1rem\",\n      height: \"1rem\"\n    },\n    lg: {\n      width: \"1.5rem\",\n      height: \"1.5rem\"\n    }\n  },\n  icon: {\n    size: \"0.875rem\",\n    color: \"{form.field.color}\",\n    checkedColor: \"{primary.contrast.color}\",\n    checkedHoverColor: \"{primary.contrast.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    sm: {\n      size: \"0.75rem\"\n    },\n    lg: {\n      size: \"1rem\"\n    }\n  }\n};\n","export const TogglebuttonTheme = {\n  root: {\n    padding: \"0.25rem\",\n    borderRadius: \"{content.border.radius}\",\n    gap: \"0.5rem\",\n    fontWeight: \"500\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    disabledBorderColor: \"{form.field.disabled.background}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      fontSize: \"{form.field.sm.font.size}\",\n      padding: \"0.25rem\"\n    },\n    lg: {\n      fontSize: \"{form.field.lg.font.size}\",\n      padding: \"0.25rem\"\n    }\n  },\n  icon: {\n    disabledColor: \"{form.field.disabled.color}\"\n  },\n  content: {\n    padding: \"0.25rem 0.75rem\",\n    borderRadius: \"{content.border.radius}\",\n    checkedShadow: \"0px 1px 2px 0px rgba(0, 0, 0, 0.02), 0px 1px 2px 0px rgba(0, 0, 0, 0.04)\",\n    sm: {\n      padding: \"0.25rem 0.75rem\"\n    },\n    lg: {\n      padding: \"0.25rem 0.75rem\"\n    }\n  },\n  colorScheme: {\n    light: {\n      root: {\n        background: \"{surface.200}\",\n        checkedBackground: \"{surface.200}\",\n        hoverBackground: \"{surface.200}\",\n        borderColor: \"{surface.200}\",\n        color: \"{surface.500}\",\n        hoverColor: \"{surface.700}\",\n        checkedColor: \"{primary.700}\",\n        checkedBorderColor: \"{surface.200}\"\n      },\n      content: {\n        checkedBackground: \"{primary.50}\"\n      },\n      icon: {\n        color: \"{surface.500}\",\n        hoverColor: \"{surface.700}\",\n        checkedColor: \"{primary.700}\"\n      }\n    },\n    dark: {\n      root: {\n        background: \"{surface.800}\",\n        checkedBackground: \"{surface.800}\",\n        hoverBackground: \"{surface.800}\",\n        borderColor: \"{surface.800}\",\n        color: \"{surface.400}\",\n        hoverColor: \"{surface.300}\",\n        checkedColor: \"{primary.300}\",\n        checkedBorderColor: \"{surface.800}\"\n      },\n      content: {\n        checkedBackground: \"{primary.950}\"\n      },\n      icon: {\n        color: \"{surface.400}\",\n        hoverColor: \"{surface.300}\",\n        checkedColor: \"{primary.300}\"\n      }\n    }\n  }\n};\n","export const SplitterTheme = {\n  root: {\n    background: \"transparent\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  gutter: {\n    background: \"{content.border.color}\"\n  },\n  handle: {\n    size: \"24px\",\n    background: \"transparent\",\n    borderRadius: \"{content.border.radius}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  }\n};\n","export const SelectbuttonTheme = {\n  root: {\n    borderRadius: \"{form.field.border.radius}\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        invalidBorderColor: \"{form.field.invalid.border.color}\"\n      }\n    },\n    dark: {\n      root: {\n        invalidBorderColor: \"{form.field.invalid.border.color}\"\n      }\n    }\n  }\n};\n","export const TerminalTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    borderColor: \"{form.field.border.color}\",\n    color: \"{form.field.color}\",\n    height: \"18rem\",\n    padding: \"{form.field.padding.y} {form.field.padding.x}\",\n    borderRadius: \"{form.field.border.radius}\"\n  },\n  prompt: {\n    gap: \"0.25rem\"\n  },\n  commandResponse: {\n    margin: \"2px 0\"\n  }\n};\n","export const ContextmenuTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\",\n    shadow: \"{overlay.navigation.shadow}\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  list: {\n    padding: \"{navigation.list.padding}\",\n    gap: \"{navigation.list.gap}\"\n  },\n  item: {\n    focusBackground: \"{navigation.item.focus.background}\",\n    activeBackground: \"{navigation.item.active.background}\",\n    color: \"{navigation.item.color}\",\n    focusColor: \"{navigation.item.focus.color}\",\n    activeColor: \"{navigation.item.active.color}\",\n    padding: \"{navigation.item.padding}\",\n    borderRadius: \"{navigation.item.border.radius}\",\n    gap: \"{navigation.item.gap}\",\n    icon: {\n      color: \"{navigation.item.icon.color}\",\n      focusColor: \"{navigation.item.icon.focus.color}\",\n      activeColor: \"{navigation.item.icon.active.color}\"\n    }\n  },\n  submenu: {\n    mobileIndent: \"1rem\"\n  },\n  submenuIcon: {\n    size: \"{navigation.submenu.icon.size}\",\n    color: \"{navigation.submenu.icon.color}\",\n    focusColor: \"{navigation.submenu.icon.focus.color}\",\n    activeColor: \"{navigation.submenu.icon.active.color}\"\n  },\n  separator: {\n    borderColor: \"{content.border.color}\"\n  }\n};\n","export const SliderTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  track: {\n    background: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    size: \"3px\"\n  },\n  range: {\n    background: \"{primary.color}\"\n  },\n  handle: {\n    width: \"20px\",\n    height: \"20px\",\n    borderRadius: \"{slider.handle.width} / 2\",\n    background: \"{content.border.color}\",\n    hoverBackground: \"{content.border.color}\",\n    content: {\n      borderRadius: \"{slider.handle.content.width} / 2\",\n      hoverBackground: \"{content.background}\",\n      width: \"16px\",\n      height: \"16px\",\n      shadow: \"0px 0.5 0px 0px rgba(0, 0, 0, 0.08), 0px 1px 1px 0px rgba(0, 0, 0, 0.14)\"\n    },\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  colorScheme: {\n    light: {\n      handle: {\n        content: {\n          background: \"{surface.0}\"\n        }\n      }\n    },\n    dark: {\n      handle: {\n        content: {\n          background: \"{surface.950}\"\n        }\n      }\n    }\n  }\n};\n","export const RippleTheme = {\n  colorScheme: {\n    light: {\n      root: {\n        background: \"rgba(0,0,0,0.1)\"\n      }\n    },\n    dark: {\n      root: {\n        background: \"rgba(255,255,255,0.3)\"\n      }\n    }\n  }\n};\n","export const MessageTheme = {\n  root: {\n    borderRadius: \"{content.border.radius}\",\n    borderWidth: \"1px\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  content: {\n    padding: \"0.5rem 0.75rem\",\n    gap: \"0.5rem\",\n    sm: {\n      padding: \"0.375rem 0.625rem\"\n    },\n    lg: {\n      padding: \"0.625rem 0.875rem\"\n    }\n  },\n  text: {\n    fontSize: \"1rem\",\n    fontWeight: \"500\",\n    sm: {\n      fontSize: \"0.875rem\"\n    },\n    lg: {\n      fontSize: \"1.125rem\"\n    }\n  },\n  icon: {\n    size: \"1.125rem\",\n    sm: {\n      size: \"1rem\"\n    },\n    lg: {\n      size: \"1.25rem\"\n    }\n  },\n  closeButton: {\n    width: \"1.75rem\",\n    height: \"1.75rem\",\n    borderRadius: \"{message.close.button.width} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      offset: \"{focus.ring.offset}\"\n    }\n  },\n  closeIcon: {\n    size: \"1rem\",\n    sm: {\n      size: \"0.875rem\"\n    },\n    lg: {\n      size: \"1.125rem\"\n    }\n  },\n  outlined: {\n    root: {\n      borderWidth: \"1px\"\n    }\n  },\n  simple: {\n    content: {\n      padding: \"0px\"\n    }\n  },\n  colorScheme: {\n    light: {\n      info: {\n        background: \"color-mix(in srgb, {blue.50}, transparent 5%)\",\n        borderColor: \"{blue.200}\",\n        color: \"{blue.600}\",\n        shadow: \"0px 4px 8px 0px rgba(2, 5, 10, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{blue.100}\",\n          focusRing: {\n            color: \"{blue.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        outlined: {\n          color: \"{blue.600}\",\n          borderColor: \"{blue.600}\"\n        },\n        simple: {\n          color: \"{blue.600}\"\n        }\n      },\n      success: {\n        background: \"color-mix(in srgb, {green.50}, transparent 5%)\",\n        borderColor: \"{green.200}\",\n        color: \"{green.600}\",\n        shadow: \"0px 4px 8px 0px rgba(1, 8, 4, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{green.100}\",\n          focusRing: {\n            color: \"{green.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        outlined: {\n          color: \"{green.600}\",\n          borderColor: \"{green.600}\"\n        },\n        simple: {\n          color: \"{green.600}\"\n        }\n      },\n      warn: {\n        background: \"color-mix(in srgb, {yellow.50}, transparent 5%)\",\n        borderColor: \"{yellow.200}\",\n        color: \"{yellow.600}\",\n        shadow: \"0px 4px 8px 0px rgba(9, 7, 0, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{yellow.100}\",\n          focusRing: {\n            color: \"{yellow.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        outlined: {\n          color: \"{yellow.600}\",\n          borderColor: \"{yellow.600}\"\n        },\n        simple: {\n          color: \"{yellow.600}\"\n        }\n      },\n      error: {\n        background: \"color-mix(in srgb, {red.50}, transparent 5%)\",\n        borderColor: \"{red.200}\",\n        color: \"{red.600}\",\n        shadow: \"0px 4px 8px 0px rgba(10, 3, 3, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{red.100}\",\n          focusRing: {\n            color: \"{red.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        outlined: {\n          color: \"{red.600}\",\n          borderColor: \"{red.600}\"\n        },\n        simple: {\n          color: \"{red.600}\"\n        }\n      },\n      secondary: {\n        background: \"{surface.100}\",\n        borderColor: \"{surface.200}\",\n        color: \"{surface.600}\",\n        shadow: \"0px 4px 8px 0px rgba(4, 5, 6, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.200}\",\n          focusRing: {\n            color: \"{surface.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        outlined: {\n          color: \"{surface.500}\",\n          borderColor: \"{surface.500}\"\n        },\n        simple: {\n          color: \"{surface.500}\"\n        }\n      },\n      contrast: {\n        background: \"{surface.900}\",\n        borderColor: \"{surface.950}\",\n        color: \"{surface.50}\",\n        shadow: \"0px 4px 8px 0px rgba(0, 0, 1, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.800}\",\n          focusRing: {\n            color: \"{surface.50}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        outlined: {\n          color: \"{surface.950}\",\n          borderColor: \"{surface.950}\"\n        },\n        simple: {\n          color: \"{surface.950}\"\n        }\n      }\n    },\n    dark: {\n      info: {\n        background: \"color-mix(in srgb, {blue.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {blue.700}, transparent 64%)\",\n        color: \"{blue.500}\",\n        shadow: \"0px 4px 8px 0px rgba(2, 5, 10, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{blue.500}\",\n            shadow: \"none\"\n          }\n        },\n        outlined: {\n          color: \"{blue.500}\",\n          borderColor: \"{blue.500}\"\n        },\n        simple: {\n          color: \"{blue.500}\"\n        }\n      },\n      success: {\n        background: \"color-mix(in srgb, {green.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {green.700}, transparent 64%)\",\n        color: \"{green.500}\",\n        shadow: \"0px 4px 8px 0px rgba(1, 8, 4, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{green.500}\",\n            shadow: \"none\"\n          }\n        },\n        outlined: {\n          color: \"{green.500}\",\n          borderColor: \"{green.500}\"\n        },\n        simple: {\n          color: \"{green.500}\"\n        }\n      },\n      warn: {\n        background: \"color-mix(in srgb, {yellow.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {yellow.700}, transparent 64%)\",\n        color: \"{yellow.500}\",\n        shadow: \"0px 4px 8px 0px rgba(9, 7, 0, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{yellow.500}\",\n            shadow: \"none\"\n          }\n        },\n        outlined: {\n          color: \"{yellow.500}\",\n          borderColor: \"{yellow.500}\"\n        },\n        simple: {\n          color: \"{yellow.500}\"\n        }\n      },\n      error: {\n        background: \"color-mix(in srgb, {red.500}, transparent 84%)\",\n        borderColor: \"color-mix(in srgb, {red.700}, transparent 64%)\",\n        color: \"{red.500}\",\n        shadow: \"0px 4px 8px 0px rgba(10, 3, 3, 0.04)\",\n        closeButton: {\n          hoverBackground: \"rgba(255, 255, 255, 0.05)\",\n          focusRing: {\n            color: \"{red.500}\",\n            shadow: \"none\"\n          }\n        },\n        outlined: {\n          color: \"{red.500}\",\n          borderColor: \"{red.500}\"\n        },\n        simple: {\n          color: \"{red.500}\"\n        }\n      },\n      secondary: {\n        background: \"{surface.800}\",\n        borderColor: \"{surface.700}\",\n        color: \"{surface.300}\",\n        shadow: \"0px 4px 8px 0px rgba(4, 5, 6, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.700}\",\n          focusRing: {\n            color: \"{surface.300}\",\n            shadow: \"none\"\n          }\n        },\n        outlined: {\n          color: \"{surface.400}\",\n          borderColor: \"{surface.400}\"\n        },\n        simple: {\n          color: \"{surface.400}\"\n        }\n      },\n      contrast: {\n        background: \"{surface.0}\",\n        borderColor: \"{surface.100}\",\n        color: \"{surface.950}\",\n        shadow: \"0px 4px 8px 0px rgba(0, 0, 1, 0.04)\",\n        closeButton: {\n          hoverBackground: \"{surface.100}\",\n          focusRing: {\n            color: \"{surface.950}\",\n            shadow: \"none\"\n          }\n        },\n        outlined: {\n          color: \"{surface.0}\",\n          borderColor: \"{surface.0}\"\n        },\n        simple: {\n          color: \"{surface.0}\"\n        }\n      }\n    }\n  }\n};\n","export const StepperTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  separator: {\n    background: \"{content.border.color}\",\n    activeBackground: \"{primary.color}\",\n    margin: \"0 0 0 1rem\",\n    size: \"2px\"\n  },\n  step: {\n    padding: \"0.5rem\",\n    gap: \"1rem\"\n  },\n  stepHeader: {\n    padding: \"0px\",\n    borderRadius: \"{content.border.radius}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    gap: \"0.5rem\"\n  },\n  stepTitle: {\n    color: \"{text.muted.color}\",\n    activeColor: \"{primary.color}\",\n    fontWeight: \"500\"\n  },\n  stepNumber: {\n    background: \"transparent\",\n    activeBackground: \"transparent\",\n    borderColor: \"{content.border.color}\",\n    activeBorderColor: \"{content.border.color}\",\n    color: \"{text.muted.color}\",\n    activeColor: \"{primary.color}\",\n    size: \"2rem\",\n    fontSize: \"1.143rem\",\n    fontWeight: \"500\",\n    borderRadius: \"{stepper.step.number.size} / 2\",\n    shadow: \"0px 0.5 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)\"\n  },\n  steppanels: {\n    padding: \"0.875rem 0.5rem 1.125rem 0.5rem\"\n  },\n  steppanel: {\n    background: \"transparent\",\n    color: \"{content.color}\",\n    padding: \"0px\",\n    indent: \"1rem\"\n  }\n};\n","export const InputnumberTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  button: {\n    width: \"2.5rem\",\n    borderRadius: \"{form.field.border.radius}\",\n    verticalPadding: \"{form.field.padding.y}\"\n  },\n  colorScheme: {\n    light: {\n      button: {\n        background: \"transparent\",\n        hoverBackground: \"{surface.100}\",\n        activeBackground: \"{surface.200}\",\n        borderColor: \"{form.field.border.color}\",\n        hoverBorderColor: \"{form.field.border.color}\",\n        activeBorderColor: \"{form.field.border.color}\",\n        color: \"{surface.400}\",\n        hoverColor: \"{surface.500}\",\n        activeColor: \"{surface.600}\"\n      }\n    },\n    dark: {\n      button: {\n        background: \"transparent\",\n        hoverBackground: \"{surface.800}\",\n        activeBackground: \"{surface.700}\",\n        borderColor: \"{form.field.border.color}\",\n        hoverBorderColor: \"{form.field.border.color}\",\n        activeBorderColor: \"{form.field.border.color}\",\n        color: \"{surface.400}\",\n        hoverColor: \"{surface.300}\",\n        activeColor: \"{surface.200}\"\n      }\n    }\n  }\n};\n","export const ProgressbarTheme = {\n  root: {\n    background: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    height: \"1.25rem\"\n  },\n  value: {\n    background: \"{primary.color}\"\n  },\n  label: {\n    color: \"{primary.contrast.color}\",\n    fontSize: \"0.75rem\",\n    fontWeight: \"600\"\n  }\n};\n","export const CarouselTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  content: {\n    gap: \"0.25rem\"\n  },\n  indicatorList: {\n    padding: \"1rem\",\n    gap: \"0.5rem\"\n  },\n  indicator: {\n    width: \"2rem\",\n    height: \"0.5rem\",\n    borderRadius: \"{content.border.radius}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  colorScheme: {\n    light: {\n      indicator: {\n        background: \"{surface.200}\",\n        hoverBackground: \"{surface.300}\",\n        activeBackground: \"{primary.color}\"\n      }\n    },\n    dark: {\n      indicator: {\n        background: \"{surface.700}\",\n        hoverBackground: \"{surface.600}\",\n        activeBackground: \"{primary.color}\"\n      }\n    }\n  }\n};\n","export const ImageTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  preview: {\n    icon: {\n      size: \"1.5rem\"\n    },\n    mask: {\n      background: \"{mask.background}\",\n      color: \"{mask.color}\"\n    }\n  },\n  toolbar: {\n    position: {\n      left: \"auto\",\n      right: \"1rem\",\n      top: \"1rem\",\n      bottom: \"auto\"\n    },\n    blur: \"8px\",\n    background: \"rgba(255, 255, 255, 0.1)\",\n    borderColor: \"rgba(255, 255, 255, 0.2)\",\n    borderWidth: \"1px\",\n    borderRadius: \"30px\",\n    padding: \"0.5rem\",\n    gap: \"0.5rem\"\n  },\n  action: {\n    hoverBackground: \"rgba(255, 255, 255, 0.1)\",\n    color: \"{surface.50}\",\n    hoverColor: \"{surface.0}\",\n    size: \"3rem\",\n    iconSize: \"1.5rem\",\n    borderRadius: \"{image.action.size} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  }\n};\n","export const InputotpTheme = {\n  root: {\n    gap: \"0.5rem\"\n  },\n  input: {\n    width: \"2.5rem\",\n    sm: {\n      width: \"2rem\"\n    },\n    lg: {\n      width: \"3rem\"\n    }\n  }\n};\n","export const DialogTheme = {\n  root: {\n    background: \"{overlay.modal.background}\",\n    borderColor: \"{overlay.modal.border.color}\",\n    color: \"{overlay.modal.color}\",\n    borderRadius: \"{overlay.modal.border.radius}\",\n    shadow: \"{overlay.modal.shadow}\"\n  },\n  header: {\n    padding: \"{overlay.modal.padding}\",\n    gap: \"0.5rem\"\n  },\n  title: {\n    fontSize: \"1.25rem\",\n    fontWeight: \"600\"\n  },\n  content: {\n    padding: \"0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}\"\n  },\n  footer: {\n    padding: \"0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}\",\n    gap: \"0.5rem\"\n  }\n};\n","export const PopoverTheme = {\n  root: {\n    background: \"{overlay.popover.background}\",\n    borderColor: \"{overlay.popover.border.color}\",\n    color: \"{overlay.popover.color}\",\n    borderRadius: \"{overlay.popover.border.radius}\",\n    shadow: \"{overlay.popover.shadow}\",\n    gutter: \"10px\",\n    arrowOffset: \"1.25rem\"\n  },\n  content: {\n    padding: \"{overlay.popover.padding}\"\n  }\n};\n","export const TabviewTheme = {\n  colorScheme: {\n    dark: {\n      navButton: {\n        shadow: \"0px 0px 10px 50px rgba(255, 255, 255, 0.6)\"\n      }\n    }\n  }\n};\n","export const PicklistTheme = {\n  root: {\n    gap: \"1.125rem\"\n  },\n  controls: {\n    gap: \"0.5rem\"\n  }\n};\n","export const BlockuiTheme = {\n  root: {\n    borderRadius: \"{content.border.radius}\"\n  }\n};\n","export const TextareaTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    filledHoverBackground: \"{form.field.filled.hover.background}\",\n    filledFocusBackground: \"{form.field.filled.focus.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.focus.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    placeholderColor: \"{form.field.placeholder.color}\",\n    invalidPlaceholderColor: \"{form.field.invalid.placeholder.color}\",\n    shadow: \"{form.field.shadow}\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{form.field.focus.ring.width}\",\n      style: \"{form.field.focus.ring.style}\",\n      color: \"{form.field.focus.ring.color}\",\n      offset: \"{form.field.focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      fontSize: \"{form.field.sm.font.size}\",\n      paddingX: \"{form.field.sm.padding.x}\",\n      paddingY: \"{form.field.sm.padding.y}\"\n    },\n    lg: {\n      fontSize: \"{form.field.lg.font.size}\",\n      paddingX: \"{form.field.lg.padding.x}\",\n      paddingY: \"{form.field.lg.padding.y}\"\n    }\n  }\n};\n","export const SpeeddialTheme = {\n  root: {\n    gap: \"0.5rem\",\n    transitionDuration: \"{transition.duration}\"\n  }\n};\n","export const ButtonTheme = {\n  root: {\n    borderRadius: \"{form.field.border.radius}\",\n    roundedBorderRadius: \"2rem\",\n    gap: \"0.5rem\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    iconOnlyWidth: \"2.5rem\",\n    sm: {\n      fontSize: \"0.875rem\",\n      paddingX: \"0.625rem\",\n      paddingY: \"0.375rem\",\n      iconOnlyWidth: \"2rem\"\n    },\n    lg: {\n      fontSize: \"1.125rem\",\n      paddingX: \"0.875rem\",\n      paddingY: \"0.625rem\",\n      iconOnlyWidth: \"3rem\"\n    },\n    label: {\n      fontWeight: \"500\"\n    },\n    raisedShadow: \"0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      offset: \"{focus.ring.offset}\"\n    },\n    badgeSize: \"1rem\",\n    transitionDuration: \"{form.field.transition.duration}\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        primary: {\n          background: \"{primary.color}\",\n          hoverBackground: \"{primary.hover.color}\",\n          activeBackground: \"{primary.active.color}\",\n          borderColor: \"{primary.color}\",\n          hoverBorderColor: \"{primary.hover.color}\",\n          activeBorderColor: \"{primary.active.color}\",\n          color: \"{primary.contrast.color}\",\n          hoverColor: \"{primary.contrast.color}\",\n          activeColor: \"{primary.contrast.color}\",\n          focusRing: {\n            color: \"{primary.color}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        link: {\n          color: \"{primary.color}\",\n          hoverColor: \"{primary.color}\",\n          activeColor: \"{primary.color}\"\n        },\n        secondary: {\n          background: \"{surface.0}\",\n          hoverBackground: \"{surface.100}\",\n          activeBackground: \"{surface.200}\",\n          borderColor: \"{surface.100}\",\n          hoverBorderColor: \"{surface.200}\",\n          activeBorderColor: \"{surface.300}\",\n          color: \"{surface.800}\",\n          hoverColor: \"{surface.900}\",\n          activeColor: \"{surface.800}\",\n          focusRing: {\n            color: \"{surface.600}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        info: {\n          background: \"{sky.500}\",\n          hoverBackground: \"{sky.600}\",\n          activeBackground: \"{sky.700}\",\n          borderColor: \"{sky.500}\",\n          hoverBorderColor: \"{sky.600}\",\n          activeBorderColor: \"{sky.700}\",\n          color: \"#ffffff\",\n          hoverColor: \"#ffffff\",\n          activeColor: \"#ffffff\",\n          focusRing: {\n            color: \"{sky.500}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        success: {\n          background: \"{green.500}\",\n          hoverBackground: \"{green.600}\",\n          activeBackground: \"{green.700}\",\n          borderColor: \"{green.500}\",\n          hoverBorderColor: \"{green.600}\",\n          activeBorderColor: \"{green.700}\",\n          color: \"#ffffff\",\n          hoverColor: \"#ffffff\",\n          activeColor: \"#ffffff\",\n          focusRing: {\n            color: \"{green.500}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        warn: {\n          background: \"{orange.500}\",\n          hoverBackground: \"{orange.600}\",\n          activeBackground: \"{orange.700}\",\n          borderColor: \"{orange.500}\",\n          hoverBorderColor: \"{orange.600}\",\n          activeBorderColor: \"{orange.700}\",\n          color: \"#ffffff\",\n          hoverColor: \"#ffffff\",\n          activeColor: \"#ffffff\",\n          focusRing: {\n            color: \"{orange.500}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        help: {\n          background: \"{purple.500}\",\n          hoverBackground: \"{purple.600}\",\n          activeBackground: \"{purple.700}\",\n          borderColor: \"{purple.500}\",\n          hoverBorderColor: \"{purple.600}\",\n          activeBorderColor: \"{purple.700}\",\n          color: \"#ffffff\",\n          hoverColor: \"#ffffff\",\n          activeColor: \"#ffffff\",\n          focusRing: {\n            color: \"{purple.500}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        danger: {\n          background: \"{red.500}\",\n          hoverBackground: \"{red.600}\",\n          activeBackground: \"{red.700}\",\n          borderColor: \"{red.500}\",\n          hoverBorderColor: \"{red.600}\",\n          activeBorderColor: \"{red.700}\",\n          color: \"#ffffff\",\n          hoverColor: \"#ffffff\",\n          activeColor: \"#ffffff\",\n          focusRing: {\n            color: \"{red.500}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        contrast: {\n          background: \"{surface.950}\",\n          hoverBackground: \"{surface.900}\",\n          activeBackground: \"{surface.800}\",\n          borderColor: \"{surface.950}\",\n          hoverBorderColor: \"{surface.900}\",\n          activeBorderColor: \"{surface.800}\",\n          color: \"{surface.0}\",\n          hoverColor: \"{surface.0}\",\n          activeColor: \"{surface.0}\",\n          focusRing: {\n            color: \"{surface.950}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      },\n      outlined: {\n        primary: {\n          hoverBackground: \"{primary.50}\",\n          activeBackground: \"{primary.100}\",\n          borderColor: \"{primary.200}\",\n          color: \"{primary.color}\"\n        },\n        secondary: {\n          hoverBackground: \"{surface.50}\",\n          activeBackground: \"{surface.100}\",\n          borderColor: \"{surface.200}\",\n          color: \"{surface.500}\"\n        },\n        success: {\n          hoverBackground: \"{green.50}\",\n          activeBackground: \"{green.100}\",\n          borderColor: \"{green.200}\",\n          color: \"{green.500}\"\n        },\n        info: {\n          hoverBackground: \"{sky.50}\",\n          activeBackground: \"{sky.100}\",\n          borderColor: \"{sky.200}\",\n          color: \"{sky.500}\"\n        },\n        warn: {\n          hoverBackground: \"{orange.50}\",\n          activeBackground: \"{orange.100}\",\n          borderColor: \"{orange.200}\",\n          color: \"{orange.500}\"\n        },\n        help: {\n          hoverBackground: \"{purple.50}\",\n          activeBackground: \"{purple.100}\",\n          borderColor: \"{purple.200}\",\n          color: \"{purple.500}\"\n        },\n        danger: {\n          hoverBackground: \"{red.50}\",\n          activeBackground: \"{red.100}\",\n          borderColor: \"{red.200}\",\n          color: \"{red.500}\"\n        },\n        contrast: {\n          hoverBackground: \"{surface.50}\",\n          activeBackground: \"{surface.100}\",\n          borderColor: \"{surface.700}\",\n          color: \"{surface.950}\"\n        },\n        plain: {\n          hoverBackground: \"{surface.50}\",\n          activeBackground: \"{surface.100}\",\n          borderColor: \"{surface.200}\",\n          color: \"{surface.700}\"\n        }\n      },\n      text: {\n        primary: {\n          hoverBackground: \"{primary.50}\",\n          activeBackground: \"{primary.100}\",\n          color: \"{primary.color}\"\n        },\n        secondary: {\n          hoverBackground: \"{surface.50}\",\n          activeBackground: \"{surface.100}\",\n          color: \"{surface.500}\"\n        },\n        success: {\n          hoverBackground: \"{green.50}\",\n          activeBackground: \"{green.100}\",\n          color: \"{green.500}\"\n        },\n        info: {\n          hoverBackground: \"{sky.50}\",\n          activeBackground: \"{sky.100}\",\n          color: \"{sky.500}\"\n        },\n        warn: {\n          hoverBackground: \"{orange.50}\",\n          activeBackground: \"{orange.100}\",\n          color: \"{orange.500}\"\n        },\n        help: {\n          hoverBackground: \"{purple.50}\",\n          activeBackground: \"{purple.100}\",\n          color: \"{purple.500}\"\n        },\n        danger: {\n          hoverBackground: \"{red.50}\",\n          activeBackground: \"{red.100}\",\n          color: \"{red.500}\"\n        },\n        contrast: {\n          hoverBackground: \"{surface.50}\",\n          activeBackground: \"{surface.100}\",\n          color: \"{surface.950}\"\n        },\n        plain: {\n          hoverBackground: \"{surface.50}\",\n          activeBackground: \"{surface.100}\",\n          color: \"{surface.700}\"\n        }\n      }\n    },\n    dark: {\n      root: {\n        primary: {\n          background: \"{primary.color}\",\n          hoverBackground: \"{primary.hover.color}\",\n          activeBackground: \"{primary.active.color}\",\n          borderColor: \"{primary.color}\",\n          hoverBorderColor: \"{primary.hover.color}\",\n          activeBorderColor: \"{primary.active.color}\",\n          color: \"{primary.contrast.color}\",\n          hoverColor: \"{primary.contrast.color}\",\n          activeColor: \"{primary.contrast.color}\",\n          focusRing: {\n            color: \"{primary.color}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        link: {\n          color: \"{primary.color}\",\n          hoverColor: \"{primary.color}\",\n          activeColor: \"{primary.color}\"\n        },\n        secondary: {\n          background: \"{surface.900}\",\n          hoverBackground: \"{surface.800}\",\n          activeBackground: \"{surface.700}\",\n          borderColor: \"{surface.800}\",\n          hoverBorderColor: \"{surface.700}\",\n          activeBorderColor: \"{surface.700}\",\n          color: \"{surface.200}\",\n          hoverColor: \"{surface.100}\",\n          activeColor: \"{surface.100}\",\n          focusRing: {\n            color: \"{surface.300}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        info: {\n          background: \"{sky.400}\",\n          hoverBackground: \"{sky.300}\",\n          activeBackground: \"{sky.200}\",\n          borderColor: \"{sky.400}\",\n          hoverBorderColor: \"{sky.300}\",\n          activeBorderColor: \"{sky.200}\",\n          color: \"{sky.950}\",\n          hoverColor: \"{sky.950}\",\n          activeColor: \"{sky.950}\",\n          focusRing: {\n            color: \"{sky.400}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        success: {\n          background: \"{green.400}\",\n          hoverBackground: \"{green.300}\",\n          activeBackground: \"{green.200}\",\n          borderColor: \"{green.400}\",\n          hoverBorderColor: \"{green.300}\",\n          activeBorderColor: \"{green.200}\",\n          color: \"{green.950}\",\n          hoverColor: \"{green.950}\",\n          activeColor: \"{green.950}\",\n          focusRing: {\n            color: \"{green.400}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        warn: {\n          background: \"{orange.400}\",\n          hoverBackground: \"{orange.300}\",\n          activeBackground: \"{orange.200}\",\n          borderColor: \"{orange.400}\",\n          hoverBorderColor: \"{orange.300}\",\n          activeBorderColor: \"{orange.200}\",\n          color: \"{orange.950}\",\n          hoverColor: \"{orange.950}\",\n          activeColor: \"{orange.950}\",\n          focusRing: {\n            color: \"{orange.400}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        help: {\n          background: \"{purple.400}\",\n          hoverBackground: \"{purple.300}\",\n          activeBackground: \"{purple.200}\",\n          borderColor: \"{purple.400}\",\n          hoverBorderColor: \"{purple.300}\",\n          activeBorderColor: \"{purple.200}\",\n          color: \"{purple.950}\",\n          hoverColor: \"{purple.950}\",\n          activeColor: \"{purple.950}\",\n          focusRing: {\n            color: \"{purple.400}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        danger: {\n          background: \"{red.400}\",\n          hoverBackground: \"{red.300}\",\n          activeBackground: \"{red.200}\",\n          borderColor: \"{red.400}\",\n          hoverBorderColor: \"{red.300}\",\n          activeBorderColor: \"{red.200}\",\n          color: \"{red.950}\",\n          hoverColor: \"{red.950}\",\n          activeColor: \"{red.950}\",\n          focusRing: {\n            color: \"{red.400}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        },\n        contrast: {\n          background: \"{surface.0}\",\n          hoverBackground: \"{surface.100}\",\n          activeBackground: \"{surface.200}\",\n          borderColor: \"{surface.0}\",\n          hoverBorderColor: \"{surface.100}\",\n          activeBorderColor: \"{surface.200}\",\n          color: \"{surface.950}\",\n          hoverColor: \"{surface.950}\",\n          activeColor: \"{surface.950}\",\n          focusRing: {\n            color: \"{surface.0}\",\n            shadow: \"0px 0px 0px 0px #00000000\"\n          }\n        }\n      },\n      outlined: {\n        primary: {\n          hoverBackground: \"color-mix(in srgb, {primary.color}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {primary.color}, transparent 84%)\",\n          borderColor: \"{primary.700}\",\n          color: \"{primary.color}\"\n        },\n        secondary: {\n          hoverBackground: \"rgba(255, 255, 255, 0.04)\",\n          activeBackground: \"rgba(255, 255, 255, 0.16)\",\n          borderColor: \"{surface.700}\",\n          color: \"{surface.400}\"\n        },\n        success: {\n          hoverBackground: \"color-mix(in srgb, {green.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {green.400}, transparent 84%)\",\n          borderColor: \"{green.700}\",\n          color: \"{green.400}\"\n        },\n        info: {\n          hoverBackground: \"color-mix(in srgb, {sky.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {sky.400}, transparent 84%)\",\n          borderColor: \"{sky.700}\",\n          color: \"{sky.400}\"\n        },\n        warn: {\n          hoverBackground: \"color-mix(in srgb, {orange.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {orange.400}, transparent 84%)\",\n          borderColor: \"{orange.700}\",\n          color: \"{orange.400}\"\n        },\n        help: {\n          hoverBackground: \"color-mix(in srgb, {purple.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {purple.400}, transparent 84%)\",\n          borderColor: \"{purple.700}\",\n          color: \"{purple.400}\"\n        },\n        danger: {\n          hoverBackground: \"color-mix(in srgb, {red.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {red.400}, transparent 84%)\",\n          borderColor: \"{red.700}\",\n          color: \"{red.400}\"\n        },\n        contrast: {\n          hoverBackground: \"{surface.800}\",\n          activeBackground: \"{surface.700}\",\n          borderColor: \"{surface.500}\",\n          color: \"{surface.0}\"\n        },\n        plain: {\n          hoverBackground: \"{surface.800}\",\n          activeBackground: \"{surface.700}\",\n          borderColor: \"{surface.600}\",\n          color: \"{surface.0}\"\n        }\n      },\n      text: {\n        primary: {\n          hoverBackground: \"color-mix(in srgb, {primary.color}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {primary.color}, transparent 84%)\",\n          color: \"{primary.color}\"\n        },\n        secondary: {\n          hoverBackground: \"{surface.800}\",\n          activeBackground: \"{surface.700}\",\n          color: \"{surface.400}\"\n        },\n        success: {\n          hoverBackground: \"color-mix(in srgb, {green.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {green.400}, transparent 84%)\",\n          color: \"{green.400}\"\n        },\n        info: {\n          hoverBackground: \"color-mix(in srgb, {sky.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {sky.400}, transparent 84%)\",\n          color: \"{sky.400}\"\n        },\n        warn: {\n          hoverBackground: \"color-mix(in srgb, {orange.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {orange.400}, transparent 84%)\",\n          color: \"{orange.400}\"\n        },\n        help: {\n          hoverBackground: \"color-mix(in srgb, {purple.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {purple.400}, transparent 84%)\",\n          color: \"{purple.400}\"\n        },\n        danger: {\n          hoverBackground: \"color-mix(in srgb, {red.400}, transparent 96%)\",\n          activeBackground: \"color-mix(in srgb, {red.400}, transparent 84%)\",\n          color: \"{red.400}\"\n        },\n        contrast: {\n          hoverBackground: \"{surface.800}\",\n          activeBackground: \"{surface.700}\",\n          color: \"{surface.0}\"\n        },\n        plain: {\n          hoverBackground: \"{surface.800}\",\n          activeBackground: \"{surface.700}\",\n          color: \"{surface.0}\"\n        }\n      }\n    }\n  }\n};\n","export const ConfirmdialogTheme = {\n  icon: {\n    size: \"1.5rem\",\n    color: \"{overlay.modal.color}\"\n  },\n  content: {\n    gap: \"1rem\"\n  }\n};\n","export const TreetableTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  header: {\n    background: \"transparent\",\n    borderColor: \"{treetable.border.color}\",\n    color: \"{content.color}\",\n    borderWidth: \"1px\",\n    padding: \"0.75rem 1rem\"\n  },\n  headerCell: {\n    background: \"transparent\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{highlight.background}\",\n    borderColor: \"{treetable.border.color}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    selectedColor: \"{highlight.color}\",\n    gap: \"0.5rem\",\n    padding: \"0.75rem 1rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"-1px\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  columnTitle: {\n    fontWeight: \"600\"\n  },\n  row: {\n    background: \"transparent\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{highlight.background}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    selectedColor: \"{highlight.color}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"-1px\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  bodyCell: {\n    borderColor: \"{treetable.border.color}\",\n    padding: \"0.75rem 1rem\",\n    gap: \"0.5rem\"\n  },\n  footerCell: {\n    background: \"transparent\",\n    borderColor: \"{treetable.border.color}\",\n    color: \"{content.color}\",\n    padding: \"0.75rem 1rem\"\n  },\n  columnFooter: {\n    fontWeight: \"600\"\n  },\n  footer: {\n    background: \"transparent\",\n    borderColor: \"{treetable.border.color}\",\n    color: \"{content.color}\",\n    borderWidth: \"1px\",\n    padding: \"0.75rem 1rem\"\n  },\n  columnResizer: {\n    width: \"0.5rem\"\n  },\n  resizeIndicator: {\n    width: \"1px\",\n    color: \"{primary.color}\"\n  },\n  sortIcon: {\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\",\n    size: \"0.875rem\"\n  },\n  loadingIcon: {\n    size: \"2rem\"\n  },\n  nodeToggleButton: {\n    hoverBackground: \"{content.hover.background}\",\n    selectedHoverBackground: \"{content.background}\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    selectedHoverColor: \"{primary.color}\",\n    size: \"1.75rem\",\n    borderRadius: \"{treetable.node.toggle.button.size} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  paginatorTop: {\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"1px\"\n  },\n  paginatorBottom: {\n    borderColor: \"{content.border.color}\",\n    borderWidth: \"1px\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        borderColor: \"{content.border.color}\"\n      },\n      bodyCell: {\n        selectedBorderColor: \"{primary.100}\"\n      }\n    },\n    dark: {\n      root: {\n        borderColor: \"{surface.800}\"\n      },\n      bodyCell: {\n        selectedBorderColor: \"{primary.900}\"\n      }\n    }\n  }\n};\n","export const DividerTheme = {\n  root: {\n    borderColor: \"{content.border.color}\"\n  },\n  content: {\n    background: \"{content.background}\",\n    color: \"{text.color}\"\n  },\n  horizontal: {\n    margin: \"1rem 0\",\n    padding: \"0px\",\n    content: {\n      padding: \"0 0.5rem\"\n    }\n  },\n  vertical: {\n    margin: \"0 1rem\",\n    padding: \"0px\",\n    content: {\n      padding: \"0.5rem 0\"\n    }\n  }\n};\n","export const MenuTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\",\n    shadow: \"{overlay.navigation.shadow}\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  list: {\n    padding: \"{navigation.list.padding}\",\n    gap: \"{navigation.list.gap}\"\n  },\n  item: {\n    focusBackground: \"{navigation.item.focus.background}\",\n    color: \"{navigation.item.color}\",\n    focusColor: \"{navigation.item.focus.color}\",\n    padding: \"{navigation.item.padding}\",\n    borderRadius: \"{navigation.item.border.radius}\",\n    gap: \"{navigation.item.gap}\",\n    icon: {\n      color: \"{navigation.item.icon.color}\",\n      focusColor: \"{navigation.item.icon.focus.color}\"\n    }\n  },\n  submenuLabel: {\n    padding: \"{navigation.submenu.label.padding}\",\n    fontWeight: \"{navigation.submenu.label.font.weight}\",\n    background: \"{navigation.submenu.label.background}\",\n    color: \"{navigation.submenu.label.color}\"\n  },\n  separator: {\n    borderColor: \"{content.border.color}\"\n  }\n};\n","export const DynamicdialogTheme = {\n  root: {\n    background: \"{overlay.modal.background}\",\n    borderColor: \"{overlay.modal.border.color}\",\n    color: \"{overlay.modal.color}\",\n    borderRadius: \"{overlay.modal.border.radius}\",\n    shadow: \"{overlay.modal.shadow}\"\n  },\n  header: {\n    padding: \"{overlay.modal.padding}\",\n    gap: \"0.5rem\"\n  },\n  title: {\n    fontSize: \"1.25rem\",\n    fontWeight: \"600\"\n  },\n  content: {\n    padding: \"0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}\"\n  },\n  footer: {\n    padding: \"0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}\",\n    gap: \"0.5rem\"\n  }\n};\n","export const AvatarTheme = {\n  root: {\n    width: \"2rem\",\n    height: \"2rem\",\n    fontSize: \"1rem\",\n    background: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  icon: {\n    size: \"1rem\"\n  },\n  group: {\n    borderColor: \"{content.background}\",\n    offset: \"-0.75rem\"\n  },\n  lg: {\n    width: \"3rem\",\n    height: \"3rem\",\n    fontSize: \"1.5rem\",\n    icon: {\n      size: \"1.5rem\"\n    },\n    group: {\n      offset: \"-1rem\"\n    }\n  },\n  xl: {\n    width: \"4rem\",\n    height: \"4rem\",\n    fontSize: \"2rem\",\n    icon: {\n      size: \"2rem\"\n    },\n    group: {\n      offset: \"-1.5rem\"\n    }\n  }\n};\n","export const ColorpickerTheme = {\n  preview: {\n    width: \"1.5rem\",\n    height: \"1.5rem\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  panel: {\n    shadow: \"{overlay.popover.shadow}\",\n    borderRadius: \"{overlay.popover.border.radius}\"\n  },\n  colorScheme: {\n    light: {\n      panel: {\n        background: \"{surface.800}\",\n        borderColor: \"{surface.900}\"\n      },\n      handle: {\n        color: \"{surface.0}\"\n      }\n    },\n    dark: {\n      panel: {\n        background: \"{surface.900}\",\n        borderColor: \"{surface.700}\"\n      },\n      handle: {\n        color: \"{surface.0}\"\n      }\n    }\n  }\n};\n","export const InplaceTheme = {\n  root: {\n    padding: \"{form.field.padding.y} {form.field.padding.x}\",\n    borderRadius: \"{content.border.radius}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    transitionDuration: \"{transition.duration}\"\n  },\n  display: {\n    hoverBackground: \"{content.hover.background}\",\n    hoverColor: \"{content.hover.color}\"\n  }\n};\n","export const FieldsetTheme = {\n  root: {\n    background: \"transparent\",\n    borderColor: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    color: \"{content.color}\",\n    padding: \"1.125rem 1.125rem 1.125rem 1.125rem\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  legend: {\n    background: \"transparent\",\n    hoverBackground: \"{content.hover.background}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    borderRadius: \"{content.border.radius}\",\n    borderWidth: \"1px\",\n    borderColor: \"transparent\",\n    padding: \"0.5rem 0.75rem\",\n    gap: \"0.5rem\",\n    fontWeight: \"600\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  toggleIcon: {\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\"\n  },\n  content: {\n    padding: \"0px\"\n  }\n};\n","export const SplitbuttonTheme = {\n  root: {\n    borderRadius: \"{form.field.border.radius}\",\n    roundedBorderRadius: \"2rem\",\n    raisedShadow: \"0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)\"\n  }\n};\n","export const MegamenuTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    color: \"{content.color}\",\n    gap: \"0.5rem\",\n    verticalOrientation: {\n      padding: \"{navigation.list.padding}\",\n      gap: \"{navigation.list.gap}\"\n    },\n    horizontalOrientation: {\n      padding: \"0.5rem 0.75rem\",\n      gap: \"0.5rem\"\n    },\n    transitionDuration: \"{transition.duration}\"\n  },\n  baseItem: {\n    borderRadius: \"{content.border.radius}\",\n    padding: \"{navigation.item.padding}\"\n  },\n  item: {\n    focusBackground: \"{navigation.item.focus.background}\",\n    activeBackground: \"{navigation.item.active.background}\",\n    color: \"{navigation.item.color}\",\n    focusColor: \"{navigation.item.focus.color}\",\n    activeColor: \"{navigation.item.active.color}\",\n    padding: \"{navigation.item.padding}\",\n    borderRadius: \"{navigation.item.border.radius}\",\n    gap: \"{navigation.item.gap}\",\n    icon: {\n      color: \"{navigation.item.icon.color}\",\n      focusColor: \"{navigation.item.icon.focus.color}\",\n      activeColor: \"{navigation.item.icon.active.color}\"\n    }\n  },\n  overlay: {\n    padding: \"0px\",\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\",\n    color: \"{content.color}\",\n    shadow: \"{overlay.navigation.shadow}\",\n    gap: \"0.5rem\"\n  },\n  submenu: {\n    padding: \"{navigation.list.padding}\",\n    gap: \"{navigation.list.gap}\"\n  },\n  submenuLabel: {\n    padding: \"{navigation.submenu.label.padding}\",\n    fontWeight: \"{navigation.submenu.label.font.weight}\",\n    background: \"{navigation.submenu.label.background}\",\n    color: \"{navigation.submenu.label.color}\"\n  },\n  submenuIcon: {\n    size: \"{navigation.submenu.icon.size}\",\n    color: \"{navigation.submenu.icon.color}\",\n    focusColor: \"{navigation.submenu.icon.focus.color}\",\n    activeColor: \"{navigation.submenu.icon.active.color}\"\n  },\n  separator: {\n    borderColor: \"{content.border.color}\"\n  },\n  mobileButton: {\n    borderRadius: \"{megamenu.mobile.button.size} / 2\",\n    size: \"1.75rem\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\",\n    hoverBackground: \"{content.hover.background}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  }\n};\n","export const OrderlistTheme = {\n  root: {\n    gap: \"1.125rem\"\n  },\n  controls: {\n    gap: \"0.5rem\"\n  }\n};\n","export const ProgressspinnerTheme = {\n  colorScheme: {\n    light: {\n      root: {\n        colorOne: \"{red.500}\",\n        colorTwo: \"{blue.500}\",\n        colorThree: \"{green.500}\",\n        colorFour: \"{yellow.500}\"\n      }\n    },\n    dark: {\n      root: {\n        colorOne: \"{red.400}\",\n        colorTwo: \"{blue.400}\",\n        colorThree: \"{green.400}\",\n        colorFour: \"{yellow.400}\"\n      }\n    }\n  }\n};\n","export const KnobTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  value: {\n    background: \"{primary.color}\"\n  },\n  range: {\n    background: \"{content.border.color}\"\n  },\n  text: {\n    color: \"{text.muted.color}\"\n  }\n};\n","export const TieredmenuTheme = {\n  root: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\",\n    shadow: \"{overlay.navigation.shadow}\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  list: {\n    padding: \"{navigation.list.padding}\",\n    gap: \"{navigation.list.gap}\"\n  },\n  item: {\n    focusBackground: \"{navigation.item.focus.background}\",\n    activeBackground: \"{navigation.item.active.background}\",\n    color: \"{navigation.item.color}\",\n    focusColor: \"{navigation.item.focus.color}\",\n    activeColor: \"{navigation.item.active.color}\",\n    padding: \"{navigation.item.padding}\",\n    borderRadius: \"{navigation.item.border.radius}\",\n    gap: \"{navigation.item.gap}\",\n    icon: {\n      color: \"{navigation.item.icon.color}\",\n      focusColor: \"{navigation.item.icon.focus.color}\",\n      activeColor: \"{navigation.item.icon.active.color}\"\n    }\n  },\n  submenu: {\n    mobileIndent: \"1rem\"\n  },\n  submenuIcon: {\n    size: \"{navigation.submenu.icon.size}\",\n    color: \"{navigation.submenu.icon.color}\",\n    focusColor: \"{navigation.submenu.icon.focus.color}\",\n    activeColor: \"{navigation.submenu.icon.active.color}\"\n  },\n  separator: {\n    borderColor: \"{content.border.color}\"\n  }\n};\n","export const SelectTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    filledHoverBackground: \"{form.field.filled.hover.background}\",\n    filledFocusBackground: \"{form.field.filled.focus.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.focus.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    placeholderColor: \"{form.field.placeholder.color}\",\n    invalidPlaceholderColor: \"{form.field.invalid.placeholder.color}\",\n    shadow: \"{form.field.shadow}\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{form.field.focus.ring.width}\",\n      style: \"{form.field.focus.ring.style}\",\n      color: \"{form.field.focus.ring.color}\",\n      offset: \"{form.field.focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      fontSize: \"{form.field.sm.font.size}\",\n      paddingX: \"{form.field.sm.padding.x}\",\n      paddingY: \"{form.field.sm.padding.y}\"\n    },\n    lg: {\n      fontSize: \"{form.field.lg.font.size}\",\n      paddingX: \"{form.field.lg.padding.x}\",\n      paddingY: \"{form.field.lg.padding.y}\"\n    }\n  },\n  dropdown: {\n    width: \"2.5rem\",\n    color: \"{form.field.icon.color}\"\n  },\n  overlay: {\n    background: \"{overlay.select.background}\",\n    borderColor: \"{overlay.select.border.color}\",\n    borderRadius: \"{overlay.select.border.radius}\",\n    color: \"{overlay.select.color}\",\n    shadow: \"{overlay.select.shadow}\"\n  },\n  list: {\n    padding: \"{list.padding}\",\n    gap: \"{list.gap}\",\n    header: {\n      padding: \"{list.header.padding}\"\n    }\n  },\n  option: {\n    focusBackground: \"{list.option.focus.background}\",\n    selectedBackground: \"{list.option.selected.background}\",\n    selectedFocusBackground: \"{list.option.selected.focus.background}\",\n    color: \"{list.option.color}\",\n    focusColor: \"{list.option.focus.color}\",\n    selectedColor: \"{list.option.selected.color}\",\n    selectedFocusColor: \"{list.option.selected.focus.color}\",\n    padding: \"{list.option.padding}\",\n    borderRadius: \"{list.option.border.radius}\"\n  },\n  optionGroup: {\n    background: \"{list.option.group.background}\",\n    color: \"{list.option.group.color}\",\n    fontWeight: \"{list.option.group.font.weight}\",\n    padding: \"{list.option.group.padding}\"\n  },\n  clearIcon: {\n    color: \"{form.field.icon.color}\"\n  },\n  checkmark: {\n    color: \"{list.option.color}\",\n    gutterStart: \"-0.375rem\",\n    gutterEnd: \"0.375rem\"\n  },\n  emptyMessage: {\n    padding: \"{list.option.padding}\"\n  }\n};\n","export const BreadcrumbTheme = {\n  root: {\n    padding: \"0.125rem\",\n    background: \"transparent\",\n    gap: \"0.5rem\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  item: {\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    borderRadius: \"{content.border.radius}\",\n    gap: \"{navigation.item.gap}\",\n    icon: {\n      color: \"{navigation.item.icon.color}\",\n      hoverColor: \"{navigation.item.icon.focus.color}\"\n    },\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  separator: {\n    color: \"{navigation.item.icon.color}\"\n  }\n};\n","export const VirtualscrollerTheme = {\n  loader: {\n    mask: {\n      background: \"transparent\",\n      color: \"{text.muted.color}\"\n    },\n    icon: {\n      size: \"2rem\"\n    }\n  }\n};\n","export const PaginatorTheme = {\n  root: {\n    padding: \"0.5rem 1rem\",\n    gap: \"0.25rem\",\n    borderRadius: \"{content.border.radius}\",\n    background: \"transparent\",\n    color: \"{content.color}\",\n    transitionDuration: \"{transition.duration}\"\n  },\n  navButton: {\n    background: \"transparent\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{highlight.background}\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\",\n    selectedColor: \"{highlight.color}\",\n    width: \"2.5rem\",\n    height: \"2.5rem\",\n    borderRadius: \"{paginator.nav.button.width} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  currentPageReport: {\n    color: \"{text.muted.color}\"\n  },\n  jumpToPageInput: {\n    maxWidth: \"2.5rem\"\n  }\n};\n","export const MultiselectTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    filledHoverBackground: \"{form.field.filled.hover.background}\",\n    filledFocusBackground: \"{form.field.filled.focus.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.focus.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    placeholderColor: \"{form.field.placeholder.color}\",\n    invalidPlaceholderColor: \"{form.field.invalid.placeholder.color}\",\n    shadow: \"{form.field.shadow}\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{form.field.focus.ring.width}\",\n      style: \"{form.field.focus.ring.style}\",\n      color: \"{form.field.focus.ring.color}\",\n      offset: \"{form.field.focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      fontSize: \"{form.field.sm.font.size}\",\n      paddingX: \"{form.field.sm.padding.x}\",\n      paddingY: \"{form.field.sm.padding.y}\"\n    },\n    lg: {\n      fontSize: \"{form.field.lg.font.size}\",\n      paddingX: \"{form.field.lg.padding.x}\",\n      paddingY: \"{form.field.lg.padding.y}\"\n    }\n  },\n  dropdown: {\n    width: \"2.5rem\",\n    color: \"{form.field.icon.color}\"\n  },\n  overlay: {\n    background: \"{overlay.select.background}\",\n    borderColor: \"{overlay.select.border.color}\",\n    borderRadius: \"{overlay.select.border.radius}\",\n    color: \"{overlay.select.color}\",\n    shadow: \"{overlay.select.shadow}\"\n  },\n  list: {\n    padding: \"{list.padding}\",\n    gap: \"{list.gap}\",\n    header: {\n      padding: \"{list.header.padding}\"\n    }\n  },\n  option: {\n    focusBackground: \"{list.option.focus.background}\",\n    selectedBackground: \"{list.option.selected.background}\",\n    selectedFocusBackground: \"{list.option.selected.focus.background}\",\n    color: \"{list.option.color}\",\n    focusColor: \"{list.option.focus.color}\",\n    selectedColor: \"{list.option.selected.color}\",\n    selectedFocusColor: \"{list.option.selected.focus.color}\",\n    padding: \"{list.option.padding}\",\n    borderRadius: \"{list.option.border.radius}\",\n    gap: \"0.5rem\"\n  },\n  optionGroup: {\n    background: \"{list.option.group.background}\",\n    color: \"{list.option.group.color}\",\n    fontWeight: \"{list.option.group.font.weight}\",\n    padding: \"{list.option.group.padding}\"\n  },\n  clearIcon: {\n    color: \"{form.field.icon.color}\"\n  },\n  chip: {\n    borderRadius: \"{border.radius.sm}\"\n  },\n  emptyMessage: {\n    padding: \"{list.option.padding}\"\n  }\n};\n","export const CascadeselectTheme = {\n  root: {\n    background: \"{form.field.background}\",\n    disabledBackground: \"{form.field.disabled.background}\",\n    filledBackground: \"{form.field.filled.background}\",\n    filledHoverBackground: \"{form.field.filled.hover.background}\",\n    filledFocusBackground: \"{form.field.filled.focus.background}\",\n    borderColor: \"{form.field.border.color}\",\n    hoverBorderColor: \"{form.field.hover.border.color}\",\n    focusBorderColor: \"{form.field.focus.border.color}\",\n    invalidBorderColor: \"{form.field.invalid.border.color}\",\n    color: \"{form.field.color}\",\n    disabledColor: \"{form.field.disabled.color}\",\n    placeholderColor: \"{form.field.placeholder.color}\",\n    invalidPlaceholderColor: \"{form.field.invalid.placeholder.color}\",\n    shadow: \"{form.field.shadow}\",\n    paddingX: \"{form.field.padding.x}\",\n    paddingY: \"{form.field.padding.y}\",\n    borderRadius: \"{form.field.border.radius}\",\n    focusRing: {\n      width: \"{form.field.focus.ring.width}\",\n      style: \"{form.field.focus.ring.style}\",\n      color: \"{form.field.focus.ring.color}\",\n      offset: \"{form.field.focus.ring.offset}\",\n      shadow: \"{form.field.focus.ring.shadow}\"\n    },\n    transitionDuration: \"{form.field.transition.duration}\",\n    sm: {\n      fontSize: \"{form.field.sm.font.size}\",\n      paddingX: \"{form.field.sm.padding.x}\",\n      paddingY: \"{form.field.sm.padding.y}\"\n    },\n    lg: {\n      fontSize: \"{form.field.lg.font.size}\",\n      paddingX: \"{form.field.lg.padding.x}\",\n      paddingY: \"{form.field.lg.padding.y}\"\n    }\n  },\n  dropdown: {\n    width: \"2.5rem\",\n    color: \"{form.field.icon.color}\"\n  },\n  overlay: {\n    background: \"{overlay.select.background}\",\n    borderColor: \"{overlay.select.border.color}\",\n    borderRadius: \"{overlay.select.border.radius}\",\n    color: \"{overlay.select.color}\",\n    shadow: \"{overlay.select.shadow}\"\n  },\n  list: {\n    padding: \"{list.padding}\",\n    gap: \"{list.gap}\",\n    mobileIndent: \"1rem\"\n  },\n  option: {\n    focusBackground: \"{list.option.focus.background}\",\n    selectedBackground: \"{list.option.selected.background}\",\n    selectedFocusBackground: \"{list.option.selected.focus.background}\",\n    color: \"{list.option.color}\",\n    focusColor: \"{list.option.focus.color}\",\n    selectedColor: \"{list.option.selected.color}\",\n    selectedFocusColor: \"{list.option.selected.focus.color}\",\n    padding: \"{list.option.padding}\",\n    borderRadius: \"{list.option.border.radius}\",\n    icon: {\n      color: \"{list.option.icon.color}\",\n      focusColor: \"{list.option.icon.focus.color}\",\n      size: \"0.875rem\"\n    }\n  },\n  clearIcon: {\n    color: \"{form.field.icon.color}\"\n  }\n};\n","export const TimelineTheme = {\n  event: {\n    minHeight: \"5rem\"\n  },\n  horizontal: {\n    eventContent: {\n      padding: \"1rem 0\"\n    }\n  },\n  vertical: {\n    eventContent: {\n      padding: \"0 1rem\"\n    }\n  },\n  eventMarker: {\n    size: \"1.125rem\",\n    borderRadius: \"{timeline.event.marker.size} / 2\",\n    borderWidth: \"2px\",\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    content: {\n      borderRadius: \"{timeline.event.marker.content.size} / 2\",\n      size: \"0.375rem\",\n      background: \"{primary.color}\",\n      insetShadow: \"0px 0.5 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)\"\n    }\n  },\n  eventConnector: {\n    color: \"{content.border.color}\",\n    size: \"2px\"\n  }\n};\n","export const MetergroupTheme = {\n  root: {\n    borderRadius: \"{content.border.radius}\",\n    gap: \"1rem\"\n  },\n  meters: {\n    background: \"{content.border.color}\",\n    size: \"0.5rem\"\n  },\n  label: {\n    gap: \"0.5rem\"\n  },\n  labelMarker: {\n    size: \"0.5rem\"\n  },\n  labelIcon: {\n    size: \"1rem\"\n  },\n  labelList: {\n    verticalGap: \"0.5rem\",\n    horizontalGap: \"1rem\"\n  }\n};\n","export const TagTheme = {\n  root: {\n    fontSize: \"0.875rem\",\n    fontWeight: \"700\",\n    padding: \"0.25rem 0.5rem\",\n    gap: \"0.25rem\",\n    borderRadius: \"{content.border.radius}\",\n    roundedBorderRadius: \"{border.radius.xl}\"\n  },\n  icon: {\n    size: \"0.75rem\"\n  },\n  colorScheme: {\n    light: {\n      primary: {\n        background: \"{primary.100}\",\n        color: \"{primary.700}\"\n      },\n      secondary: {\n        background: \"{surface.100}\",\n        color: \"{surface.600}\"\n      },\n      success: {\n        background: \"{green.100}\",\n        color: \"{green.700}\"\n      },\n      info: {\n        background: \"{sky.100}\",\n        color: \"{sky.700}\"\n      },\n      warn: {\n        background: \"{orange.100}\",\n        color: \"{orange.700}\"\n      },\n      danger: {\n        background: \"{red.100}\",\n        color: \"{red.700}\"\n      },\n      contrast: {\n        background: \"{surface.950}\",\n        color: \"{surface.0}\"\n      }\n    },\n    dark: {\n      primary: {\n        background: \"color-mix(in srgb, {primary.500}, transparent 84%)\",\n        color: \"{primary.300}\"\n      },\n      secondary: {\n        background: \"{surface.800}\",\n        color: \"{surface.300}\"\n      },\n      success: {\n        background: \"color-mix(in srgb, {green.500}, transparent 84%)\",\n        color: \"{green.300}\"\n      },\n      info: {\n        background: \"color-mix(in srgb, {sky.500}, transparent 84%)\",\n        color: \"{sky.300}\"\n      },\n      warn: {\n        background: \"color-mix(in srgb, {orange.500}, transparent 84%)\",\n        color: \"{orange.300}\"\n      },\n      danger: {\n        background: \"color-mix(in srgb, {red.500}, transparent 84%)\",\n        color: \"{red.300}\"\n      },\n      contrast: {\n        background: \"{surface.0}\",\n        color: \"{surface.950}\"\n      }\n    }\n  }\n};\n","export const DatatableTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  header: {\n    background: \"transparent\",\n    borderColor: \"{datatable.border.color}\",\n    color: \"{content.color}\",\n    borderWidth: \"0 0 1px 0\",\n    padding: \"0.75rem 1rem\",\n    sm: {\n      padding: \"0.375rem 0.5rem\"\n    },\n    lg: {\n      padding: \"1rem 1.25rem\"\n    }\n  },\n  headerCell: {\n    background: \"transparent\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{highlight.background}\",\n    borderColor: \"{datatable.border.color}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    selectedColor: \"{highlight.color}\",\n    gap: \"0.5rem\",\n    padding: \"0.75rem 1rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"-1px\",\n      shadow: \"{focus.ring.shadow}\"\n    },\n    sm: {\n      padding: \"0.375rem 0.5rem\"\n    },\n    lg: {\n      padding: \"1rem 1.25rem\"\n    }\n  },\n  columnTitle: {\n    fontWeight: \"600\"\n  },\n  row: {\n    background: \"transparent\",\n    hoverBackground: \"{content.hover.background}\",\n    selectedBackground: \"{highlight.background}\",\n    color: \"{content.color}\",\n    hoverColor: \"{content.hover.color}\",\n    selectedColor: \"{highlight.color}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"-1px\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  bodyCell: {\n    borderColor: \"{datatable.border.color}\",\n    padding: \"0.75rem 1rem\",\n    sm: {\n      padding: \"0.375rem 0.5rem\"\n    },\n    lg: {\n      padding: \"1rem 1.25rem\"\n    }\n  },\n  footerCell: {\n    background: \"transparent\",\n    borderColor: \"{datatable.border.color}\",\n    color: \"{content.color}\",\n    padding: \"0.75rem 1rem\",\n    sm: {\n      padding: \"0.375rem 0.5rem\"\n    },\n    lg: {\n      padding: \"1rem 1.25rem\"\n    }\n  },\n  columnFooter: {\n    fontWeight: \"600\"\n  },\n  footer: {\n    background: \"transparent\",\n    borderColor: \"{datatable.border.color}\",\n    color: \"{content.color}\",\n    borderWidth: \"1px\",\n    padding: \"0.75rem 1rem\",\n    sm: {\n      padding: \"0.375rem 0.5rem\"\n    },\n    lg: {\n      padding: \"1rem 1.25rem\"\n    }\n  },\n  dropPoint: {\n    color: \"{primary.color}\"\n  },\n  columnResizer: {\n    width: \"0.5rem\"\n  },\n  resizeIndicator: {\n    width: \"1px\",\n    color: \"{primary.color}\"\n  },\n  sortIcon: {\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.hover.muted.color}\",\n    size: \"0.875rem\"\n  },\n  loadingIcon: {\n    size: \"2rem\"\n  },\n  rowToggleButton: {\n    hoverBackground: \"{content.hover.background}\",\n    selectedHoverBackground: \"{content.background}\",\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    selectedHoverColor: \"{primary.color}\",\n    size: \"1.75rem\",\n    borderRadius: \"{datatable.row.toggle.button.size} / 2\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  filter: {\n    inlineGap: \"0.5rem\",\n    overlaySelect: {\n      background: \"{overlay.select.background}\",\n      borderColor: \"{overlay.select.border.color}\",\n      borderRadius: \"{overlay.select.border.radius}\",\n      color: \"{overlay.select.color}\",\n      shadow: \"{overlay.select.shadow}\"\n    },\n    overlayPopover: {\n      background: \"{overlay.popover.background}\",\n      borderColor: \"{overlay.popover.border.color}\",\n      borderRadius: \"{overlay.popover.border.radius}\",\n      color: \"{overlay.popover.color}\",\n      shadow: \"{overlay.popover.shadow}\",\n      padding: \"{overlay.popover.padding}\",\n      gap: \"0.5rem\"\n    },\n    rule: {\n      borderColor: \"{content.border.color}\"\n    },\n    constraintList: {\n      padding: \"{list.padding}\",\n      gap: \"{list.gap}\"\n    },\n    constraint: {\n      focusBackground: \"{list.option.focus.background}\",\n      selectedBackground: \"{list.option.selected.background}\",\n      selectedFocusBackground: \"{list.option.selected.focus.background}\",\n      color: \"{list.option.color}\",\n      focusColor: \"{list.option.focus.color}\",\n      selectedColor: \"{list.option.selected.color}\",\n      selectedFocusColor: \"{list.option.selected.focus.color}\",\n      separator: {\n        borderColor: \"{content.border.color}\"\n      },\n      padding: \"{list.option.padding}\",\n      borderRadius: \"{list.option.border.radius}\"\n    }\n  },\n  paginatorTop: {\n    borderColor: \"{datatable.border.color}\",\n    borderWidth: \"0 0 1px 0\"\n  },\n  paginatorBottom: {\n    borderColor: \"{datatable.border.color}\",\n    borderWidth: \"1px 0 0 0\"\n  },\n  colorScheme: {\n    light: {\n      root: {\n        borderColor: \"{content.border.color}\"\n      },\n      row: {\n        stripedBackground: \"{surface.50}\"\n      },\n      bodyCell: {\n        selectedBorderColor: \"{primary.100}\"\n      }\n    },\n    dark: {\n      root: {\n        borderColor: \"{surface.800}\"\n      },\n      row: {\n        stripedBackground: \"{surface.900}\"\n      },\n      bodyCell: {\n        selectedBorderColor: \"{primary.900}\"\n      }\n    }\n  }\n};\n","export const EditorTheme = {\n  toolbar: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    borderRadius: \"{content.border.radius}\"\n  },\n  toolbarItem: {\n    color: \"{text.muted.color}\",\n    hoverColor: \"{text.color}\",\n    activeColor: \"{primary.color}\"\n  },\n  overlay: {\n    background: \"{overlay.select.background}\",\n    borderColor: \"{overlay.select.border.color}\",\n    borderRadius: \"{overlay.select.border.radius}\",\n    color: \"{overlay.select.color}\",\n    shadow: \"{overlay.select.shadow}\",\n    padding: \"{list.padding}\"\n  },\n  overlayOption: {\n    focusBackground: \"{list.option.focus.background}\",\n    color: \"{list.option.color}\",\n    focusColor: \"{list.option.focus.color}\",\n    padding: \"{list.option.padding}\",\n    borderRadius: \"{list.option.border.radius}\"\n  },\n  content: {\n    background: \"{content.background}\",\n    borderColor: \"{content.border.color}\",\n    color: \"{content.color}\",\n    borderRadius: \"{content.border.radius}\"\n  }\n};\n","export const DockTheme = {\n  root: {\n    background: \"rgba(255, 255, 255, 0.1)\",\n    borderColor: \"rgba(255, 255, 255, 0.2)\",\n    padding: \"0.5rem\",\n    borderRadius: \"{border.radius.xl}\"\n  },\n  item: {\n    borderRadius: \"{content.border.radius}\",\n    padding: \"0.5rem\",\n    size: \"3rem\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  }\n};\n","export const InputgroupTheme = {\n  addon: {\n    background: \"{form.field.background}\",\n    borderColor: \"{form.field.border.color}\",\n    color: \"{form.field.icon.color}\",\n    borderRadius: \"{form.field.border.radius}\",\n    padding: \"0.5rem\",\n    minWidth: \"2.5rem\"\n  }\n};\n","export const ScrollpanelTheme = {\n  root: {\n    transitionDuration: \"{transition.duration}\"\n  },\n  bar: {\n    size: \"9px\",\n    borderRadius: \"{border.radius.sm}\",\n    focusRing: {\n      width: \"{focus.ring.width}\",\n      style: \"{focus.ring.style}\",\n      color: \"{focus.ring.color}\",\n      offset: \"{focus.ring.offset}\",\n      shadow: \"{focus.ring.shadow}\"\n    }\n  },\n  colorScheme: {\n    light: {\n      bar: {\n        background: \"{surface.100}\"\n      }\n    },\n    dark: {\n      bar: {\n        background: \"{surface.800}\"\n      }\n    }\n  }\n};\n","export const BadgeTheme = {\n  root: {\n    borderRadius: \"{border.radius.md}\",\n    padding: \"0 0.5rem\",\n    fontSize: \"0.75rem\",\n    fontWeight: \"700\",\n    minWidth: \"1.5rem\",\n    height: \"1.5rem\"\n  },\n  dot: {\n    size: \"0.5rem\"\n  },\n  sm: {\n    fontSize: \"0.625rem\",\n    minWidth: \"1.25rem\",\n    height: \"1.25rem\"\n  },\n  lg: {\n    fontSize: \"0.875rem\",\n    minWidth: \"1.75rem\",\n    height: \"1.75rem\"\n  },\n  xl: {\n    fontSize: \"1rem\",\n    minWidth: \"2rem\",\n    height: \"2rem\"\n  },\n  colorScheme: {\n    light: {\n      primary: {\n        background: \"{primary.color}\",\n        color: \"{primary.contrast.color}\"\n      },\n      secondary: {\n        background: \"{surface.100}\",\n        color: \"{surface.600}\"\n      },\n      success: {\n        background: \"{green.500}\",\n        color: \"{surface.0}\"\n      },\n      info: {\n        background: \"{sky.500}\",\n        color: \"{surface.0}\"\n      },\n      warn: {\n        background: \"{orange.500}\",\n        color: \"{surface.0}\"\n      },\n      danger: {\n        background: \"{red.500}\",\n        color: \"{surface.0}\"\n      },\n      contrast: {\n        background: \"{surface.950}\",\n        color: \"{surface.0}\"\n      }\n    },\n    dark: {\n      primary: {\n        background: \"{primary.color}\",\n        color: \"{primary.contrast.color}\"\n      },\n      secondary: {\n        background: \"{surface.800}\",\n        color: \"{surface.300}\"\n      },\n      success: {\n        background: \"{green.400}\",\n        color: \"{green.950}\"\n      },\n      info: {\n        background: \"{sky.400}\",\n        color: \"{sky.950}\"\n      },\n      warn: {\n        background: \"{orange.400}\",\n        color: \"{orange.950}\"\n      },\n      danger: {\n        background: \"{red.400}\",\n        color: \"{red.950}\"\n      },\n      contrast: {\n        background: \"{surface.0}\",\n        color: \"{surface.950}\"\n      }\n    }\n  }\n};\n","import { BaseTheme } from './base';\nimport { TreeselectTheme } from './components/treeselect';\nimport { IconfieldTheme } from './components/iconfield';\nimport { FloatlabelTheme } from './components/floatlabel';\nimport { TabsTheme } from './components/tabs';\nimport { TreeTheme } from './components/tree';\nimport { IftalabelTheme } from './components/iftalabel';\nimport { FileuploadTheme } from './components/fileupload';\nimport { DrawerTheme } from './components/drawer';\nimport { OrganizationchartTheme } from './components/organizationchart';\nimport { ConfirmpopupTheme } from './components/confirmpopup';\nimport { TooltipTheme } from './components/tooltip';\nimport { PasswordTheme } from './components/password';\nimport { RatingTheme } from './components/rating';\nimport { CardTheme } from './components/card';\nimport { PanelTheme } from './components/panel';\nimport { RadiobuttonTheme } from './components/radiobutton';\nimport { AutocompleteTheme } from './components/autocomplete';\nimport { ImagecompareTheme } from './components/imagecompare';\nimport { MenubarTheme } from './components/menubar';\nimport { OverlaybadgeTheme } from './components/overlaybadge';\nimport { GalleriaTheme } from './components/galleria';\nimport { AccordionTheme } from './components/accordion';\nimport { ToggleswitchTheme } from './components/toggleswitch';\nimport { SkeletonTheme } from './components/skeleton';\nimport { DataviewTheme } from './components/dataview';\nimport { PanelmenuTheme } from './components/panelmenu';\nimport { DatepickerTheme } from './components/datepicker';\nimport { ToastTheme } from './components/toast';\nimport { ChipTheme } from './components/chip';\nimport { InputtextTheme } from './components/inputtext';\nimport { ToolbarTheme } from './components/toolbar';\nimport { ListboxTheme } from './components/listbox';\nimport { CheckboxTheme } from './components/checkbox';\nimport { TogglebuttonTheme } from './components/togglebutton';\nimport { SplitterTheme } from './components/splitter';\nimport { SelectbuttonTheme } from './components/selectbutton';\nimport { TerminalTheme } from './components/terminal';\nimport { ContextmenuTheme } from './components/contextmenu';\nimport { SliderTheme } from './components/slider';\nimport { RippleTheme } from './components/ripple';\nimport { MessageTheme } from './components/message';\nimport { StepperTheme } from './components/stepper';\nimport { InputnumberTheme } from './components/inputnumber';\nimport { ProgressbarTheme } from './components/progressbar';\nimport { CarouselTheme } from './components/carousel';\nimport { ImageTheme } from './components/image';\nimport { InputotpTheme } from './components/inputotp';\nimport { DialogTheme } from './components/dialog';\nimport { PopoverTheme } from './components/popover';\nimport { TabviewTheme } from './components/tabview';\nimport { PicklistTheme } from './components/picklist';\nimport { BlockuiTheme } from './components/blockui';\nimport { TextareaTheme } from './components/textarea';\nimport { SpeeddialTheme } from './components/speeddial';\nimport { ButtonTheme } from './components/button';\nimport { ConfirmdialogTheme } from './components/confirmdialog';\nimport { TreetableTheme } from './components/treetable';\nimport { DividerTheme } from './components/divider';\nimport { MenuTheme } from './components/menu';\nimport { DynamicdialogTheme } from './components/dynamicdialog';\nimport { AvatarTheme } from './components/avatar';\nimport { ColorpickerTheme } from './components/colorpicker';\nimport { InplaceTheme } from './components/inplace';\nimport { FieldsetTheme } from './components/fieldset';\nimport { SplitbuttonTheme } from './components/splitbutton';\nimport { MegamenuTheme } from './components/megamenu';\nimport { OrderlistTheme } from './components/orderlist';\nimport { ProgressspinnerTheme } from './components/progressspinner';\nimport { KnobTheme } from './components/knob';\nimport { TieredmenuTheme } from './components/tieredmenu';\nimport { SelectTheme } from './components/select';\nimport { BreadcrumbTheme } from './components/breadcrumb';\nimport { VirtualscrollerTheme } from './components/virtualscroller';\nimport { PaginatorTheme } from './components/paginator';\nimport { MultiselectTheme } from './components/multiselect';\nimport { CascadeselectTheme } from './components/cascadeselect';\nimport { TimelineTheme } from './components/timeline';\nimport { MetergroupTheme } from './components/metergroup';\nimport { TagTheme } from './components/tag';\nimport { DatatableTheme } from './components/datatable';\nimport { EditorTheme } from './components/editor';\nimport { DockTheme } from './components/dock';\nimport { InputgroupTheme } from './components/inputgroup';\nimport { ScrollpanelTheme } from './components/scrollpanel';\nimport { BadgeTheme } from './components/badge';\n\nexport const StellarTheme = {\n  ...BaseTheme,\n  components: {\n    treeselect: TreeselectTheme,\n    iconfield: IconfieldTheme,\n    floatlabel: FloatlabelTheme,\n    tabs: TabsTheme,\n    tree: TreeTheme,\n    iftalabel: IftalabelTheme,\n    fileupload: FileuploadTheme,\n    drawer: DrawerTheme,\n    organizationchart: OrganizationchartTheme,\n    confirmpopup: ConfirmpopupTheme,\n    tooltip: TooltipTheme,\n    password: PasswordTheme,\n    rating: RatingTheme,\n    card: CardTheme,\n    panel: PanelTheme,\n    radiobutton: RadiobuttonTheme,\n    autocomplete: AutocompleteTheme,\n    imagecompare: ImagecompareTheme,\n    menubar: MenubarTheme,\n    overlaybadge: OverlaybadgeTheme,\n    galleria: GalleriaTheme,\n    accordion: AccordionTheme,\n    toggleswitch: ToggleswitchTheme,\n    skeleton: SkeletonTheme,\n    dataview: DataviewTheme,\n    panelmenu: PanelmenuTheme,\n    datepicker: DatepickerTheme,\n    toast: ToastTheme,\n    chip: ChipTheme,\n    inputtext: InputtextTheme,\n    toolbar: ToolbarTheme,\n    listbox: ListboxTheme,\n    checkbox: CheckboxTheme,\n    togglebutton: TogglebuttonTheme,\n    splitter: SplitterTheme,\n    selectbutton: SelectbuttonTheme,\n    terminal: TerminalTheme,\n    contextmenu: ContextmenuTheme,\n    slider: SliderTheme,\n    ripple: RippleTheme,\n    message: MessageTheme,\n    stepper: StepperTheme,\n    inputnumber: InputnumberTheme,\n    progressbar: ProgressbarTheme,\n    carousel: CarouselTheme,\n    image: ImageTheme,\n    inputotp: InputotpTheme,\n    dialog: DialogTheme,\n    popover: PopoverTheme,\n    tabview: TabviewTheme,\n    picklist: PicklistTheme,\n    blockui: BlockuiTheme,\n    textarea: TextareaTheme,\n    speeddial: SpeeddialTheme,\n    button: ButtonTheme,\n    confirmdialog: ConfirmdialogTheme,\n    treetable: TreetableTheme,\n    divider: DividerTheme,\n    menu: MenuTheme,\n    dynamicdialog: DynamicdialogTheme,\n    avatar: AvatarTheme,\n    colorpicker: ColorpickerTheme,\n    inplace: InplaceTheme,\n    fieldset: FieldsetTheme,\n    splitbutton: SplitbuttonTheme,\n    megamenu: MegamenuTheme,\n    orderlist: OrderlistTheme,\n    progressspinner: ProgressspinnerTheme,\n    knob: KnobTheme,\n    tieredmenu: TieredmenuTheme,\n    select: SelectTheme,\n    breadcrumb: BreadcrumbTheme,\n    virtualscroller: VirtualscrollerTheme,\n    paginator: PaginatorTheme,\n    multiselect: MultiselectTheme,\n    cascadeselect: CascadeselectTheme,\n    timeline: TimelineTheme,\n    metergroup: MetergroupTheme,\n    tag: TagTheme,\n    datatable: DatatableTheme,\n    editor: EditorTheme,\n    dock: DockTheme,\n    inputgroup: InputgroupTheme,\n    scrollpanel: ScrollpanelTheme,\n    badge: BadgeTheme\n  }\n};\n","import { definePreset } from '@primeng/themes';\nimport { StellarTheme } from './stellar';\n\nexport const AbstractBaseTheme = definePreset(StellarTheme);\n\nexport const UIKitBaseConfig = {\n  theme: {\n    preset: AbstractBaseTheme,\n    options: {\n      darkModeSelector: '[data-display-theme=\"dark\"]',\n      cssLayer: {\n          name: 'primeng',\n          order: 'tailwind-base, ui-kit-base, primeng, tailwind-utilities'\n      }\n  }\n  },\n};\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DebugLogService {\n\n  public debug(message: string): void {\n    this.log('DEBUG', message, '', '', 'normal');\n  }\n\n  public info(message: string): void {\n    this.log('INFO', message, '', '', 'normal');\n  }\n\n  public warn(message: string): void {\n    this.log('WARN', message, '', '', 'normal');\n  }\n\n  public error(message: string): void {\n    this.log('ERROR', message, 'white', 'red', 'bold');\n  }\n\n  public log(\n    type: string,\n    message: string,\n    color = 'black',\n    background = '',\n    fontWeight = 'normal'\n  ): void {\n    const scStyle = 'color: rgb(255, 155, 29); background: rgb(24, 28, 31); font-weight: bold;';\n    const style = `color: ${ color }; background: ${ background }; font-weight: ${ fontWeight }`;\n    console.log(`%c[${ type }] %c${ message }`, scStyle, style);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class MediaQueryService {\n\n  public createListener(query: string, handler: MediaQueryListListener): MediaQueryList {\n    const mql = window.matchMedia(query);\n    mql.addEventListener('change', handler);\n\n    const event: any = {\n      type: 'init',\n      media: query,\n      matches: mql.matches,\n    };\n\n    handler(event);\n    return mql;\n  }\n\n  public createMaxWidthListener(maxWidth: number, handler: MediaQueryListListener): MediaQueryList {\n    return this.createListener(`only screen and (max-width: ${ maxWidth }px)`, handler);\n  }\n\n  public createMinWidthListener(minWidth: number, handler: MediaQueryListListener): MediaQueryList {\n    return this.createListener(`only screen and (min-width: ${ minWidth }px)`, handler);\n  }\n\n  public createWidthRangeListener(minWidth: number, maxWidth: number, handler: MediaQueryListListener): MediaQueryList {\n    return this.createListener(`only screen and (min-width: ${ minWidth }px) and (max-width: ${ maxWidth }px)`, handler);\n  }\n}\n\nexport type MediaQueryListListener = (event: MediaQueryListEvent) => void;\n","export class WindowService {\n  public getWindowReference(): Window {\n    return window;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport {\n  LocalStorageService,\n  MediaQueryService,\n  WindowService,\n} from './services';\n\nexport const SERVICES = [\n  LocalStorageService,\n  MediaQueryService,\n  WindowService,\n];\n\n// Directives\nexport const DIRECTIVES = [];\n\n// Components\nexport const COMPONENTS = [];\n\n@NgModule({\n  imports: [\n    CommonModule,\n  ],\n  providers: SERVICES,\n  declarations: [COMPONENTS, DIRECTIVES],\n  exports: [COMPONENTS, DIRECTIVES],\n})\nexport class UtilitiesModule {}\n","export { UtilitiesModule } from './@utilities.module';\nexport * from './services';\n// export * from './components';\n// export * from './models';\n","import { LocaleService } from '../services/locale.service';\n\nexport abstract class LocalePipeBase {\n  constructor(protected localeService: LocaleService) {\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalePipeBase } from '../../localization/pipes/locale-pipe-base';\n\n@Pipe({\n  name: 'relativeTime',\n})\nexport class RelativeTimePipe extends LocalePipeBase implements PipeTransform {\n\n  public transform(input: Date, invalidDateDisplay = '-'): string {\n    if (!input) {\n      return invalidDateDisplay;\n    }\n\n    const now = new Date();\n    const diff = input.getTime() - now.getTime();\n\n    const units = {\n      year:   1000 * 60 * 60 * 24 * 365,\n      month:  1000 * 60 * 60 * 24 * 30,\n      week:   1000 * 60 * 60 * 24 * 7,\n      day:    1000 * 60 * 60 * 24,\n      hour:   1000 * 60 * 60,\n      minute: 1000 * 60,\n      second: 1000\n    };\n\n    for (const [unit, msPerUnit] of Object.entries(units)) {\n      const value = diff / msPerUnit;\n      if (Math.abs(value) >= 1) {\n        return this.localeService.relativeTimeFormat.format(Math.round(value), unit as Intl.RelativeTimeFormatUnit);\n      }\n    }\n\n    return 'just now';\n  }\n\n}\n","import { Component, ElementRef, Input, ViewChild, AfterContentChecked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport hljs from 'highlight.js';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n  selector: 'sc-code-block',\n  standalone: true,\n  imports: [CommonModule, ButtonModule, TooltipModule],\n  preserveWhitespaces: true,\n  template: `\n    <div class=\"code-block\">\n      <div class=\"code-block-header\">\n        <span class=\"code-block-language\" *ngIf=\"language || filename\">{{ filename ?? language }}</span>\n        <a href=\"javascript:void(0);\" (click)=\"copyToClipboard()\">\n          <span *ngIf=\"!confirmed\" class=\"pi pi-copy\"></span>\n          <span *ngIf=\"confirmed\" class=\"pi pi-check confirmed\"></span>\n          <span *ngIf=\"confirmed\">Copied!</span>\n        </a>\n      </div>\n      <code [class]=\"language\">\n        <pre class=\"tw-hidden original\" #preOriginal><ng-content></ng-content></pre>\n        <pre class=\"highlighted\" #preHighlighted>{{ code }}</pre>\n      </code>\n    </div>\n  `,\n  styleUrls: ['./code-block.component.scss'],\n})\nexport class CodeBlockComponent implements AfterContentChecked {\n  @ViewChild('preOriginal')\n  public original!: ElementRef;\n\n  @ViewChild('preHighlighted')\n  public highlighted!: ElementRef;\n\n  @Input()\n  public code = '';\n\n  @Input()\n  public language?: string;\n\n  @Input()\n  public filename?: string;\n\n  public confirmed = false;\n\n  public ngAfterContentChecked(): void {\n    if (this.language && this.original && this.highlighted) {\n      this.highlighted.nativeElement.innerHTML = this.original.nativeElement.innerHTML;\n      this.highlighted.nativeElement.removeAttribute('data-highlighted');\n      hljs.highlightElement(this.highlighted.nativeElement);\n    }\n  }\n\n  public async copyToClipboard(): Promise<void> {\n    await navigator.clipboard.writeText(this.original.nativeElement.innerText);\n    this.confirmed = true;\n    setTimeout(() => {\n      this.confirmed = false;\n    }, 1000);\n  }\n}\n","import { Injectable, signal, computed, inject } from '@angular/core';\nimport { LocalStorageService } from '../../utilities/services/local-storage.service';\n\nexport const DATETIME_CONFIG_KEY = 'USER_DATETIME_CONFIG';\n\n/**\n * User-selectable date/time format preset.\n * Each preset defines how dates and times are rendered across the entire platform.\n */\nexport interface DateTimePreset {\n  id: string;\n  label: string;\n  dateFormat: string;\n  timeFormat: '12h' | '24h';\n  /** PrimeNG datepicker format string (uses mm/dd/yy syntax) */\n  primeNgDateFormat: string;\n  /** Intl.DateTimeFormat options for display rendering */\n  intlOptions: Intl.DateTimeFormatOptions;\n  /** Example output for the settings UI */\n  example: string;\n}\n\nexport interface DateTimeConfig {\n  presetId: string;\n  timezone: string;\n  locale: string;\n}\n\n/** Any value that can be coerced into a Date. */\nexport type DateInput = Date | string | number;\n\nexport const DATE_TIME_PRESETS: DateTimePreset[] = [\n  {\n    id: 'us',\n    label: 'US (MM/DD/YYYY 12h)',\n    dateFormat: 'MM/dd/yyyy',\n    timeFormat: '12h',\n    primeNgDateFormat: 'mm/dd/yy',\n    intlOptions: { year: 'numeric', month: '2-digit', day: '2-digit', hour: 'numeric', minute: '2-digit', hour12: true },\n    example: '04/30/2026 2:15 PM',\n  },\n  {\n    id: 'us-24',\n    label: 'US (MM/DD/YYYY 24h)',\n    dateFormat: 'MM/dd/yyyy',\n    timeFormat: '24h',\n    primeNgDateFormat: 'mm/dd/yy',\n    intlOptions: { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false },\n    example: '04/30/2026 14:15',\n  },\n  {\n    id: 'eu',\n    label: 'EU (DD/MM/YYYY 24h)',\n    dateFormat: 'dd/MM/yyyy',\n    timeFormat: '24h',\n    primeNgDateFormat: 'dd/mm/yy',\n    intlOptions: { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false },\n    example: '30/04/2026 14:15',\n  },\n  {\n    id: 'eu-12',\n    label: 'EU (DD/MM/YYYY 12h)',\n    dateFormat: 'dd/MM/yyyy',\n    timeFormat: '12h',\n    primeNgDateFormat: 'dd/mm/yy',\n    intlOptions: { year: 'numeric', month: '2-digit', day: '2-digit', hour: 'numeric', minute: '2-digit', hour12: true },\n    example: '30/04/2026 2:15 PM',\n  },\n  {\n    id: 'iso',\n    label: 'ISO 8601 (YYYY-MM-DD 24h)',\n    dateFormat: 'yyyy-MM-dd',\n    timeFormat: '24h',\n    primeNgDateFormat: 'yy-mm-dd',\n    intlOptions: { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false },\n    example: '2026-04-30 14:15',\n  },\n  {\n    id: 'short-us',\n    label: 'Short US (M/D/YY 12h)',\n    dateFormat: 'M/d/yy',\n    timeFormat: '12h',\n    primeNgDateFormat: 'm/d/y',\n    intlOptions: { year: '2-digit', month: 'numeric', day: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true },\n    example: '4/30/26 2:15 PM',\n  },\n  {\n    id: 'long',\n    label: 'Long (Apr 30, 2026 2:15 PM)',\n    dateFormat: 'MMM dd, yyyy',\n    timeFormat: '12h',\n    primeNgDateFormat: 'M dd, yy',\n    intlOptions: { year: 'numeric', month: 'short', day: '2-digit', hour: 'numeric', minute: '2-digit', hour12: true },\n    example: 'Apr 30, 2026 2:15 PM',\n  },\n];\n\nconst DEFAULT_CONFIG: DateTimeConfig = {\n  presetId: 'us',\n  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n  locale: navigator?.language ?? 'en-US',\n};\n\n@Injectable({ providedIn: 'root' })\nexport class DateTimeConfigService {\n  private readonly _config = signal<DateTimeConfig>(DEFAULT_CONFIG);\n\n  /** Current full config */\n  readonly config = this._config.asReadonly();\n\n  /** Active preset object */\n  readonly preset = computed(() => {\n    const id = this._config().presetId;\n    return DATE_TIME_PRESETS.find(p => p.id === id) ?? DATE_TIME_PRESETS[0];\n  });\n\n  /** PrimeNG datepicker format string — bind directly to [dateFormat] */\n  readonly primeNgDateFormat = computed(() => this.preset().primeNgDateFormat);\n\n  /** Whether to show time in pickers — bind to [showTime] */\n  readonly showTime = computed(() => true);\n\n  /** Whether 12h format */\n  readonly is12Hour = computed(() => this.preset().timeFormat === '12h');\n\n  /** Intl.DateTimeFormat formatter for display rendering */\n  readonly formatter = computed(() => {\n    const cfg = this._config();\n    const preset = this.preset();\n    return new Intl.DateTimeFormat(cfg.locale, {\n      ...preset.intlOptions,\n      timeZone: cfg.timezone,\n    });\n  });\n\n  /** Date-only formatter (no time component) */\n  readonly dateOnlyFormatter = computed(() => {\n    const cfg = this._config();\n    const preset = this.preset();\n    const { hour, minute, second, hour12, ...dateOnly } = preset.intlOptions;\n    return new Intl.DateTimeFormat(cfg.locale, {\n      ...dateOnly,\n      timeZone: cfg.timezone,\n    });\n  });\n\n  /** Time-only formatter */\n  readonly timeOnlyFormatter = computed(() => {\n    const cfg = this._config();\n    const preset = this.preset();\n    return new Intl.DateTimeFormat(cfg.locale, {\n      hour: preset.intlOptions.hour ?? 'numeric',\n      minute: preset.intlOptions.minute ?? '2-digit',\n      hour12: preset.timeFormat === '12h',\n      timeZone: cfg.timezone,\n    });\n  });\n\n  /** Current timezone */\n  readonly timezone = computed(() => this._config().timezone);\n\n  /** All available presets */\n  readonly presets = DATE_TIME_PRESETS;\n\n  private readonly localStorage = inject(LocalStorageService, { optional: true });\n\n  constructor() {\n    this._loadFromStorage();\n  }\n\n  /**\n   * Format a date using the user's preferred format.\n   * This is the primary method for rendering dates consistently.\n   */\n  formatDateTime(date: DateInput): string {\n    const d = date instanceof Date ? date : new Date(date);\n    if (Number.isNaN(d.getTime())) return '—';\n    return this.formatter().format(d);\n  }\n\n  /** Format date only (no time) */\n  formatDate(date: DateInput): string {\n    const d = date instanceof Date ? date : new Date(date);\n    if (Number.isNaN(d.getTime())) return '—';\n    return this.dateOnlyFormatter().format(d);\n  }\n\n  /** Format time only (no date) */\n  formatTime(date: DateInput): string {\n    const d = date instanceof Date ? date : new Date(date);\n    if (Number.isNaN(d.getTime())) return '—';\n    return this.timeOnlyFormatter().format(d);\n  }\n\n  /** Update the active preset */\n  setPreset(presetId: string): void {\n    const exists = DATE_TIME_PRESETS.some(p => p.id === presetId);\n    if (!exists) return;\n    this._config.update(cfg => ({ ...cfg, presetId }));\n    this._saveToStorage();\n  }\n\n  /** Update timezone */\n  setTimezone(timezone: string): void {\n    this._config.update(cfg => ({ ...cfg, timezone }));\n    this._saveToStorage();\n  }\n\n  /** Update locale */\n  setLocale(locale: string): void {\n    this._config.update(cfg => ({ ...cfg, locale }));\n    this._saveToStorage();\n  }\n\n  /** Reset to defaults */\n  reset(): void {\n    this._config.set({ ...DEFAULT_CONFIG });\n    this.localStorage?.remove(DATETIME_CONFIG_KEY);\n  }\n\n  private _loadFromStorage(): void {\n    try {\n      const saved = this.localStorage?.get(DATETIME_CONFIG_KEY);\n      if (saved && typeof saved === 'object' && saved.presetId) {\n        this._config.set({ ...DEFAULT_CONFIG, ...saved });\n      }\n    } catch {\n      // Ignore corrupt storage\n    }\n  }\n\n  private _saveToStorage(): void {\n    this.localStorage?.set(DATETIME_CONFIG_KEY, this._config());\n  }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { DateTimeConfigService, DateInput } from '../services/datetime-config.service';\n\n/**\n * Formats a date/time value using the user's global date-time preferences.\n *\n * Usage:\n *   {{ timestamp | appDateTime }}           → \"04/30/2026 2:15 PM\"  (full)\n *   {{ timestamp | appDateTime:'date' }}    → \"04/30/2026\"          (date only)\n *   {{ timestamp | appDateTime:'time' }}    → \"2:15 PM\"             (time only)\n *\n * Accepts Date objects, ISO strings, or epoch timestamps.\n * Returns '—' for null/undefined/invalid inputs.\n */\n@Pipe({\n  name: 'appDateTime',\n  standalone: true,\n})\nexport class AppDateTimePipe implements PipeTransform {\n  private readonly dtConfig = inject(DateTimeConfigService);\n\n  transform(\n    value: DateInput | null | undefined,\n    mode: 'full' | 'date' | 'time' = 'full'\n  ): string {\n    if (value === null || value === undefined) return '—';\n\n    switch (mode) {\n      case 'date':\n        return this.dtConfig.formatDate(value);\n      case 'time':\n        return this.dtConfig.formatTime(value);\n      default:\n        return this.dtConfig.formatDateTime(value);\n    }\n  }\n}\n","import { WindowService } from '../../utilities/services/window.service';\nimport { LocalStorageService } from '../../utilities/services/local-storage.service';\nimport { Injectable } from '@angular/core';\n\nexport const USER_LOCALE_KEY = 'USER_LOCALE';\n\n@Injectable()\nexport class LocaleService {\n\n  public dateTimeFormat: Intl.DateTimeFormat;\n\n  public relativeTimeFormat: Intl.RelativeTimeFormat;\n\n  public constructor(private localStorage: LocalStorageService, private windowService: WindowService) {\n    this.dateTimeFormat = new Intl.DateTimeFormat(this.getLocale());\n    this.relativeTimeFormat = new Intl.RelativeTimeFormat(this.getLocale());\n  }\n\n  public getLocale(): string {\n    return this.localStorage.get(USER_LOCALE_KEY) ?? this.windowService.getWindowReference().navigator.language;\n  }\n\n  public setLocale(locale: string): void {\n    this.localStorage.set(USER_LOCALE_KEY, locale);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport {\n  LocaleService,\n} from './services';\n\nexport const SERVICES = [\n  LocaleService,\n];\n\n// Directives\nexport const DIRECTIVES = [];\n\n// Components\nexport const COMPONENTS = [];\n\n@NgModule({\n  imports: [\n    CommonModule,\n  ],\n  providers: SERVICES,\n  declarations: [COMPONENTS, DIRECTIVES],\n  exports: [COMPONENTS, DIRECTIVES],\n})\nexport class LocalizationModule {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\n\nexport interface ChartPaletteDefinition {\n  id: string;\n  name: string;\n  colors: string[];\n  heatmapRamp?: string[];\n}\n\nexport const CHART_PALETTES: ChartPaletteDefinition[] = [\n  {\n    id: 'stellar',\n    name: 'Stellar',\n    colors: [\n      '#1d4ed8', '#2563eb', '#3b82f6', '#4e92f7', '#60a5fa',\n      '#79b5fc', '#93c5fd', '#a9d3fe', '#bfdbfe', '#dbeafe',\n    ],\n    heatmapRamp: ['#dbeafe', '#93c5fd', '#60a5fa', '#3b82f6', '#1d4ed8'],\n  },\n  {\n    id: 'spectrum',\n    name: 'Spectrum',\n    colors: [\n      '#6366f1', '#8b5cf6', '#ec4899', '#f43f5e', '#f97316',\n      '#eab308', '#22c55e', '#14b8a6', '#06b6d4', '#3b82f6',\n    ],\n    heatmapRamp: ['#ede9fe', '#a78bfa', '#8b5cf6', '#7c3aed', '#5b21b6'],\n  },\n  {\n    id: 'ocean',\n    name: 'Ocean',\n    colors: [\n      '#0e7490', '#0891b2', '#06b6d4', '#22d3ee', '#67e8f9',\n      '#155e75', '#164e63', '#0d9488', '#14b8a6', '#2dd4bf',\n    ],\n    heatmapRamp: ['#cffafe', '#67e8f9', '#22d3ee', '#06b6d4', '#0e7490'],\n  },\n  {\n    id: 'emerald',\n    name: 'Emerald',\n    colors: [\n      '#047857', '#059669', '#10b981', '#34d399', '#6ee7b7',\n      '#065f46', '#064e3b', '#0d9488', '#14b8a6', '#2dd4bf',\n    ],\n    heatmapRamp: ['#d1fae5', '#6ee7b7', '#34d399', '#10b981', '#047857'],\n  },\n  {\n    id: 'sunset',\n    name: 'Sunset',\n    colors: [\n      '#9333ea', '#a855f7', '#d946ef', '#ec4899', '#f43f5e',\n      '#fb7185', '#f97316', '#fb923c', '#fbbf24', '#facc15',\n    ],\n    heatmapRamp: ['#fae8ff', '#d946ef', '#c026d3', '#a21caf', '#86198f'],\n  },\n  {\n    id: 'neutral',\n    name: 'Neutral',\n    colors: [\n      '#334155', '#475569', '#64748b', '#94a3b8', '#cbd5e1',\n      '#1e293b', '#0f172a', '#6b7280', '#9ca3af', '#d1d5db',\n    ],\n    heatmapRamp: ['#f1f5f9', '#cbd5e1', '#94a3b8', '#64748b', '#334155'],\n  },\n];\n\n@Component({\n  selector: 'ui-chart-palette-picker',\n  standalone: true,\n  imports: [CommonModule, DialogModule, ButtonModule],\n  template: `\n    <p-dialog\n      header=\"Chart Colors\"\n      [visible]=\"visible()\"\n      [modal]=\"true\"\n      [draggable]=\"false\"\n      [resizable]=\"false\"\n      [style]=\"{ width: '480px' }\"\n      [closable]=\"true\"\n      (visibleChange)=\"onVisibleChange($event)\">\n\n      <p class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400 tw-mb-5\">\n        Choose a color palette for all charts on this dashboard.\n      </p>\n\n      <div class=\"tw-grid tw-grid-cols-2 tw-gap-3\">\n        @for (palette of palettes; track palette.id) {\n          <button\n            type=\"button\"\n            class=\"tw-rounded-xl tw-p-4 tw-text-left tw-transition-all tw-duration-150\n                   tw-border-2 tw-cursor-pointer\n                   hover:tw-scale-[1.02] hover:tw-shadow-lg\n                   focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-primary/50 focus:tw-ring-offset-2\n                   dark:focus:tw-ring-offset-surface-900\"\n            [class.tw-border-primary]=\"selectedId() === palette.id\"\n            [class.tw-bg-primary-50]=\"selectedId() === palette.id\"\n            [class.dark:tw-bg-primary-950]=\"selectedId() === palette.id\"\n            [class.tw-border-surface-200]=\"selectedId() !== palette.id\"\n            [class.dark:tw-border-surface-700]=\"selectedId() !== palette.id\"\n            [class.tw-bg-surface-50]=\"selectedId() !== palette.id\"\n            [class.dark:tw-bg-surface-800]=\"selectedId() !== palette.id\"\n            (click)=\"onSelect(palette.id)\">\n\n            <!-- Swatch row -->\n            <div class=\"tw-flex tw-gap-1.5 tw-mb-3\">\n              @for (color of palette.colors.slice(0, 6); track $index) {\n                <div\n                  class=\"tw-w-6 tw-h-6 tw-rounded-full tw-ring-1 tw-ring-black/10 dark:tw-ring-white/10\"\n                  [style.background-color]=\"color\">\n                </div>\n              }\n            </div>\n\n            <!-- Name + check -->\n            <div class=\"tw-flex tw-items-center tw-gap-2\">\n              <span class=\"tw-text-sm tw-font-medium tw-text-surface-800 dark:tw-text-surface-100\">\n                {{ palette.name }}\n              </span>\n              @if (palette.id === 'stellar') {\n                <span class=\"tw-text-[10px] tw-text-surface-400 dark:tw-text-surface-500 tw-font-normal\">\n                  default\n                </span>\n              }\n              @if (selectedId() === palette.id) {\n                <i class=\"pi pi-check tw-text-primary tw-text-xs tw-ml-auto\"></i>\n              }\n            </div>\n          </button>\n        }\n      </div>\n\n      <ng-template pTemplate=\"footer\">\n        <div class=\"tw-flex tw-justify-end tw-gap-2\">\n          <p-button\n            label=\"Cancel\"\n            severity=\"secondary\"\n            [text]=\"true\"\n            (onClick)=\"onCancel()\" />\n          <p-button\n            label=\"Apply\"\n            (onClick)=\"onApply()\" />\n        </div>\n      </ng-template>\n    </p-dialog>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartPalettePickerComponent {\n  readonly activePaletteId = input<string>('stellar');\n  readonly visible = input<boolean>(false);\n\n  readonly visibleChange = output<boolean>();\n  readonly paletteChange = output<ChartPaletteDefinition>();\n\n  protected readonly palettes = CHART_PALETTES;\n  protected readonly selectedId = signal('stellar');\n\n  constructor() {\n    // Sync internal selection with the active palette when dialog opens\n  }\n\n  ngOnChanges(): void {\n    if (this.visible()) {\n      this.selectedId.set(this.activePaletteId());\n    }\n  }\n\n  protected onSelect(id: string): void {\n    this.selectedId.set(id);\n  }\n\n  protected onApply(): void {\n    const palette = this.palettes.find(p => p.id === this.selectedId());\n    if (palette) {\n      this.paletteChange.emit(palette);\n    }\n    this.visibleChange.emit(false);\n  }\n\n  protected onCancel(): void {\n    this.selectedId.set(this.activePaletteId());\n    this.visibleChange.emit(false);\n  }\n\n  protected onVisibleChange(visible: boolean): void {\n    if (!visible) {\n      this.selectedId.set(this.activePaletteId());\n    }\n    this.visibleChange.emit(visible);\n  }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type CanvasBackgroundStyle = 'dark' | 'light' | 'transparent';\n\n/**\n * Dashboard canvas - container for dashboard widgets with proper styling\n * Provides the workspace area with appropriate background and padding\n */\n@Component({\n  selector: 'ui-dashboard-canvas',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div\n      class=\"tw-h-full tw-w-full tw-rounded-2xl tw-overflow-auto tw-transition-colors\"\n      [ngClass]=\"{\n        'tw-bg-canvas': backgroundStyle === 'dark',\n        'tw-bg-surface-25 dark:tw-bg-surface-900': backgroundStyle === 'light',\n        'tw-bg-transparent': backgroundStyle === 'transparent'\n      }\"\n      [style.padding]=\"padding\">\n\n      <!-- Canvas Content -->\n      <div class=\"tw-min-h-full\">\n        <ng-content></ng-content>\n      </div>\n\n      <!-- Empty State -->\n      <div\n        *ngIf=\"showEmptyState\"\n        class=\"tw-h-full tw-min-h-[400px] tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-4 tw-p-8\">\n        <div class=\"tw-w-16 tw-h-16 tw-rounded-full tw-bg-surface-200 dark:tw-bg-surface-800\n                    tw-flex tw-items-center tw-justify-center\">\n          <i class=\"pi pi-chart-bar tw-text-3xl tw-text-surface-400 dark:tw-text-surface-600\"></i>\n        </div>\n        <div class=\"tw-text-center tw-max-w-sm\">\n          <h3 class=\"tw-text-lg tw-font-semibold tw-text-surface-900 dark:tw-text-surface-50 tw-mb-2\">\n            {{ emptyTitle || 'No widgets yet' }}\n          </h3>\n          <p class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400\">\n            {{ emptyMessage || 'Start by adding widgets from the palette on the right.' }}\n          </p>\n        </div>\n        <button\n          *ngIf=\"showEmptyAction\"\n          (click)=\"emptyAction.emit()\"\n          class=\"tw-px-4 tw-py-2 tw-rounded-lg\n                 tw-bg-blue-500 hover:tw-bg-blue-600\n                 tw-text-white tw-font-medium tw-text-sm\n                 tw-transition-colors tw-duration-200\n                 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\n                 dark:focus:tw-ring-offset-surface-950\">\n          <i class=\"pi pi-plus tw-mr-2\"></i>\n          {{ emptyActionLabel || 'Add Widget' }}\n        </button>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardCanvasComponent {\n  @Input() backgroundStyle: CanvasBackgroundStyle = 'dark';\n  @Input() padding = '1rem';\n  @Input() showEmptyState = false;\n  @Input() emptyTitle?: string;\n  @Input() emptyMessage?: string;\n  @Input() showEmptyAction = false;\n  @Input() emptyActionLabel?: string;\n\n  @Output() emptyAction = new EventEmitter<void>();\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, ElementRef, OnInit, OnChanges, OnDestroy, signal, NgZone, TemplateRef, computed, Signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { Menu, MenuModule } from 'primeng/menu';\nimport { MenuItem } from 'primeng/api';\n\nexport type WidgetViewMode = 'view' | 'edit';\nexport type WidgetDataState = 'ready' | 'loading' | 'empty' | 'error';\n\n/**\n * Base dashboard widget container with crispy styling\n * Provides consistent card styling, header, and action buttons\n */\n@Component({\n  selector: 'ui-dashboard-widget-base',\n  standalone: true,\n  imports: [CommonModule, ButtonModule, MenuModule],\n  template: `\n    <div\n      class=\"tw-h-full tw-flex tw-flex-col tw-rounded-2xl tw-overflow-hidden\n             tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800]\n             tw-border tw-border-surface-200/50 dark:tw-border-surface-800/50\n             tw-backdrop-blur-lg\n             hover:tw-border-surface-300/60 dark:hover:tw-border-surface-700/60\n             tw-transition-all tw-duration-300 tw-ease-out\n             tw-group\"\n      [class.hover:tw-shadow-lg]=\"viewMode === 'view'\"\n      [class.hover:tw-scale-[1.01]]=\"viewMode === 'view'\"\n    >\n      <!-- Drag Handle (Edit Mode Only) -->\n      <ng-container *ngIf=\"viewMode === 'edit' && dragHandleTemplate\">\n        <ng-container *ngTemplateOutlet=\"dragHandleTemplate\"></ng-container>\n      </ng-container>\n\n      <!-- Widget Header (Minimal) -->\n      <div\n        class=\"tw-flex tw-items-start tw-justify-between\"\n        [class.tw-pt-2]=\"viewMode === 'edit' && dragHandleTemplate\"\n        [class.tw-pl-6]=\"showHeader\"\n        [class.tw-pr-2]=\"showHeader\"\n        [class.tw-pt-5]=\"showHeader\"\n        [class.tw-pb-1]=\"showHeader\"\n      >\n        <!-- Title Section -->\n        <div\n          class=\"tw-flex tw-flex-col tw-min-w-0 tw-flex-1 tw-gap-1\"\n          *ngIf=\"showHeader\"\n        >\n          <div class=\"tw-flex tw-items-center tw-gap-2 tw-min-w-0\">\n            <h3\n              class=\"!tw-text-base !tw-font-normal tw-text-surface-900 dark:tw-text-surface-50 tw-truncate tw-tracking-tight\"\n              [title]=\"title\"\n            >\n              {{ title }}\n            </h3>\n            <span\n              *ngIf=\"gsWidth() && gsHeight() && viewMode === 'edit'\"\n              class=\"tw-flex-shrink-0 tw-text-[10px] tw-font-medium tw-text-surface-400 dark:tw-text-surface-500\n                     tw-px-1.5 tw-py-0.5 tw-rounded tw-bg-surface-100 dark:tw-bg-surface-800/50\n                     tw-tabular-nums tw-tracking-wide\"\n            >\n              {{ gsWidth() }}×{{ gsHeight() }}\n            </span>\n          </div>\n          <span\n            *ngIf=\"subtitle\"\n            class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400 tw-truncate\"\n            [title]=\"subtitle\"\n          >\n            {{ subtitle }}\n          </span>\n        </div>\n\n        <!-- Header Extra: projected content from parent (e.g., Top N / metric dropdowns) -->\n        <ng-content select=\"[titleExtra]\"></ng-content>\n\n        <!-- Action Buttons (Edit Mode) - Fade in on hover -->\n        <div\n          *ngIf=\"viewMode === 'edit' && showActions\"\n          class=\"tw-flex tw-items-center tw-gap-0.5 tw-ml-3 tw-flex-shrink-0\n                 tw-opacity-0 group-hover:tw-opacity-100 tw-transition-opacity tw-duration-200\"\n          [class.tw-absolute]=\"!showHeader\"\n          [class.tw-right-2]=\"!showHeader\"\n          [class.tw-z-10]=\"!showHeader\"\n        >\n          <button\n            *ngIf=\"showConfigure\"\n            pButton\n            icon=\"pi pi-cog\"\n            [text]=\"true\"\n            [rounded]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            class=\"tw-w-7 tw-h-7 !tw-p-0\"\n            title=\"Configure\"\n            aria-label=\"Configure\"\n            (click)=\"configure.emit()\"\n          ></button>\n          <button\n            *ngIf=\"!showConfigure\"\n            pButton\n            icon=\"pi pi-eye\"\n            [text]=\"true\"\n            [rounded]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            class=\"tw-w-7 tw-h-7 !tw-p-0\"\n            title=\"View\"\n            aria-label=\"View\"\n            (click)=\"configure.emit()\"\n          ></button>\n          <button\n            pButton\n            icon=\"pi pi-ellipsis-v\"\n            [text]=\"true\"\n            [rounded]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            class=\"tw-w-7 tw-h-7 !tw-p-0\"\n            title=\"More options\"\n            aria-label=\"More options\"\n            (click)=\"optionsMenu.toggle($event)\"\n          ></button>\n        </div>\n\n        <!-- View Mode Actions - Fade in on hover -->\n        <div\n          *ngIf=\"\n            viewMode === 'view' && showHeader && extraViewMenuItems.length > 0\n          \"\n          class=\"tw-flex tw-items-center tw-gap-0.5 tw-ml-3 tw-flex-shrink-0\n                 tw-opacity-0 group-hover:tw-opacity-100 tw-transition-opacity tw-duration-200\"\n        >\n          <button\n            pButton\n            icon=\"pi pi-eye\"\n            [text]=\"true\"\n            [rounded]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            class=\"tw-w-7 tw-h-7 !tw-p-0\"\n            title=\"Drilldown\"\n            aria-label=\"Drilldown\"\n            (click)=\"drilldown.emit()\"\n          ></button>\n          <button\n            pButton\n            icon=\"pi pi-ellipsis-v\"\n            [text]=\"true\"\n            [rounded]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            class=\"tw-w-7 tw-h-7 !tw-p-0\"\n            title=\"More options\"\n            aria-label=\"More options\"\n            data-test-id=\"WidgetBase_view_menu_btn\"\n            (click)=\"viewOptionsMenu.toggle($event)\"\n          ></button>\n        </div>\n      </div>\n      <!-- Widget Content Area -->\n      <div\n        class=\"tw-flex-1 tw-px-6 tw-pb-2 tw-pt-2 tw-overflow-hidden tw-relative\"\n      >\n        <!-- Loading State -->\n        <div\n          *ngIf=\"dataState === 'loading'\"\n          class=\"tw-h-full tw-flex tw-flex-col tw-justify-center tw-gap-3 tw-px-2\"\n        >\n          <div\n            class=\"tw-h-3 tw-rounded-full tw-bg-surface-200 dark:tw-bg-surface-800 tw-animate-pulse tw-w-3/4\"\n          ></div>\n          <div\n            class=\"tw-h-3 tw-rounded-full tw-bg-surface-200 dark:tw-bg-surface-800 tw-animate-pulse tw-w-1/2\"\n            style=\"animation-delay: 75ms\"\n          ></div>\n          <div\n            class=\"tw-h-3 tw-rounded-full tw-bg-surface-200 dark:tw-bg-surface-800 tw-animate-pulse tw-w-5/6\"\n            style=\"animation-delay: 150ms\"\n          ></div>\n          <div\n            class=\"tw-h-3 tw-rounded-full tw-bg-surface-200 dark:tw-bg-surface-800 tw-animate-pulse tw-w-2/5\"\n            style=\"animation-delay: 225ms\"\n          ></div>\n        </div>\n\n        <!-- Empty State -->\n        <div\n          *ngIf=\"dataState === 'empty'\"\n          class=\"tw-h-full tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-2\"\n        >\n          <i\n            class=\"pi pi-inbox tw-text-3xl tw-text-surface-300 dark:tw-text-surface-700\"\n          ></i>\n          <span class=\"tw-text-sm tw-text-surface-400 dark:tw-text-surface-500\">\n            {{ emptyMessage || 'No data available' }}\n          </span>\n        </div>\n\n        <!-- Error State -->\n        <div\n          *ngIf=\"dataState === 'error'\"\n          class=\"tw-h-full tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-2.5\"\n        >\n          <div\n            class=\"tw-w-10 tw-h-10 tw-rounded-full\n                      tw-bg-amber-50 dark:tw-bg-amber-950/30\n                      tw-flex tw-items-center tw-justify-center\"\n          >\n            <i\n              class=\"pi pi-exclamation-triangle tw-text-lg tw-text-amber-500\"\n            ></i>\n          </div>\n          <span class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400\">\n            {{ errorMessage || 'Unable to load data' }}\n          </span>\n          <button\n            pButton\n            label=\"Retry\"\n            icon=\"pi pi-refresh\"\n            [text]=\"true\"\n            size=\"small\"\n            class=\"tw-mt-0.5\"\n            aria-label=\"Retry\"\n            (click)=\"retry.emit()\"\n          ></button>\n        </div>\n\n        <!-- Ready State (normal content) -->\n        <ng-container *ngIf=\"dataState === 'ready'\">\n          <ng-content></ng-content>\n        </ng-container>\n      </div>\n\n      <!-- Widget Footer (Optional) -->\n      <div\n        *ngIf=\"showFooter\"\n        class=\"tw-px-6 tw-py-3 tw-border-t tw-border-surface-100 dark:tw-border-surface-800/50\"\n      >\n        <ng-content select=\"[footer]\"></ng-content>\n      </div>\n    </div>\n\n    <!-- Edit Mode Popover Menu -->\n    <p-menu\n      #optionsMenu\n      [model]=\"menuItems()\"\n      [popup]=\"true\"\n      appendTo=\"body\"\n    ></p-menu>\n\n    <!-- View Mode Popover Menu -->\n    <p-menu\n      #viewOptionsMenu\n      [model]=\"_flattenedViewMenuItems\"\n      [popup]=\"true\"\n      appendTo=\"body\"\n    ></p-menu>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardWidgetBaseComponent\n  implements OnInit, OnChanges, OnDestroy\n{\n  @Input({ required: true }) title!: string;\n  @Input() subtitle?: string;\n  @Input() viewMode: WidgetViewMode = 'view';\n  @Input() dataState: WidgetDataState = 'ready';\n  @Input() errorMessage?: string;\n  @Input() emptyMessage?: string;\n  @Input() showActions = true;\n  @Input() showConfigure = true;\n  @Input() showFooter = false;\n  @Input() showHeader = true;\n  @Input() showRename = true;\n  @Input() showDuplicate = true;\n  @Input() showDelete = true;\n\n  @Input() extraViewMenuItems: MenuItem[] = [];\n  @Input() statusIcon?: string;\n  @Input() dragHandleTemplate?: TemplateRef<any>;\n\n  @Output() configure = new EventEmitter<void>();\n  @Output() drilldown = new EventEmitter<void>();\n  @Output() retry = new EventEmitter<void>();\n  @Output() rename = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n\n  @ViewChild('optionsMenu') optionsMenu!: Menu;\n  @ViewChild('viewOptionsMenu') viewOptionsMenu!: Menu;\n\n  /** Real-time gridstack unit dimensions (w × h badge) */\n  gsWidth = signal<string | null>(null);\n  gsHeight = signal<string | null>(null);\n\n  readonly menuItems: Signal<MenuItem[]> = computed(() => {\n    const items: MenuItem[] = [];\n    if (this.showRename) {\n      items.push({\n        label: 'Rename',\n        icon: 'pi pi-pencil',\n        command: () => this.rename.emit(),\n      });\n    }\n\n    if (this.showDuplicate) {\n      items.push({\n        label: 'Duplicate',\n        icon: 'pi pi-copy',\n        command: () => this.duplicate.emit(),\n      });\n    }\n\n    if (this.showDelete) {\n      if (items.length > 0) {\n        items.push({ separator: true });\n      }\n      items.push({\n        label: 'Delete',\n        icon: 'pi pi-trash',\n        command: () => this.delete.emit(),\n        styleClass: 'tw-text-red-500',\n      });\n    }\n\n    return items;\n  });\n\n  /** Call this to force menu model update when inputs change */\n  ngOnChanges(): void {\n    this._flattenedViewMenuItems = this._flattenMenuItems(\n      this.extraViewMenuItems\n    );\n  }\n\n  /** Flattened view menu items — stable reference, rebuilt only on input change */\n  _flattenedViewMenuItems: MenuItem[] = [];\n\n  /** Flatten nested items since p-menu doesn't support submenus */\n  private _flattenMenuItems(items: MenuItem[]): MenuItem[] {\n    const result: MenuItem[] = [];\n    for (let i = 0; i < items.length; i++) {\n      const item = items[i];\n      if (i > 0 || result.length > 0) {\n        result.push({ separator: true });\n      }\n      if (item.items && item.items.length > 0) {\n        result.push({\n          label: item.label,\n          disabled: true,\n          styleClass: 'tw-opacity-70 tw-text-xs',\n        });\n        for (const child of item.items) {\n          if (!('separator' in child && child.separator)) {\n            result.push(child);\n          }\n        }\n      } else {\n        result.push(item);\n      }\n    }\n    return result;\n  }\n\n  private observer: MutationObserver | null = null;\n\n  constructor(\n    private readonly el: ElementRef<HTMLElement>,\n    private readonly zone: NgZone\n  ) {}\n\n  ngOnInit(): void {\n    const gsItem = this.el.nativeElement.closest(\n      '.grid-stack-item'\n    ) as HTMLElement | null;\n    if (!gsItem) return;\n\n    this.readSize(gsItem);\n\n    this.zone.runOutsideAngular(() => {\n      this.observer = new MutationObserver(() => {\n        this.zone.run(() => this.readSize(gsItem));\n      });\n      this.observer.observe(gsItem, {\n        attributes: true,\n        attributeFilter: ['gs-w', 'gs-h'],\n      });\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.observer?.disconnect();\n  }\n\n  private readSize(el: HTMLElement): void {\n    this.gsWidth.set(el.getAttribute('gs-w'));\n    this.gsHeight.set(el.getAttribute('gs-h'));\n  }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport interface WidgetPaletteItem {\n  id: string;\n  label: string;\n  description?: string;\n  icon: string; // PrimeNG icon class (e.g., 'pi-chart-bar')\n  category?: string;\n  tags?: string[];\n}\n\n/**\n * Dashboard widget palette - sidebar for adding widgets to canvas\n * Features icon-based cards with drag-and-drop support\n */\n@Component({\n  selector: 'ui-dashboard-widget-palette',\n  standalone: true,\n  imports: [CommonModule, ButtonModule, TooltipModule],\n  template: `\n    <div class=\"tw-h-full tw-flex tw-flex-col tw-bg-app\n                tw-rounded-xl tw-border tw-border-surface-200 dark:tw-border-surface-800\n                tw-overflow-hidden\">\n\n      <!-- Header -->\n      <div class=\"tw-px-4 tw-py-4 tw-border-b tw-border-surface-200 dark:tw-border-surface-800\">\n        <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-1\">\n          <h3 class=\"!tw-text-base !tw-font-normal tw-text-surface-900 dark:tw-text-surface-50\">\n            Add widgets\n          </h3>\n          <p-button\n            icon=\"pi pi-cog\"\n            [rounded]=\"true\"\n            [text]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            pTooltip=\"Chart colors\"\n            tooltipPosition=\"left\"\n            (onClick)=\"openSettings.emit()\">\n          </p-button>\n        </div>\n        <p class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400\">\n          Drag onto canvas or click to add\n        </p>\n      </div>\n\n      <!-- Widget List -->\n      <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-3\">\n        <div class=\"tw-space-y-2\">\n          <button\n            *ngFor=\"let item of items; trackBy: trackByItemId\"\n            type=\"button\"\n            [draggable]=\"true\"\n            [attr.data-widget-id]=\"item.id\"\n            [attr.data-widget-kind]=\"item.id\"\n            (dragstart)=\"onDragStart($event, item)\"\n            (dragend)=\"onDragEnd($event)\"\n            (click)=\"addWidget.emit(item)\"\n            class=\"grid-stack-item tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-3\n                   tw-rounded-lg tw-text-left tw-transition-all tw-duration-200\n                   tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800]\n                   tw-border tw-border-surface-200 dark:tw-border-surface-800\n                   hover:tw-border-blue-400 hover:tw-shadow-md hover:tw-scale-[1.02]\n                   active:tw-scale-[0.98] active:tw-shadow-sm\n                   tw-cursor-grab active:tw-cursor-grabbing\n                   focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\n                   dark:focus:tw-ring-offset-surface-950\">\n\n            <!-- Icon Badge -->\n            <div class=\"tw-w-10 tw-h-10 tw-rounded-lg tw-flex-shrink-0\n                        tw-bg-blue-500/10 dark:tw-bg-blue-500/20\n                        tw-flex tw-items-center tw-justify-center\n                        tw-transition-all tw-duration-200\n                        group-hover:tw-bg-blue-500/20\">\n              <i [class]=\"'pi ' + item.icon + ' tw-text-blue-600 dark:tw-text-blue-400 tw-text-lg'\"></i>\n            </div>\n\n            <!-- Text Content -->\n            <div class=\"tw-flex-1 tw-min-w-0\">\n              <div class=\"tw-text-sm tw-font-medium tw-text-surface-900 dark:tw-text-surface-50 tw-truncate\">\n                {{ item.label }}\n              </div>\n              <div\n                *ngIf=\"item.description\"\n                class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400 tw-truncate\">\n                {{ item.description }}\n              </div>\n            </div>\n\n            <!-- Drag Handle Indicator -->\n            <div class=\"tw-flex-shrink-0 tw-opacity-40 group-hover:tw-opacity-60\">\n              <i class=\"pi pi-bars tw-text-surface-400 dark:tw-text-surface-500 tw-text-sm\"></i>\n            </div>\n          </button>\n        </div>\n      </div>\n\n      <!-- Footer (Optional) -->\n      <div\n        *ngIf=\"showFooter\"\n        class=\"tw-px-4 tw-py-3 tw-border-t tw-border-surface-200 dark:tw-border-surface-800\n               tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800]\">\n        <ng-content select=\"[footer]\"></ng-content>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardWidgetPaletteComponent {\n  @Input() items: WidgetPaletteItem[] = [];\n  @Input() showFooter = false;\n\n  @Output() addWidget = new EventEmitter<WidgetPaletteItem>();\n  @Output() openSettings = new EventEmitter<void>();\n  @Output() dragStart = new EventEmitter<{ event: DragEvent; item: WidgetPaletteItem }>();\n  @Output() dragEnd = new EventEmitter<DragEvent>();\n\n  protected trackByItemId(index: number, item: WidgetPaletteItem): string {\n    return item.id;\n  }\n\n  protected onDragStart(event: DragEvent, item: WidgetPaletteItem): void {\n    if (!event.dataTransfer) return;\n\n    // Set drag data\n    event.dataTransfer.effectAllowed = 'copy';\n    event.dataTransfer.setData('application/json', JSON.stringify(item));\n    event.dataTransfer.setData('text/plain', item.id);\n\n    // Add visual feedback\n    const target = event.currentTarget as HTMLElement;\n    target.classList.add('tw-opacity-50');\n\n    this.dragStart.emit({ event, item });\n  }\n\n  protected onDragEnd(event: DragEvent): void {\n    // Remove visual feedback\n    const target = event.currentTarget as HTMLElement;\n    target.classList.remove('tw-opacity-50');\n\n    this.dragEnd.emit(event);\n  }\n}\n","import type { EChartsOption } from 'echarts';\nimport type { WidgetConfig } from './models';\n\nexport interface ChartColorPalette {\n  colors: string[];\n  heatmapRamp?: string[];\n}\n\n/**\n * Chart Stylization Configuration\n * Customize these values to change the appearance of all charts\n */\nconst CHART_STYLE_CONFIG = {\n  // Color palettes — Security platform convention:\n  //   Cool tones (blue/teal/indigo/cyan) for general data\n  //   Warm tones (red/orange/yellow) ONLY for severity & alerts\n  colors: {\n    primary: '#3b82f6',\n    // Default data palette — monotone blue ramp (dark → light)\n    // Anchored at blue-700 (matches heatmap peak), stepping to blue-100\n    data: [\n      '#1d4ed8', // blue-700 (darkest — heatmap peak)\n      '#2563eb', // blue-600\n      '#3b82f6', // blue-500 (primary)\n      '#4e92f7', // blue-450\n      '#60a5fa', // blue-400\n      '#79b5fc', // blue-350\n      '#93c5fd', // blue-300\n      '#a9d3fe', // blue-250\n      '#bfdbfe', // blue-200\n      '#dbeafe', // blue-100 (lightest — still clearly blue)\n    ],\n    // Severity palette — ONLY for alert/threat data\n    severity: {\n      critical: '#ef4444', // red-500\n      high: '#f97316',     // orange-500\n      medium: '#f59e0b',   // amber-500\n      low: '#3b82f6',      // blue-500\n      info: '#94a3b8',     // slate-400\n    },\n    // Heatmap gradient (low → high intensity) — cool blue ramp\n    heatmapRamp: ['#dbeafe', '#93c5fd', '#60a5fa', '#3b82f6', '#1d4ed8'],\n  },\n\n  // Typography\n  typography: {\n    fontSize: {\n      title: 32,\n      subtitle: 13,\n      label: 13,\n      axis: 11,\n      tooltip: 12,\n    },\n    fontWeight: {\n      title: 400,\n      subtitle: 400,\n      label: 400,\n      axis: 400,\n      tooltip: 400,\n    },\n  },\n\n  // Donut chart specific\n  donut: {\n    // Ring dimensions — percentage of min(containerW, containerH) / 2\n    // At 540×304 (design size): min=304, half=152 → 75.7%=115px, 85.5%=130px\n    radius: ['75.7%', '85.5%'],\n    padAngle: 2,\n    borderRadius: 1,\n    borderWidth: 0,\n\n    // Layout: percentage-based lockup in a max-540px, aspect-ratio container\n    // At 540×304: 25.6%=138px, 48%=146px, 57%=308px — matches the pixel design\n    centerPosition: ['25.6%', '48%'],\n    legendPosition: '57%',\n\n    // Legend spacing\n    legendItemGap: 12,\n    legendIconTextGap: 8,\n\n    // Hover effects\n    emphasis: {\n      scaleSize: 8,\n      shadowBlur: 10,\n    },\n\n    // Grid constraints (for documentation/validation)\n    grid: {\n      minW: 4,      // Minimum 4 columns (12-col grid)\n      minH: 5,      // Minimum height units\n      optimalW: 6,  // Optimal width\n      maxW: 8,      // Maximum to prevent bloat\n      maxH: 8,      // Maximum height\n    },\n  },\n\n  // Line/Area chart specific\n  line: {\n    lineWidth: 2.5,\n    symbolSize: 6,\n    areaOpacity: { start: 0.35, end: 0.05 },\n    // Grid constraints\n    grid: {\n      minW: 4,      // Minimum 4 columns\n      minH: 4.6,    // Minimum height units (standardized)\n      optimalW: 6,  // Optimal width\n    },\n  },\n\n  // Bar chart specific\n  bar: {\n    barWidth: '40%',\n    borderRadius: 2,\n    // Grid constraints\n    grid: {\n      minW: 4,      // Minimum 4 columns\n      minH: 4.6,    // Minimum height units (standardized)\n      optimalW: 6,  // Optimal width\n    },\n  },\n\n  // Counter widget specific\n  counter: {\n    // Grid constraints\n    grid: {\n      minW: 2,      // Minimum 2 columns\n      minH: 4.6,    // Minimum height units (standardized)\n      optimalW: 3,  // Optimal width\n      maxW: 4,      // Maximum width\n    },\n  },\n\n  // Heatmap widget specific\n  heatmap: {\n    // Grid constraints\n    grid: {\n      minW: 4,      // Minimum 4 columns\n      minH: 4.6,    // Minimum height units (standardized)\n      optimalW: 6,  // Optimal width\n    },\n  },\n\n  // Table widget specific\n  table: {\n    // Grid constraints\n    grid: {\n      minW: 4,      // Minimum 4 columns\n      minH: 4,      // Tables need more height for rows\n      optimalW: 6,  // Optimal width\n    },\n  },\n\n  // Common\n  animation: {\n    duration: 300,\n    easing: 'cubicOut',\n  },\n};\n\nconst DEFAULT_DATA_COLORS = CHART_STYLE_CONFIG.colors.data;\n\n// ── Sample datasets ──────────────────────────────────────────────────────\n// Each key can be referenced via widget.dataConfig.dataSource\n\nexport const SAMPLE_DATA: Record<string, Array<{ name: string; value: number }>> = {\n  // Default / generic\n  alertsBySource: [\n    { name: 'Crowdstrike', value: 9200 },\n    { name: 'Hostirea', value: 7100 },\n    { name: 'Azure AD', value: 4800 },\n    { name: 'Windows Agent', value: 1600 },\n    { name: 'GuardDuty', value: 3200 },\n    { name: 'Sentinel', value: 2800 },\n    { name: 'Palo Alto', value: 2400 },\n    { name: 'FortiGate', value: 1900 },\n    { name: 'SentinelOne', value: 1500 },\n    { name: 'Carbon Black', value: 1200 },\n  ],\n  alertsBySeverity: [\n    { name: 'Critical', value: 1250 },\n    { name: 'High', value: 4820 },\n    { name: 'Medium', value: 8430 },\n    { name: 'Low', value: 12100 },\n    { name: 'Info', value: 3900 },\n  ],\n  alertsByAssignee: [\n    { name: 'Unassigned', value: 19300 },\n    { name: 'John Smith', value: 3200 },\n    { name: 'Sarah Johnson', value: 2900 },\n    { name: 'Mike Chen', value: 2700 },\n    { name: 'Emily Davis', value: 2400 },\n  ],\n  trend: [\n    { name: '00:00', value: 320 },\n    { name: '04:00', value: 280 },\n    { name: '08:00', value: 420 },\n    { name: '12:00', value: 520 },\n    { name: '16:00', value: 610 },\n    { name: '20:00', value: 590 },\n    { name: '24:00', value: 640 },\n  ],\n\n  // ── Operational Dashboard datasets ──────────────────────────────────────\n\n  eventCauses: [\n    { name: 'credential_collection', value: 2180 },\n    { name: 'Endpoint Agent', value: 1640 },\n    { name: 'MaliciousFileOp', value: 1120 },\n    { name: 'AppMgmt', value: 860 },\n    { name: 'InfrastructureAttack', value: 620 },\n    { name: 'InterTrust_both', value: 440 },\n    { name: 'endpoint_health', value: 380 },\n    { name: 'custom_a_event', value: 310 },\n    { name: 'policy_violation', value: 220 },\n    { name: 'audit_log_event', value: 148 },\n  ],\n  eventOrigins: [\n    { name: 'credential_host', value: 2040 },\n    { name: 'windows_agent', value: 1680 },\n    { name: 'endpoint1', value: 1340 },\n    { name: 'office365', value: 920 },\n    { name: 'activity_service', value: 680 },\n    { name: 'okta_sso', value: 440 },\n    { name: 'gcp_audit', value: 360 },\n    { name: 'aws_cloudtrail', value: 260 },\n    { name: 'azure_sentinel', value: 180 },\n    { name: 'palo_networks', value: 108 },\n  ],\n  legacyCategories: [\n    { name: 'Intrusion', value: 2840 },\n    { name: 'Cyberattack', value: 1920 },\n    { name: 'Analytics', value: 1080 },\n    { name: 'Ransomware', value: 640 },\n    { name: 'Unknown', value: 352 },\n  ],\n  legacyTypes: [\n    { name: 'Actions is Performed', value: 1680 },\n    { name: 'EncryptionProcess', value: 1240 },\n    { name: 'Backdoor', value: 980 },\n    { name: 'Malware & Exploit', value: 720 },\n    { name: 'DirectTrans_Exfil', value: 540 },\n    { name: 'Delivery', value: 380 },\n    { name: 'Protention', value: 280 },\n  ],\n  alertTypes: [\n    { name: 'Queue Alert', value: 1640 },\n    { name: 'CrossProduct_XDR', value: 1280 },\n    { name: \"Analyst's Review\", value: 980 },\n    { name: 'AI Threat', value: 820 },\n    { name: 'CrossProduct XDR+', value: 680 },\n    { name: 'Indicator of Comp', value: 520 },\n    { name: 'Blacklist Incident', value: 440 },\n    { name: 'Event Triggered', value: 380 },\n    { name: 'GroupDefinition', value: 320 },\n    { name: 'NetworkFails', value: 280 },\n  ],\n  alertCriticality: [\n    { name: 'Critical', value: 1240 },\n    { name: 'High', value: 3480 },\n    { name: 'Major', value: 2160 },\n    { name: 'Notice', value: 1236 },\n  ],\n  lastModifiedBy: [\n    { name: 'admin', value: 3 },\n    { name: 'StellarCy', value: 2 },\n  ],\n  activitiesByUser: [\n    { name: 'admin', value: 3 },\n    { name: 'StellarCy', value: 2 },\n  ],\n  killChainStages: [\n    { name: 'Presence Persistent', value: 3240 },\n    { name: 'Initial Compromise', value: 2680 },\n    { name: 'Exploitation', value: 1440 },\n    { name: 'Exfiltration & Impact', value: 756 },\n  ],\n  tactics: [\n    { name: 'Internal XDR Info', value: 1860 },\n    { name: 'XDR Plus', value: 1440 },\n    { name: 'XDR Info', value: 1280 },\n    { name: 'PrivEsc', value: 980 },\n    { name: 'Internal XDR', value: 820 },\n    { name: 'Internal Credential', value: 640 },\n    { name: 'External Credential', value: 870 },\n  ],\n  techniques: [\n    { name: 'XDR Command and...', value: 2240 },\n    { name: 'Cerber Connection', value: 1880 },\n    { name: 'Application', value: 1440 },\n    { name: 'XDR Discovery', value: 1200 },\n    { name: 'Indicator of Threat', value: 949 },\n  ],\n  status: [\n    { name: 'New', value: 6420 },\n    { name: 'In Progress', value: 1695 },\n  ],\n};\n\n/** Max slices in print donuts before remaining merge into \"Other\" (report/PDF readability). */\nexport const PRINT_DONUT_MAX_SLICES = 7;\n\nconst PRINT_OTHER_SLICE = 'Other';\n\n/**\n * Humanize technical dimension strings for print (underscores, length cap with middle ellipsis).\n */\nexport function formatPrintLegendLabel(name: string, maxChars = 26): string {\n  if (name === PRINT_OTHER_SLICE) return name;\n  const spaced = name.replace(/_/g, ' ').replace(/\\s+/g, ' ').trim();\n  if (!spaced) return name;\n  const words = spaced.split(/\\s+/);\n  const titled = words\n    .map(w => (w.length ? w.charAt(0).toUpperCase() + w.slice(1) : w))\n    .join(' ');\n  if (titled.length <= maxChars) return titled;\n  const inner = maxChars - 1;\n  const lead = Math.ceil(inner / 2);\n  const trail = Math.floor(inner / 2);\n  return `${titled.slice(0, lead)}…${titled.slice(titled.length - trail)}`;\n}\n\ntype PrintDonutRawDatum = { name: string; value: number };\n\nfunction buildPrintDonutSeriesData(\n  raw: PrintDonutRawDatum[],\n  isSeverity: boolean,\n  severityColors: Record<string, string>,\n  palette: string[],\n): Array<{ name: string; value: number; itemStyle: { color: string } }> {\n  const sorted = [...raw].sort((a, b) => b.value - a.value);\n  const head = sorted.slice(0, PRINT_DONUT_MAX_SLICES);\n  const tail = sorted.slice(PRINT_DONUT_MAX_SLICES);\n  const otherSum = tail.reduce((s, x) => s + x.value, 0);\n  const combined: PrintDonutRawDatum[] =\n    otherSum > 0 ? [...head, { name: PRINT_OTHER_SLICE, value: otherSum }] : [...head];\n  return combined.map((item, index) => {\n    const rawName = item.name;\n    const displayName = formatPrintLegendLabel(rawName, 26);\n    let color: string;\n    if (isSeverity) {\n      color =\n        severityColors[rawName] ??\n        (rawName === PRINT_OTHER_SLICE ? '#94a3b8' : palette[index % palette.length]);\n    } else {\n      color = rawName === PRINT_OTHER_SLICE ? '#94a3b8' : palette[index % palette.length];\n    }\n    return { name: displayName, value: item.value, itemStyle: { color } };\n  });\n}\n\n/**\n * Legend segment count after print top-N + Other aggregation (for report row-height tiers).\n */\nexport function getPrintDonutLegendSegmentCount(widget: WidgetConfig): number {\n  if (widget.kind !== 'donut') return 0;\n  const sourceKey = widget.dataConfig?.dataSource ?? 'alertsBySource';\n  const raw = SAMPLE_DATA[sourceKey] ?? SAMPLE_DATA['alertsBySource'];\n  const n = raw.length;\n  if (n <= PRINT_DONUT_MAX_SLICES) return n;\n  return PRINT_DONUT_MAX_SLICES + 1;\n}\n\nexport const MULTI_SERIES_TREND = {\n  xLabels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  series: [\n    { name: 'File Combined',     data: [120, 180, 160, 220, 280, 310, 260, 340, 320, 380, 350, 400] },\n    { name: 'Period Changed',    data: [ 80, 110, 140, 130, 170, 190, 210, 200, 240, 220, 260, 280] },\n    { name: 'Alert Changed',     data: [ 60,  90,  80, 120, 100, 140, 130, 160, 150, 180, 170, 200] },\n    { name: 'Process Changed',   data: [ 40,  60,  50,  80,  70, 100,  90, 120, 110, 140, 130, 160] },\n    { name: 'Browser Filter',    data: [ 20,  30,  40,  50,  60,  70,  80,  90,  60,  80,  70, 100] },\n  ],\n};\n\nexport const HEATMAP_DATA = {\n  // Time periods (x-axis)\n  hours: ['00:00', '04:00', '08:00', '12:00', '16:00', '20:00'],\n  // Servers (y-axis)\n  servers: ['Crowdstrike', 'Azure AD', 'GuardDuty', 'Sentinel', 'Palo Alto', 'FortiGate'],\n  // Data format: [xIndex, yIndex, value]\n  data: [\n    // Crowdstrike (index 0)\n    [0, 0, 45], [1, 0, 32], [2, 0, 78], [3, 0, 92], [4, 0, 105], [5, 0, 88],\n    // Azure AD (index 1)\n    [0, 1, 28], [1, 1, 18], [2, 1, 56], [3, 1, 72], [4, 1, 68], [5, 1, 52],\n    // GuardDuty (index 2)\n    [0, 2, 12], [1, 2, 8], [2, 2, 24], [3, 2, 48], [4, 2, 62], [5, 2, 44],\n    // Sentinel (index 3)\n    [0, 3, 38], [1, 3, 25], [2, 3, 62], [3, 3, 84], [4, 3, 96], [5, 3, 72],\n    // Palo Alto (index 4)\n    [0, 4, 22], [1, 4, 15], [2, 4, 42], [3, 4, 58], [4, 4, 54], [5, 4, 38],\n    // FortiGate (index 5)\n    [0, 5, 18], [1, 5, 12], [2, 5, 34], [3, 5, 46], [4, 5, 52], [5, 5, 36],\n  ],\n};\n\nconst isDarkMode = () => {\n  const el = document.documentElement;\n  return (\n    el.classList.contains('dark') ||\n    el.classList.contains('dark-mode') ||\n    el.getAttribute('data-display-theme') === 'dark'\n  );\n};\n\n/**\n * Get PrimeNG text and surface colors from CSS variables\n * Uses the theme's color tokens for consistent styling\n */\nfunction getCommonTextColor(): { text: string; sub: string; tertiary: string; quartiary: string; label: string; barLabel: string; axis: string; split: string } {\n  const root = document.documentElement;\n  const styles = getComputedStyle(root);\n  const dark = isDarkMode();\n\n  // Get text colors from CSS variables\n  const text = styles.getPropertyValue('--text-color').trim();\n  const subText = styles.getPropertyValue('--text-secondary-color').trim();\n  const tertiaryText = styles.getPropertyValue('--text-tertiary-color').trim();\n  const quartiaryText = styles.getPropertyValue('--text-quartiary-color').trim();\n\n  // Get surface-500 for muted labels (like counter widget's \"vs. last month\")\n  const labelColor = styles.getPropertyValue('--p-surface-500').trim();\n\n  // Get surface-400 for bar chart labels (lighter/brighter)\n  const barLabelColor = styles.getPropertyValue('--p-surface-400').trim();\n\n  // For axis and split lines, use surface colors with appropriate contrast\n  const axisColor = dark\n    ? styles.getPropertyValue('--p-surface-700').trim()\n    : styles.getPropertyValue('--p-surface-300').trim();\n\n  // Use hardcoded split line colors for better control - barely visible guides\n  const splitColor = dark ? 'rgba(255, 255, 255, 0.08)' : '#e5e5e5';  // Very subtle white with low opacity for dark, gray-200 for light\n\n  return {\n    text: text || (dark ? '#fafafa' : '#0f172a'),\n    sub: subText || (dark ? '#c8c8c8' : '#475569'),\n    tertiary: tertiaryText || (dark ? '#a3a3a3' : '#64748b'),\n    quartiary: quartiaryText || (dark ? '#8a8a8a' : '#94a3b8'),\n    label: labelColor || '#737373',  // surface-500 for muted labels (same in light/dark)\n    barLabel: barLabelColor || '#a3a3a3',  // surface-400 for bar chart labels (brighter)\n    axis: axisColor || (dark ? '#404040' : '#e5e5e5'),\n    split: splitColor,\n  };\n}\n\n/**\n * Get tooltip styling using theme colors\n * Uses overlay-background and surface colors for proper theming\n */\nfunction getTooltipStyle(dark: boolean) {\n  const root = document.documentElement;\n  const styles = getComputedStyle(root);\n\n  // Use overlay-background for tooltip (same as dropdowns/modals)\n  let bgColor = styles.getPropertyValue('--overlay-background').trim();\n  if (!bgColor) {\n    bgColor = dark ? '#1c1917' : '#ffffff';\n  }\n\n  // Use surface colors for borders\n  let borderColor = dark\n    ? styles.getPropertyValue('--p-surface-600').trim()\n    : styles.getPropertyValue('--p-surface-300').trim();\n\n  if (!borderColor) {\n    borderColor = dark ? '#57534e' : '#d4d4d8';\n  }\n\n  return {\n    backgroundColor: bgColor,\n    borderColor: borderColor,\n    borderWidth: 1,\n  };\n}\n\n/** Optional tuning for print/PDF donut layout inside the parent container. */\nexport type PrintChartOptions = {\n  /** Legacy very-dense mode (3+ charts per row). */\n  compact?: boolean;\n  /**\n   * Narrow-ring donut layout (same ECharts radii as a 2-up print cell). Use for every print\n   * donut row with 1–2 charts so a lone full-width widget matches its neighbors’ ring size;\n   * not only literal half-width containers.\n   */\n  halfWidthCell?: boolean;\n};\n\n/**\n * Print-optimized chart options: dark text on white, no truncation,\n * smaller donuts, full legend values, no animation, no tooltips.\n */\nexport function optionsForPrint(widget: WidgetConfig, printOpts?: PrintChartOptions, chartPalette?: ChartColorPalette): EChartsOption {\n  const DATA_COLORS = chartPalette?.colors ?? DEFAULT_DATA_COLORS;\n  const HEATMAP_RAMP = chartPalette?.heatmapRamp ?? CHART_STYLE_CONFIG.colors.heatmapRamp;\n  const PRINT_TEXT = '#374151';\n  const PRINT_SUB = '#6b7280';\n  const PRINT_MUTED = '#9ca3af';\n  const PRINT_BORDER = '#e5e7eb';\n  const compact = printOpts?.compact === true;\n  const halfWidthCell = printOpts?.halfWidthCell === true && !compact;\n\n  switch (widget.kind) {\n    case 'donut': {\n      const sourceKey = widget.dataConfig?.dataSource ?? 'alertsBySource';\n      const isSeverity = sourceKey === 'severity' || sourceKey === 'alertCriticality' || sourceKey === 'alertsBySeverity';\n      const SEVERITY_COLORS: Record<string, string> = {\n        Critical: CHART_STYLE_CONFIG.colors.severity.critical,\n        High: CHART_STYLE_CONFIG.colors.severity.high,\n        Medium: CHART_STYLE_CONFIG.colors.severity.medium,\n        Major: CHART_STYLE_CONFIG.colors.severity.medium,\n        Low: CHART_STYLE_CONFIG.colors.severity.low,\n        Info: CHART_STYLE_CONFIG.colors.severity.info,\n        Notice: CHART_STYLE_CONFIG.colors.severity.info,\n      };\n      const rawData = SAMPLE_DATA[sourceKey] ?? SAMPLE_DATA['alertsBySource'];\n      const data = buildPrintDonutSeriesData(rawData, isSeverity, SEVERITY_COLORS, DATA_COLORS);\n      const total = data.reduce((sum, item) => sum + item.value, 0);\n\n      const tabularFont =\n        'ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace';\n\n      let legendLeft: string;\n      let legendWidth: number | undefined;\n      let legendRight: string | undefined;\n      let nameColWidth: number;\n      let valueColWidth: number;\n      let pctColWidth: number;\n      let nameFont: number;\n      let valueFont: number;\n      let pctFont: number;\n      let itemGap: number;\n      let donutRadius: [number, number];\n      let donutCenter: [string, string];\n      let centerValueSize: number;\n      let centerValueLine: number;\n      let centerLabelSize: number;\n      let centerLabelLine: number;\n\n      if (compact) {\n        legendLeft = '40%';\n        legendWidth = 228;\n        legendRight = undefined;\n        nameColWidth = 100;\n        valueColWidth = 56;\n        pctColWidth = 40;\n        nameFont = 10;\n        valueFont = 10;\n        pctFont = 10;\n        itemGap = 4;\n        donutRadius = [44, 60];\n        donutCenter = ['12%', '50%'];\n        centerValueSize = 14;\n        centerValueLine = 18;\n        centerLabelSize = 9;\n        centerLabelLine = 12;\n      } else if (halfWidthCell) {\n        // ~half column: pie nudged left (less dead space); legend uses left+right so % column is not clipped.\n        legendLeft = '44%';\n        legendRight = '1%';\n        legendWidth = undefined;\n        nameColWidth = 68;\n        valueColWidth = 42;\n        pctColWidth = 30;\n        nameFont = 10;\n        valueFont = 10;\n        pctFont = 9;\n        itemGap = 4;\n        donutRadius = [46, 62];\n        donutCenter = ['20%', '50%'];\n        centerValueSize = 16;\n        centerValueLine = 20;\n        centerLabelSize = 9;\n        centerLabelLine = 12;\n      } else {\n        legendLeft = '30%';\n        legendWidth = 318;\n        legendRight = undefined;\n        nameColWidth = 198;\n        valueColWidth = 60;\n        pctColWidth = 44;\n        nameFont = 11;\n        valueFont = 11;\n        pctFont = 10;\n        itemGap = 5;\n        donutRadius = [76, 96];\n        donutCenter = ['15%', '50%'];\n        centerValueSize = 20;\n        centerValueLine = 24;\n        centerLabelSize = 10;\n        centerLabelLine = 14;\n      }\n\n      return {\n        backgroundColor: 'transparent',\n        animation: false,\n        grid: { left: 0, right: 0, top: 0, bottom: 0, containLabel: false },\n        legend: {\n          type: 'plain',\n          orient: 'vertical',\n          left: legendLeft,\n          ...(legendRight != null ? { right: legendRight } : {}),\n          ...(legendWidth != null ? { width: legendWidth } : {}),\n          top: 'middle',\n          itemWidth: 9,\n          itemHeight: 9,\n          itemGap,\n          icon: 'rect',\n          itemStyle: { borderRadius: 2 },\n          formatter: (name: string) => {\n            const item = data.find(d => d.name === name);\n            if (!item) return name;\n            const value = item.value.toLocaleString();\n            const pct = total > 0 ? ((item.value / total) * 100).toFixed(1) : '0.0';\n            return `{n|${item.name}}{v|${value}}{p|${pct}%}`;\n          },\n          textStyle: {\n            rich: {\n              n: {\n                color: PRINT_TEXT,\n                fontSize: nameFont,\n                fontWeight: 500,\n                width: nameColWidth,\n                align: 'left',\n                padding: [0, 0, 0, 4],\n              },\n              v: {\n                color: PRINT_SUB,\n                fontSize: valueFont,\n                fontWeight: 600,\n                fontFamily: tabularFont,\n                width: valueColWidth,\n                align: 'right',\n                padding: [0, 2, 0, 4],\n              },\n              p: {\n                color: PRINT_MUTED,\n                fontSize: pctFont,\n                fontWeight: 500,\n                fontFamily: tabularFont,\n                width: pctColWidth,\n                align: 'right',\n                padding: [0, 0, 0, 2],\n              },\n            },\n          },\n        },\n        series: [\n          {\n            name: widget.title || 'Distribution',\n            type: 'pie',\n            radius: donutRadius,\n            center: donutCenter,\n            padAngle: 2,\n            label: { show: false },\n            labelLine: { show: false },\n            itemStyle: { borderRadius: 1, borderColor: '#ffffff', borderWidth: 1 },\n            emphasis: { disabled: true },\n            data,\n          },\n          {\n            name: 'total-label',\n            type: 'pie',\n            radius: ['0%', '0%'],\n            center: donutCenter,\n            silent: true,\n            label: {\n              show: true,\n              position: 'center',\n              formatter: () => `{value|${total >= 1000 ? `${(total / 1000).toFixed(1)}k` : total}}\\n{label|Total}`,\n              rich: {\n                value: { fontSize: centerValueSize, fontWeight: 600, color: PRINT_TEXT, lineHeight: centerValueLine },\n                label: { fontSize: centerLabelSize, color: PRINT_MUTED, lineHeight: centerLabelLine },\n              },\n            },\n            data: [{ value: 1, name: '' }],\n            itemStyle: { color: 'transparent' },\n          },\n        ],\n      };\n    }\n\n    case 'area': {\n      const isMultiSeries = widget.dataConfig?.dataSource === 'alertChangesOverTime';\n      if (isMultiSeries) {\n        return {\n          backgroundColor: 'transparent',\n          animation: false,\n          legend: {\n            top: 0, right: 0, icon: 'rect', itemWidth: 10, itemHeight: 10,\n            itemStyle: { borderRadius: 2 },\n            textStyle: { color: PRINT_SUB, fontSize: 10 },\n          },\n          grid: { left: '3%', right: '3%', top: '14%', bottom: '10%', containLabel: true },\n          xAxis: {\n            type: 'category', boundaryGap: false, data: MULTI_SERIES_TREND.xLabels,\n            axisLine: { lineStyle: { color: PRINT_BORDER } },\n            axisLabel: { color: PRINT_SUB, fontSize: 10 },\n          },\n          yAxis: {\n            type: 'value',\n            axisLine: { lineStyle: { color: PRINT_BORDER } },\n            axisLabel: { color: PRINT_SUB, fontSize: 10 },\n            splitLine: { lineStyle: { color: PRINT_BORDER, type: 'dashed' } },\n          },\n          series: MULTI_SERIES_TREND.series.map((s, i) => ({\n            name: s.name, type: 'line' as const, smooth: true, symbol: 'none', showSymbol: false,\n            lineStyle: { color: DATA_COLORS[i % DATA_COLORS.length], width: 1.5 },\n            areaStyle: { color: { type: 'linear' as const, x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: `${DATA_COLORS[i % DATA_COLORS.length]}30` }, { offset: 1, color: `${DATA_COLORS[i % DATA_COLORS.length]}05` }] } },\n            data: s.data,\n          })),\n        };\n      }\n      return {\n        backgroundColor: 'transparent',\n        animation: false,\n        grid: { left: '5%', right: '4%', top: '8%', bottom: '10%', containLabel: true },\n        xAxis: {\n          type: 'category', boundaryGap: false, data: SAMPLE_DATA['trend'].map(d => d.name),\n          axisLine: { lineStyle: { color: PRINT_BORDER } },\n          axisLabel: { color: PRINT_SUB, fontSize: 10 },\n        },\n        yAxis: {\n          type: 'value',\n          axisLine: { lineStyle: { color: PRINT_BORDER } },\n          axisLabel: { color: PRINT_SUB, fontSize: 10 },\n          splitLine: { lineStyle: { color: PRINT_BORDER, type: 'dashed' } },\n        },\n        series: [{\n          type: 'line', smooth: true, symbol: 'none',\n          lineStyle: { color: CHART_STYLE_CONFIG.colors.primary, width: 1.5 },\n          areaStyle: { color: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: 'rgba(59,130,246,0.25)' }, { offset: 1, color: 'rgba(59,130,246,0.02)' }] } },\n          data: SAMPLE_DATA['trend'].map(d => d.value),\n        }],\n      };\n    }\n\n    case 'bar': {\n      const data = SAMPLE_DATA['alertsByAssignee'];\n      return {\n        backgroundColor: 'transparent',\n        animation: false,\n        grid: { left: '2%', right: '4%', top: '4%', bottom: '4%', containLabel: true },\n        xAxis: {\n          type: 'value', axisLine: { show: false }, axisTick: { show: false },\n          axisLabel: { color: PRINT_SUB, fontSize: 10, formatter: (val: number) => val >= 1000 ? `${(val / 1000).toFixed(0)}k` : `${val}` },\n          splitLine: { lineStyle: { color: PRINT_BORDER, type: 'dashed' } },\n        },\n        yAxis: {\n          type: 'category', data: data.map(d => d.name).reverse(),\n          axisLine: { show: false }, axisTick: { show: false },\n          axisLabel: { color: PRINT_TEXT, fontSize: 11 },\n        },\n        series: [{\n          type: 'bar', barWidth: '50%',\n          data: data.map((d, i) => ({ value: d.value, itemStyle: { color: DATA_COLORS[i % DATA_COLORS.length], borderRadius: [0, 2, 2, 0] } })).reverse(),\n        }],\n      };\n    }\n\n    case 'heatmap': {\n      const values = HEATMAP_DATA.data.map(d => d[2]);\n      return {\n        backgroundColor: 'transparent',\n        animation: false,\n        grid: { left: '2%', right: '2%', top: '4%', bottom: '18%', containLabel: true },\n        xAxis: {\n          type: 'category', data: HEATMAP_DATA.hours,\n          axisLine: { lineStyle: { color: PRINT_BORDER } },\n          axisLabel: { color: PRINT_SUB, fontSize: 10 },\n        },\n        yAxis: {\n          type: 'category', data: HEATMAP_DATA.servers,\n          axisLine: { lineStyle: { color: PRINT_BORDER } },\n          axisLabel: { color: PRINT_TEXT, fontSize: 10 },\n        },\n        visualMap: {\n          min: Math.min(...values), max: Math.max(...values),\n          calculable: false, orient: 'horizontal', left: 'center', bottom: '0%',\n          textStyle: { color: PRINT_SUB, fontSize: 10 },\n          inRange: { color: HEATMAP_RAMP },\n        },\n        series: [{\n          type: 'heatmap', data: HEATMAP_DATA.data,\n          label: { show: true, color: PRINT_TEXT, fontSize: 10 },\n        }],\n      };\n    }\n\n    default:\n      return optionsForWidget(widget, chartPalette);\n  }\n}\n\nexport function optionsForWidget(widget: WidgetConfig, chartPalette?: ChartColorPalette): EChartsOption {\n  const dark = isDarkMode();\n  const palette = getCommonTextColor();\n  const tooltipStyle = getTooltipStyle(dark);\n  const DATA_COLORS = chartPalette?.colors ?? DEFAULT_DATA_COLORS;\n  const HEATMAP_RAMP = chartPalette?.heatmapRamp ?? CHART_STYLE_CONFIG.colors.heatmapRamp;\n\n  switch (widget.kind) {\n    case 'counter':\n      return {\n        backgroundColor: 'transparent',\n        title: {\n          text: '30.5k',\n          subtext: widget.title || 'Total',\n          left: 'center',\n          top: '38%',\n          textStyle: { fontSize: 48, fontWeight: 'normal', color: palette.text },\n          subtextStyle: { fontSize: 14, color: palette.sub },\n        },\n      };\n\n    case 'area': {\n      const isMultiSeries = widget.dataConfig?.dataSource === 'alertChangesOverTime';\n\n      if (isMultiSeries) {\n        // Multi-series area chart — \"Alert Changes Over Time\"\n        return {\n          backgroundColor: 'transparent',\n          tooltip: {\n            trigger: 'axis',\n            backgroundColor: tooltipStyle.backgroundColor,\n            borderColor: tooltipStyle.borderColor,\n            borderWidth: tooltipStyle.borderWidth,\n            textStyle: { color: palette.text, fontSize: CHART_STYLE_CONFIG.typography.fontSize.tooltip, fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.tooltip },\n            axisPointer: { type: 'cross', lineStyle: { color: dark ? 'rgba(156, 163, 175, 0.5)' : 'rgba(107, 114, 128, 0.5)' } },\n            confine: true,\n            padding: [8, 12],\n          },\n          legend: {\n            top: 4,\n            right: 10,\n            icon: 'rect',\n            itemWidth: 12,\n            itemHeight: 12,\n            itemStyle: { borderRadius: 2 },\n            textStyle: { color: palette.quartiary, fontSize: 11 },\n          },\n          grid: { left: '3%', right: '3%', top: '16%', bottom: '10%', containLabel: true },\n          xAxis: {\n            type: 'category',\n            boundaryGap: false,\n            data: MULTI_SERIES_TREND.xLabels,\n            axisLine: { lineStyle: { color: palette.axis } },\n            axisLabel: { color: palette.label, fontSize: CHART_STYLE_CONFIG.typography.fontSize.axis, fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.axis },\n          },\n          yAxis: {\n            type: 'value',\n            axisLine: { lineStyle: { color: palette.axis } },\n            axisLabel: { color: palette.label, fontSize: CHART_STYLE_CONFIG.typography.fontSize.axis, fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.axis },\n            splitLine: { lineStyle: { color: palette.split, type: 'dashed' } },\n          },\n          series: MULTI_SERIES_TREND.series.map((s, i) => ({\n            name: s.name,\n            type: 'line' as const,\n            smooth: true,\n            symbol: 'circle',\n            symbolSize: 4,\n            showSymbol: false,\n            lineStyle: { color: DATA_COLORS[i % DATA_COLORS.length], width: 2 },\n            itemStyle: { color: DATA_COLORS[i % DATA_COLORS.length], borderWidth: 2, borderColor: dark ? '#0a0a0b' : '#ffffff' },\n            areaStyle: {\n              color: {\n                type: 'linear' as const,\n                x: 0, y: 0, x2: 0, y2: 1,\n                colorStops: [\n                  { offset: 0, color: `${DATA_COLORS[i % DATA_COLORS.length]}40` },\n                  { offset: 1, color: `${DATA_COLORS[i % DATA_COLORS.length]}08` },\n                ],\n              },\n            },\n            emphasis: { scale: true, itemStyle: { shadowBlur: 10, shadowColor: `${DATA_COLORS[i % DATA_COLORS.length]}80` } },\n            data: s.data,\n          })),\n        };\n      }\n\n      // Single-series area chart (default)\n      return {\n        backgroundColor: 'transparent',\n        tooltip: {\n          trigger: 'axis',\n          backgroundColor: tooltipStyle.backgroundColor,\n          borderColor: tooltipStyle.borderColor,\n          borderWidth: tooltipStyle.borderWidth,\n          textStyle: { color: palette.text, fontSize: CHART_STYLE_CONFIG.typography.fontSize.tooltip, fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.tooltip },\n          axisPointer: {\n            type: 'cross',\n            lineStyle: { color: dark ? 'rgba(156, 163, 175, 0.5)' : 'rgba(107, 114, 128, 0.5)' }\n          },\n          confine: true,\n          padding: [8, 12],\n        },\n        grid: { left: '5%', right: '4%', top: '8%', bottom: '10%', containLabel: true },\n        xAxis: {\n          type: 'category',\n          boundaryGap: false,\n          data: SAMPLE_DATA['trend'].map((d) => d.name),\n          axisLine: { lineStyle: { color: palette.axis } },\n          axisLabel: {\n            color: palette.label,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.axis,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.axis\n          },\n        },\n        yAxis: {\n          type: 'value',\n          axisLine: { lineStyle: { color: palette.axis } },\n          axisLabel: {\n            color: palette.label,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.axis,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.axis\n          },\n          splitLine: { lineStyle: { color: palette.split, type: 'dashed' } },\n        },\n        series: [\n          {\n            name: widget.title || 'Trend',\n            type: 'line',\n            smooth: true,\n            symbol: 'circle',\n            symbolSize: CHART_STYLE_CONFIG.line.symbolSize,\n            areaStyle: {\n              color: {\n                type: 'linear',\n                x: 0,\n                y: 0,\n                x2: 0,\n                y2: 1,\n                colorStops: [\n                  { offset: 0, color: `rgba(59, 130, 246, ${CHART_STYLE_CONFIG.line.areaOpacity.start})` },\n                  { offset: 1, color: `rgba(59, 130, 246, ${CHART_STYLE_CONFIG.line.areaOpacity.end})` },\n                ],\n              },\n            },\n            lineStyle: { color: CHART_STYLE_CONFIG.colors.primary, width: CHART_STYLE_CONFIG.line.lineWidth },\n            itemStyle: {\n              color: CHART_STYLE_CONFIG.colors.primary,\n              borderWidth: 2,\n              borderColor: dark ? '#0a0a0b' : '#ffffff'\n            },\n            emphasis: {\n              scale: true,\n              itemStyle: {\n                shadowBlur: 10,\n                shadowColor: 'rgba(59, 130, 246, 0.5)',\n              },\n            },\n            data: SAMPLE_DATA['trend'].map((d) => d.value),\n          },\n        ],\n      };\n    }\n\n    case 'donut': {\n      const sourceKey = widget.dataConfig?.dataSource ?? 'alertsBySource';\n      const isSeverity = sourceKey === 'severity' || sourceKey === 'alertCriticality' || sourceKey === 'alertsBySeverity';\n      const SEVERITY_COLORS: Record<string, string> = {\n        Critical: CHART_STYLE_CONFIG.colors.severity.critical,\n        High: CHART_STYLE_CONFIG.colors.severity.high,\n        Medium: CHART_STYLE_CONFIG.colors.severity.medium,\n        Major: CHART_STYLE_CONFIG.colors.severity.medium,   // Major → amber (same as Medium)\n        Low: CHART_STYLE_CONFIG.colors.severity.low,\n        Info: CHART_STYLE_CONFIG.colors.severity.info,\n        Notice: CHART_STYLE_CONFIG.colors.severity.info,     // Notice → slate (same as Info)\n      };\n      const rawData = SAMPLE_DATA[sourceKey] ?? SAMPLE_DATA['alertsBySource'];\n      const data = rawData.map((item, index) => ({\n        name: item.name,\n        value: item.value,\n        itemStyle: {\n          color: isSeverity\n            ? (SEVERITY_COLORS[item.name] ?? DATA_COLORS[index % DATA_COLORS.length])\n            : DATA_COLORS[index % DATA_COLORS.length],\n        },\n      }));\n      const total = data.reduce((sum, item) => sum + item.value, 0);\n\n      return {\n        backgroundColor: 'transparent',\n        grid: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 8,\n          containLabel: false,\n        },\n        tooltip: {\n          trigger: 'item',\n          backgroundColor: tooltipStyle.backgroundColor,\n          borderColor: tooltipStyle.borderColor,\n          borderWidth: tooltipStyle.borderWidth,\n          textStyle: {\n            color: palette.text,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.tooltip,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.tooltip\n          },\n          confine: true,\n          padding: [8, 12],\n        },\n        legend: {\n          orient: 'vertical',\n          left: CHART_STYLE_CONFIG.donut.legendPosition,\n          top: 16,\n          width: '43%',       // ~232px at 540, scales down with container\n          itemWidth: 14,\n          itemHeight: 14,\n          itemGap: CHART_STYLE_CONFIG.donut.legendItemGap,\n          icon: 'rect',\n          itemStyle: {\n            borderRadius: 2,\n          },\n          formatter: (name: string) => {\n            const item = data.find((d) => d.name === name);\n            if (!item) return name;\n            const value = item.value.toLocaleString();\n            const maxLen = 14;\n            const label = name.length > maxLen ? name.slice(0, maxLen) + '…' : name;\n            return `{name|${label}}{value|${value}}`;\n          },\n          textStyle: {\n            rich: {\n              name: {\n                color: palette.quartiary,\n                fontSize: CHART_STYLE_CONFIG.typography.fontSize.label,\n                fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.label,\n                width: 90,\n                align: 'left',\n                padding: [0, 0, 0, CHART_STYLE_CONFIG.donut.legendIconTextGap],\n              },\n              value: {\n                color: palette.barLabel,\n                fontSize: CHART_STYLE_CONFIG.typography.fontSize.label,\n                fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.label,\n                width: 45,\n                align: 'right',\n                padding: [0, 0, 0, 8],\n              },\n            },\n          },\n        },\n        series: [\n          {\n            name: widget.title || 'Distribution',\n            type: 'pie',\n            radius: CHART_STYLE_CONFIG.donut.radius,\n            center: CHART_STYLE_CONFIG.donut.centerPosition,\n            padAngle: CHART_STYLE_CONFIG.donut.padAngle,\n            label: { show: false },\n            labelLine: { show: false },\n            itemStyle: {\n              borderRadius: CHART_STYLE_CONFIG.donut.borderRadius,\n              borderColor: 'transparent',\n              borderWidth: CHART_STYLE_CONFIG.donut.borderWidth,\n            },\n            emphasis: {\n              scale: true,\n              scaleSize: CHART_STYLE_CONFIG.donut.emphasis.scaleSize,\n              itemStyle: {\n                shadowBlur: CHART_STYLE_CONFIG.donut.emphasis.shadowBlur,\n                shadowOffsetX: 0,\n                shadowColor: dark ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.15)',\n              },\n            },\n            data,\n          },\n          {\n            name: 'total-label',\n            type: 'pie',\n            radius: ['0%', '0%'],\n            center: CHART_STYLE_CONFIG.donut.centerPosition,\n            silent: true,\n            label: {\n              show: true,\n              position: 'center',\n              formatter: () => `{value|${total >= 1000 ? `${(total / 1000).toFixed(1)}k` : total}}\\n{label|Total}`,\n              rich: {\n                value: {\n                  fontSize: CHART_STYLE_CONFIG.typography.fontSize.title,\n                  fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.title,\n                  color: palette.text,\n                  lineHeight: 34\n                },\n                label: {\n                  fontSize: CHART_STYLE_CONFIG.typography.fontSize.subtitle,\n                  color: palette.sub,\n                  lineHeight: 16,\n                  fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.subtitle\n                },\n              },\n            },\n            data: [{ value: 1, name: '' }],\n            itemStyle: { color: 'transparent' },\n          },\n        ],\n      };\n    }\n\n    case 'bar': {\n      const data = SAMPLE_DATA['alertsByAssignee'];\n      return {\n        backgroundColor: 'transparent',\n        tooltip: {\n          trigger: 'axis',\n          axisPointer: {\n            type: 'shadow',\n            shadowStyle: { color: dark ? 'rgba(255, 255, 255, 0.05)' : 'rgba(0, 0, 0, 0.05)' }\n          },\n          backgroundColor: tooltipStyle.backgroundColor,\n          borderColor: tooltipStyle.borderColor,\n          borderWidth: tooltipStyle.borderWidth,\n          textStyle: { color: palette.text, fontSize: CHART_STYLE_CONFIG.typography.fontSize.tooltip, fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.tooltip },\n          formatter: (params: any) => {\n            const p = params?.[0];\n            return `${p?.name}: ${p?.value?.toLocaleString?.() ?? p?.value}`;\n          },\n          confine: true,\n          padding: [8, 12],\n        },\n        grid: { left: '2%', right: '2%', top: '8%', bottom: '8%', containLabel: true },\n        xAxis: {\n          type: 'value',\n          axisLine: { show: false },\n          axisTick: { show: false },\n          axisLabel: {\n            color: palette.label,  // Use muted surface-500 like counter widget\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.axis,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.axis,\n            formatter: (val: number) => (val >= 1000 ? `${(val / 1000).toFixed(0)}k` : `${val}`),\n          },\n          splitLine: { lineStyle: { color: palette.split, type: 'dashed' } },\n        },\n        yAxis: {\n          type: 'category',\n          data: data.map((d) => d.name).reverse(),\n          axisLine: { show: false },\n          axisTick: { show: false },\n          axisLabel: {\n            color: palette.barLabel,  // Use surface-400 for bar chart labels (brighter than other axis labels)\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.label,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.label\n          },\n        },\n        series: [\n          {\n            type: 'bar',\n            data: data\n              .map((d, i) => ({\n                value: d.value,\n                itemStyle: {\n                  color: DATA_COLORS[i % DATA_COLORS.length],\n                  borderRadius: [0, CHART_STYLE_CONFIG.bar.borderRadius, CHART_STYLE_CONFIG.bar.borderRadius, 0]\n                },\n              }))\n              .reverse(),\n            barWidth: CHART_STYLE_CONFIG.bar.barWidth,\n            emphasis: {\n              itemStyle: {\n                shadowBlur: 10,\n                shadowOffsetX: 0,\n                shadowColor: dark ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.15)',\n              },\n            },\n          },\n        ],\n      };\n    }\n\n    case 'heatmap': {\n      // Calculate min/max for color scale\n      const values = HEATMAP_DATA.data.map(d => d[2]);\n      const min = Math.min(...values);\n      const max = Math.max(...values);\n\n      return {\n        backgroundColor: 'transparent',\n        tooltip: {\n          position: 'top',\n          backgroundColor: tooltipStyle.backgroundColor,\n          borderColor: tooltipStyle.borderColor,\n          borderWidth: tooltipStyle.borderWidth,\n          textStyle: {\n            color: palette.text,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.tooltip,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.tooltip\n          },\n          formatter: (params: any) => {\n            const hour = HEATMAP_DATA.hours[params.value[0]];\n            const server = HEATMAP_DATA.servers[params.value[1]];\n            const value = params.value[2];\n            return `${server}<br/>${hour}: ${value} alerts`;\n          },\n          confine: true,\n          padding: [8, 12],\n        },\n        grid: {\n          left: '2%',\n          right: '2%',\n          top: '6%',\n          bottom: '18%',\n          containLabel: true,\n        },\n        xAxis: {\n          type: 'category',\n          data: HEATMAP_DATA.hours,\n          splitArea: { show: false },\n          axisLine: {\n            show: true,\n            lineStyle: { color: palette.axis }\n          },\n          axisTick: { show: false },\n          axisLabel: {\n            color: palette.sub,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.axis,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.axis,\n          },\n        },\n        yAxis: {\n          type: 'category',\n          data: HEATMAP_DATA.servers,\n          splitArea: { show: false },\n          axisLine: {\n            show: true,\n            lineStyle: { color: palette.axis }\n          },\n          axisTick: { show: false },\n          axisLabel: {\n            color: palette.barLabel,  // Use surface-400 for brighter labels\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.label,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.label,\n          },\n        },\n        visualMap: {\n          min: min,\n          max: max,\n          calculable: true,\n          orient: 'horizontal',\n          left: 'center',\n          bottom: '0%',\n          textStyle: {\n            color: palette.sub,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.axis,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.axis,\n          },\n          inRange: {\n            color: HEATMAP_RAMP,\n          },\n        },\n        series: [\n          {\n            name: 'Alert Volume',\n            type: 'heatmap',\n            data: HEATMAP_DATA.data,\n            label: {\n              show: true,\n              color: dark ? '#1a1a1a' : '#ffffff',\n              fontSize: CHART_STYLE_CONFIG.typography.fontSize.label,\n              fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.label,\n            },\n            emphasis: {\n              itemStyle: {\n                shadowBlur: 10,\n                shadowColor: dark ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.3)',\n              },\n            },\n          },\n        ],\n      };\n    }\n\n    case 'table':\n      return {\n        backgroundColor: 'transparent',\n        title: [\n          {\n            text: '30.3k',\n            left: '25%',\n            top: '42%',\n            textAlign: 'center',\n            textStyle: { fontSize: CHART_STYLE_CONFIG.typography.fontSize.title, fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.title, color: palette.text },\n          },\n          {\n            text: 'Total',\n            left: '25%',\n            top: '55%',\n            textAlign: 'center',\n            textStyle: { fontSize: CHART_STYLE_CONFIG.typography.fontSize.subtitle, color: palette.sub, fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.subtitle },\n          },\n        ],\n        tooltip: {\n          trigger: 'item',\n          backgroundColor: tooltipStyle.backgroundColor,\n          borderColor: tooltipStyle.borderColor,\n          borderWidth: tooltipStyle.borderWidth,\n          textStyle: {\n            color: palette.text,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.tooltip,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.tooltip\n          },\n          confine: true,\n          padding: [8, 12],\n        },\n        legend: {\n          orient: 'vertical',\n          right: 10,\n          top: 'middle',\n          icon: 'rect',\n          itemStyle: {\n            borderRadius: 2,\n          },\n          textStyle: {\n            color: palette.text,\n            fontSize: CHART_STYLE_CONFIG.typography.fontSize.tooltip,\n            fontWeight: CHART_STYLE_CONFIG.typography.fontWeight.tooltip,\n            padding: [0, 0, 0, CHART_STYLE_CONFIG.donut.legendIconTextGap],\n          },\n          itemWidth: 14,\n          itemHeight: 14,\n          itemGap: CHART_STYLE_CONFIG.donut.legendItemGap,\n        },\n        series: [\n          {\n            name: 'Alerts Ignored',\n            type: 'pie',\n            radius: ['52%', '72%'],\n            center: ['25%', '50%'],\n            padAngle: 2,\n            label: { show: false },\n            itemStyle: {\n              borderRadius: 4,\n              borderColor: 'transparent',\n              borderWidth: 0,\n            },\n            emphasis: {\n              scale: true,\n              scaleSize: 8,\n              itemStyle: {\n                shadowBlur: 10,\n                shadowOffsetX: 0,\n                shadowColor: dark ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.15)',\n              },\n            },\n            data: [\n              { value: 10500, name: 'Custom Alerts', itemStyle: { color: '#1d4ed8' } },    // blue-700\n              { value: 8200, name: 'Crowdstrike XDR', itemStyle: { color: '#2563eb' } },   // blue-600\n              { value: 4100, name: 'Suspicious Login', itemStyle: { color: '#3b82f6' } },  // blue-500\n              { value: 3200, name: 'UI Threat', itemStyle: { color: '#60a5fa' } },          // blue-400\n              { value: 2176, name: 'Crowdstrike XDR', itemStyle: { color: '#93c5fd' } },   // blue-300\n              { value: 1200, name: 'Malicious File', itemStyle: { color: '#bfdbfe' } },    // blue-200\n              { value: 900, name: 'Compromise', itemStyle: { color: '#dbeafe' } },          // blue-100\n            ],\n          },\n        ],\n      };\n\n    case 'section':\n      // Section headers are not charts — return empty options\n      return { backgroundColor: 'transparent' };\n\n    default:\n      return {\n        backgroundColor: 'transparent',\n        title: {\n          text: 'No Data',\n          left: 'center',\n          top: 'center',\n          textStyle: { color: '#94a3b8', fontSize: 16 },\n        },\n      };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxEchartsDirective } from 'ngx-echarts';\nimport type { EChartsOption } from 'echarts';\n\n/** Minimal chart handle — ngx-echarts passes the ECharts instance from `echarts.init`. */\ntype EChartsResizeHandle = { resize: () => void };\n\n/**\n * Chart widget - wraps echarts with proper styling and loading states\n * Handles responsive sizing and dark mode automatically\n */\n@Component({\n  selector: 'ui-widget-chart',\n  standalone: true,\n  imports: [CommonModule, NgxEchartsDirective],\n  template: `\n    <div class=\"tw-h-full tw-w-full tw-relative\">\n      <!-- Loading State -->\n      <div\n        *ngIf=\"isLoading\"\n        class=\"tw-absolute tw-inset-0 tw-flex tw-items-center tw-justify-center\n               tw-bg-surface-0/50 dark:tw-bg-surface-900/50 tw-backdrop-blur-sm\n               tw-z-10 tw-rounded-lg\">\n        <div class=\"tw-flex tw-flex-col tw-items-center tw-gap-3\">\n          <i class=\"pi pi-spin pi-spinner tw-text-2xl tw-text-surface-400\"></i>\n          <span class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400\">\n            Loading data...\n          </span>\n        </div>\n      </div>\n\n      <!-- Empty State -->\n      <div\n        *ngIf=\"!isLoading && isEmpty\"\n        class=\"tw-h-full tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-2\">\n        <i class=\"pi pi-chart-line tw-text-4xl tw-text-surface-300 dark:tw-text-surface-700\"></i>\n        <span class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400\">\n          {{ emptyMessage || 'No data available' }}\n        </span>\n      </div>\n\n      <!-- Chart Canvas -->\n      <div\n        *ngIf=\"!isLoading && !isEmpty\"\n        class=\"tw-h-full tw-w-full\"\n        [style.display]=\"isConstrainedDonut ? 'flex' : 'block'\"\n        [style.align-items]=\"isConstrainedDonut ? 'center' : null\"\n        [style.justify-content]=\"isConstrainedDonut ? 'center' : null\">\n        <div\n          *ngIf=\"isConstrainedDonut\"\n          class=\"tw-relative tw-w-full tw-max-w-[540px] tw-min-h-0 tw-max-h-full tw-mx-auto\"\n          style=\"aspect-ratio: 540 / 304;\">\n          <div\n            echarts\n            [options]=\"options\"\n            [loading]=\"isLoading\"\n            [autoResize]=\"true\"\n            (chartInit)=\"onChartInit($event)\"\n            class=\"tw-absolute tw-inset-0 tw-w-full tw-h-full\">\n          </div>\n        </div>\n        <div\n          *ngIf=\"!isConstrainedDonut\"\n          echarts\n          [options]=\"options\"\n          [loading]=\"isLoading\"\n          [autoResize]=\"true\"\n          (chartInit)=\"onChartInit($event)\"\n          class=\"tw-h-full tw-w-full tw-min-h-0\"\n          [class.tw-overflow-visible]=\"printOptimized\">\n        </div>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetChartComponent implements OnInit, OnDestroy, OnChanges {\n  @Input({ required: true }) options!: EChartsOption;\n  @Input() isLoading = false;\n  @Input() isEmpty = false;\n  @Input() emptyMessage?: string;\n  @Input() chartType?: string;\n  /** When true (default), donut charts are locked to the 540×304 design size. Set false in drill-down/modal views. */\n  @Input() fillContainer = false;\n\n  /**\n   * Report / PDF / print preview: echarts fills the parent (no 540×304 lockup).\n   * Use with `optionsForPrint()` from the parent. Dashboard tiles leave this false.\n   */\n  @Input() printOptimized = false;\n\n  @Output() chartInitEvent = new EventEmitter<EChartsResizeHandle>();\n\n  private chartInstance: EChartsResizeHandle | null = null;\n  private themeObserver: MutationObserver | null = null;\n  private resizeRafId = 0;\n\n  get isConstrainedDonut(): boolean {\n    const isDonut = this.chartType === 'donut' || this.chartType === 'pie';\n    return !this.fillContainer && !this.printOptimized && isDonut;\n  }\n\n  ngOnInit(): void {\n    if (typeof MutationObserver === 'undefined') return;\n    const root = document.documentElement;\n    this.themeObserver = new MutationObserver(() => this.scheduleResize());\n    this.themeObserver.observe(root, {\n      attributes: true,\n      attributeFilter: ['class', 'data-display-theme'],\n    });\n  }\n\n  ngOnDestroy(): void {\n    if (this.resizeRafId) cancelAnimationFrame(this.resizeRafId);\n    this.themeObserver?.disconnect();\n    this.themeObserver = null;\n    this.chartInstance = null;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const layoutKeys = ['printOptimized', 'fillContainer', 'chartType'];\n    const layoutChanged = layoutKeys.some(\n      k => changes[k] && !changes[k].isFirstChange(),\n    );\n    if (layoutChanged) {\n      this.scheduleResize();\n    }\n  }\n\n  onChartInit(chart: EChartsResizeHandle): void {\n    this.chartInstance = chart;\n    this.chartInitEvent.emit(chart);\n    this.scheduleResize();\n    requestAnimationFrame(() => this.resizeChart());\n  }\n\n  private scheduleResize(): void {\n    if (this.resizeRafId) cancelAnimationFrame(this.resizeRafId);\n    this.resizeRafId = requestAnimationFrame(() => {\n      this.resizeRafId = 0;\n      this.resizeChart();\n    });\n  }\n\n  private resizeChart(): void {\n    try {\n      this.chartInstance?.resize();\n    } catch {\n      /* instance disposed */\n    }\n  }\n}\n","import { Component, signal, output, input, OnInit, ViewChild, ElementRef, effect, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePicker } from 'primeng/datepicker';\nimport { TabsModule } from 'primeng/tabs';\nimport { InputText } from 'primeng/inputtext';\nimport { Button, ButtonModule } from 'primeng/button';\nimport { DateTimeConfigService } from '../localization/services/datetime-config.service';\n\nexport interface TimePickerValue {\n  startDate: Date | null;\n  startTime: Date | null;\n  endDate: Date | null;\n  endTime: Date | null;\n  selectedDay: Date | null;\n  activeTab: 'absolute' | 'daily';\n}\n\nexport interface DateValidationError {\n  field: 'startDate' | 'endDate' | 'selectedDay';\n  message: string;\n}\n\n/**\n * Figma Time Picker Component\n * Full time range picker built to exact Figma specifications\n *\n * Design Specs from Figma (node-id: 1900-34030):\n * - Container: 302px width, 10px border-radius, white background\n * - Tabs: Absolute/Daily with 48px height, blue active underline\n * - Absolute tab: Start/End rows with date (120px) + time (88px) inputs\n * - Daily tab: Select day input (120px) + calendar\n * - Calendar: Inline datepicker with July 2024 default\n * - Footer: Cancel + Apply buttons with 24px gap\n */\n@Component({\n  selector: 'sc-datepicker',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    DatePicker,\n    TabsModule,\n    InputText,\n    Button,\n    ButtonModule\n  ],\n  templateUrl: './sc-datepicker.component.html',\n  styleUrl: './sc-datepicker.component.scss'\n})\nexport class ScDatepickerComponent implements OnInit {\n  private readonly dtConfig = inject(DateTimeConfigService);\n\n  @ViewChild('startDateInput') startDateInput?: ElementRef<HTMLInputElement>;\n  @ViewChild('endDateInput') endDateInput?: ElementRef<HTMLInputElement>;\n  @ViewChild('selectedDayInput') selectedDayInput?: ElementRef<HTMLInputElement>;\n\n  readonly initialStartDate = input<Date | null>(null);\n  readonly initialEndDate = input<Date | null>(null);\n\n  // Active tab (using string values as required by PrimeNG Tabs)\n  activeTab = signal<string>('0'); // '0' = Absolute, '1' = Daily\n\n  // Absolute tab values (Date objects)\n  startDate = signal<Date | null>(null);\n  startTime = signal<Date | null>((() => { const t = new Date(); t.setHours(0, 0, 0, 0); return t; })()); // Time as Date object for time picker, defaults to 12:00 AM\n  endDate = signal<Date | null>(null);\n  endTime = signal<Date | null>((() => { const t = new Date(); t.setHours(0, 0, 0, 0); return t; })()); // Time as Date object for time picker, defaults to 12:00 AM\n\n  // Absolute tab display values (formatted strings for inputs)\n  startDateDisplay = signal<string>('');\n  endDateDisplay = signal<string>('');\n\n  // Daily tab values\n  selectedDay = signal<Date | null>(null);\n  selectedDayDisplay = signal<string>('');\n\n  // Calendar display date (for single date selection in Daily tab, or current selection in Absolute)\n  calendarDate = signal<Date | Date[] | null>(null);\n\n  // Track which input field is currently focused\n  focusedField = signal<'startDate' | 'endDate' | 'selectedDay' | null>(null);\n\n  // Validation errors\n  validationErrors = signal<DateValidationError[]>([]);\n\n  // Output events\n  valueChange = output<TimePickerValue>();\n  apply = output<TimePickerValue>();\n  // eslint-disable-next-line @angular-eslint/no-output-native\n  cancel = output<void>();\n\n  constructor() {\n    // Auto-focus and clear errors when switching tabs\n    effect(() => {\n      const currentTab = this.activeTab();\n\n      // Clear validation errors when switching tabs\n      this.validationErrors.set([]);\n\n      // Clear focused field\n      this.focusedField.set(null);\n\n      // Auto-focus appropriate input\n      if (currentTab === '0') {\n        setTimeout(() => this.startDateInput?.nativeElement.focus(), 0);\n      } else if (currentTab === '1') {\n        setTimeout(() => this.selectedDayInput?.nativeElement.focus(), 0);\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    const initStart = this.initialStartDate();\n    const initEnd = this.initialEndDate();\n\n    if (initStart) {\n      this.startDate.set(initStart);\n      this.startDateDisplay.set(this.formatDate(initStart));\n      this.startTime.set(initStart);\n    }\n    if (initEnd) {\n      this.endDate.set(initEnd);\n      this.endDateDisplay.set(this.formatDate(initEnd));\n      this.endTime.set(initEnd);\n    }\n    if (initStart && initEnd) {\n      this.calendarDate.set([initStart, initEnd]);\n    } else if (initStart) {\n      this.calendarDate.set(initStart);\n    }\n\n    setTimeout(() => this.startDateInput?.nativeElement.focus(), 0);\n  }\n\n  /**\n   * Handle tab change event\n   */\n  onTabChange(value: string | number): void {\n    const tabValue = value.toString();\n    this.activeTab.set(tabValue);\n    // The effect will handle clearing errors and focusing\n  }\n\n  /**\n   * Check if a date is within the selected range (for range highlighting)\n   */\n  isDateInRange(date: Date): boolean {\n    const start = this.startDate();\n    const end = this.endDate();\n    if (!start || !end) return false;\n\n    const normalizedDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n    const normalizedStart = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n    const normalizedEnd = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\n    return normalizedDate >= normalizedStart && normalizedDate <= normalizedEnd;\n  }\n\n  /**\n   * Parse date string in DD/MM/YYYY format to Date object\n   */\n  private parseDate(dateStr: string): Date | null {\n    if (!dateStr || dateStr.trim() === '') return null;\n\n    const parts = dateStr.split('/');\n    if (parts.length !== 3) return null;\n\n    const day = Number.parseInt(parts[0], 10);\n    const month = Number.parseInt(parts[1], 10);\n    const year = Number.parseInt(parts[2], 10);\n\n    // Validate ranges\n    if (Number.isNaN(day) || Number.isNaN(month) || Number.isNaN(year)) return null;\n    if (day < 1 || day > 31) return null;\n    if (month < 1 || month > 12) return null;\n    if (year < 1900 || year > 2100) return null;\n\n    const date = new Date(year, month - 1, day);\n\n    // Check if date is valid (handles cases like 31/02/2024)\n    if (date.getDate() !== day || date.getMonth() !== month - 1 || date.getFullYear() !== year) {\n      return null;\n    }\n\n    return date;\n  }\n\n  formatDate(date: Date | null): string {\n    if (!date) return '';\n    return this.dtConfig.formatDate(date);\n  }\n\n  /**\n   * Validate date range (end date must be after start date)\n   */\n  private validateDateRange(): boolean {\n    const errors: DateValidationError[] = [];\n\n    const start = this.startDate();\n    const end = this.endDate();\n\n    if (start && end && end < start) {\n      errors.push({\n        field: 'endDate',\n        message: 'End date must be after start date'\n      });\n    }\n\n    this.validationErrors.set(errors);\n    return errors.length === 0;\n  }\n\n  /**\n   * Check if field has validation error\n   */\n  hasError(field: 'startDate' | 'endDate' | 'selectedDay'): boolean {\n    return this.validationErrors().some(error => error.field === field);\n  }\n\n  /**\n   * Handle start date input focus\n   */\n  onStartDateFocus(): void {\n    this.focusedField.set('startDate');\n  }\n\n  /**\n   * Handle start date input change - updates calendar in real-time as user types\n   */\n  onStartDateChange(): void {\n    const dateStr = this.startDateDisplay();\n    const parsed = this.parseDate(dateStr);\n\n    // Only update calendar if the date is valid (don't show errors while typing)\n    if (parsed) {\n      this.calendarDate.set(parsed);\n      this.validationErrors.set([]); // Clear any previous errors\n    }\n  }\n\n  /**\n   * Handle start date input blur (validate and parse)\n   */\n  onStartDateBlur(): void {\n    const dateStr = this.startDateDisplay();\n    const parsed = this.parseDate(dateStr);\n\n    if (dateStr && !parsed) {\n      // Invalid format\n      this.validationErrors.set([{\n        field: 'startDate',\n        message: 'Invalid date format. Use DD/MM/YYYY'\n      }]);\n    } else {\n      // Valid or empty\n      this.startDate.set(parsed);\n      this.startDateDisplay.set(this.formatDate(parsed));\n\n      // Update calendar display\n      if (parsed) {\n        this.calendarDate.set(parsed);\n      }\n\n      // Validate range\n      this.validateDateRange();\n\n      // Auto-focus end date if start date is valid and end is empty\n      if (parsed && !this.endDate()) {\n        setTimeout(() => this.endDateInput?.nativeElement.focus(), 0);\n      }\n\n      this.emitValue();\n    }\n\n    // Clear focused field\n    this.focusedField.set(null);\n  }\n\n  /**\n   * Handle end date input focus\n   */\n  onEndDateFocus(): void {\n    this.focusedField.set('endDate');\n  }\n\n  /**\n   * Handle end date input change - updates calendar in real-time as user types\n   */\n  onEndDateChange(): void {\n    const dateStr = this.endDateDisplay();\n    const parsed = this.parseDate(dateStr);\n\n    // Only update calendar if the date is valid (don't show errors while typing)\n    if (parsed) {\n      this.calendarDate.set(parsed);\n      this.validationErrors.set([]); // Clear any previous errors\n    }\n  }\n\n  /**\n   * Handle end date input blur (validate and parse)\n   */\n  onEndDateBlur(): void {\n    const dateStr = this.endDateDisplay();\n    const parsed = this.parseDate(dateStr);\n\n    if (dateStr && !parsed) {\n      // Invalid format\n      this.validationErrors.set([{\n        field: 'endDate',\n        message: 'Invalid date format. Use DD/MM/YYYY'\n      }]);\n    } else {\n      // Valid or empty\n      this.endDate.set(parsed);\n      this.endDateDisplay.set(this.formatDate(parsed));\n\n      // Update calendar display\n      if (parsed) {\n        this.calendarDate.set(parsed);\n      }\n\n      // Validate range\n      this.validateDateRange();\n\n      this.emitValue();\n    }\n\n    // Clear focused field\n    this.focusedField.set(null);\n  }\n\n  /**\n   * Handle selected day input focus (Daily tab)\n   */\n  onSelectedDayFocus(): void {\n    this.focusedField.set('selectedDay');\n  }\n\n  /**\n   * Handle selected day input change (Daily tab) - updates calendar in real-time as user types\n   */\n  onSelectedDayChange(): void {\n    const dateStr = this.selectedDayDisplay();\n    const parsed = this.parseDate(dateStr);\n\n    // Only update calendar if the date is valid (don't show errors while typing)\n    if (parsed) {\n      this.calendarDate.set(parsed);\n      this.validationErrors.set([]); // Clear any previous errors\n    }\n  }\n\n  /**\n   * Handle selected day input blur (Daily tab)\n   */\n  onSelectedDayBlur(): void {\n    const dateStr = this.selectedDayDisplay();\n    const parsed = this.parseDate(dateStr);\n\n    if (dateStr && !parsed) {\n      // Invalid format\n      this.validationErrors.set([{\n        field: 'selectedDay',\n        message: 'Invalid date format. Use DD/MM/YYYY'\n      }]);\n    } else {\n      // Valid or empty\n      this.selectedDay.set(parsed);\n      this.selectedDayDisplay.set(this.formatDate(parsed));\n\n      // Update calendar display\n      if (parsed) {\n        this.calendarDate.set(parsed);\n      }\n\n      this.emitValue();\n    }\n\n    // Clear focused field\n    this.focusedField.set(null);\n  }\n\n  /**\n   * Handle calendar date selection\n   */\n  onDateSelect(date: Date): void {\n    if (this.activeTab() === '0') {\n      // Absolute tab - handle based on focused field\n      const focused = this.focusedField();\n\n      if (focused === 'startDate') {\n        // Update start date only\n        this.startDate.set(date);\n        this.startDateDisplay.set(this.formatDate(date));\n\n        // Auto-focus end date if it's empty\n        if (!this.endDate()) {\n          setTimeout(() => this.endDateInput?.nativeElement.focus(), 0);\n        }\n      } else if (focused === 'endDate') {\n        // Update end date only\n        this.endDate.set(date);\n        this.endDateDisplay.set(this.formatDate(date));\n      } else {\n        // No field focused - default behavior\n        // If no start date, set as start\n        if (!this.startDate()) {\n          this.startDate.set(date);\n          this.startDateDisplay.set(this.formatDate(date));\n          // Auto-focus end date input\n          setTimeout(() => this.endDateInput?.nativeElement.focus(), 0);\n        } else if (!this.endDate()) {\n          // Start exists but no end - set as end\n          this.endDate.set(date);\n          this.endDateDisplay.set(this.formatDate(date));\n        } else {\n          // Both exist - reset to new start\n          this.startDate.set(date);\n          this.startDateDisplay.set(this.formatDate(date));\n          this.endDate.set(null);\n          this.endDateDisplay.set('');\n          // Auto-focus end date input\n          setTimeout(() => this.endDateInput?.nativeElement.focus(), 0);\n        }\n      }\n\n      // Clear validation errors when selecting from calendar\n      this.validationErrors.set([]);\n      this.validateDateRange();\n\n      // Update calendar display to show both dates for range visualization\n      const start = this.startDate();\n      const end = this.endDate();\n      if (start && end) {\n        this.calendarDate.set([start, end]);\n      } else if (start) {\n        this.calendarDate.set([start]);\n      } else {\n        this.calendarDate.set(null);\n      }\n    } else if (this.activeTab() === '1') {\n      // Daily tab - single date selection\n      this.selectedDay.set(date);\n      this.selectedDayDisplay.set(this.formatDate(date));\n      this.calendarDate.set(date);\n    }\n\n    this.emitValue();\n  }\n\n  /**\n   * Handle Cancel button\n   */\n  onCancel(): void {\n    this.cancel.emit();\n  }\n\n  /**\n   * Handle Apply button\n   */\n  onApply(): void {\n    // Validate before applying\n    if (this.activeTab() === '0') {\n      if (!this.validateDateRange()) {\n        return; // Don't apply if validation fails\n      }\n    }\n\n    this.apply.emit(this.getCurrentValue());\n  }\n\n  /**\n   * Get current picker value\n   */\n  private getCurrentValue(): TimePickerValue {\n    return {\n      startDate: this.startDate(),\n      startTime: this.startTime(),\n      endDate: this.endDate(),\n      endTime: this.endTime(),\n      selectedDay: this.selectedDay(),\n      activeTab: this.activeTab() === '0' ? 'absolute' : 'daily'\n    };\n  }\n\n  /**\n   * Emit value change\n   */\n  private emitValue(): void {\n    this.valueChange.emit(this.getCurrentValue());\n  }\n}\n","<!-- Figma Time Picker Component - Exact Structure from Figma -->\n<div class=\"figma-timepicker-wrapper\">\n  <p-tabs [value]=\"activeTab()\" (valueChange)=\"onTabChange($event)\" styleClass=\"figma-timepicker\">\n    <!-- Tab Headers -->\n    <p-tablist>\n      <p-tab value=\"0\">Absolute</p-tab>\n      <p-tab value=\"1\">Daily</p-tab>\n    </p-tablist>\n\n    <!-- Tab Content -->\n    <p-tabpanels>\n      <!-- Absolute Tab -->\n      <p-tabpanel value=\"0\">\n        <!-- Input Section: Start/End rows -->\n        <div class=\"figma-inputs-section\">\n          <!-- Start Row -->\n          <div class=\"figma-input-row\">\n            <label class=\"figma-label\" for=\"startDateInput\">Start</label>\n            <div class=\"figma-input-pair\">\n              <input\n                id=\"startDateInput\"\n                #startDateInput\n                type=\"text\"\n                pInputText\n                [ngModel]=\"startDateDisplay()\"\n                (ngModelChange)=\"startDateDisplay.set($event); onStartDateChange()\"\n                (focus)=\"onStartDateFocus()\"\n                (blur)=\"onStartDateBlur()\"\n                placeholder=\"DD/MM/YYYY\"\n                class=\"figma-date-input tw-w-[136px] tw-min-w-[136px] tw-max-w-[136px] tw-text-center\"\n                [class.input-error]=\"hasError('startDate')\"\n              />\n              <p-datepicker\n                [timeOnly]=\"true\"\n                [ngModel]=\"startTime()\"\n                (ngModelChange)=\"startTime.set($event)\"\n                placeholder=\"12:00 am\"\n                appendTo=\"body\"\n                panelStyleClass=\"figma-time-dropdown\"\n                styleClass=\"tw-w-[72px]\"\n              />\n            </div>\n          </div>\n\n          <!-- End Row -->\n          <div class=\"figma-input-row\">\n            <label class=\"figma-label\" for=\"endDateInput\">End</label>\n            <div class=\"figma-input-pair\">\n              <input\n                id=\"endDateInput\"\n                #endDateInput\n                type=\"text\"\n                pInputText\n                [ngModel]=\"endDateDisplay()\"\n                (ngModelChange)=\"endDateDisplay.set($event); onEndDateChange()\"\n                (focus)=\"onEndDateFocus()\"\n                (blur)=\"onEndDateBlur()\"\n                placeholder=\"DD/MM/YYYY\"\n                class=\"figma-date-input tw-w-[136px] tw-min-w-[136px] tw-max-w-[136px] tw-text-center\"\n                [class.input-error]=\"hasError('endDate')\"\n              />\n              <p-datepicker\n                [timeOnly]=\"true\"\n                [ngModel]=\"endTime()\"\n                (ngModelChange)=\"endTime.set($event)\"\n                placeholder=\"12:00 am\"\n                appendTo=\"body\"\n                panelStyleClass=\"figma-time-dropdown\"\n                styleClass=\"tw-w-[72px]\"\n              />\n            </div>\n          </div>\n\n          <!-- Validation Error Messages -->\n          @for (error of validationErrors(); track error.field) {\n            <div class=\"validation-error\">\n              {{ error.message }}\n            </div>\n          }\n        </div>\n\n        <!-- Calendar Section -->\n        <div class=\"figma-calendar-container\" [attr.data-start-date]=\"startDate() ? formatDate(startDate()!) : null\" [attr.data-end-date]=\"endDate() ? formatDate(endDate()!) : null\">\n          <p-datepicker\n            [ngModel]=\"calendarDate()\"\n            (onSelect)=\"onDateSelect($event)\"\n            [inline]=\"true\"\n            [showIcon]=\"false\"\n            [readonlyInput]=\"true\"\n            selectionMode=\"range\"\n            panelStyleClass=\"tw-border-none\"\n            styleClass=\"sc-datepicker-inline\"\n          />\n        </div>\n      </p-tabpanel>\n\n      <!-- Daily Tab -->\n      <p-tabpanel value=\"1\">\n        <!-- Select Day Input -->\n        <div class=\"figma-inputs-section figma-daily-inputs\">\n          <div class=\"figma-input-row figma-daily-row\">\n            <label class=\"figma-label\" for=\"selectedDayInput\">Select day</label>\n            <div class=\"figma-input-single\">\n              <input\n                id=\"selectedDayInput\"\n                #selectedDayInput\n                type=\"text\"\n                pInputText\n                [ngModel]=\"selectedDayDisplay()\"\n                (ngModelChange)=\"selectedDayDisplay.set($event); onSelectedDayChange()\"\n                (focus)=\"onSelectedDayFocus()\"\n                (blur)=\"onSelectedDayBlur()\"\n                placeholder=\"DD/MM/YYYY\"\n                class=\"figma-date-input tw-w-[136px] tw-min-w-[136px] tw-max-w-[136px] tw-text-center\"\n                [class.input-error]=\"hasError('selectedDay')\"\n              />\n            </div>\n          </div>\n\n          <!-- Validation Error Messages -->\n          @for (error of validationErrors(); track error.field) {\n            <div class=\"validation-error\">\n              {{ error.message }}\n            </div>\n          }\n        </div>\n\n        <!-- Calendar Section -->\n        <div class=\"figma-calendar-container\">\n          <p-datepicker\n            [ngModel]=\"calendarDate()\"\n            (onSelect)=\"onDateSelect($event)\"\n            [inline]=\"true\"\n            [showIcon]=\"false\"\n            panelStyleClass=\"tw-border-none\"\n            [readonlyInput]=\"true\"\n            styleClass=\"sc-datepicker-inline\"\n          />\n        </div>\n      </p-tabpanel>\n    </p-tabpanels>\n  </p-tabs>\n\n  <!-- Footer Buttons -->\n  <div class=\"figma-footer\">\n    <button\n      pButton\n      type=\"button\"\n      label=\"Cancel\"\n      size=\"small\"\n      severity=\"secondary\"\n      [text]=\"true\"\n      class=\"figma-cancel-btn !tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-[28px]\"\n      (click)=\"onCancel()\">\n    </button>\n    <button\n      pButton\n      type=\"button\"\n      label=\"Apply\"\n      size=\"small\"\n      severity=\"primary\"\n      class=\"!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-[28px]\"\n      (click)=\"onApply()\">\n    </button>\n  </div>\n</div>\n","// Public API for sc-datepicker component\nexport { ScDatepickerComponent } from './sc-datepicker.component';\nexport type { TimePickerValue, DateValidationError } from './sc-datepicker.component';\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  computed,\n  effect,\n} from '@angular/core';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { FormsModule } from '@angular/forms';\nimport { ScDatepickerComponent, TimePickerValue } from '../sc-datepicker';\nimport { DateTimeConfigService } from '../localization/services/datetime-config.service';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport type PresetValue = '15m' | '30m' | '1h' | '5h' | '12h' | '24h' | '7d' | '1M';\n\nexport type TimeRangeValue =\n  | { mode: 'preset'; preset: PresetValue; start: Date; end: Date }\n  | { mode: 'absolute'; start: Date; end: Date }\n  | { mode: 'daily'; day: Date };\n\nexport interface RangeOption {\n  label: string;\n  value: string;\n  icon?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Preset definitions\n// ---------------------------------------------------------------------------\n\nconst RANGE_OPTIONS: RangeOption[] = [\n  { label: 'Custom', value: 'custom', icon: 'pi pi-calendar' },\n  { label: '15m', value: '15m' },\n  { label: '30m', value: '30m' },\n  { label: '1HR', value: '1h' },\n  { label: '5HR', value: '5h' },\n  { label: '12HR', value: '12h' },\n  { label: '24HR', value: '24h' },\n  { label: '7D', value: '7d' },\n  { label: '1M', value: '1M' },\n];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n@Component({\n  selector: 'sc-time-range-picker',\n  imports: [FormsModule, SelectButtonModule, ScDatepickerComponent],\n  templateUrl: './time-range-picker.component.html',\n  styleUrl: './time-range-picker.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimeRangePickerComponent {\n  // -- Inputs / Outputs -----------------------------------------------------\n\n  /** Initial value (optional — sets the control on first render). */\n  readonly value = input<TimeRangeValue | undefined>(undefined);\n\n  /** When provided, only these presets (plus Custom) are shown. Empty/undefined = show all. */\n  readonly allowedPresets = input<PresetValue[] | undefined>(undefined);\n\n  /** Emits whenever the user commits a new range (preset click or Apply). */\n  readonly valueChange = output<TimeRangeValue>();\n\n  // -- State ----------------------------------------------------------------\n\n  private readonly el = inject(ElementRef);\n  private readonly dtConfig = inject(DateTimeConfigService);\n  readonly rangeOptions = computed(() => {\n    const allowed = this.allowedPresets();\n    if (!allowed || allowed.length === 0) return RANGE_OPTIONS;\n    const allowedSet = new Set<string>(allowed);\n    allowedSet.add('custom');\n    return RANGE_OPTIONS.filter((o) => allowedSet.has(o.value));\n  });\n  readonly selectedRange = signal<string>('5h');\n  readonly showDatepicker = signal(false);\n  readonly appliedCustomRange = signal<{ start: Date; end: Date } | null>(null);\n\n  readonly overlayTop = signal(0);\n  readonly overlayLeft = signal(0);\n\n  readonly customButtonLabel = computed(() => {\n    const range = this.appliedCustomRange();\n    if (!range) return 'Custom';\n\n    const startStr = this.dtConfig.formatDate(range.start);\n    const endStr = this.dtConfig.formatDate(range.end);\n    return startStr === endStr ? startStr : `${startStr} – ${endStr}`;\n  });\n\n  // -- Lifecycle ------------------------------------------------------------\n\n  constructor() {\n    // Defer reading the input until it's resolved (after first CD).\n    queueMicrotask(() => this.initFromValue());\n\n    // Continuously track the segmented control's position while the overlay\n    // is visible. This keeps the fixed overlay aligned when the nav sidebar\n    // opens/closes or the window is resized.\n    effect((onCleanup) => {\n      if (this.showDatepicker()) {\n        let rafId: number;\n        const track = () => {\n          this.computeOverlayPosition();\n          rafId = requestAnimationFrame(track);\n        };\n        rafId = requestAnimationFrame(track);\n        onCleanup(() => cancelAnimationFrame(rafId));\n      }\n    });\n  }\n\n  // -- Handlers -------------------------------------------------------------\n\n  /** Segment button click — intercept Custom to toggle overlay. */\n  onSegmentClick(event: Event, value: string): void {\n    if (value === 'custom' && this.selectedRange() === 'custom') {\n      this.showDatepicker.update((v) => !v);\n    }\n  }\n\n  /** SelectButton (onChange) — preset or custom selected. */\n  onRangeChange(event: { value?: string }): void {\n    const selected = event.value;\n    if (!selected) return;\n    this.selectedRange.set(selected);\n\n    if (selected === 'custom') {\n      this.showDatepicker.set(true);\n    } else {\n      this.showDatepicker.set(false);\n      this.emitPreset(selected as PresetValue);\n    }\n  }\n\n  /** ScDatepicker → Apply. */\n  onFigmaPickerApply(value: TimePickerValue): void {\n    if (\n      value.activeTab === 'absolute' &&\n      value.startDate &&\n      value.endDate &&\n      value.startTime &&\n      value.endTime\n    ) {\n      const start = mergeDateAndTime(value.startDate, value.startTime);\n      const end = mergeDateAndTime(value.endDate, value.endTime);\n      this.appliedCustomRange.set({ start, end });\n      this.valueChange.emit({ mode: 'absolute', start, end });\n    } else if (value.activeTab === 'daily' && value.selectedDay) {\n      this.appliedCustomRange.set({\n        start: value.selectedDay,\n        end: value.selectedDay,\n      });\n      this.valueChange.emit({ mode: 'daily', day: value.selectedDay });\n    }\n    this.showDatepicker.set(false);\n  }\n\n  /** ScDatepicker → Cancel. */\n  onFigmaPickerCancel(): void {\n    if (!this.appliedCustomRange()) {\n      this.selectedRange.set('5h');\n    }\n    this.showDatepicker.set(false);\n  }\n\n  // -- Private --------------------------------------------------------------\n\n  /** Measure the segmented control and set fixed overlay position. */\n  private computeOverlayPosition(): void {\n    const trigger = this.el.nativeElement.querySelector(\n      '.trp-segmented-control'\n    );\n    if (trigger) {\n      const rect = trigger.getBoundingClientRect();\n      this.overlayTop.set(Math.round(rect.bottom + 8));\n      this.overlayLeft.set(Math.round(rect.left));\n    }\n  }\n\n  private initFromValue(): void {\n    const val = this.value();\n    if (!val) return;\n\n    if (val.mode === 'preset') {\n      this.selectedRange.set(val.preset);\n    } else if (val.mode === 'absolute') {\n      this.selectedRange.set('custom');\n      this.appliedCustomRange.set({ start: val.start, end: val.end });\n    } else if (val.mode === 'daily') {\n      this.selectedRange.set('custom');\n      this.appliedCustomRange.set({ start: val.day, end: val.day });\n    }\n  }\n\n  private emitPreset(preset: PresetValue): void {\n    const { start, end } = calculatePresetRange(preset);\n    this.valueChange.emit({ mode: 'preset', preset, start, end });\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Pure helpers (no side effects, easily testable)\n// ---------------------------------------------------------------------------\n\nfunction mergeDateAndTime(date: Date, time: Date): Date {\n  const merged = new Date(date);\n  merged.setHours(time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n  return merged;\n}\n\nfunction calculatePresetRange(preset: PresetValue): { start: Date; end: Date } {\n  const now = new Date();\n  const start = new Date(now);\n\n  const offsets: Record<PresetValue, () => void> = {\n    '15m': () => start.setMinutes(start.getMinutes() - 15),\n    '30m': () => start.setMinutes(start.getMinutes() - 30),\n    '1h': () => start.setHours(start.getHours() - 1),\n    '5h': () => start.setHours(start.getHours() - 5),\n    '12h': () => start.setHours(start.getHours() - 12),\n    '24h': () => start.setDate(start.getDate() - 1),\n    '7d': () => start.setDate(start.getDate() - 7),\n    '1M': () => start.setMonth(start.getMonth() - 1),\n  };\n\n  offsets[preset]();\n  return { start, end: now };\n}\n","<div class=\"trp-container\">\n  <!-- Segmented control: presets + Custom -->\n  <div class=\"trp-segmented-control\">\n    <p-selectButton\n      size=\"small\"\n      [options]=\"rangeOptions()\"\n      [(ngModel)]=\"selectedRange\"\n      (onChange)=\"onRangeChange($event)\"\n      optionLabel=\"label\"\n      optionValue=\"value\"\n      [multiple]=\"false\"\n      [allowEmpty]=\"false\">\n      <ng-template let-item pTemplate=\"item\">\n        <div class=\"trp-segment-content\"\n             role=\"button\"\n             tabindex=\"0\"\n             (click)=\"onSegmentClick($event, item.value)\"\n             (keydown.enter)=\"onSegmentClick($event, item.value)\"\n             (keydown.space)=\"onSegmentClick($event, item.value)\">\n          @if (item.icon) {\n            <i [class]=\"item.icon\"></i>\n          }\n          <span>{{ item.value === 'custom' ? customButtonLabel() : item.label }}</span>\n        </div>\n      </ng-template>\n    </p-selectButton>\n  </div>\n\n  <!-- Custom datepicker overlay -->\n  @if (showDatepicker()) {\n    <div class=\"trp-custom-picker-overlay\"\n         [style.top.px]=\"overlayTop()\"\n         [style.left.px]=\"overlayLeft()\">\n      <sc-datepicker\n        [initialStartDate]=\"appliedCustomRange()?.start ?? null\"\n        [initialEndDate]=\"appliedCustomRange()?.end ?? null\"\n        (apply)=\"onFigmaPickerApply($event)\"\n        (cancel)=\"onFigmaPickerCancel()\" />\n    </div>\n  }\n</div>\n","/**\n * ============================================================================\n * FILTER BAR MODELS - AELLA UI INTEGRATION\n * ============================================================================\n *\n * ⚠️ CRITICAL: This filter bar is integrated into Aella UI (Starlight XDR Platform)\n *\n * DO NOT MODIFY WITHOUT CONSULTING AELLA UI TEAM:\n * - These models are used extensively in Aella's dashboard and filtering system\n * - Breaking changes will cause compilation errors in Aella UI\n * - The AellaFilterDefinition discriminated union is the PRIMARY model\n * - Changes to field names, types, or structure require coordinated updates\n *\n * INTEGRATION POINTS IN AELLA UI:\n * - libs/dashboard/ui/src/lib/dashboard-viewer/ - Dashboard filtering\n * - libs/shared/ui/sc-global-filter/ - Global filter bar adapter\n * - libs/dashboard/utils/src/lib/field-to-filter-transformer.util.ts\n * - server/src/services/charts/ - Backend chart data processing\n *\n * BEFORE MAKING CHANGES:\n * 1. Review the integration guide in Aella UI: docs/ui-kit-filter-bar-integration-context.md\n * 2. Test changes in Aella UI build: npm run develop_local\n * 3. Coordinate with Stellar Cyber backend team for API compatibility\n *\n * ARCHITECTURE:\n * - Discriminated union pattern with `filterType` discriminator\n * - Each filter type has specific required fields (from, to, min, max, etc.)\n * - All filters support dual-mode: included[] AND excluded[] arrays\n * - Options can be static (staticOptions) or async (optionsLoader)\n *\n * ============================================================================\n */\n\n/**\n * Filter value types supported by the filter bar\n *\n * ⚠️ DO NOT REMOVE OR RENAME - Used by Aella UI field type mapping\n */\nexport type FilterValueType =\n  | 'checkbox'            // Multi-select checkboxes - Maps to ES keyword/text fields\n  | 'date-range'          // Date range picker - Maps to ES date fields\n  | 'number-range'        // Number range inputs - Maps to ES long/integer/float fields\n  | 'radio'               // Single-select radio buttons - Maps to ES keyword fields\n  | 'number-range-slider' // Slider with step config - Used for predefined ranges\n  | 'text-input'          // Text input field - Maps to ES text fields\n  | 'number-input'        // Single number input - Maps to ES numeric fields\n  | 'toggle'              // Boolean switch - Maps to ES boolean fields\n  | 'tree'                // Hierarchical tree select - For nested taxonomies\n  | 'query'               // Query template selector - For saved queries\n  | 'autocomplete';       // Autocomplete with async search - For large datasets (1500+ fields)\n\n/**\n * ============================================================================\n * \"ADD FILTER\" FEATURE TYPES (UI-Kit Internal Use Only)\n * ============================================================================\n *\n * ⚠️ FOR AELLA UI INTEGRATION - DO NOT USE THESE TYPES\n *\n * These types power UI-Kit's internal \"Add Filter\" browsing feature:\n * - AddFilterPopoverComponent - Category/property discovery UI\n * - FilterPropertySelectorComponent - Filter selection interface\n *\n * AELLA UI INTEGRATION STATUS:\n * ❌ Does NOT use: categories input\n * ❌ Does NOT use: properties input\n * ❌ Does NOT use: AddFilterPopoverComponent\n * ✅ ONLY uses: filters input with AellaFilterDefinition[]\n *\n * WHY AELLA DOESN'T USE THESE:\n * - Aella has its own filter panel UI (sc-global-filter-panel)\n * - Aella creates filters from ES field mappings (field-to-filter-transformer)\n * - Aella uses dual-mode filtering (included[] + excluded[])\n *\n * USE FOR AELLA UI:\n * - AellaFilterDefinition[] (filters input)\n * - No categories/properties needed\n *\n * ============================================================================\n */\n\n/**\n * Filter category for organizing filters into logical groups\n *\n * ✅ RECOMMENDED FOR AELLA UI - Organize 1500+ filters by category\n * ✅ UI-Kit Standalone: ACTIVE (used by AddFilterPopoverComponent)\n *\n * CURRENT AELLA UI STATE:\n * - Currently uses flat list in p-multiSelect (lines 8-22 in sc-global-filter-panel)\n * - All 1500+ filters in one dropdown = poor UX\n *\n * RECOMMENDED AELLA UI IMPROVEMENT:\n * ```typescript\n * // Define filter categories\n * const FILTER_CATEGORIES: FilterCategory[] = [\n *   { id: 'alert', label: 'Alert Filters', icon: 'pi pi-bell', badge: '25' },\n *   { id: 'network', label: 'Network Filters', icon: 'pi pi-globe', badge: '150' },\n *   { id: 'user', label: 'User Filters', icon: 'pi pi-user', badge: '30' },\n *   { id: 'system', label: 'System Fields', icon: 'pi pi-cog', badge: '50' },\n *   { id: 'time', label: 'Time Fields', icon: 'pi pi-clock', badge: '10' },\n *   { id: 'dynamic', label: 'ES Dynamic Fields', icon: 'pi pi-database', badge: '1500+' }\n * ];\n *\n * // Assign category to each filter in field-to-filter-transformer\n * function getCategoryForField(field: string): string {\n *   if (field.startsWith('alert_')) return 'alert';\n *   if (field.includes('_ip') || field.includes('port')) return 'network';\n *   if (field.includes('user') || field.includes('username')) return 'user';\n *   // ... etc\n *   return 'dynamic'; // Default for unmapped ES fields\n * }\n *\n * // Update UI to use accordion with categories\n * <p-accordion>\n *   <p-accordion-panel *ngFor=\"let category of FILTER_CATEGORIES\">\n *     <p-accordion-header>\n *       <i [class]=\"category.icon\"></i> {{ category.label }}\n *       <p-badge [value]=\"category.badge\" />\n *     </p-accordion-header>\n *     <p-accordion-content>\n *       <p-listbox [options]=\"filtersByCategory[category.id]\" />\n *     </p-accordion-content>\n *   </p-accordion-panel>\n * </p-accordion>\n * ```\n *\n * BENEFITS:\n * - Better filter discovery (browse by category instead of searching)\n * - Reduced cognitive load (fewer filters per view)\n * - Visual hierarchy (icons + badges)\n * - Faster navigation (expand only relevant category)\n */\nexport interface FilterCategory {\n  id: string;              // Unique category ID (e.g., 'alert', 'network')\n  label: string;           // Display name (e.g., 'Alert Filters')\n  badge?: string;          // 2-char abbreviation for visual identification (e.g., 'AL', 'NW', 'TH')\n                           // Displays in 24px circle with 10px font - keep to 2 characters\n  badgeColor?: string;     // PrimeNG CSS variable (e.g., 'var(--p-red-500)', 'var(--p-blue-500)')\n  icon?: string;           // PrimeNG icon class (e.g., 'pi pi-bell')\n}\n\n/**\n * Filter property for \"Add Filter\" browsing UI\n *\n * ⚠️ AELLA UI: DO NOT USE (not part of integration)\n * ✅ UI-Kit Standalone: ACTIVE (used by FilterPropertySelectorComponent)\n *\n * Example: \"Severity\" property under \"Alert\" category\n */\nexport interface FilterProperty {\n  id: string;                           // Unique property ID\n  label: string;                        // Display name\n  categories: FilterCategory[];         // Parent categories (a field can belong to multiple)\n  /** @deprecated Use `categories` array instead. Kept for backward compatibility. */\n  category?: FilterCategory;            // Primary category (first of categories[])\n  valueType: FilterValueType;           // Filter type (checkbox, date-range, etc.)\n  dataType?: string;                    // Display label for trailing type indicator (e.g. 'string', 'numeric', 'enriched')\n                                        // Falls back to deriving from valueType if omitted\n  badge?: string;                       // Badge text\n  badgeColor?: string;                  // Badge color\n  description?: string;                 // Help text\n  trackedAs?: string;                   // Backend field name\n  example?: string;                     // Example value\n  usageCount?: number;                  // Usage statistics\n  volumeLabel?: string;                 // Data volume label\n  availableValues?: string[];           // Predefined values\n  filterOptions?: FilterOption[];       // Rich options with icons/counts\n  optionsLoader?: FilterOptionsLoader;  // Async loader\n  range?: { min: number; max: number; step?: number }; // For number ranges\n  recent?: boolean;                     // Recently used indicator\n}\n\n/**\n * Filter mode for single-mode filtering\n *\n * ⚠️ AELLA UI: DO NOT USE (use included[] + excluded[] arrays instead)\n * ✅ UI-Kit Standalone: ACTIVE (used by AddFilterPopoverComponent)\n *\n * Single-mode: filter can be EITHER include OR exclude (not both)\n * Dual-mode (Aella): filter supports BOTH included[] AND excluded[] arrays\n */\nexport type FilterMode = 'include' | 'exclude';\n\n/**\n * Legacy single-mode filter definition\n *\n * ⚠️ AELLA UI: DO NOT USE (use AellaFilterDefinition instead)\n * ✅ UI-Kit Standalone: SUPPORTED (backward compatibility in FilterChipComponent)\n *\n * This represents the OLD filtering model where a filter is EITHER include OR exclude.\n * Aella UI requires dual-mode (both included[] and excluded[] simultaneously).\n *\n * DIFFERENCES FROM AellaFilterDefinition:\n * 1. Uses category/property nesting (vs. flat field)\n * 2. Has mode: 'include' | 'exclude' (vs. included[] + excluded[])\n * 3. Has values[] array (vs. type-specific arrays)\n * 4. Less type-safe (no discriminated union)\n *\n * For new implementations, use AellaFilterDefinition.\n */\n/**\n * Async options loader for dynamic filter options\n *\n * ⚠️ CRITICAL FOR AELLA UI:\n * - Used to load 1500+ Elasticsearch field mappings dynamically\n * - Must return FilterOption[] array\n * - Can be sync or async (Promise)\n * - DO NOT change the signature without updating Aella UI adapter\n */\nexport type FilterOptionsLoader = (\n  field: string,\n  context?: FilterContext\n) => Promise<FilterOption[]> | FilterOption[];\n\n/**\n * Filter option interface - represents a single selectable option\n *\n * ⚠️ CRITICAL FOR AELLA UI:\n * - `label`: Display text (REQUIRED)\n * - `value`: Actual value sent to backend (REQUIRED)\n * - `count`: Number of results (optional, used by Aella for ES aggregations)\n * - `badge`: Alternative to count, formatted string like \"1.2K\" (optional)\n * - `icon`: PrimeNG icon class like \"pi pi-user\" (optional)\n *\n * DO NOT REMOVE: label, value properties\n */\nexport interface FilterOption {\n  label: string;           // Display text - REQUIRED\n  name?: string;           // Alias for label (backward compat)\n  value: string | number | boolean; // Actual value - REQUIRED\n  count?: number;          // Result count from ES aggregations\n  icon?: string;           // PrimeNG icon class\n  badge?: string;          // Formatted count like \"1.2K\"\n  disabled?: boolean;      // Disable option\n  children?: FilterOption[]; // For tree type filters\n}\n\n/**\n * Context passed to async options loaders\n *\n * ⚠️ USED BY AELLA UI for contextual filtering\n */\nexport interface FilterContext {\n  entity?: { id: string; type?: string };\n  timeRange?: { from: Date; to: Date };\n  existingFilters?: Record<string, any>;\n  searchQuery?: string;\n}\n\n/**\n * Slider configuration for number-range-slider type\n *\n * ⚠️ USED BY AELLA UI for predefined ranges like Risk Score (0-100)\n */\nexport interface SliderConfig {\n  min: number;\n  max: number;\n  step?: number;\n  unit?: string;\n}\n\n/**\n * Tree node for hierarchical tree type filters\n *\n * ⚠️ USED BY AELLA UI for MITRE ATT&CK taxonomy\n */\nexport interface TreeNode {\n  label: string;\n  value: string;\n  icon?: string;\n  children?: TreeNode[];\n  selectable?: boolean;\n  expanded?: boolean;\n}\n\n// ============================================================================\n// AELLA FILTER DEFINITION - PRIMARY MODEL\n// ============================================================================\n/**\n * This discriminated union is the MAIN filter model used by:\n * - FilterBarComponent (this UI-Kit)\n * - Aella UI dashboard system\n * - Elasticsearch query builder\n *\n * ⚠️ CRITICAL ARCHITECTURE DECISIONS:\n *\n * 1. DISCRIMINATED UNION PATTERN:\n *    - Uses `filterType` as the discriminator\n *    - TypeScript narrows types based on filterType\n *    - Ensures type safety across the entire filter system\n *\n * 2. DUAL-MODE FILTERING (included[] + excluded[]):\n *    - ALL filter types support BOTH included and excluded arrays\n *    - This enables complex security queries: \"Show Critical OR High severity, BUT NOT false positives\"\n *    - Backend maps to ES boolean queries: must/must_not clauses\n *\n * 3. FIELD-BASED (not category/property):\n *    - Uses `field` instead of category/property for direct ES field mapping\n *    - Simpler model, less nesting\n *    - Direct correlation to Elasticsearch field names\n *\n * 4. OPTIONS LOADING:\n *    - `staticOptions`: For small, predefined lists (< 100 items)\n *    - `optionsLoader`: For large, dynamic lists (1500+ ES fields in Aella)\n *\n * ⚠️ DO NOT MODIFY without testing in Aella UI:\n * - Field name changes break ES query mapping\n * - Type changes break discriminated union narrowing\n * - Removing fields breaks adapter components\n */\n\n/**\n * Base properties shared by ALL filter types\n *\n * ⚠️ REQUIRED FIELDS (cannot be removed):\n * - id: Unique identifier for the filter\n * - field: Elasticsearch field name (e.g., \"severity\", \"src_ip.keyword\")\n * - label: Display name for the filter\n * - filterType: Discriminator for type narrowing\n * - included: Array of included values\n * - excluded: Array of excluded values\n */\ninterface BaseAellaFilter {\n  id: string;           // ⚠️ REQUIRED - Unique filter identifier\n  field: string;        // ⚠️ REQUIRED - ES field name\n  label: string;        // ⚠️ REQUIRED - Display label\n\n  // Category assignment (optional but RECOMMENDED for Aella UI)\n  categoryId?: string;  // Category ID for grouping (e.g., 'alert', 'network', 'user')\n                        // Used by Aella UI to organize 1500+ filters into logical groups\n\n  // UI configuration (optional)\n  placeholder?: string;\n  searchable?: boolean;\n  virtualScroll?: boolean;\n  virtualScrollItemSize?: number;\n  tooltip?: string;\n  icon?: string;\n  badge?: string;\n  disabled?: boolean;\n  required?: boolean;\n}\n\n/**\n * Checkbox filter - Multi-select with checkboxes\n *\n * ⚠️ AELLA UI USAGE:\n * - Most common filter type (~80% of filters)\n * - Maps to ES keyword/text fields\n * - Example: Severity (Critical, High, Medium, Low)\n *\n * REQUIRED: filterType, included, excluded, multiSelect\n */\nexport interface CheckboxFilter extends BaseAellaFilter {\n  filterType: 'checkbox';                           // ⚠️ REQUIRED - Discriminator\n  included: (string | number | boolean)[];          // ⚠️ REQUIRED - Selected values\n  excluded: (string | number | boolean)[];          // ⚠️ REQUIRED - Excluded values\n  multiSelect: true;                                // ⚠️ REQUIRED - Always true for checkbox\n  staticOptions?: FilterOption[];                   // Static options (< 100 items)\n  optionsLoader?: FilterOptionsLoader;              // OR async loader (1500+ fields)\n}\n\n/**\n * Radio filter - Single-select with radio buttons\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for mutually exclusive options\n * - Maps to ES keyword fields\n * - Example: Confidence (Confirmed, Likely, Possible)\n *\n * REQUIRED: filterType, included, excluded, multiSelect\n */\nexport interface RadioFilter extends BaseAellaFilter {\n  filterType: 'radio';                              // ⚠️ REQUIRED - Discriminator\n  included: (string | number | boolean)[];          // ⚠️ REQUIRED - Max 1 item\n  excluded: (string | number | boolean)[];          // ⚠️ REQUIRED - Max 1 item\n  multiSelect: false;                               // ⚠️ REQUIRED - Always false for radio\n  staticOptions?: FilterOption[];\n  optionsLoader?: FilterOptionsLoader;\n}\n\n/**\n * Autocomplete filter - Async search with autocomplete\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for large datasets (IP addresses, usernames)\n * - Loads options dynamically as user types\n * - Requires optionsLoader (not staticOptions)\n *\n * REQUIRED: filterType, included, excluded, optionsLoader\n */\nexport interface AutocompleteFilter extends BaseAellaFilter {\n  filterType: 'autocomplete';                       // ⚠️ REQUIRED - Discriminator\n  included: (string | number | boolean)[];          // ⚠️ REQUIRED\n  excluded: (string | number | boolean)[];          // ⚠️ REQUIRED\n  multiSelect?: boolean;                            // Optional - defaults to true\n  optionsLoader: FilterOptionsLoader;               // ⚠️ REQUIRED - Async loader\n}\n\n/**\n * Tree filter - Hierarchical tree selection\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for MITRE ATT&CK taxonomy (Tactics > Techniques > Sub-techniques)\n * - Requires treeNodes with parent-child relationships\n *\n * REQUIRED: filterType, included, excluded, treeNodes\n */\nexport interface TreeFilter extends BaseAellaFilter {\n  filterType: 'tree';                               // ⚠️ REQUIRED - Discriminator\n  included: (string | number | boolean)[];          // ⚠️ REQUIRED\n  excluded: (string | number | boolean)[];          // ⚠️ REQUIRED\n  multiSelect?: boolean;\n  treeNodes: TreeNode[];                            // ⚠️ REQUIRED - Hierarchical structure\n}\n\n/**\n * Text input filter - Single text input field\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for text search filters (hostname, username)\n * - Maps to ES text/keyword fields\n *\n * REQUIRED: filterType, included, excluded\n */\nexport interface TextInputFilter extends BaseAellaFilter {\n  filterType: 'text-input';                         // ⚠️ REQUIRED - Discriminator\n  included: string[];                               // ⚠️ REQUIRED - Max 1 item\n  excluded: string[];                               // ⚠️ REQUIRED - Max 1 item\n  multiSelect: false;                               // Always false\n}\n\n/**\n * Number input filter - Single number input field\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for single numeric values (port, count)\n * - Maps to ES integer/long fields\n *\n * REQUIRED: filterType, included, excluded\n */\nexport interface NumberInputFilter extends BaseAellaFilter {\n  filterType: 'number-input';                       // ⚠️ REQUIRED - Discriminator\n  included: number[];                               // ⚠️ REQUIRED - Max 1 item\n  excluded: number[];                               // ⚠️ REQUIRED - Max 1 item\n  multiSelect: false;                               // Always false\n  min?: number;                                     // Optional min constraint\n  max?: number;                                     // Optional max constraint\n}\n\n/**\n * Toggle filter - Boolean switch (ON/OFF)\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for boolean flags (Enabled/Disabled, Active/Inactive)\n * - Maps to ES boolean fields\n *\n * REQUIRED: filterType, included, excluded\n */\nexport interface ToggleFilter extends BaseAellaFilter {\n  filterType: 'toggle';                             // ⚠️ REQUIRED - Discriminator\n  included: boolean[];                              // ⚠️ REQUIRED - Max 1 item\n  excluded: boolean[];                              // ⚠️ REQUIRED - Usually empty\n  multiSelect: false;                               // Always false\n}\n\n/**\n * Number range filter - Two number inputs (from/to)\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for numeric ranges (Score 70-100, Port 8000-9000)\n * - Maps to ES long/integer/float fields\n * - Dynamic fields have NO min/max limits\n * - Predefined fields MAY have min/max constraints\n *\n * ⚠️ RANGE ENCODING (NEW MODEL):\n * - Ranges are encoded as [from, to] tuples within included/excluded arrays\n * - included: [[33, 100], 50, 75] means \"33-100 OR 50 OR 75\" (must query)\n * - excluded: [[33, 100], 50, 75] means \"NOT (33-100 OR 50 OR 75)\" (must_not query)\n * - This eliminates the need for separate from/to fields\n * - Position of range tuple in array doesn't matter\n *\n * REQUIRED: filterType, included, excluded\n */\nexport interface NumberRangeFilter extends BaseAellaFilter {\n  filterType: 'number-range';                       // ⚠️ REQUIRED - Discriminator\n  included: (number | [number, number])[];          // ⚠️ REQUIRED - Ranges as [from, to], discrete as numbers\n  excluded: (number | [number, number])[];          // ⚠️ REQUIRED - Ranges as [from, to], discrete as numbers\n  min?: number;                                     // Optional - only for predefined fields\n  max?: number;                                     // Optional - only for predefined fields\n}\n\n/**\n * Number range slider filter - Slider with step configuration\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for predefined ranges like Risk Score (0-100, step 5)\n * - ALWAYS has min/max/step configuration\n * - More visual than number-range\n *\n * ⚠️ RANGE ENCODING (NEW MODEL):\n * - Ranges are encoded as [from, to] tuples within included/excluded arrays\n * - included: [[33, 100], 50, 75] means \"33-100 OR 50 OR 75\" (must query)\n * - excluded: [[33, 100], 50, 75] means \"NOT (33-100 OR 50 OR 75)\" (must_not query)\n * - This eliminates the need for separate from/to fields\n * - Position of range tuple in array doesn't matter\n *\n * REQUIRED: filterType, min, max, included, excluded\n */\nexport interface NumberRangeSliderFilter extends BaseAellaFilter {\n  filterType: 'number-range-slider';                // ⚠️ REQUIRED - Discriminator\n  included: (number | [number, number])[];          // ⚠️ REQUIRED - Ranges as [from, to], discrete as numbers\n  excluded: (number | [number, number])[];          // ⚠️ REQUIRED - Ranges as [from, to], discrete as numbers\n  range: SliderConfig;                              // Optional - legacy support\n  min: number;                                      // ⚠️ REQUIRED - Slider minimum (e.g., 0)\n  max: number;                                      // ⚠️ REQUIRED - Slider maximum (e.g., 100)\n  step?: number;                                    // Optional - step size (e.g., 5)\n}\n\n/**\n * Date range filter - Date range picker (from/to dates)\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for time-based filtering (Created At, Last Modified)\n * - Maps to ES date fields\n * - Backend converts to epoch timestamps\n *\n * ⚠️ RANGE ENCODING (NEW MODEL):\n * - Date ranges are encoded as [from, to] tuples within included/excluded arrays\n * - included: [[Date1, Date2]] means \"Date1 to Date2\" (must query)\n * - excluded: [[Date1, Date2]] means \"NOT (Date1 to Date2)\" (must_not query)\n * - Dates can be Date objects or ISO strings\n * - This eliminates the need for separate from/to fields\n *\n * REQUIRED: filterType, included, excluded\n */\nexport interface DateRangeFilter extends BaseAellaFilter {\n  filterType: 'date-range';                         // ⚠️ REQUIRED - Discriminator\n  included: ([Date, Date] | [string, string])[];    // ⚠️ REQUIRED - Date ranges as [from, to] tuples\n  excluded: ([Date, Date] | [string, string])[];    // ⚠️ REQUIRED - Date ranges as [from, to] tuples\n  multiSelect: false;                               // Always false\n}\n\n/**\n * Query filter - Saved query template selector\n *\n * ⚠️ AELLA UI USAGE:\n * - Used for complex saved queries\n * - Maps to stored ES query templates\n *\n * REQUIRED: filterType, included, excluded\n */\nexport interface QueryFilter extends BaseAellaFilter {\n  filterType: 'query';                              // ⚠️ REQUIRED - Discriminator\n  included: string[];                               // ⚠️ REQUIRED - Selected query IDs\n  excluded: string[];                               // ⚠️ REQUIRED - Excluded query IDs\n  multiSelect?: boolean;                            // Optional - defaults to true\n  staticOptions?: FilterOption[];\n  optionsLoader?: FilterOptionsLoader;\n}\n\n/**\n * ============================================================================\n * AELLA FILTER DEFINITION - PRIMARY DISCRIMINATED UNION\n * ============================================================================\n *\n * ⚠️ THIS IS THE MAIN TYPE USED EVERYWHERE\n *\n * Use this type for:\n * - FilterBarComponent filters input\n * - Dashboard filter state management\n * - Elasticsearch query building\n * - Backend API contracts\n *\n * Type narrowing example:\n * ```typescript\n * function processFilter(filter: AellaFilterDefinition) {\n *   switch (filter.filterType) {\n *     case 'checkbox':\n *       // TypeScript knows filter is CheckboxFilter\n *       // Access filter.staticOptions, filter.included, filter.excluded\n *       break;\n *     case 'number-range':\n *       // TypeScript knows filter is NumberRangeFilter\n *       // Access filter.included, filter.excluded, filter.min, filter.max\n *       break;\n *   }\n * }\n * ```\n *\n * ⚠️ DO NOT ADD NEW TYPES without:\n * 1. Adding corresponding UI component in filter-value-selector.component.ts\n * 2. Adding ES query mapping in Aella backend\n * 3. Testing with Aella UI build\n */\nexport type AellaFilterDefinition =\n  | CheckboxFilter\n  | RadioFilter\n  | AutocompleteFilter\n  | TreeFilter\n  | TextInputFilter\n  | NumberInputFilter\n  | ToggleFilter\n  | NumberRangeFilter\n  | NumberRangeSliderFilter\n  | DateRangeFilter\n  | QueryFilter;\n\n// ============================================================================\n// FILTER FACTORY HELPERS - Create filters with default values\n// ============================================================================\n\n/**\n * Create a base filter object with default empty arrays\n * This ensures included and excluded always default to []\n */\nfunction createBaseFilter(\n  id: string,\n  field: string,\n  label: string\n): Pick<BaseAellaFilter, 'id' | 'field' | 'label'> & {\n  included: (string | number | boolean)[];\n  excluded: (string | number | boolean)[];\n} {\n  return {\n    id,\n    field,\n    label,\n    included: [],\n    excluded: []\n  };\n}\n\n/**\n * Create a checkbox filter with defaults\n */\nexport function createCheckboxFilter(\n  id: string,\n  field: string,\n  label: string,\n  options?: Partial<Omit<CheckboxFilter, 'id' | 'field' | 'label' | 'filterType' | 'multiSelect' | 'included' | 'excluded'>>\n): CheckboxFilter {\n  return {\n    ...createBaseFilter(id, field, label),\n    filterType: 'checkbox',\n    multiSelect: true,\n    ...options\n  };\n}\n\n/**\n * Create a radio filter with defaults\n */\nexport function createRadioFilter(\n  id: string,\n  field: string,\n  label: string,\n  options?: Partial<Omit<RadioFilter, 'id' | 'field' | 'label' | 'filterType' | 'multiSelect' | 'included' | 'excluded'>>\n): RadioFilter {\n  return {\n    ...createBaseFilter(id, field, label),\n    filterType: 'radio',\n    multiSelect: false,\n    ...options\n  };\n}\n\n/**\n * Create an autocomplete filter with defaults\n */\nexport function createAutocompleteFilter(\n  id: string,\n  field: string,\n  label: string,\n  optionsLoader: FilterOptionsLoader,\n  options?: Partial<Omit<AutocompleteFilter, 'id' | 'field' | 'label' | 'filterType' | 'optionsLoader' | 'included' | 'excluded'>>\n): AutocompleteFilter {\n  return {\n    ...createBaseFilter(id, field, label),\n    filterType: 'autocomplete',\n    optionsLoader,\n    ...options\n  };\n}\n\n/**\n * Create a tree filter with defaults\n */\nexport function createTreeFilter(\n  id: string,\n  field: string,\n  label: string,\n  treeNodes: TreeNode[],\n  options?: Partial<Omit<TreeFilter, 'id' | 'field' | 'label' | 'filterType' | 'treeNodes' | 'included' | 'excluded'>>\n): TreeFilter {\n  return {\n    ...createBaseFilter(id, field, label),\n    filterType: 'tree',\n    treeNodes,\n    ...options\n  };\n}\n\n/**\n * Create a text input filter with defaults\n */\nexport function createTextInputFilter(\n  id: string,\n  field: string,\n  label: string,\n  options?: Partial<Omit<TextInputFilter, 'id' | 'field' | 'label' | 'filterType' | 'multiSelect' | 'included' | 'excluded'>>\n): TextInputFilter {\n  return {\n    id,\n    field,\n    label,\n    included: [] as string[],\n    excluded: [] as string[],\n    filterType: 'text-input',\n    multiSelect: false,\n    ...options\n  };\n}\n\n/**\n * Create a number input filter with defaults\n */\nexport function createNumberInputFilter(\n  id: string,\n  field: string,\n  label: string,\n  options?: Partial<Omit<NumberInputFilter, 'id' | 'field' | 'label' | 'filterType' | 'multiSelect' | 'included' | 'excluded'>>\n): NumberInputFilter {\n  return {\n    id,\n    field,\n    label,\n    included: [] as number[],\n    excluded: [] as number[],\n    filterType: 'number-input',\n    multiSelect: false,\n    ...options\n  };\n}\n\n/**\n * Create a toggle filter with defaults\n */\nexport function createToggleFilter(\n  id: string,\n  field: string,\n  label: string,\n  options?: Partial<Omit<ToggleFilter, 'id' | 'field' | 'label' | 'filterType' | 'multiSelect' | 'included' | 'excluded'>>\n): ToggleFilter {\n  return {\n    id,\n    field,\n    label,\n    included: [] as boolean[],\n    excluded: [] as boolean[],\n    filterType: 'toggle',\n    multiSelect: false,\n    ...options\n  };\n}\n\n/**\n * Create a number range filter with defaults\n * Range is encoded as [[from, to]] in included array\n */\nexport function createNumberRangeFilter(\n  id: string,\n  field: string,\n  label: string,\n  from: number,\n  to: number,\n  options?: Partial<Omit<NumberRangeFilter, 'id' | 'field' | 'label' | 'filterType' | 'included' | 'excluded'>>\n): NumberRangeFilter {\n  return {\n    ...createBaseFilter(id, field, label),\n    filterType: 'number-range',\n    included: [[from, to]],  // Encode range as tuple in included array\n    excluded: [],\n    ...options\n  };\n}\n\n/**\n * Create a number range slider filter with defaults\n * Range is encoded as [[from, to]] in included array\n */\nexport function createNumberRangeSliderFilter(\n  id: string,\n  field: string,\n  label: string,\n  from: number,\n  to: number,\n  min: number,\n  max: number,\n  range: SliderConfig,\n  options?: Partial<Omit<NumberRangeSliderFilter, 'id' | 'field' | 'label' | 'filterType' | 'min' | 'max' | 'range' | 'included' | 'excluded'>>\n): NumberRangeSliderFilter {\n  return {\n    ...createBaseFilter(id, field, label),\n    filterType: 'number-range-slider',\n    included: [[from, to]],  // Encode range as tuple in included array\n    excluded: [],\n    min,\n    max,\n    range,\n    ...options\n  };\n}\n\n/**\n * Create a date range filter with defaults\n * Range is encoded as [[from, to]] in included array\n */\nexport function createDateRangeFilter(\n  id: string,\n  field: string,\n  label: string,\n  from: Date,\n  to: Date,\n  options?: Partial<Omit<DateRangeFilter, 'id' | 'field' | 'label' | 'filterType' | 'multiSelect' | 'included' | 'excluded'>>\n): DateRangeFilter {\n  return {\n    ...createBaseFilter(id, field, label),\n    filterType: 'date-range',\n    included: [[from, to]],  // Encode range as tuple in included array\n    excluded: [],\n    multiSelect: false,\n    ...options\n  };\n}\n\n/**\n * Create a query filter with defaults\n */\nexport function createQueryFilter(\n  id: string,\n  field: string,\n  label: string,\n  options?: Partial<Omit<QueryFilter, 'id' | 'field' | 'label' | 'filterType' | 'included' | 'excluded'>>\n): QueryFilter {\n  return {\n    id,\n    field,\n    label,\n    included: [] as string[],\n    excluded: [] as string[],\n    filterType: 'query',\n    ...options\n  };\n}\n\n// ============================================================================\n// TYPE GUARDS - Runtime type checking for filter types\n// ============================================================================\n\nexport function isCheckboxFilter(filter: AellaFilterDefinition): filter is CheckboxFilter {\n  return filter.filterType === 'checkbox';\n}\n\nexport function isRadioFilter(filter: AellaFilterDefinition): filter is RadioFilter {\n  return filter.filterType === 'radio';\n}\n\nexport function isAutocompleteFilter(filter: AellaFilterDefinition): filter is AutocompleteFilter {\n  return filter.filterType === 'autocomplete';\n}\n\nexport function isTreeFilter(filter: AellaFilterDefinition): filter is TreeFilter {\n  return filter.filterType === 'tree';\n}\n\nexport function isTextInputFilter(filter: AellaFilterDefinition): filter is TextInputFilter {\n  return filter.filterType === 'text-input';\n}\n\nexport function isNumberInputFilter(filter: AellaFilterDefinition): filter is NumberInputFilter {\n  return filter.filterType === 'number-input';\n}\n\nexport function isToggleFilter(filter: AellaFilterDefinition): filter is ToggleFilter {\n  return filter.filterType === 'toggle';\n}\n\nexport function isNumberRangeFilter(filter: AellaFilterDefinition): filter is NumberRangeFilter {\n  return filter.filterType === 'number-range';\n}\n\nexport function isNumberRangeSliderFilter(filter: AellaFilterDefinition): filter is NumberRangeSliderFilter {\n  return filter.filterType === 'number-range-slider';\n}\n\nexport function isDateRangeFilter(filter: AellaFilterDefinition): filter is DateRangeFilter {\n  return filter.filterType === 'date-range';\n}\n\nexport function isQueryFilter(filter: AellaFilterDefinition): filter is QueryFilter {\n  return filter.filterType === 'query';\n}\n\n/**\n * Type guard to check if filter is a range-based filter (number-range or number-range-slider)\n * These filters encode ranges as [from, to] tuples within included/excluded arrays\n */\nexport function isRangeFilter(filter: AellaFilterDefinition): filter is NumberRangeFilter | NumberRangeSliderFilter | DateRangeFilter {\n  return filter.filterType === 'number-range' || filter.filterType === 'number-range-slider' || filter.filterType === 'date-range';\n}\n\n/**\n * Helper to extract the first range tuple from included/excluded array\n * Returns the first [from, to] tuple found in the array\n *\n * NOTE: This intentionally returns only the FIRST range because:\n * 1. The UI validates and warns if multiple ranges exist in the same mode\n * 2. Elasticsearch doesn't easily support OR logic for multiple ranges in the same bool clause\n * 3. Use extractRanges() if you need all ranges (e.g., for validation)\n */\nexport function extractRange(values: any[]): [number, number] | [Date, Date] | [string, string] | null {\n  for (const val of values) {\n    if (Array.isArray(val) && val.length === 2) {\n      return val as [number, number] | [Date, Date] | [string, string];\n    }\n  }\n  return null;\n}\n\n/**\n * Helper to extract ALL range tuples from included/excluded array\n * Returns array of all [from, to] tuples found\n */\nexport function extractRanges(values: any[]): ([number, number] | [Date, Date] | [string, string])[] {\n  const ranges = values.filter(val => Array.isArray(val) && val.length === 2) as ([number, number] | [Date, Date] | [string, string])[];\n  return ranges;\n}\n\n/**\n * Helper to extract discrete values (non-range) from included/excluded array\n * Returns all values that are not [from, to] tuples\n */\nexport function extractDiscreteValues(values: any[]): (number | string | boolean)[] {\n  const discrete = values.filter((val) => !Array.isArray(val)) as (\n    | number\n    | string\n    | boolean\n  )[];\n  return discrete;\n}\n\n/**\n * Helper to combine range tuple and discrete values into a properly typed array\n * This is used when preserving values from the opposite array (included/excluded)\n */\nexport function combineRangeAndDiscrete(\n  rangeTuple: [number, number] | [Date, Date] | [string, string] | null,\n  discreteValues: (number | string | boolean)[]\n): (number | string | boolean | [number, number] | [Date, Date] | [string, string])[] {\n  if (rangeTuple) {\n    return [rangeTuple, ...discreteValues];\n  }\n  return discreteValues;\n}\n\n/**\n * Type guard to check if filter supports multi-select\n */\nexport function isMultiSelectFilter(filter: AellaFilterDefinition): filter is CheckboxFilter | AutocompleteFilter | TreeFilter | QueryFilter {\n  return (\n    filter.filterType === 'checkbox' ||\n    filter.filterType === 'autocomplete' ||\n    filter.filterType === 'tree' ||\n    filter.filterType === 'query'\n  );\n}\n\n/**\n * Type guard to check if filter has options (static or loader)\n */\nexport function hasOptions(filter: AellaFilterDefinition): filter is CheckboxFilter | RadioFilter | AutocompleteFilter | QueryFilter {\n  return (\n    filter.filterType === 'checkbox' ||\n    filter.filterType === 'radio' ||\n    filter.filterType === 'autocomplete' ||\n    filter.filterType === 'query'\n  );\n}\n\n// Translation function type - compatible with Transloco's translate function\nexport type TranslateFn = (key: string, params?: Record<string, any>) => string;\n\n// Labels for internationalization - all strings configurable\n// Can be provided as static strings OR via translation function\nexport interface FilterBarLabels {\n  chip?: {\n    includeModeLabel?: string;           // Default: 'IN' | Key: 'filter.chip.includeModeLabel'\n    excludeModeLabel?: string;           // Default: 'NOT' | Key: 'filter.chip.excludeModeLabel'\n    editIncludedTooltip?: string;        // Default: 'Edit included values' | Key: 'filter.chip.editIncludedTooltip'\n    editExcludedTooltip?: string;        // Default: 'Edit excluded values' | Key: 'filter.chip.editExcludedTooltip'\n    removeTooltip?: string;              // Default: 'Remove filter' | Key: 'filter.chip.removeTooltip'\n    toggleModeTooltip?: string;          // Default: 'Click to toggle include/exclude' | Key: 'filter.chip.toggleModeTooltip'\n    includeTooltip?: string;             // Default: 'Include — click to exclude' | Key: 'filter.chip.includeTooltip'\n    excludeTooltip?: string;             // Default: 'Exclude — click to include' | Key: 'filter.chip.excludeTooltip'\n    noValuesLabel?: string;              // Default: '(no values)' | Key: 'filter.chip.noValuesLabel'\n    includesLabel?: string;              // Default: 'includes' | Key: 'filter.chip.includesLabel'\n    excludesLabel?: string;              // Default: 'excludes' | Key: 'filter.chip.excludesLabel'\n  };\n  selector?: {\n    loadingMessage?: string;             // Default: 'Loading options...' | Key: 'filter.selector.loadingMessage'\n    errorMessage?: string;               // Default: 'Failed to load options' | Key: 'filter.selector.errorMessage'\n    noOptionsMessage?: string;           // Default: 'No options available' | Key: 'filter.selector.noOptionsMessage'\n    noResultsMessage?: string;           // Default: 'No results found' | Key: 'filter.selector.noResultsMessage'\n    searchPlaceholder?: string;          // Default: 'Search' | Key: 'filter.selector.searchPlaceholder'\n    selectAllLabel?: string;             // Default: 'Select all' | Key: 'filter.selector.selectAllLabel'\n    applyButtonLabel?: string;           // Default: 'Apply' | Key: 'filter.selector.applyButtonLabel'\n    cancelButtonLabel?: string;          // Default: 'Cancel' | Key: 'filter.selector.cancelButtonLabel'\n    clearButtonLabel?: string;           // Default: 'Clear' | Key: 'filter.selector.clearButtonLabel'\n    copyQueryTooltip?: string;           // Default: 'Copy as query' | Key: 'filter.selector.copyQueryTooltip'\n    fromLabel?: string;                  // Default: 'from' | Key: 'filter.selector.fromLabel'\n    toLabel?: string;                    // Default: 'to' | Key: 'filter.selector.toLabel'\n    minLabel?: string;                   // Default: 'Min' | Key: 'filter.selector.minLabel'\n    maxLabel?: string;                   // Default: 'Max' | Key: 'filter.selector.maxLabel'\n    startDatePlaceholder?: string;       // Default: 'Start date' | Key: 'filter.selector.startDatePlaceholder'\n    endDatePlaceholder?: string;         // Default: 'End date' | Key: 'filter.selector.endDatePlaceholder'\n    onLabel?: string;                    // Default: 'On' | Key: 'filter.selector.onLabel'\n    offLabel?: string;                   // Default: 'Off' | Key: 'filter.selector.offLabel'\n    selectedCountLabel?: (count: number) => string; // Default: (n) => `${n} selected` | Key: 'filter.selector.selectedCount'\n  };\n  addFilter?: {\n    buttonLabel?: string;                // Default: 'Add Filter' | Key: 'filter.addFilter.buttonLabel'\n    buttonTooltip?: string;              // Default: 'Add a new filter' | Key: 'filter.addFilter.buttonTooltip'\n    searchPlaceholder?: string;          // Default: 'Search filters...' | Key: 'filter.addFilter.searchPlaceholder'\n    recentLabel?: string;                // Default: 'Recent' | Key: 'filter.addFilter.recentLabel'\n    allFiltersLabel?: string;            // Default: 'All Filters' | Key: 'filter.addFilter.allFiltersLabel'\n    noFiltersMessage?: string;           // Default: 'No filters available' | Key: 'filter.addFilter.noFiltersMessage'\n  };\n  bar?: {\n    clearAllLabel?: string;              // Default: 'Clear all' | Key: 'filter.bar.clearAllLabel'\n    clearAllTooltip?: string;            // Default: 'Remove all filters' | Key: 'filter.bar.clearAllTooltip'\n    filtersLabel?: (count: number) => string; // Default: (n) => `${n} filter${n !== 1 ? 's' : ''}` | Key: 'filter.bar.filtersCount'\n    /** Shown on the overflow control when some chips are collapsed (e.g. \"+3 more\") */\n    moreFiltersLabel?: (hiddenCount: number) => string;\n    /** Tooltip for the overflow control */\n    moreFiltersTooltip?: string;\n    copyQueryLabel?: string;             // Default: 'Copy as Query' | Key: 'filter.bar.copyQueryLabel'\n    copyQueryTooltip?: string;           // Default: 'Copy all filters as query string' | Key: 'filter.bar.copyQueryTooltip'\n  };\n}\n\n// Translation keys - structured map of all i18n keys\nexport const FILTER_BAR_TRANSLATION_KEYS = {\n  chip: {\n    includeModeLabel: 'filter.chip.includeModeLabel',\n    excludeModeLabel: 'filter.chip.excludeModeLabel',\n    editIncludedTooltip: 'filter.chip.editIncludedTooltip',\n    editExcludedTooltip: 'filter.chip.editExcludedTooltip',\n    removeTooltip: 'filter.chip.removeTooltip',\n    toggleModeTooltip: 'filter.chip.toggleModeTooltip',\n    includeTooltip: 'filter.chip.includeTooltip',\n    excludeTooltip: 'filter.chip.excludeTooltip',\n    noValuesLabel: 'filter.chip.noValuesLabel',\n    includesLabel: 'filter.chip.includesLabel',\n    excludesLabel: 'filter.chip.excludesLabel',\n  },\n  selector: {\n    loadingMessage: 'filter.selector.loadingMessage',\n    errorMessage: 'filter.selector.errorMessage',\n    noOptionsMessage: 'filter.selector.noOptionsMessage',\n    noResultsMessage: 'filter.selector.noResultsMessage',\n    searchPlaceholder: 'filter.selector.searchPlaceholder',\n    selectAllLabel: 'filter.selector.selectAllLabel',\n    applyButtonLabel: 'filter.selector.applyButtonLabel',\n    cancelButtonLabel: 'filter.selector.cancelButtonLabel',\n    clearButtonLabel: 'filter.selector.clearButtonLabel',\n    fromLabel: 'filter.selector.fromLabel',\n    toLabel: 'filter.selector.toLabel',\n    minLabel: 'filter.selector.minLabel',\n    maxLabel: 'filter.selector.maxLabel',\n    startDatePlaceholder: 'filter.selector.startDatePlaceholder',\n    endDatePlaceholder: 'filter.selector.endDatePlaceholder',\n    onLabel: 'filter.selector.onLabel',\n    offLabel: 'filter.selector.offLabel',\n    selectedCount: 'filter.selector.selectedCount',\n  },\n  addFilter: {\n    buttonLabel: 'filter.addFilter.buttonLabel',\n    buttonTooltip: 'filter.addFilter.buttonTooltip',\n    searchPlaceholder: 'filter.addFilter.searchPlaceholder',\n    recentLabel: 'filter.addFilter.recentLabel',\n    allFiltersLabel: 'filter.addFilter.allFiltersLabel',\n    noFiltersMessage: 'filter.addFilter.noFiltersMessage',\n  },\n  bar: {\n    clearAllLabel: 'filter.bar.clearAllLabel',\n    clearAllTooltip: 'filter.bar.clearAllTooltip',\n    filtersCount: 'filter.bar.filtersCount',\n    moreFiltersLabel: 'filter.bar.moreFiltersLabel',\n    moreFiltersTooltip: 'filter.bar.moreFiltersTooltip',\n  },\n} as const;\n\n// Configuration object that combines all settings\nexport interface FilterBarConfig {\n  labels?: FilterBarLabels;             // Static label overrides\n  translateFn?: TranslateFn;            // Translation function (e.g., Transloco's translate)\n  virtualScrollItemSize?: number;       // Default: 38\n  maxVisibleOptions?: number;           // Default: 10 (before virtual scroll)\n  enableSearch?: boolean;               // Default: true\n  searchThreshold?: number;             // Default: 20 (show search after N options)\n  showClearAll?: boolean;               // Default: true\n  /** Max chips shown in the bar before \"+N more\" overflow. Default: 10 (~2 wrapped rows). Set 0 or use showFilterOverflow: false to disable. */\n  maxVisibleChips?: number;\n  /** When false, all chips stay in the bar (no +N overflow). Default: true */\n  showFilterOverflow?: boolean;\n  showFooter?: boolean;                 // Default: true\n  /** Show \"Copy as Query\" button in the filter bar. Default: false */\n  showCopyQuery?: boolean;\n  dateFormat?: string;                  // Default: 'mm/dd/yy'\n  showTime?: boolean;                   // Default: true\n  storageKey?: string;                  // Optional key for localStorage (e.g., ES index name) to persist state per context\n}\n\n// Helper function to get translated label with fallback\nexport function getTranslatedLabel(\n  translateFn: TranslateFn | undefined,\n  key: string,\n  fallback: string,\n  params?: Record<string, any>\n): string {\n  if (translateFn) {\n    try {\n      const translated = translateFn(key, params);\n      // If translation returns the key itself, use fallback\n      return translated === key ? fallback : translated;\n    } catch {\n      return fallback;\n    }\n  }\n  return fallback;\n}\n\n// Helper function - UX team's implementation\nexport function toFilterOptions(values: string[]): FilterOption[] {\n  return values.map(v => ({ name: v, label: v, value: v }));\n}\n","/**\n * Base Filter Row Component\n *\n * Abstract base class for all filter row types.\n * Provides common functionality:\n * - IN|EX mode toggle\n * - Remove button\n * - Row ID management\n * - Value change events\n *\n * Extended by:\n * - RangeFilterRowComponent (for number-range, date-range)\n * - DiscreteFilterRowComponent (for checkbox, text-input, etc.)\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  computed,\n  model\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport type { FilterBarLabels } from '../filter-bar.models';\n\nexport type FilterRowMode = 'include' | 'exclude';\n\n@Component({\n  selector: 'ui-base-filter-row',\n  standalone: true,\n  imports: [CommonModule, ButtonModule],\n  template: `\n    <!-- This is an abstract component - template provided by child classes -->\n    <ng-content></ng-content>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport abstract class BaseFilterRowComponent {\n  // Inputs\n  readonly rowId = input.required<string>();\n  readonly mode = model.required<FilterRowMode>();\n  readonly labels = input<FilterBarLabels>();\n  readonly canRemove = input<boolean>(true);\n\n  // Outputs\n  readonly removed = output<string>();  // Emits row ID when removed\n  readonly modeChanged = output<{ rowId: string; mode: FilterRowMode }>();\n\n  // Computed labels\n  readonly includeModeLabel = computed(() =>\n    this.labels()?.chip?.includeModeLabel ?? 'IN'\n  );\n\n  readonly excludeModeLabel = computed(() =>\n    this.labels()?.chip?.excludeModeLabel ?? 'NOT'\n  );\n\n  readonly currentModeLabel = computed(() =>\n    this.isIncludeMode() ? this.includeModeLabel() : this.excludeModeLabel()\n  );\n\n  // Methods for child classes to use\n  protected onModeToggle(newMode: FilterRowMode): void {\n    this.mode.set(newMode);\n    this.modeChanged.emit({ rowId: this.rowId(), mode: newMode });\n  }\n\n  protected cycleMode(): void {\n    this.onModeToggle(this.mode() === 'include' ? 'exclude' : 'include');\n  }\n\n  protected onRemove(): void {\n    this.removed.emit(this.rowId());\n  }\n\n  // Template helpers\n  readonly isIncludeMode = computed(() => this.mode() === 'include');\n  readonly isExcludeMode = computed(() => this.mode() === 'exclude');\n\n  readonly modeTooltip = computed(() =>\n    this.isIncludeMode()\n      ? 'Include — only matching results are shown. Click to switch to exclude.'\n      : 'Exclude — matching results are hidden. Click to switch to include.'\n  );\n}\n","/**\n * Range Filter Row Component\n *\n * Extends BaseFilterRowComponent with range-specific functionality:\n * - RAN|SIN toggle (Range vs Single value)\n * - Range type validation\n * - Value conversion when switching types\n *\n * Extended by:\n * - NumberRangeRowComponent\n * - DateRangeRowComponent\n * - NumberRangeSliderRowComponent\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  computed,\n  model\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { BaseFilterRowComponent } from './base-filter-row.component';\n\nexport type RangeFilterRowType = 'range' | 'single';\n\n@Component({\n  selector: 'ui-range-filter-row',\n  standalone: true,\n  imports: [CommonModule, ButtonModule],\n  template: `\n    <!-- Abstract component - template provided by child classes -->\n    <ng-content></ng-content>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport abstract class RangeFilterRowComponent extends BaseFilterRowComponent {\n  // Additional inputs for range filters\n  readonly rowType = model.required<RangeFilterRowType>();\n  readonly canSwitchToRange = input<boolean>(true);  // Based on range row limit\n\n  // Outputs\n  readonly typeChanged = output<{ rowId: string; type: RangeFilterRowType }>();\n\n  // Computed\n  readonly isRangeType = computed(() => this.rowType() === 'range');\n  readonly isSingleType = computed(() => this.rowType() === 'single');\n\n  // Methods for child classes\n  protected onTypeToggle(newType: RangeFilterRowType): void {\n    if (newType === 'range' && !this.canSwitchToRange()) {\n      return;\n    }\n\n    this.rowType.set(newType);\n    this.typeChanged.emit({ rowId: this.rowId(), type: newType });\n  }\n\n  protected cycleType(): void {\n    this.onTypeToggle(this.rowType() === 'range' ? 'single' : 'range');\n  }\n\n  // Abstract methods - child classes must implement value conversion\n  protected abstract convertToRangeValue(singleValue: any): any;\n  protected abstract convertToSingleValue(rangeValue: any): any;\n}\n","/**\n * Discrete Filter Row Component\n *\n * Base component for discrete value filters (checkbox, radio, text-input, etc.)\n * Extends BaseFilterRowComponent with simple value model.\n *\n * Extended by:\n * - DropdownRowComponent (checkbox, radio)\n * - TextInputRowComponent\n * - AutocompleteRowComponent\n * - TreeRowComponent\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  model\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { BaseFilterRowComponent } from './base-filter-row.component';\n\n@Component({\n  selector: 'ui-discrete-filter-row',\n  standalone: true,\n  imports: [CommonModule, ButtonModule],\n  template: `\n    <!-- Abstract component - template provided by child classes -->\n    <ng-content></ng-content>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport abstract class DiscreteFilterRowComponent extends BaseFilterRowComponent {\n  // Simple value model (string, number, or boolean)\n  readonly value = model.required<string | number | boolean>();\n}\n","/**\n * Number Range Row Component\n *\n * Concrete implementation for number range filters.\n * Extends RangeFilterRowComponent with:\n * - Number input fields (min/max for range, single for discrete)\n * - Slider widget for range mode\n * - Value validation and synchronization\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  model,\n  effect,\n  signal\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { SliderModule } from 'primeng/slider';\nimport { RangeFilterRowComponent } from './range-filter-row.component';\n\nexport type NumberRangeValue = [number, number] | number | null;\n\n@Component({\n  selector: 'ui-number-range-row',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    InputNumber,\n    SliderModule\n  ],\n  template: `\n    <div class=\"tw-flex tw-items-center tw-gap-3 tw-px-2 tw-py-3 tw-rounded\n                tw-border tw-border-surface-200 dark:tw-border-surface-700\n                hover:tw-bg-surface-50 dark:hover:tw-bg-surface-800 tw-transition-colors\">\n\n      <div class=\"tw-flex tw-items-center tw-gap-1.5 tw-shrink-0\">\n        <!-- Mode button (cycles IN ↔ NOT on click) -->\n        <button\n          type=\"button\"\n          class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-font-bold tw-leading-none\n                 tw-flex tw-items-center tw-justify-center\n                 tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n          [style.font-size]=\"isExcludeMode() ? '9px' : '11px'\"\n          [class.tw-bg-primary]=\"isIncludeMode()\"\n          [class.tw-bg-surface-700]=\"isExcludeMode()\"\n          [class.dark:tw-bg-surface-300]=\"isExcludeMode()\"\n          [class.tw-text-white]=\"isIncludeMode() || isExcludeMode()\"\n          [class.dark:tw-text-surface-900]=\"isExcludeMode()\"\n          [title]=\"modeTooltip()\"\n          (click)=\"cycleMode()\">\n          {{ currentModeLabel() }}\n        </button>\n\n        <!-- Type button (cycles Range ↔ Single on click) -->\n        <button\n          type=\"button\"\n          class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-flex tw-items-center tw-justify-center\n                 tw-transition-colors tw-duration-150 tw-shrink-0 tw-select-none\"\n          [class.tw-bg-primary]=\"true\"\n          [class.tw-text-white]=\"true\"\n          [class.tw-opacity-50]=\"!canSwitchToRange() && isSingleType()\"\n          [class.tw-cursor-not-allowed]=\"!canSwitchToRange() && isSingleType()\"\n          [class.tw-cursor-pointer]=\"canSwitchToRange() || isRangeType()\"\n          [disabled]=\"!canSwitchToRange() && isSingleType()\"\n          [title]=\"isRangeType() ? 'Range — click for single' : (canSwitchToRange() ? 'Single — click for range' : 'Range limit reached')\"\n          (click)=\"cycleType()\">\n          <i [class]=\"isRangeType() ? 'pi pi-arrows-h tw-text-[11px]' : 'pi pi-circle-fill tw-text-[8px]'\"></i>\n        </button>\n      </div>\n\n      <!-- Range Mode: Either Slider OR Input Fields -->\n      @if (isRangeType()) {\n        <div class=\"tw-flex tw-items-center tw-gap-3 tw-flex-1\">\n          @if (showSlider()) {\n            <!-- Slider Mode -->\n            <p-slider\n              [(ngModel)]=\"sliderValues\"\n              (ngModelChange)=\"onSliderChange()\"\n              [range]=\"true\"\n              [min]=\"min()\"\n              [max]=\"max()\"\n              [step]=\"step()\"\n              class=\"tw-flex-1\"\n              [attr.aria-label]=\"'Range slider'\" />\n            <span class=\"tw-text-xs tw-text-surface-500 tw-shrink-0 tw-min-w-[60px] tw-text-center\">\n              {{ rangeMinValue() }}–{{ rangeMaxValue() }}\n            </span>\n          } @else {\n            <!-- Input Fields Mode -->\n            <p-inputNumber\n              [(ngModel)]=\"rangeMinValue\"\n              (ngModelChange)=\"onRangeValueChange()\"\n              [inputStyleClass]=\"'tw-w-[72px] tw-text-center'\"\n              [showButtons]=\"false\"\n              [min]=\"min()\"\n              [max]=\"max()\" />\n            <span class=\"tw-text-sm tw-text-surface-500\">to</span>\n            <p-inputNumber\n              [(ngModel)]=\"rangeMaxValue\"\n              (ngModelChange)=\"onRangeValueChange()\"\n              [inputStyleClass]=\"'tw-w-[72px] tw-text-center'\"\n              [showButtons]=\"false\"\n              [min]=\"min()\"\n              [max]=\"max()\" />\n          }\n        </div>\n      }\n\n      <!-- Single Mode: Single Input -->\n      @else {\n        <p-inputNumber\n          [(ngModel)]=\"singleValue\"\n          (ngModelChange)=\"onSingleValueChange()\"\n          [inputStyleClass]=\"'tw-w-[100px]'\"\n          [showButtons]=\"false\"\n          [min]=\"min()\"\n          [max]=\"max()\"\n          class=\"tw-flex-1\" />\n      }\n\n      <!-- Remove Button -->\n      <button\n        type=\"button\"\n        class=\"tw-w-6 tw-h-6 tw-flex tw-items-center tw-justify-center tw-rounded-full\n               tw-text-surface-500 hover:tw-text-surface-700 hover:tw-bg-surface-200\n               dark:hover:tw-bg-surface-700 tw-transition-colors tw-shrink-0\"\n        [disabled]=\"!canRemove()\"\n        [class.tw-opacity-50]=\"!canRemove()\"\n        [class.tw-cursor-not-allowed]=\"!canRemove()\"\n        (click)=\"onRemove()\"\n        [title]=\"'Remove row'\">\n        <i class=\"pi pi-times tw-text-[10px]\"></i>\n      </button>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NumberRangeRowComponent extends RangeFilterRowComponent {\n  // Additional inputs specific to number range\n  readonly value = model.required<NumberRangeValue>();\n  readonly min = input<number | undefined>(undefined);\n  readonly max = input<number | undefined>(undefined);\n  readonly step = input<number>(1);\n  readonly showSlider = input<boolean>(true);\n\n  // Internal state for two-way binding\n  rangeMinValue = signal<number>(0);\n  rangeMaxValue = signal<number>(100);\n  singleValue = signal<number>(0);\n  sliderValues = signal<[number, number]>([0, 100]);\n\n  constructor() {\n    super();\n\n    // Initialize internal values from model\n    effect(() => {\n      const val = this.value();\n      const type = this.rowType();\n\n      if (type === 'range' && Array.isArray(val)) {\n        if (val.length !== 2 || typeof val[0] !== 'number' || typeof val[1] !== 'number') {\n          console.error('[NumberRangeRow] Invalid range value format. Expected [number, number]:', val);\n          return;\n        }\n        this.rangeMinValue.set(val[0]);\n        this.rangeMaxValue.set(val[1]);\n        this.sliderValues.set([val[0], val[1]]);\n      } else if (type === 'single' && typeof val === 'number') {\n        this.singleValue.set(val);\n      } else if (type === 'single' && val === null) {\n        // User cleared the input field - this is valid (empty input)\n        this.singleValue.set(null as any);\n      } else if (type === 'range' && !Array.isArray(val)) {\n        console.error('[NumberRangeRow] Type mismatch: rowType is \"range\" but value is not an array. Expected: [number, number], Got:', val);\n      } else if (type === 'single' && typeof val !== 'number' && val !== null) {\n        console.error('[NumberRangeRow] Type mismatch: rowType is \"single\" but value is not a number. Expected: number or null, Got:', val);\n\n        // Auto-fix: If value is an array, extract first value\n        if (Array.isArray(val) && val.length > 0) {\n          console.warn('[NumberRangeRow] Auto-fixing: Converting array to single value (taking first element)');\n          const fixedValue = val[0];\n          this.value.set(fixedValue);\n          this.singleValue.set(fixedValue);\n        }\n      }\n    });\n\n    // Watch for type changes and convert values\n    effect(() => {\n      const type = this.rowType();\n      const val = this.value();\n\n      if (type === 'range' && typeof val === 'number') {\n        // Converted from single to range - duplicate value\n        const newRange: [number, number] = [val, val];\n        this.value.set(newRange);\n        this.rangeMinValue.set(val);\n        this.rangeMaxValue.set(val);\n        this.sliderValues.set([val, val]);\n      } else if (type === 'range' && val === null) {\n        // Converted from single (null) to range - use min value as default\n        const defaultVal = this.min() ?? 0;\n        const newRange: [number, number] = [defaultVal, defaultVal];\n        this.value.set(newRange);\n        this.rangeMinValue.set(defaultVal);\n        this.rangeMaxValue.set(defaultVal);\n        this.sliderValues.set([defaultVal, defaultVal]);\n      } else if (type === 'single' && Array.isArray(val)) {\n        // Converted from range to single - take first value\n        const newSingle = val[0];\n        this.value.set(newSingle);\n        this.singleValue.set(newSingle);\n      }\n    });\n  }\n\n  // Value change handlers\n  onRangeValueChange(): void {\n    // Validate: min should not be greater than max\n    if (this.rangeMinValue() > this.rangeMaxValue()) {\n      console.warn(`[NumberRangeRow] Min value ${this.rangeMinValue()} > max value ${this.rangeMaxValue()}. Clamping min to max.`);\n      this.rangeMinValue.set(this.rangeMaxValue());\n    }\n\n    const newValue: [number, number] = [this.rangeMinValue(), this.rangeMaxValue()];\n    this.value.set(newValue);\n    this.sliderValues.set(newValue);\n  }\n\n  onSliderChange(): void {\n    const [min, max] = this.sliderValues();\n    this.rangeMinValue.set(min);\n    this.rangeMaxValue.set(max);\n    this.value.set([min, max]);\n  }\n\n  onSingleValueChange(): void {\n    this.value.set(this.singleValue());\n  }\n\n  // Implement abstract methods from RangeFilterRowComponent\n  protected convertToRangeValue(singleValue: number): [number, number] {\n    return [singleValue, singleValue];\n  }\n\n  protected convertToSingleValue(rangeValue: [number, number]): number {\n    return rangeValue[0];\n  }\n}\n","/**\n * Date Range Row Component\n *\n * Concrete implementation for date range filters.\n * Extends RangeFilterRowComponent with:\n * - Date picker fields (from/to for range, single for discrete)\n * - Date validation\n * - Optional time selection\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  model,\n  effect,\n  signal,\n  inject,\n  computed\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { DatePicker } from 'primeng/datepicker';\nimport { RangeFilterRowComponent } from './range-filter-row.component';\nimport { DateTimeConfigService } from '../../localization/services/datetime-config.service';\n\nexport type DateRangeValue = [Date, Date] | Date;\n\n@Component({\n  selector: 'ui-date-range-row',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    DatePicker\n  ],\n  template: `\n    <div class=\"tw-flex tw-flex-col tw-gap-2 tw-px-2 tw-py-3 tw-rounded\n                tw-border tw-border-surface-200 dark:tw-border-surface-700\n                hover:tw-bg-surface-50 dark:hover:tw-bg-surface-800 tw-transition-colors\">\n\n      <!-- Top row: mode + type buttons, label, remove -->\n      <div class=\"tw-flex tw-items-center tw-gap-1.5\">\n        <!-- Mode button (cycles IN ↔ NOT on click) -->\n        <button\n          type=\"button\"\n          class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-font-bold tw-leading-none\n                 tw-flex tw-items-center tw-justify-center\n                 tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n          [style.font-size]=\"isExcludeMode() ? '9px' : '11px'\"\n          [class.tw-bg-primary]=\"isIncludeMode()\"\n          [class.tw-bg-surface-700]=\"isExcludeMode()\"\n          [class.dark:tw-bg-surface-300]=\"isExcludeMode()\"\n          [class.tw-text-white]=\"isIncludeMode() || isExcludeMode()\"\n          [class.dark:tw-text-surface-900]=\"isExcludeMode()\"\n          [title]=\"modeTooltip()\"\n          (click)=\"cycleMode()\">\n          {{ currentModeLabel() }}\n        </button>\n\n        <!-- Type button (cycles Range ↔ Single on click) -->\n        <button\n          type=\"button\"\n          class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-flex tw-items-center tw-justify-center\n                 tw-transition-colors tw-duration-150 tw-shrink-0 tw-select-none\"\n          [class.tw-bg-primary]=\"true\"\n          [class.tw-text-white]=\"true\"\n          [class.tw-opacity-50]=\"!canSwitchToRange() && isSingleType()\"\n          [class.tw-cursor-not-allowed]=\"!canSwitchToRange() && isSingleType()\"\n          [class.tw-cursor-pointer]=\"canSwitchToRange() || isRangeType()\"\n          [disabled]=\"!canSwitchToRange() && isSingleType()\"\n          [title]=\"isRangeType() ? 'Range — click for single' : (canSwitchToRange() ? 'Single — click for range' : 'Range limit reached')\"\n          (click)=\"cycleType()\">\n          <i [class]=\"isRangeType() ? 'pi pi-arrows-h tw-text-[11px]' : 'pi pi-circle-fill tw-text-[8px]'\"></i>\n        </button>\n\n        <span class=\"tw-text-xs tw-text-surface-400 tw-ml-1\">\n          {{ isRangeType() ? 'Range' : 'Single' }}\n        </span>\n\n        <!-- Remove Button -->\n        <button\n          type=\"button\"\n          class=\"tw-ml-auto tw-w-6 tw-h-6 tw-flex tw-items-center tw-justify-center tw-rounded-full\n                 tw-text-surface-500 hover:tw-text-surface-700 hover:tw-bg-surface-200\n                 dark:hover:tw-bg-surface-700 tw-transition-colors tw-shrink-0\"\n          [disabled]=\"!canRemove()\"\n          [class.tw-opacity-50]=\"!canRemove()\"\n          [class.tw-cursor-not-allowed]=\"!canRemove()\"\n          (click)=\"onRemove()\"\n          [title]=\"'Remove row'\">\n          <i class=\"pi pi-times tw-text-[10px]\"></i>\n        </button>\n      </div>\n\n      <!-- Date picker(s) stacked below -->\n      @if (isRangeType()) {\n        <div class=\"tw-flex tw-flex-col tw-gap-1.5\">\n          <div class=\"tw-flex tw-items-center tw-gap-2\">\n            <span class=\"tw-text-[11px] tw-text-surface-400 tw-uppercase tw-w-8 tw-shrink-0\">From</span>\n            <p-datepicker\n              [(ngModel)]=\"rangeFromValue\"\n              (ngModelChange)=\"onRangeDateChange()\"\n              [showTime]=\"showTime()\"\n              appendTo=\"body\"\n              [showIcon]=\"true\"\n              [placeholder]=\"'Start date'\"\n              [dateFormat]=\"dateFormat()\"\n              class=\"tw-flex-1\" />\n          </div>\n          <div class=\"tw-flex tw-items-center tw-gap-2\">\n            <span class=\"tw-text-[11px] tw-text-surface-400 tw-uppercase tw-w-8 tw-shrink-0\">To</span>\n            <p-datepicker\n              [(ngModel)]=\"rangeToValue\"\n              (ngModelChange)=\"onRangeDateChange()\"\n              [showTime]=\"showTime()\"\n              appendTo=\"body\"\n              [showIcon]=\"true\"\n              [placeholder]=\"'End date'\"\n              [dateFormat]=\"dateFormat()\"\n              class=\"tw-flex-1\" />\n          </div>\n        </div>\n      } @else {\n        <p-datepicker\n          [(ngModel)]=\"singleDateValue\"\n          (ngModelChange)=\"onSingleDateChange()\"\n          [showTime]=\"showTime()\"\n          [showIcon]=\"true\"\n          [placeholder]=\"'Select date'\"\n          [dateFormat]=\"dateFormat()\"\n          appendTo=\"body\"\n          class=\"tw-w-full\" />\n      }\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DateRangeRowComponent extends RangeFilterRowComponent {\n  private readonly dtConfig = inject(DateTimeConfigService);\n\n  readonly value = model.required<DateRangeValue>();\n  readonly showTime = input<boolean>(true);\n  readonly dateFormatOverride = input<string | undefined>(undefined);\n\n  /** Resolved dateFormat: explicit override wins, otherwise global config */\n  readonly dateFormat = computed(() => this.dateFormatOverride() ?? this.dtConfig.primeNgDateFormat());\n\n  // Internal state for two-way binding\n  rangeFromValue = signal<Date | null>(null);\n  rangeToValue = signal<Date | null>(null);\n  singleDateValue = signal<Date | null>(null);\n\n  constructor() {\n    super();\n\n    // Initialize internal values from model\n    effect(() => {\n      const val = this.value();\n      const type = this.rowType();\n\n      if (type === 'range' && Array.isArray(val)) {\n        if (val.length !== 2 || !(val[0] instanceof Date) || !(val[1] instanceof Date)) {\n          console.error('[DateRangeRow] Invalid range value format. Expected [Date, Date]:', val);\n          return;\n        }\n        if (Number.isNaN(val[0].getTime()) || Number.isNaN(val[1].getTime())) {\n          console.error('[DateRangeRow] Invalid Date objects in range:', val);\n          return;\n        }\n        this.rangeFromValue.set(val[0]);\n        this.rangeToValue.set(val[1]);\n      } else if (type === 'single' && val instanceof Date) {\n        if (Number.isNaN(val.getTime())) {\n          console.error('[DateRangeRow] Invalid Date object:', val);\n          return;\n        }\n        this.singleDateValue.set(val);\n      } else if (type === 'range' && !Array.isArray(val)) {\n        console.error('[DateRangeRow] Expected array for range type but got:', typeof val);\n      } else if (type === 'single' && !(val instanceof Date)) {\n        console.error('[DateRangeRow] Expected Date for single type but got:', typeof val);\n      }\n    });\n\n    // Watch for type changes and convert values\n    effect(() => {\n      const type = this.rowType();\n      const val = this.value();\n\n      if (type === 'range' && val instanceof Date) {\n        // Converted from single to range - duplicate date\n        const newRange: [Date, Date] = [val, val];\n        this.value.set(newRange);\n        this.rangeFromValue.set(val);\n        this.rangeToValue.set(val);\n      } else if (type === 'single' && Array.isArray(val)) {\n        // Converted from range to single - take first date\n        const newSingle = val[0];\n        this.value.set(newSingle);\n        this.singleDateValue.set(newSingle);\n      }\n    });\n  }\n\n  // Value change handlers\n  onRangeDateChange(): void {\n    const from = this.rangeFromValue();\n    const to = this.rangeToValue();\n\n    if (!from || !to) {\n      console.warn('[DateRangeRow] Cannot update range with null dates. Ignoring change.');\n      return;\n    }\n\n    // Validate: from date should not be after to date\n    if (from > to) {\n      console.warn(`[DateRangeRow] From date ${from.toISOString()} is after to date ${to.toISOString()}. Clamping from to equal to.`);\n      this.rangeFromValue.set(to);\n      this.value.set([to, to]);\n    } else {\n      this.value.set([from, to]);\n    }\n  }\n\n  onSingleDateChange(): void {\n    const date = this.singleDateValue();\n    if (date) {\n      this.value.set(date);\n    } else {\n      console.warn('[DateRangeRow] Attempted to set null date. Ignoring change.');\n    }\n  }\n\n  // Implement abstract methods from RangeFilterRowComponent\n  protected convertToRangeValue(singleValue: Date): [Date, Date] {\n    return [singleValue, singleValue];\n  }\n\n  protected convertToSingleValue(rangeValue: [Date, Date]): Date {\n    return rangeValue[0];\n  }\n}\n","/**\n * Dropdown Row Component\n *\n * Concrete implementation for checkbox/radio filters.\n * Shows a dropdown with:\n * - Selected options at the top (with checkmark)\n * - Available options below\n * - Disabled state for options selected in other rows\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  computed\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { DiscreteFilterRowComponent } from './discrete-filter-row.component';\nimport type { FilterOption } from '../filter-bar.models';\n\n@Component({\n  selector: 'ui-dropdown-row',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    DropdownModule\n  ],\n  template: `\n    <div class=\"tw-flex tw-items-center tw-gap-3 tw-px-2 tw-py-3 tw-rounded\n                tw-border tw-border-surface-200 dark:tw-border-surface-700\n                hover:tw-bg-surface-50 dark:hover:tw-bg-surface-800 tw-transition-colors\">\n\n      <!-- Mode button (cycles IN ↔ NOT on click) -->\n      <button\n        type=\"button\"\n        class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-font-bold tw-leading-none\n               tw-flex tw-items-center tw-justify-center\n               tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n        [style.font-size]=\"isExcludeMode() ? '9px' : '11px'\"\n        [class.tw-bg-primary]=\"isIncludeMode()\"\n        [class.tw-bg-surface-700]=\"isExcludeMode()\"\n        [class.dark:tw-bg-surface-300]=\"isExcludeMode()\"\n        [class.tw-text-white]=\"isIncludeMode() || isExcludeMode()\"\n        [class.dark:tw-text-surface-900]=\"isExcludeMode()\"\n        [title]=\"isIncludeMode() ? 'Click to exclude' : 'Click to include'\"\n        (click)=\"cycleMode()\">\n        {{ currentModeLabel() }}\n      </button>\n\n      <!-- Dropdown with sorted options -->\n      <p-dropdown\n        [(ngModel)]=\"value\"\n        [options]=\"sortedOptions()\"\n        [filter]=\"enableFilter()\"\n        [showClear]=\"false\"\n        [optionLabel]=\"'label'\"\n        [optionValue]=\"'value'\"\n        [optionDisabled]=\"'disabled'\"\n        appendTo=\"body\"\n        [placeholder]=\"placeholder()\"\n        [virtualScroll]=\"enableVirtualScroll()\"\n        [virtualScrollItemSize]=\"virtualScrollItemSize()\"\n        class=\"tw-flex-1\">\n\n        <!-- Custom template for options to show checkmarks and disabled state -->\n        <ng-template pTemplate=\"item\" let-option>\n          <div class=\"tw-flex tw-items-center tw-gap-2\">\n            @if (option.isSelected) {\n              <i class=\"pi pi-check tw-text-primary tw-text-xs\"></i>\n            }\n            <span [class.tw-opacity-50]=\"option.disabled\">\n              {{ option.label }}\n            </span>\n            @if (option.disabled && !option.isCurrentValue) {\n              <span class=\"tw-text-xs tw-text-surface-400 tw-ml-auto\">(selected)</span>\n            }\n          </div>\n        </ng-template>\n      </p-dropdown>\n\n      <!-- Remove Button -->\n      <button\n        type=\"button\"\n        class=\"tw-w-6 tw-h-6 tw-flex tw-items-center tw-justify-center tw-rounded-full\n               tw-text-surface-500 hover:tw-text-surface-700 hover:tw-bg-surface-200\n               dark:hover:tw-bg-surface-700 tw-transition-colors tw-shrink-0\"\n        [disabled]=\"!canRemove()\"\n        [class.tw-opacity-50]=\"!canRemove()\"\n        [class.tw-cursor-not-allowed]=\"!canRemove()\"\n        (click)=\"onRemove()\"\n        [title]=\"'Remove row'\">\n        <i class=\"pi pi-times tw-text-[10px]\"></i>\n      </button>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DropdownRowComponent extends DiscreteFilterRowComponent {\n  // Inputs\n  readonly allOptions = input.required<FilterOption[]>();\n  readonly selectedValues = input.required<Set<string | number | boolean>>();  // All selected values across all rows\n  readonly placeholder = input<string>('Select value');\n  readonly enableFilter = input<boolean>(true);\n  readonly enableVirtualScroll = input<boolean>(false);\n  readonly virtualScrollItemSize = input<number>(38);\n\n  /**\n   * Sorted options with selected values at the top\n   * Format:\n   * - Selected options first (disabled if selected in other rows)\n   * - Unselected options below\n   */\n  readonly sortedOptions = computed(() => {\n    const all = this.allOptions();\n    const selected = this.selectedValues();\n    const currentValue = this.value();\n\n    if (all.length === 0) {\n      console.warn('[DropdownRow] No options available.');\n      return [];\n    }\n\n    const selectedOpts: (FilterOption & { isSelected?: boolean; disabled?: boolean; isCurrentValue?: boolean })[] = [];\n    const unselectedOpts: (FilterOption & { isSelected?: boolean; disabled?: boolean })[] = [];\n\n    // Check if current value exists in options\n    const currentValueExists = all.some(opt => opt.value === currentValue);\n    if (!currentValueExists && currentValue !== '' && currentValue !== null && currentValue !== undefined) {\n      console.warn(`[DropdownRow] Current value \"${currentValue}\" not found in available options.`);\n    }\n\n    all.forEach(opt => {\n      const isSelected = selected.has(opt.value);\n      const isCurrentValue = opt.value === currentValue;\n\n      if (isSelected || isCurrentValue) {\n        selectedOpts.push({\n          ...opt,\n          label: `✓ ${opt.label}`,\n          isSelected: true,\n          disabled: isSelected && !isCurrentValue,  // Disable if selected in other rows\n          isCurrentValue\n        });\n      } else {\n        unselectedOpts.push({\n          ...opt,\n          isSelected: false,\n          disabled: false\n        });\n      }\n    });\n\n    // Return with selected at top\n    return [...selectedOpts, ...unselectedOpts];\n  });\n}\n","/**\n * Text Input Row Component\n *\n * Concrete implementation for text-input filters.\n * Simple text field with IN|EX toggle.\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DiscreteFilterRowComponent } from './discrete-filter-row.component';\n\n@Component({\n  selector: 'ui-text-input-row',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    InputTextModule\n  ],\n  template: `\n    <div class=\"tw-flex tw-items-center tw-gap-3 tw-px-2 tw-py-3 tw-rounded\n                tw-border tw-border-surface-200 dark:tw-border-surface-700\n                hover:tw-bg-surface-50 dark:hover:tw-bg-surface-800 tw-transition-colors\">\n\n      <!-- Mode button (cycles IN ↔ NOT on click) -->\n      <button\n        type=\"button\"\n        class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-font-bold tw-leading-none\n               tw-flex tw-items-center tw-justify-center\n               tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n        [style.font-size]=\"isExcludeMode() ? '9px' : '11px'\"\n        [class.tw-bg-primary]=\"isIncludeMode()\"\n        [class.tw-bg-surface-700]=\"isExcludeMode()\"\n        [class.dark:tw-bg-surface-300]=\"isExcludeMode()\"\n        [class.tw-text-white]=\"isIncludeMode() || isExcludeMode()\"\n        [class.dark:tw-text-surface-900]=\"isExcludeMode()\"\n        [title]=\"modeTooltip()\"\n        (click)=\"cycleMode()\">\n        {{ currentModeLabel() }}\n      </button>\n\n      <!-- Text Input -->\n      <input\n        pInputText\n        [(ngModel)]=\"value\"\n        [placeholder]=\"placeholder()\"\n        [attr.aria-label]=\"placeholder()\"\n        class=\"tw-w-full\" />\n\n      <!-- Remove Button -->\n      <button\n        type=\"button\"\n        class=\"tw-w-6 tw-h-6 tw-flex tw-items-center tw-justify-center tw-rounded-full\n               tw-text-surface-500 hover:tw-text-surface-700 hover:tw-bg-surface-200\n               dark:hover:tw-bg-surface-700 tw-transition-colors tw-shrink-0\"\n        [disabled]=\"!canRemove()\"\n        [class.tw-opacity-50]=\"!canRemove()\"\n        [class.tw-cursor-not-allowed]=\"!canRemove()\"\n        (click)=\"onRemove()\"\n        [title]=\"'Remove row'\">\n        <i class=\"pi pi-times tw-text-[10px]\"></i>\n      </button>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TextInputRowComponent extends DiscreteFilterRowComponent {\n  // Input\n  readonly placeholder = input<string>('Enter value');\n}\n","/**\n * Autocomplete Row Component\n *\n * Concrete implementation for autocomplete filters.\n * Extends DiscreteFilterRowComponent with:\n * - Async search with debouncing\n * - Virtual scrolling for large option sets\n * - Keyboard navigation\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  model,\n  signal,\n  effect\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { AutoComplete } from 'primeng/autocomplete';\nimport { DiscreteFilterRowComponent } from './discrete-filter-row.component';\nimport type { FilterOption } from '../filter-bar.models';\n\n@Component({\n  selector: 'ui-autocomplete-row',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    AutoComplete\n  ],\n  template: `\n    <div class=\"tw-flex tw-items-center tw-gap-3 tw-px-2 tw-py-3 tw-rounded\n                tw-border tw-border-surface-200 dark:tw-border-surface-700\n                hover:tw-bg-surface-50 dark:hover:tw-bg-surface-800 tw-transition-colors\">\n\n      <!-- Mode button (cycles IN ↔ NOT on click) -->\n      <button\n        type=\"button\"\n        class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-font-bold tw-leading-none\n               tw-flex tw-items-center tw-justify-center\n               tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n        [style.font-size]=\"isExcludeMode() ? '9px' : '11px'\"\n        [class.tw-bg-primary]=\"isIncludeMode()\"\n        [class.tw-bg-surface-700]=\"isExcludeMode()\"\n        [class.dark:tw-bg-surface-300]=\"isExcludeMode()\"\n        [class.tw-text-white]=\"isIncludeMode() || isExcludeMode()\"\n        [class.dark:tw-text-surface-900]=\"isExcludeMode()\"\n        [title]=\"isIncludeMode() ? 'Click to exclude' : 'Click to include'\"\n        (click)=\"cycleMode()\">\n        {{ currentModeLabel() }}\n      </button>\n\n      <!-- Autocomplete Input -->\n      <p-autoComplete\n        [(ngModel)]=\"selectedValue\"\n        (ngModelChange)=\"onValueChange()\"\n        [suggestions]=\"filteredOptions()\"\n        (completeMethod)=\"onSearch($event)\"\n        [field]=\"'label'\"\n        [dataKey]=\"'value'\"\n        [placeholder]=\"placeholder()\"\n        [forceSelection]=\"true\"\n        [dropdown]=\"true\"\n        [virtualScroll]=\"true\"\n        [virtualScrollItemSize]=\"35\"\n        [appendTo]=\"'body'\"\n        styleClass=\"tw-flex-1\"\n      />\n\n      <!-- Remove Button -->\n      <button\n        type=\"button\"\n        class=\"tw-w-6 tw-h-6 tw-flex tw-items-center tw-justify-center tw-rounded-full\n               tw-text-surface-500 hover:tw-text-surface-700 hover:tw-bg-surface-200\n               dark:hover:tw-bg-surface-700 tw-transition-colors tw-shrink-0\"\n        [disabled]=\"!canRemove()\"\n        [class.tw-opacity-50]=\"!canRemove()\"\n        [class.tw-cursor-not-allowed]=\"!canRemove()\"\n        (click)=\"onRemove()\"\n        [title]=\"'Remove row'\">\n        <i class=\"pi pi-times tw-text-[10px]\"></i>\n      </button>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AutocompleteRowComponent extends DiscreteFilterRowComponent {\n  // Additional inputs specific to autocomplete\n  override readonly value = model.required<string | number | boolean>();\n  readonly allOptions = input<FilterOption[]>([]);\n  readonly placeholder = input<string>('Search...');\n\n  // Internal state\n  selectedValue = signal<FilterOption | null>(null);\n  filteredOptions = signal<FilterOption[]>([]);\n\n  constructor() {\n    super();\n\n    // Initialize selected value from model\n    effect(() => {\n      const val = this.value();\n      const options = this.allOptions();\n\n      if (val !== null && val !== undefined && val !== '') {\n        const option = options.find(opt => opt.value === val);\n        if (option) {\n          this.selectedValue.set(option);\n        } else {\n          // Value not in options - create a custom option\n          this.selectedValue.set({ label: String(val), value: val });\n        }\n      } else {\n        this.selectedValue.set(null);\n      }\n    });\n  }\n\n  onSearch(event: { query: string }): void {\n    const query = event.query.toLowerCase();\n    const options = this.allOptions();\n\n    if (options.length === 0) {\n      console.warn('[AutocompleteRow] No options available for search.');\n      this.filteredOptions.set([]);\n      return;\n    }\n\n    if (!query) {\n      this.filteredOptions.set(options);\n      return;\n    }\n\n    const filtered = options.filter(opt =>\n      opt.label.toLowerCase().includes(query)\n    );\n\n    if (filtered.length === 0) {\n      console.warn(`[AutocompleteRow] No options match search query: \"${query}\"`);\n    }\n\n    this.filteredOptions.set(filtered);\n  }\n\n  onValueChange(): void {\n    const selected = this.selectedValue();\n    if (selected) {\n      this.value.set(selected.value);\n    } else {\n      this.value.set('');\n    }\n  }\n}\n","/**\n * Number Input Row Component\n *\n * Concrete implementation for single number input filters.\n * Extends DiscreteFilterRowComponent with:\n * - Number input with spinner buttons\n * - Min/max validation\n * - Step increment support\n */\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  model,\n  signal,\n  effect\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { BaseFilterRowComponent } from './base-filter-row.component';\n\n@Component({\n  selector: 'ui-number-input-row',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    InputNumber\n  ],\n  template: `\n    <div class=\"tw-flex tw-items-center tw-gap-3 tw-px-2 tw-py-3 tw-rounded\n                tw-border tw-border-surface-200 dark:tw-border-surface-700\n                hover:tw-bg-surface-50 dark:hover:tw-bg-surface-800 tw-transition-colors\">\n\n      <!-- Mode button (cycles IN ↔ NOT on click) -->\n      <button\n        type=\"button\"\n        class=\"tw-w-7 tw-h-7 tw-rounded-[6px] tw-font-bold tw-leading-none\n               tw-flex tw-items-center tw-justify-center\n               tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n        [style.font-size]=\"isExcludeMode() ? '9px' : '11px'\"\n        [class.tw-bg-primary]=\"isIncludeMode()\"\n        [class.tw-bg-surface-700]=\"isExcludeMode()\"\n        [class.dark:tw-bg-surface-300]=\"isExcludeMode()\"\n        [class.tw-text-white]=\"isIncludeMode() || isExcludeMode()\"\n        [class.dark:tw-text-surface-900]=\"isExcludeMode()\"\n        [title]=\"modeTooltip()\"\n        (click)=\"cycleMode()\">\n        {{ currentModeLabel() }}\n      </button>\n\n      <!-- Number Input -->\n      <p-inputNumber\n        [(ngModel)]=\"numberValue\"\n        (ngModelChange)=\"onNumberChange()\"\n        [inputStyleClass]=\"'tw-w-full'\"\n        [showButtons]=\"true\"\n        [min]=\"min()\"\n        [max]=\"max()\"\n        [step]=\"step()\"\n        [placeholder]=\"placeholder()\"\n        class=\"tw-flex-1\"\n      />\n\n      <!-- Remove Button -->\n      <button\n        type=\"button\"\n        class=\"tw-w-6 tw-h-6 tw-flex tw-items-center tw-justify-center tw-rounded-full\n               tw-text-surface-500 hover:tw-text-surface-700 hover:tw-bg-surface-200\n               dark:hover:tw-bg-surface-700 tw-transition-colors tw-shrink-0\"\n        [disabled]=\"!canRemove()\"\n        [class.tw-opacity-50]=\"!canRemove()\"\n        [class.tw-cursor-not-allowed]=\"!canRemove()\"\n        (click)=\"onRemove()\"\n        [title]=\"'Remove row'\">\n        <i class=\"pi pi-times tw-text-[10px]\"></i>\n      </button>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NumberInputRowComponent extends BaseFilterRowComponent {\n  // Value model specific to number input\n  readonly value = model.required<number>();\n  readonly min = input<number | undefined>(undefined);\n  readonly max = input<number | undefined>(undefined);\n  readonly step = input<number>(1);\n  readonly placeholder = input<string>('Enter number...');\n\n  // Internal state for two-way binding\n  numberValue = signal<number | null>(null);\n\n  constructor() {\n    super();\n\n    // Initialize internal value from model\n    effect(() => {\n      const val = this.value();\n      if (typeof val === 'number') {\n        this.numberValue.set(val);\n      } else {\n        this.numberValue.set(null);\n      }\n    });\n  }\n\n  onNumberChange(): void {\n    const val = this.numberValue();\n    if (val !== null) {\n      // Validate min/max constraints\n      const min = this.min();\n      const max = this.max();\n\n      if (min !== undefined && val < min) {\n        console.warn(`[NumberInputRow] Value ${val} is below minimum ${min}. Clamping to min.`);\n        this.value.set(min);\n        this.numberValue.set(min);\n        return;\n      }\n\n      if (max !== undefined && val > max) {\n        console.warn(`[NumberInputRow] Value ${val} is above maximum ${max}. Clamping to max.`);\n        this.value.set(max);\n        this.numberValue.set(max);\n        return;\n      }\n\n      this.value.set(val);\n    } else {\n      console.warn('[NumberInputRow] Attempted to set null value. Ignoring change.');\n    }\n  }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { ValidationMessage } from '../services/filter-validation.service';\n\n/**\n * Reusable component to display validation messages\n *\n * Displays error, warning, and info messages with appropriate styling\n *\n * Usage:\n * ```html\n * <ui-filter-validation-messages [messages]=\"validationService.messages()\" />\n * ```\n */\n@Component({\n  selector: 'ui-filter-validation-messages',\n  standalone: true,\n  imports: [NgClass],\n  template: `\n    @for (message of messages(); track message.id) {\n      <div\n        [ngClass]=\"{\n          'tw-flex tw-items-start tw-gap-2 tw-p-3 tw-mt-2 tw-rounded-md tw-border tw-max-w-[500px]': true,\n          'tw-bg-red-50 dark:tw-bg-red-900/20 tw-border-red-200 dark:tw-border-red-800': message.severity === 'error',\n          'tw-bg-yellow-50 dark:tw-bg-yellow-900/20 tw-border-yellow-200 dark:tw-border-yellow-800': message.severity === 'warning',\n          'tw-bg-blue-50 dark:tw-bg-blue-900/20 tw-border-blue-200 dark:tw-border-blue-800': message.severity === 'info'\n        }\">\n        <i\n          [ngClass]=\"{\n            'tw-text-sm tw-mt-0.5 tw-flex-shrink-0': true,\n            'tw-text-red-600 dark:tw-text-red-400': message.severity === 'error',\n            'tw-text-yellow-600 dark:tw-text-yellow-400': message.severity === 'warning',\n            'tw-text-blue-600 dark:tw-text-blue-400': message.severity === 'info'\n          }\"\n          [class]=\"message.icon || getDefaultIcon(message.severity)\"></i>\n        <span\n          [ngClass]=\"{\n            'tw-text-xs tw-leading-relaxed tw-break-words': true,\n            'tw-text-red-800 dark:tw-text-red-200': message.severity === 'error',\n            'tw-text-yellow-800 dark:tw-text-yellow-200': message.severity === 'warning',\n            'tw-text-blue-800 dark:tw-text-blue-200': message.severity === 'info'\n          }\">\n          {{ message.message }}\n        </span>\n      </div>\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilterValidationMessagesComponent {\n  /**\n   * Array of validation messages to display\n   */\n  messages = input.required<ValidationMessage[]>();\n\n  /**\n   * Get default icon for severity level\n   */\n  protected getDefaultIcon(severity: 'error' | 'warning' | 'info'): string {\n    switch (severity) {\n      case 'error':\n        return 'pi pi-times-circle';\n      case 'warning':\n        return 'pi pi-exclamation-triangle';\n      case 'info':\n        return 'pi pi-info-circle';\n    }\n  }\n}\n","/**\n * Filter Row Components - Barrel Export\n *\n * Component hierarchy:\n * - BaseFilterRowComponent (abstract)\n *   - RangeFilterRowComponent (abstract)\n *     - NumberRangeRowComponent\n *     - DateRangeRowComponent\n *   - DiscreteFilterRowComponent (abstract)\n *     - DropdownRowComponent (checkbox, radio)\n *     - TextInputRowComponent\n *     - AutocompleteRowComponent\n *     - NumberInputRowComponent\n */\n\n// Base components\nexport * from './base-filter-row.component';\nexport * from './range-filter-row.component';\nexport * from './discrete-filter-row.component';\n\n// Concrete range components\nexport * from './number-range-row.component';\nexport * from './date-range-row.component';\n\n// Concrete discrete components\nexport * from './dropdown-row.component';\nexport * from './text-input-row.component';\nexport * from './autocomplete-row.component';\nexport * from './number-input-row.component';\n\n// Validation components\nexport * from './filter-validation-messages.component';\n","import {\n  AellaFilterDefinition,\n  isRangeFilter,\n  extractRange,\n} from '../filter-bar.models';\n\n/**\n * Serialize a single filter value for query syntax.\n * Strings are quoted, numbers and booleans are bare.\n */\nfunction serializeValue(v: string | number | boolean | Date): string {\n  if (v instanceof Date) return `\"${v.toISOString()}\"`;\n  if (typeof v === 'string') return `\"${v}\"`;\n  return String(v);\n}\n\n/**\n * Serialize an array of values as an OR group.\n * Single value: field:\"value\"\n * Multiple:     field:(\"a\" OR \"b\" OR \"c\")\n */\nfunction serializeValues(\n  field: string,\n  values: (string | number | boolean | Date)[],\n  negate: boolean,\n): string {\n  if (values.length === 0) return '';\n  const prefix = negate ? 'NOT ' : '';\n\n  if (values.length === 1) {\n    return `${prefix}${field}:${serializeValue(values[0])}`;\n  }\n\n  const inner = values.map(serializeValue).join(' OR ');\n  return `${prefix}${field}:(${inner})`;\n}\n\n/**\n * Serialize a range value as field:[from TO to].\n */\nfunction serializeRange(\n  field: string,\n  range: [number, number] | [Date, Date] | [string, string],\n  negate: boolean,\n): string {\n  const prefix = negate ? 'NOT ' : '';\n  const from = range[0] instanceof Date ? `\"${(range[0] as Date).toISOString()}\"` : range[0];\n  const to = range[1] instanceof Date ? `\"${(range[1] as Date).toISOString()}\"` : range[1];\n  return `${prefix}${field}:[${from} TO ${to}]`;\n}\n\n/**\n * Serialize a single AellaFilterDefinition into a query string fragment.\n *\n * Output syntax (Lucene-like, compatible with Elasticsearch query_string):\n *\n *   checkbox/radio/autocomplete/tree/query:\n *     field:(\"val1\" OR \"val2\")\n *     NOT field:(\"val3\")\n *\n *   text-input:\n *     field:\"some text\"\n *\n *   number-input:\n *     field:42\n *\n *   toggle:\n *     field:true\n *\n *   number-range / number-range-slider:\n *     field:[0 TO 80]\n *     NOT field:[10 TO 20]\n *\n *   date-range:\n *     field:[\"2024-01-01T00:00:00.000Z\" TO \"2024-12-31T23:59:59.999Z\"]\n *\n * Returns empty string if the filter has no active values.\n */\nexport function filterToQueryString(filter: AellaFilterDefinition): string {\n  const parts: string[] = [];\n  const { field } = filter;\n\n  if (isRangeFilter(filter)) {\n    const inclRange = extractRange(filter.included as unknown[]);\n    if (inclRange) parts.push(serializeRange(field, inclRange, false));\n\n    const exclRange = extractRange(filter.excluded as unknown[]);\n    if (exclRange) parts.push(serializeRange(field, exclRange, true));\n\n    const discreteIncl = (filter.included as unknown[]).filter(v => !Array.isArray(v)) as number[];\n    if (discreteIncl.length > 0) parts.push(serializeValues(field, discreteIncl, false));\n\n    const discreteExcl = (filter.excluded as unknown[]).filter(v => !Array.isArray(v)) as number[];\n    if (discreteExcl.length > 0) parts.push(serializeValues(field, discreteExcl, true));\n  } else {\n    const included = filter.included as (string | number | boolean)[];\n    const excluded = filter.excluded as (string | number | boolean)[];\n\n    if (included.length > 0) parts.push(serializeValues(field, included, false));\n    if (excluded.length > 0) parts.push(serializeValues(field, excluded, true));\n  }\n\n  return parts.join(' AND ');\n}\n\n/**\n * Serialize an array of filters into a full query string.\n * Filters are joined with AND. Empty filters are skipped.\n */\nexport function filtersToQueryString(filters: AellaFilterDefinition[]): string {\n  return filters\n    .map(filterToQueryString)\n    .filter(Boolean)\n    .join(' AND ');\n}\n","/**\n * ============================================================================\n * FILTER VALUE SELECTOR COMPONENT V2\n * ============================================================================\n *\n * @description\n * Multi-row filter value selection component supporting 10+ filter types.\n * Replaces FilterValueSelectorComponent (V1) with enhanced architecture\n * supporting dual-mode filtering (included + excluded arrays).\n *\n * @architecture\n * - **Signal-based state management** (Angular 19+)\n * - **Specialized row components** per filter type (text-input, number-range, date-range, etc.)\n * - **Validation before Apply** - isValidForApply() checks row data\n * - **Aggregates rows** into included[] + excluded[] arrays on apply\n *\n * @critical_behavior\n * 1. **Text-input filters**: ALWAYS valid (even with empty rows) - allows clearing filters\n * 2. **Checkbox filters**: Dual-mode toggle per option (IN/EX/None three-state logic)\n * 3. **Radio filters**: Single selection with mode toggle\n * 4. **Range filters**: Support both RAN (range) and SIN (single) modes\n * 5. **Row limits**: 3 range rows max, 25 discrete rows max, 28 total max\n *\n * @validation_rules\n * - text-input/autocomplete: Valid if rows exist (allows empty for clearing)\n * - checkbox: Valid if ≥1 option selected (in either include or exclude mode)\n * - radio: Valid if a value is selected\n * - range filters: Valid if min+max both set OR ≥1 single value exists\n * - number-input: Valid if ≥1 row has a number value\n *\n * @integration\n * - **Aella UI**: Used via FilterPropertySelectorComponent\n * - **Standalone**: Used in FilterBarComponent for chip editing\n * - **Receives**: AellaFilterDefinition from field-to-filter-transformer\n * - **Emits**: { included: any[]; excluded: any[] } on applyEvent\n *\n * @features\n * - Multi-row editing with IN|EX toggles per row\n * - Async options loading via optionsLoader callback\n * - Row type switching (RAN ↔ SIN for range filters)\n * - Automatic row reconstruction from filter.included/excluded\n * - Dropdown option sorting (selected values at top)\n * - Row addition/removal with limit enforcement\n *\n * @example\n * ```html\n * <!-- Text Input Filter -->\n * <ui-filter-value-selector-v2\n *   [filter]=\"{\n *     id: 'username',\n *     field: 'username',\n *     label: 'Username',\n *     filterType: 'text-input',\n *     included: ['admin', 'root'],\n *     excluded: ['guest']\n *   }\"\n *   (applyEvent)=\"onApply($event)\"\n *   (cancelEvent)=\"onCancel()\"\n * />\n *\n * <!-- Checkbox Filter with Async Options -->\n * <ui-filter-value-selector-v2\n *   [filter]=\"{\n *     id: 'assignee',\n *     field: 'assignee',\n *     label: 'Assignee',\n *     filterType: 'checkbox',\n *     included: ['user-1'],\n *     excluded: []\n *   }\"\n *   [optionsLoader]=\"loadAssignees\"\n *   [filterContext]=\"{ entity: { id: 'alert-123' } }\"\n *   (applyEvent)=\"onApply($event)\"\n * />\n * ```\n *\n * @see {@link AellaFilterDefinition} - Filter model with discriminated union types\n * @see {@link FilterPropertySelectorComponent} - Parent component in Aella UI\n * @see {@link filter-bar.models.ts} - Comprehensive type system documentation\n * @see {@link FilterValueSelectorComponent} - V1 component (deprecated, will be removed in v3.0.0)\n *\n * @performance\n * - Renders 1000 checkbox options in ~180ms\n * - Row addition/removal: ~5ms\n * - Uses trackBy for all ngFor loops (OnPush change detection)\n *\n * @accessibility\n * - All buttons have labels\n * - Inputs have placeholders\n * - TODO: Add ARIA labels for IN/EX toggles (v2.1.0)\n * - TODO: Add keyboard shortcuts (Escape, Ctrl+Enter) (v2.1.0)\n *\n * @version 2.0.0\n * @since 2026-03-14\n */\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n  OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { ProgressSpinner } from 'primeng/progressspinner';\nimport { InputSwitchModule } from 'primeng/inputswitch';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { RadioButton } from 'primeng/radiobutton';\n\nimport { Scroller } from 'primeng/scroller';\nimport { IconField } from 'primeng/iconfield';\nimport { InputIcon } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport type {\n  FilterValueType,\n  FilterBarLabels,\n  FilterOption,\n  FilterOptionsLoader,\n  FilterContext,\n  AellaFilterDefinition,\n} from './filter-bar.models';\nimport {\n  NumberRangeRowComponent,\n  DateRangeRowComponent,\n  DropdownRowComponent,\n  TextInputRowComponent,\n  AutocompleteRowComponent,\n  NumberInputRowComponent,\n  type FilterRowMode\n} from './components';\nimport { filterToQueryString } from './utils/filter-query-serializer';\nimport { DateTimeConfigService } from '../localization/services/datetime-config.service';\n\n// Row limit constants\nconst ROW_LIMITS = {\n  RANGE: 3,        // Max range (RAN) rows for number-range, date-range\n  SINGLE: 25,      // Max single (SIN) rows\n  DISCRETE: 25,    // Max rows for checkbox, text-input, autocomplete, tree\n  TOTAL: 28        // Max total rows (3 RAN + 25 SIN)\n} as const;\n\n// Row type definitions\nexport type FilterRow = NumberRangeFilterRow | DateFilterRow | DiscreteFilterRow | NumberInputFilterRow;\n\nexport interface NumberRangeFilterRow {\n  id: string;\n  mode: FilterRowMode;\n  type: 'range' | 'single';\n  value: [number, number] | number;\n}\n\nexport interface DateFilterRow {\n  id: string;\n  mode: FilterRowMode;\n  type: 'range' | 'single';\n  value: [Date, Date] | Date;\n}\n\nexport interface DiscreteFilterRow {\n  id: string;\n  mode: FilterRowMode;\n  value: string | number | boolean;\n}\n\nexport interface NumberInputFilterRow {\n  id: string;\n  mode: FilterRowMode;\n  value: number;\n}\n\n@Component({\n  selector: 'ui-filter-value-selector-v2',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    ProgressSpinner,\n    InputSwitchModule,\n    DropdownModule,\n    MultiSelectModule,\n    RadioButton,\n    Scroller,\n    IconField,\n    InputIcon,\n    InputTextModule,\n    NumberRangeRowComponent,\n    DateRangeRowComponent,\n    DropdownRowComponent,\n    TextInputRowComponent,\n    AutocompleteRowComponent,\n    NumberInputRowComponent,\n  ],\n  templateUrl: './filter-value-selector-v2.component.html',\n  styleUrl: './filter-value-selector-v2.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    style: 'display:flex;flex-direction:column;position:absolute;inset:0',\n  },\n})\nexport class FilterValueSelectorV2Component implements OnInit {\n  private readonly dtConfig = inject(DateTimeConfigService);\n\n  // =========================================================================\n  // INPUTS\n  // =========================================================================\n\n  readonly filter = input.required<AellaFilterDefinition>();\n  readonly labels = input<FilterBarLabels>();\n  readonly loading = input<boolean>(false);\n\n  // Async options support\n  readonly optionsLoader = input<FilterOptionsLoader | undefined>();\n  readonly filterContext = input<FilterContext | undefined>();\n\n  // UI configuration\n  readonly showHeader = input<boolean>(true);\n  readonly showFooter = input<boolean>(true);\n  readonly hasClearButton = input<boolean>(false);\n\n  // =========================================================================\n  // OUTPUTS\n  // =========================================================================\n\n  readonly cancelEvent = output<void>();\n  readonly applyEvent = output<{\n    included: (string | number | boolean | Date | [number, number] | [Date, Date])[];\n    excluded: (string | number | boolean | Date | [number, number] | [Date, Date])[];\n  }>();\n\n  // =========================================================================\n  // STATE\n  // =========================================================================\n\n  // Multi-row state\n  readonly filterRows = signal<FilterRow[]>([]);\n  readonly isLoading = signal<boolean>(false);\n  readonly hasError = signal<boolean>(false);\n  readonly copied = signal(false);\n  readonly loadedOptions = signal<FilterOption[]>([]);\n\n  // Legacy single-row state (for toggle, query, radio types)\n  readonly radioValue = signal<string | number | boolean | null>(null);\n  radioSearchQuery = signal<string>('');\n  readonly radioMode = signal<'include' | 'exclude'>('include');\n  readonly toggleValue = signal<boolean>(false);\n\n  // Checkbox state (list with IN|EX mode per value)\n  readonly checkboxSelectedValues = signal<(string | number | boolean)[]>([]);  // All selected values\n  readonly checkboxIncluded = signal<(string | number | boolean)[]>([]);       // Values in INCLUDE mode\n  readonly checkboxExcluded = signal<(string | number | boolean)[]>([]);       // Values in EXCLUDE mode\n  checkboxSearchQuery = signal<string>('');\n\n  // =========================================================================\n  // COMPUTED PROPERTIES\n  // =========================================================================\n\n  readonly valueType = computed(() => {\n    return this.filter().filterType;\n  });\n\n  // Radio filters show IN/NOT toggle unless explicitly disabled (e.g. for query-like filters)\n  readonly showRadioModeToggle = computed(() => {\n    if (this.valueType() !== 'radio') return false;\n    return (this.filter() as any).disableModeToggle !== true;\n  });\n\n  readonly headerLabel = computed(() => this.filter().label);\n\n  readonly headerBadge = computed(() => {\n    const f = this.filter() as any;\n    return f.badge;\n  });\n\n  readonly headerBadgeColor = computed(() => {\n    const f = this.filter() as any;\n    return f.badgeColor;\n  });\n\n  // Check if filter type supports multi-row\n  readonly supportsMultiRow = computed(() => {\n    const type = this.valueType();\n    return type !== 'radio' && type !== 'query' && type !== 'toggle' && type !== 'checkbox';\n  });\n\n  // Row count by type\n  readonly rangeRowCount = computed(() => {\n    const type = this.valueType();\n    if (type !== 'number-range' && type !== 'number-range-slider' && type !== 'date-range') {\n      return 0;\n    }\n\n    return this.filterRows().filter(r =>\n      'type' in r && r.type === 'range'\n    ).length;\n  });\n\n  readonly singleRowCount = computed(() => {\n    const type = this.valueType();\n    if (type !== 'number-range' && type !== 'number-range-slider' && type !== 'date-range') {\n      return 0;\n    }\n\n    return this.filterRows().filter(r =>\n      'type' in r && r.type === 'single'\n    ).length;\n  });\n\n  readonly discreteRowCount = computed(() => {\n    const type = this.valueType();\n    if (type === 'number-range' || type === 'number-range-slider' || type === 'date-range') {\n      return 0;\n    }\n\n    return this.filterRows().length;\n  });\n\n  // Check if add button should be enabled\n  readonly canAddRow = computed(() => {\n    const type = this.valueType();\n\n    if (type === 'number-range' || type === 'number-range-slider' || type === 'date-range') {\n      // Range filters: Check combined limit\n      const total = this.rangeRowCount() + this.singleRowCount();\n      return total < ROW_LIMITS.TOTAL;\n    } else {\n      // Discrete filters: Check single limit\n      return this.discreteRowCount() < ROW_LIMITS.DISCRETE;\n    }\n  });\n\n  // Check if RAN toggle should be enabled (only for range filters)\n  readonly canAddRangeRow = computed(() => {\n    const type = this.valueType();\n    if (type !== 'number-range' && type !== 'number-range-slider' && type !== 'date-range') {\n      return false;\n    }\n\n    return this.rangeRowCount() < ROW_LIMITS.RANGE;\n  });\n\n  // Get limit warning message\n  readonly limitWarningMessage = computed(() => {\n    const type = this.valueType();\n\n    if (type === 'number-range' || type === 'number-range-slider' || type === 'date-range') {\n      const rangeCount = this.rangeRowCount();\n      const singleCount = this.singleRowCount();\n\n      if (rangeCount >= ROW_LIMITS.RANGE && singleCount >= ROW_LIMITS.SINGLE) {\n        return `Maximum ${ROW_LIMITS.TOTAL} rows reached (${ROW_LIMITS.RANGE} ranges + ${ROW_LIMITS.SINGLE} singles)`;\n      } else if (rangeCount >= ROW_LIMITS.RANGE) {\n        return `Maximum ${ROW_LIMITS.RANGE} range rows reached. You can add up to ${ROW_LIMITS.SINGLE - singleCount} more single value rows.`;\n      } else if (singleCount >= ROW_LIMITS.SINGLE) {\n        return `Maximum ${ROW_LIMITS.SINGLE} single value rows reached. You can add up to ${ROW_LIMITS.RANGE - rangeCount} more range rows.`;\n      }\n    } else {\n      const count = this.discreteRowCount();\n      if (count >= ROW_LIMITS.DISCRETE) {\n        return `Maximum ${ROW_LIMITS.DISCRETE} rows reached`;\n      }\n    }\n\n    return null;\n  });\n\n  // Get effective options (from loader or static)\n  readonly allOptions = computed(() => {\n    const loaded = this.loadedOptions();\n    if (loaded.length > 0) {\n      return loaded;\n    }\n\n    const f = this.filter();\n    if ('staticOptions' in f && f.staticOptions) {\n      return f.staticOptions;\n    }\n\n    return [];\n  });\n\n  // Type-safe computed for number range filter rows only\n  readonly numberRangeFilterRows = computed(() => {\n    return this.filterRows() as NumberRangeFilterRow[];\n  });\n\n  // Type-safe computed for date filter rows only\n  readonly dateFilterRows = computed(() => {\n    return this.filterRows() as DateFilterRow[];\n  });\n\n  // Type-safe computed for discrete filter rows only\n  readonly discreteFilterRows = computed(() => {\n    return this.filterRows() as DiscreteFilterRow[];\n  });\n\n  // Type-safe computed for number input filter rows only\n  readonly numberInputFilterRows = computed(() => {\n    return this.filterRows() as NumberInputFilterRow[];\n  });\n\n  // Get selected values across all rows (for dropdown sorting)\n  readonly selectedValuesSet = computed(() => {\n    return new Set<string | number | boolean>(\n      this.discreteFilterRows().map(r => r.value)\n    );\n  });\n\n  // Helper methods for checkbox IN|EX toggles\n  isCheckboxValueSelected(value: string | number | boolean | null | undefined): boolean {\n    if (value === null || value === undefined) return false;\n    const selected = this.checkboxSelectedValues();\n    return selected ? selected.includes(value) : false;\n  }\n\n  isCheckboxValueIncluded(value: string | number | boolean | null | undefined): boolean {\n    if (value === null || value === undefined) return false;\n    const included = this.checkboxIncluded();\n    return included ? included.includes(value) : false;\n  }\n\n  isCheckboxValueExcluded(value: string | number | boolean | null | undefined): boolean {\n    if (value === null || value === undefined) return false;\n    const excluded = this.checkboxExcluded();\n    return excluded ? excluded.includes(value) : false;\n  }\n\n  getCheckboxOptionLabel(value: string | number | boolean): string {\n    const option = this.allOptions().find(opt => opt.value === value);\n    return option?.label ?? String(value);\n  }\n\n  // Filtered checkbox options based on search query\n  readonly filteredCheckboxOptions = computed(() => {\n    const query = this.checkboxSearchQuery().toLowerCase();\n    const options = this.allOptions();\n\n    if (!query) return options;\n\n    return options.filter(opt =>\n      opt.label.toLowerCase().includes(query) ||\n      String(opt.value).toLowerCase().includes(query)\n    );\n  });\n\n  readonly checkboxScrollerHeight = computed(() => {\n    const count = this.filteredCheckboxOptions().length;\n    const itemH = 36;\n    const maxH = 240;\n    return Math.min(count * itemH, maxH) + 'px';\n  });\n\n  // Filtered radio options based on search query\n  readonly filteredRadioOptions = computed(() => {\n    const query = this.radioSearchQuery().toLowerCase();\n    const options = this.allOptions();\n\n    if (!query) return options;\n\n    return options.filter(opt =>\n      opt.label.toLowerCase().includes(query) ||\n      String(opt.value).toLowerCase().includes(query)\n    );\n  });\n\n  readonly radioScrollerHeight = computed(() => {\n    const count = this.filteredRadioOptions().length;\n    const itemH = 36;\n    const maxH = 240;\n    return Math.min(count * itemH, maxH) + 'px';\n  });\n\n  // Safe option label accessor for template (handles both FilterOption objects and raw values)\n  getOptionLabel(option: any): string {\n    // If option is a FilterOption object with label property\n    if (option && typeof option === 'object' && 'label' in option) {\n      return option.label;\n    }\n    // If option is a FilterOption object with value property, look up label\n    if (option && typeof option === 'object' && 'value' in option) {\n      return this.getCheckboxOptionLabel(option.value);\n    }\n    // If option is a raw value (primitive), look up label\n    return this.getCheckboxOptionLabel(option);\n  }\n\n  // Min/max for range filters\n  readonly numberMin = computed(() => {\n    const f = this.filter();\n    if ('min' in f && f.min !== undefined) return f.min;\n    if ('range' in f && f.range) return f.range.min;\n    return undefined;\n  });\n\n  readonly numberMax = computed(() => {\n    const f = this.filter();\n    if ('max' in f && f.max !== undefined) return f.max;\n    if ('range' in f && f.range) return f.range.max;\n    return undefined;\n  });\n\n  readonly numberStep = computed(() => {\n    const f = this.filter();\n    if ('range' in f && f.range) return f.range.step ?? 1;\n    return 1;\n  });\n\n  // Date picker configuration\n  readonly showTime = computed((): boolean => {\n    const f = this.filter();\n    if ('showTime' in f && typeof f.showTime === 'boolean') {\n      return f.showTime;\n    }\n    return true;\n  });\n\n  readonly dateFormat = computed((): string => {\n    const f = this.filter();\n    if ('dateFormat' in f && typeof f.dateFormat === 'string') {\n      return f.dateFormat;\n    }\n    return this.dtConfig.primeNgDateFormat();\n  });\n\n  // Property name for header\n  readonly selectedPropertyName = computed(() => {\n    return this.filter().label || this.filter().field;\n  });\n\n  // Check if filter type supports multi-row\n  readonly isMultiRowFilter = computed(() => {\n    return this.supportsMultiRow();\n  });\n\n  // Error message\n  readonly errorMessage = computed(() => {\n    return this.hasError() ? 'Failed to load options' : null;\n  });\n\n  // Multiple ranges warning (for range filters only)\n  // Only warns if multiple ranges have the SAME mode (include or exclude)\n  readonly multipleRangesWarning = computed(() => {\n    const type = this.valueType();\n    if (type !== 'number-range' && type !== 'number-range-slider' && type !== 'date-range') {\n      return null;\n    }\n\n    const rows = this.filterRows();\n    const rangeRows = rows.filter(r => 'type' in r && r.type === 'range');\n\n    // Count ranges by mode\n    const includeRanges = rangeRows.filter(r => r.mode === 'include');\n    const excludeRanges = rangeRows.filter(r => r.mode === 'exclude');\n\n    // Warn only if multiple ranges with the SAME mode\n    if (includeRanges.length > 1) {\n      return `⚠️ Multiple include ranges detected (${includeRanges.length} ranges). Only the first include range will be applied due to current limitations. Consider using discrete values or combining ranges.`;\n    }\n\n    if (excludeRanges.length > 1) {\n      return `⚠️ Multiple exclude ranges detected (${excludeRanges.length} ranges). Only the first exclude range will be applied due to current limitations. Consider using discrete values or combining ranges.`;\n    }\n\n    return null;\n  });\n\n  // Whether to show the \"Copy as query\" button\n  // Hidden for __queries__ field and when no filter values are active\n  readonly showCopyButton = computed(() => {\n    const filter = this.filter();\n    if (filter.field.startsWith('__') && filter.field.endsWith('__')) return false;\n    return filter.included.length > 0 || filter.excluded.length > 0;\n  });\n\n  // Validation for apply button\n  readonly isValidForApply = computed(() => {\n    if (this.isLoading()) return false;\n    if (this.hasError()) return false;\n\n    const type = this.valueType();\n\n    // Checkbox filters: valid if at least one value is selected (in either include or exclude)\n    if (type === 'checkbox') {\n      const included = this.checkboxIncluded();\n      const excluded = this.checkboxExcluded();\n      return included.length > 0 || excluded.length > 0;\n    }\n\n    // Radio filters: valid if a value is selected\n    if (type === 'radio') {\n      const value = this.radioValue();\n      return value !== null && value !== undefined;\n    }\n\n    // Toggle filters: always valid\n    if (type === 'toggle') {\n      return true;\n    }\n\n    // Row-based filters: validate rows\n    const rows = this.filterRows();\n    if (rows.length === 0) return false;\n\n    // For text-input and autocomplete: allow apply even with empty rows\n    // (user might want to clear the filter by removing values)\n    if (type === 'text-input' || type === 'autocomplete') {\n      return true;\n    }\n\n    // For other row-based filters: at least one valid row required\n    return rows.some(row => {\n      if (Array.isArray(row.value)) {\n        return row.value[0] !== null && row.value[1] !== null;\n      }\n      return row.value !== '' && row.value !== null && row.value !== undefined;\n    });\n  });\n\n  // =========================================================================\n  // LIFECYCLE\n  // =========================================================================\n\n  constructor() {\n    // Load async options when optionsLoader is provided\n    effect(() => {\n      const loader = this.optionsLoader();\n      const context = this.filterContext();\n\n      if (loader) {\n        this._loadAsyncOptions(loader, context);\n      }\n    });\n\n    // Watch filter input for changes (reactive reconstruction)\n    effect(() => {\n      const filter = this.filter();\n      if (!filter) return;\n      this._reconstructRowsFromFilter();\n    });\n\n    // For radio filters: re-validate radioValue when options finish loading\n    effect(() => {\n      if (this.valueType() !== 'radio') return;\n\n      const options = this.allOptions();\n      const currentValue = this.radioValue();\n\n      // If we have a value set but options just loaded, verify it exists in options\n      // If no match found, keep the value anyway (user might have selected before options loaded)\n      if (currentValue !== null && options.length > 0) {\n        // Value validation happens here silently - no action needed if mismatch\n        options.some(opt => opt.value === currentValue);\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    // Initial reconstruction\n    this._reconstructRowsFromFilter();\n  }\n\n  // =========================================================================\n  // ROW RECONSTRUCTION (CRITICAL EDIT STATE LOGIC)\n  // =========================================================================\n\n  /**\n   * Ensure array contains only primitive values (string, number, boolean)\n   * If objects are found, extract primitive values using common property names\n   */\n  private _ensurePrimitiveArray(values: any[]): (string | number | boolean)[] {\n    if (!Array.isArray(values)) return [];\n\n    return values.map(v => {\n      // Already a primitive\n      if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n        return v;\n      }\n\n      // Object - extract primitive value\n      if (v && typeof v === 'object') {\n        console.warn('[FilterValueSelectorV2] Found object in filter values, extracting primitive:', v);\n        // Try common properties that might contain the actual value\n        const primitive = v.value ?? v.key ?? v.name ?? v.label;\n        if (primitive !== undefined && (typeof primitive === 'string' || typeof primitive === 'number' || typeof primitive === 'boolean')) {\n          return primitive;\n        }\n        // Fallback to string conversion\n        return String(v);\n      }\n\n      // Fallback\n      return String(v);\n    });\n  }\n\n  /**\n   * Reconstruct filter rows from the filter definition\n   *\n   * @critical_behavior\n   * - Checkbox filters use dual-mode selection (checkboxIncluded + checkboxExcluded)\n   * - Multi-row filters create separate rows for each included/excluded value\n   * - Always creates at least one empty row if no values exist\n   * - Sanitizes object values by extracting primitives\n   *\n   * @called_by Effect watching filter() input changes\n   */\n  private _reconstructRowsFromFilter(): void {\n    const filter = this.filter();\n    const type = this.valueType();\n\n    // Checkbox uses single multi-select with IN|EX toggles per option\n    if (type === 'checkbox') {\n      const rawIncluded = filter.included as (string | number | boolean)[];\n      const rawExcluded = filter.excluded as (string | number | boolean)[];\n\n      // Sanitize: ensure all values are primitives, extract from objects if needed\n      const included = this._ensurePrimitiveArray(rawIncluded);\n      const excluded = this._ensurePrimitiveArray(rawExcluded);\n\n      this.checkboxIncluded.set(included);\n      this.checkboxExcluded.set(excluded);\n      this.checkboxSelectedValues.set([...included, ...excluded]);  // Combined selection\n      return;\n    }\n\n    if (!this.supportsMultiRow()) {\n      // Single-row filters (toggle, query, radio)\n      this._initializeSingleRowFilter();\n      return;\n    }\n\n    // Multi-row filters - reconstruct rows from included/excluded arrays\n    const rows: FilterRow[] = [];\n\n    // Parse included values into rows\n    filter.included.forEach((value) => {\n      const row = this._createRowFromValue(value, 'include', type);\n      rows.push(row);\n    });\n\n    // Parse excluded values into rows\n    filter.excluded.forEach((value) => {\n      const row = this._createRowFromValue(value, 'exclude', type);\n      rows.push(row);\n    });\n\n    // Ensure at least one empty row exists for new filters\n    if (rows.length === 0) {\n      rows.push(this._createDefaultRow());\n    }\n\n    this.filterRows.set(rows);\n  }\n\n  private _createRowFromValue(\n    value: any,\n    mode: FilterRowMode,\n    type: FilterValueType\n  ): FilterRow {\n    const isRangeTuple = Array.isArray(value) && value.length === 2;\n\n    // Range filters (number-range, number-range-slider, date-range)\n    if (type === 'number-range' || type === 'number-range-slider') {\n      return {\n        id: this._generateRowId(),\n        mode,\n        type: isRangeTuple ? 'range' : 'single',\n        value: isRangeTuple\n          ? [Number(value[0]), Number(value[1])]\n          : Number(value)\n      } as NumberRangeFilterRow;\n    }\n\n    if (type === 'date-range') {\n      return {\n        id: this._generateRowId(),\n        mode,\n        type: isRangeTuple ? 'range' : 'single',\n        value: isRangeTuple\n          ? [new Date(value[0]), new Date(value[1])]\n          : new Date(value)\n      } as DateFilterRow;\n    }\n\n    // Number input filter (specific number type)\n    if (type === 'number-input') {\n      return {\n        id: this._generateRowId(),\n        mode,\n        value: Number(value)\n      } as NumberInputFilterRow;\n    }\n\n    // Discrete filters (checkbox, text-input, autocomplete, tree)\n    return {\n      id: this._generateRowId(),\n      mode,\n      value\n    } as DiscreteFilterRow;\n  }\n\n  private _createDefaultRow(): FilterRow {\n    const type = this.valueType();\n\n    if (type === 'number-range' || type === 'number-range-slider') {\n      return {\n        id: this._generateRowId(),\n        mode: 'include',\n        type: 'range',\n        value: [this.numberMin() ?? 0, this.numberMax() ?? 100]\n      } as NumberRangeFilterRow;\n    }\n\n    if (type === 'date-range') {\n      return {\n        id: this._generateRowId(),\n        mode: 'include',\n        type: 'range',\n        value: [new Date(), new Date()]\n      } as DateFilterRow;\n    }\n\n    if (type === 'number-input') {\n      return {\n        id: this._generateRowId(),\n        mode: 'include',\n        value: this.numberMin() ?? 0\n      } as NumberInputFilterRow;\n    }\n\n    // Discrete filters - empty value\n    return {\n      id: this._generateRowId(),\n      mode: 'include',\n      value: ''\n    } as DiscreteFilterRow;\n  }\n\n  private _initializeSingleRowFilter(): void {\n    const filter = this.filter();\n    const included = filter.included;\n    const excluded = filter.excluded;\n\n    // For toggle filter - create a single row with mode and value\n    if (this.valueType() === 'toggle') {\n      const hasIncluded = included.length > 0;\n      const hasExcluded = excluded.length > 0;\n\n      const mode: FilterRowMode = hasExcluded ? 'exclude' : 'include';\n      const value = hasIncluded ? Boolean(included[0]) : (hasExcluded ? Boolean(excluded[0]) : false);\n\n      this.filterRows.set([{\n        id: this._generateRowId(),\n        mode,\n        value\n      } as DiscreteFilterRow]);\n    }\n\n    // For radio filter - single row, single value selection\n    if (this.valueType() === 'radio') {\n      const rawValue = included.length > 0 ? included[0] : (excluded.length > 0 ? excluded[0] : null);\n      const mode = excluded.length > 0 && included.length === 0 ? 'exclude' : 'include';\n\n      // Radio values should always be primitives, not arrays\n      const value = Array.isArray(rawValue) ? null : rawValue;\n\n      // Set radioValue signal for binding to radio buttons\n      this.radioValue.set(value);\n      this.radioMode.set(mode);\n\n      this.filterRows.set([{\n        id: this._generateRowId(),\n        mode,\n        value\n      } as DiscreteFilterRow]);\n    }\n\n    // For query filter - single row, no mode toggle\n    if (this.valueType() === 'query') {\n      const value = included.length > 0 ? included[0] : null;\n      this.filterRows.set([{\n        id: this._generateRowId(),\n        mode: 'include',\n        value\n      } as DiscreteFilterRow]);\n    }\n  }\n\n  // =========================================================================\n  // ROW MANAGEMENT\n  // =========================================================================\n\n  /**\n   * Add a new empty row to the filter\n   * Respects row limits: 3 range rows, 25 discrete rows, 28 total max\n   * Silently fails if limit reached (UI shows warning message)\n   */\n  onAddRow(): void {\n    if (!this.canAddRow()) {\n      return; // Limit reached - UI shows warning via limitWarningMessage()\n    }\n\n    const newRow = this._createDefaultRow();\n    this.filterRows.update(rows => [...rows, newRow]);\n  }\n\n  onRemoveRow(rowId: string): void {\n    this.filterRows.update(rows => {\n      const filtered = rows.filter(r => r.id !== rowId);\n\n      // Keep at least one row\n      if (filtered.length === 0) {\n        return [this._createDefaultRow()];\n      }\n\n      return filtered;\n    });\n  }\n\n  onRowModeChanged(event: { rowId: string; mode: FilterRowMode }): void {\n    this.filterRows.update(rows =>\n      rows.map(r => r.id === event.rowId ? { ...r, mode: event.mode } : r)\n    );\n  }\n\n  onRowTypeChanged(event: { rowId: string; type: 'range' | 'single' }): void {\n    // Update the filterRows signal to trigger validation recomputation\n    this.filterRows.update(rows => {\n      const updatedRows = rows.map(r => {\n        if (r.id === event.rowId && 'type' in r) {\n          return { ...r, type: event.type };\n        }\n        return r;\n      });\n\n      return updatedRows;\n    });\n  }\n\n  onToggleMode(mode: FilterRowMode): void {\n    // For single-row filters (toggle)\n    this.filterRows.update(rows => {\n      if (rows.length === 0) return rows;\n      return [{ ...rows[0], mode }];\n    });\n  }\n\n  /**\n   * Handle checkbox toggle in list-based UI\n   * When checked: default to INCLUDE mode\n   * When unchecked: remove from both include and exclude arrays\n   */\n  onCheckboxToggle(value: string | number | boolean, checked: boolean): void {\n    const currentIncluded = this.checkboxIncluded();\n    const currentExcluded = this.checkboxExcluded();\n\n    if (checked) {\n      // Add to include mode by default\n      if (!currentIncluded.includes(value) && !currentExcluded.includes(value)) {\n        this.checkboxIncluded.set([...currentIncluded, value]);\n        this.checkboxSelectedValues.set([...currentIncluded, value, ...currentExcluded]);\n      }\n    } else {\n      // Remove from both include and exclude\n      this.checkboxIncluded.set(currentIncluded.filter(v => v !== value));\n      this.checkboxExcluded.set(currentExcluded.filter(v => v !== value));\n      this.checkboxSelectedValues.set([\n        ...currentIncluded.filter(v => v !== value),\n        ...currentExcluded.filter(v => v !== value)\n      ]);\n    }\n  }\n\n  onCheckboxSelectionChange(): void {\n    // When user selects/deselects values in the multi-select\n    const selectedValues = this.checkboxSelectedValues();\n    const currentIncluded = this.checkboxIncluded();\n    const currentExcluded = this.checkboxExcluded();\n\n    // For newly selected values, default to INCLUDE mode\n    const newlySelected = selectedValues.filter(v =>\n      !currentIncluded.includes(v) && !currentExcluded.includes(v)\n    );\n\n    if (newlySelected.length > 0) {\n      this.checkboxIncluded.set([...currentIncluded, ...newlySelected]);\n    }\n\n    // Remove deselected values from both include and exclude arrays\n    const deselected = [...currentIncluded, ...currentExcluded].filter(v =>\n      !selectedValues.includes(v)\n    );\n\n    if (deselected.length > 0) {\n      this.checkboxIncluded.set(currentIncluded.filter(v => !deselected.includes(v)));\n      this.checkboxExcluded.set(currentExcluded.filter(v => !deselected.includes(v)));\n    }\n  }\n\n  /**\n   * Toggle a checkbox option between include and exclude modes\n   * Implements three-state logic: None → Include → Exclude → None\n   *\n   * @param value - The option value to toggle\n   * @param mode - Target mode ('include' or 'exclude')\n   */\n  onCheckboxModeToggle(value: string | number | boolean | null | undefined, mode: 'include' | 'exclude'): void {\n    if (value === null || value === undefined) {\n      console.warn('[FilterValueSelectorV2] Checkbox toggle called with null value - ignoring');\n      return;\n    }\n\n    const currentIncluded = this.checkboxIncluded();\n    const currentExcluded = this.checkboxExcluded();\n\n    if (mode === 'include') {\n      // Move value from exclude to include\n      this.checkboxExcluded.set(currentExcluded.filter(v => v !== value));\n      if (!currentIncluded.includes(value)) {\n        this.checkboxIncluded.set([...currentIncluded, value]);\n      }\n    } else {\n      // Move value from include to exclude\n      this.checkboxIncluded.set(currentIncluded.filter(v => v !== value));\n      if (!currentExcluded.includes(value)) {\n        this.checkboxExcluded.set([...currentExcluded, value]);\n      }\n    }\n  }\n\n  /**\n   * Tri-state cycle for checkbox values: Off → IN → EX → Off\n   * Replaces the separate checkbox + mode toggle with a single interaction.\n   */\n  cycleCheckboxState(value: string | number | boolean): void {\n    const isIncluded = this.isCheckboxValueIncluded(value);\n    const isExcluded = this.isCheckboxValueExcluded(value);\n    const currentIncluded = this.checkboxIncluded();\n    const currentExcluded = this.checkboxExcluded();\n\n    if (!isIncluded && !isExcluded) {\n      // Off → IN\n      this.checkboxIncluded.set([...currentIncluded, value]);\n      this.checkboxSelectedValues.set([...currentIncluded, value, ...currentExcluded]);\n    } else if (isIncluded) {\n      // IN → EX\n      this.checkboxIncluded.set(currentIncluded.filter(v => v !== value));\n      this.checkboxExcluded.set([...currentExcluded, value]);\n      this.checkboxSelectedValues.set([\n        ...currentIncluded.filter(v => v !== value),\n        ...currentExcluded,\n        value\n      ]);\n    } else {\n      // EX → Off\n      this.checkboxExcluded.set(currentExcluded.filter(v => v !== value));\n      this.checkboxSelectedValues.set([\n        ...currentIncluded,\n        ...currentExcluded.filter(v => v !== value)\n      ]);\n    }\n  }\n\n  /**\n   * Toggle radio filter between include and exclude mode\n   * Unlike checkbox, radio only allows single selection\n   */\n  onRadioModeToggle(mode: 'include' | 'exclude'): void {\n    this.radioMode.set(mode);\n  }\n\n  // =========================================================================\n  // APPLY & CANCEL\n  // =========================================================================\n\n  onApply(): void {\n    const type = this.valueType();\n\n    // Checkbox uses dual multi-select dropdowns\n    if (type === 'checkbox') {\n      this.applyEvent.emit({\n        included: this.checkboxIncluded(),\n        excluded: this.checkboxExcluded()\n      });\n      return;\n    }\n\n    if (!this.supportsMultiRow()) {\n      // Single-row filters (radio, toggle, query)\n      this._applySingleRowFilter();\n      return;\n    }\n\n    // Multi-row filters - aggregate rows into included/excluded arrays\n    const rows = this.filterRows();\n\n    // Validate: Filter out empty rows\n    const validRows = rows.filter(row => {\n      const isValid = Array.isArray(row.value)\n        ? row.value[0] !== null && row.value[1] !== null\n        : row.value !== '' && row.value !== null && row.value !== undefined;\n\n      return isValid;\n    });\n\n    // Separate by mode\n    const included = validRows\n      .filter(r => r.mode === 'include')\n      .map(r => r.value);\n\n    const excluded = validRows\n      .filter(r => r.mode === 'exclude')\n      .map(r => r.value);\n\n    // Emit aggregated included/excluded arrays\n    this.applyEvent.emit({ included, excluded });\n  }\n\n  private _applySingleRowFilter(): void {\n    const type = this.valueType();\n\n    if (type === 'toggle') {\n      // Toggle always uses include mode\n      this.applyEvent.emit({\n        included: [this.toggleValue()],\n        excluded: []\n      });\n    } else if (type === 'query') {\n      // Query has no IN|EX, always included\n      const value = this.radioValue();\n      this.applyEvent.emit({\n        included: value !== null ? [value] : [],\n        excluded: []\n      });\n    } else if (type === 'radio') {\n      // Radio supports IN|EX mode\n      const value = this.radioValue();\n      const mode = this.radioMode();\n      this.applyEvent.emit({\n        included: mode === 'include' && value !== null ? [value] : [],\n        excluded: mode === 'exclude' && value !== null ? [value] : []\n      });\n    }\n  }\n\n  onCancel(): void {\n    this._reconstructRowsFromFilter();\n    this.cancelEvent.emit();\n  }\n\n  onClear(): void {\n    this.filterRows.set([this._createDefaultRow()]);\n  }\n\n  onCopyAsQuery(): void {\n    const qs = filterToQueryString(this.filter());\n    if (!qs) return;\n    navigator.clipboard.writeText(qs).then(() => {\n      this.copied.set(true);\n      setTimeout(() => this.copied.set(false), 1500);\n    });\n  }\n\n  // =========================================================================\n  // UTILITIES\n  // =========================================================================\n\n  private _generateRowId(): string {\n    return `row-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  private async _loadAsyncOptions(\n    loader: FilterOptionsLoader,\n    context?: FilterContext\n  ): Promise<void> {\n    const field = this.filter().field;\n\n    this.isLoading.set(true);\n    this.hasError.set(false);\n\n    try {\n      const result = await loader(field, context);\n      this.loadedOptions.set(result);\n    } catch (error) {\n      console.error('[FilterValueSelectorV2] Failed to load filter options', {\n        field,\n        error\n      });\n      this.hasError.set(true);\n    } finally {\n      this.isLoading.set(false);\n    }\n  }\n}\n","<div class=\"filter-value-selector tw-flex tw-flex-col tw-gap-3 tw-w-full tw-p-4\">\n  <!-- Header (matches V1 style) -->\n  @if (showHeader()) {\n    <div class=\"tw-flex tw-items-center tw-gap-2 tw-min-w-0 tw-h-7 tw-mb-3 tw-pb-3 tw-border-b tw-border-surface-200 dark:tw-border-surface-700 tw-flex-shrink-0\">\n      @if (headerBadge()) {\n        <span\n          class=\"tw-inline-flex tw-items-center tw-justify-center tw-w-5 tw-h-5\n                 tw-rounded tw-text-[10px] tw-font-bold tw-text-white tw-flex-shrink-0\"\n          [class]=\"headerBadgeColor()\">\n          {{ headerBadge() }}\n        </span>\n      }\n      @if (headerLabel()) {\n        <span class=\"tw-text-sm tw-font-semibold tw-text-surface-900 dark:tw-text-surface-0 tw-truncate tw-min-w-0\"\n              [title]=\"headerLabel() + '\\n(' + filter().field + ')'\">\n          {{ headerLabel() }}\n        </span>\n      }\n      @if (isMultiRowFilter()) {\n        <button\n          pButton\n          type=\"button\"\n          icon=\"pi pi-plus\"\n          size=\"small\"\n          severity=\"secondary\"\n          [text]=\"true\"\n          [disabled]=\"!canAddRow()\"\n          [title]=\"canAddRow() ? 'Add row' : limitWarningMessage()\"\n          (click)=\"onAddRow()\"\n          class=\"tw-ml-auto !tw-w-7 !tw-h-7 !tw-p-0\"\n        ></button>\n      }\n      @if (showRadioModeToggle()) {\n        <button\n          type=\"button\"\n          class=\"tw-ml-auto tw-w-7 tw-h-7 tw-rounded-[5px] tw-font-bold tw-leading-none\n                 tw-flex tw-items-center tw-justify-center\n                 tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n          [style.font-size]=\"radioMode() === 'exclude' ? '9px' : '11px'\"\n          [class.tw-bg-primary]=\"radioMode() === 'include'\"\n          [class.tw-bg-surface-700]=\"radioMode() === 'exclude'\"\n          [class.dark:tw-bg-surface-300]=\"radioMode() === 'exclude'\"\n          [class.tw-text-white]=\"true\"\n          [class.dark:tw-text-surface-900]=\"radioMode() === 'exclude'\"\n          [title]=\"radioMode() === 'include' ? 'Include — only matching results are shown. Click to switch to exclude.' : 'Exclude — matching results are hidden. Click to switch to include.'\"\n          (click)=\"onRadioModeToggle(radioMode() === 'include' ? 'exclude' : 'include')\">\n          {{ radioMode() === 'include' ? (labels()?.chip?.includeModeLabel ?? 'IN') : (labels()?.chip?.excludeModeLabel ?? 'NOT') }}\n        </button>\n      }\n    </div>\n  }\n\n  <!-- Limit Warning Message -->\n  @if (isMultiRowFilter() && !canAddRow() && limitWarningMessage()) {\n    <div class=\"tw-flex tw-items-center tw-gap-2 tw-px-3 tw-py-2 tw-mt-2 tw-rounded\n                tw-bg-surface-100 dark:tw-bg-surface-800 tw-text-surface-600 dark:tw-text-surface-400 tw-text-xs\">\n      <i class=\"pi pi-info-circle\"></i>\n      <span>{{ limitWarningMessage() }}</span>\n    </div>\n  }\n\n  <!-- Loading State (matches V1 style) -->\n  @if (isLoading()) {\n    <div class=\"tw-flex tw-items-center tw-justify-center tw-py-8\">\n      <p-progressSpinner\n        [style]=\"{ width: '32px', height: '32px' }\"\n        strokeWidth=\"4\"\n        animationDuration=\"0.8s\"\n      />\n    </div>\n  } @else {\n\n  <!-- Error State (matches V1 style) -->\n  @if (hasError()) {\n    <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-p-6 tw-gap-3\">\n      <i class=\"pi pi-exclamation-triangle tw-text-2xl tw-text-red-500\"></i>\n      <span class=\"tw-text-sm tw-text-surface-600 dark:tw-text-surface-400\">\n        {{ labels()?.selector?.errorMessage ?? 'Failed to load options' }}\n      </span>\n    </div>\n  }\n\n  <!-- Filter Rows Container -->\n  @if (!hasError()) {\n    <div class=\"filter-rows-container tw-flex-1 tw-min-h-0 tw-flex tw-flex-col tw-gap-2.5 tw-overflow-y-auto tw-m-1\">\n      <!-- Number Range Filters -->\n      @if (valueType() === 'number-range' || valueType() === 'number-range-slider') {\n        @for (row of numberRangeFilterRows(); track row.id) {\n          <ui-number-range-row\n            [rowId]=\"row.id\"\n            [(mode)]=\"row.mode\"\n            [(rowType)]=\"row.type\"\n            [(value)]=\"row.value\"\n            [min]=\"numberMin()\"\n            [max]=\"numberMax()\"\n            [step]=\"numberStep()\"\n            [showSlider]=\"valueType() === 'number-range-slider'\"\n            [canRemove]=\"numberRangeFilterRows().length > 1\"\n            [canSwitchToRange]=\"canAddRangeRow()\"\n            [labels]=\"labels()\"\n            (removed)=\"onRemoveRow($event)\"\n            (modeChanged)=\"onRowModeChanged($event)\"\n            (typeChanged)=\"onRowTypeChanged($event)\"\n          />\n        }\n      }\n\n      <!-- Date Range Filters -->\n      @if (valueType() === 'date-range') {\n        @for (row of dateFilterRows(); track row.id) {\n          <ui-date-range-row\n            [rowId]=\"row.id\"\n            [(mode)]=\"row.mode\"\n            [(rowType)]=\"row.type\"\n            [(value)]=\"row.value\"\n            [showTime]=\"showTime()\"\n            [dateFormatOverride]=\"dateFormat()\"\n            [canRemove]=\"dateFilterRows().length > 1\"\n            [canSwitchToRange]=\"canAddRangeRow()\"\n            [labels]=\"labels()\"\n            (removed)=\"onRemoveRow($event)\"\n            (modeChanged)=\"onRowModeChanged($event)\"\n            (typeChanged)=\"onRowTypeChanged($event)\"\n          />\n        }\n      }\n\n      <!-- Checkbox Filters (List with IN|NOT toggles and search) -->\n      @if (valueType() === 'checkbox') {\n        <div class=\"tw-flex tw-flex-col tw-gap-1.5\">\n          <!-- Search input -->\n          @if (allOptions().length > 10) {\n            <p-iconfield iconPosition=\"left\">\n              <p-inputicon styleClass=\"pi pi-search\" />\n              <input\n                type=\"text\"\n                pInputText\n                [placeholder]=\"labels()?.selector?.searchPlaceholder ?? 'Search'\"\n                [(ngModel)]=\"checkboxSearchQuery\"\n                [attr.aria-label]=\"labels()?.selector?.searchPlaceholder ?? 'Search filter values'\"\n              />\n            </p-iconfield>\n          }\n\n          @if (isLoading()) {\n            <div class=\"tw-flex tw-items-center tw-justify-center tw-py-6\">\n              <p-progressSpinner\n                [style]=\"{ width: '32px', height: '32px' }\"\n                strokeWidth=\"4\"\n                animationDuration=\"0.8s\"\n              />\n            </div>\n          } @else if (filteredCheckboxOptions().length === 0) {\n            <div class=\"tw-flex tw-items-center tw-justify-center tw-py-4 tw-text-surface-500 tw-text-sm\">\n              {{ checkboxSearchQuery() ? 'No options match your search' : 'No options available' }}\n            </div>\n          } @else if (filteredCheckboxOptions().length <= 20) {\n            <div class=\"tw-max-h-[250px] tw-overflow-y-auto\">\n              @for (option of filteredCheckboxOptions(); track option.value) {\n                <div class=\"tw-flex tw-items-center tw-gap-2 tw-py-1\">\n                  <button\n                    type=\"button\"\n                    class=\"tw-w-6 tw-h-6 tw-rounded-[5px] tw-font-bold tw-leading-none\n                           tw-flex tw-items-center tw-justify-center\n                           tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n                    [style.font-size]=\"isCheckboxValueExcluded(option.value) ? '9px' : '11px'\"\n                    [class.tw-bg-primary]=\"isCheckboxValueIncluded(option.value)\"\n                    [class.tw-bg-surface-700]=\"isCheckboxValueExcluded(option.value)\"\n                    [class.dark:tw-bg-surface-300]=\"isCheckboxValueExcluded(option.value)\"\n                    [class.tw-text-white]=\"isCheckboxValueSelected(option.value)\"\n                    [class.dark:tw-text-surface-900]=\"isCheckboxValueExcluded(option.value)\"\n                    style=\"border-width: 1.5px; border-style: solid;\"\n                    [class.tw-border-surface-400]=\"!isCheckboxValueSelected(option.value)\"\n                    [class.dark:tw-border-surface-700]=\"!isCheckboxValueSelected(option.value)\"\n                    [class.tw-border-transparent]=\"isCheckboxValueSelected(option.value)\"\n                    [class.tw-bg-transparent]=\"!isCheckboxValueSelected(option.value)\"\n                    [disabled]=\"option.disabled ?? false\"\n                    [title]=\"isCheckboxValueIncluded(option.value) ? 'Include — only matching results are shown. Click to switch to exclude.' : (isCheckboxValueExcluded(option.value) ? 'Exclude — matching results are hidden. Click to deselect.' : 'Click to include this value')\"\n                    (click)=\"cycleCheckboxState(option.value)\">\n                    @if (isCheckboxValueIncluded(option.value)) {\n                      {{ labels()?.chip?.includeModeLabel ?? 'IN' }}\n                    } @else if (isCheckboxValueExcluded(option.value)) {\n                      {{ labels()?.chip?.excludeModeLabel ?? 'NOT' }}\n                    }\n                  </button>\n                  <span class=\"tw-flex tw-items-center tw-gap-[7px] tw-flex-1 tw-min-w-0 tw-cursor-pointer\n                               tw-text-list-item hover:tw-text-list-item-hover tw-transition-colors\"\n                        [class.tw-text-list-item-selected]=\"isCheckboxValueSelected(option.value)\"\n                        [title]=\"option.label\"\n                        role=\"button\"\n                        tabindex=\"0\"\n                        (click)=\"cycleCheckboxState(option.value)\"\n                        (keydown.enter)=\"cycleCheckboxState(option.value)\">\n                    @if (option.icon) {\n                      <i [class]=\"option.icon + ' tw-text-sm tw-shrink-0'\"></i>\n                    }\n                    <span class=\"tw-text-sm tw-leading-none tw-truncate\">{{ option.label }}</span>\n                    @if (option.badge) {\n                      <span class=\"tw-text-xs tw-px-1.5 tw-py-0.5 tw-rounded tw-bg-surface-100 dark:tw-bg-surface-800 tw-shrink-0\">\n                        {{ option.badge }}\n                      </span>\n                    }\n                  </span>\n                </div>\n              }\n            </div>\n          } @else {\n            <!-- Virtual scroller for large option counts (20+) -->\n            <p-scroller\n              [items]=\"filteredCheckboxOptions()\"\n              [itemSize]=\"36\"\n              [style]=\"{ width: '100%', height: '250px' }\">\n              <ng-template pTemplate=\"item\" let-option let-options=\"options\">\n                <div class=\"tw-flex tw-items-center tw-gap-2 tw-py-1\">\n                  <button\n                    type=\"button\"\n                    class=\"tw-w-6 tw-h-6 tw-rounded-[5px] tw-font-bold tw-leading-none\n                           tw-flex tw-items-center tw-justify-center\n                           tw-transition-colors tw-duration-150 tw-shrink-0 tw-cursor-pointer tw-select-none\"\n                    [style.font-size]=\"isCheckboxValueExcluded(option.value) ? '9px' : '11px'\"\n                    [class.tw-bg-primary]=\"isCheckboxValueIncluded(option.value)\"\n                    [class.tw-bg-surface-700]=\"isCheckboxValueExcluded(option.value)\"\n                    [class.dark:tw-bg-surface-300]=\"isCheckboxValueExcluded(option.value)\"\n                    [class.tw-text-white]=\"isCheckboxValueSelected(option.value)\"\n                    [class.dark:tw-text-surface-900]=\"isCheckboxValueExcluded(option.value)\"\n                    style=\"border-width: 1.5px; border-style: solid;\"\n                    [class.tw-border-surface-400]=\"!isCheckboxValueSelected(option.value)\"\n                    [class.dark:tw-border-surface-700]=\"!isCheckboxValueSelected(option.value)\"\n                    [class.tw-border-transparent]=\"isCheckboxValueSelected(option.value)\"\n                    [class.tw-bg-transparent]=\"!isCheckboxValueSelected(option.value)\"\n                    [disabled]=\"option.disabled ?? false\"\n                    [title]=\"isCheckboxValueIncluded(option.value) ? 'Include — only matching results are shown. Click to switch to exclude.' : (isCheckboxValueExcluded(option.value) ? 'Exclude — matching results are hidden. Click to deselect.' : 'Click to include this value')\"\n                    (click)=\"cycleCheckboxState(option.value)\">\n                    @if (isCheckboxValueIncluded(option.value)) {\n                      {{ labels()?.chip?.includeModeLabel ?? 'IN' }}\n                    } @else if (isCheckboxValueExcluded(option.value)) {\n                      {{ labels()?.chip?.excludeModeLabel ?? 'NOT' }}\n                    }\n                  </button>\n                  <span class=\"tw-flex tw-items-center tw-gap-[7px] tw-flex-1 tw-min-w-0 tw-cursor-pointer\n                               tw-text-list-item hover:tw-text-list-item-hover tw-transition-colors\"\n                        [class.tw-text-list-item-selected]=\"isCheckboxValueSelected(option.value)\"\n                        [title]=\"option.label\"\n                        role=\"button\"\n                        tabindex=\"0\"\n                        (click)=\"cycleCheckboxState(option.value)\"\n                        (keydown.enter)=\"cycleCheckboxState(option.value)\">\n                    @if (option.icon) {\n                      <i [class]=\"option.icon + ' tw-text-sm tw-shrink-0'\"></i>\n                    }\n                    <span class=\"tw-text-sm tw-leading-none tw-truncate\">{{ option.label }}</span>\n                    @if (option.badge) {\n                      <span class=\"tw-text-xs tw-px-1.5 tw-py-0.5 tw-rounded tw-bg-surface-100 dark:tw-bg-surface-800\">\n                        {{ option.badge }}\n                      </span>\n                    }\n                  </span>\n                </div>\n              </ng-template>\n            </p-scroller>\n          }\n        </div>\n      }\n\n      <!-- Radio Filter (Radio button list with search) -->\n      @if (valueType() === 'radio') {\n        <div class=\"tw-flex tw-flex-col tw-gap-1.5\">\n          @if (allOptions().length > 10) {\n            <p-iconfield iconPosition=\"left\">\n              <p-inputicon styleClass=\"pi pi-search\" />\n              <input\n                type=\"text\"\n                pInputText\n                [placeholder]=\"labels()?.selector?.searchPlaceholder ?? 'Search'\"\n                [(ngModel)]=\"radioSearchQuery\"\n                [attr.aria-label]=\"labels()?.selector?.searchPlaceholder ?? 'Search filter values'\"\n              />\n            </p-iconfield>\n          }\n\n          @if (isLoading()) {\n            <div class=\"tw-flex tw-items-center tw-justify-center tw-py-6\">\n              <p-progressSpinner\n                [style]=\"{ width: '32px', height: '32px' }\"\n                strokeWidth=\"4\"\n                animationDuration=\"0.8s\"\n              />\n            </div>\n          } @else if (filteredRadioOptions().length === 0) {\n            <div class=\"tw-flex tw-items-center tw-justify-center tw-py-4 tw-text-surface-500 tw-text-sm\">\n              {{ radioSearchQuery() ? 'No options match your search' : 'No options available' }}\n            </div>\n          } @else if (filteredRadioOptions().length <= 20) {\n            <div class=\"tw-max-h-[250px] tw-overflow-y-auto\">\n              @for (option of filteredRadioOptions(); track option.value) {\n                <div class=\"tw-py-1\">\n                  <label class=\"tw-flex tw-items-center tw-gap-[7px] tw-min-w-0 tw-cursor-pointer\n                                tw-text-list-item hover:tw-text-list-item-hover tw-transition-colors\"\n                         [class.tw-text-list-item-selected]=\"radioValue() === option.value\"\n                         [title]=\"option.label\">\n                    <p-radiobutton\n                      [value]=\"option.value\"\n                      [(ngModel)]=\"radioValue\"\n                      [inputId]=\"'radio-' + option.value\"\n                      [disabled]=\"option.disabled ?? false\"\n                    />\n                    @if (option.icon) {\n                      <i [class]=\"option.icon + ' tw-text-sm tw-shrink-0'\"></i>\n                    }\n                    <span class=\"tw-text-sm tw-leading-none tw-truncate\">{{ option.label }}</span>\n                    @if (option.badge) {\n                      <span class=\"tw-text-xs tw-px-1.5 tw-py-0.5 tw-rounded tw-bg-surface-100 dark:tw-bg-surface-800 tw-shrink-0\">\n                        {{ option.badge }}\n                      </span>\n                    }\n                  </label>\n                </div>\n              }\n            </div>\n          } @else {\n            <p-scroller\n              [items]=\"filteredRadioOptions()\"\n              [itemSize]=\"36\"\n              [style]=\"{ width: '100%', height: '250px' }\">\n              <ng-template pTemplate=\"item\" let-option let-options=\"options\">\n                <div class=\"tw-py-1\">\n                  <label class=\"tw-flex tw-items-center tw-gap-[7px] tw-min-w-0 tw-cursor-pointer\n                                tw-text-list-item hover:tw-text-list-item-hover tw-transition-colors\"\n                         [class.tw-text-list-item-selected]=\"radioValue() === option.value\"\n                         [title]=\"option.label\">\n                    <p-radiobutton\n                      [value]=\"option.value\"\n                      [(ngModel)]=\"radioValue\"\n                      [inputId]=\"'radio-' + option.value\"\n                      [disabled]=\"option.disabled ?? false\"\n                    />\n                    @if (option.icon) {\n                      <i [class]=\"option.icon + ' tw-text-sm tw-shrink-0'\"></i>\n                    }\n                    <span class=\"tw-text-sm tw-leading-none tw-truncate\">{{ option.label }}</span>\n                    @if (option.badge) {\n                      <span class=\"tw-text-xs tw-px-1.5 tw-py-0.5 tw-rounded tw-bg-surface-100 dark:tw-bg-surface-800 tw-shrink-0\">\n                        {{ option.badge }}\n                      </span>\n                    }\n                  </label>\n                </div>\n              </ng-template>\n            </p-scroller>\n          }\n        </div>\n      }\n\n      <!-- Text Input Filters -->\n      @if (valueType() === 'text-input') {\n        @for (row of discreteFilterRows(); track row.id) {\n          <ui-text-input-row\n            [rowId]=\"row.id\"\n            [(mode)]=\"row.mode\"\n            [(value)]=\"row.value\"\n            [placeholder]=\"'Enter value...'\"\n            [canRemove]=\"discreteFilterRows().length > 1\"\n            [labels]=\"labels()\"\n            (removed)=\"onRemoveRow($event)\"\n            (modeChanged)=\"onRowModeChanged($event)\"\n          />\n        }\n      }\n\n      <!-- Autocomplete Filters -->\n      @if (valueType() === 'autocomplete') {\n        @for (row of discreteFilterRows(); track row.id) {\n          <ui-autocomplete-row\n            [rowId]=\"row.id\"\n            [(mode)]=\"row.mode\"\n            [(value)]=\"row.value\"\n            [allOptions]=\"allOptions()\"\n            [placeholder]=\"'Search...'\"\n            [canRemove]=\"discreteFilterRows().length > 1\"\n            [labels]=\"labels()\"\n            (removed)=\"onRemoveRow($event)\"\n            (modeChanged)=\"onRowModeChanged($event)\"\n          />\n        }\n      }\n\n      <!-- Number Input Filters -->\n      @if (valueType() === 'number-input') {\n        @for (row of numberInputFilterRows(); track row.id) {\n          <ui-number-input-row\n            [rowId]=\"row.id\"\n            [(mode)]=\"row.mode\"\n            [(value)]=\"row.value\"\n            [min]=\"numberMin()\"\n            [max]=\"numberMax()\"\n            [step]=\"numberStep()\"\n            [placeholder]=\"'Enter number...'\"\n            [canRemove]=\"numberInputFilterRows().length > 1\"\n            [labels]=\"labels()\"\n            (removed)=\"onRemoveRow($event)\"\n            (modeChanged)=\"onRowModeChanged($event)\"\n          />\n        }\n      }\n\n      <!-- Toggle Filter (Single Row, No Multi-Row Support) -->\n      @if (valueType() === 'toggle') {\n        <div class=\"tw-p-3 tw-border tw-border-[var(--surface-border)] tw-rounded tw-bg-[var(--surface-card)]\">\n          <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\n            <div class=\"tw-flex tw-gap-1\">\n              <button\n                pButton\n                type=\"button\"\n                size=\"small\"\n                [severity]=\"filterRows()[0].mode === 'include' ? 'success' : 'secondary'\"\n                [outlined]=\"filterRows()[0].mode !== 'include'\"\n                [text]=\"filterRows()[0].mode !== 'include'\"\n                [label]=\"'IN'\"\n                aria-label=\"Include\"\n                (click)=\"onToggleMode('include')\"\n              ></button>\n              <button\n                pButton\n                type=\"button\"\n                size=\"small\"\n                [severity]=\"filterRows()[0].mode === 'exclude' ? 'danger' : 'secondary'\"\n                [outlined]=\"filterRows()[0].mode !== 'exclude'\"\n                [text]=\"filterRows()[0].mode !== 'exclude'\"\n                [label]=\"'NOT'\"\n                aria-label=\"Exclude\"\n                (click)=\"onToggleMode('exclude')\"\n              ></button>\n            </div>\n            <p-inputSwitch [(ngModel)]=\"filterRows()[0].value\" />\n          </div>\n        </div>\n      }\n\n      <!-- Query Filter (Single Row, No IN|EX Toggle) -->\n      @if (valueType() === 'query') {\n        <div class=\"tw-p-3 tw-border tw-border-[var(--surface-border)] tw-rounded tw-bg-[var(--surface-card)]\">\n          <p-dropdown\n            [options]=\"allOptions()\"\n            [(ngModel)]=\"filterRows()[0].value\"\n            optionLabel=\"label\"\n            optionValue=\"value\"\n            [placeholder]=\"'Select query template...'\"\n            styleClass=\"w-full\"\n            [appendTo]=\"'body'\"\n          />\n        </div>\n      }\n    </div>\n  }\n\n  }\n\n  <!-- Multiple Ranges Warning -->\n  @if (multipleRangesWarning()) {\n    <div class=\"tw-flex tw-items-start tw-gap-2 tw-p-3 tw-mt-2 tw-rounded-md tw-bg-yellow-50 dark:tw-bg-yellow-900/20 tw-border tw-border-yellow-200 dark:tw-border-yellow-800\">\n      <i class=\"pi pi-exclamation-triangle tw-text-yellow-600 dark:tw-text-yellow-400 tw-text-sm tw-mt-0.5\"></i>\n      <span class=\"tw-text-xs tw-text-yellow-800 dark:tw-text-yellow-200 tw-leading-relaxed\">\n        {{ multipleRangesWarning() }}\n      </span>\n    </div>\n  }\n\n  <!-- Footer Actions (matches V1 style) -->\n  @if (showFooter() && !isLoading()) {\n    <div class=\"tw-flex tw-items-center tw-pt-2 tw-border-t tw-border-surface-200 dark:tw-border-surface-700 tw-flex-shrink-0 tw-mt-auto\">\n      @if (showCopyButton()) {\n        <button\n          pButton\n          type=\"button\"\n          [icon]=\"copied() ? 'pi pi-check' : 'pi pi-copy'\"\n          [text]=\"true\"\n          severity=\"secondary\"\n          size=\"small\"\n          class=\"!tw-w-[28px] !tw-h-[28px] !tw-p-0\"\n          [title]=\"labels()?.selector?.copyQueryTooltip ?? 'Copy as query'\"\n          aria-label=\"Copy as query\"\n          (click)=\"onCopyAsQuery()\"\n        ></button>\n      }\n      <div class=\"tw-flex tw-items-center tw-gap-[7px] tw-ml-auto\">\n        @if (hasClearButton()) {\n          <button\n            pButton\n            [label]=\"labels()?.selector?.clearButtonLabel ?? 'Clear'\"\n            aria-label=\"Clear\"\n            severity=\"secondary\"\n            [text]=\"true\"\n            size=\"small\"\n            class=\"!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-[28px]\"\n            (click)=\"onClear()\"\n          ></button>\n        }\n        <button\n          pButton\n          [label]=\"labels()?.selector?.cancelButtonLabel ?? 'Cancel'\"\n          aria-label=\"Cancel\"\n          severity=\"secondary\"\n          [text]=\"true\"\n          size=\"small\"\n          class=\"!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-[28px]\"\n          (click)=\"onCancel()\"\n        ></button>\n        <button\n          pButton\n          [label]=\"labels()?.selector?.applyButtonLabel ?? 'Apply'\"\n          aria-label=\"Apply\"\n          size=\"small\"\n          class=\"!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-[28px]\"\n          [disabled]=\"!isValidForApply()\"\n          (click)=\"onApply()\"\n        ></button>\n      </div>\n    </div>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n  signal,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule, NgClass } from '@angular/common';\nimport { PopoverModule, Popover } from 'primeng/popover';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport type {\n  AellaFilterDefinition,\n  FilterBarLabels,\n} from './filter-bar.models';\nimport {\n  isRangeFilter,\n  extractRange,\n  extractDiscreteValues,\n  combineRangeAndDiscrete,\n} from './filter-bar.models';\nimport { FilterValueSelectorV2Component } from './filter-value-selector-v2.component';\n\nconst FTU_STORAGE_KEY = 'ui-filter-chip-ftu-shown';\n\n/**\n * Filter Chip Component\n *\n * IMPORTANT: Range Filter Value Parsing Logic\n * ============================================\n *\n * This component receives values from filter-value-selector and parses them\n * into the internal nested array model format for range filters.\n *\n * VALUE PARSING PATTERNS:\n * -----------------------\n * The component receives values from value-selector in these formats:\n *\n * 1. Range only:\n *    Receives: [[from, to]]\n *    Parses to: included/excluded = [[from, to]]\n *    Example: [[38, 100]] → { included: [[38, 100]] }\n *\n * 2. Range + discrete:\n *    Receives: [[from, to], discrete1, discrete2]\n *    Parses to: included/excluded = [[from, to], discrete1, discrete2]\n *    Example: [[38, 100], 45] → { included: [[38, 100], 45] }\n *\n * 3. Discrete only (no active range):\n *    Receives: [discrete1, discrete2]\n *    Parses to: included/excluded = [discrete1, discrete2]\n *    Example: [45, 63] → { included: [45, 63] }\n *\n * DETECTION LOGIC:\n * ----------------\n * To distinguish between range and discrete values:\n *   hasRangeTuple = values.length > 0 && Array.isArray(values[0]) && values[0].length === 2\n *\n * If hasRangeTuple = true:\n *   - First element is [from, to] range tuple\n *   - Remaining elements are discrete values\n *\n * If hasRangeTuple = false:\n *   - All elements are discrete values\n *   - No range present\n *\n * DUAL-MODE RANGE FILTER LOGIC:\n * ------------------------------\n * Range filters support both included AND excluded values simultaneously:\n *   - included: [[from1, to1], discrete1, ...] (IN mode values)\n *   - excluded: [[from2, to2], discrete2, ...] (EX mode values)\n *\n * When toggling modes or updating values:\n *   - Extract discrete values from the OPPOSITE array and preserve them\n *   - Remove any range tuple from the OPPOSITE array\n *   - This ensures range only exists in ONE array (included OR excluded)\n *\n * EXAMPLE SCENARIOS:\n * ------------------\n * Scenario 1: Toggle range from IN to EX\n *   Before: included = [[38, 100]], excluded = []\n *   User toggles to EX, applies\n *   After: included = [], excluded = [[38, 100]]\n *\n * Scenario 2: Range IN + Discrete IN, toggle to EX\n *   Before: included = [[38, 100], 45], excluded = []\n *   User toggles range to EX, applies\n *   After: included = [45], excluded = [[38, 100]]\n *   (Discrete 45 preserved in included, range moved to excluded)\n *\n * Scenario 3: Range IN + Add Discrete EX\n *   Before: included = [[38, 100]], excluded = []\n *   User toggles to EX, adds discrete 37, applies\n *   After: included = [], excluded = [[38, 100], 37]\n *\n * HELPER FUNCTIONS:\n * -----------------\n * - extractRange(array): Finds and returns [from, to] tuple from array\n * - extractDiscreteValues(array): Returns all non-tuple elements from array\n *\n * @see filter-value-selector.component.ts for emit logic\n * @see filter-bar.models.ts for helper functions and type definitions\n */\n@Component({\n  selector: 'ui-filter-chip',\n  standalone: true,\n  imports: [\n    CommonModule,\n    NgClass,\n    PopoverModule,\n    FilterValueSelectorV2Component,\n  ],\n  animations: [\n    trigger('notPrefix', [\n      transition(':enter', [\n        style({\n          opacity: 0,\n          transform: 'translateX(-6px)',\n          width: 0,\n          marginRight: 0,\n        }),\n        animate(\n          '200ms ease-out',\n          style({\n            opacity: 1,\n            transform: 'translateX(0)',\n            width: '*',\n            marginRight: '*',\n          })\n        ),\n      ]),\n      transition(':leave', [\n        animate(\n          '150ms ease-in',\n          style({\n            opacity: 0,\n            transform: 'translateX(-6px)',\n            width: 0,\n            marginRight: 0,\n          })\n        ),\n      ]),\n    ]),\n  ],\n  template: `\n    <!-- Dual mode chip: both included and excluded values on one field -->\n    @if (isDualMode()) {\n    <div\n      #chipEl\n      class=\"tw-group tw-flex tw-items-center tw-gap-0 tw-h-[32px] tw-pl-2 tw-pr-0.5 tw-min-w-0\n               tw-rounded-md tw-cursor-default tw-select-none tw-overflow-hidden\n               tw-border tw-border-dashed tw-border-primary/30 hover:tw-border-primary/50\n               tw-bg-primary/5 hover:tw-bg-primary/10\n               tw-transition-all tw-duration-150 tw-max-w-[360px]\"\n      [title]=\"tooltipText()\"\n    >\n      <!-- Field label -->\n      <span\n        class=\"tw-text-sm tw-font-medium tw-text-primary\n               tw-min-w-0 tw-shrink tw-truncate tw-max-w-[12rem] tw-mr-0.5\"\n        [title]=\"fieldLabel()\"\n      >{{ fieldLabel() }}:</span>\n\n      <!-- Included values -->\n      @if (hasIncluded()) {\n      <button\n        class=\"tw-flex tw-items-center tw-gap-0 tw-h-6 tw-px-1 tw-rounded tw-min-w-0 tw-shrink\n                   tw-bg-transparent tw-border-0 tw-cursor-pointer\n                   hover:tw-bg-primary/10 tw-transition-all\"\n        [title]=\"'Includes: ' + includedSummary()\"\n        (click)=\"onEditIncluded($event, chipEl)\"\n      >\n        <span\n          class=\"tw-text-sm tw-text-surface-700 dark:tw-text-surface-200 tw-min-w-0 tw-max-w-[8rem] tw-truncate\"\n        >{{ includedSummary() }}</span>\n      </button>\n      }\n\n      <!-- NOT + excluded values -->\n      @if (hasExcluded()) {\n      <button\n        class=\"tw-flex tw-items-center tw-gap-1 tw-h-6 tw-px-1 tw-rounded tw-min-w-0 tw-shrink\n                   tw-bg-transparent tw-border-0 tw-cursor-pointer\n                   hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700 tw-transition-all\"\n        [title]=\"'Excludes: ' + excludedSummary()\"\n        (click)=\"onEditExcluded($event, chipEl)\"\n      >\n        <span\n          class=\"tw-text-[10px] tw-font-bold tw-uppercase tw-tracking-wider tw-text-surface-500 dark:tw-text-surface-400 tw-shrink-0\"\n        >NOT</span>\n        <span\n          class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400 tw-min-w-0 tw-max-w-[8rem] tw-truncate\"\n        >{{ excludedSummary() }}</span>\n      </button>\n      }\n\n      <!-- Remove (X) button -->\n      <button\n        class=\"tw-flex tw-items-center tw-justify-center tw-w-5 tw-h-5 tw-rounded-full tw-flex-shrink-0\n                 tw-bg-transparent tw-border-0 tw-cursor-pointer\n                 tw-opacity-0 group-hover:tw-opacity-100 tw-transition-all tw-duration-150\n                 tw-text-surface-500 hover:tw-text-primary hover:tw-bg-primary/10\"\n        [title]=\"labels()?.chip?.removeTooltip ?? 'Remove filter'\"\n        (click)=\"removeEvent.emit()\"\n      >\n        <i class=\"pi pi-times tw-text-[9px]\"></i>\n      </button>\n    </div>\n    }\n\n    <!-- Single mode chip: include-only or exclude-only -->\n    @else {\n    <div\n      #chipEl\n      class=\"tw-group tw-flex tw-items-center tw-gap-0 tw-h-[32px] tw-pl-2 tw-pr-0.5 tw-min-w-0\n               tw-rounded-md tw-cursor-default tw-select-none tw-overflow-hidden\n               tw-border tw-transition-all tw-duration-150 tw-max-w-[360px]\"\n      [ngClass]=\"\n        isExclude()\n          ? 'tw-border-dashed tw-border-surface-400 dark:tw-border-surface-500 tw-bg-surface-50 dark:tw-bg-surface-900 hover:tw-bg-surface-100 dark:hover:tw-bg-surface-800 hover:tw-border-surface-500 dark:hover:tw-border-surface-400'\n          : 'tw-border-solid tw-border-primary/30 tw-bg-primary/5 hover:tw-bg-primary/10 hover:tw-border-primary/50'\n      \"\n    >\n      <!-- Field label — click to toggle include/exclude -->\n      <button\n        class=\"tw-flex tw-items-center tw-gap-0 tw-pl-0 tw-pr-0.5 tw-rounded tw-min-w-0\n                 tw-bg-transparent tw-border-0\n                 tw-cursor-pointer tw-transition-colors tw-duration-150 tw-outline-none tw-overflow-hidden\n                 focus-visible:tw-ring-2 focus-visible:tw-ring-primary focus-visible:tw-ring-offset-1\"\n        [ngClass]=\"\n          isExclude()\n            ? 'hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\n            : 'hover:tw-bg-primary/10'\n        \"\n        [title]=\"fieldTooltipText()\"\n        (click)=\"onToggleMode()\"\n        (mouseleave)=\"onFieldMouseLeave()\"\n        (keydown.enter)=\"onToggleMode()\"\n        (keydown.space)=\"onToggleMode(); $event.preventDefault()\"\n      >\n        <span\n          class=\"tw-text-sm tw-font-medium tw-min-w-0 tw-max-w-[12rem] tw-truncate tw-underline-offset-2\n                       hover:tw-underline tw-decoration-dotted\"\n          [title]=\"fieldLabel()\"\n          [ngClass]=\"\n            isExclude()\n              ? 'tw-text-surface-600 dark:tw-text-surface-300 tw-decoration-surface-400'\n              : 'tw-text-primary tw-decoration-primary/40'\n          \"\n        >{{ fieldLabel() }}:</span>\n      </button>\n\n      <!-- Values — click to edit; NOT prefix animates in for exclude mode -->\n      <button\n        class=\"tw-flex tw-items-center tw-gap-1 tw-pl-1 tw-pr-0.5 tw-rounded tw-min-w-0\n                 tw-bg-transparent tw-border-0 tw-cursor-pointer\n                 tw-transition-colors tw-duration-150\"\n        [ngClass]=\"\n          isExclude()\n            ? 'hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\n            : 'hover:tw-bg-primary/10'\n        \"\n        [title]=\"chipTooltipText()\"\n        (click)=\"onEditValues($event, chipEl)\"\n      >\n        @if (isExclude()) {\n        <span\n          @notPrefix\n          class=\"tw-text-[10px] tw-font-bold tw-uppercase tw-tracking-wider tw-flex-shrink-0\n                         tw-text-surface-500 dark:tw-text-surface-400\"\n        >NOT</span>\n        }\n        <span\n          class=\"tw-text-sm tw-truncate tw-min-w-0 tw-max-w-[10rem] sm:tw-max-w-[14rem]\"\n          [title]=\"valueSummary()\"\n          [ngClass]=\"\n            isExclude()\n              ? 'tw-text-surface-500 dark:tw-text-surface-400'\n              : 'tw-text-surface-700 dark:tw-text-surface-200'\n          \"\n        >{{ valueSummary() }}</span>\n      </button>\n\n      <!-- Remove (X) button — visible on chip hover only -->\n      <button\n        class=\"tw-flex tw-items-center tw-justify-center tw-w-5 tw-h-5 tw-rounded-full tw-flex-shrink-0\n                 tw-bg-transparent tw-border-0 tw-cursor-pointer\n                 tw-opacity-0 group-hover:tw-opacity-100 tw-transition-all tw-duration-150\"\n        [ngClass]=\"\n          isExclude()\n            ? 'tw-text-surface-500 hover:tw-text-surface-700 dark:hover:tw-text-surface-200 hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\n            : 'tw-text-surface-500 hover:tw-text-primary hover:tw-bg-primary/10'\n        \"\n        [title]=\"labels()?.chip?.removeTooltip ?? 'Remove filter'\"\n        (click)=\"removeEvent.emit()\"\n      >\n        <i class=\"pi pi-times tw-text-[9px]\"></i>\n      </button>\n    </div>\n    }\n\n    <!-- Values popover -->\n    <p-popover #valuesPopover\n      styleClass=\"tw-w-[300px]\"\n      [style]=\"{ '--p-popover-content-padding': '0' }\"\n      (onShow)=\"popoverVisible.set(true)\"\n      (onHide)=\"popoverVisible.set(false)\">\n      @if (popoverVisible()) {\n      <div>\n        <ui-filter-value-selector-v2\n          class=\"!tw-relative !tw-inset-auto tw-block tw-flex tw-flex-col\"\n          [filter]=\"filter()\"\n          [labels]=\"labels()\"\n          [loading]=\"filterLoading()\"\n          [optionsLoader]=\"currentOptionsLoader()\"\n          [filterContext]=\"currentFilterContext()\"\n          [showHeader]=\"true\"\n          [showFooter]=\"true\"\n          (cancelEvent)=\"valuesPopover.hide()\"\n          (applyEvent)=\"onApplyValuesV2($event); valuesPopover.hide()\"\n        />\n      </div>\n      }\n    </p-popover>\n  `,\n  host: { style: 'display: inline-flex' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterChipComponent {\n  readonly filter = input.required<AellaFilterDefinition>();\n  readonly filterLoading = input<boolean>(false);\n  readonly labels = input<FilterBarLabels>();\n\n  readonly removeEvent = output<void>();\n  readonly includedChanged = output<(string | number | boolean)[]>();\n  readonly excludedChanged = output<(string | number | boolean)[]>();\n  readonly filterChanged = output<AellaFilterDefinition>();\n\n  @ViewChild('valuesPopover') valuesPopover!: Popover;\n\n  // UX team's FTU (First Time User) tooltip tracking\n  private readonly ftuDismissed = signal(\n    typeof localStorage !== 'undefined' &&\n      localStorage.getItem(FTU_STORAGE_KEY) === '1'\n  );\n\n  // Track popover visibility so content is created AFTER the overlay is laid out\n  // (PrimeNG Scroller needs correct viewport dimensions on init)\n  readonly popoverVisible = signal(false);\n\n  // Track which mode is being edited in dual mode\n  readonly editingMode = signal<'include' | 'exclude'>('include');\n\n  // Check if dual mode (both included and excluded have values)\n  readonly isDualMode = computed(() => {\n    const f = this.filter();\n\n    // For range filters, check if there are discrete values in both included and excluded\n    if (isRangeFilter(f)) {\n      // Range filters are dual mode if they have both discrete included and excluded values\n      // (the range itself (from/to) is always considered \"included\")\n      return f.included.length > 0 && f.excluded.length > 0;\n    }\n\n    return f.included.length > 0 && f.excluded.length > 0;\n  });\n\n  readonly hasIncluded = computed(() => {\n    const f = this.filter();\n\n    // For range filters, they always have included values (from/to)\n    if (isRangeFilter(f)) {\n      return true; // Range filters always have from/to values\n    }\n\n    return f.included.length > 0;\n  });\n\n  readonly hasExcluded = computed(() => {\n    const f = this.filter();\n\n    // For range filters, only return true if there are discrete excluded values\n    // (the range itself is in from/to, not in excluded array)\n    return f.excluded.length > 0;\n  });\n\n  readonly isExclude = computed(() => {\n    const f = this.filter();\n\n    // For range filters, check if we're in exclude-only mode\n    if (isRangeFilter(f)) {\n      // Exclude mode is indicated by:\n      // 1. excluded array has values AND included is empty\n      // For must_not ranges: excluded array contains [from, to, ...discreteValues]\n      return f.excluded.length > 0 && f.included.length === 0;\n    }\n\n    return f.excluded.length > 0 && f.included.length === 0;\n  });\n\n  readonly fieldLabel = computed(() => {\n    const f = this.filter();\n    return f.label;\n  });\n\n  readonly headerBadge = computed(() => {\n    const f = this.filter() as any;\n    return f.badge;\n  });\n\n  readonly headerBadgeColor = computed(() => {\n    const f = this.filter() as any;\n    return f.badgeColor;\n  });\n\n  readonly valueSummary = computed(() => {\n    const f = this.filter();\n\n    // For range filters, ranges are encoded as [from, to] tuples in included/excluded arrays\n    if (isRangeFilter(f)) {\n      const min = this.currentMin();\n      const max = this.currentMax();\n      const vals = this.isExclude() ? f.excluded : f.included;\n\n      // Extract range tuple and discrete values\n      const range = extractRange(vals);\n      const discreteVals = extractDiscreteValues(vals);\n\n      // If no range, show only discrete values\n      if (!range) {\n        return this._formatDiscreteValues(discreteVals);\n      }\n\n      const [from, to] = range;\n      const isFullRange = Number(from) === min && Number(to) === max;\n\n      // If we have discrete values and no meaningful range, show only discrete values\n      if (isFullRange && discreteVals.length > 0) {\n        return this._formatDiscreteValues(discreteVals);\n      }\n\n      // If no discrete values, show only range\n      if (discreteVals.length === 0) {\n        return `${from}-${to}`;\n      }\n\n      // Combine range with discrete values\n      const rangeStr = `${from}-${to}`;\n      const discreteStr = this._formatDiscreteValues(discreteVals);\n      return `${rangeStr}, ${discreteStr}`;\n    }\n\n    const vals = this.isExclude() ? f.excluded : f.included;\n    return this._formatValues(vals, f.filterType);\n  });\n\n  readonly includedSummary = computed(() => {\n    const f = this.filter();\n    return this._getRangeSummary(f.included, f.filterType);\n  });\n\n  readonly excludedSummary = computed(() => {\n    const f = this.filter();\n    return this._getRangeSummary(f.excluded, f.filterType);\n  });\n\n  // UX team's original tooltip for chip body\n  readonly chipTooltipText = computed(() => {\n    const field = this.fieldLabel();\n    const mode = this.isExclude() ? 'excludes' : 'includes';\n    const f = this.filter();\n\n    // For range filters, extract [from, to] tuple and discrete values\n    if (isRangeFilter(f)) {\n      const vals = this.isExclude() ? f.excluded : f.included;\n      const range = extractRange(vals);\n      const discreteVals = extractDiscreteValues(vals);\n\n      if (!range) {\n        const discreteStr = discreteVals.map((v) => String(v)).join(', ');\n        return `${field} ${mode}: ${discreteStr}`;\n      }\n\n      const [from, to] = range;\n      const rangeStr = `${from}-${to}`;\n\n      if (discreteVals.length === 0) {\n        return `${field} ${mode}: ${rangeStr}`;\n      }\n\n      const discreteStr = discreteVals.map((v) => String(v)).join(', ');\n      return `${field} ${mode}: ${rangeStr}, ${discreteStr}`;\n    }\n\n    const values = this.isExclude() ? f.excluded : f.included;\n    if (values.length === 0) return `${field} (no values)`;\n    return `${field} ${mode}: ${values.map((v) => String(v)).join(', ')}`;\n  });\n\n  // UX team's FTU tooltip for field label button\n  readonly fieldTooltipText = computed(() => {\n    if (!this.ftuDismissed()) {\n      return 'Tip: Click a filter name to toggle include / exclude';\n    }\n    return this.isExclude() ? 'Click to include' : 'Click to exclude';\n  });\n\n  // Aella tooltip with i18n support\n  readonly tooltipText = computed(() => {\n    const field = this.fieldLabel();\n    const noValuesLabel = this.labels()?.chip?.noValuesLabel ?? '(no values)';\n    const includesLabel = this.labels()?.chip?.includesLabel ?? 'includes';\n    const excludesLabel = this.labels()?.chip?.excludesLabel ?? 'excludes';\n    const f = this.filter();\n\n    if (this.isDualMode()) {\n      // For range filters, extract range and discrete values from both arrays\n      if (isRangeFilter(f)) {\n        const incRange = extractRange(f.included);\n        const incDiscrete = extractDiscreteValues(f.included);\n        const excRange = extractRange(f.excluded);\n        const excDiscrete = extractDiscreteValues(f.excluded);\n\n        let incStr = '';\n        if (incRange) {\n          const [from, to] = incRange;\n          incStr =\n            incDiscrete.length > 0\n              ? `${from}-${to}, ${incDiscrete.map((v) => String(v)).join(', ')}`\n              : `${from}-${to}`;\n        } else {\n          incStr = incDiscrete.map((v) => String(v)).join(', ');\n        }\n\n        let excStr = '';\n        if (excRange) {\n          const [from, to] = excRange;\n          excStr =\n            excDiscrete.length > 0\n              ? `${from}-${to}, ${excDiscrete.map((v) => String(v)).join(', ')}`\n              : `${from}-${to}`;\n        } else if (excDiscrete.length > 0) {\n          excStr = excDiscrete.map((v) => String(v)).join(', ');\n        }\n\n        if (excStr) {\n          return `${field} ${includesLabel}: ${incStr}\\n${field} ${excludesLabel}: ${excStr}`;\n        }\n        return `${field} ${includesLabel}: ${incStr}`;\n      }\n\n      const incStr = f.included.map((v) => String(v)).join(', ');\n      const excStr = f.excluded.map((v) => String(v)).join(', ');\n      return `${field} ${includesLabel}: ${incStr}\\n${field} ${excludesLabel}: ${excStr}`;\n    }\n\n    // For range filters, extract [from, to] tuple and discrete values\n    if (isRangeFilter(f)) {\n      const vals = this.isExclude() ? f.excluded : f.included;\n      const range = extractRange(vals);\n      const discreteVals = extractDiscreteValues(vals);\n      const mode = this.isExclude() ? excludesLabel : includesLabel;\n\n      if (!range) {\n        const discreteStr = discreteVals.map((v) => String(v)).join(', ');\n        return `${field} ${mode}: ${discreteStr}`;\n      }\n\n      const [from, to] = range;\n      const rangeStr = `${from}-${to}`;\n\n      if (discreteVals.length === 0) {\n        return `${field} ${mode}: ${rangeStr}`;\n      }\n\n      const discreteStr = discreteVals.map((v) => String(v)).join(', ');\n      return `${field} ${mode}: ${rangeStr}, ${discreteStr}`;\n    }\n\n    const vals = this.isExclude() ? f.excluded : f.included;\n    const mode = this.isExclude() ? excludesLabel : includesLabel;\n    if (vals.length === 0) return `${field} ${noValuesLabel}`;\n    return `${field} ${mode}: ${vals.map((v) => String(v)).join(', ')}`;\n  });\n\n  // Current popover state - depends on editing mode in dual mode\n  readonly currentValueType = computed(() => {\n    return this.filter().filterType;\n  });\n\n  readonly currentOptions = computed(() => {\n    const f = this.filter();\n    if ('staticOptions' in f && f.staticOptions) {\n      return f.staticOptions.map((o: any) => String(o.value));\n    }\n    return [];\n  });\n\n  readonly currentDisplayOptions = computed(() => {\n    const f = this.filter();\n    if ('staticOptions' in f && f.staticOptions) {\n      return f.staticOptions;\n    }\n    return [];\n  });\n\n  readonly currentSelected = computed(() => {\n    const f = this.filter();\n\n    // For range filters, extract [from, to] tuple and discrete values from included array\n    if (isRangeFilter(f)) {\n      const vals = this.editingMode() === 'include' ? f.included : f.excluded;\n      const range = extractRange(vals);\n      const discreteVals = extractDiscreteValues(vals);\n\n      // Return [from, to, ...discreteValues] for filter-value-selector\n      if (range) {\n        const [from, to] = range;\n        return [\n          String(from),\n          String(to),\n          ...discreteVals.map((v) => String(v)),\n        ];\n      }\n\n      // No range, just discrete values\n      return discreteVals.map((v) => String(v));\n    }\n\n    // For non-range filters, return based on editing mode\n    const discreteVals =\n      this.editingMode() === 'include' ? f.included : f.excluded;\n    return discreteVals.map((v) => String(v));\n  });\n\n  readonly currentSelectedExcluded = computed(() => {\n    const f = this.filter();\n    // For range filters, return discrete excluded values (not the range tuple)\n    if (isRangeFilter(f)) {\n      const discreteVals = extractDiscreteValues(f.excluded);\n      return discreteVals.map((v) => (typeof v === 'number' ? v : Number(v)));\n    }\n    return [];\n  });\n\n  readonly currentMin = computed(() => {\n    const f = this.filter();\n    if ('range' in f && f.range) return f.range.min;\n    if ('min' in f && f.min !== undefined) return f.min;\n    return 0;\n  });\n\n  readonly currentMax = computed(() => {\n    const f = this.filter();\n    if ('range' in f && f.range) return f.range.max;\n    if ('max' in f && f.max !== undefined) return f.max;\n    return 100;\n  });\n\n  readonly currentStep = computed(() => {\n    const f = this.filter();\n    if ('range' in f && f.range) return f.range.step ?? 1;\n    return 1;\n  });\n\n  readonly currentOptionsLoader = computed(() => {\n    const f = this.filter();\n    if ('optionsLoader' in f) return f.optionsLoader;\n    return undefined;\n  });\n\n  readonly currentFilterContext = computed(() => {\n    const f = this.filter();\n    return { entity: { id: f.field } };\n  });\n\n  // UX team's FTU handler\n  onFieldMouseLeave(): void {\n    if (!this.ftuDismissed()) {\n      this.ftuDismissed.set(true);\n      if (typeof localStorage !== 'undefined') {\n        localStorage.setItem(FTU_STORAGE_KEY, '1');\n      }\n    }\n  }\n\n  onToggleMode(): void {\n    if (!this.ftuDismissed()) {\n      this.ftuDismissed.set(true);\n      if (typeof localStorage !== 'undefined') {\n        localStorage.setItem(FTU_STORAGE_KEY, '1');\n      }\n    }\n  }\n\n  onEditIncluded(event: Event, target: HTMLElement): void {\n    this.editingMode.set('include');\n    this.valuesPopover.toggle(event, target);\n  }\n\n  onEditExcluded(event: Event, target: HTMLElement): void {\n    this.editingMode.set('exclude');\n    this.valuesPopover.toggle(event, target);\n  }\n\n  onEditValues(event: Event, target: HTMLElement): void {\n    // For single-mode filters, set editing mode based on current state\n    this.editingMode.set(this.isExclude() ? 'exclude' : 'include');\n    this.valuesPopover.toggle(event, target);\n  }\n\n  onModeChanged(mode: 'include' | 'exclude'): void {\n    this.editingMode.set(mode);\n  }\n\n  onApplyValues(values: (string | number | boolean)[]): void {\n    const currentFilter = this.filter();\n\n    // Build updated filter object\n    let updatedFilter: AellaFilterDefinition;\n\n    // For range filters: NEW NESTED ARRAY FORMAT from value-selector\n    // Value-selector now emits:\n    // - With range: [[[from, to]], discrete1, discrete2, ...] - nested array tuple for range\n    // - Without range: [discrete1, discrete2, ...] - flat discrete values\n    if (isRangeFilter(currentFilter)) {\n      // Use extractRange helper to find range tuple anywhere in the array (defensive coding)\n      // Note: By contract, value-selector always puts range first, but this handles any order\n      const rangeTuple = extractRange(values);\n\n      if (rangeTuple) {\n        // Range tuple found - extract from and to\n        const from = Number(rangeTuple[0]);\n        const to = Number(rangeTuple[1]);\n        // Extract discrete values (everything that's not the range tuple)\n        const discreteValues = extractDiscreteValues(values).map((v) =>\n          Number(v)\n        );\n\n        if (this.editingMode() === 'include') {\n          // Encode as [[from, to], ...discreteValues] in included array\n          const included: (number | [number, number])[] = [\n            [from, to],\n            ...discreteValues,\n          ];\n\n          // Preserve BOTH discrete values AND range from the OTHER array (excluded)\n          const otherRange = extractRange(currentFilter.excluded);\n          const otherDiscreteVals = extractDiscreteValues(\n            currentFilter.excluded\n          );\n          const excluded = combineRangeAndDiscrete(\n            otherRange,\n            otherDiscreteVals\n          );\n\n          updatedFilter = {\n            ...currentFilter,\n            included,\n            excluded,\n          } as typeof currentFilter;\n        } else {\n          // Encode as [[from, to], ...discreteValues] in excluded array\n          const excluded: (number | [number, number])[] = [\n            [from, to],\n            ...discreteValues,\n          ];\n\n          // Preserve BOTH discrete values AND range from the OTHER array (included)\n          const otherRange = extractRange(currentFilter.included);\n          const otherDiscreteVals = extractDiscreteValues(\n            currentFilter.included\n          );\n          const included = combineRangeAndDiscrete(\n            otherRange,\n            otherDiscreteVals\n          );\n\n          updatedFilter = {\n            ...currentFilter,\n            included,\n            excluded,\n          } as typeof currentFilter;\n        }\n      } else {\n        // Format: [discrete1, discrete2, ...] - no range tuple, only discrete values\n        const discreteValues = values.map((v) => Number(v));\n\n        if (this.editingMode() === 'include') {\n          // Preserve BOTH discrete values AND range from the OTHER array (excluded)\n          const otherRange = extractRange(currentFilter.excluded);\n          const otherDiscreteVals = extractDiscreteValues(\n            currentFilter.excluded\n          );\n          const excluded = combineRangeAndDiscrete(\n            otherRange,\n            otherDiscreteVals\n          );\n\n          updatedFilter = {\n            ...currentFilter,\n            included: discreteValues,\n            excluded,\n          } as typeof currentFilter;\n        } else {\n          // Preserve BOTH discrete values AND range from the OTHER array (included)\n          const otherRange = extractRange(currentFilter.included);\n          const otherDiscreteVals = extractDiscreteValues(\n            currentFilter.included\n          );\n          const included = combineRangeAndDiscrete(\n            otherRange,\n            otherDiscreteVals\n          );\n\n          updatedFilter = {\n            ...currentFilter,\n            included,\n            excluded: discreteValues,\n          } as typeof currentFilter;\n        }\n      }\n    } else {\n      // For non-range filters, all values go into included/excluded array\n      if (this.editingMode() === 'include') {\n        updatedFilter = {\n          ...currentFilter,\n          included: values,\n        } as typeof currentFilter;\n      } else {\n        updatedFilter = {\n          ...currentFilter,\n          excluded: values,\n        } as typeof currentFilter;\n      }\n    }\n\n    // Emit complete updated filter model\n    this.filterChanged.emit(updatedFilter);\n\n    // Also emit to legacy outputs for backward compatibility\n    if (this.editingMode() === 'include') {\n      this.includedChanged.emit(values);\n    } else {\n      this.excludedChanged.emit(values);\n    }\n  }\n\n  /**\n   * Handle apply event from FilterValueSelectorV2\n   * V2 returns { included: [], excluded: [] } directly\n   */\n  onApplyValuesV2(event: {\n    included: (\n      | string\n      | number\n      | boolean\n      | Date\n      | [number, number]\n      | [Date, Date]\n    )[];\n    excluded: (\n      | string\n      | number\n      | boolean\n      | Date\n      | [number, number]\n      | [Date, Date]\n    )[];\n  }): void {\n    const currentFilter = this.filter();\n\n    // Build updated filter object - V2 already provides separated included/excluded arrays\n    const updatedFilter: AellaFilterDefinition = {\n      ...currentFilter,\n      included: event.included,\n      excluded: event.excluded,\n    } as typeof currentFilter;\n\n    // Emit complete updated filter model\n    this.filterChanged.emit(updatedFilter);\n  }\n\n  private _formatValues(\n    vals: (string | number | boolean)[],\n    filterType?: string\n  ): string {\n    if (vals.length === 0) return '…';\n\n    // Map values to labels using display options (for async fields like assignee)\n    const displayOptions = this.currentDisplayOptions();\n    const strs = vals.map((v) => {\n      // Try to find a matching option to get its label\n      const option = displayOptions.find(opt => String(opt.value) === String(v));\n      return option ? option.label : String(v);\n    });\n\n    // Check if this is a range filter\n    const isRangeFilter =\n      filterType === 'number-range' || filterType === 'number-range-slider';\n\n    if (strs.length === 1) return strs[0];\n    if (strs.length === 2) {\n      // For range filters, show as \"min-max\" instead of \"min, max\"\n      return isRangeFilter ? `${strs[0]}-${strs[1]}` : `${strs[0]}, ${strs[1]}`;\n    }\n\n    // For 3+ values with range filter, show range first, then additional values\n    if (isRangeFilter) {\n      // First two values are the range, rest are discrete values\n      return `${strs[0]}-${strs[1]}, ${strs[2]} +${strs.length - 3}`;\n    }\n\n    return `${strs[0]} +${strs.length - 1}`;\n  }\n\n  private _formatDiscreteValues(vals: (string | number | boolean)[]): string {\n    if (vals.length === 0) return '';\n\n    // Map values to labels using display options (for async fields like assignee)\n    const displayOptions = this.currentDisplayOptions();\n    const strs = vals.map((v) => {\n      // Try to find a matching option to get its label\n      const option = displayOptions.find(opt => String(opt.value) === String(v));\n      return option ? option.label : String(v);\n    });\n\n    if (strs.length === 1) return strs[0];\n    if (strs.length === 2) return `${strs[0]}, ${strs[1]}`;\n    return `${strs[0]} +${strs.length - 1}`;\n  }\n\n  /**\n   * Get summary for range filters (shared logic for included and excluded)\n   */\n  private _getRangeSummary(\n    values:\n      | (string | number | boolean)[]\n      | (number | [number, number])[]\n      | ([Date, Date] | [string, string])[],\n    filterType?: string\n  ): string {\n    const f = this.filter();\n\n    // For range filters, extract [from, to] tuple and discrete values\n    if (isRangeFilter(f)) {\n      const min = this.currentMin();\n      const max = this.currentMax();\n      const range = extractRange(values);\n      const discreteVals = extractDiscreteValues(values);\n\n      // If no range, show only discrete values\n      if (!range) {\n        return this._formatDiscreteValues(discreteVals);\n      }\n\n      const [from, to] = range;\n      const isFullRange = Number(from) === min && Number(to) === max;\n\n      // If only discrete values exist (no meaningful range), show only discrete values\n      if (isFullRange && discreteVals.length > 0) {\n        return this._formatDiscreteValues(discreteVals);\n      }\n\n      // If no discrete values, show only range\n      if (discreteVals.length === 0) {\n        return `${from}-${to}`;\n      }\n\n      // Combine range with discrete values\n      const rangeStr = `${from}-${to}`;\n      const discreteStr = this._formatDiscreteValues(discreteVals);\n      return `${rangeStr}, ${discreteStr}`;\n    }\n    return this._formatValues(values as (string | number | boolean)[], filterType);\n  }\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport type { AellaFilterDefinition } from './filter-bar.models';\nimport { isRangeFilter, extractDiscreteValues } from './filter-bar.models';\n\n/**\n * FilterBarStore - Local state management for filter-bar component\n *\n * Implements copy-on-write pattern:\n * - Creates a working copy (draft) of input filters\n * - Each field holds its own model state\n * - Changes only apply to draft until explicitly committed\n * - Cancel restores original state without affecting parent\n *\n * Data Flow:\n * 1. Parent provides [aellaFilters] input → Store creates draft copy\n * 2. User edits filters → Draft state updates\n * 3. User clicks Apply → Draft commits to parent via output event\n * 4. User clicks Cancel → Draft resets to original state\n */\n@Injectable()\nexport class FilterBarStore {\n  // Original state (immutable copy of input)\n  private readonly _originalFilters = signal<AellaFilterDefinition[]>([]);\n\n  // Draft state (working copy that users edit)\n  private readonly _draftFilters = signal<AellaFilterDefinition[]>([]);\n\n  // Track which filters have been modified\n  private readonly _modifiedFields = signal<Set<string>>(new Set());\n\n  // Public selectors\n  readonly originalFilters = this._originalFilters.asReadonly();\n  readonly draftFilters = this._draftFilters.asReadonly();\n  readonly modifiedFields = this._modifiedFields.asReadonly();\n\n  // Computed: Check if any changes exist\n  readonly hasChanges = computed(() => this._modifiedFields().size > 0);\n\n  // Computed: Get draft filter by field\n  readonly getDraftFilter = computed(() => (field: string): AellaFilterDefinition | undefined => {\n    return this._draftFilters().find(f => f.field === field);\n  });\n\n  // Computed: Check if field is modified\n  readonly isFieldModified = computed(() => (field: string): boolean => {\n    return this._modifiedFields().has(field);\n  });\n\n  /**\n   * Initialize store with filters from parent component\n   * Creates deep copy to prevent mutation of original\n   */\n  setOriginalFilters(filters: AellaFilterDefinition[]): void {\n    // Deep clone to prevent mutation\n    const cloned = this._deepCloneFilters(filters);\n    this._originalFilters.set(cloned);\n\n    // Reset draft to match original\n    this._draftFilters.set(this._deepCloneFilters(filters));\n    this._modifiedFields.set(new Set());\n  }\n\n  /**\n   * Update a draft filter's included values\n   *\n   * For range filters: Accepts nested array format:\n   *   - [[from, to]] = range only\n   *   - [[from, to], discrete1, discrete2, ...] = range + discrete values\n   *   - [value1, value2, ...] = discrete values only\n   *\n   * For other filters: All values go into included array as-is\n   * Marks field as modified\n   */\n  updateFilterIncluded(\n    field: string,\n    included: (string | number | boolean | [number, number] | [string, string])[]\n  ): void {\n    this._draftFilters.update(filters => {\n      return filters.map(f => {\n        if (f.field === field) {\n          // Mark as modified\n          this._modifiedFields.update(fields => new Set(fields).add(field));\n\n          // For range filters, convert values to numbers and preserve tuple structure\n          if (isRangeFilter(f)) {\n            const converted = included.map(v => {\n              // If it's already a tuple (range), convert values to numbers\n              if (Array.isArray(v)) {\n                return [Number(v[0]), Number(v[1])] as [number, number];\n              }\n              // Otherwise it's a discrete value\n              return Number(v);\n            }) as (number | [number, number])[];\n\n            return { ...f, included: converted } as typeof f;\n          }\n\n          // For non-range filters, all values go into included array as-is\n          return { ...f, included: [...included] } as typeof f;\n        }\n        return f;\n      });\n    });\n  }\n\n  /**\n   * Update a draft filter's excluded values\n   * For range filters: All values are discrete excluded values (range can't be excluded)\n   * For other filters: All values go into excluded array\n   * Marks field as modified\n   */\n  updateFilterExcluded(field: string, excluded: (string | number | boolean)[]): void {\n    this._draftFilters.update(filters => {\n      return filters.map(f => {\n        if (f.field === field) {\n          // Mark as modified\n          this._modifiedFields.update(fields => new Set(fields).add(field));\n\n          // For range filters, excluded values are always discrete (no from/to in excluded)\n          // For non-range filters, all values go into excluded array\n          return { ...f, excluded: [...excluded] } as typeof f;\n        }\n        return f;\n      });\n    });\n  }\n\n  /**\n   * Update a draft filter's range values (from/to)\n   * Used for number-range and number-range-slider filters\n   * Encodes range as [[from, to], ...existingDiscreteValues]\n   */\n  updateFilterRange(field: string, from: number, to: number): void {\n    this._draftFilters.update(filters => {\n      return filters.map(f => {\n        if (f.field === field && isRangeFilter(f)) {\n          // Mark as modified\n          this._modifiedFields.update(fields => new Set(fields).add(field));\n\n          // Extract existing discrete values from included array (convert to numbers)\n          const discreteValues: number[] = extractDiscreteValues(f.included).map(v => Number(v));\n\n          // Build new included array with [[from, to], ...discreteValues]\n          const included: (number | [number, number])[] = [[from, to], ...discreteValues];\n\n          return { ...f, included } as typeof f;\n        }\n        return f;\n      });\n    });\n  }\n\n  /**\n   * Update entire draft filter with new model\n   * Used when FilterChipComponent emits complete updated filter\n   */\n  updateDraftFilter(updatedFilter: AellaFilterDefinition): void {\n    this._draftFilters.update(filters => {\n      return filters.map(f => {\n        if (f.field === updatedFilter.field) {\n          // Mark as modified\n          this._modifiedFields.update(fields => new Set(fields).add(updatedFilter.field));\n\n          // Return deep clone to prevent mutation\n          return this._deepCloneFilter(updatedFilter);\n        }\n        return f;\n      });\n    });\n  }\n\n  /**\n   * Add a new draft filter\n   * Used when user adds a filter via property selector\n   */\n  addDraftFilter(filter: AellaFilterDefinition): void {\n    // Clone the filter to prevent mutation\n    const cloned = this._deepCloneFilter(filter);\n\n    this._draftFilters.update(filters => [...filters, cloned]);\n    this._modifiedFields.update(fields => new Set(fields).add(filter.field));\n  }\n\n  /**\n   * Remove a draft filter\n   * Marks field as modified\n   */\n  removeDraftFilter(field: string): void {\n    this._draftFilters.update(filters => filters.filter(f => f.field !== field));\n    this._modifiedFields.update(fields => new Set(fields).add(field));\n  }\n\n  /**\n   * Reset draft state to original\n   * Used on Cancel - discards all changes\n   */\n  resetDraft(): void {\n    this._draftFilters.set(this._deepCloneFilters(this._originalFilters()));\n    this._modifiedFields.set(new Set());\n  }\n\n  /**\n   * Get list of modified filters for applying changes\n   * Returns only filters that have been changed\n   */\n  getModifiedFilters(): AellaFilterDefinition[] {\n    const modified = Array.from(this._modifiedFields());\n    return this._draftFilters().filter(f => modified.includes(f.field));\n  }\n\n  /**\n   * Get all draft filters (for full state replacement)\n   */\n  getAllDraftFilters(): AellaFilterDefinition[] {\n    return [...this._draftFilters()];\n  }\n\n  /**\n   * Clear all modifications after successful apply\n   * Syncs original state to draft state\n   */\n  commitChanges(): void {\n    this._originalFilters.set(this._deepCloneFilters(this._draftFilters()));\n    this._modifiedFields.set(new Set());\n  }\n\n  /**\n   * Deep clone a single filter\n   */\n  private _deepCloneFilter(filter: AellaFilterDefinition): AellaFilterDefinition {\n    const cloned: any = {\n      ...filter,\n      included: [...filter.included],\n      excluded: [...filter.excluded]\n    };\n\n    // Clone type-specific properties\n    if ('staticOptions' in filter && filter.staticOptions) {\n      cloned.staticOptions = [...filter.staticOptions];\n    }\n    if ('range' in filter && filter.range) {\n      cloned.range = { ...filter.range };\n    }\n    if ('treeNodes' in filter && filter.treeNodes) {\n      cloned.treeNodes = [...filter.treeNodes];\n    }\n\n    return cloned as typeof filter;\n  }\n\n  /**\n   * Deep clone array of filters\n   */\n  private _deepCloneFilters(filters: AellaFilterDefinition[]): AellaFilterDefinition[] {\n    return filters.map(f => this._deepCloneFilter(f));\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  OnInit,\n  output,\n  signal,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { IconField } from 'primeng/iconfield';\nimport { InputIcon } from 'primeng/inputicon';\nimport { Scroller } from 'primeng/scroller';\nimport type {\n  FilterCategory,\n  FilterMode,\n  FilterProperty,\n  FilterBarLabels,\n  FilterValueType,\n  AellaFilterDefinition,\n} from './filter-bar.models';\nimport { FilterValueSelectorV2Component } from './filter-value-selector-v2.component';\nimport { FilterBarStore } from './filter-bar.store';\n\n/**\n * Filter property selector component - Browse and select filter properties\n *\n * FEATURES:\n * - Category-based organization (Alert, Network, User, etc.)\n * - Search functionality with real-time filtering\n * - Clear button for quick search reset\n * - Recent filters section\n * - Virtual scrolling for large property lists\n * - Include/Exclude mode toggle\n *\n * SEARCH BEHAVIOR:\n * - Case-insensitive search\n * - Filters by property label\n * - Works across all categories or within active category\n * - Reactivity via Angular signals\n *\n * RECOMMENDED FOR AELLA UI:\n * - Use with FilterCategory to organize 1500+ ES fields\n * - Search enables quick filter discovery\n * - Virtual scroll handles large datasets efficiently\n */\n@Component({\n  selector: 'ui-filter-property-selector',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    InputTextModule,\n    IconField,\n    InputIcon,\n    Scroller,\n    FilterValueSelectorV2Component,\n  ],\n  template: `\n    <div\n      class=\"tw-flex tw-flex-col tw-w-[820px] tw-max-w-[calc(100vw-2rem)] tw-h-[520px] tw-max-h-[calc(100vh-8rem)]\"\n    >\n      <!-- Search bar with clear button -->\n      <div class=\"tw-pb-2.5 tw-relative\">\n        <p-iconfield iconPosition=\"left\">\n          <p-inputicon styleClass=\"pi pi-search\" />\n          <input\n            type=\"text\"\n            pInputText\n            class=\"tw-w-full tw-pr-10\"\n            [placeholder]=\"\n              labels()?.addFilter?.searchPlaceholder ?? 'Search filters...'\n            \"\n            [ngModel]=\"searchQuery()\"\n            (ngModelChange)=\"searchQuery.set($event)\"\n            aria-label=\"Search properties\"\n          />\n        </p-iconfield>\n        @if (searchQuery()) {\n        <button\n          type=\"button\"\n          class=\"tw-absolute tw-right-2 tw-top-1/2 -tw-translate-y-1/2 tw-p-1 tw-rounded-full\n                   tw-bg-transparent tw-border-0 tw-cursor-pointer\n                   hover:tw-bg-surface-100 dark:hover:tw-bg-surface-800 tw-transition-colors\"\n          (click)=\"searchQuery.set('')\"\n          aria-label=\"Clear search\"\n        >\n          <i class=\"pi pi-times tw-text-sm tw-text-surface-500\"></i>\n        </button>\n        }\n      </div>\n\n      <!-- Three-panel body -->\n      @if (!isContentReady()) {\n      <!-- Loading skeleton -->\n      <div\n        class=\"tw-flex tw-flex-1 tw-min-h-0 tw-border-t tw-border-surface-200 dark:tw-border-surface-700 tw-items-center tw-justify-center\"\n      >\n        <div\n          class=\"tw-flex tw-flex-col tw-items-center tw-gap-3 tw-text-surface-400\"\n        >\n          <i class=\"pi pi-spin pi-spinner tw-text-2xl\"></i>\n          <span class=\"tw-text-sm\">Loading properties...</span>\n        </div>\n      </div>\n      } @else {\n      <div\n        class=\"tw-flex tw-flex-1 tw-min-h-0 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\"\n      >\n        <!-- Col 1 + Col 2 container — flexes to fill space left of Col 3 -->\n        <div\n          class=\"tw-flex-1 tw-min-w-0 tw-flex tw-min-h-0\"\n          [class.tw-border-r]=\"!!selectedProperty()\"\n          [class.tw-border-surface-200]=\"!!selectedProperty()\"\n          [class.dark:tw-border-surface-700]=\"!!selectedProperty()\"\n        >\n          <!-- Col 1: category tabs -->\n          <nav\n            class=\"tw-flex-shrink-0 tw-flex tw-flex-col tw-min-h-0 tw-border-r tw-border-surface-200 dark:tw-border-surface-700\n                   tw-transition-[width] tw-duration-200 tw-ease-in-out tw-overflow-hidden\"\n            [style.width.px]=\"collapsed() ? 48 : 180\"\n          >\n            <div class=\"tw-flex-1 tw-min-h-0 tw-overflow-y-auto tw-py-1\">\n            <!-- \"All\" button -->\n            <button\n              class=\"tw-flex tw-items-center tw-gap-2.5 tw-px-4 tw-py-2.5 tw-text-left tw-text-sm tw-w-full\n                     tw-min-h-[40px] tw-whitespace-nowrap tw-transition-colors tw-duration-100 tw-bg-transparent\n                     tw-text-list-item hover:tw-text-list-item-hover hover:tw-bg-list-item-hover\"\n              [class.tw-text-list-item-selected]=\"!activeCategory()\"\n              [style.backgroundColor]=\"!activeCategory() ? 'var(--list-item-selected-bg)' : null\"\n              title=\"All\"\n              (click)=\"onSelectCategory(null)\"\n            >\n              <i class=\"pi pi-list tw-text-sm tw-flex-shrink-0\"></i>\n              <span class=\"tw-truncate\">All</span>\n            </button>\n            @for (cat of categories(); track cat.id) {\n            <button\n              class=\"tw-flex tw-items-center tw-gap-2.5 tw-px-4 tw-py-2.5 tw-text-left tw-text-sm tw-w-full\n                     tw-min-h-[40px] tw-whitespace-nowrap tw-transition-colors tw-duration-100 tw-bg-transparent\n                     tw-text-list-item hover:tw-text-list-item-hover hover:tw-bg-list-item-hover\"\n              [class.tw-text-list-item-selected]=\"activeCategory()?.id === cat.id\"\n              [style.backgroundColor]=\"activeCategory()?.id === cat.id ? 'var(--list-item-selected-bg)' : null\"\n              [title]=\"cat.label\"\n              role=\"button\"\n              tabindex=\"0\"\n              (click)=\"onSelectCategory(cat)\"\n              (keydown.enter)=\"onSelectCategory(cat)\"\n            >\n              @if (cat.icon) {\n              <i [class]=\"cat.icon + ' tw-text-sm tw-flex-shrink-0'\"></i>\n              } @else {\n              <span\n                class=\"tw-inline-flex tw-items-center tw-justify-center tw-w-5 tw-h-5 tw-flex-shrink-0\n                           tw-rounded tw-text-[10px] tw-font-bold tw-text-white\"\n                [class]=\"cat.badgeColor\"\n              >\n                {{ cat.badge }}\n              </span>\n              }\n              <span class=\"tw-truncate\">{{ cat.label }}</span>\n            </button>\n            }\n            </div>\n\n            <!-- Collapse toggle — pinned at bottom, aligned with col 3 Cancel/Apply -->\n            <div class=\"tw-flex-shrink-0 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\n                        tw-pt-2 tw-pb-4 tw-px-4 tw-bg-white dark:tw-bg-surface-900\">\n              <button\n                class=\"tw-flex tw-items-center tw-h-7 tw-w-full\n                       tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300\n                       tw-transition-colors tw-duration-100\"\n                [title]=\"collapsed() ? 'Expand categories' : 'Collapse categories'\"\n                (click)=\"onToggleCollapsed()\"\n              >\n                <i\n                  class=\"pi tw-text-sm\"\n                  [class.pi-chevron-left]=\"!collapsed()\"\n                  [class.pi-chevron-right]=\"collapsed()\"\n                ></i>\n              </button>\n            </div>\n          </nav>\n\n          <!-- Col 2: property list -->\n          <div\n            class=\"tw-flex-1 tw-flex tw-flex-col tw-overflow-auto tw-min-w-0 tw-transition-opacity tw-duration-200 tw-overflow-y-hidden\"\n            [class.tw-opacity-90]=\"!!selectedProperty()\"\n            [class.tw-max-w-[260px]]=\"!collapsed()\"\n          >\n            @if (recentProperties().length > 0) {\n            <div class=\"tw-px-4 tw-pt-3 tw-pb-1\">\n              <span\n                class=\"tw-text-xs tw-font-semibold tw-text-surface-400 tw-uppercase tw-tracking-wider\"\n              >\n                Recents\n              </span>\n            </div>\n            @for (prop of recentProperties(); track prop.id) {\n            <button\n              class=\"tw-flex tw-items-center tw-gap-2.5 tw-px-4 tw-py-2.5 tw-text-left tw-w-full tw-bg-transparent\n                       tw-text-list-item hover:tw-text-list-item-hover hover:tw-bg-list-item-hover\n                       tw-transition-colors tw-duration-100\"\n              [class.tw-text-list-item-selected]=\"selectedProperty()?.id === prop.id\"\n              [style.backgroundColor]=\"selectedProperty()?.id === prop.id ? 'var(--list-item-selected-bg)' : null\"\n              (click)=\"onSelectProperty(prop)\"\n            >\n              @if (prop.categories[0]?.icon) {\n              <i\n                [class]=\"\n                  prop.categories[0].icon +\n                  ' tw-text-sm tw-text-surface-400 tw-flex-shrink-0'\n                \"\n              ></i>\n              }\n              <span\n                class=\"tw-text-sm tw-truncate tw-flex-1 tw-min-w-0\"\n              >\n                {{ prop.label }}\n              </span>\n              <span\n                class=\"tw-text-[10px] tw-font-medium tw-text-surface-400 tw-uppercase tw-tracking-wide\n                       tw-flex-shrink-0 tw-ml-auto tw-pl-2\"\n                >{{ getTypeLabel(prop) }}</span\n              >\n            </button>\n            } }\n\n            <!-- All Properties -->\n            <div class=\"tw-px-4 tw-pt-3 tw-pb-1\">\n              <span\n                class=\"tw-text-xs tw-font-semibold tw-text-surface-400 tw-uppercase tw-tracking-wider\"\n              >\n                All Properties\n              </span>\n            </div>\n            @if (filteredProperties().length === 0) {\n            <div\n              class=\"tw-px-4 tw-py-6 tw-text-center tw-text-sm tw-text-surface-400\"\n            >\n              No properties found\n            </div>\n            } @else {\n            <!-- Virtual scroll for large property lists -->\n            <p-scroller\n              [items]=\"filteredProperties()\"\n              [itemSize]=\"40\"\n              [style]=\"{ width: '100%', height: propertiesScrollerHeight() }\"\n              styleClass=\"tw-flex-1\"\n            >\n              <ng-template pTemplate=\"item\" let-prop let-options=\"options\">\n                <button\n                  class=\"tw-flex tw-items-center tw-gap-2.5 tw-px-4 tw-text-left tw-w-full tw-bg-transparent\n                         tw-text-list-item hover:tw-text-list-item-hover hover:tw-bg-list-item-hover\n                         tw-transition-colors tw-duration-100\"\n                  [style.height.px]=\"40\"\n                  [class.tw-text-list-item-selected]=\"selectedProperty()?.id === prop.id\"\n                  [style.backgroundColor]=\"selectedProperty()?.id === prop.id ? 'var(--list-item-selected-bg)' : null\"\n                  (click)=\"onSelectProperty(prop)\"\n                >\n                  @if (prop.categories[0]?.icon) {\n                  <i\n                    [class]=\"\n                      prop.categories[0].icon +\n                      ' tw-text-sm tw-text-surface-400 tw-flex-shrink-0'\n                    \"\n                  ></i>\n                  }\n                  <span\n                    class=\"tw-text-sm tw-truncate tw-flex-1 tw-min-w-0\"\n                  >\n                    {{ prop.label }}\n                  </span>\n                  <span\n                    class=\"tw-text-[10px] tw-font-medium tw-text-surface-400 tw-uppercase tw-tracking-wide\n                           tw-flex-shrink-0 tw-ml-auto tw-pl-2\"\n                    >{{ getTypeLabel(prop) }}</span\n                  >\n                </button>\n              </ng-template>\n            </p-scroller>\n            }\n          </div>\n        </div>\n        <!-- end Col 1+2 wrapper -->\n\n        <!-- Col 3: inline value selector (shown when a property is selected) -->\n        <!-- Use @for with track to force component recreation when property changes -->\n        <!-- This prevents state contamination between different filter properties -->\n        @if (selectedProperty() && filterDefinition()) {\n          @for (prop of [selectedProperty()!]; track prop.id) {\n            <div\n              class=\"tw-w-[380px] tw-flex-shrink-0 tw-min-h-0 tw-relative\"\n            >\n              <ui-filter-value-selector-v2\n                #valueSelector\n                [filter]=\"filterDefinition()!\"\n                [showHeader]=\"true\"\n                [showFooter]=\"true\"\n                [optionsLoader]=\"prop.optionsLoader\"\n                [filterContext]=\"{ entity: { id: prop.id } }\"\n                [loading]=\"false\"\n                [labels]=\"labels()\"\n                (cancelEvent)=\"onValueCancel()\"\n                (applyEvent)=\"onValueApply($event)\"\n              />\n            </div>\n          }\n        }\n      </div>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host ::ng-deep .p-virtualscroller-content {\n        width: 100%;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterPropertySelectorComponent implements OnInit, AfterViewInit {\n  private readonly _store = inject(FilterBarStore, { optional: true });\n\n  readonly categories = input<FilterCategory[]>([]);\n  readonly properties = input<FilterProperty[]>([]);\n  readonly labels = input<FilterBarLabels>();\n  readonly storageKey = input<string>(); // Optional key (e.g., ES index name) for localStorage persistence\n  readonly selectProperty = output<FilterProperty>();\n  readonly applyFilter = output<{\n    categories: FilterCategory[];\n    property: FilterProperty;\n    included: (string | number | boolean)[];\n    excluded: (string | number | boolean)[];\n  }>();\n  readonly cancelEvent = output<void>();\n\n  @ViewChild('valueSelector') valueSelector?: FilterValueSelectorV2Component;\n\n  readonly searchQuery = signal('');\n  readonly activeCategory = signal<FilterCategory | null>(null);\n  readonly selectedProperty = signal<FilterProperty | null>(null);\n  readonly collapsed = signal(false);\n  readonly filterMode = signal<FilterMode>('include');\n  readonly isContentReady = signal(false); // Content ready immediately\n\n  // Get existing filter for selected property (if any)\n  readonly existingFilter = computed(() => {\n    const prop = this.selectedProperty();\n    if (!prop || !this._store) return null;\n    return this._store.getDraftFilter()(prop.id);\n  });\n\n  // Build filter definition for V2 component\n  readonly filterDefinition = computed((): AellaFilterDefinition | null => {\n    const prop = this.selectedProperty();\n    if (!prop) return null;\n\n    const existing = this.existingFilter();\n\n    // Convert availableValues (string[]) to FilterOption[] format if needed\n    // V2 component expects FilterOption[] with { label, value } structure\n    let staticOptions = prop.filterOptions;\n    if (!staticOptions && prop.availableValues) {\n      staticOptions = prop.availableValues.map((val) => ({\n        label: val,\n        value: val,\n      }));\n    }\n\n    // Build filter definition object matching AellaFilterDefinition\n    // Cast as any to bypass discriminated union type checking\n    // The actual type is determined by filterType at runtime\n    const filterDef: any = {\n      id: prop.id,\n      field: prop.id,\n      label: prop.label,\n      filterType: prop.valueType,\n      included: existing?.included ?? [],\n      excluded: existing?.excluded ?? [],\n      staticOptions: staticOptions,\n      min: prop.range?.min,\n      max: prop.range?.max,\n      range: prop.range,\n    };\n\n    // Propagate disableModeToggle from property (e.g. queries are always include-only)\n    if ((prop as any).disableModeToggle) {\n      filterDef.disableModeToggle = true;\n    }\n\n    return filterDef as AellaFilterDefinition;\n  });\n\n  /**\n   * Recently used properties filtered by category and search query\n   *\n   * Filters:\n   * 1. Only properties marked as recent\n   * 2. By active category (if selected)\n   * 3. By search query (case-insensitive, matches label)\n   */\n  readonly recentProperties = computed(() => {\n    const cat = this.activeCategory();\n    const q = this.searchQuery().toLowerCase();\n    return this.properties()\n      .filter((p) => p.recent)\n      .filter((p) => !cat || p.categories.some((c) => c.id === cat.id))\n      .filter((p) => !q || p.label.toLowerCase().includes(q));\n  });\n\n  // Reduce scroller height based on space taken by Recents section (header 35px + 37.5px per item)\n  readonly propertiesScrollerHeight = computed(() => {\n    const count = this.recentProperties().length;\n    if (count === 0) return '400px';\n    const recentsHeight = 35 + count * 37.5;\n    return Math.max(180, 400 - recentsHeight) + 'px';\n  });\n\n  /**\n   * All properties filtered by category and search query\n   *\n   * CRITICAL FOR AELLA UI: Handles filtering of 1500+ ES fields\n   *\n   * Filters:\n   * 1. By active category (if selected) - reduces list to ~200 fields per category\n   * 2. By search query (case-insensitive) - enables quick discovery\n   *\n   * Example: User types \"ip\" → filters to src_ip, dst_ip, client_ip, etc.\n   */\n  readonly filteredProperties = computed(() => {\n    const cat = this.activeCategory();\n    const q = this.searchQuery().toLowerCase();\n    const filtered = this.properties()\n      .filter((p) => !cat || p.categories.some((c) => c.id === cat.id))\n      .filter((p) => !q || p.label.toLowerCase().includes(q));\n    return filtered;\n  });\n\n  /**\n   * Effect: Auto-select first property when category changes\n   *\n   * When a category is clicked:\n   * - If currently selected property is NOT in the new category → select first property\n   * - If no property is selected → select first property\n   * - If selected property IS in the new category → keep it selected\n   */\n  constructor() {\n    effect(() => {\n      const activeCategory = this.activeCategory();\n      const selectedProperty = this.selectedProperty();\n      const filteredProperties = this.filteredProperties();\n\n      // If no properties in filtered list, clear selection\n      if (filteredProperties.length === 0) {\n        this.selectedProperty.set(null);\n        this._saveSelectedProperty(null);\n        return;\n      }\n\n      // If selected property is not in filtered list, select first one\n      if (\n        selectedProperty &&\n        !filteredProperties.find((p) => p.id === selectedProperty.id)\n      ) {\n        this.selectedProperty.set(filteredProperties[0]);\n        this._saveSelectedProperty(filteredProperties[0]);\n        return;\n      }\n\n      // If no property is selected and we have a category, select first property\n      if (!selectedProperty && activeCategory) {\n        this.selectedProperty.set(filteredProperties[0]);\n        this._saveSelectedProperty(filteredProperties[0]);\n      }\n    });\n  }\n\n  /**\n   * Initialize component - auto-select first property on load\n   */\n  /**\n   * LocalStorage key helper - scopes keys by storageKey (e.g., tenant ID)\n   */\n  private _getStorageKey(suffix: string): string {\n    const key = this.storageKey();\n    return key ? `filter-bar:${key}:${suffix}` : `filter-bar:${suffix}`;\n  }\n\n  ngOnInit(): void {\n    // Restore collapsed state from localStorage\n    const savedCollapsed = this._loadCollapsedState();\n    this.collapsed.set(savedCollapsed);\n\n    // Restore active category from localStorage\n    const savedCategory = this._loadActiveCategory();\n    if (savedCategory) {\n      // Validate that the saved category still exists\n      const isValid = this.categories().some(\n        (cat) => cat.id === savedCategory.id\n      );\n      if (isValid) {\n        this.activeCategory.set(savedCategory || null);\n      }\n    }\n\n    // Try to restore selected property from localStorage\n    const savedPropertyId = this._loadSelectedPropertyId();\n    if (savedPropertyId) {\n      const savedProperty = this.properties().find(\n        (p) => p.id === savedPropertyId\n      );\n      if (savedProperty) {\n        this.selectedProperty.set(savedProperty);\n        // return;\n      }\n    }\n\n    // If no saved property or property no longer exists, auto-select first property\n    const props = this.filteredProperties();\n    if (props.length > 0 && !this.selectedProperty()) {\n      this.selectedProperty.set(props[0]);\n      this._saveSelectedProperty(props[0]);\n    }\n  }\n\n  ngAfterViewInit(): void {\n    if (!this.activeCategory()) {\n      this.onSelectCategory(null);\n    }\n\n    setTimeout(() => {\n      this.isContentReady.set(true);\n    }, 500);\n    // Lifecycle hook for future use\n  }\n\n  /**\n   * Handle category selection\n   *\n   * Sets the active category and triggers the effect that auto-selects\n   * the first property in the new category if needed.\n   */\n  onSelectCategory(category: FilterCategory | null): void {\n    this.activeCategory.set(category);\n    this._saveActiveCategory(category);\n    // Effect will handle auto-selecting first property if needed\n  }\n\n  onSelectProperty(prop: FilterProperty): void {\n    this.selectedProperty.set(prop);\n    this._saveSelectedProperty(prop);\n    this.filterMode.set('include');\n  }\n\n  onValueApply(event: { included: any[]; excluded: any[] }): void {\n    const prop = this.selectedProperty();\n    if (prop) {\n      // V2 emits both included and excluded - pass both arrays to support dual mode\n      this.applyFilter.emit({\n        categories: prop.categories,\n        property: prop,\n        included: event.included,\n        excluded: event.excluded,\n      });\n    }\n    this.selectedProperty.set(null);\n    this.filterMode.set('include');\n  }\n\n  onValueCancel(): void {\n    this.selectedProperty.set(null);\n    this.filterMode.set('include');\n  }\n\n  onApplyClick(): void {\n    this.valueSelector?.onApply();\n  }\n\n  onToggleCollapsed(): void {\n    const newState = !this.collapsed();\n    this.collapsed.set(newState);\n    this._saveCollapsedState(newState);\n  }\n\n  private static readonly VALUE_TYPE_LABELS: Record<FilterValueType, string> = {\n    checkbox: 'list',\n    radio: 'enum',\n    'text-input': 'str',\n    'number-range': 'num',\n    'number-input': 'num',\n    'number-range-slider': 'num',\n    'date-range': 'date',\n    toggle: 'bool',\n    tree: 'tree',\n    query: 'qry',\n    autocomplete: 'str',\n  };\n\n  getTypeLabel(prop: FilterProperty): string {\n    return (\n      prop.dataType ??\n      FilterPropertySelectorComponent.VALUE_TYPE_LABELS[prop.valueType] ??\n      prop.valueType\n    );\n  }\n\n  /**\n   * TrackBy function for virtual scroll performance\n   */\n  trackByPropertyId(index: number, item: FilterProperty): string {\n    return item.id;\n  }\n\n  /**\n   * Load active category from localStorage\n   */\n  private _loadActiveCategory(): FilterCategory | null {\n    try {\n      const storageKey = this._getStorageKey('active-category');\n      const saved = localStorage.getItem(storageKey);\n      if (!saved) return null;\n\n      const savedData = JSON.parse(saved);\n      return savedData as FilterCategory;\n    } catch (error) {\n      console.warn(\n        '[FilterPropertySelector] Failed to load active category from localStorage:',\n        error\n      );\n      return null;\n    }\n  }\n\n  /**\n   * Load selected property ID from localStorage\n   */\n  private _loadSelectedPropertyId(): string | null {\n    try {\n      const storageKey = this._getStorageKey('selected-property');\n      return localStorage.getItem(storageKey);\n    } catch (error) {\n      console.warn(\n        '[FilterPropertySelector] Failed to load selected property from localStorage:',\n        error\n      );\n      return null;\n    }\n  }\n\n  /**\n   * Load collapsed state from localStorage\n   */\n  private _loadCollapsedState(): boolean {\n    try {\n      const storageKey = this._getStorageKey('collapsed');\n      const saved = localStorage.getItem(storageKey);\n      return saved === 'true';\n    } catch (error) {\n      console.warn(\n        '[FilterPropertySelector] Failed to load collapsed state from localStorage:',\n        error\n      );\n      return false;\n    }\n  }\n\n  /**\n   * Save active category to localStorage\n   */\n  private _saveActiveCategory(category: FilterCategory | null): void {\n    try {\n      const storageKey = this._getStorageKey('active-category');\n      if (category) {\n        localStorage.setItem(storageKey, JSON.stringify(category));\n      } else {\n        localStorage.removeItem(storageKey);\n      }\n    } catch (error) {\n      console.warn(\n        '[FilterPropertySelector] Failed to save active category to localStorage:',\n        error\n      );\n    }\n  }\n\n  /**\n   * Save selected property to localStorage\n   */\n  private _saveSelectedProperty(property: FilterProperty | null): void {\n    try {\n      const storageKey = this._getStorageKey('selected-property');\n      if (property) {\n        localStorage.setItem(storageKey, property.id);\n      } else {\n        localStorage.removeItem(storageKey);\n      }\n    } catch (error) {\n      console.warn(\n        '[FilterPropertySelector] Failed to save selected property to localStorage:',\n        error\n      );\n    }\n  }\n\n  /**\n   * Save collapsed state to localStorage\n   */\n  private _saveCollapsedState(collapsed: boolean): void {\n    try {\n      const storageKey = this._getStorageKey('collapsed');\n      localStorage.setItem(storageKey, String(collapsed));\n    } catch (error) {\n      console.warn(\n        '[FilterPropertySelector] Failed to save collapsed state to localStorage:',\n        error\n      );\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  input,\n  output,\n  signal,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PopoverModule, Popover } from 'primeng/popover';\nimport { ButtonModule } from 'primeng/button';\nimport type {\n  FilterCategory,\n  FilterProperty,\n  FilterBarLabels,\n} from './filter-bar.models';\nimport { FilterPropertySelectorComponent } from './filter-property-selector.component';\n\n@Component({\n  selector: 'ui-add-filter-popover',\n  standalone: true,\n  imports: [\n    CommonModule,\n    PopoverModule,\n    ButtonModule,\n    FilterPropertySelectorComponent,\n  ],\n  template: `\n    <button\n      pButton\n      #triggerBtn\n      [text]=\"true\"\n      severity=\"secondary\"\n      size=\"small\"\n      icon=\"pi pi-plus\"\n      [label]=\"labels()?.addFilter?.buttonLabel ?? 'Add Filter'\"\n      [title]=\"labels()?.addFilter?.buttonTooltip ?? 'Add a new filter'\"\n      (click)=\"onTriggerClick($event)\"\n    ></button>\n    <p-popover\n      #propertyPopover\n      appendTo=\"body\"\n      [dismissable]=\"true\"\n      styleClass=\"ui-filter-popover\"\n      (onShow)=\"onPopoverShow()\"\n      (onHide)=\"onPopoverHide()\"\n    >\n      <div class=\"tw-relative\">\n        <div\n          class=\"ui-filter-arrow tw-absolute tw-z-10\"\n          [style.left.px]=\"arrowOffset()\"\n        ></div>\n        @if (isPopoverVisible()) {\n          <ui-filter-property-selector\n            [categories]=\"categories()\"\n            [properties]=\"properties()\"\n            [labels]=\"labels()\"\n            [storageKey]=\"storageKey()\"\n            (applyFilter)=\"onApplyFilter($event)\"\n            (cancelEvent)=\"propertyPopover.hide()\"\n          />\n        }\n      </div>\n    </p-popover>\n  `,\n  host: { style: 'display: inline-flex' },\n  styles: [\n    `\n      :host ::ng-deep .p-popover.ui-filter-popover {\n        overflow: visible !important;\n      }\n      :host ::ng-deep .p-popover.ui-filter-popover > .p-popover-content {\n        overflow: visible !important;\n        padding: 0 !important;\n      }\n      .ui-filter-arrow {\n        top: -7px;\n        width: 16px;\n        height: 8px;\n        clip-path: polygon(50% 0%, 0% 100%, 100% 100%);\n        background: var(--p-popover-background, var(--p-surface-overlay));\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddFilterPopoverComponent {\n  readonly categories = input<FilterCategory[]>([]);\n  readonly properties = input<FilterProperty[]>([]);\n  readonly categoryValuesMap = input<Record<string, string[]>>({});\n  readonly labels = input<FilterBarLabels>();\n  readonly storageKey = input<string>();\n\n  readonly isPopoverVisible = signal(false);\n  readonly arrowOffset = signal(16);\n\n  readonly addFilterEvent = output<{\n    categories: FilterCategory[];\n    property: FilterProperty;\n    included: (string | number | boolean)[];\n    excluded: (string | number | boolean)[];\n  }>();\n\n  @ViewChild('propertyPopover') propertyPopover!: Popover;\n  @ViewChild('triggerBtn', { read: ElementRef }) triggerBtnRef!: ElementRef;\n\n  onTriggerClick(event: Event): void {\n    this.propertyPopover.toggle(event);\n  }\n\n  onPopoverShow(): void {\n    this.isPopoverVisible.set(true);\n    requestAnimationFrame(() => {\n      setTimeout(() => this._adjustPositionAndArrow(), 0);\n    });\n  }\n\n  onPopoverHide(): void {\n    this.isPopoverVisible.set(false);\n  }\n\n  private _adjustPositionAndArrow(): void {\n    const triggerEl = this.triggerBtnRef?.nativeElement as HTMLElement;\n    const popoverEl = document.querySelector(\n      '.p-popover.ui-filter-popover'\n    ) as HTMLElement;\n    if (!triggerEl || !popoverEl) return;\n\n    const triggerRect = triggerEl.getBoundingClientRect();\n    const triggerCenterX = triggerRect.left + triggerRect.width / 2;\n    const viewportWidth = window.innerWidth;\n    const margin = 16;\n\n    // Shift popover so it stays within viewport\n    let popoverRect = popoverEl.getBoundingClientRect();\n    const overflowRight = popoverRect.right - (viewportWidth - margin);\n    if (overflowRight > 0) {\n      const cur = Number.parseFloat(popoverEl.style.left) || popoverRect.left;\n      popoverEl.style.left = `${cur - overflowRight}px`;\n      popoverEl.style.transform = 'none';\n    }\n\n    popoverRect = popoverEl.getBoundingClientRect();\n    const overflowLeft = margin - popoverRect.left;\n    if (overflowLeft > 0) {\n      const cur = Number.parseFloat(popoverEl.style.left) || popoverRect.left;\n      popoverEl.style.left = `${cur + overflowLeft}px`;\n    }\n\n    // Arrow tracks the trigger button center\n    popoverRect = popoverEl.getBoundingClientRect();\n    const arrowLeft = triggerCenterX - popoverRect.left - 8;\n    const maxArrow = popoverRect.width - 24;\n    this.arrowOffset.set(Math.max(12, Math.min(arrowLeft, maxArrow)));\n  }\n\n  onApplyFilter(event: {\n    categories: FilterCategory[];\n    property: FilterProperty;\n    included: (string | number | boolean)[];\n    excluded: (string | number | boolean)[];\n  }): void {\n    this.addFilterEvent.emit(event);\n    this.propertyPopover.hide();\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule, Popover } from 'primeng/popover';\nimport type {\n  FilterCategory,\n  FilterProperty,\n  AellaFilterDefinition,\n  FilterBarLabels,\n  FilterBarConfig\n} from './filter-bar.models';\nimport { FilterChipComponent } from './filter-chip.component';\nimport { AddFilterPopoverComponent } from './add-filter-popover.component';\nimport { FilterBarStore } from './filter-bar.store';\nimport { filtersToQueryString } from './utils/filter-query-serializer';\n\n/**\n * Optional time range (or any leading control) for the same flex-wrap flow as chips:\n * project with `uiFilterBarTimeRange` so wrapped chips align to the container left edge\n * under the picker (Figma / dashboard strip pattern).\n */\n@Component({\n  selector: 'ui-filter-bar',\n  standalone: true,\n  imports: [CommonModule, ButtonModule, PopoverModule, FilterChipComponent, AddFilterPopoverComponent],\n  providers: [FilterBarStore],\n  template: `\n    <!-- Leading slot + chips share one flex-wrap row: line 2 starts at left, under the time range -->\n    <div class=\"tw-flex tw-w-full tw-min-w-0 tw-items-start tw-gap-3\">\n      <div\n        class=\"tw-flex tw-min-w-0 tw-flex-1 tw-flex-wrap tw-content-start tw-items-center tw-gap-x-1.5 tw-gap-y-1.5\">\n        <ng-content select=\"[uiFilterBarTimeRange]\" />\n\n        @for (filter of visibleDraftFilters(); track filter.id) {\n          <ui-filter-chip\n            [filter]=\"filter\"\n            [labels]=\"labels()\"\n            (removeEvent)=\"onRemoveFilter(filter)\"\n            (filterChanged)=\"onFilterChanged($event)\" />\n        }\n\n        @if (hasFilterOverflow()) {\n          <button\n            #overflowBtn\n            type=\"button\"\n            class=\"tw-inline-flex tw-items-center tw-h-8 tw-px-2.5 tw-rounded-md tw-shrink-0\n                   tw-text-sm tw-font-medium tw-text-primary\n                   tw-border tw-border-solid tw-border-primary/30 tw-bg-primary/5\n                   hover:tw-bg-primary/10 tw-transition-colors\"\n            [attr.aria-expanded]=\"overflowOpen()\"\n            [attr.aria-haspopup]=\"true\"\n            [title]=\"moreFiltersTooltipText()\"\n            (click)=\"onOverflowToggle($event, overflowBtn)\"\n          >\n            {{ moreFiltersLabelText() }}\n          </button>\n          <p-popover\n            #overflowPopover\n            appendTo=\"body\"\n            [dismissable]=\"true\"\n            (onShow)=\"overflowOpen.set(true)\"\n            (onHide)=\"overflowOpen.set(false)\">\n            <div\n              class=\"tw-flex tw-flex-col tw-gap-1.5 tw-min-w-[260px] tw-max-w-[min(90vw,20rem)]\n                     tw-max-h-[min(24rem,70vh)] tw-overflow-y-auto tw-p-2\">\n              <span class=\"tw-text-xs tw-font-semibold tw-text-surface-500 dark:tw-text-surface-400 tw-px-0.5\">\n                {{ overflowSectionTitle() }}\n              </span>\n              @for (filter of overflowDraftFilters(); track filter.id) {\n                <ui-filter-chip\n                  [filter]=\"filter\"\n                  [labels]=\"labels()\"\n                  (removeEvent)=\"onRemoveFilter(filter)\"\n                  (filterChanged)=\"onFilterChanged($event)\" />\n              }\n            </div>\n          </p-popover>\n        }\n\n        @if (properties().length > 0 || categories().length > 0) {\n          <ui-add-filter-popover\n            [categories]=\"categories()\"\n            [properties]=\"properties()\"\n            [categoryValuesMap]=\"categoryValuesMap()\"\n            [labels]=\"labels()\"\n            [storageKey]=\"config()?.storageKey\"\n            (addFilterEvent)=\"addFilter.emit($event)\" />\n        }\n      </div>\n\n      <div class=\"tw-flex tw-items-center tw-gap-1 tw-shrink-0 tw-self-start\">\n        @if (hasFilters() && showCopyQuery()) {\n          <button\n            pButton\n            type=\"button\"\n            [icon]=\"copied() ? 'pi pi-check' : 'pi pi-copy'\"\n            [text]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            [title]=\"labels()?.bar?.copyQueryTooltip ?? 'Copy all filters as query string'\"\n            (click)=\"onCopyAllAsQuery()\"\n            class=\"!tw-h-8\"></button>\n        }\n        @if (hasFilters() && showClearAll()) {\n          <button\n            pButton\n            type=\"button\"\n            [label]=\"labels()?.bar?.clearAllLabel ?? 'Clear all'\"\n            [text]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            icon=\"pi pi-times\"\n            [title]=\"labels()?.bar?.clearAllTooltip ?? 'Remove all filters'\"\n            (click)=\"clearAll.emit()\"\n            class=\"!tw-h-8\"></button>\n        }\n      </div>\n    </div>\n  `,\n  host: {\n    class: 'tw-block tw-w-full tw-min-w-0',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterBarComponent {\n  private readonly _store = inject(FilterBarStore);\n\n  @ViewChild('overflowPopover') overflowPopover?: Popover;\n\n  /** Tracks popover open state for aria-expanded */\n  readonly overflowOpen = signal(false);\n\n  // Inputs\n  readonly filters = input<AellaFilterDefinition[]>([]);\n  readonly categories = input<FilterCategory[]>([]);\n  readonly properties = input<FilterProperty[]>([]);\n  /** @deprecated Use properties input instead */\n  readonly categoryValuesMap = input<Record<string, string[]>>({});\n  readonly labels = input<FilterBarLabels>();\n  readonly config = input<FilterBarConfig>();\n\n  // Configuration computed from config or defaults\n  readonly showClearAll = computed(() => this.config()?.showClearAll ?? true);\n  readonly showCopyQuery = computed(() => this.config()?.showCopyQuery ?? false);\n  readonly copied = signal(false);\n\n  readonly maxVisibleChips = computed(() => {\n    const raw = this.config()?.maxVisibleChips;\n    if (raw === undefined) return 10;\n    return Math.max(0, raw);\n  });\n\n  readonly filterOverflowEnabled = computed(\n    () => this.config()?.showFilterOverflow !== false\n  );\n\n  // Draft filters from store (working copy)\n  readonly draftFilters = this._store.draftFilters;\n\n  readonly visibleDraftFilters = computed(() => {\n    const all = this.draftFilters();\n    const max = this.maxVisibleChips();\n    if (!this.filterOverflowEnabled() || max <= 0 || all.length <= max) {\n      return all;\n    }\n    return all.slice(0, max);\n  });\n\n  readonly overflowDraftFilters = computed(() => {\n    const all = this.draftFilters();\n    const max = this.maxVisibleChips();\n    if (!this.filterOverflowEnabled() || max <= 0 || all.length <= max) {\n      return [];\n    }\n    return all.slice(max);\n  });\n\n  readonly hasFilterOverflow = computed(() => this.overflowDraftFilters().length > 0);\n\n  readonly moreFiltersLabelText = computed(() => {\n    const n = this.overflowDraftFilters().length;\n    const fn = this.labels()?.bar?.moreFiltersLabel;\n    if (fn) return fn(n);\n    return `+${n} more`;\n  });\n\n  readonly moreFiltersTooltipText = computed(() => {\n    const custom = this.labels()?.bar?.moreFiltersTooltip;\n    if (custom) return custom;\n    const n = this.overflowDraftFilters().length;\n    return n === 1 ? 'Show 1 more filter' : `Show ${n} more filters`;\n  });\n\n  readonly overflowSectionTitle = computed(() => {\n    const n = this.overflowDraftFilters().length;\n    const fn = this.labels()?.bar?.filtersLabel;\n    if (fn) return fn(n);\n    return n === 1 ? 'Additional filter' : `Additional filters (${n})`;\n  });\n\n  constructor() {\n    // Sync input filters to store on change\n    effect(() => {\n      const filters = this.filters();\n      this._store.setOriginalFilters(filters);\n    });\n  }\n\n  // Outputs\n  readonly addFilter = output<{\n    categories: FilterCategory[];\n    property: FilterProperty;\n    included: (string | number | boolean)[];\n    excluded: (string | number | boolean)[];\n  }>();\n  readonly filterRemoved = output<AellaFilterDefinition>();\n  readonly filterChanged = output<AellaFilterDefinition>();\n  readonly clearAll = output<void>();\n\n  readonly hasFilters = computed(() => this.draftFilters().length > 0);\n\n  onOverflowToggle(event: Event, anchor: HTMLElement): void {\n    this.overflowPopover?.toggle(event, anchor);\n  }\n\n  // Filter handlers - Update draft state\n  onRemoveFilter(filter: AellaFilterDefinition): void {\n    // Update draft state\n    this._store.removeDraftFilter(filter.field);\n\n    // Emit change event (parent decides when to commit)\n    this.filterRemoved.emit(filter);\n  }\n\n  onFilterChanged(updatedFilter: AellaFilterDefinition): void {\n    this._store.updateDraftFilter(updatedFilter);\n    this.filterChanged.emit(updatedFilter);\n  }\n\n  onCopyAllAsQuery(): void {\n    const qs = filtersToQueryString(this.draftFilters());\n    if (!qs) return;\n    navigator.clipboard.writeText(qs).then(() => {\n      this.copied.set(true);\n      setTimeout(() => this.copied.set(false), 1500);\n    });\n  }\n}\n","import {\n  afterNextRender,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { TableModule } from 'primeng/table';\nimport { AccordionModule } from 'primeng/accordion';\nimport { ToggleSwitch } from 'primeng/toggleswitch';\nimport { Slider } from 'primeng/slider';\nimport type { WidgetConfig } from '../../dashboard-builder/models';\nimport { optionsForWidget, SAMPLE_DATA, MULTI_SERIES_TREND, HEATMAP_DATA } from '../../dashboard-builder/chart-options';\nimport { WidgetChartComponent } from './widget-chart.component';\nimport {\n  TimeRangePickerComponent,\n  type TimeRangeValue,\n} from '../../time-range-picker/time-range-picker.component';\nimport { FilterBarComponent } from '../../filter-bar/filter-bar.component';\nimport type { AellaFilterDefinition, FilterCategory, FilterProperty } from '../../filter-bar/filter-bar.models';\n\nexport type WidgetConfigViewMode = 'config' | 'drilldown';\nexport type PreviewState = 'incomplete' | 'loading' | 'ready' | 'no-results' | 'error';\nexport type LaunchContext = 'dashboard' | 'savedCharts' | 'unknown';\n\nconst FIELD_REQUIRED_AGGREGATIONS = new Set(['term', 'cardinality']);\n\nexport interface WidgetConfigSavePayload {\n  widget: WidgetConfig;\n}\n\n/**\n * Super component for widget config/drilldown UI.\n * Use in a modal (WidgetConfigModalComponent) or standalone (sandbox route).\n * - config: full UI with Chart Specific Configuration panel and Save/Save as new.\n * - drilldown: enlarged chart + filters + table only (view-mode drilldown), no config panel.\n */\n@Component({\n  selector: 'ui-widget-config-view',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ButtonModule,\n    InputTextModule,\n    DropdownModule,\n    TableModule,\n    AccordionModule,\n    ToggleSwitch,\n    Slider,\n    WidgetChartComponent,\n    TimeRangePickerComponent,\n    FilterBarComponent,\n  ],\n  template: `\n    <div\n      class=\"tw-flex tw-flex-col tw-h-full tw-bg-app tw-text-surface-900 dark:tw-text-surface-50\">\n      <!-- Header: editable chart title + context line + actions -->\n      <header\n        class=\"tw-flex-shrink-0 tw-flex tw-items-center tw-justify-between tw-gap-4 tw-px-6 tw-py-3 tw-border-b tw-border-surface-200 dark:tw-border-surface-800\">\n        <div class=\"tw-flex tw-flex-col tw-gap-0.5 tw-min-w-0 tw-flex-1\">\n          @if (contextLine()) {\n            <div class=\"tw-text-xs tw-text-surface-400 dark:tw-text-surface-500 tw-truncate tw-leading-tight\">{{ contextLine() }}</div>\n          }\n          @if (isEditingTitle()) {\n            <input #titleInput\n              [(ngModel)]=\"chartName\"\n              (keydown.enter)=\"commitTitle(); $event.preventDefault()\"\n              (keydown.escape)=\"revertTitle(); $event.preventDefault()\"\n              (blur)=\"onTitleBlur()\"\n              placeholder=\"Untitled chart\"\n              class=\"tw-text-lg tw-font-semibold tw-text-surface-900 dark:tw-text-surface-0 tw-bg-transparent tw-border-0 tw-border-b-2 tw-border-primary tw-rounded-none tw-outline-none tw-w-full tw-px-0 tw-py-0\"\n              aria-label=\"Chart name\" />\n          } @else {\n            <button\n              type=\"button\"\n              (click)=\"startEditTitle()\"\n              class=\"tw-text-lg tw-font-semibold tw-text-surface-900 dark:tw-text-surface-0 tw-truncate tw-text-left tw-bg-transparent tw-border-0 tw-cursor-text tw-p-0 tw-outline-none tw-flex tw-items-center tw-gap-2 hover:tw-opacity-80 tw-transition-opacity\"\n              [title]=\"chartName || 'Untitled chart'\">\n              <span class=\"tw-truncate\">{{ chartName || 'Untitled chart' }}</span>\n              <i class=\"pi pi-pencil tw-text-[10px] tw-text-surface-300 dark:tw-text-surface-600\"></i>\n            </button>\n          }\n        </div>\n        <div class=\"tw-flex tw-items-center tw-gap-2 tw-flex-shrink-0\">\n          @if (mode() === 'config') {\n            <button\n              pButton\n              icon=\"pi pi-copy\"\n              [rounded]=\"true\"\n              [text]=\"true\"\n              severity=\"secondary\"\n              size=\"small\"\n              class=\"tw-w-7 tw-h-7\"\n              (click)=\"onSaveAsNew()\"\n              title=\"Duplicate\"\n              aria-label=\"Duplicate\"></button>\n          }\n          <button\n            pButton\n            icon=\"pi pi-share-alt\"\n            [rounded]=\"true\"\n            [text]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            class=\"tw-w-7 tw-h-7\"\n            title=\"Share\"\n            aria-label=\"Share\"></button>\n          <div class=\"tw-w-px tw-h-6 tw-bg-surface-200 dark:tw-bg-surface-700\"></div>\n          <button\n            pButton\n            [label]=\"mode() === 'drilldown' ? 'Back' : 'Close'\"\n            severity=\"secondary\"\n            [outlined]=\"true\"\n            size=\"small\"\n            [attr.aria-label]=\"mode() === 'drilldown' ? 'Back' : 'Close'\"\n            (click)=\"onClose()\"></button>\n          @if (mode() === 'config') {\n            <button\n              pButton\n              label=\"Save as new\"\n              severity=\"secondary\"\n              [outlined]=\"true\"\n              size=\"small\"\n              aria-label=\"Save as new\"\n              (click)=\"onSaveAsNew()\"></button>\n            <button\n              pButton\n              label=\"Save\"\n              size=\"small\"\n              aria-label=\"Save\"\n              (click)=\"onSave()\"></button>\n          }\n        </div>\n      </header>\n\n      <!-- Main: chart area + optional config panel -->\n      <div class=\"tw-flex-1 tw-flex tw-min-h-0 tw-overflow-hidden\">\n        <!-- Left panel -->\n        <div\n          class=\"tw-flex-1 tw-flex tw-flex-col tw-h-full tw-min-w-0 tw-min-h-0 tw-overflow-hidden tw-p-6 tw-gap-4\">\n\n          @if (leftPanelMode() === 'preview') {\n          <!-- ═══ PREVIEW MODE ═══ -->\n          <!-- Time range + filters row (2-column: filters wrap in col 1, clear all sticks in col 2) -->\n          <div\n            class=\"tw-flex-shrink-0 tw-px-4 tw-py-3 tw-rounded-xl tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-border tw-border-surface-200 dark:tw-border-surface-800\">\n            <ui-filter-bar\n              class=\"tw-w-full\"\n              [filters]=\"configFilters\"\n              [categories]=\"configFilterCategories\"\n              [properties]=\"configFilterProperties\"\n              [categoryValuesMap]=\"configFilterCategoryValues\"\n              (clearAll)=\"onClearFilters()\">\n              <sc-time-range-picker\n                uiFilterBarTimeRange\n                class=\"tw-shrink-0\"\n                [value]=\"timeRange()\"\n                (valueChange)=\"onTimeRangeChange($event)\"></sc-time-range-picker>\n            </ui-filter-bar>\n          </div>\n\n          <!-- Chart preview (state machine) -->\n          <div\n            class=\"tw-flex-1 tw-min-h-0 tw-rounded-2xl tw-border tw-border-surface-200 dark:tw-border-surface-800 tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-p-4 tw-flex tw-items-center tw-justify-center tw-relative tw-overflow-hidden\">\n            @switch (previewState()) {\n              @case ('incomplete') {\n                <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-3 tw-text-center tw-max-w-xs\">\n                  <div class=\"tw-w-12 tw-h-12 tw-rounded-full tw-bg-surface-100 dark:tw-bg-surface-800 tw-flex tw-items-center tw-justify-center\">\n                    <i class=\"pi pi-chart-bar tw-text-xl tw-text-surface-400\"></i>\n                  </div>\n                  <div>\n                    <div class=\"tw-text-sm tw-font-semibold tw-text-surface-700 dark:tw-text-surface-200\">Preview not ready</div>\n                    <div class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400 tw-mt-1\">Complete the required settings and click Apply to render a preview</div>\n                  </div>\n                  @if (missingRequirements().length) {\n                    <div class=\"tw-w-full tw-mt-1\">\n                      @for (req of missingRequirements(); track req) {\n                        <div class=\"tw-flex tw-items-center tw-gap-2 tw-py-1.5 tw-text-xs tw-text-surface-500 dark:tw-text-surface-400\">\n                          <div class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full tw-bg-surface-300 dark:tw-bg-surface-600 tw-shrink-0\"></div>\n                          <span>{{ req }}</span>\n                        </div>\n                      }\n                    </div>\n                  }\n                </div>\n              }\n              @case ('loading') {\n                <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-w-full tw-h-full tw-gap-4\">\n                  <div class=\"tw-flex-1 tw-w-full tw-flex tw-items-end tw-justify-center tw-gap-3 tw-px-12 tw-pb-2\">\n                    <div class=\"tw-flex-1 tw-max-w-[40px] tw-bg-surface-200 dark:tw-bg-surface-700 tw-rounded-t tw-animate-pulse\" style=\"height: 35%\"></div>\n                    <div class=\"tw-flex-1 tw-max-w-[40px] tw-bg-surface-200 dark:tw-bg-surface-700 tw-rounded-t tw-animate-pulse\" style=\"height: 68%\"></div>\n                    <div class=\"tw-flex-1 tw-max-w-[40px] tw-bg-surface-200 dark:tw-bg-surface-700 tw-rounded-t tw-animate-pulse\" style=\"height: 48%\"></div>\n                    <div class=\"tw-flex-1 tw-max-w-[40px] tw-bg-surface-200 dark:tw-bg-surface-700 tw-rounded-t tw-animate-pulse\" style=\"height: 82%\"></div>\n                    <div class=\"tw-flex-1 tw-max-w-[40px] tw-bg-surface-200 dark:tw-bg-surface-700 tw-rounded-t tw-animate-pulse\" style=\"height: 40%\"></div>\n                    <div class=\"tw-flex-1 tw-max-w-[40px] tw-bg-surface-200 dark:tw-bg-surface-700 tw-rounded-t tw-animate-pulse\" style=\"height: 62%\"></div>\n                    <div class=\"tw-flex-1 tw-max-w-[40px] tw-bg-surface-200 dark:tw-bg-surface-700 tw-rounded-t tw-animate-pulse\" style=\"height: 55%\"></div>\n                  </div>\n                  <div class=\"tw-h-px tw-w-full tw-bg-surface-200 dark:tw-bg-surface-700 tw-mx-12\"></div>\n                  <div class=\"tw-flex tw-items-center tw-gap-2 tw-text-sm tw-text-surface-500 dark:tw-text-surface-400 tw-pb-2\">\n                    <i class=\"pi pi-spin pi-spinner\"></i>\n                    <span>Running query…</span>\n                  </div>\n                </div>\n              }\n              @case ('ready') {\n                @if (widget().kind === 'counter') {\n                  <div class=\"tw-text-center tw-text-surface-500 dark:tw-text-surface-400\">\n                    Counter widget — enlarged view (FPO)\n                  </div>\n                } @else {\n                  <div class=\"tw-w-full tw-h-full\">\n                    <ui-widget-chart\n                      [options]=\"chartOptions()\"\n                      [chartType]=\"appliedChartType()\"\n                      [fillContainer]=\"true\"\n                      [isLoading]=\"false\"\n                      [isEmpty]=\"false\"\n                      (chartInitEvent)=\"onChartReady($event)\"></ui-widget-chart>\n                  </div>\n                }\n              }\n              @case ('no-results') {\n                <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-3 tw-text-center tw-max-w-xs\">\n                  <div class=\"tw-w-12 tw-h-12 tw-rounded-full tw-bg-surface-100 dark:tw-bg-surface-800 tw-flex tw-items-center tw-justify-center\">\n                    <i class=\"pi pi-search tw-text-xl tw-text-surface-400\"></i>\n                  </div>\n                  <div>\n                    <div class=\"tw-text-sm tw-font-semibold tw-text-surface-700 dark:tw-text-surface-200\">No results</div>\n                    <div class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400 tw-mt-1\">The query returned no data. Try adjusting:</div>\n                  </div>\n                  <div class=\"tw-w-full tw-mt-1\">\n                    <div class=\"tw-flex tw-items-center tw-gap-2 tw-py-1.5 tw-text-xs tw-text-surface-500 dark:tw-text-surface-400\">\n                      <i class=\"pi pi-clock tw-text-[10px]\"></i>\n                      <span>Expand the time range</span>\n                    </div>\n                    <div class=\"tw-flex tw-items-center tw-gap-2 tw-py-1.5 tw-text-xs tw-text-surface-500 dark:tw-text-surface-400\">\n                      <i class=\"pi pi-filter-slash tw-text-[10px]\"></i>\n                      <span>Remove or loosen filters</span>\n                    </div>\n                    <div class=\"tw-flex tw-items-center tw-gap-2 tw-py-1.5 tw-text-xs tw-text-surface-500 dark:tw-text-surface-400\">\n                      <i class=\"pi pi-sync tw-text-[10px]\"></i>\n                      <span>Change the aggregation field</span>\n                    </div>\n                  </div>\n                </div>\n              }\n              @case ('error') {\n                <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-3 tw-text-center tw-max-w-xs\">\n                  <div class=\"tw-w-12 tw-h-12 tw-rounded-full tw-bg-red-50 dark:tw-bg-red-900/20 tw-flex tw-items-center tw-justify-center\">\n                    <i class=\"pi pi-exclamation-triangle tw-text-xl tw-text-red-400\"></i>\n                  </div>\n                  <div>\n                    <div class=\"tw-text-sm tw-font-semibold tw-text-surface-700 dark:tw-text-surface-200\">Query error</div>\n                    <div class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400 tw-mt-1\">{{ previewError() || 'An unexpected error occurred while running the query.' }}</div>\n                  </div>\n                  @if (previewErrorDetail()) {\n                    <details class=\"tw-w-full tw-text-left tw-mt-1\">\n                      <summary class=\"tw-text-xs tw-text-primary tw-cursor-pointer\">View details</summary>\n                      <pre class=\"tw-mt-2 tw-p-3 tw-rounded-lg tw-bg-surface-100 dark:tw-bg-surface-800 tw-text-xs tw-text-surface-600 dark:tw-text-surface-400 tw-overflow-auto tw-max-h-32 tw-font-mono\">{{ previewErrorDetail() }}</pre>\n                    </details>\n                  }\n                </div>\n              }\n            }\n          </div>\n\n          <!-- Results table — collapsible panel -->\n          @if (previewState() === 'ready' || previewState() === 'loading') {\n          <div\n            class=\"tw-flex-shrink-0 tw-rounded-xl tw-border tw-border-surface-200 dark:tw-border-surface-800 tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-overflow-hidden\">\n            <!-- Collapse header -->\n            <button\n              type=\"button\"\n              (click)=\"tableExpanded.set(!tableExpanded())\"\n              class=\"tw-w-full tw-flex tw-items-center tw-justify-between tw-px-4 tw-py-2.5\n                     tw-bg-transparent tw-border-0 tw-cursor-pointer\n                     hover:tw-bg-surface-50 dark:hover:tw-bg-surface-800\n                     tw-transition-colors tw-duration-150\">\n              <div class=\"tw-flex tw-items-center tw-gap-2\">\n                <span class=\"tw-text-sm tw-font-medium tw-text-surface-700 dark:tw-text-surface-200\">Results</span>\n                <span class=\"tw-text-xs tw-text-surface-400 dark:tw-text-surface-500 tw-tabular-nums\">{{ tableData().length }} rows</span>\n              </div>\n              <i class=\"pi tw-text-xs tw-text-surface-400 dark:tw-text-surface-500 tw-transition-transform tw-duration-200\"\n                 [ngClass]=\"tableExpanded() ? 'pi-chevron-down' : 'pi-chevron-up'\"></i>\n            </button>\n            <!-- Table body (collapsible) -->\n            @if (tableExpanded()) {\n              <div class=\"tw-border-t tw-border-surface-200 dark:tw-border-surface-800\">\n                <div class=\"tw-px-4 tw-py-2 tw-border-b tw-border-surface-200 dark:tw-border-surface-800\">\n                  <input\n                    pInputText\n                    type=\"text\"\n                    placeholder=\"Search\"\n                    class=\"tw-w-full tw-max-w-xs\"\n                    aria-label=\"Search table\" />\n                </div>\n                <div class=\"tw-max-h-[240px] tw-overflow-auto\">\n                  <p-table\n                    [value]=\"tableData()\"\n                    [scrollable]=\"true\"\n                    styleClass=\"p-datatable-sm p-datatable-striped\"\n                    class=\"tw-text-sm\">\n                    <ng-template pTemplate=\"header\">\n                      <tr>\n                        <th>{{ tableColumns().col1 }}</th>\n                        <th class=\"tw-text-right\">{{ tableColumns().col2 }}</th>\n                        @if (tableColumns().col3) {\n                          <th class=\"tw-text-right\">{{ tableColumns().col3 }}</th>\n                        }\n                        <th class=\"tw-text-center tw-w-24\">Actions</th>\n                      </tr>\n                    </ng-template>\n                    <ng-template pTemplate=\"body\" let-row>\n                      <tr\n                        (mouseenter)=\"onRowHover(row.col1)\"\n                        (mouseleave)=\"onRowLeave()\"\n                        class=\"tw-transition-colors tw-duration-150 tw-cursor-default\"\n                        [ngClass]=\"highlightedRow() === row.col1 ? 'tw-bg-blue-50 dark:tw-bg-blue-950' : ''\">\n                        <td class=\"tw-truncate tw-max-w-[200px]\">{{ row.col1 }}</td>\n                        <td class=\"tw-text-right tw-tabular-nums\">{{ row.col2 }}</td>\n                        @if (tableColumns().col3) {\n                          <td class=\"tw-text-right tw-tabular-nums tw-text-surface-500\">{{ row.col3 }}</td>\n                        }\n                        <td class=\"tw-text-center\">\n                          <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1\">\n                            <button pButton\n                              icon=\"pi pi-search\"\n                              [rounded]=\"true\"\n                              [text]=\"true\"\n                              severity=\"secondary\"\n                              size=\"small\"\n                              class=\"tw-w-6 tw-h-6 !tw-p-0\"\n                              title=\"Investigate\"\n                              aria-label=\"Investigate\"></button>\n                            <button pButton\n                              icon=\"pi pi-filter\"\n                              [rounded]=\"true\"\n                              [text]=\"true\"\n                              severity=\"secondary\"\n                              size=\"small\"\n                              class=\"tw-w-6 tw-h-6 !tw-p-0\"\n                              title=\"Filter to this value\"\n                              aria-label=\"Filter to this value\"></button>\n                            <button pButton\n                              icon=\"pi pi-copy\"\n                              [rounded]=\"true\"\n                              [text]=\"true\"\n                              severity=\"secondary\"\n                              size=\"small\"\n                              class=\"tw-w-6 tw-h-6 !tw-p-0\"\n                              title=\"Copy value\"\n                              aria-label=\"Copy value\"></button>\n                          </div>\n                        </td>\n                      </tr>\n                    </ng-template>\n                  </p-table>\n                </div>\n              </div>\n            }\n          </div>\n          }\n          <!-- end PREVIEW MODE -->\n\n          } @else {\n          <!-- ═══ QUERY BUILDER MODE ═══ -->\n          <div class=\"tw-flex tw-flex-col tw-h-full tw-min-h-0 tw-overflow-hidden tw-gap-0\">\n\n            <!-- Title bar with back arrow -->\n            <div\n              class=\"tw-flex-shrink-0 tw-flex tw-items-center tw-gap-3 tw-px-5 tw-py-3 tw-rounded-xl tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-border tw-border-surface-200 dark:tw-border-surface-800\">\n              <button pButton\n                icon=\"pi pi-arrow-left\"\n                [text]=\"true\"\n                severity=\"secondary\"\n                size=\"small\"\n                class=\"tw-w-8 tw-h-8 !tw-p-0\"\n                (click)=\"onCancelQueryBuilder()\"\n                title=\"Back to preview\"\n                aria-label=\"Back to preview\"></button>\n              <span class=\"tw-text-base tw-font-bold tw-text-surface-800 dark:tw-text-surface-100\">Query and Filter Builder</span>\n            </div>\n\n            <!-- Scrollable body -->\n            <div class=\"tw-flex-1 tw-overflow-y-auto tw-mt-4 tw-rounded-t-2xl tw-rounded-b-none tw-border tw-border-surface-200 dark:tw-border-surface-800 tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800]\">\n\n              <!-- ── Query tabs ── -->\n              <div class=\"tw-flex tw-items-center tw-gap-1 tw-px-5 tw-pt-4 tw-pb-0\">\n                <div class=\"tw-flex tw-items-center tw-gap-1.5 tw-border-b-2 tw-border-primary tw-pb-2 tw-px-1\">\n                  <span class=\"tw-w-2 tw-h-2 tw-rounded-full tw-bg-primary\"></span>\n                  <span class=\"tw-text-sm tw-text-surface-700 dark:tw-text-surface-200\">Query 1</span>\n                  <button pButton icon=\"pi pi-times\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                    aria-label=\"Remove query\"\n                    class=\"tw-w-5 tw-h-5 !tw-p-0 !tw-text-[10px]\"></button>\n                </div>\n                <button pButton icon=\"pi pi-plus\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                  aria-label=\"Add query\"\n                  class=\"tw-w-6 tw-h-6 !tw-p-0 tw-mb-2\"></button>\n              </div>\n\n              <!-- ── Select indices + action toolbar ── -->\n              <div class=\"tw-px-5 tw-pt-3 tw-pb-4\">\n                <div class=\"tw-text-[11px] tw-text-surface-400 dark:tw-text-surface-500 tw-mb-1.5 tw-uppercase tw-tracking-wide tw-font-medium\">Select indices</div>\n                <div class=\"tw-flex tw-items-center tw-gap-2 tw-flex-wrap\">\n                  <!-- Index chip -->\n                  <div class=\"tw-flex tw-items-center tw-gap-1 tw-bg-surface-100 dark:tw-bg-surface-800 tw-rounded-full tw-pl-3 tw-pr-1 tw-py-1 tw-text-sm\">\n                    <span class=\"tw-text-surface-700 dark:tw-text-surface-200\">Syslog</span>\n                    <button pButton icon=\"pi pi-times\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                      aria-label=\"Remove index\"\n                      class=\"tw-w-5 tw-h-5 !tw-p-0 !tw-text-[10px]\"></button>\n                  </div>\n                  <!-- Tenant dropdown -->\n                  <p-dropdown\n                    [options]=\"[{label:'QA-SPU...', value:'qa'}]\"\n                    [(ngModel)]=\"qbTenantPlaceholder\"\n                    optionLabel=\"label\"\n                    optionValue=\"value\"\n                    placeholder=\"QA-SPU...\"\n                    appendTo=\"body\"\n                    class=\"tw-w-[120px]\" />\n                  <!-- Time range -->\n                  <button pButton label=\"Last 30 days\" [outlined]=\"true\" size=\"small\" class=\"!tw-text-primary !tw-border-primary\" aria-label=\"Last 30 days\"></button>\n                  <!-- Run + Save -->\n                  <button pButton label=\"Run\" icon=\"pi pi-play\" [outlined]=\"true\" size=\"small\" class=\"!tw-text-primary !tw-border-primary\" aria-label=\"Run\"></button>\n                  <button pButton label=\"Save\" [outlined]=\"true\" size=\"small\" class=\"!tw-text-primary !tw-border-primary\"\n                    aria-label=\"Save query\" (click)=\"onSaveQuery()\"></button>\n\n                  <div class=\"tw-flex-1\"></div>\n                  <!-- Query Mode toggle -->\n                  <button pButton label=\"Query Mode\" icon=\"pi pi-chevron-down\" iconPos=\"right\" size=\"small\"\n                    class=\"!tw-bg-primary !tw-border-primary\" aria-label=\"Query Mode\"></button>\n                </div>\n              </div>\n\n              <!-- ── Conditions card ── -->\n              <div class=\"tw-mx-5 tw-mb-4 tw-rounded-xl tw-border tw-border-surface-200 dark:tw-border-surface-700 tw-p-4\">\n                <div class=\"tw-flex tw-items-center tw-gap-1.5 tw-text-sm tw-text-surface-500 dark:tw-text-surface-400 tw-mb-4\">\n                  <span>Find documents where</span>\n                  <button pButton\n                    [label]=\"queryBuilderLogic()\"\n                    [outlined]=\"true\"\n                    size=\"small\"\n                    class=\"!tw-py-0 !tw-px-2 !tw-text-xs !tw-min-w-0\"\n                    aria-label=\"Toggle query logic\"\n                    (click)=\"toggleQueryLogic()\"></button>\n                  <span>of the following criteria are met.</span>\n                </div>\n\n                <!-- Condition rows -->\n                <div class=\"tw-space-y-2.5\">\n                  @for (cond of queryBuilderConditions(); track $index) {\n                    <div class=\"tw-flex tw-items-center tw-gap-2\">\n                      <!-- Type icons (Aa + grid) -->\n                      <span class=\"tw-text-xs tw-text-surface-400 tw-font-semibold tw-w-5 tw-text-center tw-shrink-0\">Aa</span>\n                      <i class=\"pi pi-th-large tw-text-xs tw-text-surface-400 tw-shrink-0\"></i>\n                      <!-- Field -->\n                      <p-dropdown\n                        [options]=\"queryBuilderFieldOptions\"\n                        [(ngModel)]=\"cond.field\"\n                        optionLabel=\"label\"\n                        optionValue=\"value\"\n                        appendTo=\"body\"\n                        placeholder=\"Field\"\n                        class=\"tw-w-[180px]\" />\n                      <!-- Operator -->\n                      <p-dropdown\n                        [options]=\"queryBuilderOperatorOptions\"\n                        [(ngModel)]=\"cond.operator\"\n                        optionLabel=\"label\"\n                        optionValue=\"value\"\n                        appendTo=\"body\"\n                        class=\"tw-w-[80px]\" />\n                      <!-- Value -->\n                      <input pInputText type=\"text\" placeholder=\"Value\"\n                        class=\"tw-flex-1\"\n                        [ngModel]=\"cond.values.join(', ')\"\n                        (ngModelChange)=\"onConditionValueChange($index, $event)\" />\n                      <!-- Add / Delete icons -->\n                      <button pButton icon=\"pi pi-plus\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                        class=\"tw-w-7 tw-h-7 !tw-p-0 tw-shrink-0\"\n                        aria-label=\"Add condition\"\n                        (click)=\"addQueryCondition()\"></button>\n                      <button pButton icon=\"pi pi-trash\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                        class=\"tw-w-7 tw-h-7 !tw-p-0 tw-shrink-0\"\n                        aria-label=\"Remove condition\"\n                        (click)=\"removeQueryCondition($index)\"></button>\n                    </div>\n                  }\n                </div>\n\n                <!-- Add buttons row -->\n                <div class=\"tw-flex tw-items-center tw-gap-4 tw-mt-3\">\n                  <button pButton icon=\"pi pi-plus\" label=\"Add condition\" [text]=\"true\" size=\"small\"\n                    class=\"!tw-text-primary !tw-text-xs\"\n                    aria-label=\"Add condition\"\n                    (click)=\"addQueryCondition()\"></button>\n                  <button pButton icon=\"pi pi-plus\" label=\"Add string condition\" [text]=\"true\" size=\"small\"\n                    class=\"!tw-text-green-500 !tw-text-xs\" aria-label=\"Add string condition\"></button>\n                  <button pButton icon=\"pi pi-plus\" label=\"Add inner group\" [text]=\"true\" size=\"small\"\n                    class=\"!tw-text-primary !tw-text-xs\" aria-label=\"Add inner group\"></button>\n                </div>\n              </div>\n\n              <!-- ── Aggregations card ── -->\n              <div class=\"tw-mx-5 tw-mb-4 tw-rounded-xl tw-border tw-border-surface-200 dark:tw-border-surface-700 tw-p-4 tw-relative\">\n                <button pButton icon=\"pi pi-times\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                  class=\"tw-absolute tw-top-3 tw-right-3 tw-w-7 tw-h-7 !tw-p-0\" aria-label=\"Remove aggregations\"></button>\n                <div class=\"tw-text-sm tw-font-semibold tw-text-surface-600 dark:tw-text-surface-300 tw-mb-4\">Aggregations:</div>\n\n                <!-- Group By row -->\n                <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\n                  <span class=\"tw-text-xs tw-font-semibold tw-text-primary tw-w-16 tw-shrink-0\">Group By</span>\n                  <p-dropdown\n                    [options]=\"qbGroupByOptions\"\n                    [(ngModel)]=\"qbGroupByField\"\n                    optionLabel=\"label\"\n                    optionValue=\"value\"\n                    placeholder=\"user.name\"\n                    appendTo=\"body\"\n                    class=\"tw-w-[180px]\" />\n                  <button pButton icon=\"pi pi-plus\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                    class=\"tw-w-7 tw-h-7 !tw-p-0\" aria-label=\"Add group by\"></button>\n                </div>\n\n                <!-- Function row -->\n                <div class=\"tw-flex tw-items-center tw-gap-2\">\n                  <span class=\"tw-text-xs tw-font-semibold tw-italic tw-text-primary tw-w-16 tw-shrink-0\">f(x)</span>\n                  <p-dropdown\n                    [options]=\"qbFunctionOptions\"\n                    [(ngModel)]=\"qbFunction\"\n                    optionLabel=\"label\"\n                    optionValue=\"value\"\n                    appendTo=\"body\"\n                    class=\"tw-w-[100px]\" />\n                  <span class=\"tw-text-xs tw-text-surface-500\">as</span>\n                  <input pInputText type=\"text\" class=\"tw-w-[180px]\" [(ngModel)]=\"qbAliasName\" />\n                  <button pButton icon=\"pi pi-trash\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                    class=\"tw-w-7 tw-h-7 !tw-p-0\" aria-label=\"Remove function\"></button>\n                  <button pButton icon=\"pi pi-plus\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                    class=\"tw-w-7 tw-h-7 !tw-p-0\" aria-label=\"Add function\"></button>\n                </div>\n              </div>\n\n              <!-- ── Sort card ── -->\n              <div class=\"tw-mx-5 tw-mb-4 tw-rounded-xl tw-border tw-border-surface-200 dark:tw-border-surface-700 tw-p-4 tw-relative\">\n                <button pButton icon=\"pi pi-times\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                  class=\"tw-absolute tw-top-3 tw-right-3 tw-w-7 tw-h-7 !tw-p-0\" aria-label=\"Remove sort\"></button>\n                <div class=\"tw-text-sm tw-font-semibold tw-text-surface-600 dark:tw-text-surface-300 tw-mb-4\">Sort:</div>\n\n                <div class=\"tw-flex tw-items-center tw-gap-2\">\n                  <p-dropdown\n                    [options]=\"qbSortFieldOptions\"\n                    [(ngModel)]=\"qbSortField\"\n                    optionLabel=\"label\"\n                    optionValue=\"value\"\n                    appendTo=\"body\"\n                    class=\"tw-w-[180px]\" />\n                  <p-dropdown\n                    [options]=\"qbSortDirOptions\"\n                    [(ngModel)]=\"qbSortDir\"\n                    optionLabel=\"label\"\n                    optionValue=\"value\"\n                    appendTo=\"body\"\n                    class=\"tw-w-[140px]\" />\n                  <button pButton icon=\"pi pi-trash\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                    class=\"tw-w-7 tw-h-7 !tw-p-0\" aria-label=\"Remove sort\"></button>\n                  <button pButton icon=\"pi pi-plus\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                    class=\"tw-w-7 tw-h-7 !tw-p-0\" aria-label=\"Add sort\"></button>\n                </div>\n              </div>\n\n              <!-- ── Divider ── -->\n              <div class=\"tw-mx-5 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\"></div>\n\n              <!-- ── Documents section ── -->\n              <div class=\"tw-px-5 tw-py-4\">\n                <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n                  <span class=\"tw-text-base tw-font-bold tw-text-surface-800 dark:tw-text-surface-100\">Documents</span>\n                  <div class=\"tw-flex tw-items-center tw-gap-2\">\n                    <span class=\"tw-relative\">\n                      <input pInputText type=\"text\" placeholder=\"Search page content\" class=\"tw-w-[200px] !tw-text-xs !tw-py-1.5\" />\n                      <i class=\"pi pi-search tw-absolute tw-right-2.5 tw-top-1/2 -tw-translate-y-1/2 tw-text-xs tw-text-surface-400\"></i>\n                    </span>\n                  </div>\n                </div>\n\n                <!-- Status row -->\n                <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n                  <div class=\"tw-flex tw-items-center tw-gap-2 tw-text-xs\">\n                    <span class=\"tw-font-bold tw-text-green-500\">Completed.</span>\n                    <span class=\"tw-text-surface-500 dark:tw-text-surface-400\">2025-08-20 15:56</span>\n                    <span class=\"tw-text-surface-500 dark:tw-text-surface-400\">Showing 0 of 0 results from the last 30 days</span>\n                  </div>\n                  <div class=\"tw-flex tw-items-center tw-gap-2\">\n                    <button pButton label=\"Export CSV\" icon=\"pi pi-download\" [outlined]=\"true\" size=\"small\" class=\"!tw-text-xs\" aria-label=\"Export CSV\"></button>\n                    <button pButton label=\"Select View\" icon=\"pi pi-eye\" [outlined]=\"true\" size=\"small\" class=\"!tw-text-xs\" aria-label=\"Select View\"></button>\n                  </div>\n                </div>\n\n                <!-- Table header -->\n                <div class=\"tw-rounded-lg tw-border tw-border-surface-200 dark:tw-border-surface-700 tw-overflow-hidden\">\n                  <p-table\n                    [value]=\"qbDocumentRows\"\n                    [scrollable]=\"true\"\n                    styleClass=\"p-datatable-sm\"\n                    class=\"tw-text-sm\">\n                    <ng-template pTemplate=\"header\">\n                      <tr>\n                        <th class=\"tw-w-10\">\n                          <i class=\"pi pi-table tw-text-xs tw-text-surface-400\"></i>\n                        </th>\n                        <th>User.Name</th>\n                        <th>Failed Login Count</th>\n                      </tr>\n                    </ng-template>\n                    <ng-template pTemplate=\"body\" let-row>\n                      <tr>\n                        <td></td>\n                        <td>{{ row.userName }}</td>\n                        <td>{{ row.count }}</td>\n                      </tr>\n                    </ng-template>\n                    <ng-template pTemplate=\"emptymessage\">\n                      <tr>\n                        <td colspan=\"3\" class=\"tw-text-center tw-py-8 tw-text-surface-400 tw-text-sm\">No results</td>\n                      </tr>\n                    </ng-template>\n                  </p-table>\n                </div>\n              </div>\n\n            </div>\n\n            <!-- ── Sticky footer (Cancel / Save & apply) ── -->\n            <div class=\"tw-flex-shrink-0 tw-flex tw-justify-end tw-gap-3 tw-px-5 tw-py-3 tw-border-t tw-border-surface-200 dark:tw-border-surface-800 tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-rounded-b-2xl\">\n              <button pButton label=\"Cancel\" [text]=\"true\" severity=\"secondary\" aria-label=\"Cancel\" (click)=\"onCancelQueryBuilder()\"></button>\n              <button pButton label=\"Save &amp; apply\" icon=\"pi pi-check\" aria-label=\"Save and apply\" (click)=\"onSaveQuery()\" [disabled]=\"!queryBuilderName.trim()\"></button>\n            </div>\n          </div>\n          }\n        </div>\n\n        <!-- Right: Chart Specific Configuration (config mode only) -->\n        @if (mode() === 'config') {\n          <aside\n            class=\"tw-w-[380px] tw-flex-shrink-0 tw-flex tw-flex-col tw-border-l tw-border-surface-200 dark:tw-border-surface-800 tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-overflow-auto tw-relative\">\n            @if (leftPanelMode() === 'queryBuilder') {\n              <div class=\"tw-absolute tw-inset-0 tw-z-10 tw-bg-surface-950/40 dark:tw-bg-surface-950/60 tw-backdrop-blur-[1px] tw-flex tw-items-start tw-justify-center tw-pt-24\">\n                <div class=\"tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-rounded-xl tw-shadow-lg tw-px-5 tw-py-4 tw-text-center tw-max-w-[260px] tw-border tw-border-surface-200 dark:tw-border-surface-700\">\n                  <i class=\"pi pi-lock tw-text-lg tw-text-surface-400 tw-mb-2\"></i>\n                  <div class=\"tw-text-sm tw-font-medium tw-text-surface-700 dark:tw-text-surface-200 tw-mb-1\">Configuration locked</div>\n                  <div class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400\">Save or cancel the query builder to continue editing chart settings.</div>\n                </div>\n              </div>\n            }\n            <div class=\"tw-p-4 tw-border-b tw-border-surface-200 dark:tw-border-surface-800\">\n              <div class=\"tw-text-base tw-font-medium\">Chart Configuration</div>\n            </div>\n            <div class=\"tw-flex-1 tw-overflow-y-auto\">\n              <p-accordion [value]=\"openPanels()\" [multiple]=\"true\">\n                <!-- 1. Data -->\n                <p-accordion-panel value=\"data\">\n                  <p-accordion-header>Data</p-accordion-header>\n                  <p-accordion-content>\n                    <div class=\"tw-space-y-4 tw-text-sm tw-py-1\">\n                      <div>\n                        <label class=\"tw-block tw-font-medium tw-mb-1.5\">Tenant\n                        <p-dropdown\n                          [options]=\"tenantOptions\"\n                          [(ngModel)]=\"tenant\"\n                          optionLabel=\"label\"\n                          optionValue=\"value\"\n                          placeholder=\"All tenants\"\n                          appendTo=\"body\"\n                          class=\"tw-w-full\" />\n                        </label>\n                      </div>\n                      <div\n                        class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                        [ngClass]=\"firstMissingField() === 'indices' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                        <label class=\"tw-block tw-font-medium tw-mb-1.5\">Indices\n                        <p-dropdown\n                          [options]=\"indicesOptions\"\n                          [(ngModel)]=\"indices\"\n                          optionLabel=\"label\"\n                          optionValue=\"value\"\n                          placeholder=\"Alerts\"\n                          appendTo=\"body\"\n                          class=\"tw-w-full\" />\n                        </label>\n                      </div>\n                      <div>\n                        <label class=\"tw-block tw-font-medium tw-mb-1.5\">Query\n                        <div class=\"tw-flex tw-gap-2\">\n                          <p-dropdown\n                            [options]=\"queryOptions\"\n                            [(ngModel)]=\"query\"\n                            optionLabel=\"label\"\n                            optionValue=\"value\"\n                            placeholder=\"None\"\n                            appendTo=\"body\"\n                            class=\"tw-flex-1\" />\n                          <button pButton label=\"New query\" [outlined]=\"true\" size=\"small\" aria-label=\"New query\" (click)=\"onNewQuery()\"></button>\n                        </div>\n                        </label>\n                      </div>\n                    </div>\n                  </p-accordion-content>\n                </p-accordion-panel>\n\n                <!-- 2. Aggregation (chart-type-aware) -->\n                <p-accordion-panel value=\"aggregation\">\n                  <p-accordion-header>Aggregation</p-accordion-header>\n                  <p-accordion-content>\n                    <div class=\"tw-space-y-4 tw-text-sm tw-py-1\">\n\n                      @switch (chartType) {\n                        <!-- ── DONUT ── -->\n                        @case ('donut') {\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'aggregation' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Show\n                            <p-dropdown\n                              [options]=\"aggregationOptionsByType['donut']\"\n                              [(ngModel)]=\"aggregation\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              placeholder=\"Top values\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'field' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Field\n                            <p-dropdown\n                              [options]=\"fieldOptions\"\n                              [(ngModel)]=\"field\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              placeholder=\"Select field\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div>\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Limit\n                            <input pInputText type=\"number\" [(ngModel)]=\"limit\" class=\"tw-w-full\" placeholder=\"10\" min=\"1\" max=\"100\" />\n                            </label>\n                          </div>\n                        }\n\n                        <!-- ── AREA ── -->\n                        @case ('area') {\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'aggregation' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Show\n                            <p-dropdown\n                              [options]=\"aggregationOptionsByType['area']\"\n                              [(ngModel)]=\"aggregation\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              placeholder=\"Trend over time\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'field' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Metric field\n                            <p-dropdown\n                              [options]=\"fieldOptions\"\n                              [(ngModel)]=\"field\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              placeholder=\"Select field\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div>\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Time interval\n                            <p-dropdown\n                              [options]=\"timeIntervalOptions\"\n                              [(ngModel)]=\"timeInterval\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div>\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Stacking\n                            <p-dropdown\n                              [options]=\"stackingOptions\"\n                              [(ngModel)]=\"areaStacking\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                        }\n\n                        <!-- ── BAR ── -->\n                        @case ('bar') {\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'aggregation' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Show\n                            <p-dropdown\n                              [options]=\"aggregationOptionsByType['bar']\"\n                              [(ngModel)]=\"aggregation\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              placeholder=\"Top values\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'field' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Field\n                            <p-dropdown\n                              [options]=\"fieldOptions\"\n                              [(ngModel)]=\"field\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              placeholder=\"Select field\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div>\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Limit\n                            <input pInputText type=\"number\" [(ngModel)]=\"limit\" class=\"tw-w-full\" placeholder=\"10\" min=\"1\" max=\"100\" />\n                            </label>\n                          </div>\n                          <div>\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Stacking\n                            <p-dropdown\n                              [options]=\"stackingOptions\"\n                              [(ngModel)]=\"barStacking\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                        }\n\n                        <!-- ── HEATMAP ── -->\n                        @case ('heatmap') {\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'field' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">X-axis\n                            <p-dropdown\n                              [options]=\"heatmapAxisOptions\"\n                              [(ngModel)]=\"xAxisField\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div>\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Y-axis\n                            <p-dropdown\n                              [options]=\"heatmapAxisOptions\"\n                              [(ngModel)]=\"yAxisField\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div\n                            class=\"tw-rounded-lg tw-transition-all tw-duration-300\"\n                            [ngClass]=\"firstMissingField() === 'aggregation' ? 'tw-ring-1 tw-ring-blue-400 tw-bg-blue-50 dark:tw-bg-blue-950 tw-p-2 -tw-mx-2' : ''\">\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Value\n                            <p-dropdown\n                              [options]=\"aggregationOptionsByType['heatmap']\"\n                              [(ngModel)]=\"aggregation\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              placeholder=\"Count\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                          <div>\n                            <label class=\"tw-block tw-font-medium tw-mb-1.5\">Time interval\n                            <p-dropdown\n                              [options]=\"timeIntervalOptions\"\n                              [(ngModel)]=\"timeInterval\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                            </label>\n                          </div>\n                        }\n                      }\n\n                    </div>\n                  </p-accordion-content>\n                </p-accordion-panel>\n\n                <!-- 3. Visualization (chart-type-aware) -->\n                <p-accordion-panel value=\"visualization\">\n                  <p-accordion-header>Visualization</p-accordion-header>\n                  <p-accordion-content>\n                    <div class=\"tw-space-y-4 tw-text-sm tw-py-1\">\n                      <label class=\"tw-block tw-font-medium tw-mb-1.5\">Chart type\n                        <p-dropdown\n                          [options]=\"chartTypeOptions\"\n                          [(ngModel)]=\"chartType\"\n                          optionLabel=\"label\"\n                          optionValue=\"value\"\n                          placeholder=\"Donut\"\n                          appendTo=\"body\"\n                          class=\"tw-w-full\" />\n                      </label>\n\n                      @switch (chartType) {\n                        <!-- ── DONUT vis ── -->\n                        @case ('donut') {\n                          <label class=\"tw-flex tw-items-center tw-justify-between\">\n                            <span class=\"tw-font-medium\">Show labels</span>\n                            <p-toggleswitch [(ngModel)]=\"showLabels\" />\n                          </label>\n                          <label class=\"tw-flex tw-items-center tw-justify-between\">\n                            <span class=\"tw-font-medium\">Show legend</span>\n                            <p-toggleswitch [(ngModel)]=\"showLegend\" />\n                          </label>\n                          <label class=\"tw-block\">\n                            <span class=\"tw-flex tw-items-center tw-justify-between tw-mb-1.5\">\n                              <span class=\"tw-font-medium\">Inner radius</span>\n                              <span class=\"tw-text-xs tw-text-surface-500 tw-tabular-nums\">{{ innerRadius }}%</span>\n                            </span>\n                            <p-slider [(ngModel)]=\"innerRadius\" [min]=\"0\" [max]=\"90\" [step]=\"5\" />\n                          </label>\n                        }\n\n                        <!-- ── AREA vis ── -->\n                        @case ('area') {\n                          <label class=\"tw-block tw-font-medium tw-mb-1.5\">Line style\n                            <p-dropdown\n                              [options]=\"lineStyleOptions\"\n                              [(ngModel)]=\"lineStyle\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                          </label>\n                          <label class=\"tw-block\">\n                            <span class=\"tw-flex tw-items-center tw-justify-between tw-mb-1.5\">\n                              <span class=\"tw-font-medium\">Fill opacity</span>\n                              <span class=\"tw-text-xs tw-text-surface-500 tw-tabular-nums\">{{ fillOpacity }}%</span>\n                            </span>\n                            <p-slider [(ngModel)]=\"fillOpacity\" [min]=\"0\" [max]=\"100\" [step]=\"5\" />\n                          </label>\n                          <label class=\"tw-flex tw-items-center tw-justify-between\">\n                            <span class=\"tw-font-medium\">Show data points</span>\n                            <p-toggleswitch [(ngModel)]=\"showPoints\" />\n                          </label>\n                        }\n\n                        <!-- ── BAR vis ── -->\n                        @case ('bar') {\n                          <label class=\"tw-block tw-font-medium tw-mb-1.5\">Orientation\n                            <p-dropdown\n                              [options]=\"barOrientationOptions\"\n                              [(ngModel)]=\"barOrientation\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                          </label>\n                          <label class=\"tw-flex tw-items-center tw-justify-between\">\n                            <span class=\"tw-font-medium\">Show values on bars</span>\n                            <p-toggleswitch [(ngModel)]=\"showBarValues\" />\n                          </label>\n                        }\n\n                        <!-- ── HEATMAP vis ── -->\n                        @case ('heatmap') {\n                          <label class=\"tw-block tw-font-medium tw-mb-1.5\">Color scale\n                            <p-dropdown\n                              [options]=\"colorScaleOptions\"\n                              [(ngModel)]=\"colorScale\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              appendTo=\"body\"\n                              class=\"tw-w-full\" />\n                          </label>\n                          <label class=\"tw-flex tw-items-center tw-justify-between\">\n                            <span class=\"tw-font-medium\">Show labels</span>\n                            <p-toggleswitch [(ngModel)]=\"showLabels\" />\n                          </label>\n                        }\n                      }\n                    </div>\n                  </p-accordion-content>\n                </p-accordion-panel>\n              </p-accordion>\n            </div>\n            <div\n              class=\"tw-mt-auto tw-flex-shrink-0 tw-p-4 tw-border-t tw-border-surface-200 dark:tw-border-surface-800 tw-flex tw-items-center tw-justify-end tw-gap-2\">\n              <button\n                pButton\n                label=\"Reset\"\n                aria-label=\"Reset\"\n                severity=\"secondary\"\n                [text]=\"true\"\n                size=\"small\"\n                (click)=\"onReset()\"></button>\n              <button\n                pButton\n                label=\"Apply changes\"\n                aria-label=\"Apply changes\"\n                size=\"small\"\n                (click)=\"onApply()\"></button>\n            </div>\n          </aside>\n        }\n      </div>\n    </div>\n  `,\n  host: { class: 'tw-h-full' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetConfigViewComponent {\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly destroyRef = inject(DestroyRef);\n  private loadingTimer?: ReturnType<typeof setTimeout>;\n\n  @ViewChild('titleInput') private readonly titleInputEl?: ElementRef<HTMLInputElement>;\n\n  /** Widget to display/edit */\n  readonly widget = input.required<WidgetConfig>();\n  /** Dashboard name shown in the context line (e.g. \"Operational Dashboard\") */\n  readonly dashboardName = input<string>('');\n  /** config = full UI with right-hand panel; drilldown = chart + filters + table only (view-mode) */\n  readonly mode = input<WidgetConfigViewMode>('config');\n  /** Where the modal was opened from — drives the secondary context line */\n  readonly launchContext = input<LaunchContext>('dashboard');\n\n  readonly closeEvent = output<void>();\n  readonly saveEvent = output<WidgetConfigSavePayload>();\n  readonly saveAsNewEvent = output<WidgetConfigSavePayload>();\n\n  readonly timeRange = signal<TimeRangeValue | undefined>(undefined);\n\n  /** Preview state machine */\n  readonly previewState = signal<PreviewState>('incomplete');\n  readonly missingRequirements = signal<string[]>([]);\n  readonly previewError = signal<string>('');\n  readonly previewErrorDetail = signal<string>('');\n  readonly appliedChartType = signal<string>('donut');\n\n  /** Accordion panels to expand by default */\n  readonly openPanels = signal<string[]>(['data', 'aggregation']);\n\n  /** ID of the first config field that needs user attention */\n  readonly firstMissingField = signal<string | null>(null);\n\n  /** Results table panel — collapsed by default, expands when preview is ready */\n  readonly tableExpanded = signal(false);\n\n  /** Bidirectional chart ↔ table highlighting */\n  readonly highlightedRow = signal<string | null>(null);\n  private chartInstance: any = null;\n\n  /** Left panel mode — preview (default) or inline query builder */\n  readonly leftPanelMode = signal<'preview' | 'queryBuilder'>('preview');\n\n  /** Query builder form state */\n  queryBuilderName = '';\n  queryBuilderDescription = '';\n  queryBuilderDateRange = 'past-week';\n  readonly queryBuilderConditions = signal<Array<{ field: string; operator: string; values: string[] }>>([\n    { field: 'status', operator: 'is', values: ['New'] },\n  ]);\n  readonly queryBuilderLogic = signal<'ALL' | 'ANY'>('ALL');\n\n  readonly queryBuilderFieldOptions = [\n    { label: 'login_result', value: 'login_result' },\n    { label: 'status', value: 'status' },\n    { label: 'severity', value: 'severity' },\n    { label: 'src_ip', value: 'src_ip' },\n    { label: 'dst_ip', value: 'dst_ip' },\n    { label: 'event_type', value: 'event_type' },\n    { label: 'user.name', value: 'user.name' },\n    { label: 'hostname', value: 'hostname' },\n    { label: 'protocol', value: 'protocol' },\n  ];\n  readonly queryBuilderOperatorOptions = [\n    { label: 'is', value: 'is' },\n    { label: 'is not', value: 'is_not' },\n    { label: 'contains', value: 'contains' },\n    { label: 'exists', value: 'exists' },\n  ];\n  readonly queryBuilderDateOptions = [\n    { label: 'This past week', value: 'past-week' },\n    { label: 'Last 24 hours', value: 'last-24h' },\n    { label: 'Last 30 days', value: 'last-30d' },\n    { label: 'Custom range', value: 'custom' },\n  ];\n\n  /** Production query builder — Aggregation section */\n  qbTenantPlaceholder = 'qa';\n  qbGroupByField = 'user.name';\n  readonly qbGroupByOptions = [\n    { label: 'user.name', value: 'user.name' },\n    { label: 'src_ip', value: 'src_ip' },\n    { label: 'dst_ip', value: 'dst_ip' },\n    { label: 'hostname', value: 'hostname' },\n    { label: 'event_type', value: 'event_type' },\n  ];\n  qbFunction = 'count';\n  readonly qbFunctionOptions = [\n    { label: 'Count', value: 'count' },\n    { label: 'Sum', value: 'sum' },\n    { label: 'Avg', value: 'avg' },\n    { label: 'Min', value: 'min' },\n    { label: 'Max', value: 'max' },\n  ];\n  qbAliasName = 'Failed-Login-Count';\n\n  /** Production query builder — Sort section */\n  qbSortField = 'Failed-Login-Count';\n  readonly qbSortFieldOptions = [\n    { label: 'Failed-Login-Count', value: 'Failed-Login-Count' },\n    { label: 'user.name', value: 'user.name' },\n  ];\n  qbSortDir = 'desc';\n  readonly qbSortDirOptions = [\n    { label: 'Descending', value: 'desc' },\n    { label: 'Ascending', value: 'asc' },\n  ];\n\n  /** Production query builder — Documents table (empty by default) */\n  readonly qbDocumentRows: Array<{ userName: string; count: number }> = [];\n\n  /** Title editing */\n  readonly isEditingTitle = signal(false);\n  private previousChartName = '';\n\n  chartName = '';\n  chartType = 'donut';\n  tenant = 'all';\n  indices = 'alerts';\n  query = 'none';\n  aggregation = 'term';\n  field: string | null = null;\n  limit = 10;\n\n  /** Area-specific */\n  timeInterval = 'auto';\n  areaStacking = 'none';\n  lineStyle = 'smooth';\n  showPoints = false;\n  fillOpacity = 40;\n\n  /** Bar-specific */\n  barOrientation = 'vertical';\n  barStacking = 'none';\n  showBarValues = false;\n\n  /** Donut-specific */\n  showLabels = true;\n  showLegend = true;\n  innerRadius = 60;\n\n  /** Heatmap-specific */\n  xAxisField = 'timestamp';\n  yAxisField = 'severity';\n  colorScale = 'blue';\n\n  readonly contextLine = computed(() => {\n    const ctx = this.launchContext();\n    const name = this.dashboardName();\n    if (ctx === 'dashboard' && name) return `Dashboards / ${name}`;\n    if (ctx === 'savedCharts') return 'Saved Charts';\n    return '';\n  });\n\n  /** Bumps when document theme attributes change so `optionsForWidget` re-reads CSS tokens. */\n  private readonly displayThemeDigest = signal(0);\n\n  readonly chartOptions = computed(() => {\n    this.displayThemeDigest();\n    return optionsForWidget(this.widget());\n  });\n\n  readonly configFilterCategories: FilterCategory[] = [\n    { id: 'event', label: 'Event', badge: 'Aa', badgeColor: 'tw-bg-emerald-500', icon: 'pi pi-bolt' },\n    { id: 'user', label: 'User', badge: 'Us', badgeColor: 'tw-bg-blue-500', icon: 'pi pi-user' },\n    { id: 'cohorts', label: 'Cohorts', badge: 'Co', badgeColor: 'tw-bg-orange-500', icon: 'pi pi-users' },\n  ];\n  readonly configFilterCategoryValues: Record<string, string[]> = {};\n  readonly configFilterProperties: FilterProperty[] = [\n    { id: 'severity', label: 'Severity', categories: [this.configFilterCategories[0]], valueType: 'checkbox', description: 'Alert severity classification.', availableValues: ['Critical', 'High', 'Medium', 'Low'], recent: true },\n    { id: 'status', label: 'Status', categories: [this.configFilterCategories[0]], valueType: 'checkbox', description: 'Current workflow status.', availableValues: ['New', 'In Progress', 'Resolved', 'Closed'] },\n    { id: 'score', label: 'Score', categories: [this.configFilterCategories[0]], valueType: 'number-range', badge: '#', badgeColor: 'tw-bg-violet-500', description: 'Numeric alert score.', range: { min: 0, max: 100 } },\n    { id: 'created-at', label: 'Created at', categories: [this.configFilterCategories[0]], valueType: 'date-range', description: 'Timestamp when the alert was created.' },\n    { id: 'assignee', label: 'Assignee', categories: [this.configFilterCategories[1]], valueType: 'checkbox', description: 'Assigned analyst.', availableValues: ['Alice Chen', 'Bob Miller', 'Carlos Diaz', 'Diana Kim', 'Unassigned'], recent: true },\n    { id: 'os', label: 'Operating System', categories: [this.configFilterCategories[1]], valueType: 'checkbox', availableValues: ['Windows', 'macOS', 'Linux', 'iOS', 'Android'] },\n  ];\n  private static readonly DEMO_FILTERS: AellaFilterDefinition[] = [\n    {\n      id: 'cf1',\n      field: 'os',\n      label: 'Operating System',\n      filterType: 'checkbox',\n      multiSelect: true,\n      included: ['Windows', 'macOS', 'Linux'],\n      excluded: [],\n      staticOptions: [\n        { label: 'Account Type', value: 'Account Type' },\n        { label: 'Browser', value: 'Browser' },\n        { label: 'City', value: 'City' },\n        { label: 'Country', value: 'Country' },\n        { label: 'Device', value: 'Device' },\n        { label: 'Email Domain', value: 'Email Domain' },\n        { label: 'Operating System', value: 'Operating System' },\n        { label: 'Referring Domain', value: 'Referring Domain' },\n      ],\n    },\n    {\n      id: 'cf2',\n      field: 'event_name',\n      label: 'Event Name',\n      filterType: 'checkbox',\n      multiSelect: true,\n      included: ['Actions Pageview', 'Session Start', 'Click'],\n      excluded: [],\n      staticOptions: [\n        { label: 'Actions Pageview', value: 'Actions Pageview' },\n        { label: 'Session Start', value: 'Session Start' },\n        { label: 'Click', value: 'Click' },\n        { label: 'Form Submit', value: 'Form Submit' },\n        { label: 'Download', value: 'Download' },\n        { label: 'Scroll', value: 'Scroll' },\n        { label: 'Video Play', value: 'Video Play' },\n        { label: 'Search', value: 'Search' },\n        { label: 'Error', value: 'Error' },\n      ],\n    },\n  ];\n  configFilters: AellaFilterDefinition[] = [];\n  readonly chartTypeOptions = [\n    { label: 'Donut', value: 'donut' },\n    { label: 'Area', value: 'area' },\n    { label: 'Bar', value: 'bar' },\n    { label: 'Heatmap', value: 'heatmap' },\n  ];\n  readonly tenantOptions = [{ label: 'All tenants', value: 'all' }];\n  readonly indicesOptions = [\n    { label: 'Alerts', value: 'alerts' },\n    { label: 'Events', value: 'events' },\n    { label: 'Network', value: 'network' },\n  ];\n  queryOptions = [\n    { label: 'None', value: 'none' },\n    { label: 'High-severity alerts', value: 'high-sev' },\n    { label: 'Failed logins (7d)', value: 'failed-logins' },\n  ];\n  readonly fieldOptions = [\n    { label: 'Severity', value: 'severity' },\n    { label: 'Status', value: 'status' },\n    { label: 'Source IP', value: 'src_ip' },\n    { label: 'Destination IP', value: 'dst_ip' },\n    { label: 'Event Type', value: 'event_type' },\n    { label: 'User', value: 'user' },\n  ];\n\n  /** Chart-type-aware aggregation options */\n  readonly aggregationOptionsByType: Record<string, Array<{ label: string; value: string }>> = {\n    donut: [\n      { label: 'Top values', value: 'term' },\n      { label: 'Unique count', value: 'cardinality' },\n      { label: 'Total count', value: 'count' },\n    ],\n    area: [\n      { label: 'Trend over time', value: 'date_histogram' },\n      { label: 'Running average', value: 'moving_avg' },\n    ],\n    bar: [\n      { label: 'Top values', value: 'term' },\n      { label: 'Total count', value: 'count' },\n      { label: 'Sum', value: 'sum' },\n    ],\n    heatmap: [\n      { label: 'Count', value: 'count' },\n      { label: 'Sum', value: 'sum' },\n      { label: 'Average', value: 'avg' },\n    ],\n  };\n\n  readonly timeIntervalOptions = [\n    { label: 'Auto', value: 'auto' },\n    { label: '1 minute', value: '1m' },\n    { label: '5 minutes', value: '5m' },\n    { label: '15 minutes', value: '15m' },\n    { label: '1 hour', value: '1h' },\n    { label: '1 day', value: '1d' },\n  ];\n  readonly stackingOptions = [\n    { label: 'None', value: 'none' },\n    { label: 'Stacked', value: 'stacked' },\n    { label: 'Percentage', value: 'percent' },\n  ];\n  readonly lineStyleOptions = [\n    { label: 'Smooth', value: 'smooth' },\n    { label: 'Linear', value: 'linear' },\n    { label: 'Step', value: 'step' },\n  ];\n  readonly barOrientationOptions = [\n    { label: 'Vertical', value: 'vertical' },\n    { label: 'Horizontal', value: 'horizontal' },\n  ];\n  readonly colorScaleOptions = [\n    { label: 'Blue ramp', value: 'blue' },\n    { label: 'Green ramp', value: 'green' },\n    { label: 'Severity (red→amber)', value: 'severity' },\n  ];\n  readonly heatmapAxisOptions = [\n    { label: 'Timestamp', value: 'timestamp' },\n    { label: 'Severity', value: 'severity' },\n    { label: 'Status', value: 'status' },\n    { label: 'Source IP', value: 'src_ip' },\n    { label: 'Destination IP', value: 'dst_ip' },\n    { label: 'Event Type', value: 'event_type' },\n    { label: 'User', value: 'user' },\n    { label: 'Hostname', value: 'hostname' },\n  ];\n\n  readonly tableData = computed(() => {\n    const w = this.widget();\n    const source = w.dataConfig?.dataSource;\n    const kind = w.kind;\n\n    if (kind === 'area') {\n      if (source === 'alertChangesOverTime') {\n        return MULTI_SERIES_TREND.xLabels.map((label, i) => ({\n          col1: label,\n          col2: MULTI_SERIES_TREND.series.reduce((sum, s) => sum + s.data[i], 0).toLocaleString(),\n          col3: '',\n        }));\n      }\n      const data = SAMPLE_DATA[source ?? 'trend'] ?? SAMPLE_DATA['trend'];\n      return data.map(d => ({ col1: d.name, col2: d.value.toLocaleString(), col3: '' }));\n    }\n\n    if (kind === 'bar') {\n      const data = SAMPLE_DATA[source ?? 'alertsByAssignee'] ?? SAMPLE_DATA['alertsByAssignee'];\n      const total = data.reduce((s, d) => s + d.value, 0);\n      return data.map(d => ({\n        col1: d.name,\n        col2: d.value.toLocaleString(),\n        col3: `${((d.value / total) * 100).toFixed(1)}%`,\n      }));\n    }\n\n    if (kind === 'heatmap') {\n      return HEATMAP_DATA.data.map(([x, y, v]) => ({\n        col1: HEATMAP_DATA.servers[y],\n        col2: HEATMAP_DATA.hours[x],\n        col3: String(v),\n      }));\n    }\n\n    // Donut and default\n    const data = SAMPLE_DATA[source ?? 'alertsBySource'] ?? SAMPLE_DATA['alertsBySource'];\n    const total = data.reduce((s, d) => s + d.value, 0);\n    return data.map(d => ({\n      col1: d.name,\n      col2: d.value.toLocaleString(),\n      col3: `${((d.value / total) * 100).toFixed(1)}%`,\n    }));\n  });\n\n  readonly tableColumns = computed(() => {\n    const kind = this.widget().kind;\n    if (kind === 'area') return { col1: 'Time', col2: 'Value', col3: '' };\n    if (kind === 'bar') return { col1: 'Name', col2: 'Count', col3: '% Total' };\n    if (kind === 'heatmap') return { col1: 'Server', col2: 'Time', col3: 'Alerts' };\n    return { col1: 'Name', col2: 'Count', col3: '% Total' };\n  });\n\n  constructor() {\n    effect(() => {\n      const w = this.widget();\n      this.chartName = w.title;\n      this.chartType = w.kind;\n      this.appliedChartType.set(w.kind);\n\n      if (w.isConfigured) {\n        this.previewState.set('ready');\n        this.missingRequirements.set([]);\n        this.firstMissingField.set(null);\n        this.configFilters = WidgetConfigViewComponent.DEMO_FILTERS;\n        this.openPanels.set(['data']);\n        this.tableExpanded.set(true);\n      } else {\n        this.field = null;\n        this.previewState.set('incomplete');\n        this.missingRequirements.set(this.computeMissingRequirements());\n        this.configFilters = [];\n        this.openPanels.set(['data', 'aggregation']);\n        this.tableExpanded.set(false);\n      }\n\n      if (!w.title) {\n        setTimeout(() => this.startEditTitle());\n      }\n    });\n\n    this.destroyRef.onDestroy(() => {\n      if (this.loadingTimer) clearTimeout(this.loadingTimer);\n    });\n\n    afterNextRender(() => {\n      if (typeof MutationObserver === 'undefined') return;\n      const root = document.documentElement;\n      const obs = new MutationObserver(() => this.displayThemeDigest.update(v => v + 1));\n      obs.observe(root, { attributes: true, attributeFilter: ['class', 'data-display-theme'] });\n      this.destroyRef.onDestroy(() => obs.disconnect());\n    });\n  }\n\n  protected startEditTitle(): void {\n    this.previousChartName = this.chartName;\n    this.isEditingTitle.set(true);\n    this.cdr.markForCheck();\n    setTimeout(() => {\n      this.titleInputEl?.nativeElement.focus();\n      this.titleInputEl?.nativeElement.select();\n    });\n  }\n\n  protected commitTitle(): void {\n    if (!this.chartName.trim()) {\n      this.chartName = this.previousChartName || 'Untitled chart';\n    }\n    this.isEditingTitle.set(false);\n  }\n\n  protected revertTitle(): void {\n    this.chartName = this.previousChartName;\n    this.isEditingTitle.set(false);\n  }\n\n  protected onTitleBlur(): void {\n    if (this.isEditingTitle()) {\n      this.commitTitle();\n    }\n  }\n\n  /**\n   * Compute missing requirements based on current config panel values.\n   * Also sets `firstMissingField` to the ID of the first field needing attention.\n   * Extend this method when adding new aggregation types that need specific fields.\n   */\n  private computeMissingRequirements(): string[] {\n    const missing: string[] = [];\n    let firstField: string | null = null;\n    const type = this.chartType;\n\n    if (!this.indices) {\n      missing.push('Select an index');\n      firstField ??= 'indices';\n    }\n\n    if (type === 'heatmap') {\n      if (!this.xAxisField) {\n        missing.push('Select an X-axis field');\n        firstField ??= 'field';\n      }\n      if (!this.yAxisField) {\n        missing.push('Select a Y-axis field');\n        firstField ??= 'field';\n      }\n      if (!this.aggregation) {\n        missing.push('Select a value aggregation');\n        firstField ??= 'aggregation';\n      }\n    } else {\n      if (!this.aggregation) {\n        missing.push('Select an aggregation type');\n        firstField ??= 'aggregation';\n      }\n      if (FIELD_REQUIRED_AGGREGATIONS.has(this.aggregation) && !this.field) {\n        missing.push('Select a field for the aggregation');\n        firstField ??= 'field';\n      }\n    }\n\n    this.firstMissingField.set(firstField);\n    return missing;\n  }\n\n  protected onClose(): void {\n    this.closeEvent.emit();\n  }\n\n  protected onSave(): void {\n    this.saveEvent.emit({\n      widget: {\n        ...this.widget(),\n        title: this.chartName || this.widget().title,\n      },\n    });\n  }\n\n  protected onSaveAsNew(): void {\n    this.saveAsNewEvent.emit({\n      widget: {\n        ...this.widget(),\n        id: `w${Date.now()}`,\n        title: this.chartName || `${this.widget().title} (copy)`,\n      },\n    });\n  }\n\n  protected onReset(): void {\n    if (this.loadingTimer) clearTimeout(this.loadingTimer);\n    const w = this.widget();\n    this.chartName = w.title;\n    this.chartType = w.kind;\n    this.appliedChartType.set(w.kind);\n    this.previewError.set('');\n    this.previewErrorDetail.set('');\n\n    if (w.isConfigured) {\n      this.previewState.set('ready');\n      this.missingRequirements.set([]);\n      this.firstMissingField.set(null);\n    } else {\n      this.field = null;\n      this.previewState.set('incomplete');\n      this.missingRequirements.set(this.computeMissingRequirements());\n    }\n  }\n\n  protected onApply(): void {\n    const missing = this.computeMissingRequirements();\n    if (missing.length > 0) {\n      this.missingRequirements.set(missing);\n      this.previewState.set('incomplete');\n      return;\n    }\n\n    if (this.loadingTimer) clearTimeout(this.loadingTimer);\n    this.previewState.set('loading');\n    this.chartName = this.chartName || this.widget().title;\n\n    this.loadingTimer = setTimeout(() => {\n      this.appliedChartType.set(this.chartType);\n      this.previewState.set('ready');\n      this.tableExpanded.set(true);\n      this.cdr.markForCheck();\n    }, 1200);\n  }\n\n  protected onTimeRangeChange(value: TimeRangeValue): void {\n    this.timeRange.set(value);\n  }\n\n  protected onClearFilters(): void {\n    this.configFilters = [];\n  }\n\n  // ── Bidirectional chart ↔ table highlighting ─────────────────────────\n\n  protected onChartReady(chart: any): void {\n    this.chartInstance = chart;\n\n    chart.on('mouseover', (params: any) => {\n      const name = params.name ?? params.data?.name;\n      if (name != null) {\n        this.highlightedRow.set(String(name));\n        this.cdr.markForCheck();\n      }\n    });\n\n    chart.on('mouseout', () => {\n      this.highlightedRow.set(null);\n      this.cdr.markForCheck();\n    });\n  }\n\n  protected onRowHover(name: string): void {\n    this.highlightedRow.set(name);\n    this.chartInstance?.dispatchAction({ type: 'highlight', name });\n  }\n\n  protected onRowLeave(): void {\n    if (this.highlightedRow()) {\n      this.chartInstance?.dispatchAction({ type: 'downplay', name: this.highlightedRow() });\n    }\n    this.highlightedRow.set(null);\n  }\n\n  /** Query builder preview — generates a pseudo-KQL string from conditions */\n  readonly generatedQueryPreview = computed(() => {\n    const conditions = this.queryBuilderConditions();\n    if (!conditions.length) return '*';\n    const logic = this.queryBuilderLogic();\n    const parts = conditions\n      .filter(c => c.field && c.values.length)\n      .map(c => {\n        const vals = c.values.join(', ');\n        if (c.operator === 'is') return `${c.field} = \"${vals}\"`;\n        if (c.operator === 'is_not') return `${c.field} != \"${vals}\"`;\n        if (c.operator === 'contains') return `${c.field} LIKE \"*${vals}*\"`;\n        return `${c.field} EXISTS`;\n      });\n    return parts.join(logic === 'ALL' ? ' AND ' : ' OR ') || '*';\n  });\n\n  protected onNewQuery(): void {\n    this.queryBuilderName = '';\n    this.queryBuilderDescription = '';\n    this.queryBuilderDateRange = 'past-week';\n    this.queryBuilderConditions.set([{ field: 'login_result', operator: 'is', values: ['fail'] }]);\n    this.queryBuilderLogic.set('ALL');\n    this.qbGroupByField = 'user.name';\n    this.qbFunction = 'count';\n    this.qbAliasName = 'Failed-Login-Count';\n    this.qbSortField = 'Failed-Login-Count';\n    this.qbSortDir = 'desc';\n    this.leftPanelMode.set('queryBuilder');\n  }\n\n  protected onCancelQueryBuilder(): void {\n    this.leftPanelMode.set('preview');\n  }\n\n  protected onSaveQuery(): void {\n    const name = this.queryBuilderName.trim();\n    if (!name) return;\n    const value = name.toLowerCase().replace(/\\s+/g, '_');\n    this.queryOptions = [...this.queryOptions, { label: name, value }];\n    this.query = value;\n    this.leftPanelMode.set('preview');\n  }\n\n  protected toggleQueryLogic(): void {\n    this.queryBuilderLogic.set(this.queryBuilderLogic() === 'ALL' ? 'ANY' : 'ALL');\n  }\n\n  protected addQueryCondition(): void {\n    this.queryBuilderConditions.set([\n      ...this.queryBuilderConditions(),\n      { field: '', operator: 'is', values: [] },\n    ]);\n  }\n\n  protected removeQueryCondition(index: number): void {\n    this.queryBuilderConditions.set(\n      this.queryBuilderConditions().filter((_, i) => i !== index),\n    );\n  }\n\n  protected onConditionValueChange(index: number, value: string): void {\n    const updated = [...this.queryBuilderConditions()];\n    updated[index] = { ...updated[index], values: value.split(',').map(v => v.trim()).filter(Boolean) };\n    this.queryBuilderConditions.set(updated);\n  }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport type { WidgetConfig } from '../../dashboard-builder/models';\nimport type { LaunchContext, WidgetConfigViewMode } from './widget-config-view.component';\nimport { WidgetConfigViewComponent } from './widget-config-view.component';\n\nexport interface WidgetConfigModalData {\n  widget: WidgetConfig;\n  dashboardName?: string;\n  /** config = full UI with right-hand panel; drilldown = chart + filters + table only (view-mode) */\n  mode?: WidgetConfigViewMode;\n  launchContext?: LaunchContext;\n}\n\nexport interface WidgetConfigModalResult {\n  action: 'save' | 'saveAsNew' | 'close';\n  widget?: WidgetConfig;\n}\n\n/**\n * Thin wrapper that opens WidgetConfigViewComponent inside PrimeNG DynamicDialog.\n * Use this when opening from the dashboard builder. For standalone refinement, use\n * the sandbox route and WidgetConfigViewComponent directly.\n */\n@Component({\n  selector: 'ui-widget-config-modal',\n  standalone: true,\n  imports: [WidgetConfigViewComponent],\n  template: `\n    <ui-widget-config-view\n      [widget]=\"widget()\"\n      [dashboardName]=\"dashboardName()\"\n      [mode]=\"mode()\"\n      [launchContext]=\"launchCtx()\"\n      (closeEvent)=\"onClose()\"\n      (saveEvent)=\"onSave($event)\"\n      (saveAsNewEvent)=\"onSaveAsNew($event)\">\n    </ui-widget-config-view>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetConfigModalComponent {\n  private readonly ref = inject(DynamicDialogRef<WidgetConfigModalResult>);\n  private readonly config = inject(DynamicDialogConfig<WidgetConfigModalData>);\n\n  private readonly data = this.config.data;\n  readonly widget = signal<WidgetConfig>(\n    this.data?.widget ?? {\n      id: '',\n      title: 'Widget',\n      kind: 'donut',\n      layout: { x: 0, y: 0, w: 4, h: 5, minW: 4, minH: 5, maxW: 8, maxH: 8 },\n    }\n  );\n  readonly dashboardName = computed(() => this.data?.dashboardName ?? '');\n  readonly mode = computed<WidgetConfigViewMode>(() => this.data?.mode ?? 'config');\n  readonly launchCtx = computed<LaunchContext>(() => this.data?.launchContext ?? 'dashboard');\n\n  onClose(): void {\n    this.ref.close({ action: 'close' });\n  }\n\n  onSave(payload: { widget: WidgetConfig }): void {\n    this.ref.close({ action: 'save', widget: payload.widget });\n  }\n\n  onSaveAsNew(payload: { widget: WidgetConfig }): void {\n    this.ref.close({ action: 'saveAsNew', widget: payload.widget });\n  }\n}\n","import { Component, Input, ChangeDetectionStrategy, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type TrendDirection = 'up' | 'down' | 'neutral';\n\n/**\n * Counter widget - displays a large KPI value with optional trend indicator\n * Designed for dashboard metrics like \"Total Alerts\", \"Open Cases\", etc.\n */\n@Component({\n  selector: 'ui-widget-counter',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div class=\"tw-h-full tw-flex tw-flex-col tw-items-end tw-justify-center tw-gap-2 tw-pt-0 tw-pb-3 tw-pr-4\">\n\n      <!-- Label First (like Ledger) -->\n      <div class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400 tw-font-medium tw-tracking-wide tw-uppercase\">\n        {{ label }}\n      </div>\n\n      <!-- Large Counter Value with Unit -->\n      <div class=\"tw-flex tw-items-baseline tw-gap-1.5 tw-leading-none\">\n        <span class=\"tw-text-3xl tw-leading-none tw-font-normal tw-text-surface-900 dark:tw-text-surface-0 tw-tabular-nums tw-tracking-tight\">\n          {{ formattedValue() }}\n        </span>\n        <span\n          *ngIf=\"unit\"\n          class=\"tw-text-sm tw-font-medium tw-text-surface-600 dark:tw-text-surface-400\">\n          {{ unit }}\n        </span>\n      </div>\n\n      <!-- Trend & Context Row -->\n      <div class=\"tw-flex tw-items-center tw-gap-3 tw-flex-wrap\">\n        <!-- Trend Indicator (Subtle Badge) -->\n        <div\n          *ngIf=\"trend\"\n          class=\"tw-inline-flex tw-items-center tw-gap-1.5 tw-px-2.5 tw-py-1 tw-rounded-md tw-text-xs tw-font-semibold\"\n          [ngClass]=\"{\n            'tw-bg-emerald-500/10 tw-text-emerald-600 dark:tw-bg-emerald-500/20 dark:tw-text-emerald-400': trendDirection === 'up',\n            'tw-bg-red-500/10 tw-text-red-600 dark:tw-bg-red-500/20 dark:tw-text-red-400': trendDirection === 'down',\n            'tw-bg-surface-200 tw-text-surface-600 dark:tw-bg-surface-800 dark:tw-text-surface-400': trendDirection === 'neutral'\n          }\">\n          <i\n            *ngIf=\"trendDirection !== 'neutral'\"\n            [class]=\"'pi tw-text-[10px] ' + (trendDirection === 'up' ? 'pi-arrow-up' : 'pi-arrow-down')\">\n          </i>\n          <span>{{ trend }}</span>\n        </div>\n\n        <!-- Additional Context -->\n        <div\n          *ngIf=\"context\"\n          class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-500 tw-font-medium\">\n          {{ context }}\n        </div>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetCounterComponent {\n  @Input({ required: true }) value!: number;\n  @Input({ required: true }) label!: string;\n  @Input() unit?: string; // e.g., '%', 'alerts', 'TB'\n  @Input() trend?: string; // e.g., '+12%', '-5', '↑ 23'\n  @Input() trendDirection: TrendDirection = 'neutral';\n  @Input() context?: string; // e.g., 'vs. last week', 'Last updated 5m ago'\n  @Input() format: 'number' | 'abbreviated' | 'percentage' = 'abbreviated';\n\n  /**\n   * Formats the counter value based on the specified format\n   */\n  protected readonly formattedValue = computed(() => {\n    const val = this.value;\n\n    if (this.format === 'percentage') {\n      return `${val.toFixed(1)}%`;\n    }\n\n    if (this.format === 'abbreviated') {\n      if (val >= 1_000_000_000) {\n        return `${(val / 1_000_000_000).toFixed(1)}B`;\n      }\n      if (val >= 1_000_000) {\n        return `${(val / 1_000_000).toFixed(1)}M`;\n      }\n      if (val >= 1_000) {\n        return `${(val / 1_000).toFixed(1)}k`;\n      }\n    }\n\n    return val.toLocaleString();\n  });\n}\n","// ─── Chart Style Config (aligned with v1 chart-options.ts) ─────────────────────\n\n/**\n * Brand-aligned style configuration.\n * Exported so consumers can reference the same palette when building options externally.\n */\nexport const WIDGET_CHART_V2_STYLES = {\n  colors: {\n    primary: '#3b82f6',\n    /** Default data palette — monotone blue ramp (dark → light) */\n    data: [\n      '#1d4ed8', // blue-700\n      '#2563eb', // blue-600\n      '#3b82f6', // blue-500 (primary)\n      '#4e92f7', // blue-450\n      '#60a5fa', // blue-400\n      '#79b5fc', // blue-350\n      '#93c5fd', // blue-300\n      '#a9d3fe', // blue-250\n      '#bfdbfe', // blue-200\n      '#dbeafe'  // blue-100\n    ],\n    /** Severity palette — ONLY for alert/threat data */\n    severity: {\n      critical: '#ef4444',\n      high: '#f97316',\n      medium: '#f59e0b',\n      low: '#3b82f6',\n      info: '#94a3b8'\n    } as Record<string, string>,\n    /** Heatmap gradient (low → high intensity) */\n    heatmapRamp: ['#dbeafe', '#93c5fd', '#60a5fa', '#3b82f6', '#1d4ed8']\n  },\n  typography: {\n    fontSize: { title: 32, subtitle: 13, label: 13, axis: 11, tooltip: 12 },\n    fontWeight: { title: 400, subtitle: 400, label: 400, axis: 400, tooltip: 400 }\n  },\n  animation: {\n    duration: 300,\n    easing: 'cubicOut' as const\n  },\n\n  // ─── Chart-type specific defaults ───────────────────────────────────────────\n\n  /** Donut / pie chart styling */\n  donut: {\n    outerRadius: 86,\n    ringThicknessPx: 12,\n    padAngle: 0.5,\n    borderRadius: 1,\n    borderWidth: 0,\n    centerPosition: {\n      right:  ['25.6%', '48%'] as readonly [string, string],\n      center: ['50%', '44%']   as readonly [string, string],\n    },\n    legendPosition: '57%',\n    legendItemGap: 12,\n    legendIconTextGap: 8,\n    emphasis: { scaleSize: 8, shadowBlur: 10 }\n  },\n\n  /** Line / area chart styling */\n  line: {\n    lineWidth: 2.5,\n    symbolSize: 6,\n    areaOpacity: { start: 0.35, end: 0.05 }\n  },\n\n  /** Bar chart styling */\n  bar: {\n    barWidth: '40%',\n    borderRadius: 2\n  },\n\n  /** Tooltip defaults per theme */\n  tooltip: {\n    light: {\n      backgroundColor: '#ffffff',\n      borderColor: '#d4d4d8',  // surface-300\n      textColor: '#0f172a'     // slate-900\n    },\n    dark: {\n      backgroundColor: '#1c1917',\n      borderColor: '#57534e',  // surface-600\n      textColor: '#fafaf9'     // stone-50\n    },\n    borderWidth: 1,\n    padding: [8, 12] as readonly [number, number],\n    fontSize: 10.5\n  },\n\n  /** Theme-aware text palette (fallbacks when CSS vars unavailable) */\n  textColors: {\n    light: {\n      text: '#1e293b',      // slate-800\n      sub: '#475569',       // slate-600\n      tertiary: '#64748b',  // slate-500\n      quartiary: '#94a3b8', // slate-400\n      label: '#64748b',     // slate-500 — axis labels\n      barLabel: '#94a3b8',  // slate-400\n      axis: '#cbd5e1',      // slate-300 — axis lines\n      split: '#f1f5f9'      // slate-100 — grid lines\n    },\n    dark: {\n      text: '#e2e8f0',      // slate-200\n      sub: '#cbd5e1',       // slate-300\n      tertiary: '#94a3b8',  // slate-400\n      quartiary: '#64748b', // slate-500\n      label: '#94a3b8',     // slate-400 — axis labels\n      barLabel: '#cbd5e1',  // slate-300\n      axis: '#475569',      // slate-600 — axis lines\n      split: '#334155'      // slate-700 — grid lines\n    }\n  }\n} as const;\n\n// ─── Adaptive Blue Ramp ─────────────────────────────────────────────────────────\n\nconst RAMP_START = { r: 29, g: 78, b: 216 };  // #1d4ed8  blue-700\nconst RAMP_END   = { r: 191, g: 219, b: 254 }; // #bfdbfe  blue-200\n\nfunction lerpChannel(a: number, b: number, t: number): number {\n  return Math.round(a + (b - a) * t);\n}\n\nfunction toHex(r: number, g: number, b: number): string {\n  return '#' + [r, g, b].map(c => c.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate a blue ramp of exactly `n` colors evenly spaced between\n * blue-700 and blue-100. Never repeats; each value gets a unique shade.\n *\n * - n <= 10: returns the hand-tuned palette from WIDGET_CHART_V2_STYLES.colors.data\n * - n > 10:  interpolates `n` evenly-spaced stops between the ramp endpoints\n */\nexport function generateBlueRamp(n: number): string[] {\n  if (n <= 0) return [];\n  const base = WIDGET_CHART_V2_STYLES.colors.data;\n  if (n <= base.length) return base.slice(0, n);\n\n  const colors: string[] = [];\n  for (let i = 0; i < n; i++) {\n    const t = n === 1 ? 0 : i / (n - 1);\n    colors.push(toHex(\n      lerpChannel(RAMP_START.r, RAMP_END.r, t),\n      lerpChannel(RAMP_START.g, RAMP_END.g, t),\n      lerpChannel(RAMP_START.b, RAMP_END.b, t),\n    ));\n  }\n  return colors;\n}\n\n// ─── Predefined Color Override Presets ──────────────────────────────────────────\n//\n// Use these as `ChartConfig.colorOverrides` when a chart needs semantic colors.\n// Default charts should NOT set colorOverrides — the ECharts theme handles them.\n// Only charts displaying severity, risk, status, or fidelity data need these.\n\n/**\n * Alert severity color overrides.\n * Use for charts grouping data by alert severity (Critical, Major, Minor, Notice).\n */\nexport const SEVERITY_COLOR_OVERRIDES: Record<string, string> = {\n  Critical: '#ef4444',\n  critical: '#ef4444',\n  Major: '#f97316',\n  major: '#f97316',\n  High: '#f97316',\n  high: '#f97316',\n  Medium: '#f59e0b',\n  medium: '#f59e0b',\n  Minor: '#f59e0b',\n  minor: '#f59e0b',\n  Low: '#3b82f6',\n  low: '#3b82f6',\n  Notice: '#94a3b8',\n  notice: '#94a3b8',\n  Info: '#94a3b8',\n  info: '#94a3b8'\n};\n\n/**\n * Fidelity level color overrides.\n * Use for charts grouping data by detection fidelity.\n */\nexport const FIDELITY_COLOR_OVERRIDES: Record<string, string> = {\n  'High Fidelity': '#ef4444',\n  'high fidelity': '#ef4444',\n  'Other Fidelity': '#3b82f6',\n  'other fidelity': '#3b82f6'\n};\n\n/**\n * Risk level color overrides.\n * Use for charts grouping data by risk score buckets.\n */\nexport const RISK_COLOR_OVERRIDES: Record<string, string> = {\n  Critical: '#ef4444',\n  critical: '#ef4444',\n  High: '#f97316',\n  high: '#f97316',\n  Medium: '#f59e0b',\n  medium: '#f59e0b',\n  Low: '#3b82f6',\n  low: '#3b82f6'\n};\n\n/**\n * Status indicator color overrides.\n * Use for charts showing health/connection status.\n */\nexport const STATUS_COLOR_OVERRIDES: Record<string, string> = {\n  Healthy: '#22c55e',\n  healthy: '#22c55e',\n  'Needs Attention': '#f59e0b',\n  'needs attention': '#f59e0b',\n  Disconnected: '#ef4444',\n  disconnected: '#ef4444',\n  Authorized: '#22c55e',\n  authorized: '#22c55e',\n  Unauthorized: '#ef4444',\n  unauthorized: '#ef4444'\n};\n","import * as echarts from 'echarts';\nimport { WIDGET_CHART_V2_STYLES } from './chart-styles';\n\n// ─── Shared Constants ─────────────────────────────────────────────────────────\n\nconst { colors, typography, animation } = WIDGET_CHART_V2_STYLES;\n\nconst FONT_FAMILY = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif';\n\n// ─── Stellar Light Theme ──────────────────────────────────────────────────────\n\nconst stellarLight: Record<string, unknown> = {\n  color: [...colors.data],\n\n  backgroundColor: 'transparent',\n\n  title: {\n    textStyle: {\n      fontSize: typography.fontSize.title,\n      fontWeight: typography.fontWeight.title,\n      fontFamily: FONT_FAMILY,\n      color: '#1e293b' // slate-800\n    },\n    subtextStyle: {\n      fontSize: typography.fontSize.subtitle,\n      fontWeight: typography.fontWeight.subtitle,\n      fontFamily: FONT_FAMILY,\n      color: '#64748b' // slate-500\n    }\n  },\n\n  legend: {\n    textStyle: {\n      fontSize: typography.fontSize.label,\n      fontFamily: FONT_FAMILY,\n      color: '#475569' // slate-600\n    }\n  },\n\n  tooltip: {\n    backgroundColor: '#ffffff',\n    borderColor: '#e2e8f0', // slate-200\n    borderWidth: 1,\n    textStyle: {\n      fontSize: typography.fontSize.tooltip,\n      fontFamily: FONT_FAMILY,\n      color: '#1e293b' // slate-800\n    },\n    extraCssText: 'box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1); border-radius: 6px;'\n  },\n\n  xAxis: {\n    axisLine: { lineStyle: { color: '#cbd5e1' } },      // slate-300\n    axisTick: { lineStyle: { color: '#cbd5e1' } },\n    axisLabel: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#64748b' // slate-500\n    },\n    splitLine: { lineStyle: { color: '#f1f5f9', type: 'dashed' } }, // slate-100\n    nameTextStyle: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#64748b'\n    }\n  },\n\n  yAxis: {\n    axisLine: { lineStyle: { color: '#cbd5e1' } },\n    axisTick: { lineStyle: { color: '#cbd5e1' } },\n    axisLabel: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#64748b'\n    },\n    splitLine: { lineStyle: { color: '#f1f5f9', type: 'dashed' } },\n    nameTextStyle: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#64748b'\n    }\n  },\n\n  categoryAxis: {\n    axisLine: { lineStyle: { color: '#cbd5e1' } },\n    axisTick: { lineStyle: { color: '#cbd5e1' } },\n    axisLabel: { color: '#64748b' },\n    splitLine: { lineStyle: { color: '#f1f5f9', type: 'dashed' } }\n  },\n\n  valueAxis: {\n    axisLine: { lineStyle: { color: '#cbd5e1' } },\n    axisTick: { lineStyle: { color: '#cbd5e1' } },\n    axisLabel: { color: '#64748b' },\n    splitLine: { lineStyle: { color: '#f1f5f9', type: 'dashed' } }\n  },\n\n  line: {\n    smooth: false,\n    symbol: 'circle',\n    symbolSize: 4,\n    lineStyle: { width: 2 }\n  },\n\n  bar: {\n    barMaxWidth: 40,\n    itemStyle: { borderRadius: [2, 2, 0, 0] }\n  },\n\n  pie: {\n    itemStyle: { borderColor: '#ffffff', borderWidth: 2 }\n  },\n\n  radar: {\n    axisLine: { lineStyle: { color: '#e2e8f0' } },\n    splitLine: { lineStyle: { color: '#e2e8f0' } },\n    splitArea: { areaStyle: { color: ['#ffffff', '#f8fafc'] } }\n  },\n\n  gauge: {\n    axisLine: { lineStyle: { color: [[0.2, colors.severity['info']], [0.5, colors.data[4]], [0.8, colors.severity['medium']], [1, colors.severity['critical']]] } }\n  },\n\n  visualMap: {\n    color: [...colors.heatmapRamp].reverse()\n  },\n\n  dataZoom: {\n    backgroundColor: '#f8fafc',\n    fillerColor: 'rgba(59, 130, 246, 0.1)',\n    handleColor: colors.primary,\n    handleSize: '100%',\n    textStyle: { color: '#64748b' },\n    borderColor: '#e2e8f0'\n  },\n\n  animationDuration: animation.duration,\n  animationEasing: animation.easing\n};\n\n// ─── Stellar Dark Theme ───────────────────────────────────────────────────────\n\nconst stellarDark: Record<string, unknown> = {\n  color: [...colors.data],\n\n  backgroundColor: 'transparent',\n\n  title: {\n    textStyle: {\n      fontSize: typography.fontSize.title,\n      fontWeight: typography.fontWeight.title,\n      fontFamily: FONT_FAMILY,\n      color: '#f1f5f9' // slate-100\n    },\n    subtextStyle: {\n      fontSize: typography.fontSize.subtitle,\n      fontWeight: typography.fontWeight.subtitle,\n      fontFamily: FONT_FAMILY,\n      color: '#94a3b8' // slate-400\n    }\n  },\n\n  legend: {\n    textStyle: {\n      fontSize: typography.fontSize.label,\n      fontFamily: FONT_FAMILY,\n      color: '#cbd5e1' // slate-300\n    }\n  },\n\n  tooltip: {\n    backgroundColor: '#1e293b', // slate-800\n    borderColor: '#334155',     // slate-700\n    borderWidth: 1,\n    textStyle: {\n      fontSize: typography.fontSize.tooltip,\n      fontFamily: FONT_FAMILY,\n      color: '#f1f5f9'\n    },\n    extraCssText: 'box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.3); border-radius: 6px;'\n  },\n\n  xAxis: {\n    axisLine: { lineStyle: { color: '#475569' } },      // slate-600\n    axisTick: { lineStyle: { color: '#475569' } },\n    axisLabel: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#94a3b8' // slate-400\n    },\n    splitLine: { lineStyle: { color: '#334155', type: 'dashed' } }, // slate-700\n    nameTextStyle: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#94a3b8'\n    }\n  },\n\n  yAxis: {\n    axisLine: { lineStyle: { color: '#475569' } },\n    axisTick: { lineStyle: { color: '#475569' } },\n    axisLabel: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#94a3b8'\n    },\n    splitLine: { lineStyle: { color: '#334155', type: 'dashed' } },\n    nameTextStyle: {\n      fontSize: typography.fontSize.axis,\n      fontFamily: FONT_FAMILY,\n      color: '#94a3b8'\n    }\n  },\n\n  categoryAxis: {\n    axisLine: { lineStyle: { color: '#475569' } },\n    axisTick: { lineStyle: { color: '#475569' } },\n    axisLabel: { color: '#94a3b8' },\n    splitLine: { lineStyle: { color: '#334155', type: 'dashed' } }\n  },\n\n  valueAxis: {\n    axisLine: { lineStyle: { color: '#475569' } },\n    axisTick: { lineStyle: { color: '#475569' } },\n    axisLabel: { color: '#94a3b8' },\n    splitLine: { lineStyle: { color: '#334155', type: 'dashed' } }\n  },\n\n  line: {\n    smooth: false,\n    symbol: 'circle',\n    symbolSize: 4,\n    lineStyle: { width: 2 }\n  },\n\n  bar: {\n    barMaxWidth: 40,\n    itemStyle: { borderRadius: [2, 2, 0, 0] }\n  },\n\n  pie: {\n    itemStyle: { borderColor: '#0f172a', borderWidth: 2 } // slate-900\n  },\n\n  radar: {\n    axisLine: { lineStyle: { color: '#475569' } },\n    splitLine: { lineStyle: { color: '#475569' } },\n    splitArea: { areaStyle: { color: ['#1e293b', '#0f172a'] } }\n  },\n\n  gauge: {\n    axisLine: { lineStyle: { color: [[0.2, colors.severity['info']], [0.5, colors.data[4]], [0.8, colors.severity['medium']], [1, colors.severity['critical']]] } }\n  },\n\n  visualMap: {\n    color: [...colors.heatmapRamp].reverse()\n  },\n\n  dataZoom: {\n    backgroundColor: '#1e293b',\n    fillerColor: 'rgba(59, 130, 246, 0.2)',\n    handleColor: colors.primary,\n    handleSize: '100%',\n    textStyle: { color: '#94a3b8' },\n    borderColor: '#475569'\n  },\n\n  animationDuration: animation.duration,\n  animationEasing: animation.easing\n};\n\n// ─── Palette Color Arrays ────────────────────────────────────────────────────\n//\n// Non-Stellar palettes reuse the Stellar base theme (axis, tooltip, legend styling)\n// but swap in a different data color array. Defined inline to avoid cross-package deps.\n\nconst PALETTE_COLORS: Record<string, readonly string[]> = {\n  spectrum: ['#8b5cf6', '#d946ef', '#f43f5e', '#f97316', '#eab308', '#22c55e', '#06b6d4', '#3b82f6', '#6366f1', '#a855f7'],\n  ocean:    ['#0f766e', '#0d9488', '#14b8a6', '#2dd4bf', '#5eead4', '#99f6e4', '#115e59', '#0e7490', '#06b6d4', '#67e8f9'],\n  emerald:  ['#15803d', '#16a34a', '#22c55e', '#4ade80', '#86efac', '#bbf7d0', '#166534', '#059669', '#34d399', '#a7f3d0'],\n  sunset:   ['#7c3aed', '#a855f7', '#d946ef', '#f43f5e', '#fb7185', '#fda4af', '#6d28d9', '#c026d3', '#e11d48', '#fecdd3'],\n  neutral:  ['#334155', '#475569', '#64748b', '#94a3b8', '#cbd5e1', '#e2e8f0', '#1e293b', '#4b5563', '#9ca3af', '#d1d5db']\n};\n\n// ─── Registration ─────────────────────────────────────────────────────────────\n\n/**\n * Register the Stellar ECharts themes.\n * Call this once at application bootstrap (e.g., in a root provider or app initializer).\n *\n * Registers two themes:\n * - `stellar`      — light variant\n * - `stellar-dark` — dark variant\n */\nexport function registerStellarThemes(): void {\n  echarts.registerTheme('stellar', stellarLight);\n  echarts.registerTheme('stellar-dark', stellarDark);\n}\n\n/**\n * Register ECharts themes for all color palettes (Stellar + non-Stellar).\n *\n * Non-Stellar palettes clone the Stellar light/dark base theme and only\n * replace the `color` array. This keeps axis, tooltip, and legend styling\n * consistent across all palettes.\n *\n * Theme naming convention:\n * - Light: `{paletteId}` (e.g., `spectrum`, `ocean`)\n * - Dark:  `{paletteId}-dark` (e.g., `spectrum-dark`, `ocean-dark`)\n */\nexport function registerAllPaletteThemes(): void {\n  registerStellarThemes();\n\n  for (const [id, paletteColors] of Object.entries(PALETTE_COLORS)) {\n    echarts.registerTheme(id, { ...stellarLight, color: [...paletteColors] });\n    echarts.registerTheme(`${id}-dark`, { ...stellarDark, color: [...paletteColors] });\n  }\n}\n\n/** Raw theme objects for testing or manual registration */\nexport const STELLAR_LIGHT_THEME = stellarLight;\nexport const STELLAR_DARK_THEME = stellarDark;\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnDestroy,\n  TemplateRef,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport * as echarts from 'echarts';\nimport type { DatasetComponentOption, ECharts, EChartsOption } from 'echarts';\nimport { firstValueFrom } from 'rxjs';\nimport { registerAllPaletteThemes } from '../config/stellar-echarts-theme';\nimport { WIDGET_CHART_V2_STYLES, generateBlueRamp } from '../config/chart-styles';\n\n// ─── Public Interfaces ─────────────────────────────────────────────────────────\n\nexport type WidgetChartV2Options = EChartsOption;\n\n/** Gridstack widget position/size. Used to compute responsive legend layout. */\nexport interface WidgetDimensions {\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n}\n\nexport type WidgetChartV2ErrorContext = {\n  $implicit: string;\n  error: unknown;\n};\n\n/** Emitted when user triggers Filter In / Filter Out from chart context menu or legend hover. */\nexport interface ChartContextMenuEvent {\n  action: 'filter-in' | 'filter-out';\n  /** Data label as displayed in the chart */\n  name: string;\n  value: number;\n  seriesName: string;\n  dataIndex: number;\n  source: 'chart-element' | 'legend';\n}\n\n/**\n * Legend layout resolved from widget dimensions.\n * - 'right'  — vertical legend on the right (wide widgets, w > h)\n * - 'bottom' — horizontal legend at the bottom (tall widgets, h >= w)\n * - 'bottom-scroll' — horizontal scrolling legend (medium ~3×3 widgets)\n * - 'hidden' — no legend (small ≤2×2 widgets)\n */\ntype LegendLayout = 'right' | 'bottom' | 'bottom-scroll' | 'hidden';\n\n// ─── Component ─────────────────────────────────────────────────────────────────\n\n/**\n * Enhanced chart widget (v2) — raw ECharts wrapper with brand styling.\n *\n * Key differences from v1 (`ui-widget-chart`):\n * - Raw echarts (not ngx-echarts) — full control over init, dispose, resize\n * - Theme as input signal ('dark'|'light') — no DOM sniffing\n * - SVG renderer for CSS integration and quality\n * - Geographic chart support (lazy-loaded world map)\n * - ResizeObserver-based responsive sizing\n * - Dataset merging for reactive data updates\n * - Custom error template support\n * - Brand color palette opt-in via `applyBrandColors` input (defaults to false)\n *\n * Uses same color palette, typography, and styling as v1's `optionsForWidget()`.\n */\n@Component({\n  selector: 'ui-widget-chart-v2',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div class=\"tw-h-full tw-w-full tw-relative\">\n      <!-- Loading Overlay — hidden during refresh so existing chart stays visible -->\n      <div\n        *ngIf=\"isBusy() && !isRefreshing()\"\n        class=\"tw-absolute tw-inset-0 tw-flex tw-items-center tw-justify-center\n               tw-bg-surface-0/50 dark:tw-bg-surface-900/50 tw-backdrop-blur-sm\n               tw-z-10 tw-rounded-lg\"\n        aria-busy=\"true\">\n        <div class=\"tw-flex tw-flex-col tw-items-center tw-gap-3\">\n          <i class=\"pi pi-spin pi-spinner tw-text-2xl tw-text-surface-400\"></i>\n          <span class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400\">\n            Loading data...\n          </span>\n        </div>\n      </div>\n\n      <!-- Error State -->\n      <div\n        *ngIf=\"hasError()\"\n        class=\"tw-absolute tw-inset-0 tw-z-10 tw-h-full tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-2\">\n        <ng-container\n          [ngTemplateOutlet]=\"errorTemplate() ?? defaultErrorTemplate\"\n          [ngTemplateOutletContext]=\"errorContext()\">\n        </ng-container>\n      </div>\n\n      <!-- Empty State (overlay — canvas stays in DOM so ECharts instance survives) -->\n      <div\n        *ngIf=\"isEmpty()\"\n        class=\"tw-absolute tw-inset-0 tw-z-10 tw-h-full tw-flex tw-flex-col tw-items-center tw-justify-center tw-gap-2 tw-bg-surface-0 dark:tw-bg-surface-900\">\n        <i [class]=\"emptyIcon() + ' tw-text-4xl tw-text-surface-300 dark:tw-text-surface-700'\"></i>\n        <span class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400\">\n          {{ emptyMessage() }}\n        </span>\n      </div>\n\n      <!-- Chart Canvas (always in DOM — hidden via CSS when empty/error, never destroyed) -->\n      <div\n        class=\"tw-h-full tw-w-full\"\n        [class.tw-invisible]=\"hasError() || isEmpty()\"\n        [style.display]=\"isConstrainedDonut() ? 'flex' : 'block'\"\n        [style.align-items]=\"isConstrainedDonut() ? 'center' : null\"\n        [style.justify-content]=\"isConstrainedDonut() ? 'center' : null\">\n\n        <!-- Constrained donut container (540×304 design size) -->\n        <div\n          *ngIf=\"isConstrainedDonut()\"\n          class=\"tw-relative tw-w-full\"\n          style=\"max-width: 540px; aspect-ratio: 540 / 304; min-height: 280px;\">\n          <div\n            #chartContainer\n            class=\"tw-absolute tw-inset-0 tw-w-full tw-h-full\"\n            [class.tw-invisible]=\"shouldHideCanvas()\">\n          </div>\n        </div>\n\n        <!-- Standard chart container -->\n        <div\n          *ngIf=\"!isConstrainedDonut()\"\n          #chartContainer\n          class=\"tw-h-full tw-w-full\"\n          [class.tw-invisible]=\"shouldHideCanvas()\"\n          [class.tw-overflow-visible]=\"printOptimized()\">\n        </div>\n      </div>\n    </div>\n\n    <ng-template #defaultErrorTemplate let-message let-error=\"error\">\n      <div class=\"tw-bg-surface-0 dark:tw-bg-surface-900 tw-rounded-md tw-px-3 tw-py-2 tw-max-w-[80%] tw-text-center\">\n        <span class=\"tw-text-xs tw-text-surface-600 dark:tw-text-surface-400\">{{ message }}</span>\n      </div>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WidgetChartV2Component implements AfterViewInit, OnDestroy {\n  private _http = inject(HttpClient);\n  private static _worldMapLoaded = false;\n  private static _themesRegistered = false;\n\n  // ─── Inputs ──────────────────────────────────────────────────────────────\n\n  /** ECharts options — full chart configuration */\n  options = input<WidgetChartV2Options | null>(null);\n\n  /** Data for ECharts dataset — merged into options.dataset.source */\n  data = input<unknown | null>(null);\n\n  /** External loading state */\n  loading = input<boolean>(false);\n\n  /** Disable interactive events (click, legend, datazoom) */\n  readOnly = input<boolean>(false);\n\n  /**\n   * Theme: 'dark' or 'light'.\n   * Maps to ECharts registered theme names: 'dark' → 'stellar-dark', 'light' → 'stellar'.\n   * Parent component resolves the theme and passes the string here.\n   */\n  theme = input<'dark' | 'light'>('light');\n\n  /** Custom error template — receives { $implicit: errorMessage, error: rawError } */\n  errorTemplate = input<TemplateRef<WidgetChartV2ErrorContext> | null>(null);\n\n  /** Custom empty state message */\n  emptyMessage = input<string>('No data available');\n\n  /**\n   * When true (default), chart fills container.\n   * When false, donut/pie charts are locked to 540×304 design size.\n   */\n  fillContainer = input<boolean>(true);\n\n  /** Print/PDF mode — disables animation, uses white background */\n  printOptimized = input<boolean>(false);\n\n  /** Chart type hint — used for donut constrained sizing */\n  chartType = input<string | undefined>(undefined);\n\n  /**\n   * When true, the brand color palette is auto-applied to options that don't\n   * specify a top-level `color` array. Defaults to false — generators typically\n   * set colors at the series/item level, so auto-injection would override them.\n   * Set to true only when using ui-kit's option builders or raw options without colors.\n   */\n  applyBrandColors = input<boolean>(false);\n\n  /**\n   * Gridstack widget dimensions {x, y, w, h}.\n   * Drives responsive legend placement:\n   * - ≤2×2: legend hidden\n   * - ~3×3: horizontal scrolling legend at bottom\n   * - Wide (w > h): vertical legend on the right\n   * - Tall (h >= w): horizontal legend at bottom\n   */\n  widgetDimensions = input.required<WidgetDimensions>();\n\n  /**\n   * Color palette identifier. Maps to a registered ECharts theme name.\n   * E.g., 'stellar' → theme 'stellar'/'stellar-dark', 'ocean' → 'ocean'/'ocean-dark'.\n   * Default: 'stellar'.\n   */\n  palette = input<string>('stellar');\n\n  /** When true, right-click context menu and legend hover filter icons are shown. */\n  filterable = input<boolean>(false);\n\n  // ─── Outputs ─────────────────────────────────────────────────────────────\n\n  /** Emitted when ECharts instance is initialized */\n  chartInit = output<ECharts>();\n\n  /** Emitted on click / select events (if not readOnly) */\n  chartClick = output<unknown>();\n\n  /** Emitted on legend / datazoom / brush events (if not readOnly) */\n  chartFilter = output<unknown>();\n\n  /** Emitted when chart rendering fails */\n  chartError = output<unknown>();\n\n  /** Emitted when user clicks Filter In / Filter Out from context menu or legend overlay. */\n  contextMenuAction = output<ChartContextMenuEvent>();\n\n  // ─── View Children ───────────────────────────────────────────────────────\n\n  chartContainer = viewChild<ElementRef<HTMLDivElement>>('chartContainer');\n\n  // ─── Internal State ──────────────────────────────────────────────────────\n\n  private readonly _chartInstance = signal<ECharts | null>(null);\n  private readonly _rendering = signal(false);\n  private readonly _errorMessage = signal<string | null>(null);\n  private readonly _error = signal<unknown>(null);\n  private readonly _hasLoaded = signal(false);\n  private readonly _activeTheme = signal<string>('');\n\n  private _resizeObserver?: ResizeObserver;\n  private _windowResizeHandler?: () => void;\n  private _axisLabelTooltip?: HTMLDivElement;\n  private _contextMenu?: HTMLDivElement;\n  private _contextMenuParams: Record<string, unknown> | null = null;\n  private _dismissHandlers: (() => void)[] = [];\n  private _legendOverlay?: HTMLDivElement;\n  private _hoveredLegendParams: Record<string, unknown> | null = null;\n\n  // ─── Computed ────────────────────────────────────────────────────────────\n\n  protected echartsTheme = computed(() => {\n    const p = this.palette() || 'stellar';\n    return this.theme() === 'dark' ? `${p}-dark` : p;\n  });\n\n  protected readonly isBusy = computed(() => this.loading() || this._rendering());\n  /** True when loading but chart already has content — skip overlay to avoid flash/blur */\n  protected readonly isRefreshing = computed(() => this.isBusy() && this._hasLoaded() && !!this.options());\n  protected readonly hasError = computed(() => Boolean(this._errorMessage()) && !this.isBusy());\n  protected readonly errorContext = computed<WidgetChartV2ErrorContext>(() => ({\n    $implicit: this._errorMessage() ?? '',\n    error: this._error()\n  }));\n  protected readonly shouldHideCanvas = computed(() => this.isBusy() && !this.data() && !this.options());\n  protected readonly isEmpty = computed(() => {\n    if (this.isBusy() || this.hasError()) return false;\n    const options = this.options();\n    const data = this.data();\n    // No options at all\n    if (!options && !data) return true;\n    // Options exist but data is empty\n    if (options && this._isDataEmpty(options, data)) return true;\n    return false;\n  });\n\n  protected readonly emptyIcon = computed(() => {\n    const opts = this.options();\n    const type = this.chartType() || (opts ? this._detectChartType(opts) : 'unknown');\n    switch (type) {\n      case 'bar': return 'pi pi-chart-bar';\n      case 'donut': case 'pie': case 'chart-donut': case 'chart-pie': return 'pi pi-chart-pie';\n      case 'map': case 'geo': return 'pi pi-map';\n      default: return 'pi pi-chart-line';\n    }\n  });\n\n  protected readonly isConstrainedDonut = computed(() => {\n    const type = this.chartType();\n    const isDonut = type === 'donut' || type === 'pie' || type === 'chart-donut' || type === 'chart-pie';\n    return !this.fillContainer() && !this.printOptimized() && isDonut;\n  });\n\n  // ─── Constructor ─────────────────────────────────────────────────────────\n\n  constructor() {\n    if (!WidgetChartV2Component._themesRegistered) {\n      registerAllPaletteThemes();\n      WidgetChartV2Component._themesRegistered = true;\n    }\n\n    // Re-apply options when options/data change\n    effect(\n      () => {\n        const chart = this._chartInstance();\n        if (!chart || !this._hasLoaded()) return;\n\n        const effectiveOptions = this._buildEffectiveOptions(this.options(), this.data());\n        if (!effectiveOptions) return;\n\n        void this._applyOptions(chart, effectiveOptions);\n      },\n      { allowSignalWrites: true }\n    );\n\n    // Re-init chart when theme changes (ECharts theme is set at init, not setOption)\n    effect(\n      () => {\n        const newTheme = this.echartsTheme();\n        const prev = this._activeTheme();\n\n        // Skip initial run or if theme hasn't actually changed\n        if (!prev) {\n          this._activeTheme.set(newTheme);\n          return;\n        }\n        if (newTheme === prev) return;\n\n        this._activeTheme.set(newTheme);\n        this._reinitChart();\n      },\n      { allowSignalWrites: true }\n    );\n  }\n\n  // ─── Lifecycle ───────────────────────────────────────────────────────────\n\n  async ngAfterViewInit() {\n    const container = this.chartContainer()?.nativeElement;\n    if (!container) return;\n\n    if (this._checkIfGeographicChart()) {\n      await this._ensureWorldMapLoaded();\n    }\n\n    const chart = echarts.init(container, this.echartsTheme(), { renderer: 'svg' });\n\n    if (!this._hasLoaded()) {\n      this._hasLoaded.set(true);\n      this.chartInit.emit(chart);\n    }\n\n    this._chartInstance.set(chart);\n    this._bindEvents(chart);\n    this._observeResize(container, chart);\n\n    const options = this._buildEffectiveOptions(this.options(), this.data());\n    if (options) {\n      await this._applyOptions(chart, options);\n    }\n  }\n\n  ngOnDestroy() {\n    this._destroyContextMenu();\n    this._destroyLegendOverlay();\n    this._resizeObserver?.disconnect();\n\n    if (this._windowResizeHandler) {\n      const win = typeof globalThis !== 'undefined' ? globalThis : undefined;\n      if (win && 'removeEventListener' in win) {\n        (win as unknown as Window).removeEventListener('resize', this._windowResizeHandler);\n      }\n    }\n\n    this._chartInstance()?.dispose();\n    this._destroyAxisLabelTooltip();\n  }\n\n  /**\n   * Dispose the current chart and re-create it with the current theme.\n   * Called when the theme input changes after initial render.\n   */\n  private _reinitChart() {\n    const container = this.chartContainer()?.nativeElement;\n    if (!container) return;\n\n    // Tear down existing instance\n    this._resizeObserver?.disconnect();\n    this._resizeObserver = undefined;\n\n    if (this._windowResizeHandler) {\n      const win = typeof globalThis !== 'undefined' ? globalThis : undefined;\n      if (win && 'removeEventListener' in win) {\n        (win as unknown as Window).removeEventListener('resize', this._windowResizeHandler);\n      }\n      this._windowResizeHandler = undefined;\n    }\n\n    this._chartInstance()?.dispose();\n\n    // Create new instance with updated theme\n    const chart = echarts.init(container, this.echartsTheme(), { renderer: 'svg' });\n    this._chartInstance.set(chart);\n    this._bindEvents(chart);\n    this._observeResize(container, chart);\n    this.chartInit.emit(chart);\n\n    // Re-apply options with new theme colors\n    const options = this._buildEffectiveOptions(this.options(), this.data());\n    if (options) {\n      void this._applyOptions(chart, options);\n    }\n  }\n\n  // ─── Options Building ────────────────────────────────────────────────────\n\n  /**\n   * Merge options + data + brand defaults into a single EChartsOption.\n   * Applies chart-type-aware styling for tooltip, series, legend, etc.\n   */\n  private _buildEffectiveOptions(\n    chartOptions: WidgetChartV2Options | null,\n    data: unknown | null\n  ): EChartsOption | null {\n    let options = chartOptions as EChartsOption | null;\n    if (!options) return null;\n\n    // Validate raw user-provided options before applying defaults\n    this._validateOptions(options);\n\n    const dark = this.theme() === 'dark';\n\n    // Apply brand color palette sized to the data cardinality so\n    // gradations never repeat — each value gets a unique blue shade.\n    if (!options.color && this.applyBrandColors()) {\n      const n = this._countDataItems(options);\n      options = { ...options, color: generateBlueRamp(Math.max(n, 10)) };\n    }\n\n    // Apply brand animation defaults if not print-optimized\n    if (!this.printOptimized()) {\n      options = {\n        animationDuration: WIDGET_CHART_V2_STYLES.animation.duration,\n        animationEasing: WIDGET_CHART_V2_STYLES.animation.easing,\n        ...options\n      };\n    } else {\n      options = { animation: false, ...options };\n    }\n\n    // Apply chart-type-aware defaults (tooltip, series style, legend)\n    options = this._applyChartTypeDefaults(options, dark);\n\n    // Merge data into dataset\n    if (data !== null && data !== undefined) {\n      options = this._mergeDataset(options, data);\n    }\n\n    return options;\n  }\n\n  /**\n   * Check if chart data is effectively empty across all series.\n   * Returns true when options exist but contain no meaningful data to render.\n   */\n  private _isDataEmpty(options: EChartsOption, data: unknown | null): boolean {\n    // If external data is provided and non-empty, not empty\n    if (data !== null && data !== undefined) {\n      if (Array.isArray(data) && data.length > 0) return false;\n      if (typeof data === 'object' && data !== null && Object.keys(data).length > 0) return false;\n    }\n\n    // Check dataset source\n    const hasDataset = !!options.dataset;\n    if (hasDataset) {\n      const datasets = Array.isArray(options.dataset) ? options.dataset : [options.dataset!];\n      for (const ds of datasets) {\n        const src = (ds as Record<string, unknown>)?.['source'];\n        if (Array.isArray(src) && src.length > 0) return false;\n      }\n    }\n\n    // Check graphic — standalone graphic elements are never \"empty\"\n    if (options.graphic) return false;\n\n    // Check series data\n    if (!options.series) return true;\n    const seriesArr = Array.isArray(options.series) ? options.series : [options.series];\n    if (seriesArr.length === 0) return true;\n\n    for (const s of seriesArr) {\n      if (!s || typeof s !== 'object') return false; // malformed — let validation handle it\n      const src = s as Record<string, unknown>;\n      const seriesData = src['data'];\n      // If data property is missing, check if a dataset source backs this series\n      if (seriesData === undefined) {\n        if (hasDataset) return false; // dataset-driven — not empty\n        continue; // no data and no dataset — treat this series as empty\n      }\n      if (Array.isArray(seriesData) && seriesData.length > 0) return false;\n    }\n\n    return true;\n  }\n\n  // ─── Chart-Type-Aware Defaults ──────────────────────────────────────────\n\n  /**\n   * Resolve theme-aware text colors.\n   * Reads CSS custom properties when available, falls back to hardcoded values.\n   */\n  private _getTextColors(dark: boolean) {\n    return dark\n      ? WIDGET_CHART_V2_STYLES.textColors.dark\n      : WIDGET_CHART_V2_STYLES.textColors.light;\n  }\n\n  /**\n   * Resolve theme-aware tooltip styling.\n   * Reads CSS custom property for overlay background, falls back to config.\n   */\n  private _getTooltipStyle(dark: boolean) {\n    const cfg = dark\n      ? WIDGET_CHART_V2_STYLES.tooltip.dark\n      : WIDGET_CHART_V2_STYLES.tooltip.light;\n\n    let bgColor: string = cfg.backgroundColor;\n    let borderColor: string = cfg.borderColor;\n\n    if (typeof document !== 'undefined') {\n      const styles = getComputedStyle(document.documentElement);\n      const overlayBg = styles.getPropertyValue('--overlay-background').trim();\n      if (overlayBg) bgColor = overlayBg;\n\n      const border = dark\n        ? styles.getPropertyValue('--p-surface-600').trim()\n        : styles.getPropertyValue('--p-surface-300').trim();\n      if (border) borderColor = border;\n    }\n\n    return { backgroundColor: bgColor, borderColor, textColor: cfg.textColor as string };\n  }\n\n  /**\n   * Apply chart-type defaults to options.\n   * Consumer-provided values always win — defaults only fill gaps.\n   */\n  private _applyChartTypeDefaults(options: EChartsOption, dark: boolean): EChartsOption {\n    const type = this._detectChartType(options);\n    const palette = this._getTextColors(dark);\n    const tooltipStyle = this._getTooltipStyle(dark);\n    const cfg = WIDGET_CHART_V2_STYLES;\n\n    // ── Hide chart title — widget base provides its own title ────────────\n    if (!options.title) {\n      options = { ...options, title: { show: false } };\n    }\n\n    // ── Tooltip defaults ──────────────────────────────────────────────────\n    if (!options.tooltip) {\n      const trigger = (type === 'donut' || type === 'pie') ? 'item' : 'axis';\n      options = {\n        ...options,\n        tooltip: {\n          trigger,\n          confine: true,\n          backgroundColor: tooltipStyle.backgroundColor,\n          borderColor: tooltipStyle.borderColor,\n          borderWidth: cfg.tooltip.borderWidth,\n          textStyle: { color: tooltipStyle.textColor, fontSize: cfg.tooltip.fontSize },\n          padding: [...cfg.tooltip.padding]\n        }\n      };\n    } else {\n      // Patch tooltip colors if consumer didn't set them\n      const t = options.tooltip as Record<string, unknown>;\n      const patched: Record<string, unknown> = { ...t };\n      if (!t['backgroundColor']) patched['backgroundColor'] = tooltipStyle.backgroundColor;\n      if (!t['borderColor']) patched['borderColor'] = tooltipStyle.borderColor;\n      if (t['borderWidth'] === undefined) patched['borderWidth'] = cfg.tooltip.borderWidth;\n      if (!t['textStyle']) {\n        patched['textStyle'] = { color: tooltipStyle.textColor, fontSize: cfg.tooltip.fontSize };\n      } else {\n        const ts = t['textStyle'] as Record<string, unknown>;\n        if (!ts['color']) patched['textStyle'] = { ...ts, color: tooltipStyle.textColor };\n      }\n      if (!t['padding']) patched['padding'] = [...cfg.tooltip.padding];\n      if (t['confine'] === undefined) patched['confine'] = true;\n      options = { ...options, tooltip: patched as EChartsOption['tooltip'] };\n    }\n\n    // ── Series-level defaults by chart type ───────────────────────────────\n    if (type === 'donut' || type === 'pie') {\n      options = this._applyDonutDefaults(options, dark, palette);\n    } else if (type === 'bar') {\n      options = this._applyBarDefaults(options, dark, palette);\n    } else if (type === 'line' || type === 'area') {\n      options = this._applyLineDefaults(options, dark, palette);\n    }\n\n    return options;\n  }\n\n  /**\n   * Detect chart type from the chartType input or from the series config.\n   */\n  private _detectChartType(options: EChartsOption): string {\n    const hint = this.chartType();\n    if (hint) return hint;\n\n    // Geo/map charts: detect from options.geo or series coordinateSystem/type\n    if (this._isGeographicOptions(options)) return 'geo';\n\n    if (!options.series) return 'unknown';\n    const series = Array.isArray(options.series) ? options.series : [options.series];\n    const first = series[0] as Record<string, unknown> | undefined;\n    if (!first) return 'unknown';\n\n    const seriesType = first['type'] as string;\n    if (seriesType === 'pie') {\n      // Check if it's a donut (has inner radius)\n      const radius = first['radius'];\n      if (Array.isArray(radius) && radius.length === 2) return 'donut';\n      return 'pie';\n    }\n    return seriesType || 'unknown';\n  }\n\n  /**\n   * Count distinct data items across all series (for pie: data[].length,\n   * for cartesian: number of series names or category count).\n   */\n  private _countDataItems(options: EChartsOption): number {\n    const series = Array.isArray(options.series)\n      ? options.series\n      : options.series ? [options.series] : [];\n\n    let max = 0;\n    for (const s of series) {\n      const src = s as Record<string, unknown>;\n      const data = src['data'] as unknown[] | undefined;\n      if (data) max = Math.max(max, data.length);\n    }\n    return max || series.length;\n  }\n\n  /**\n   * Compute donut radius [inner%, outer%] so the ring has a constant\n   * pixel thickness regardless of container size.\n   *\n   * outerRadius is fixed at WIDGET_CHART_V2_STYLES.donut.outerRadius %.\n   * innerRadius is derived: outer% − (ringThicknessPx / halfMinDim) × 100.\n   */\n  private _computeDonutRadius(layout: LegendLayout): [string, string] {\n    const d = WIDGET_CHART_V2_STYLES.donut;\n\n    const outerByLayout: Record<LegendLayout, number> = {\n      hidden: d.outerRadius,\n      right: d.outerRadius,\n      bottom: d.outerRadius - 8,\n      'bottom-scroll': d.outerRadius - 12,\n    };\n    const outerPct = outerByLayout[layout];\n\n    const container = this.chartContainer()?.nativeElement;\n    if (!container) return [`${outerPct - 6}%`, `${outerPct}%`];\n\n    const minDim = Math.min(container.offsetWidth, container.offsetHeight);\n    const halfMinDim = minDim / 2;\n    if (halfMinDim <= 0) return [`${outerPct - 6}%`, `${outerPct}%`];\n\n    const ringPct = (d.ringThicknessPx / halfMinDim) * 100;\n    const innerPct = Math.max(outerPct - ringPct, 50);\n\n    return [`${innerPct.toFixed(1)}%`, `${outerPct}%`];\n  }\n\n  /**\n   * Resolve legend layout from gridstack widget dimensions.\n   *\n   * Rules:\n   *  - ≤2 in either w or h  → hidden (too small for a legend)\n   *  - 3×3 (area ≤ 9)       → horizontal scrolling at bottom\n   *  - w > h (landscape)     → vertical legend on the right\n   *  - h >= w (portrait/sq)  → horizontal legend at bottom\n   */\n  private _resolveLegendLayout(): LegendLayout {\n    const dim = this.widgetDimensions();\n    const { w, h } = dim;\n\n    if (w <= 2 || h <= 2) return 'hidden';\n    if (w <= 3 && h <= 3) return 'bottom-scroll';\n    if (w > h) return 'right';\n    return 'bottom';\n  }\n\n  /**\n   * Build ECharts legend config for the resolved layout.\n   */\n  private _buildLegendConfig(\n    layout: LegendLayout,\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>\n  ): EChartsOption['legend'] | null {\n    const fontSize = WIDGET_CHART_V2_STYLES.typography.fontSize.label;\n    const fontWeight = WIDGET_CHART_V2_STYLES.typography.fontWeight.label;\n    const textStyle = { color: palette.quartiary, fontSize, fontWeight };\n    const d = WIDGET_CHART_V2_STYLES.donut;\n\n    switch (layout) {\n      case 'hidden':\n        return { show: false };\n\n      case 'right':\n        return {\n          orient: 'vertical',\n          type: 'scroll',\n          left: d.legendPosition,\n          top: 16,\n          bottom: 8,\n          width: '43%',\n          itemWidth: 14,\n          itemHeight: 14,\n          itemGap: d.legendItemGap,\n          icon: 'rect',\n          itemStyle: { borderRadius: 2 },\n          textStyle,\n          tooltip: { show: true },\n          pageIconColor: palette.tertiary,\n          pageIconInactiveColor: palette.axis,\n          pageTextStyle: { color: palette.quartiary, fontSize: 11 }\n        };\n\n      case 'bottom-scroll':\n        return {\n          orient: 'horizontal',\n          type: 'scroll',\n          bottom: 0,\n          left: 'center',\n          itemWidth: 12,\n          itemHeight: 12,\n          itemGap: 10,\n          icon: 'rect',\n          itemStyle: { borderRadius: 2 },\n          textStyle: { ...textStyle, fontSize: 11 },\n          tooltip: { show: true },\n          pageIconColor: palette.tertiary,\n          pageIconInactiveColor: palette.axis,\n          pageTextStyle: { color: palette.quartiary, fontSize: 11 }\n        };\n\n      case 'bottom':\n        return {\n          orient: 'horizontal',\n          type: 'scroll',\n          bottom: 0,\n          left: 'center',\n          itemWidth: 14,\n          itemHeight: 14,\n          itemGap: 12,\n          icon: 'rect',\n          itemStyle: { borderRadius: 2 },\n          textStyle,\n          tooltip: { show: true },\n          pageIconColor: palette.tertiary,\n          pageIconInactiveColor: palette.axis,\n          pageTextStyle: { color: palette.quartiary, fontSize: 11 }\n        };\n    }\n  }\n\n  /**\n   * Build a map of legend item name → numeric value from chart series data.\n   * For pie/donut: each data item's value. For cartesian: sum per series.\n   */\n  private _buildLegendValueMap(options: EChartsOption): Map<string, number> {\n    const map = new Map<string, number>();\n    if (!options.series) return map;\n\n    const seriesArr = Array.isArray(options.series) ? options.series : [options.series];\n\n    for (const s of seriesArr) {\n      const src = s as Record<string, unknown>;\n      if (src['name'] === '_center-label') continue;\n\n      const type = src['type'] as string;\n      const data = src['data'] as Array<Record<string, unknown> | number | unknown[]> | undefined;\n\n      if (type === 'pie' && data) {\n        const radius = src['radius'] as string[] | undefined;\n        if (radius && radius[0] === '0%' && radius[1] === '0%') continue;\n\n        for (const item of data) {\n          if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n            const obj = item as Record<string, unknown>;\n            const name = obj['name'] as string;\n            const value = obj['value'] as number;\n            if (name && value != null) {\n              map.set(name, (map.get(name) || 0) + value);\n            }\n          }\n        }\n      } else if (data) {\n        const seriesName = src['name'] as string;\n        if (!seriesName) continue;\n\n        let total = 0;\n        for (const item of data) {\n          if (typeof item === 'number') {\n            total += item;\n          } else if (Array.isArray(item)) {\n            total += (item[1] as number) || 0;\n          } else if (typeof item === 'object' && item !== null) {\n            total += ((item as Record<string, unknown>)['value'] as number) || 0;\n          }\n        }\n        map.set(seriesName, total);\n      }\n    }\n\n    return map;\n  }\n\n  /** Format a numeric value compactly for legend display. */\n  private _formatLegendValue(value: number): string {\n    if (value >= 1e9) return `${(value / 1e9).toFixed(1)}B`;\n    if (value >= 1e6) return `${(value / 1e6).toFixed(1)}M`;\n    if (value >= 1e3) return `${(value / 1e3).toFixed(1)}K`;\n    if (Number.isInteger(value)) return value.toLocaleString();\n    return value.toFixed(1);\n  }\n\n  /**\n   * Enrich legend config with value labels (via rich-text formatter)\n   * and tooltip for truncated text.\n   */\n  private _enrichLegendWithValues(\n    legend: EChartsOption['legend'],\n    options: EChartsOption,\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>,\n    layout: LegendLayout,\n    legendWidthPx?: number\n  ): EChartsOption['legend'] {\n    if (layout === 'hidden') return legend;\n\n    const valueMap = this._buildLegendValueMap(options);\n\n    const legendObj = legend as Record<string, unknown>;\n    const existingTextStyle = (legendObj['textStyle'] || {}) as Record<string, unknown>;\n    const maxChars = this._calcMaxLegendChars(layout, legendWidthPx);\n    const hasValues = valueMap.size > 0;\n\n    return {\n      ...legendObj,\n      formatter: (name: string) => {\n        const val = hasValues ? valueMap.get(name) : undefined;\n        const display = name.length > maxChars ? name.substring(0, maxChars) + '...' : name;\n        return val != null\n          ? `${display}  {value|${this._formatLegendValue(val)}}`\n          : display;\n      },\n      textStyle: {\n        ...existingTextStyle,\n        rich: {\n          value: {\n            fontSize: ((existingTextStyle['fontSize'] as number) || 12) - 1,\n            color: palette.tertiary,\n            padding: [0, 0, 0, 4],\n          }\n        }\n      },\n      tooltip: {\n        show: true,\n        formatter: (params: { name: string }) => {\n          const val = hasValues ? valueMap.get(params.name) : undefined;\n          return val != null\n            ? `${params.name}: ${this._formatLegendValue(val)}`\n            : params.name;\n        }\n      }\n    } as EChartsOption['legend'];\n  }\n\n  /**\n   * Calculate max legend label characters based on actual container size and layout.\n   * Adapts dynamically as the widget is resized.\n   */\n  private _calcMaxLegendChars(layout: LegendLayout, legendWidthPx?: number): number {\n    const container = this.chartContainer()?.nativeElement;\n    const AVG_CHAR_WIDTH = 7; // ~7px per char at 12px font size\n    const OVERHEAD = 70;      // icon (14) + itemGap (12) + value (~40) + padding\n\n    if (!container) {\n      return layout === 'right' ? 16 : 14;\n    }\n\n    const w = container.offsetWidth;\n\n    switch (layout) {\n      case 'right': {\n        const legendPx = legendWidthPx ?? w * 0.43;\n        return Math.max(10, Math.floor((legendPx - OVERHEAD) / AVG_CHAR_WIDTH));\n      }\n      case 'bottom':\n      case 'bottom-scroll': {\n        const itemPx = w * 0.3;\n        return Math.min(18, Math.max(8, Math.floor((itemPx - OVERHEAD) / AVG_CHAR_WIDTH)));\n      }\n      default:\n        return 16;\n    }\n  }\n\n  /**\n   * Apply donut-specific defaults: radius, center, padAngle, emphasis, legend.\n   */\n  private _applyDonutDefaults(\n    options: EChartsOption,\n    dark: boolean,\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>\n  ): EChartsOption {\n    const d = WIDGET_CHART_V2_STYLES.donut;\n    const layout = this._resolveLegendLayout();\n\n    const isRightLegend = layout === 'right';\n    const defaultCenter = isRightLegend\n      ? [...d.centerPosition.right]\n      : [...d.centerPosition.center];\n    const defaultRadius = this._computeDonutRadius(layout);\n\n    const series = Array.isArray(options.series) ? [...options.series] : options.series ? [options.series] : [];\n\n    const patched = series.map(s => {\n      const src = s as Record<string, unknown>;\n      if (src['type'] !== 'pie') return s;\n\n      // Skip the \"total-label\" ghost series (radius ['0%','0%'])\n      const radius = src['radius'] as string[] | undefined;\n      if (radius && radius[0] === '0%' && radius[1] === '0%') {\n        // Adjust center of total-label to match donut position\n        if (!src['center']) return { ...src, center: defaultCenter };\n        return s;\n      }\n\n      const out: Record<string, unknown> = { ...src };\n\n      // Radius\n      if (!out['radius']) out['radius'] = defaultRadius;\n\n      // Center position\n      if (!out['center']) out['center'] = defaultCenter;\n\n      // Pad angle\n      if (out['padAngle'] === undefined) out['padAngle'] = d.padAngle;\n\n      // Item style — border radius for rounded segments\n      const existing = (out['itemStyle'] as Record<string, unknown>) || {};\n      out['itemStyle'] = {\n        borderRadius: d.borderRadius,\n        borderColor: dark ? '#0f172a' : '#ffffff',\n        borderWidth: d.borderWidth,\n        ...existing\n      };\n\n      // Label — hide by default for donuts\n      if (!out['label']) out['label'] = { show: false };\n\n      // Label line — hide for donuts\n      if (!out['labelLine']) out['labelLine'] = { show: false };\n\n      // Emphasis\n      if (!out['emphasis']) {\n        out['emphasis'] = {\n          scale: true,\n          scaleSize: d.emphasis.scaleSize,\n          itemStyle: {\n            shadowBlur: d.emphasis.shadowBlur,\n            shadowOffsetX: 0,\n            shadowColor: dark ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.15)'\n          }\n        };\n      }\n\n      return out;\n    });\n\n    let result: EChartsOption = { ...options, series: patched };\n\n    // Legend — driven by widget dimensions\n    if (!options.legend) {\n      const legend = this._buildLegendConfig(layout, palette);\n      if (legend) {\n        const enriched = this._enrichLegendWithValues(legend, result, palette, layout);\n        result = { ...result, legend: enriched };\n      }\n    }\n\n    // Patch graphic elements (center total label) — align to donut center & fix colors\n    result = this._patchDonutGraphic(result, defaultCenter, palette);\n\n    return result;\n  }\n\n  /**\n   * Patch graphic elements in donut charts:\n   * - Reposition center label group to match donut center\n   * - Fix text fill colors for dark/light theme (CSS vars don't work in SVG renderer)\n   */\n  /**\n   * Find the actual center of the main pie series (not the ghost total-label series).\n   */\n  private _findDonutSeriesCenter(options: EChartsOption): [string, string] | null {\n    if (!options.series) return null;\n    const series = Array.isArray(options.series) ? options.series : [options.series];\n    for (const s of series) {\n      const src = s as Record<string, unknown>;\n      if (src['type'] !== 'pie') continue;\n      const r = src['radius'] as string[] | undefined;\n      // Skip the ghost total-label series\n      if (r && r[0] === '0%' && r[1] === '0%') continue;\n      const c = src['center'] as [string, string] | undefined;\n      if (c) return c;\n    }\n    return null;\n  }\n\n  /**\n   * Convert graphic center-label into a ghost pie series with position:'center' label.\n   * ECharts natively centers pie labels in the donut hole — no manual positioning needed.\n   * Removes the graphic element entirely.\n   */\n  private _patchDonutGraphic(\n    options: EChartsOption,\n    donutCenter: readonly string[] | string[],\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>\n  ): EChartsOption {\n    if (!options.graphic) return options;\n\n    const graphics = Array.isArray(options.graphic) ? [...options.graphic] : [options.graphic];\n\n    // Find the center-label group\n    const group = graphics.find(g =>\n      g && typeof g === 'object' && (g as Record<string, unknown>)['type'] === 'group'\n    ) as Record<string, unknown> | undefined;\n\n    if (!group || !Array.isArray(group['children'])) return options;\n\n    // Extract text lines from the graphic children\n    const textChildren = (group['children'] as Record<string, unknown>[])\n      .filter(c => c && c['type'] === 'text');\n\n    if (textChildren.length === 0) return options;\n\n    // Build rich-text formatter from the graphic texts\n    const texts: { text: string; fontSize: number; fontWeight: string | number; fill: string }[] = [];\n    for (const child of textChildren) {\n      const style = (child['style'] as Record<string, unknown>) || {};\n      const text = (style['text'] as string) || '';\n      const fontSize = (style['fontSize'] as number) || 14;\n      const fontWeight = (style['fontWeight'] as string | number) || 'normal';\n      let fill = (style['fill'] as string) || '';\n      if (!fill || fill.startsWith('var(')) {\n        const isSub = fill?.includes('secondary') || fill?.includes('text-color-secondary');\n        fill = isSub ? palette.sub : palette.text;\n      }\n      texts.push({ text, fontSize, fontWeight, fill });\n    }\n\n    if (texts.length === 0) return options;\n\n    // Build rich-text label: {t0|523}\\n{t1|Total}\n    const formatter = texts.map((t, i) => `{t${i}|${t.text}}`).join('\\n');\n    const rich: Record<string, unknown> = {};\n    texts.forEach((t, i) => {\n      rich[`t${i}`] = {\n        fontSize: t.fontSize,\n        fontWeight: t.fontWeight,\n        color: t.fill,\n        lineHeight: Math.round(t.fontSize * 1.6),\n      };\n    });\n\n    // Get the donut center from the actual pie series\n    const seriesCenter = this._findDonutSeriesCenter(options);\n    const center = seriesCenter || donutCenter;\n\n    // Ghost pie series — invisible ring, label centered in the donut hole.\n    // legendHoverLink: false prevents legend interaction; the empty name\n    // keeps it out of auto-generated legend entries.\n    const centerLabelSeries = {\n      name: '_center-label',\n      type: 'pie',\n      radius: ['0%', '0%'],\n      center: [...center],\n      silent: true,\n      animation: false,\n      legendHoverLink: false,\n      label: {\n        show: true,\n        position: 'center',\n        formatter: () => formatter,\n        rich,\n      },\n      labelLine: { show: false },\n      data: [{ value: 1, name: '', itemStyle: { color: 'transparent' } }],\n      itemStyle: { color: 'transparent' },\n      tooltip: { show: false },\n    };\n\n    const series = Array.isArray(options.series) ? [...options.series] : options.series ? [options.series] : [];\n    series.push(centerLabelSeries as any);\n\n    // Collect real data names so the legend excludes the ghost series\n    const legendNames: string[] = [];\n    for (const s of series) {\n      const src = s as Record<string, unknown>;\n      if (src['name'] === '_center-label') continue;\n      const data = src['data'] as Array<Record<string, unknown>> | undefined;\n      if (data) {\n        for (const d of data) {\n          const n = d['name'] as string | undefined;\n          if (n) legendNames.push(n);\n        }\n      }\n    }\n\n    // Patch legend to use explicit data list (avoids ghost entry)\n    const existingLegend = options.legend as Record<string, unknown> | undefined;\n    const patchedLegend = existingLegend\n      ? { ...existingLegend, data: legendNames }\n      : undefined;\n\n    const remainingGraphics = graphics.filter(g =>\n      !g || typeof g !== 'object' || (g as Record<string, unknown>)['type'] !== 'group'\n    );\n\n    return {\n      ...options,\n      series,\n      ...(patchedLegend ? { legend: patchedLegend } : {}),\n      graphic: remainingGraphics.length > 0 ? remainingGraphics as EChartsOption['graphic'] : undefined,\n    };\n  }\n\n  /**\n   * Apply bar-specific defaults: barWidth, borderRadius, axis label colors.\n   */\n  private _applyBarDefaults(\n    options: EChartsOption,\n    dark: boolean,\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>\n  ): EChartsOption {\n    const b = WIDGET_CHART_V2_STYLES.bar;\n    const series = Array.isArray(options.series) ? [...options.series] : options.series ? [options.series] : [];\n\n    const patched = series.map(s => {\n      const src = s as Record<string, unknown>;\n      if (src['type'] !== 'bar') return s;\n      const out: Record<string, unknown> = { ...src };\n      if (!out['barWidth']) out['barWidth'] = b.barWidth;\n\n      // Emphasis\n      if (!out['emphasis']) {\n        out['emphasis'] = {\n          itemStyle: {\n            shadowBlur: 10,\n            shadowOffsetX: 0,\n            shadowColor: dark ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.15)'\n          }\n        };\n      }\n      return out;\n    });\n\n    let result: EChartsOption = { ...options, series: patched };\n\n    // Legend + grid — driven by widget dimensions\n    result = this._applyCartesianLegend(result, palette);\n\n    // Axis label color defaults\n    result = this._patchAxisColors(result, palette);\n\n    return result;\n  }\n\n  /**\n   * Apply line/area-specific defaults: lineWidth, symbolSize, area gradient.\n   */\n  private _applyLineDefaults(\n    options: EChartsOption,\n    dark: boolean,\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>\n  ): EChartsOption {\n    const l = WIDGET_CHART_V2_STYLES.line;\n    const series = Array.isArray(options.series) ? [...options.series] : options.series ? [options.series] : [];\n\n    const patched = series.map(s => {\n      const src = s as Record<string, unknown>;\n      if (src['type'] !== 'line') return s;\n      const out: Record<string, unknown> = { ...src };\n\n      // Line style\n      const ls = (out['lineStyle'] as Record<string, unknown>) || {};\n      if (!ls['width']) out['lineStyle'] = { ...ls, width: l.lineWidth };\n\n      // Symbol\n      if (!out['symbol']) out['symbol'] = 'circle';\n      if (out['symbolSize'] === undefined) out['symbolSize'] = l.symbolSize;\n\n      return out;\n    });\n\n    let result: EChartsOption = { ...options, series: patched };\n\n    // Legend + grid — driven by widget dimensions\n    result = this._applyCartesianLegend(result, palette);\n\n    // Axis label color defaults\n    result = this._patchAxisColors(result, palette);\n\n    return result;\n  }\n\n  /**\n   * Apply dimension-based legend for cartesian (bar/line) charts.\n   * Always overrides legend position and adjusts grid to make room.\n   */\n  private _applyCartesianLegend(\n    options: EChartsOption,\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>\n  ): EChartsOption {\n    // Hide legend for single-series charts — no value in showing it\n    const seriesArr = Array.isArray(options.series) ? options.series : options.series ? [options.series] : [];\n    const isSingleSeries = seriesArr.length <= 1;\n\n    const layout = isSingleSeries ? 'hidden' : this._resolveLegendLayout();\n    const legend = this._buildLegendConfig(layout, palette);\n    if (!legend) return options;\n\n    // For cartesian 'right' layout, legend is capped to CARTESIAN_LEGEND_WIDTH px\n    const CARTESIAN_LEGEND_WIDTH = 220;\n    const legendWidthPx = layout === 'right' ? CARTESIAN_LEGEND_WIDTH : undefined;\n    const enriched = this._enrichLegendWithValues(legend, options, palette, layout, legendWidthPx);\n    const result: EChartsOption = { ...options, legend: enriched };\n\n    // Detect axis names — containLabel doesn't account for axis name text\n    const xAxisObj = (Array.isArray(options.xAxis) ? options.xAxis[0] : options.xAxis) as Record<string, unknown> | undefined;\n    const yAxisObj = (Array.isArray(options.yAxis) ? options.yAxis[0] : options.yAxis) as Record<string, unknown> | undefined;\n    const hasXName = !!(xAxisObj && xAxisObj['name']);\n    const hasYName = !!(yAxisObj && yAxisObj['name']);\n\n    // Adjust grid to make room for legend and axis names.\n    // Generators set nameLocation:'center', nameRotate:90 for y-axis\n    // and nameLocation:'center' for x-axis — need left/bottom padding.\n    // Use the axis nameGap if available (generators set nameGap:40 for y-axis),\n    // plus extra room for the rotated text itself.\n    const yNameGap = hasYName ? ((yAxisObj!['nameGap'] as number) || 30) : 0;\n    const yNamePad = hasYName ? Math.max(yNameGap + 10, 40) : 0;\n    const xNamePad = hasXName ? 45 : 0;\n\n    const eg = (result.grid as Record<string, unknown>) || {};\n    switch (layout) {\n      case 'right': {\n        const gridRight = (eg['right'] as string | number) || 220;\n        result.grid = {\n          left: yNamePad, top: 8, bottom: xNamePad, containLabel: true,\n          ...eg, right: gridRight\n        } as EChartsOption['grid'];\n        // Override legend position for cartesian — use right edge\n        const enrichedObj = enriched as Record<string, unknown>;\n        result.legend = {\n          ...enrichedObj, left: undefined, right: 0, top: 8, width: CARTESIAN_LEGEND_WIDTH\n        } as EChartsOption['legend'];\n        break;\n      }\n\n      case 'bottom':\n      case 'bottom-scroll': {\n        const gridBottom = (eg['bottom'] as string | number) || 40;\n        const effectiveBottom = hasXName ? Math.max(gridBottom as number, 50) : gridBottom;\n        result.grid = {\n          left: yNamePad, top: 8, right: 0, containLabel: true,\n          ...eg, bottom: effectiveBottom\n        } as EChartsOption['grid'];\n        break;\n      }\n\n      case 'hidden':\n        result.grid = {\n          left: yNamePad, top: 8, right: 0,\n          bottom: xNamePad, containLabel: true,\n          ...eg\n        } as EChartsOption['grid'];\n        break;\n    }\n\n    return result;\n  }\n\n  /**\n   * Patch xAxis/yAxis label and line colors if not already set.\n   */\n  private _patchAxisColors(\n    options: EChartsOption,\n    palette: ReturnType<WidgetChartV2Component['_getTextColors']>\n  ): EChartsOption {\n    const result = { ...options };\n    const fontSize = WIDGET_CHART_V2_STYLES.typography.fontSize.axis;\n    const fontWeight = WIDGET_CHART_V2_STYLES.typography.fontWeight.axis;\n\n    const MAX_LABEL_WIDTH = 80;\n\n    const patchAxis = (axis: unknown): unknown => {\n      if (!axis || typeof axis !== 'object') return axis;\n      const a = axis as Record<string, unknown>;\n      const out = { ...a };\n\n      if (!out['axisLine']) out['axisLine'] = { lineStyle: { color: palette.axis } };\n      if (!out['axisLabel']) {\n        out['axisLabel'] = {\n          color: palette.label, fontSize, fontWeight,\n          overflow: 'truncate', ellipsis: '...', width: MAX_LABEL_WIDTH,\n          triggerEvent: true\n        };\n      } else {\n        // Patch existing axisLabel with truncation if not set\n        const label = { ...(out['axisLabel'] as Record<string, unknown>) };\n        if (!label['overflow']) label['overflow'] = 'truncate';\n        if (!label['ellipsis']) label['ellipsis'] = '...';\n        if (label['width'] === undefined) label['width'] = MAX_LABEL_WIDTH;\n        label['triggerEvent'] = true;\n        out['axisLabel'] = label;\n      }\n      // Style axis name (label_x / label_y) if present\n      if (out['name'] && !out['nameTextStyle']) {\n        out['nameTextStyle'] = { color: palette.label, fontSize, fontWeight };\n      }\n      if (!out['splitLine']) {\n        out['splitLine'] = { lineStyle: { color: palette.split, type: 'dashed' } };\n      }\n      return out;\n    };\n\n    if (result.xAxis) {\n      result.xAxis = Array.isArray(result.xAxis)\n        ? result.xAxis.map(patchAxis) as EChartsOption['xAxis']\n        : patchAxis(result.xAxis) as EChartsOption['xAxis'];\n    }\n    if (result.yAxis) {\n      result.yAxis = Array.isArray(result.yAxis)\n        ? result.yAxis.map(patchAxis) as EChartsOption['yAxis']\n        : patchAxis(result.yAxis) as EChartsOption['yAxis'];\n    }\n\n    return result;\n  }\n\n  /**\n   * Merge external data into the options.dataset.source field.\n   */\n  private _mergeDataset(options: EChartsOption, data: unknown): EChartsOption {\n    const source = data as DatasetComponentOption['source'];\n    const dataset = options.dataset;\n\n    if (!dataset) {\n      return { ...options, dataset: { source } };\n    }\n\n    if (Array.isArray(dataset)) {\n      const [first, ...rest] = dataset;\n      const updatedFirst =\n        typeof first === 'object' && first !== null ? { ...(first as DatasetComponentOption), source } : { source };\n      return { ...options, dataset: [updatedFirst, ...rest] };\n    }\n\n    if (typeof dataset === 'object') {\n      return { ...options, dataset: { ...(dataset as DatasetComponentOption), source } };\n    }\n\n    return options;\n  }\n\n  // ─── Chart Rendering ─────────────────────────────────────────────────────\n\n  private async _applyOptions(chart: ECharts, options: EChartsOption) {\n    // Skip rendering when data is empty — the empty state overlay handles this.\n    // Without this guard, _rendering stays true (chart never fires 'finished')\n    // and isEmpty() is blocked by isBusy(), hiding the empty state.\n    if (this._isDataEmpty(options, this.data())) {\n      this._rendering.set(false);\n      return;\n    }\n\n    try {\n      this._clearError();\n      this._rendering.set(true);\n\n      if (this._isGeographicOptions(options)) {\n        await this._ensureWorldMapLoaded();\n      }\n\n      chart.setOption(options, { notMerge: true });\n    } catch (error) {\n      console.error('[WidgetChartV2] Failed to apply chart options:', error);\n      this._setError(error);\n    }\n  }\n\n  // ─── Options Validation (Guardrails) ─────────────────────────────────────\n\n  private static readonly _VALID_SERIES_TYPES = new Set([\n    'line', 'bar', 'pie', 'scatter', 'effectScatter', 'radar', 'tree', 'treemap',\n    'sunburst', 'boxplot', 'candlestick', 'heatmap', 'map', 'parallel', 'lines',\n    'graph', 'sankey', 'funnel', 'gauge', 'pictorialBar', 'themeRiver', 'custom',\n    'chord'\n  ]);\n\n  private static readonly _VALID_AXIS_TYPES = new Set(['value', 'category', 'time', 'log']);\n\n  /**\n   * Validate ECharts options and log detailed warnings/errors.\n   * Does NOT throw — charts will still attempt to render so ECharts can surface\n   * its own errors. This catches common misconfigurations early with actionable messages.\n   */\n  private _validateOptions(options: EChartsOption): void {\n    const tag = '[WidgetChartV2 Validation]';\n\n    // ── Top-level structure ────────────────────────────────────────────────\n    if (typeof options !== 'object' || options === null) {\n      console.error(`${tag} options must be a non-null object, received: ${typeof options}`);\n      return;\n    }\n\n    // ── Series validation ──────────────────────────────────────────────────\n    if ('series' in options && options.series != null) {\n      const seriesArr = Array.isArray(options.series) ? options.series : [options.series];\n\n      if (seriesArr.length === 0) {\n        console.warn(`${tag} options.series is an empty array — chart will render blank.`);\n      }\n\n      seriesArr.forEach((s, i) => {\n        if (!s || typeof s !== 'object') {\n          console.error(`${tag} series[${i}] is not a valid object: ${JSON.stringify(s)}`);\n          return;\n        }\n\n        const series = s as Record<string, unknown>;\n        const seriesType = series['type'] as string | undefined;\n\n        // Missing type\n        if (!seriesType) {\n          console.error(\n            `${tag} series[${i}] is missing required \"type\" property. ` +\n            `Each series must have a type (e.g., 'bar', 'line', 'pie'). ` +\n            `Received keys: [${Object.keys(series).join(', ')}]`\n          );\n          return;\n        }\n\n        // Invalid type\n        if (!WidgetChartV2Component._VALID_SERIES_TYPES.has(seriesType)) {\n          console.warn(\n            `${tag} series[${i}].type=\"${seriesType}\" is not a recognized ECharts series type. ` +\n            `Valid types: ${[...WidgetChartV2Component._VALID_SERIES_TYPES].join(', ')}`\n          );\n        }\n\n        // Missing data for non-dataset charts\n        const hasData = series['data'] != null;\n        const hasDatasetIndex = series['datasetIndex'] != null;\n        const hasEncode = series['encode'] != null;\n        const hasDataset = 'dataset' in options && options.dataset != null;\n\n        if (!hasData && !hasDatasetIndex && !hasEncode && !hasDataset) {\n          console.warn(\n            `${tag} series[${i}] (type=\"${seriesType}\") has no data source. ` +\n            `Provide one of: series.data, series.datasetIndex, series.encode, or options.dataset.`\n          );\n        }\n\n        // Empty data array\n        if (hasData && Array.isArray(series['data']) && (series['data'] as unknown[]).length === 0) {\n          console.warn(\n            `${tag} series[${i}] (type=\"${seriesType}\") has an empty data array — chart segment will render blank.`\n          );\n        }\n\n        // Pie/donut without data\n        if ((seriesType === 'pie') && !hasData && !hasDataset) {\n          console.warn(\n            `${tag} series[${i}] (type=\"pie\") typically requires series.data as an array of {name, value} objects.`\n          );\n        }\n      });\n    } else if (!('dataset' in options && options.dataset) && !('graphic' in options && options.graphic)) {\n      console.warn(\n        `${tag} options has no series, dataset, or graphic — chart will render empty. ` +\n        `Provide at least one of: options.series, options.dataset, or options.graphic.`\n      );\n    }\n\n    // ── Axis validation ────────────────────────────────────────────────────\n    this._validateAxis(options, 'xAxis', tag);\n    this._validateAxis(options, 'yAxis', tag);\n\n    // ── Color validation ───────────────────────────────────────────────────\n    if ('color' in options && options.color != null) {\n      if (!Array.isArray(options.color)) {\n        console.warn(`${tag} options.color should be an array of color strings, received: ${typeof options.color}`);\n      } else if (options.color.length === 0) {\n        console.warn(`${tag} options.color is an empty array — ECharts will use its default palette.`);\n      }\n    }\n\n    // ── Tooltip validation ─────────────────────────────────────────────────\n    if ('tooltip' in options && options.tooltip != null) {\n      const tooltip = options.tooltip as Record<string, unknown>;\n      if (typeof tooltip === 'object' && tooltip['trigger']) {\n        const validTriggers = ['item', 'axis', 'none'];\n        if (!validTriggers.includes(tooltip['trigger'] as string)) {\n          console.warn(\n            `${tag} tooltip.trigger=\"${tooltip['trigger']}\" is not valid. ` +\n            `Expected one of: ${validTriggers.join(', ')}`\n          );\n        }\n      }\n    }\n\n    // ── Legend validation ───────────────────────────────────────────────────\n    if ('legend' in options && options.legend != null) {\n      const legend = (Array.isArray(options.legend) ? options.legend[0] : options.legend) as Record<string, unknown>;\n      if (typeof legend === 'object' && legend['type']) {\n        const validTypes = ['plain', 'scroll'];\n        if (!validTypes.includes(legend['type'] as string)) {\n          console.warn(\n            `${tag} legend.type=\"${legend['type']}\" is not valid. Expected one of: ${validTypes.join(', ')}`\n          );\n        }\n      }\n    }\n\n    // ── Grid validation ────────────────────────────────────────────────────\n    if ('grid' in options && options.grid != null) {\n      const grids = Array.isArray(options.grid) ? options.grid : [options.grid];\n      grids.forEach((g, i) => {\n        const grid = g as Record<string, unknown>;\n        if (typeof grid !== 'object') return;\n\n        // Check for negative dimensions\n        for (const prop of ['left', 'right', 'top', 'bottom', 'width', 'height'] as const) {\n          const val = grid[prop];\n          if (typeof val === 'number' && val < 0) {\n            console.warn(`${tag} grid[${i}].${prop}=${val} is negative — this may cause layout issues.`);\n          }\n        }\n      });\n    }\n\n    // ── Dataset validation ─────────────────────────────────────────────────\n    if ('dataset' in options && options.dataset != null) {\n      const datasets = Array.isArray(options.dataset) ? options.dataset : [options.dataset];\n      datasets.forEach((ds, i) => {\n        if (!ds || typeof ds !== 'object') {\n          console.warn(`${tag} dataset[${i}] is not a valid object.`);\n          return;\n        }\n        const dataset = ds as Record<string, unknown>;\n        if (!dataset['source'] && !dataset['sourceHeader'] && dataset['fromDatasetIndex'] === undefined) {\n          console.warn(`${tag} dataset[${i}] has no source or fromDatasetIndex — it may be empty.`);\n        }\n      });\n    }\n  }\n\n  /**\n   * Validate xAxis or yAxis configuration\n   */\n  private _validateAxis(options: EChartsOption, axisKey: 'xAxis' | 'yAxis', tag: string): void {\n    if (!(axisKey in options) || (options as any)[axisKey] == null) return;\n\n    const axes = Array.isArray((options as any)[axisKey]) ? (options as any)[axisKey] : [(options as any)[axisKey]];\n\n    axes.forEach((a: unknown, i: number) => {\n      if (!a || typeof a !== 'object') return;\n      const axis = a as Record<string, unknown>;\n\n      // Invalid axis type\n      if (axis['type'] && !WidgetChartV2Component._VALID_AXIS_TYPES.has(axis['type'] as string)) {\n        console.warn(\n          `${tag} ${axisKey}[${i}].type=\"${axis['type']}\" is not valid. ` +\n          `Expected one of: ${[...WidgetChartV2Component._VALID_AXIS_TYPES].join(', ')}`\n        );\n      }\n\n      // Category axis without data\n      if (axis['type'] === 'category' && !axis['data'] && !('dataset' in options && options.dataset)) {\n        console.warn(\n          `${tag} ${axisKey}[${i}] is type=\"category\" but has no data array. ` +\n          `Category axes need data: [...] or a dataset source.`\n        );\n      }\n\n      // Empty category data\n      if (axis['type'] === 'category' && Array.isArray(axis['data']) && (axis['data'] as unknown[]).length === 0) {\n        console.warn(`${tag} ${axisKey}[${i}] has an empty data array — axis will have no labels.`);\n      }\n    });\n  }\n\n  // ─── Geographic Map Support ──────────────────────────────────────────────\n\n  private _checkIfGeographicChart(): boolean {\n    const options = this.options();\n    return options ? this._isGeographicOptions(options) : false;\n  }\n\n  private _isGeographicOptions(options: EChartsOption): boolean {\n    if ('geo' in options && options.geo) return true;\n\n    if ('series' in options && options.series) {\n      const series = Array.isArray(options.series) ? options.series : [options.series];\n      return series.some(s => {\n        const obj = s as { type?: string; coordinateSystem?: string };\n        return obj.type === 'map' || obj.type === 'effectScatter' || (obj.type === 'scatter' && obj.coordinateSystem === 'geo');\n      });\n    }\n\n    return false;\n  }\n\n  private async _ensureWorldMapLoaded(): Promise<void> {\n    if (WidgetChartV2Component._worldMapLoaded) return;\n\n    try {\n      const worldMapData = await firstValueFrom(this._http.get('/assets/echarts/world.json'));\n      echarts.registerMap('world', worldMapData as never);\n      WidgetChartV2Component._worldMapLoaded = true;\n    } catch (error) {\n      console.warn('[WidgetChartV2] Failed to load world map:', error);\n    }\n  }\n\n  // ─── Events ──────────────────────────────────────────────────────────────\n\n  private _bindEvents(chart: ECharts) {\n    chart.on('finished', () => this._rendering.set(false));\n    chart.on('click', params => this._emitIfInteractive(this.chartClick, params));\n    chart.on('selectchanged', params => this._emitIfInteractive(this.chartClick, params));\n    chart.on('legendselectchanged', params => this._emitIfInteractive(this.chartFilter, params));\n    chart.on('datazoom', params => this._emitIfInteractive(this.chartFilter, params));\n    chart.on('brushSelected', params => this._emitIfInteractive(this.chartFilter, params));\n\n    // Axis label hover tooltip\n    chart.on('mouseover', 'xAxis', (params: Record<string, unknown>) => {\n      this._showAxisLabelTooltip(params, chart);\n    });\n    chart.on('mouseover', 'yAxis', (params: Record<string, unknown>) => {\n      this._showAxisLabelTooltip(params, chart);\n    });\n    chart.on('mouseout', 'xAxis', () => this._hideAxisLabelTooltip());\n    chart.on('mouseout', 'yAxis', () => this._hideAxisLabelTooltip());\n\n    // Prevent browser context menu on chart when filterable + handle legend right-click\n    chart.getZr().on('contextmenu', (e: any) => {\n      if (!this.filterable()) return;\n      e.event?.preventDefault?.();\n\n      // If hovering a legend item, show context menu for it\n      if (this._hoveredLegendParams) {\n        const nativeEvent = e.event as MouseEvent | undefined;\n        const legendParams = {\n          ...this._hoveredLegendParams,\n          event: nativeEvent ? { offsetX: nativeEvent.offsetX, offsetY: nativeEvent.offsetY } : undefined\n        };\n        this._showContextMenu(legendParams, chart, 'legend');\n      }\n    });\n    // Right-click context menu for Filter In / Filter Out (chart data elements)\n    chart.on('contextmenu', (params: Record<string, unknown>) => {\n      this._showContextMenu(params, chart, 'chart-element');\n    });\n\n    // Legend hover: track hovered legend + show overlay\n    chart.on('mouseover', 'legendItem' as any, (params: Record<string, unknown>) => {\n      this._hoveredLegendParams = params;\n      this._showLegendOverlay(params, chart);\n    });\n    chart.on('mouseout', 'legendItem' as any, () => {\n      this._hoveredLegendParams = null;\n      setTimeout(() => {\n        if (this._legendOverlay && !this._legendOverlay.matches(':hover')) {\n          this._hideLegendOverlay();\n        }\n      }, 200);\n    });\n  }\n\n  private _emitIfInteractive<T>(emitter: { emit: (value: T) => void }, value: T) {\n    if (!this.readOnly()) emitter.emit(value);\n  }\n\n  // ─── Axis Label Tooltip ─────────────────────────────────────────────────\n\n  private _showAxisLabelTooltip(params: Record<string, unknown>, chart: ECharts) {\n    const value = params['value'] as string | undefined;\n    if (!value) return;\n\n    const dark = this.theme() === 'dark';\n\n    if (!this._axisLabelTooltip) {\n      this._axisLabelTooltip = document.createElement('div');\n      const s = this._axisLabelTooltip.style;\n      s.position = 'fixed';\n      s.pointerEvents = 'none';\n      s.zIndex = '9999';\n      s.padding = '4px 8px';\n      s.borderRadius = '4px';\n      s.fontSize = '12px';\n      s.lineHeight = '1.4';\n      s.maxWidth = '300px';\n      s.wordBreak = 'break-word';\n      s.transition = 'opacity 0.15s';\n      document.body.appendChild(this._axisLabelTooltip);\n    }\n\n    const tip = this._axisLabelTooltip;\n    tip.textContent = value;\n    tip.style.backgroundColor = dark ? '#1e293b' : '#ffffff';\n    tip.style.color = dark ? '#e2e8f0' : '#1e293b';\n    tip.style.border = `1px solid ${dark ? '#475569' : '#e2e8f0'}`;\n    tip.style.boxShadow = dark\n      ? '0 4px 6px -1px rgba(0,0,0,0.3)'\n      : '0 4px 6px -1px rgba(0,0,0,0.1)';\n    tip.style.opacity = '1';\n    tip.style.display = 'block';\n\n    // Position near the event\n    const event = params['event'] as { offsetX?: number; offsetY?: number } | undefined;\n    const dom = chart.getDom();\n    if (event && dom) {\n      const rect = dom.getBoundingClientRect();\n      tip.style.left = `${rect.left + (event.offsetX ?? 0) + 12}px`;\n      tip.style.top = `${rect.top + (event.offsetY ?? 0) - 8}px`;\n    }\n  }\n\n  private _hideAxisLabelTooltip() {\n    if (this._axisLabelTooltip) {\n      this._axisLabelTooltip.style.opacity = '0';\n      this._axisLabelTooltip.style.display = 'none';\n    }\n  }\n\n  private _destroyAxisLabelTooltip() {\n    if (this._axisLabelTooltip) {\n      this._axisLabelTooltip.remove();\n      this._axisLabelTooltip = undefined;\n    }\n  }\n\n  // ─── Context Menu (Filter In / Filter Out) ─────────────────────────────\n\n  private _showContextMenu(params: Record<string, unknown>, chart: ECharts, source: 'chart-element' | 'legend' = 'chart-element') {\n    if (!this.filterable()) return;\n\n    this._hideContextMenu();\n    this._hideLegendOverlay();\n    this._contextMenuParams = params;\n\n    const dark = this.theme() === 'dark';\n    const bgColor = dark ? '#1e293b' : '#ffffff';\n    const hoverColor = dark ? '#334155' : '#f1f5f9';\n    const textColor = dark ? '#e2e8f0' : '#1e293b';\n    const borderColor = dark ? '#475569' : '#e2e8f0';\n\n    if (!this._contextMenu) {\n      this._contextMenu = document.createElement('div');\n      document.body.appendChild(this._contextMenu);\n    }\n\n    const menu = this._contextMenu;\n    const s = menu.style;\n    s.position = 'fixed';\n    s.zIndex = '10000';\n    s.borderRadius = '8px';\n    s.padding = '4px 0';\n    s.minWidth = '140px';\n    s.backgroundColor = bgColor;\n    s.color = textColor;\n    s.border = `1px solid ${borderColor}`;\n    s.boxShadow = dark\n      ? '0 4px 12px rgba(0,0,0,0.4)'\n      : '0 4px 12px rgba(0,0,0,0.12)';\n    s.display = 'block';\n    s.opacity = '1';\n\n    const items: { label: string; icon: string; action: 'filter-in' | 'filter-out' }[] = [\n      { label: 'Filter In', icon: 'pi pi-filter', action: 'filter-in' },\n      { label: 'Filter Out', icon: 'pi pi-filter-slash', action: 'filter-out' }\n    ];\n\n    menu.innerHTML = '';\n    for (const item of items) {\n      const row = document.createElement('div');\n      row.style.cssText = `\n        display: flex; align-items: center; gap: 8px;\n        padding: 8px 12px; cursor: pointer; font-size: 13px;\n        transition: background-color 0.15s;\n      `;\n      row.innerHTML = `<i class=\"${item.icon}\" style=\"font-size: 14px;\"></i><span>${item.label}</span>`;\n      row.addEventListener('mouseenter', () => { row.style.backgroundColor = hoverColor; });\n      row.addEventListener('mouseleave', () => { row.style.backgroundColor = 'transparent'; });\n      row.addEventListener('click', () => {\n        this._emitContextMenuAction(item.action, params, source);\n        this._hideContextMenu();\n      });\n      menu.appendChild(row);\n    }\n\n    // Position near the event\n    const event = params['event'] as { offsetX?: number; offsetY?: number } | undefined;\n    const dom = chart.getDom();\n    if (event && dom) {\n      const rect = dom.getBoundingClientRect();\n      const left = rect.left + (event.offsetX ?? 0);\n      const top = rect.top + (event.offsetY ?? 0);\n      // Clamp to viewport\n      const menuWidth = 160;\n      const menuHeight = 80;\n      s.left = `${Math.min(left, window.innerWidth - menuWidth)}px`;\n      s.top = `${Math.min(top, window.innerHeight - menuHeight)}px`;\n    }\n\n    this._bindDismissHandlers();\n  }\n\n  private _hideContextMenu() {\n    if (this._contextMenu) {\n      this._contextMenu.style.display = 'none';\n    }\n    this._contextMenuParams = null;\n    this._unbindDismissHandlers();\n  }\n\n  private _destroyContextMenu() {\n    this._hideContextMenu();\n    if (this._contextMenu) {\n      this._contextMenu.remove();\n      this._contextMenu = undefined;\n    }\n  }\n\n  private _emitContextMenuAction(\n    action: 'filter-in' | 'filter-out',\n    params: Record<string, unknown>,\n    source: 'chart-element' | 'legend'\n  ) {\n    this.contextMenuAction.emit({\n      action,\n      name: (params['name'] as string) ?? '',\n      value: (params['value'] as number) ?? 0,\n      seriesName: (params['seriesName'] as string) ?? '',\n      dataIndex: (params['dataIndex'] as number) ?? 0,\n      source\n    });\n  }\n\n  private _bindDismissHandlers() {\n    this._unbindDismissHandlers();\n\n    // Use setTimeout so the triggering right-click doesn't immediately dismiss\n    setTimeout(() => {\n      const onMouseDown = (e: MouseEvent) => {\n        if (this._contextMenu && !this._contextMenu.contains(e.target as Node)) {\n          this._hideContextMenu();\n        }\n      };\n      const onKeyDown = (e: KeyboardEvent) => {\n        if (e.key === 'Escape') {\n          this._hideContextMenu();\n        }\n      };\n      const onScroll = () => {\n        this._hideContextMenu();\n      };\n\n      document.addEventListener('mousedown', onMouseDown);\n      document.addEventListener('keydown', onKeyDown);\n      window.addEventListener('scroll', onScroll, true);\n\n      this._dismissHandlers = [\n        () => document.removeEventListener('mousedown', onMouseDown),\n        () => document.removeEventListener('keydown', onKeyDown),\n        () => window.removeEventListener('scroll', onScroll, true)\n      ];\n    });\n  }\n\n  private _unbindDismissHandlers() {\n    for (const cleanup of this._dismissHandlers) {\n      cleanup();\n    }\n    this._dismissHandlers = [];\n  }\n\n  // ─── Legend Hover Overlay (Filter In / Filter Out) ─────────────────────\n\n  private _showLegendOverlay(params: Record<string, unknown>, chart: ECharts) {\n    if (!this.filterable()) return;\n\n    this._hideContextMenu();\n    this._hideLegendOverlay();\n\n    const dark = this.theme() === 'dark';\n    const bgColor = dark ? '#1e293b' : '#ffffff';\n    const hoverColor = dark ? '#334155' : '#f1f5f9';\n    const textColor = dark ? '#e2e8f0' : '#1e293b';\n    const borderColor = dark ? '#475569' : '#e2e8f0';\n\n    if (!this._legendOverlay) {\n      this._legendOverlay = document.createElement('div');\n      document.body.appendChild(this._legendOverlay);\n    }\n\n    const overlay = this._legendOverlay;\n    const s = overlay.style;\n    s.position = 'fixed';\n    s.zIndex = '10000';\n    s.borderRadius = '6px';\n    s.padding = '2px 4px';\n    s.backgroundColor = bgColor;\n    s.border = `1px solid ${borderColor}`;\n    s.boxShadow = dark\n      ? '0 2px 8px rgba(0,0,0,0.3)'\n      : '0 2px 8px rgba(0,0,0,0.1)';\n    s.display = 'flex';\n    s.alignItems = 'center';\n    s.gap = '2px';\n    s.opacity = '1';\n\n    overlay.innerHTML = '';\n\n    // On mouseleave of the overlay itself, hide it\n    overlay.addEventListener('mouseleave', () => {\n      this._hideLegendOverlay();\n    });\n\n    const actions: { icon: string; title: string; action: 'filter-in' | 'filter-out' }[] = [\n      { icon: 'pi pi-filter', title: 'Filter In', action: 'filter-in' },\n      { icon: 'pi pi-filter-slash', title: 'Filter Out', action: 'filter-out' }\n    ];\n\n    for (const item of actions) {\n      const btn = document.createElement('button');\n      btn.title = item.title;\n      btn.style.cssText = `\n        display: flex; align-items: center; justify-content: center;\n        width: 28px; height: 28px; border: none; background: transparent;\n        border-radius: 4px; cursor: pointer; color: ${textColor};\n        font-size: 13px; transition: background-color 0.15s;\n      `;\n      btn.innerHTML = `<i class=\"${item.icon}\"></i>`;\n      btn.addEventListener('mouseenter', () => { btn.style.backgroundColor = hoverColor; });\n      btn.addEventListener('mouseleave', () => { btn.style.backgroundColor = 'transparent'; });\n      btn.addEventListener('click', () => {\n        this._emitContextMenuAction(item.action, params, 'legend');\n        this._hideLegendOverlay();\n      });\n      overlay.appendChild(btn);\n    }\n\n    // Position near the legend item\n    const event = params['event'] as { offsetX?: number; offsetY?: number } | undefined;\n    const dom = chart.getDom();\n    if (event && dom) {\n      const rect = dom.getBoundingClientRect();\n      s.left = `${rect.left + (event.offsetX ?? 0) + 12}px`;\n      s.top = `${rect.top + (event.offsetY ?? 0) - 14}px`;\n    }\n  }\n\n  private _hideLegendOverlay() {\n    if (this._legendOverlay) {\n      this._legendOverlay.style.display = 'none';\n    }\n  }\n\n  private _destroyLegendOverlay() {\n    if (this._legendOverlay) {\n      this._legendOverlay.remove();\n      this._legendOverlay = undefined;\n    }\n  }\n\n  // ─── Resize ──────────────────────────────────────────────────────────────\n\n  private _observeResize(container: HTMLDivElement, chart: ECharts) {\n    const win = typeof globalThis !== 'undefined' ? globalThis : undefined;\n    if (!win) return;\n\n    if ('ResizeObserver' in win) {\n      this._resizeObserver = new ResizeObserver(() => chart.resize());\n      this._resizeObserver.observe(container);\n      return;\n    }\n\n    this._windowResizeHandler = () => chart.resize();\n    if ('addEventListener' in win) {\n      (win as unknown as Window).addEventListener('resize', this._windowResizeHandler);\n    }\n  }\n\n  // ─── Error Handling ──────────────────────────────────────────────────────\n\n  private _clearError() {\n    this._errorMessage.set(null);\n    this._error.set(null);\n  }\n\n  private _setError(error: unknown) {\n    this._rendering.set(false);\n    this._error.set(error);\n    this._errorMessage.set(this._extractErrorMessage(error));\n    this.chartError.emit(error);\n  }\n\n  private _extractErrorMessage(error: unknown): string {\n    if (error instanceof Error && error.message) return error.message;\n    if (typeof error === 'string' && error.trim()) return error;\n    try {\n      return JSON.stringify(error);\n    } catch {\n      return 'Chart rendering failed';\n    }\n  }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule, NgClass } from '@angular/common';\nimport type { SectionBgColor } from '../../dashboard-builder/models';\n\ninterface SectionColorOption {\n  id: SectionBgColor;\n  label: string;\n  swatch: string;\n}\n\nconst SECTION_COLORS: SectionColorOption[] = [\n  { id: 'transparent', label: 'None', swatch: 'transparent' },\n  { id: 'surface', label: 'Gray', swatch: '#94a3b8' },\n  { id: 'blue', label: 'Blue', swatch: '#60a5fa' },\n  { id: 'indigo', label: 'Indigo', swatch: '#818cf8' },\n  { id: 'teal', label: 'Teal', swatch: '#2dd4bf' },\n];\n\n/**\n * Section header widget — a full-width visual divider that groups related widgets.\n * In edit mode: supports inline title editing, a 5-color BG palette, and delete.\n * Width is controlled via GridStack drag-resize.\n */\n@Component({\n  selector: 'ui-widget-section-header',\n  standalone: true,\n  imports: [CommonModule, NgClass],\n  host: { class: 'tw-block tw-h-full' },\n  template: `\n    <div\n      class=\"tw-h-full tw-flex tw-items-center tw-px-6 tw-rounded-lg\n             tw-transition-colors tw-duration-200 tw-group\"\n      [ngClass]=\"bgClasses\">\n      <div class=\"tw-flex tw-items-center tw-gap-3 tw-w-full\">\n\n        <!-- Inline-editable title (edit mode) / Read-only label (view mode) -->\n        @if (viewMode === 'edit') {\n          <input\n            type=\"text\"\n            [value]=\"title\"\n            class=\"tw-bg-transparent tw-border-0 tw-border-b tw-border-transparent tw-outline-none\n                   tw-whitespace-nowrap tw-m-0 tw-px-0 tw-py-0.5 tw-min-w-[60px] tw-max-w-[50%]\n                   tw-font-normal tw-text-base tw-leading-normal tw-cursor-text\n                   tw-text-surface-900 dark:tw-text-surface-50\n                   tw-transition-all tw-duration-150\n                   focus:tw-border-primary/50\"\n            (blur)=\"onTitleBlur($event)\"\n            (keydown.enter)=\"$any($event.target).blur()\"\n            (keydown.escape)=\"onTitleEscape($event)\" />\n        } @else {\n          <h2 class=\"tw-whitespace-nowrap tw-m-0\"\n              style=\"color: var(--p-text-color); font-weight: 400; font-size: 1rem; line-height: 1.5;\">\n            {{ title }}\n          </h2>\n        }\n\n        <!-- Spacer pushes edit controls to the right -->\n        <div class=\"tw-flex-1\"></div>\n\n        <!-- Edit controls — visible on hover in edit mode -->\n        @if (viewMode === 'edit') {\n          <div class=\"tw-flex tw-items-center tw-gap-1.5\n                      tw-opacity-0 group-hover:tw-opacity-100\n                      tw-transition-opacity tw-duration-200\">\n\n            <!-- Color swatches -->\n            @for (color of colors; track color.id) {\n              <button\n                type=\"button\"\n                class=\"tw-w-4 tw-h-4 tw-rounded-full tw-flex-shrink-0 tw-cursor-pointer tw-outline-none\n                       tw-transition-all tw-duration-150\n                       focus-visible:tw-ring-2 focus-visible:tw-ring-primary focus-visible:tw-ring-offset-1\"\n                [class.tw-ring-2]=\"bgColor === color.id\"\n                [class.tw-ring-primary]=\"bgColor === color.id\"\n                [class.tw-ring-offset-1]=\"bgColor === color.id\"\n                [class.tw-border]=\"color.id === 'transparent'\"\n                [class.tw-border-dashed]=\"color.id === 'transparent'\"\n                [class.tw-border-surface-400]=\"color.id === 'transparent'\"\n                [style.backgroundColor]=\"color.swatch\"\n                [title]=\"color.label\"\n                (click)=\"onColorSelect(color.id)\">\n              </button>\n            }\n\n            <!-- Divider -->\n            <div class=\"tw-w-px tw-h-4 tw-bg-surface-300 dark:tw-bg-surface-600 tw-mx-0.5\"></div>\n\n            <!-- Delete -->\n            <button\n              type=\"button\"\n              class=\"tw-w-5 tw-h-5 tw-rounded tw-flex tw-items-center tw-justify-center tw-flex-shrink-0\n                     tw-cursor-pointer tw-outline-none\n                     tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300\n                     hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700\n                     tw-transition-all tw-duration-150\"\n              title=\"Remove section\"\n              (click)=\"deleteEvent.emit()\">\n              <i class=\"pi pi-trash tw-text-[10px]\"></i>\n            </button>\n          </div>\n        }\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetSectionHeaderComponent {\n  @Input({ required: true }) title!: string;\n  @Input() viewMode: 'view' | 'edit' = 'view';\n  @Input() bgColor: SectionBgColor = 'surface';\n\n  @Output() titleChange = new EventEmitter<string>();\n  @Output() bgColorChange = new EventEmitter<SectionBgColor>();\n  @Output() deleteEvent = new EventEmitter<void>();\n\n  readonly colors = SECTION_COLORS;\n\n  get bgClasses(): string {\n    switch (this.bgColor) {\n      case 'surface': return 'tw-bg-surface-100/60 dark:tw-bg-surface-800/40';\n      case 'blue':    return 'tw-bg-blue-50/60 dark:tw-bg-blue-950/30';\n      case 'indigo':  return 'tw-bg-indigo-50/60 dark:tw-bg-indigo-950/30';\n      case 'teal':    return 'tw-bg-teal-50/60 dark:tw-bg-teal-950/30';\n      default:        return '';\n    }\n  }\n\n  onTitleBlur(event: FocusEvent): void {\n    const input = event.target as HTMLInputElement;\n    const newTitle = input.value.trim();\n    if (newTitle && newTitle !== this.title) {\n      this.titleChange.emit(newTitle);\n    } else {\n      input.value = this.title;\n    }\n  }\n\n  onTitleEscape(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    input.value = this.title;\n    input.blur();\n  }\n\n  onColorSelect(color: SectionBgColor): void {\n    this.bgColorChange.emit(color);\n  }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule, NgClass } from '@angular/common';\n\nexport interface TextBlockConfig {\n  content?: string;\n  showTitle?: boolean;\n  showBg?: boolean;\n  bold?: boolean;\n  italic?: boolean;\n  align?: 'left' | 'center' | 'right';\n}\n\n/**\n * Text block widget — freeform text area for dashboard annotations and notes.\n * All editing is in-situ (no config modal). Supports title toggle, bold, italic, alignment.\n */\n@Component({\n  selector: 'ui-widget-text-block',\n  standalone: true,\n  imports: [CommonModule, NgClass],\n  host: { class: 'tw-block tw-h-full' },\n  template: `\n    <div\n      class=\"tw-h-full tw-flex tw-flex-col tw-rounded-2xl tw-overflow-hidden tw-group\n             tw-transition-all tw-duration-200\"\n      [ngClass]=\"showBg\n        ? 'tw-bg-[--surface-ground] dark:tw-bg-[--p-surface-800] tw-border tw-border-surface-200/50 dark:tw-border-surface-800/50 hover:tw-border-surface-300/60 dark:hover:tw-border-surface-700/60'\n        : ''\">\n\n      <!-- Content area -->\n      <div class=\"tw-flex-1 tw-flex tw-flex-col tw-px-6 tw-pt-5 tw-overflow-hidden\"\n           [class.tw-pb-4]=\"viewMode !== 'edit'\"\n           [class.tw-pb-1]=\"viewMode === 'edit'\">\n\n        <!-- Title (optional) — matches dashboard-widget-base title styling -->\n        @if (showTitle) {\n          @if (viewMode === 'edit') {\n            <input\n              type=\"text\"\n              [value]=\"title\"\n              class=\"tw-bg-transparent tw-border-0 tw-border-b tw-border-transparent tw-outline-none\n                     tw-m-0 tw-px-0 tw-py-0.5 tw-mb-2 tw-min-w-[60px]\n                     !tw-font-normal !tw-text-base tw-leading-normal tw-tracking-tight tw-cursor-text\n                     tw-text-surface-900 dark:tw-text-surface-50\n                     tw-transition-all tw-duration-150\n                     focus:tw-border-primary/50\"\n              [style.textAlign]=\"align\"\n              (blur)=\"onTitleBlur($event)\"\n              (keydown.enter)=\"$any($event.target).blur()\"\n              (keydown.escape)=\"onTitleEscape($event)\" />\n          } @else {\n            <h3 class=\"tw-m-0 tw-mb-2 !tw-text-base !tw-font-normal tw-tracking-tight\n                       tw-text-surface-900 dark:tw-text-surface-50 tw-truncate\"\n                [style.textAlign]=\"align\">\n              {{ title }}\n            </h3>\n          }\n        }\n\n        <!-- Body text -->\n        @if (viewMode === 'edit') {\n          <textarea\n            class=\"tw-flex-1 tw-w-full tw-bg-transparent tw-border-0 tw-outline-none tw-resize-none\n                   tw-m-0 tw-p-0 tw-text-sm tw-leading-relaxed tw-cursor-text\n                   tw-text-surface-700 dark:tw-text-surface-300\n                   placeholder:tw-text-surface-400 dark:placeholder:tw-text-surface-600\"\n            [style.textAlign]=\"align\"\n            [class.tw-font-bold]=\"bold\"\n            [class.tw-italic]=\"italic\"\n            [value]=\"content\"\n            placeholder=\"Type your notes here…\"\n            (blur)=\"onContentBlur($event)\"\n            (keydown.escape)=\"$any($event.target).blur()\"></textarea>\n        } @else {\n          <p class=\"tw-m-0 tw-text-sm tw-leading-relaxed tw-whitespace-pre-wrap tw-overflow-auto\n                    tw-text-surface-700 dark:tw-text-surface-300\"\n             [style.textAlign]=\"align\"\n             [class.tw-font-bold]=\"bold\"\n             [class.tw-italic]=\"italic\">{{ content || '\\u00A0' }}</p>\n        }\n      </div>\n\n      <!-- Toolbar — bottom, visible on hover in edit mode -->\n      @if (viewMode === 'edit') {\n        <div class=\"tw-flex tw-items-center tw-gap-0.5 tw-px-4 tw-pt-1 tw-pb-3\n                    tw-opacity-0 group-hover:tw-opacity-100 tw-transition-opacity tw-duration-200\">\n\n          <!-- Title toggle -->\n          <button type=\"button\"\n            class=\"tw-h-6 tw-px-1.5 tw-rounded tw-text-[11px] tw-font-medium tw-cursor-pointer tw-outline-none\n                   tw-transition-all tw-duration-150\n                   focus-visible:tw-ring-2 focus-visible:tw-ring-primary focus-visible:tw-ring-offset-1\"\n            [ngClass]=\"showTitle\n              ? 'tw-bg-primary/15 tw-text-primary'\n              : 'tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300 hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\"\n            title=\"Toggle title\"\n            (click)=\"onToggleTitle()\">\n            Tt\n          </button>\n\n          <!-- BG toggle -->\n          <button type=\"button\"\n            class=\"tw-w-6 tw-h-6 tw-rounded tw-flex tw-items-center tw-justify-center tw-cursor-pointer tw-outline-none\n                   tw-transition-all tw-duration-150\n                   focus-visible:tw-ring-2 focus-visible:tw-ring-primary focus-visible:tw-ring-offset-1\"\n            [ngClass]=\"showBg\n              ? 'tw-bg-primary/15 tw-text-primary'\n              : 'tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300 hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\"\n            title=\"Toggle background\"\n            (click)=\"onToggleBg()\">\n            <i class=\"pi pi-stop tw-text-[11px]\"></i>\n          </button>\n\n          <div class=\"tw-w-px tw-h-4 tw-bg-surface-300 dark:tw-bg-surface-600 tw-mx-1\"></div>\n\n          <!-- Bold -->\n          <button type=\"button\"\n            class=\"tw-h-6 tw-px-1.5 tw-rounded tw-text-[11px] tw-font-bold tw-cursor-pointer tw-outline-none\n                   tw-transition-all tw-duration-150\n                   focus-visible:tw-ring-2 focus-visible:tw-ring-primary focus-visible:tw-ring-offset-1\"\n            [ngClass]=\"bold\n              ? 'tw-bg-primary/15 tw-text-primary'\n              : 'tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300 hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\"\n            title=\"Bold\"\n            (click)=\"onToggleBold()\">\n            B\n          </button>\n\n          <!-- Italic -->\n          <button type=\"button\"\n            class=\"tw-h-6 tw-px-1.5 tw-rounded tw-text-[11px] tw-font-medium tw-italic tw-cursor-pointer tw-outline-none\n                   tw-transition-all tw-duration-150\n                   focus-visible:tw-ring-2 focus-visible:tw-ring-primary focus-visible:tw-ring-offset-1\"\n            [ngClass]=\"italic\n              ? 'tw-bg-primary/15 tw-text-primary'\n              : 'tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300 hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\"\n            title=\"Italic\"\n            (click)=\"onToggleItalic()\">\n            I\n          </button>\n\n          <div class=\"tw-w-px tw-h-4 tw-bg-surface-300 dark:tw-bg-surface-600 tw-mx-1\"></div>\n\n          <!-- Alignment -->\n          @for (opt of alignOptions; track opt.id) {\n            <button type=\"button\"\n              class=\"tw-w-6 tw-h-6 tw-rounded tw-flex tw-items-center tw-justify-center tw-cursor-pointer tw-outline-none\n                     tw-transition-all tw-duration-150\n                     focus-visible:tw-ring-2 focus-visible:tw-ring-primary focus-visible:tw-ring-offset-1\"\n              [ngClass]=\"align === opt.id\n                ? 'tw-bg-primary/15 tw-text-primary'\n                : 'tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300 hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700'\"\n              [title]=\"opt.label\"\n              (click)=\"onAlignChange(opt.id)\">\n              <i [class]=\"'pi ' + opt.icon + ' tw-text-[11px]'\"></i>\n            </button>\n          }\n\n          <!-- Spacer -->\n          <div class=\"tw-flex-1\"></div>\n\n          <!-- Delete -->\n          <button type=\"button\"\n            class=\"tw-w-6 tw-h-6 tw-rounded tw-flex tw-items-center tw-justify-center tw-flex-shrink-0\n                   tw-cursor-pointer tw-outline-none\n                   tw-text-surface-400 hover:tw-text-surface-600 dark:hover:tw-text-surface-300\n                   hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700\n                   tw-transition-all tw-duration-150\"\n            title=\"Remove text block\"\n            (click)=\"deleteEvent.emit()\">\n            <i class=\"pi pi-trash tw-text-[10px]\"></i>\n          </button>\n        </div>\n      }\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetTextBlockComponent {\n  @Input({ required: true }) title!: string;\n  @Input() viewMode: 'view' | 'edit' = 'view';\n  @Input() content = '';\n  @Input() showTitle = true;\n  @Input() showBg = true;\n  @Input() bold = false;\n  @Input() italic = false;\n  @Input() align: 'left' | 'center' | 'right' = 'left';\n\n  @Output() titleChange = new EventEmitter<string>();\n  @Output() contentChange = new EventEmitter<string>();\n  @Output() configChange = new EventEmitter<Partial<TextBlockConfig>>();\n  @Output() deleteEvent = new EventEmitter<void>();\n\n  readonly alignOptions = [\n    { id: 'left' as const, label: 'Align left', icon: 'pi-align-left' },\n    { id: 'center' as const, label: 'Align center', icon: 'pi-align-center' },\n    { id: 'right' as const, label: 'Align right', icon: 'pi-align-right' },\n  ];\n\n  onToggleTitle(): void {\n    this.showTitle = !this.showTitle;\n    this.configChange.emit({ showTitle: this.showTitle });\n  }\n\n  onToggleBg(): void {\n    this.showBg = !this.showBg;\n    this.configChange.emit({ showBg: this.showBg });\n  }\n\n  onToggleBold(): void {\n    this.bold = !this.bold;\n    this.configChange.emit({ bold: this.bold });\n  }\n\n  onToggleItalic(): void {\n    this.italic = !this.italic;\n    this.configChange.emit({ italic: this.italic });\n  }\n\n  onAlignChange(align: 'left' | 'center' | 'right'): void {\n    this.align = align;\n    this.configChange.emit({ align });\n  }\n\n  onTitleBlur(event: FocusEvent): void {\n    const input = event.target as HTMLInputElement;\n    const newTitle = input.value.trim();\n    if (newTitle && newTitle !== this.title) {\n      this.titleChange.emit(newTitle);\n    } else {\n      input.value = this.title;\n    }\n  }\n\n  onTitleEscape(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    input.value = this.title;\n    input.blur();\n  }\n\n  onContentBlur(event: FocusEvent): void {\n    const textarea = event.target as HTMLTextAreaElement;\n    const newContent = textarea.value;\n    if (newContent !== this.content) {\n      this.contentChange.emit(newContent);\n    }\n  }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\n\n/* ------------------------------------------------------------------ */\n/*  Alert data model                                                   */\n/* ------------------------------------------------------------------ */\n\nexport interface AlertRow {\n  id: number;\n  time: string;\n  alertType: string;\n  event: string;\n  alertScore: number;\n  fidelity: number;\n  severity: number;\n  sourceHost: string;\n  destinationHost: string;\n  app: string;\n}\n\n/* ------------------------------------------------------------------ */\n/*  Sample data generator — 50 realistic rows                          */\n/* ------------------------------------------------------------------ */\n\nconst ALERT_TEMPLATES: { type: string; scoreRange: [number, number]; sevRange: [number, number]; fidRange: [number, number]; srcHosts: string[]; dstHosts: string[] }[] = [\n  { type: 'Uncommon Process Anomaly',    scoreRange: [41, 42], sevRange: [30, 30], fidRange: [77, 85],  srcHosts: ['10.33.4.208'],                     dstHosts: [''] },\n  { type: 'ESET Protect (Threat Event)', scoreRange: [25, 25], sevRange: [25, 25], fidRange: [25, 25],  srcHosts: ['10.33.4.208'],                     dstHosts: ['10.33.4.208'] },\n  { type: 'Suspicious DNS Query',        scoreRange: [33, 38], sevRange: [30, 35], fidRange: [62, 72],  srcHosts: ['192.168.1.50', '10.0.0.15'],       dstHosts: ['8.8.8.8', '1.1.1.1'] },\n  { type: 'Brute Force Attempt',         scoreRange: [46, 52], sevRange: [40, 50], fidRange: [78, 88],  srcHosts: ['172.16.0.22'],                     dstHosts: ['10.33.4.105'] },\n  { type: 'Privilege Escalation',        scoreRange: [50, 58], sevRange: [50, 60], fidRange: [80, 90],  srcHosts: ['10.0.0.15'],                       dstHosts: [''] },\n  { type: 'Malware Detection',           scoreRange: [60, 72], sevRange: [60, 75], fidRange: [85, 95],  srcHosts: ['10.33.4.105', '192.168.1.50'],     dstHosts: [''] },\n  { type: 'Data Exfiltration Attempt',   scoreRange: [55, 65], sevRange: [55, 65], fidRange: [70, 82],  srcHosts: ['10.33.4.208'],                     dstHosts: ['203.0.113.42'] },\n];\n\n/** Deterministic pseudo-random using a seed */\nfunction seededRandom(seed: number): number {\n  const x = Math.sin(seed * 9301 + 49297) * 49297;\n  return x - Math.floor(x);\n}\n\nfunction randBetween(min: number, max: number, seed: number): number {\n  return Math.round(min + seededRandom(seed) * (max - min));\n}\n\nfunction pick<T>(arr: T[], seed: number): T {\n  return arr[Math.floor(seededRandom(seed) * arr.length)];\n}\n\nfunction pad(n: number): string {\n  return String(n).padStart(2, '0');\n}\n\nfunction formatDate(d: Date): string {\n  return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n}\n\nfunction generateAlerts(): AlertRow[] {\n  const alerts: AlertRow[] = [];\n  let timeMs = new Date(2026, 0, 21, 23, 59, 50).getTime();\n\n  // Distribution: ~30 Uncommon Process, ~5 ESET, ~4 DNS, ~3 Brute Force,\n  //               ~3 Priv Esc, ~3 Malware, ~2 Exfiltration\n  const typeSequence: number[] = [];\n  for (let i = 0; i < 30; i++) typeSequence.push(0); // Uncommon Process\n  for (let i = 0; i < 5; i++) typeSequence.push(1);  // ESET\n  for (let i = 0; i < 4; i++) typeSequence.push(2);  // DNS\n  for (let i = 0; i < 3; i++) typeSequence.push(3);  // Brute Force\n  for (let i = 0; i < 3; i++) typeSequence.push(4);  // Priv Esc\n  for (let i = 0; i < 3; i++) typeSequence.push(5);  // Malware\n  for (let i = 0; i < 2; i++) typeSequence.push(6);  // Exfiltration\n\n  // Shuffle deterministically\n  for (let i = typeSequence.length - 1; i > 0; i--) {\n    const j = Math.floor(seededRandom(i * 7 + 3) * (i + 1));\n    [typeSequence[i], typeSequence[j]] = [typeSequence[j], typeSequence[i]];\n  }\n\n  // First 9 rows: force Uncommon Process (matches screenshot)\n  for (let i = 0; i < 9; i++) typeSequence[i] = 0;\n  typeSequence[9] = 1; // Row 10: ESET (matches screenshot)\n\n  for (let i = 0; i < 50; i++) {\n    const tpl = ALERT_TEMPLATES[typeSequence[i] ?? 0];\n    const d = new Date(timeMs);\n    const time = formatDate(d);\n    timeMs -= 2000 + randBetween(0, 6000, i * 17 + 5); // 2–8 sec gaps\n\n    const alertScore = randBetween(tpl.scoreRange[0], tpl.scoreRange[1], i * 31 + 1);\n    const fid = randBetween(tpl.fidRange[0] * 100, tpl.fidRange[1] * 100, i * 53 + 2) / 100;\n    const severity = randBetween(tpl.sevRange[0], tpl.sevRange[1], i * 41 + 3);\n\n    alerts.push({\n      id: i + 1,\n      time,\n      alertType: tpl.type,\n      event: tpl.type,\n      alertScore,\n      fidelity: Number.parseFloat(fid.toFixed(2)),\n      severity,\n      sourceHost: pick(tpl.srcHosts, i * 67 + 11),\n      destinationHost: pick(tpl.dstHosts, i * 89 + 13),\n      app: '',\n    });\n  }\n\n  return alerts;\n}\n\n/* ------------------------------------------------------------------ */\n/*  Component                                                          */\n/* ------------------------------------------------------------------ */\n\n@Component({\n  selector: 'ui-widget-alert-table',\n  standalone: true,\n  host: { class: 'tw-block tw-h-full tw-min-h-0' },\n  imports: [CommonModule, FormsModule, TableModule, ButtonModule, InputTextModule],\n  template: `\n    <div class=\"tw-flex tw-flex-col tw-h-full tw-min-h-0\">\n\n      <!-- Toolbar -->\n      <div class=\"tw-flex tw-items-center tw-gap-3 tw-pb-2 tw-flex-none tw-flex-wrap\">\n\n        <!-- Columns toggle (left) -->\n        <button pButton\n                icon=\"pi pi-th-large\"\n                label=\"Columns\"\n                [text]=\"true\"\n                severity=\"info\"\n                size=\"small\"\n                aria-label=\"Columns\"></button>\n\n        <!-- Result count -->\n        <span class=\"tw-text-xs tw-text-surface-400 tw-tabular-nums tw-whitespace-nowrap\">\n          1 &ndash; 50 of 8,116 Results\n        </span>\n\n        <!-- Refresh -->\n        <button pButton\n                icon=\"pi pi-refresh\"\n                [text]=\"true\"\n                [rounded]=\"true\"\n                severity=\"secondary\"\n                size=\"small\"\n                aria-label=\"Refresh\"\n                class=\"!tw-w-7 !tw-h-7 !tw-p-0\"></button>\n\n        <!-- Spacer -->\n        <div class=\"tw-flex-1\"></div>\n\n        <!-- Search -->\n        <div class=\"tw-relative\">\n          <input pInputText\n                 type=\"text\"\n                 placeholder=\"Search page content\"\n                 class=\"tw-text-xs\"\n                 style=\"width: 180px; padding-right: 2.25rem\" />\n          <i class=\"pi pi-search tw-absolute tw-right-3 tw-top-1/2 tw--translate-y-1/2 tw-text-surface-400 tw-text-xs\"></i>\n        </div>\n\n        <!-- Export CSV -->\n        <button pButton\n                icon=\"pi pi-download\"\n                label=\"Export CSV\"\n                [outlined]=\"true\"\n                severity=\"success\"\n                size=\"small\"\n                aria-label=\"Export CSV\"></button>\n\n        <!-- Select View -->\n        <button pButton\n                icon=\"pi pi-eye\"\n                label=\"Select View\"\n                [outlined]=\"true\"\n                severity=\"info\"\n                size=\"small\"\n                aria-label=\"Select View\"></button>\n      </div>\n\n      <!-- Table -->\n      <div class=\"tw-flex-1 tw-min-h-0\">\n        <p-table\n          [value]=\"alerts\"\n          [scrollable]=\"true\"\n          scrollHeight=\"flex\"\n          [(selection)]=\"selectedAlerts\"\n          dataKey=\"id\"\n          sortField=\"time\"\n          [sortOrder]=\"-1\"\n          [tableStyle]=\"{ 'min-width': '80rem' }\"\n          size=\"small\">\n\n          <!-- Header -->\n          <ng-template #header>\n            <tr>\n              <th style=\"width: 3rem\">\n                <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n              </th>\n              <th style=\"width: 3rem\"></th>\n              <th pSortableColumn=\"time\" style=\"width: 11rem\" class=\"tw-text-xs\">\n                Time <p-sortIcon field=\"time\"></p-sortIcon>\n              </th>\n              <th style=\"min-width: 13rem\" class=\"tw-text-xs\">Alert Type</th>\n              <th style=\"min-width: 13rem\" class=\"tw-text-xs\">Event</th>\n              <th pSortableColumn=\"alertScore\" style=\"width: 7rem\" class=\"tw-text-xs\">\n                Alert Score <p-sortIcon field=\"alertScore\"></p-sortIcon>\n              </th>\n              <th pSortableColumn=\"fidelity\" style=\"width: 6rem\" class=\"tw-text-xs\">\n                Fidelity <p-sortIcon field=\"fidelity\"></p-sortIcon>\n              </th>\n              <th pSortableColumn=\"severity\" style=\"width: 6rem\" class=\"tw-text-xs\">\n                Severity <p-sortIcon field=\"severity\"></p-sortIcon>\n              </th>\n              <th style=\"min-width: 8rem\" class=\"tw-text-xs\">Source Host</th>\n              <th style=\"min-width: 9rem\" class=\"tw-text-xs\">Destination Host</th>\n              <th style=\"width: 4rem\" class=\"tw-text-xs\">App</th>\n              <th style=\"width: 5.5rem\" class=\"tw-text-xs\">Actions</th>\n            </tr>\n          </ng-template>\n\n          <!-- Body -->\n          <ng-template #body let-alert let-expanded=\"expanded\">\n            <tr>\n              <td>\n                <p-tableCheckbox [value]=\"alert\"></p-tableCheckbox>\n              </td>\n              <td>\n                <button pButton type=\"button\"\n                        [pRowToggler]=\"alert\"\n                        [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\n                        [text]=\"true\"\n                        [rounded]=\"true\"\n                        severity=\"secondary\"\n                        size=\"small\"\n                        [attr.aria-label]=\"expanded ? 'Collapse row' : 'Expand row'\"\n                        class=\"!tw-w-6 !tw-h-6 !tw-p-0\"></button>\n              </td>\n              <td class=\"tw-text-xs tw-whitespace-nowrap\">{{ alert.time }}</td>\n              <td class=\"tw-text-xs\">{{ alert.alertType }}</td>\n              <td class=\"tw-text-xs\">{{ alert.event }}</td>\n              <td>\n                <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-min-w-[28px] tw-h-[22px]\n                             tw-px-2 tw-rounded-full tw-text-xs tw-font-semibold tw-text-white\"\n                      [ngClass]=\"getScoreBadgeClass(alert.alertScore)\">\n                  {{ alert.alertScore }}\n                </span>\n              </td>\n              <td class=\"tw-text-xs tw-font-medium\"\n                  [ngStyle]=\"{ color: getFidelityColor(alert.fidelity) }\">\n                {{ alert.fidelity }}\n              </td>\n              <td>\n                <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-min-w-[28px] tw-h-[22px]\n                             tw-px-2 tw-rounded-full tw-text-xs tw-font-semibold tw-text-white\"\n                      [ngClass]=\"getSeverityBadgeClass(alert.severity)\">\n                  {{ alert.severity }}\n                </span>\n              </td>\n              <td class=\"tw-text-xs\">{{ alert.sourceHost }}</td>\n              <td class=\"tw-text-xs\">{{ alert.destinationHost }}</td>\n              <td class=\"tw-text-xs\">{{ alert.app }}</td>\n              <td>\n                <div class=\"tw-flex tw-items-center tw-gap-0\">\n                  <button pButton icon=\"pi pi-info-circle\"\n                          [text]=\"true\" [rounded]=\"true\" severity=\"info\" size=\"small\"\n                          aria-label=\"Alert details\"\n                          class=\"!tw-w-6 !tw-h-6 !tw-p-0\"></button>\n                  <button pButton icon=\"pi pi-search\"\n                          [text]=\"true\" [rounded]=\"true\" severity=\"secondary\" size=\"small\"\n                          aria-label=\"Investigate alert\"\n                          class=\"!tw-w-6 !tw-h-6 !tw-p-0\"></button>\n                </div>\n              </td>\n            </tr>\n          </ng-template>\n\n          <!-- Expanded row -->\n          <ng-template #expandedrow let-alert>\n            <tr>\n              <td colspan=\"12\">\n                <div class=\"tw-p-4 tw-text-xs tw-text-surface-400\">\n                  <div class=\"tw-font-medium tw-text-surface-300 tw-mb-2\">\n                    Alert Details &mdash; ID #{{ alert.id }}\n                  </div>\n                  <div class=\"tw-grid tw-grid-cols-4 tw-gap-x-6 tw-gap-y-2\">\n                    <div><span class=\"tw-text-surface-500\">Type:</span> {{ alert.alertType }}</div>\n                    <div><span class=\"tw-text-surface-500\">Source:</span> {{ alert.sourceHost }}</div>\n                    <div><span class=\"tw-text-surface-500\">Destination:</span> {{ alert.destinationHost || '—' }}</div>\n                    <div><span class=\"tw-text-surface-500\">Score:</span> {{ alert.alertScore }}</div>\n                    <div><span class=\"tw-text-surface-500\">Fidelity:</span> {{ alert.fidelity }}</div>\n                    <div><span class=\"tw-text-surface-500\">Severity:</span> {{ alert.severity }}</div>\n                    <div><span class=\"tw-text-surface-500\">Time:</span> {{ alert.time }}</div>\n                    <div><span class=\"tw-text-surface-500\">App:</span> {{ alert.app || '—' }}</div>\n                  </div>\n                </div>\n              </td>\n            </tr>\n          </ng-template>\n\n        </p-table>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetAlertTableComponent {\n  readonly alerts: AlertRow[] = generateAlerts();\n  selectedAlerts: AlertRow[] = [];\n\n  /** Alert Score badge color */\n  getScoreBadgeClass(score: number): string {\n    if (score >= 45) return 'tw-bg-red-500';\n    if (score >= 40) return 'tw-bg-amber-500';\n    if (score >= 30) return 'tw-bg-blue-500';\n    return 'tw-bg-surface-500';\n  }\n\n  /** Severity badge color */\n  getSeverityBadgeClass(severity: number): string {\n    if (severity >= 60) return 'tw-bg-red-500';\n    if (severity >= 40) return 'tw-bg-orange-500';\n    if (severity >= 25) return 'tw-bg-emerald-500';\n    return 'tw-bg-surface-500';\n  }\n\n  /** Fidelity text color (blue tint for high values) */\n  getFidelityColor(fidelity: number): string {\n    if (fidelity >= 70) return '#60a5fa'; // blue-400\n    if (fidelity >= 50) return '#93c5fd'; // blue-300\n    return '#94a3b8'; // slate-400\n  }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableModule } from 'primeng/table';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport interface IncidentRow {\n  id: string;\n  severity: 'Critical' | 'High' | 'Medium' | 'Low';\n  title: string;\n  entities: { type: 'host' | 'user' | 'ip'; value: string }[];\n  mitreTechnique: string;\n  mitreId: string;\n  riskScore: number;\n  createdTime: Date;\n  assignedAnalyst: string;\n  status: 'Open' | 'In Progress' | 'Escalated' | 'Resolved';\n  alertCount: number;\n}\n\nfunction seededRandom(seed: number): number {\n  const x = Math.sin(seed * 9301 + 49297) * 49297;\n  return x - Math.floor(x);\n}\n\nfunction pick<T>(arr: T[], seed: number): T {\n  return arr[Math.floor(seededRandom(seed) * arr.length)];\n}\n\nfunction randBetween(min: number, max: number, seed: number): number {\n  return Math.round(min + seededRandom(seed) * (max - min));\n}\n\nfunction generateIncidents(): IncidentRow[] {\n  const templates: {\n    title: string; severity: IncidentRow['severity']; technique: string; mitreId: string;\n    hosts: string[]; users: string[]; ips: string[]; scoreRange: [number, number];\n  }[] = [\n    { title: 'Credential Dumping via LSASS', severity: 'Critical', technique: 'OS Credential Dumping', mitreId: 'T1003',\n      hosts: ['dc01.corp.local', 'ws-fin-042'], users: ['admin.jsmith', 'svc-backup'], ips: ['10.0.1.15', '10.0.1.20'], scoreRange: [88, 98] },\n    { title: 'Lateral Movement via PsExec', severity: 'Critical', technique: 'Remote Services', mitreId: 'T1021',\n      hosts: ['web-prod-01', 'db-replica-03'], users: ['admin.jsmith'], ips: ['10.0.2.34', '10.0.2.50'], scoreRange: [85, 95] },\n    { title: 'Suspicious PowerShell Execution', severity: 'High', technique: 'Command and Scripting', mitreId: 'T1059',\n      hosts: ['ws-dev-017'], users: ['dev.mchen'], ips: ['192.168.1.100'], scoreRange: [72, 84] },\n    { title: 'Kerberoasting Activity Detected', severity: 'High', technique: 'Steal or Forge Kerberos', mitreId: 'T1558',\n      hosts: ['dc01.corp.local'], users: ['svc-sql', 'svc-exchange'], ips: ['10.0.1.15'], scoreRange: [70, 82] },\n    { title: 'Data Exfiltration to External IP', severity: 'Critical', technique: 'Exfiltration Over C2', mitreId: 'T1041',\n      hosts: ['ws-fin-042'], users: ['analyst.klee'], ips: ['203.0.113.50', '198.51.100.14'], scoreRange: [90, 99] },\n    { title: 'Brute Force on VPN Gateway', severity: 'High', technique: 'Brute Force', mitreId: 'T1110',\n      hosts: ['vpn-gateway'], users: [], ips: ['185.220.101.1', '91.219.236.222'], scoreRange: [65, 78] },\n    { title: 'Malicious DLL Side-Loading', severity: 'High', technique: 'Hijack Execution Flow', mitreId: 'T1574',\n      hosts: ['ws-mktg-003'], users: ['user.bwilson'], ips: ['172.16.0.50'], scoreRange: [68, 80] },\n    { title: 'Unusual DNS Tunneling Activity', severity: 'Medium', technique: 'Application Layer Protocol', mitreId: 'T1071',\n      hosts: ['jump-host-02'], users: ['admin.ops'], ips: ['10.10.10.1', '8.8.8.8'], scoreRange: [52, 68] },\n    { title: 'Privilege Escalation via UAC Bypass', severity: 'High', technique: 'Abuse Elevation Control', mitreId: 'T1548',\n      hosts: ['ws-dev-017', 'ws-fin-042'], users: ['dev.mchen'], ips: ['192.168.1.100'], scoreRange: [74, 86] },\n    { title: 'Scheduled Task Persistence', severity: 'Medium', technique: 'Scheduled Task/Job', mitreId: 'T1053',\n      hosts: ['mail-exchange'], users: ['svc-backup'], ips: ['10.0.3.10'], scoreRange: [48, 62] },\n    { title: 'Ransomware Encryption Behavior', severity: 'Critical', technique: 'Data Encrypted for Impact', mitreId: 'T1486',\n      hosts: ['fs-share-01', 'fs-share-02'], users: [], ips: ['10.0.4.5'], scoreRange: [92, 99] },\n    { title: 'Suspicious WMI Remote Execution', severity: 'Medium', technique: 'Windows Management Instrumentation', mitreId: 'T1047',\n      hosts: ['db-replica-03'], users: ['admin.jsmith'], ips: ['10.0.2.34'], scoreRange: [55, 68] },\n    { title: 'Pass-the-Hash Detected', severity: 'High', technique: 'Use Alternate Auth Material', mitreId: 'T1550',\n      hosts: ['dc01.corp.local'], users: ['admin.jsmith', 'svc-sql'], ips: ['10.0.1.15', '10.0.1.30'], scoreRange: [78, 90] },\n    { title: 'Cobalt Strike Beacon Activity', severity: 'Critical', technique: 'Ingress Tool Transfer', mitreId: 'T1105',\n      hosts: ['ws-mktg-003', 'ws-dev-017'], users: ['user.bwilson'], ips: ['185.220.101.1'], scoreRange: [88, 98] },\n    { title: 'Cloud API Key Abuse', severity: 'Medium', technique: 'Valid Accounts', mitreId: 'T1078',\n      hosts: ['ds-cloud-aws'], users: ['svc-deploy'], ips: ['52.94.76.0'], scoreRange: [50, 65] },\n    { title: 'Internal Port Scanning Activity', severity: 'Medium', technique: 'Network Service Discovery', mitreId: 'T1046',\n      hosts: ['ws-dev-017'], users: ['dev.mchen'], ips: ['192.168.1.100'], scoreRange: [45, 60] },\n    { title: 'Phishing Link Click with Payload', severity: 'High', technique: 'Phishing', mitreId: 'T1566',\n      hosts: ['ws-hr-011'], users: ['user.apark'], ips: ['192.168.5.22'], scoreRange: [70, 82] },\n    { title: 'Anomalous Service Account Login', severity: 'Medium', technique: 'Valid Accounts', mitreId: 'T1078',\n      hosts: ['dc01.corp.local'], users: ['svc-exchange'], ips: ['10.0.1.15'], scoreRange: [42, 58] },\n  ];\n\n  const analysts = ['Sarah Chen', 'Marcus Wright', 'Priya Patel', 'James O\\'Brien', 'Lin Wei', 'Alex Moreno', 'Unassigned'];\n  const statuses: IncidentRow['status'][] = ['Open', 'In Progress', 'Escalated', 'Resolved'];\n  const incidents: IncidentRow[] = [];\n  let timeMs = new Date(2026, 1, 19, 14, 35, 0).getTime();\n\n  for (let i = 0; i < templates.length; i++) {\n    const tpl = templates[i];\n    const entities: IncidentRow['entities'] = [];\n    for (const h of tpl.hosts) entities.push({ type: 'host', value: h });\n    for (const u of tpl.users) entities.push({ type: 'user', value: u });\n    for (const ip of tpl.ips) entities.push({ type: 'ip', value: ip });\n\n    incidents.push({\n      id: `INC-${String(2400 + i).padStart(4, '0')}`,\n      severity: tpl.severity,\n      title: tpl.title,\n      entities,\n      mitreTechnique: tpl.technique,\n      mitreId: tpl.mitreId,\n      riskScore: randBetween(tpl.scoreRange[0], tpl.scoreRange[1], i * 31 + 7),\n      createdTime: new Date(timeMs),\n      assignedAnalyst: pick(analysts, i * 67 + 3),\n      status: i < 6 ? pick(['Open', 'In Progress', 'Escalated'] as IncidentRow['status'][], i * 11) : pick(statuses, i * 43),\n      alertCount: randBetween(2, 24, i * 53 + 9),\n    });\n    timeMs -= randBetween(180_000, 3_600_000, i * 89 + 5);\n  }\n\n  return incidents.sort((a, b) => {\n    const sev = { Critical: 0, High: 1, Medium: 2, Low: 3 };\n    return sev[a.severity] - sev[b.severity] || b.riskScore - a.riskScore;\n  });\n}\n\n@Component({\n  selector: 'ui-widget-incident-table',\n  standalone: true,\n  host: { class: 'tw-block' },\n  imports: [CommonModule, TableModule, ButtonModule, TooltipModule],\n  template: `\n    <div class=\"tw-flex tw-flex-col\">\n      <p-table\n        [value]=\"incidents\"\n        [scrollable]=\"true\"\n        [sortField]=\"'riskScore'\"\n        [sortOrder]=\"-1\"\n        [rowHover]=\"true\"\n        [tableStyle]=\"{ 'min-width': '70rem' }\"\n        size=\"small\"\n        dataKey=\"id\">\n\n        <ng-template #header>\n          <tr>\n            <th pSortableColumn=\"severity\" style=\"width: 7rem\" class=\"tw-text-xs\">\n              Severity <p-sortIcon field=\"severity\"></p-sortIcon>\n            </th>\n            <th style=\"min-width: 18rem\" class=\"tw-text-xs\">Incident</th>\n            <th style=\"min-width: 14rem\" class=\"tw-text-xs\">Entities</th>\n            <th style=\"min-width: 10rem\" class=\"tw-text-xs\">MITRE Technique</th>\n            <th pSortableColumn=\"riskScore\" style=\"width: 7rem\" class=\"tw-text-xs\">\n              Risk <p-sortIcon field=\"riskScore\"></p-sortIcon>\n            </th>\n            <th pSortableColumn=\"createdTime\" style=\"width: 9rem\" class=\"tw-text-xs\">\n              Created <p-sortIcon field=\"createdTime\"></p-sortIcon>\n            </th>\n            <th style=\"width: 9rem\" class=\"tw-text-xs\">Analyst</th>\n            <th style=\"width: 4rem\"></th>\n          </tr>\n        </ng-template>\n\n        <ng-template #body let-row>\n          <tr class=\"tw-cursor-pointer\" (click)=\"onRowClick(row)\">\n            <td>\n              <span class=\"tw-inline-flex tw-items-center tw-gap-1.5 tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-semibold tw-text-white\"\n                    [ngClass]=\"severityClass(row.severity)\">\n                {{ row.severity }}\n              </span>\n            </td>\n            <td>\n              <div class=\"tw-flex tw-flex-col tw-gap-0.5\">\n                <span class=\"tw-text-sm tw-font-medium tw-text-surface-900 dark:tw-text-surface-50\">\n                  {{ row.title }}\n                </span>\n                <span class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400\">\n                  {{ row.id }} &middot; {{ row.alertCount }} alerts\n                </span>\n              </div>\n            </td>\n            <td>\n              <div class=\"tw-flex tw-flex-wrap tw-gap-1\">\n                <span *ngFor=\"let e of $any(row.entities | slice:0:3)\"\n                      class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-1.5 tw-py-0.5 tw-rounded tw-text-xs\n                             tw-bg-surface-100 dark:tw-bg-surface-800 tw-text-surface-700 dark:tw-text-surface-300\">\n                  <i [class]=\"entityIcon(e.type)\" class=\"tw-text-[10px]\"></i>\n                  {{ e.value }}\n                </span>\n                <span *ngIf=\"row.entities.length > 3\"\n                      class=\"tw-text-xs tw-text-surface-500 tw-self-center\">\n                  +{{ row.entities.length - 3 }}\n                </span>\n              </div>\n            </td>\n            <td>\n              <div class=\"tw-flex tw-flex-col tw-gap-0.5\">\n                <span class=\"tw-text-xs tw-font-medium tw-text-surface-800 dark:tw-text-surface-200\">\n                  {{ row.mitreTechnique }}\n                </span>\n                <span class=\"tw-text-xs tw-text-surface-400\">\n                  {{ row.mitreId }}\n                </span>\n              </div>\n            </td>\n            <td>\n              <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-min-w-[32px] tw-h-[22px]\n                           tw-px-2 tw-rounded-full tw-text-xs tw-font-bold tw-text-white\"\n                    [ngClass]=\"riskScoreClass(row.riskScore)\">\n                {{ row.riskScore }}\n              </span>\n            </td>\n            <td class=\"tw-text-xs tw-text-surface-600 dark:tw-text-surface-400 tw-whitespace-nowrap\">\n              {{ relativeTime(row.createdTime) }}\n            </td>\n            <td>\n              <span class=\"tw-text-xs tw-font-medium\"\n                    [ngClass]=\"row.assignedAnalyst === 'Unassigned'\n                      ? 'tw-text-surface-400 dark:tw-text-surface-500 tw-italic'\n                      : 'tw-text-surface-700 dark:tw-text-surface-300'\">\n                {{ row.assignedAnalyst }}\n              </span>\n            </td>\n            <td>\n              <button pButton\n                      icon=\"pi pi-arrow-right\"\n                      [text]=\"true\"\n                      [rounded]=\"true\"\n                      severity=\"secondary\"\n                      size=\"small\"\n                      pTooltip=\"Investigate\"\n                      tooltipPosition=\"left\"\n                      class=\"!tw-w-7 !tw-h-7 !tw-p-0\"\n                      (click)=\"$event.stopPropagation(); onRowClick(row)\">\n              </button>\n            </td>\n          </tr>\n        </ng-template>\n\n      </p-table>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetIncidentTableComponent {\n  @Input() incidents: IncidentRow[] = generateIncidents();\n  @Input() isLoading = false;\n  @Output() incidentClick = new EventEmitter<string>();\n\n  severityClass(severity: string): string {\n    switch (severity) {\n      case 'Critical': return 'tw-bg-red-500';\n      case 'High': return 'tw-bg-orange-500';\n      case 'Medium': return 'tw-bg-amber-500';\n      case 'Low': return 'tw-bg-blue-500';\n      default: return 'tw-bg-surface-500';\n    }\n  }\n\n  riskScoreClass(score: number): string {\n    if (score >= 85) return 'tw-bg-red-500';\n    if (score >= 70) return 'tw-bg-orange-500';\n    if (score >= 50) return 'tw-bg-amber-500';\n    return 'tw-bg-blue-500';\n  }\n\n  entityIcon(type: string): string {\n    switch (type) {\n      case 'host': return 'pi pi-server';\n      case 'user': return 'pi pi-user';\n      case 'ip': return 'pi pi-globe';\n      default: return 'pi pi-circle';\n    }\n  }\n\n  relativeTime(date: Date): string {\n    const now = new Date();\n    const diffMs = now.getTime() - date.getTime();\n    const mins = Math.floor(diffMs / 60_000);\n    if (mins < 1) return 'Just now';\n    if (mins < 60) return `${mins}m ago`;\n    const hours = Math.floor(mins / 60);\n    if (hours < 24) return `${hours}h ago`;\n    const days = Math.floor(hours / 24);\n    return `${days}d ago`;\n  }\n\n  onRowClick(row: IncidentRow): void {\n    this.incidentClick.emit(row.id);\n  }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface RankedListItem {\n  rank: number;\n  label: string;\n  value: number;\n  secondaryLabel?: string;\n  icon?: string;\n  trend?: 'up' | 'down' | 'neutral';\n}\n\n@Component({\n  selector: 'ui-widget-ranked-list',\n  standalone: true,\n  imports: [CommonModule],\n  host: { class: 'tw-block' },\n  template: `\n    <div class=\"tw-flex tw-flex-col\">\n      <div *ngFor=\"let item of displayItems; trackBy: trackByRank\"\n           class=\"tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5\n                  tw-cursor-pointer tw-transition-colors tw-rounded-lg\n                  hover:tw-bg-surface-100 dark:hover:tw-bg-surface-800\"\n           role=\"button\"\n           tabindex=\"0\"\n           (click)=\"onItemClick(item)\"\n           (keydown.enter)=\"onItemClick(item)\"\n           (keydown.space)=\"onItemClick(item); $event.preventDefault()\"\n           [attr.aria-label]=\"'View ' + item.label\">\n\n        <!-- Rank -->\n        <span class=\"tw-w-5 tw-text-xs tw-font-bold tw-text-surface-400 dark:tw-text-surface-500 tw-text-right tw-tabular-nums tw-flex-shrink-0\">\n          {{ item.rank }}\n        </span>\n\n        <!-- Icon -->\n        <i *ngIf=\"item.icon\"\n           [class]=\"item.icon\"\n           class=\"tw-text-sm tw-text-surface-500 dark:tw-text-surface-400 tw-flex-shrink-0\">\n        </i>\n\n        <!-- Label + secondary -->\n        <div class=\"tw-flex-1 tw-min-w-0\">\n          <div class=\"tw-text-sm tw-font-medium tw-text-surface-800 dark:tw-text-surface-200 tw-truncate\">\n            {{ item.label }}\n          </div>\n          <div *ngIf=\"item.secondaryLabel\"\n               class=\"tw-text-xs tw-text-surface-500 dark:tw-text-surface-400 tw-truncate\">\n            {{ item.secondaryLabel }}\n          </div>\n        </div>\n\n        <!-- Inline bar (proportion of max value) -->\n        <div *ngIf=\"showBar\" class=\"tw-w-20 tw-h-1.5 tw-rounded-full tw-bg-surface-200 dark:tw-bg-surface-700 tw-flex-shrink-0 tw-overflow-hidden\">\n          <div class=\"tw-h-full tw-rounded-full tw-bg-primary tw-transition-all\"\n               [style.width.%]=\"barWidth(item.value)\">\n          </div>\n        </div>\n\n        <!-- Value -->\n        <span class=\"tw-text-sm tw-font-semibold tw-text-surface-900 dark:tw-text-surface-50 tw-tabular-nums tw-flex-shrink-0 tw-min-w-[2.5rem] tw-text-right\">\n          {{ formatValue(item.value) }}\n        </span>\n\n        <!-- Trend -->\n        <i *ngIf=\"item.trend && item.trend !== 'neutral'\"\n           class=\"tw-text-xs tw-flex-shrink-0\"\n           [ngClass]=\"{\n             'pi pi-arrow-up tw-text-red-500': item.trend === 'up',\n             'pi pi-arrow-down tw-text-emerald-500': item.trend === 'down'\n           }\">\n        </i>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetRankedListComponent {\n  @Input() items: RankedListItem[] = [];\n  @Input() maxItems = 10;\n  @Input() showBar = true;\n  @Output() itemClick = new EventEmitter<RankedListItem>();\n\n  get displayItems(): RankedListItem[] {\n    return this.items.slice(0, this.maxItems);\n  }\n\n  private get maxValue(): number {\n    if (!this.items.length) return 1;\n    return Math.max(...this.items.map(i => i.value));\n  }\n\n  barWidth(value: number): number {\n    return (value / this.maxValue) * 100;\n  }\n\n  formatValue(value: number): string {\n    if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;\n    if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`;\n    return value.toLocaleString();\n  }\n\n  trackByRank(_index: number, item: RankedListItem): number {\n    return item.rank;\n  }\n\n  onItemClick(item: RankedListItem): void {\n    this.itemClick.emit(item);\n  }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n  selector: 'ui-widget-ai-summary',\n  standalone: true,\n  imports: [CommonModule, ButtonModule],\n  host: { class: 'tw-block' },\n  template: `\n    <!-- Loading state -->\n    <div *ngIf=\"isLoading\" class=\"tw-flex tw-flex-col tw-gap-4 tw-p-5\">\n      <div class=\"tw-flex tw-items-center tw-gap-3\">\n        <i class=\"pi pi-spin pi-spinner tw-text-primary tw-text-lg\"></i>\n        <span class=\"tw-text-sm tw-text-surface-500\">Analyzing threat landscape...</span>\n      </div>\n      <div class=\"tw-space-y-2\">\n        <div class=\"tw-h-4 tw-rounded tw-bg-surface-200 dark:tw-bg-surface-700 tw-animate-pulse tw-w-full\"></div>\n        <div class=\"tw-h-4 tw-rounded tw-bg-surface-200 dark:tw-bg-surface-700 tw-animate-pulse tw-w-3/4\"></div>\n        <div class=\"tw-h-4 tw-rounded tw-bg-surface-200 dark:tw-bg-surface-700 tw-animate-pulse tw-w-5/6\"></div>\n      </div>\n    </div>\n\n    <!-- Content -->\n    <div *ngIf=\"!isLoading\" class=\"tw-flex tw-flex-col tw-gap-5 tw-p-5\">\n\n      <!-- Header -->\n      <div class=\"tw-flex tw-items-start tw-justify-between tw-gap-4\">\n        <div class=\"tw-flex tw-items-center tw-gap-2.5\">\n          <div class=\"tw-w-8 tw-h-8 tw-rounded-lg tw-bg-primary/10 tw-flex tw-items-center tw-justify-center tw-flex-shrink-0\">\n            <i class=\"pi pi-sparkles tw-text-primary tw-text-sm\"></i>\n          </div>\n          <div>\n            <div class=\"tw-text-sm tw-font-semibold tw-text-surface-900 dark:tw-text-surface-50\">AI Threat Analysis</div>\n            <div class=\"tw-text-xs tw-text-surface-500\">Updated {{ lastUpdated }}</div>\n          </div>\n        </div>\n\n        <!-- Confidence -->\n        <div class=\"tw-flex tw-items-center tw-gap-2 tw-flex-shrink-0\">\n          <span class=\"tw-text-xs tw-font-medium tw-text-surface-500\">Confidence</span>\n          <div class=\"tw-flex tw-items-center tw-gap-1.5\">\n            <div class=\"tw-w-16 tw-h-1.5 tw-rounded-full tw-bg-surface-200 dark:tw-bg-surface-700 tw-overflow-hidden\">\n              <div class=\"tw-h-full tw-rounded-full tw-transition-all\"\n                   [ngClass]=\"confidenceBarClass\"\n                   [style.width.%]=\"confidence\">\n              </div>\n            </div>\n            <span class=\"tw-text-xs tw-font-bold tw-tabular-nums\"\n                  [ngClass]=\"confidenceTextClass\">\n              {{ confidence }}%\n            </span>\n          </div>\n        </div>\n      </div>\n\n      <!-- Summary -->\n      <div class=\"tw-text-sm tw-leading-relaxed tw-text-surface-700 dark:tw-text-surface-300 tw-border-l-2 tw-border-primary/30 tw-pl-3\">\n        {{ summary }}\n      </div>\n\n      <!-- Two columns: Suggestions + Actions -->\n      <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-5\">\n\n        <!-- Suggested starting points -->\n        <div *ngIf=\"suggestions.length\">\n          <div class=\"tw-text-xs tw-font-semibold tw-text-surface-500 dark:tw-text-surface-400 tw-uppercase tw-tracking-wide tw-mb-2\">\n            Investigation Starting Points\n          </div>\n          <ul class=\"tw-space-y-1.5\">\n            <li *ngFor=\"let suggestion of suggestions\"\n                class=\"tw-flex tw-items-start tw-gap-2 tw-text-sm tw-text-surface-700 dark:tw-text-surface-300\">\n              <i class=\"pi pi-chevron-right tw-text-[10px] tw-text-primary tw-mt-1 tw-flex-shrink-0\"></i>\n              <span>{{ suggestion }}</span>\n            </li>\n          </ul>\n        </div>\n\n        <!-- Recommended actions -->\n        <div *ngIf=\"actions.length\">\n          <div class=\"tw-text-xs tw-font-semibold tw-text-surface-500 dark:tw-text-surface-400 tw-uppercase tw-tracking-wide tw-mb-2\">\n            Recommended Actions\n          </div>\n          <div class=\"tw-flex tw-flex-wrap tw-gap-2\">\n            <button *ngFor=\"let action of actions\"\n                    pButton\n                    [label]=\"action\"\n                    [outlined]=\"true\"\n                    severity=\"info\"\n                    size=\"small\"\n                    (click)=\"onAction(action)\">\n            </button>\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetAiSummaryComponent {\n  @Input() summary = '';\n  @Input() confidence = 0;\n  @Input() suggestions: string[] = [];\n  @Input() actions: string[] = [];\n  @Input() isLoading = false;\n  @Input() lastUpdated = '2 min ago';\n  @Output() actionClick = new EventEmitter<string>();\n\n  get confidenceBarClass(): string {\n    if (this.confidence >= 80) return 'tw-bg-emerald-500';\n    if (this.confidence >= 60) return 'tw-bg-blue-500';\n    if (this.confidence >= 40) return 'tw-bg-amber-500';\n    return 'tw-bg-red-500';\n  }\n\n  get confidenceTextClass(): string {\n    if (this.confidence >= 80) return 'tw-text-emerald-600 dark:tw-text-emerald-400';\n    if (this.confidence >= 60) return 'tw-text-blue-600 dark:tw-text-blue-400';\n    if (this.confidence >= 40) return 'tw-text-amber-600 dark:tw-text-amber-400';\n    return 'tw-text-red-600 dark:tw-text-red-400';\n  }\n\n  onAction(action: string): void {\n    this.actionClick.emit(action);\n  }\n}\n","/**\n * Dashboard domain models and types\n */\n\nexport type DashboardViewMode = 'view' | 'edit';\nexport type DashboardLayoutMode = 'row-based' | 'freeform';\nexport type DashboardViewFrame = 'auto' | 'standard' | 'wide' | 'tablet' | 'mobile' | 'report';\n\nexport type WidgetType =\n  | 'counter'\n  | 'chart-area'\n  | 'chart-line'\n  | 'chart-bar'\n  | 'chart-donut'\n  | 'chart-pie'\n  | 'chart-heatmap'\n  | 'table'\n  | 'list';\n\nexport interface WidgetLayout {\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n  minW?: number;\n  minH?: number;\n  maxW?: number;\n  maxH?: number;\n}\n\nexport interface WidgetDataConfig {\n  dataSource?: string;\n  query?: string;\n  filters?: Record<string, any>;\n  groupBy?: string;\n  aggregation?: string;\n  limit?: number;\n  refreshInterval?: number; // in seconds\n}\n\nexport interface Widget {\n  id: string;\n  type: WidgetType;\n  title: string;\n  subtitle?: string;\n  layout: WidgetLayout;\n  dataConfig?: WidgetDataConfig;\n  options?: Record<string, any>; // Widget-specific options\n  metadata?: Record<string, any>; // Additional metadata\n}\n\nexport interface Dashboard {\n  id: string;\n  name: string;\n  description?: string;\n  tags?: string[];\n  createdAt: string;\n  updatedAt: string;\n  createdBy?: string;\n  layoutEngine: 'gridstack' | 'grid-layout';\n  layoutMode: DashboardLayoutMode;\n  widgets: Widget[];\n  filters?: Record<string, any>;\n  refreshInterval?: number;\n  metadata?: Record<string, any>;\n}\n\nexport interface DashboardTemplate {\n  id: string;\n  name: string;\n  description: string;\n  thumbnail?: string;\n  category: string;\n  widgets: Omit<Widget, 'id'>[];\n}\n","import type { WidgetPaletteItem } from '../components/dashboard-widget-palette.component';\n\n/**\n * Default widget palette configuration\n * Defines available widgets for the dashboard builder\n */\nexport const DEFAULT_WIDGET_PALETTE: WidgetPaletteItem[] = [\n  {\n    id: 'section',\n    label: 'Section Header',\n    description: 'Group widgets visually',\n    icon: 'pi-minus',\n    category: 'layout',\n    tags: ['divider', 'group', 'heading'],\n  },\n  {\n    id: 'text',\n    label: 'Text Block',\n    description: 'Notes & annotations',\n    icon: 'pi-align-left',\n    category: 'layout',\n    tags: ['note', 'annotation', 'markdown'],\n  },\n  {\n    id: 'counter',\n    label: 'Counter',\n    description: 'Single KPI value',\n    icon: 'pi-hashtag',\n    category: 'metrics',\n    tags: ['kpi', 'number', 'stat'],\n  },\n  {\n    id: 'chart-area',\n    label: 'Area Chart',\n    description: 'Trend over time',\n    icon: 'pi-chart-line',\n    category: 'charts',\n    tags: ['time-series', 'trend', 'line'],\n  },\n  {\n    id: 'chart-donut',\n    label: 'Donut Chart',\n    description: 'Proportional breakdown',\n    icon: 'pi-chart-pie',\n    category: 'charts',\n    tags: ['pie', 'distribution', 'percentage'],\n  },\n  {\n    id: 'chart-bar',\n    label: 'Bar Chart',\n    description: 'Compare categories',\n    icon: 'pi-chart-bar',\n    category: 'charts',\n    tags: ['comparison', 'ranking'],\n  },\n  {\n    id: 'chart-heatmap',\n    label: 'Heatmap',\n    description: 'Data intensity grid',\n    icon: 'pi-th-large',\n    category: 'charts',\n    tags: ['matrix', 'intensity', 'grid'],\n  },\n  {\n    id: 'table',\n    label: 'Table',\n    description: 'Structured data view',\n    icon: 'pi-table',\n    category: 'data',\n    tags: ['list', 'grid', 'records'],\n  },\n];\n\n/**\n * Widget metadata - maps widget IDs to their configuration\n */\nexport const WIDGET_METADATA: Record<string, {\n  defaultTitle: string;\n  defaultLayout: { w: number; h: number; minW: number; minH: number };\n}> = {\n  'counter': {\n    defaultTitle: 'Counter',\n    defaultLayout: { w: 3, h: 3, minW: 2, minH: 2 },\n  },\n  'chart-area': {\n    defaultTitle: 'Area Chart',\n    defaultLayout: { w: 6, h: 4, minW: 4, minH: 3 },\n  },\n  'chart-donut': {\n    defaultTitle: 'Donut Chart',\n    defaultLayout: { w: 5, h: 4, minW: 4, minH: 3 },\n  },\n  'chart-bar': {\n    defaultTitle: 'Bar Chart',\n    defaultLayout: { w: 4, h: 4, minW: 4, minH: 3 },\n  },\n  'chart-heatmap': {\n    defaultTitle: 'Heatmap',\n    defaultLayout: { w: 6, h: 4, minW: 4, minH: 3 },\n  },\n  'table': {\n    defaultTitle: 'Data Table',\n    defaultLayout: { w: 12, h: 5, minW: 6, minH: 4 },\n  },\n};\n","/**\n * Dashboard Module\n *\n * Provides a complete dashboard building system with:\n * - Widget components (counter, charts, tables)\n * - Canvas and layout management\n * - Palette for adding widgets\n * - Theme-aware styling with dark mode support\n */\n\nexport * from './components';\nexport * from './models';\nexport * from './config/widget-palette.config';\nexport * from './config/chart-styles';\nexport * from './config/stellar-echarts-theme';\n","import type { EChartsOption } from 'echarts';\n\nexport type ViewMode = 'view' | 'edit';\nexport type ViewFrame = 'auto' | 'standard' | 'wide' | 'tablet' | 'mobile' | 'report';\nexport type LayoutMode = 'row-based' | 'freeform';\nexport type WidgetKind =\n  | 'counter'\n  | 'area'\n  | 'donut'\n  | 'bar'\n  | 'heatmap'\n  | 'table'\n  | 'section'\n  | 'text'\n  | 'incident-table'\n  | 'ranked-list'\n  | 'ai-summary';\nexport type SectionBgColor = 'transparent' | 'surface' | 'blue' | 'indigo' | 'teal';\n\nexport interface WidgetLayout {\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n  minW: number;\n  minH: number;\n  maxW?: number;\n  maxH?: number;\n}\n\nexport interface WidgetConfig {\n  id: string;\n  title: string;\n  kind: WidgetKind;\n  layout: WidgetLayout;\n  /** Whether the widget has been configured via the config modal at least once */\n  isConfigured?: boolean;\n  dataConfig?: {\n    dataSource?: string;\n    groupBy?: string;\n    aggregation?: string;\n    limit?: number;\n  };\n  sectionConfig?: {\n    bgColor?: SectionBgColor;\n  };\n  textConfig?: {\n    content?: string;\n    showTitle?: boolean;\n    showBg?: boolean;\n    bold?: boolean;\n    italic?: boolean;\n    align?: 'left' | 'center' | 'right';\n  };\n}\n\nexport interface DashboardModel {\n  id: string;\n  name: string;\n  createdAt: string;\n  updatedAt: string;\n  layoutEngine: 'gridstack';\n  widgets: WidgetConfig[];\n}\n\nexport interface PaletteItem {\n  label: string;\n  kind: WidgetConfig['kind'];\n  description?: string;\n}\n\nexport interface WidgetOptionFactory {\n  (widget: WidgetConfig): EChartsOption;\n}\n\nexport const PALETTE_ITEMS: PaletteItem[] = [\n  { label: 'Counter', kind: 'counter', description: 'Single KPI value' },\n  { label: 'Area', kind: 'area', description: 'Area trend over time' },\n  { label: 'Donut', kind: 'donut', description: 'Proportional split' },\n  { label: 'Bar', kind: 'bar', description: 'Top contributors' },\n  { label: 'Heatmap', kind: 'heatmap', description: 'Severity mix' },\n  { label: 'Table', kind: 'table', description: 'Category totals' },\n];\n","/**\n * Legacy Dashboard Builder\n * @deprecated Use the new dashboard module instead\n */\nexport {\n  type ViewMode as LegacyViewMode,\n  type ViewFrame as LegacyViewFrame,\n  type LayoutMode as LegacyLayoutMode,\n  type WidgetKind as LegacyWidgetKind,\n  type WidgetLayout as LegacyWidgetLayout,\n  type WidgetConfig as LegacyWidgetConfig,\n  type DashboardModel as LegacyDashboardModel,\n  type PaletteItem as LegacyPaletteItem,\n  type SectionBgColor as LegacySectionBgColor,\n  PALETTE_ITEMS as LEGACY_PALETTE_ITEMS,\n} from './models';\nexport * from './chart-options';\n","import { Component, signal, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePicker } from 'primeng/datepicker';\nimport { Button } from 'primeng/button';\nimport { InputText } from 'primeng/inputtext';\n\nexport interface DailyPickerValue {\n  selectedDay: Date | null;\n  tab: 'absolute' | 'daily';\n}\n\n/**\n * Daily Picker Component\n * Standalone time picker with Daily/Absolute tabs based on Figma design\n */\n@Component({\n  selector: 'ui-daily-picker',\n  imports: [CommonModule, FormsModule, DatePicker, Button, InputText],\n  templateUrl: './daily-picker.component.html',\n  styleUrl: './daily-picker.component.scss'\n})\nexport class DailyPickerComponent {\n  // Active tab state\n  activeTab = signal<'absolute' | 'daily'>('daily');\n\n  // Selected day for Daily tab\n  selectedDay = signal<Date | null>(null);\n\n  // Day input text\n  dayInputText = signal<string>('');\n\n  // Output events\n  valueChange = output<DailyPickerValue>();\n  cancelPicker = output<void>();\n  apply = output<DailyPickerValue>();\n\n  /**\n   * Switch between Absolute and Daily tabs\n   */\n  switchTab(tab: 'absolute' | 'daily'): void {\n    this.activeTab.set(tab);\n  }\n\n  /**\n   * Handle calendar date selection\n   */\n  onDateSelect(date: Date): void {\n    this.selectedDay.set(date);\n    // Format date for input display\n    this.dayInputText.set(this.formatDate(date));\n    this.emitValue();\n  }\n\n  /**\n   * Handle day input manual entry\n   */\n  onDayInputChange(value: string): void {\n    this.dayInputText.set(value);\n    // Try to parse the input\n    const parsed = this.parseDate(value);\n    if (parsed) {\n      this.selectedDay.set(parsed);\n      this.emitValue();\n    }\n  }\n\n  /**\n   * Emit current value\n   */\n  private emitValue(): void {\n    this.valueChange.emit({\n      selectedDay: this.selectedDay(),\n      tab: this.activeTab()\n    });\n  }\n\n  /**\n   * Handle Cancel button\n   */\n  onCancel(): void {\n    this.cancelPicker.emit();\n  }\n\n  /**\n   * Handle Apply button\n   */\n  onApply(): void {\n    this.apply.emit({\n      selectedDay: this.selectedDay(),\n      tab: this.activeTab()\n    });\n  }\n\n  /**\n   * Format date for display\n   */\n  private formatDate(date: Date): string {\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const day = String(date.getDate()).padStart(2, '0');\n    const year = date.getFullYear();\n    return `${month}/${day}/${year}`;\n  }\n\n  /**\n   * Parse date from string input\n   */\n  private parseDate(value: string): Date | null {\n    // Simple parsing for MM/DD/YYYY format\n    const parts = value.split('/');\n    if (parts.length === 3) {\n      const month = parseInt(parts[0], 10) - 1;\n      const day = parseInt(parts[1], 10);\n      const year = parseInt(parts[2], 10);\n      const date = new Date(year, month, day);\n      if (!isNaN(date.getTime())) {\n        return date;\n      }\n    }\n    return null;\n  }\n}\n","<!-- Daily Picker Component Container -->\n<div class=\"dp-container\">\n  <!-- Tab Header -->\n  <div class=\"dp-tab-header\">\n    <button\n      class=\"dp-tab\"\n      [class.dp-tab-active]=\"activeTab() === 'absolute'\"\n      (click)=\"switchTab('absolute')\"\n      type=\"button\"\n    >\n      Absolute\n    </button>\n    <button\n      class=\"dp-tab\"\n      [class.dp-tab-active]=\"activeTab() === 'daily'\"\n      (click)=\"switchTab('daily')\"\n      type=\"button\"\n    >\n      Daily\n    </button>\n  </div>\n\n  <!-- Tab Content -->\n  <div class=\"dp-tab-content\">\n    <!-- Daily Tab -->\n    <div *ngIf=\"activeTab() === 'daily'\" class=\"dp-daily-content\">\n      <!-- Select day input -->\n      <input\n        pInputText\n        type=\"text\"\n        [value]=\"dayInputText()\"\n        (input)=\"onDayInputChange($any($event.target).value)\"\n        placeholder=\"Select day\"\n        class=\"dp-day-input\"\n      />\n\n      <!-- Calendar -->\n      <div class=\"dp-calendar-wrapper\">\n        <p-datepicker\n          [(ngModel)]=\"selectedDay\"\n          (ngModelChange)=\"onDateSelect($event)\"\n          [inline]=\"true\"\n          styleClass=\"dp-calendar\"\n          [showIcon]=\"false\"\n        />\n      </div>\n    </div>\n\n    <!-- Absolute Tab (Placeholder) -->\n    <div *ngIf=\"activeTab() === 'absolute'\" class=\"dp-absolute-content\">\n      <p class=\"tw-text-secondary tw-text-center\">Absolute tab content coming soon...</p>\n    </div>\n  </div>\n\n  <!-- Footer -->\n  <div class=\"dp-footer\">\n    <p-button\n      label=\"Cancel\"\n      (click)=\"onCancel()\"\n      [text]=\"true\"\n      styleClass=\"dp-cancel-btn\"\n    />\n    <p-button\n      label=\"Apply\"\n      (click)=\"onApply()\"\n      styleClass=\"dp-apply-btn\"\n    />\n  </div>\n</div>\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport interface PageTitleBarAction {\n  id: string;\n  label?: string;\n  icon?: string;\n  tooltip?: string;\n  severity?: 'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'help' | 'contrast';\n  outlined?: boolean;\n}\n\nexport interface PageTitleBarModeOption {\n  id: string;\n  label: string;\n}\n\n@Component({\n  selector: 'ui-page-title-bar',\n  standalone: true,\n  imports: [CommonModule, ButtonModule, TooltipModule],\n  templateUrl: './page-title-bar.component.html',\n})\nexport class PageTitleBarComponent {\n  // Inputs\n  title = input.required<string>();\n  subtitle = input<string>();\n\n  // Mode toggle inputs\n  showModeToggle = input<boolean>(false);\n  modeOptions = input<PageTitleBarModeOption[]>([]);\n  selectedModeId = input<string>();\n\n  // Action buttons\n  actions = input<PageTitleBarAction[]>([]);\n\n  // Outputs\n  modeChange = output<string>();\n  actionClick = output<string>();\n\n  onModeChange(modeId: string): void {\n    this.modeChange.emit(modeId);\n  }\n\n  onActionClick(actionId: string): void {\n    this.actionClick.emit(actionId);\n  }\n}\n","<div class=\"tw-flex tw-items-center tw-justify-between tw-w-full\">\n  <!-- Title Lockup -->\n  <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pr-[10px] tw-py-1 tw-rounded tw-h-fit\">\n    <div class=\"tw-flex tw-gap-2 tw-items-center\">\n      <h1 class=\"!tw-text-[20px] !tw-font-normal tw-text-default tw-tracking-[-0.18px] tw-h-fit\">\n        {{ title() }}\n      </h1>\n    </div>\n    @if (subtitle()) {\n      <p class=\"tw-text-[12px] tw-font-normal tw-text-quartiary tw-leading-5 !tw-mt-0\">\n        {{ subtitle() }}\n      </p>\n    }\n  </div>\n\n  <!-- Actions Container -->\n  <div class=\"tw-flex tw-gap-2 tw-items-center tw-pl-1 tw-py-1 tw-rounded-[14px]\"\n       [class.tw-w-[300px]]=\"showModeToggle()\">\n\n    <!-- Mode Toggle (if enabled) -->\n    @if (showModeToggle() && modeOptions().length > 0) {\n      <div class=\"tw-flex tw-gap-2 tw-items-start tw-p-1 tw-rounded-[10px] tw-bg-navigation\">\n        @for (mode of modeOptions(); track mode.id) {\n          <button\n            pButton\n            type=\"button\"\n            [label]=\"mode.label\"\n            size=\"small\"\n            [severity]=\"selectedModeId() === mode.id ? 'warn' : 'secondary'\"\n            [outlined]=\"selectedModeId() !== mode.id\"\n            [text]=\"selectedModeId() !== mode.id\"\n            class=\"!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-rounded-md !tw-h-[28px]\"\n            (click)=\"onModeChange(mode.id)\">\n          </button>\n        }\n      </div>\n    }\n\n    <!-- Action Buttons -->\n    @if (actions().length > 0) {\n      <div class=\"tw-flex tw-gap-2 tw-items-center tw-h-7\">\n        @for (action of actions(); track action.id) {\n          <button\n            pButton\n            type=\"button\"\n            [label]=\"action.label || ''\"\n            [icon]=\"action.icon || ''\"\n            size=\"small\"\n            [severity]=\"action.severity || 'secondary'\"\n            [outlined]=\"action.outlined !== false\"\n            [class]=\"action.label\n              ? '!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-7'\n              : '!tw-w-7 !tw-h-7 !tw-px-0 !tw-py-[5px]'\"\n            [pTooltip]=\"action.tooltip || ''\"\n            (click)=\"onActionClick(action.id)\">\n          </button>\n        }\n      </div>\n    }\n  </div>\n</div>\n","import {\n  Component, input, output, contentChild, TemplateRef,\n  signal, computed, effect, ViewChild, ElementRef, afterNextRender,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { MenuItem } from 'primeng/api';\n\nimport {\n  PageTitleBarAction,\n  PageTitleBarModeOption\n} from '../page-title-bar';\n\n@Component({\n  selector: 'ui-page-header',\n  standalone: true,\n  imports: [\n    CommonModule,\n    RouterModule,\n    ButtonModule,\n    TooltipModule,\n  ],\n  templateUrl: './page-header.component.html',\n  styleUrl: './page-header.component.scss',\n})\nexport class PageHeaderComponent {\n  breadcrumbs = input<MenuItem[]>([]);\n  home = input<MenuItem>();\n\n  title = input.required<string>();\n  subtitle = input<string>();\n\n  showModeToggle = input<boolean>(false);\n  modeOptions = input<PageTitleBarModeOption[]>([]);\n  selectedModeId = input<string>();\n\n  actions = input<PageTitleBarAction[]>([]);\n  actionsByMode = input<Record<string, PageTitleBarAction[]>>({});\n\n  modeChange = output<string>();\n  actionClick = output<string>();\n\n  customBreadcrumb = contentChild<TemplateRef<any>>('breadcrumb');\n  customTitleBar = contentChild<TemplateRef<any>>('titleBar');\n\n  // Mode toggle slider\n  @ViewChild('toggleContainer') toggleContainer?: ElementRef<HTMLElement>;\n  readonly sliderLeft = signal(0);\n  readonly sliderWidth = signal(0);\n  readonly sliderReady = signal(false);\n\n  // Rolodex animation\n  readonly rolodexState = signal<{ entering: string; exiting: string } | null>(null);\n  private previousModeId = '';\n\n  readonly hasActionsByMode = computed(() =>\n    Object.keys(this.actionsByMode()).length > 0\n  );\n\n  readonly panelClasses = computed(() => {\n    const state = this.rolodexState();\n    const activeModeId = this.selectedModeId();\n    const result: Record<string, string> = {};\n\n    for (const mode of this.modeOptions()) {\n      if (state?.entering === mode.id) {\n        result[mode.id] = 'rolodex-panel--entering';\n      } else if (state?.exiting === mode.id) {\n        result[mode.id] = 'rolodex-panel--exiting';\n      } else if (activeModeId === mode.id) {\n        result[mode.id] = 'rolodex-panel--active';\n      } else {\n        result[mode.id] = 'rolodex-panel--hidden';\n      }\n    }\n    return result;\n  });\n\n  constructor() {\n    effect((onCleanup) => {\n      const modeId = this.selectedModeId();\n      if (!modeId) return;\n\n      let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n      if (this.previousModeId && this.previousModeId !== modeId && this.hasActionsByMode()) {\n        this.rolodexState.set({ entering: modeId, exiting: this.previousModeId });\n        timeoutId = setTimeout(() => this.rolodexState.set(null), 700);\n      }\n\n      this.previousModeId = modeId;\n      requestAnimationFrame(() => this.updateSliderPosition());\n\n      onCleanup(() => {\n        if (timeoutId) clearTimeout(timeoutId);\n      });\n    });\n\n    afterNextRender(() => {\n      this.updateSliderPosition();\n      this.sliderReady.set(true);\n    });\n  }\n\n  getActionsForMode(modeId: string): PageTitleBarAction[] {\n    return this.actionsByMode()[modeId] ?? [];\n  }\n\n  onModeChange(modeId: string): void {\n    this.modeChange.emit(modeId);\n  }\n\n  onActionClick(actionId: string): void {\n    this.actionClick.emit(actionId);\n  }\n\n  private updateSliderPosition(): void {\n    const container = this.toggleContainer?.nativeElement;\n    if (!container) return;\n\n    const buttons = container.querySelectorAll('.mode-toggle__btn');\n    const index = this.modeOptions().findIndex(m => m.id === this.selectedModeId());\n    if (index < 0 || !buttons[index]) return;\n\n    const btn = buttons[index] as HTMLElement;\n    this.sliderLeft.set(btn.offsetLeft);\n    this.sliderWidth.set(btn.offsetWidth);\n  }\n}\n","<div class=\"page-header tw-flex tw-flex-col tw-gap-0 tw-px-6 tw-pt-0 tw-pb-0 tw-w-full tw-h-[60px] tw-justify-center tw-items-start tw-border-0 tw-border-b tw-border-solid tw-border-[var(--p-content-border-color)]\">\n  <div class=\"tw-flex tw-items-center tw-justify-between tw-w-full tw-py-2\">\n    <div class=\"tw-flex tw-flex-col tw-justify-center\">\n      <div class=\"location-bar tw-flex tw-items-center tw-gap-0\">\n        @if (customBreadcrumb()) {\n          <ng-container *ngTemplateOutlet=\"customBreadcrumb()!\"></ng-container>\n        } @else {\n          @for (crumb of breadcrumbs(); track crumb.label) {\n            @if (crumb.routerLink) {\n              <a [routerLink]=\"crumb.routerLink\" class=\"location-segment location-link\">{{ crumb.label }}</a>\n            } @else {\n              <span class=\"location-segment\">{{ crumb.label }}</span>\n            }\n            <span class=\"location-separator\">/</span>\n          }\n          <span class=\"location-segment location-current\">{{ title() }}</span>\n        }\n      </div>\n      @if (subtitle()) {\n        <p class=\"tw-text-xs tw-text-quartiary tw-leading-4 !tw-m-0\">{{ subtitle() }}</p>\n      }\n    </div>\n\n    <!-- Actions Container (mode toggle + buttons) -->\n    @if (customTitleBar()) {\n      <ng-container *ngTemplateOutlet=\"customTitleBar()!\"></ng-container>\n    } @else {\n      <div class=\"tw-flex tw-gap-1 tw-items-center tw-pl-1 tw-py-1\">\n        @if (showModeToggle() && modeOptions().length > 0) {\n          <div #toggleContainer\n               class=\"mode-toggle tw-relative tw-flex tw-items-center tw-p-1 tw-rounded-[10px] tw-bg-navigation\">\n            <div class=\"mode-toggle__slider\"\n                 [class.mode-toggle__slider--ready]=\"sliderReady()\"\n                 [style.left.px]=\"sliderLeft()\"\n                 [style.width.px]=\"sliderWidth()\">\n            </div>\n            @for (mode of modeOptions(); track mode.id) {\n              <button\n                class=\"mode-toggle__btn\"\n                [class.mode-toggle__btn--active]=\"selectedModeId() === mode.id\"\n                (click)=\"onModeChange(mode.id)\">\n                {{ mode.label }}\n              </button>\n            }\n          </div>\n        }\n\n        @if (hasActionsByMode()) {\n          <div class=\"rolodex-container\">\n            @for (modeOpt of modeOptions(); track modeOpt.id) {\n              <div class=\"rolodex-panel tw-flex tw-gap-2 tw-items-center tw-justify-end\"\n                   [ngClass]=\"panelClasses()[modeOpt.id]\">\n                @for (action of getActionsForMode(modeOpt.id); track action.id) {\n                  <button\n                    pButton\n                    type=\"button\"\n                    [label]=\"action.label || ''\"\n                    [icon]=\"action.icon || ''\"\n                    size=\"small\"\n                    [severity]=\"action.severity || 'secondary'\"\n                    [outlined]=\"action.outlined === true\"\n                    [class]=\"(action.label\n                      ? '!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-7'\n                      : '!tw-w-7 !tw-h-7 !tw-px-0 !tw-py-[5px]')\n                      + (action.outlined !== true && action.severity === 'secondary' ? ' action-btn--muted' : '')\"\n                    (click)=\"onActionClick(action.id)\">\n                  </button>\n                }\n              </div>\n            }\n          </div>\n        } @else if (actions().length > 0) {\n          <div class=\"tw-flex tw-gap-2 tw-items-center tw-h-7\">\n            @for (action of actions(); track action.id) {\n              <button\n                pButton\n                type=\"button\"\n                [label]=\"action.label || ''\"\n                [icon]=\"action.icon || ''\"\n                size=\"small\"\n                [severity]=\"action.severity || 'secondary'\"\n                [outlined]=\"action.outlined === true\"\n                [class]=\"(action.label\n                  ? '!tw-px-[9px] !tw-py-[5px] !tw-text-[13px] !tw-h-7'\n                  : '!tw-w-7 !tw-h-7 !tw-px-0 !tw-py-[5px]')\n                  + (action.outlined !== true && action.severity === 'secondary' ? ' action-btn--muted' : '')\"\n                (click)=\"onActionClick(action.id)\">\n              </button>\n            }\n          </div>\n        }\n      </div>\n    }\n  </div>\n</div>\n","import { Component, input, output, contentChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Reusable panel component with header, description, and content area\n * Provides consistent styling for dashboard panels and cards\n */\n@Component({\n  selector: 'ui-panel',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './panel.component.html',\n})\nexport class PanelComponent {\n  // Header inputs\n  title = input.required<string>();\n  description = input<string>();\n\n  // Optional header metadata (e.g., \"5 alerts\")\n  metadata = input<string>();\n\n  // Styling customization\n  backgroundColor = input<string>('tw-bg-card');\n  padding = input<string>('tw-p-4');\n\n  // Content projection for custom header actions or footer\n  headerActions = contentChild<TemplateRef<any>>('headerActions');\n  footer = contentChild<TemplateRef<any>>('footer');\n\n  // Optional click handler for the entire panel\n  panelClick = output<void>();\n\n  onPanelClick(): void {\n    this.panelClick.emit();\n  }\n}\n","<div\n  [class]=\"backgroundColor() + ' tw-flex tw-flex-1 tw-flex-col tw-gap-3 tw-min-h-0 tw-overflow-clip ' + padding() + ' tw-rounded-md tw-w-full'\">\n\n  <!-- Panel Header -->\n  <div class=\"tw-flex tw-flex-col tw-gap-0 tw-overflow-clip tw-w-full tw-px-2\">\n    <div class=\"tw-flex tw-h-10 tw-items-center tw-justify-between tw-overflow-clip tw-w-full\">\n      <!-- Title Section -->\n      <div class=\"tw-flex tw-flex-1 tw-flex-col tw-min-h-0 tw-min-w-0\">\n        <h2 class=\"!tw-text-base !tw-font-normal tw-text-default tw-tracking-[-0.18px] tw-leading-[28px]\">\n          {{ title() }}\n        </h2>\n      </div>\n\n      <!-- Metadata or Custom Actions -->\n      @if (headerActions()) {\n        <div class=\"tw-flex tw-items-start tw-justify-end\">\n          <ng-container *ngTemplateOutlet=\"headerActions()!\"></ng-container>\n        </div>\n      } @else if (metadata()) {\n        <div class=\"tw-flex tw-items-start tw-justify-end\">\n          <span class=\"tw-text-[12px] tw-text-secondary\">{{ metadata() }}</span>\n        </div>\n      }\n    </div>\n\n    <!-- Description -->\n    @if (description()) {\n      <p class=\"tw-flex-1 tw-text-[12px] tw-font-normal tw-text-secondary tw-leading-5 tw-min-h-0 tw-min-w-0 !tw-mt-0\">\n        {{ description() }}\n      </p>\n    }\n  </div>\n\n  <!-- Panel Content -->\n  <ng-content></ng-content>\n\n  <!-- Optional Footer -->\n  @if (footer()) {\n    <div class=\"tw-flex tw-items-center tw-gap-2 tw-pt-2 tw-border-t tw-border-gray-200 dark:tw-border-gray-800\">\n      <ng-container *ngTemplateOutlet=\"footer()!\"></ng-container>\n    </div>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  input,\n  output,\n  signal,\n  OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { RadioButton } from 'primeng/radiobutton';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { DatePicker } from 'primeng/datepicker';\nimport { SliderModule } from 'primeng/slider';\nimport { ButtonModule } from 'primeng/button';\nimport { ProgressSpinner } from 'primeng/progressspinner';\nimport { ScrollerModule } from 'primeng/scroller';\nimport { ListboxModule } from 'primeng/listbox';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { InputSwitchModule } from 'primeng/inputswitch';\nimport { TreeSelectModule } from 'primeng/treeselect';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { IconField } from 'primeng/iconfield';\nimport { InputIcon } from 'primeng/inputicon';\nimport type {\n  FilterValueType,\n  FilterBarLabels,\n  FilterOption,\n  FilterOptionsLoader,\n  FilterContext,\n  TreeNode,\n  SliderConfig,\n} from './filter-bar.models';\n\n/**\n * Filter Value Selector Component\n *\n * IMPORTANT: Range Filter Emit Logic (for number-range and number-range-slider types)\n * ==================================================================================\n *\n * This component emits values in NESTED ARRAY FORMAT for range filters to distinguish\n * between range boundaries and discrete values:\n *\n * EMIT PATTERNS:\n * --------------\n * 1. Range only (active range, no discrete):\n *    Emits: [[from, to]]\n *    Example: [[38, 100]] → range from 38 to 100\n *\n * 2. Range + discrete values:\n *    Emits: [[from, to], discrete1, discrete2, ...]\n *    Example: [[38, 100], 45, 63] → range 38-100 AND discrete values 45, 63\n *\n * 3. Discrete only (no active range):\n *    Emits: [discrete1, discrete2, ...]\n *    Example: [45, 63] → discrete values 45 and 63 only (NO range)\n *\n * ACTIVE RANGE DETECTION:\n * -----------------------\n * A range is considered \"active\" when it's NOT at default boundaries:\n *   hasActiveRange = (rangeMin !== min) || (rangeMax !== max)\n *\n * If hasActiveRange = false:\n *   - Range is at default boundaries (e.g., 0-100)\n *   - Only discrete values are emitted (no range tuple)\n *   - This prevents unwanted full-range queries in Elasticsearch\n *\n * DUAL-MODE SUPPORT (IN/EX Toggle):\n * ----------------------------------\n * Range filters support both include and exclude modes via rangeMode property:\n *   - rangeMode = 'include': emits included range/discrete values\n *   - rangeMode = 'exclude': emits excluded range/discrete values\n *\n * The component maintains separate discrete value arrays:\n *   - discreteIncluded: discrete values for IN mode\n *   - discreteExcluded: discrete values for EX mode\n *\n * NESTED ARRAY RATIONALE:\n * -----------------------\n * Using nested arrays [[from, to], discrete...] allows filter-chip to distinguish:\n *   - [[45, 63]] → range from 45 to 63\n *   - [45, 63] → two discrete values: 45 and 63\n *\n * Without nested arrays, both cases would look identical and be ambiguous!\n *\n * @see filter-chip.component.ts for parsing logic\n * @see filter-bar.models.ts for extractRange() and extractDiscreteValues() helpers\n */\n@Component({\n  selector: 'ui-filter-value-selector',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    CheckboxModule,\n    RadioButton,\n    InputTextModule,\n    InputNumber,\n    DatePicker,\n    SliderModule,\n    ButtonModule,\n    ProgressSpinner,\n    ScrollerModule,\n    ListboxModule,\n    RadioButtonModule,\n    InputSwitchModule,\n    TreeSelectModule,\n    AutoCompleteModule,\n    IconField,\n    InputIcon,\n  ],\n  template: `\n    <div class=\"tw-flex tw-flex-col tw-gap-3.5\">\n      <!-- Optional Header with badge, label, and IN/EX toggle -->\n      @if (showHeader()) {\n      <div class=\"tw-flex tw-items-center tw-gap-2\">\n        @if (headerBadge()) {\n        <span\n          class=\"tw-inline-flex tw-items-center tw-justify-center tw-w-5 tw-h-5\n                     tw-rounded tw-text-[10px] tw-font-bold tw-text-white tw-flex-shrink-0\"\n          [class]=\"headerBadgeColor()\"\n        >\n          {{ headerBadge() }}\n        </span>\n        }\n        @if (headerLabel()) {\n        <span\n          class=\"tw-text-sm tw-font-semibold tw-text-surface-900 dark:tw-text-surface-0\"\n        >\n          {{ headerLabel() }}\n        </span>\n        }\n        @if (showModeToggle()) {\n        <div\n          class=\"tw-flex tw-items-center tw-ml-auto tw-rounded-md tw-overflow-hidden\n                      tw-border tw-border-solid tw-border-surface-300 dark:tw-border-surface-600\"\n        >\n          <button\n            type=\"button\"\n            class=\"tw-px-2 tw-py-0.5 tw-text-[11px] tw-font-bold tw-leading-tight tw-transition-colors tw-duration-100\"\n            [class.tw-bg-primary]=\"editingMode() === 'include'\"\n            [class.tw-text-white]=\"editingMode() === 'include'\"\n            [class.tw-bg-transparent]=\"editingMode() !== 'include'\"\n            [class.tw-text-surface-500]=\"editingMode() !== 'include'\"\n            [class.hover:tw-bg-surface-100]=\"editingMode() !== 'include'\"\n            [class.dark:hover:tw-bg-surface-800]=\"editingMode() !== 'include'\"\n            (click)=\"onToggleModeFromHeader('include')\"\n          >\n            {{ labels()?.chip?.includeModeLabel ?? 'IN' }}\n          </button>\n          <button\n            type=\"button\"\n            class=\"tw-px-2 tw-py-0.5 tw-text-[11px] tw-font-bold tw-leading-tight tw-transition-colors tw-duration-100\n                     tw-border-l tw-border-solid tw-border-surface-300 dark:tw-border-surface-600\"\n            [class.tw-bg-surface-700]=\"editingMode() === 'exclude'\"\n            [class.dark:tw-bg-surface-300]=\"editingMode() === 'exclude'\"\n            [class.tw-text-white]=\"editingMode() === 'exclude'\"\n            [class.dark:tw-text-surface-900]=\"editingMode() === 'exclude'\"\n            [class.tw-bg-transparent]=\"editingMode() !== 'exclude'\"\n            [class.tw-text-surface-500]=\"editingMode() !== 'exclude'\"\n            [class.hover:tw-bg-surface-100]=\"editingMode() !== 'exclude'\"\n            [class.dark:hover:tw-bg-surface-800]=\"editingMode() !== 'exclude'\"\n            (click)=\"onToggleModeFromHeader('exclude')\"\n          >\n            {{ labels()?.chip?.excludeModeLabel ?? 'NOT' }}\n          </button>\n        </div>\n        }\n      </div>\n      }\n\n      <!-- Loading state (UX team's ProgressSpinner or async loading) -->\n      @if (loading() || isLoading()) {\n      <div class=\"tw-flex tw-items-center tw-justify-center tw-py-8\">\n        <p-progressSpinner\n          [style]=\"{ width: '32px', height: '32px' }\"\n          strokeWidth=\"4\"\n          animationDuration=\"0.8s\"\n        />\n      </div>\n      } @else {\n\n      <!-- Error state -->\n      @if (hasError()) {\n      <div\n        class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-p-6 tw-gap-3\"\n      >\n        <i class=\"pi pi-exclamation-triangle tw-text-2xl tw-text-red-500\"></i>\n        <span class=\"tw-text-sm tw-text-surface-600 dark:tw-text-surface-400\">\n          {{ labels()?.selector?.errorMessage ?? 'Failed to load options' }}\n        </span>\n      </div>\n      }\n\n      <!-- Value type switch -->\n      @if (!hasError()) { @switch (valueType()) {\n      <!-- Checkbox (original) - Multi-select with checkboxes -->\n      @case ('checkbox') { @if (enableVirtualScroll() &&\n      effectiveOptions().length > virtualScrollThreshold()) {\n      <!-- Virtual scroll mode for large lists -->\n      @if (showSearch()) {\n      <p-iconfield iconPosition=\"left\">\n        <p-inputicon styleClass=\"pi pi-search\" />\n        <input\n          type=\"text\"\n          pInputText\n          [placeholder]=\"labels()?.selector?.searchPlaceholder ?? 'Search'\"\n          [ngModel]=\"searchQuery()\"\n          (ngModelChange)=\"searchQuery.set($event)\"\n          [attr.aria-label]=\"\n            labels()?.selector?.searchPlaceholder ?? 'Search filter values'\n          \"\n        />\n      </p-iconfield>\n      }\n      <p-listbox\n        [options]=\"filteredDisplayOptions()\"\n        [(ngModel)]=\"selectedListboxValues\"\n        [multiple]=\"true\"\n        [filter]=\"false\"\n        [virtualScroll]=\"true\"\n        [virtualScrollItemSize]=\"virtualScrollItemSize()\"\n        optionLabel=\"label\"\n        optionValue=\"value\"\n        [listStyle]=\"{ 'max-height': '300px' }\"\n        class=\"tw-w-full\"\n      />\n      } @else {\n      <!-- Regular checkbox list -->\n      @if (showSearch()) {\n      <p-iconfield iconPosition=\"left\">\n        <p-inputicon styleClass=\"pi pi-search\" />\n        <input\n          type=\"text\"\n          pInputText\n          [placeholder]=\"labels()?.selector?.searchPlaceholder ?? 'Search'\"\n          [ngModel]=\"searchQuery()\"\n          (ngModelChange)=\"searchQuery.set($event)\"\n          [attr.aria-label]=\"\n            labels()?.selector?.searchPlaceholder ?? 'Search filter values'\n          \"\n        />\n      </p-iconfield>\n      }\n\n      <div\n        class=\"tw-flex tw-flex-col tw-gap-[14px] tw-p-1 tw-max-h-[300px] tw-overflow-y-auto\"\n      >\n        @if (effectiveOptions().length === 0) {\n        <span class=\"tw-text-sm tw-text-surface-500 tw-text-center tw-py-4\">\n          {{ labels()?.selector?.noOptionsMessage ?? 'No options available' }}\n        </span>\n        } @else {\n        <label class=\"tw-flex tw-items-center tw-gap-[7px] tw-cursor-pointer\">\n          <p-checkbox\n            class=\"tw-flex tw-items-center tw-shrink-0\"\n            [binary]=\"true\"\n            [(ngModel)]=\"selectAll\"\n            (ngModelChange)=\"$event ? onSelectAll() : onDeselectAll()\"\n            inputId=\"select-all\"\n          />\n          <span class=\"tw-text-sm tw-leading-none\">{{\n            labels()?.selector?.selectAllLabel ?? 'Select all'\n          }}</span>\n        </label>\n        <div\n          class=\"tw-h-px tw-bg-surface-200 dark:tw-bg-surface-700 -tw-mx-1\"\n        ></div>\n\n        @for (option of filteredDisplayOptions(); track option.value) {\n        <label class=\"tw-flex tw-items-center tw-gap-[7px] tw-cursor-pointer\">\n          <p-checkbox\n            class=\"tw-flex tw-items-center tw-shrink-0\"\n            [binary]=\"true\"\n            [ngModel]=\"isOptionSelected(option.value)\"\n            (ngModelChange)=\"\n              $event\n                ? onAddOption('' + option.value)\n                : onRemoveOption('' + option.value)\n            \"\n            [inputId]=\"'opt-' + option.value\"\n            [disabled]=\"option.disabled ?? false\"\n          />\n          @if (option.icon) {\n          <i [class]=\"option.icon + ' tw-text-sm'\"></i>\n          }\n          <span class=\"tw-text-sm tw-leading-none\">{{ option.label }}</span>\n          @if (option.badge) {\n          <span\n            class=\"tw-text-xs tw-px-1.5 tw-py-0.5 tw-rounded tw-bg-surface-100 dark:tw-bg-surface-800\"\n          >\n            {{ option.badge }}\n          </span>\n          }\n        </label>\n        } }\n      </div>\n      } }\n\n      <!-- Radio (new) - Single-select with radio buttons -->\n      @case ('radio') { @if (showSearch()) {\n      <div class=\"tw-relative\">\n        <i\n          class=\"pi pi-search tw-absolute tw-left-3 tw-top-1/2 -tw-translate-y-1/2 tw-text-surface-400 tw-text-sm tw-pointer-events-none\"\n        ></i>\n        <input\n          type=\"text\"\n          [placeholder]=\"labels()?.selector?.searchPlaceholder ?? 'Search'\"\n          class=\"tw-w-full tw-pl-[34px] tw-pr-3 tw-py-2 tw-text-sm\n                         tw-bg-surface-0 dark:tw-bg-surface-950\n                         tw-text-surface-700 dark:tw-text-surface-200\n                         tw-border tw-border-solid tw-border-surface-300 dark:tw-border-surface-600\n                         tw-rounded-md tw-shadow-sm tw-outline-none\n                         focus:tw-border-primary placeholder:tw-text-surface-400\"\n          [ngModel]=\"searchQuery()\"\n          (ngModelChange)=\"searchQuery.set($event)\"\n          [attr.aria-label]=\"\n            labels()?.selector?.searchPlaceholder ?? 'Search filter values'\n          \"\n        />\n      </div>\n      }\n\n      <div\n        class=\"tw-flex tw-flex-col tw-gap-[14px] tw-p-1 tw-max-h-[300px] tw-overflow-y-auto\"\n      >\n        @for (option of filteredDisplayOptions(); track option.value) {\n        <label class=\"tw-flex tw-items-center tw-gap-[7px] tw-cursor-pointer\">\n          <p-radiobutton\n            [value]=\"option.value\"\n            [(ngModel)]=\"radioValue\"\n            [inputId]=\"'radio-' + option.value\"\n            [disabled]=\"option.disabled ?? false\"\n          />\n          @if (option.icon) {\n          <i [class]=\"option.icon + ' tw-text-sm'\"></i>\n          }\n          <span class=\"tw-text-sm tw-leading-none\">{{ option.label }}</span>\n        </label>\n        }\n      </div>\n      }\n\n      <!-- Date Range (original) -->\n      @case ('date-range') {\n      <div class=\"tw-flex tw-flex-col tw-gap-3 tw-p-4\">\n        <p-datepicker\n          [(ngModel)]=\"dateFrom\"\n          (ngModelChange)=\"validateDateRange()\"\n          [showTime]=\"showTime()\"\n          [showIcon]=\"true\"\n          [placeholder]=\"\n            labels()?.selector?.startDatePlaceholder ?? 'Start date'\n          \"\n          [dateFormat]=\"dateFormat()\"\n          class=\"tw-w-full\"\n        />\n        <p-datepicker\n          [(ngModel)]=\"dateTo\"\n          (ngModelChange)=\"validateDateRange()\"\n          [showTime]=\"showTime()\"\n          [showIcon]=\"true\"\n          [placeholder]=\"labels()?.selector?.endDatePlaceholder ?? 'End date'\"\n          [dateFormat]=\"dateFormat()\"\n          class=\"tw-w-full\"\n        />\n      </div>\n      }\n\n      <!-- Number Range (original) -->\n      @case ('number-range') {\n      <div class=\"tw-flex tw-flex-col tw-gap-4 tw-p-4\">\n        <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3\">\n          <p-inputNumber\n            [(ngModel)]=\"rangeMin\"\n            (ngModelChange)=\"syncSliderFromInputs()\"\n            [inputStyleClass]=\"'tw-w-[72px] tw-text-center'\"\n            [showButtons]=\"false\"\n            [attr.aria-label]=\"labels()?.selector?.minLabel ?? 'Range minimum'\"\n          />\n          <span class=\"tw-text-sm tw-text-surface-500\">{{\n            labels()?.selector?.toLabel ?? 'to'\n          }}</span>\n          <p-inputNumber\n            [(ngModel)]=\"rangeMax\"\n            (ngModelChange)=\"syncSliderFromInputs()\"\n            [inputStyleClass]=\"'tw-w-[72px] tw-text-center'\"\n            [showButtons]=\"false\"\n            [attr.aria-label]=\"labels()?.selector?.maxLabel ?? 'Range maximum'\"\n          />\n        </div>\n        <p-slider\n          [(ngModel)]=\"rangeValues\"\n          (ngModelChange)=\"syncInputsFromSlider()\"\n          [range]=\"true\"\n          [min]=\"rangeFloor()\"\n          [max]=\"rangeCeil()\"\n        />\n          {{rangeMode}}\n        <!-- Discrete values badges - show other mode's values -->\n        @if (rangeMode === 'include' && discreteExcluded.length > 0) {\n        <div\n          class=\"tw-flex tw-flex-col tw-gap-2 tw-mt-2 tw-pt-2 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\"\n        >\n          <!-- Discrete excluded values (shown when in include mode) -->\n          <div class=\"tw-flex tw-flex-col tw-gap-1.5\">\n            <span\n              class=\"tw-text-[10px] tw-font-bold tw-uppercase tw-tracking-wider tw-text-surface-600 dark:tw-text-surface-300\"\n            >\n              {{ labels()?.chip?.excludeModeLabel ?? 'NOT' }} (discrete)\n            </span>\n            <div class=\"tw-flex tw-flex-wrap tw-gap-2\">\n              @for (value of discreteExcluded; track value) {\n              <div\n                class=\"tw-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-rounded tw-text-xs\n                              tw-bg-surface-100 dark:tw-bg-surface-800 tw-text-surface-600 dark:tw-text-surface-300\n                              tw-border tw-border-dashed tw-border-surface-400 dark:tw-border-surface-500\"\n              >\n                <span class=\"tw-line-through\">{{ value }}</span>\n                <button\n                  type=\"button\"\n                  class=\"tw-w-3 tw-h-3 tw-flex tw-items-center tw-justify-center\n                             tw-rounded-full hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700 tw-transition-colors\"\n                  [title]=\"'Remove ' + value\"\n                  (click)=\"onRemoveDiscreteExcluded(value)\"\n                >\n                  <i class=\"pi pi-times tw-text-[8px]\"></i>\n                </button>\n              </div>\n              }\n            </div>\n          </div>\n        </div>\n        }\n        @if (rangeMode === 'exclude' && discreteIncluded.length > 0) {\n        <div\n          class=\"tw-flex tw-flex-col tw-gap-2 tw-mt-2 tw-pt-2 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\"\n        >\n          <!-- Discrete included values (shown when in exclude mode) -->\n          <div class=\"tw-flex tw-flex-col tw-gap-1.5\">\n            <span\n              class=\"tw-text-[10px] tw-font-bold tw-uppercase tw-tracking-wider tw-text-primary\"\n            >\n              {{ labels()?.chip?.includeModeLabel ?? 'IN' }} (discrete)\n            </span>\n            <div class=\"tw-flex tw-flex-wrap tw-gap-2\">\n              @for (value of discreteIncluded; track value) {\n              <div\n                class=\"tw-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-rounded tw-text-xs\n                              tw-bg-primary/10 tw-text-primary\n                              tw-border tw-border-primary/30\"\n              >\n                <span>{{ value }}</span>\n                <button\n                  type=\"button\"\n                  class=\"tw-w-3 tw-h-3 tw-flex tw-items-center tw-justify-center\n                             tw-rounded-full hover:tw-bg-primary/20 tw-transition-colors\"\n                  [title]=\"'Remove ' + value\"\n                  (click)=\"onRemoveDiscreteIncluded(value)\"\n                >\n                  <i class=\"pi pi-times tw-text-[8px]\"></i>\n                </button>\n              </div>\n              }\n            </div>\n          </div>\n        </div>\n        }\n      </div>\n      }\n\n      <!-- Number Range Slider (new) - Slider with step configuration -->\n      @case ('number-range-slider') {\n      <div class=\"tw-flex tw-flex-col tw-gap-4 tw-p-4\">\n        <div class=\"tw-flex tw-items-center tw-justify-between\">\n          <span class=\"tw-text-sm tw-font-medium\"\n            >{{ sliderMin() }}{{ sliderUnit() }}</span\n          >\n          <span class=\"tw-text-sm tw-font-medium\"\n            >{{ sliderMax() }}{{ sliderUnit() }}</span\n          >\n        </div>\n        <p-slider\n          [(ngModel)]=\"sliderValues\"\n          (ngModelChange)=\"validateSliderRange()\"\n          [range]=\"true\"\n          [min]=\"sliderMin()\"\n          [max]=\"sliderMax()\"\n          [step]=\"sliderStep()\"\n        />\n        <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-2\">\n          <span class=\"tw-text-sm tw-text-surface-600 dark:tw-text-surface-400\">\n            {{ sliderValues[0] }}{{ sliderUnit() }} - {{ sliderValues[1]\n            }}{{ sliderUnit() }}\n          </span>\n        </div>\n\n        <!-- Discrete values badges - show other mode's values -->\n        @if (rangeMode === 'include' && discreteExcluded.length > 0) {\n        <div\n          class=\"tw-flex tw-flex-col tw-gap-2 tw-mt-2 tw-pt-2 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\"\n        >\n          <!-- Discrete excluded values (shown when in include mode) -->\n          <div class=\"tw-flex tw-flex-col tw-gap-1.5\">\n            <span\n              class=\"tw-text-[10px] tw-font-bold tw-uppercase tw-tracking-wider tw-text-surface-600 dark:tw-text-surface-300\"\n            >\n              {{ labels()?.chip?.excludeModeLabel ?? 'NOT' }} (discrete)\n            </span>\n            <div class=\"tw-flex tw-flex-wrap tw-gap-2\">\n              @for (value of discreteExcluded; track value) {\n              <div\n                class=\"tw-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-rounded tw-text-xs\n                              tw-bg-surface-100 dark:tw-bg-surface-800 tw-text-surface-600 dark:tw-text-surface-300\n                              tw-border tw-border-dashed tw-border-surface-400 dark:tw-border-surface-500\"\n              >\n                <span class=\"tw-line-through\">{{ value }}</span>\n                <button\n                  type=\"button\"\n                  class=\"tw-w-3 tw-h-3 tw-flex tw-items-center tw-justify-center\n                             tw-rounded-full hover:tw-bg-surface-200 dark:hover:tw-bg-surface-700 tw-transition-colors\"\n                  [title]=\"'Remove ' + value\"\n                  (click)=\"onRemoveDiscreteExcluded(value)\"\n                >\n                  <i class=\"pi pi-times tw-text-[8px]\"></i>\n                </button>\n              </div>\n              }\n            </div>\n          </div>\n        </div>\n        }\n        @if (rangeMode === 'exclude' && discreteIncluded.length > 0) {\n        <div\n          class=\"tw-flex tw-flex-col tw-gap-2 tw-mt-2 tw-pt-2 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\"\n        >\n          <!-- Discrete included values (shown when in exclude mode) -->\n          <div class=\"tw-flex tw-flex-col tw-gap-1.5\">\n            <span\n              class=\"tw-text-[10px] tw-font-bold tw-uppercase tw-tracking-wider tw-text-primary\"\n            >\n              {{ labels()?.chip?.includeModeLabel ?? 'IN' }} (discrete)\n            </span>\n            <div class=\"tw-flex tw-flex-wrap tw-gap-2\">\n              @for (value of discreteIncluded; track value) {\n              <div\n                class=\"tw-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-rounded tw-text-xs\n                              tw-bg-primary/10 tw-text-primary\n                              tw-border tw-border-primary/30\"\n              >\n                <span>{{ value }}</span>\n                <button\n                  type=\"button\"\n                  class=\"tw-w-3 tw-h-3 tw-flex tw-items-center tw-justify-center\n                             tw-rounded-full hover:tw-bg-primary/20 tw-transition-colors\"\n                  [title]=\"'Remove ' + value\"\n                  (click)=\"onRemoveDiscreteIncluded(value)\"\n                >\n                  <i class=\"pi pi-times tw-text-[8px]\"></i>\n                </button>\n              </div>\n              }\n            </div>\n          </div>\n        </div>\n        }\n      </div>\n      }\n\n      <!-- Text Input (new) - Single text field -->\n      @case ('text-input') {\n      <div class=\"tw-p-4\">\n        <input\n          pInputText\n          type=\"text\"\n          [(ngModel)]=\"textValue\"\n          [placeholder]=\"placeholder()\"\n          class=\"tw-w-full\"\n          [attr.aria-label]=\"placeholder()\"\n        />\n      </div>\n      }\n\n      <!-- Number Input (new) - Single number field -->\n      @case ('number-input') {\n      <div class=\"tw-p-4\">\n        <p-inputNumber\n          [(ngModel)]=\"numberValue\"\n          [placeholder]=\"placeholder()\"\n          [min]=\"rangeFloor()\"\n          [max]=\"rangeCeil()\"\n          [inputStyleClass]=\"'tw-w-full'\"\n          [showButtons]=\"false\"\n          [attr.aria-label]=\"placeholder()\"\n        />\n      </div>\n      }\n\n      <!-- Toggle (new) - Boolean switch -->\n      @case ('toggle') {\n      <div class=\"tw-flex tw-items-center tw-justify-between tw-p-4\">\n        <div class=\"tw-flex tw-flex-col tw-gap-1\">\n          <span class=\"tw-text-sm tw-font-medium\">{{ placeholder() }}</span>\n          <span class=\"tw-text-xs tw-text-surface-500\">\n            {{\n              toggleValue\n                ? labels()?.selector?.onLabel ?? 'On'\n                : labels()?.selector?.offLabel ?? 'Off'\n            }}\n          </span>\n        </div>\n        <p-inputswitch [(ngModel)]=\"toggleValue\" />\n      </div>\n      }\n\n      <!-- Tree (new) - Hierarchical tree select -->\n      @case ('tree') {\n      <div class=\"tw-p-2\">\n        <p-treeselect\n          [(ngModel)]=\"treeSelectedNodes\"\n          [options]=\"treeNodes()\"\n          [placeholder]=\"placeholder()\"\n          [filter]=\"true\"\n          [filterPlaceholder]=\"\n            labels()?.selector?.searchPlaceholder ?? 'Search'\n          \"\n          class=\"tw-w-full\"\n          display=\"chip\"\n          selectionMode=\"checkbox\"\n        />\n      </div>\n      }\n\n      <!-- Query (new) - Query template selector (treated as radio) -->\n      @case ('query') {\n      <div\n        class=\"tw-flex tw-flex-col tw-gap-[14px] tw-p-1 tw-max-h-[300px] tw-overflow-y-auto\"\n      >\n        @for (option of effectiveOptions(); track option.value) {\n        <label class=\"tw-flex tw-items-center tw-gap-[7px] tw-cursor-pointer\">\n          <p-radiobutton\n            [value]=\"option.value\"\n            [(ngModel)]=\"queryValue\"\n            [inputId]=\"'query-' + option.value\"\n            [disabled]=\"option.disabled ?? false\"\n          />\n          <div class=\"tw-flex tw-flex-col tw-gap-0.5\">\n            <span class=\"tw-text-sm tw-font-medium tw-leading-none\">{{\n              option.label\n            }}</span>\n            @if (option.badge) {\n            <span class=\"tw-text-xs tw-text-surface-500\">{{\n              option.badge\n            }}</span>\n            }\n          </div>\n        </label>\n        }\n      </div>\n      }\n\n      <!-- Autocomplete (new) - Autocomplete with async search -->\n      @case ('autocomplete') {\n      <div class=\"tw-p-2\">\n        <p-autocomplete\n          [(ngModel)]=\"autocompleteValue\"\n          [suggestions]=\"autocompleteSuggestions()\"\n          (completeMethod)=\"onAutocompleteSearch($event)\"\n          [placeholder]=\"placeholder()\"\n          [dropdown]=\"true\"\n          [multiple]=\"true\"\n          class=\"tw-w-full\"\n        />\n      </div>\n      } } } }\n\n      <!-- Footer with action buttons -->\n      @if (showFooter() && !loading() && !isLoading()) {\n      <div\n        class=\"tw-flex tw-items-center tw-justify-end tw-gap-[7px] tw-pt-2 tw-border-t tw-border-surface-200 dark:tw-border-surface-700\"\n      >\n        @if (hasClearButton()) {\n        <button\n          pButton\n          [label]=\"labels()?.selector?.clearButtonLabel ?? 'Clear'\"\n          aria-label=\"Clear\"\n          severity=\"secondary\"\n          [text]=\"true\"\n          size=\"small\"\n          (click)=\"onClear()\"\n        ></button>\n        }\n        <button\n          pButton\n          [label]=\"labels()?.selector?.cancelButtonLabel ?? 'Cancel'\"\n          aria-label=\"Cancel\"\n          severity=\"secondary\"\n          [text]=\"true\"\n          size=\"small\"\n          (click)=\"cancelEvent.emit()\"\n        ></button>\n        <button\n          pButton\n          [label]=\"labels()?.selector?.applyButtonLabel ?? 'Apply'\"\n          aria-label=\"Apply\"\n          size=\"small\"\n          (click)=\"onApply()\"\n        ></button>\n      </div>\n      }\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterValueSelectorComponent implements OnInit {\n  // Inputs\n  readonly showHeader = input<boolean>(false); // Show header with badge, label, and mode toggle\n  readonly showFooter = input<boolean>(true);\n  readonly headerLabel = input<string | undefined>(); // Property label for header\n  readonly headerBadge = input<string | undefined>(); // Badge text (e.g., \"A\", \"N\")\n  readonly headerBadgeColor = input<string | undefined>(); // Badge color CSS class\n  readonly showModeToggle = input<boolean>(false); // Show IN/EX toggle in header\n  readonly valueType = input<FilterValueType>('checkbox');\n  readonly loading = input<boolean>(false); // UX team's sync loading input\n  readonly options = input<string[]>([]); // Legacy - string array\n  readonly displayOptions = input<FilterOption[]>([]); // New - FilterOption array\n  readonly selected = input<string[]>([]);\n  readonly selectedExcluded = input<(string | number)[]>([]); // For dual discrete values in range filters\n  readonly editingMode = input<'include' | 'exclude'>('include'); // Which mode is being edited\n  readonly min = input<number>(0);\n  readonly max = input<number>(100);\n  readonly step = input<number>(1); // UX team's step input\n  readonly labels = input<FilterBarLabels>();\n  readonly placeholder = input<string>('');\n\n  // Async options support\n  readonly optionsLoader = input<FilterOptionsLoader | undefined>();\n  readonly filterContext = input<FilterContext | undefined>();\n\n  // Virtual scroll configuration\n  readonly enableVirtualScroll = input<boolean>(false);\n  readonly virtualScrollItemSize = input<number>(38);\n  readonly virtualScrollThreshold = input<number>(100);\n\n  // Slider configuration (for number-range-slider type)\n  readonly sliderConfig = input<SliderConfig | undefined>();\n\n  // Tree configuration (for tree type)\n  readonly treeNodes = input<TreeNode[]>([]);\n\n  // Date configuration\n  readonly dateFormat = input<string>('mm/dd/yy');\n  readonly showTime = input<boolean>(true);\n\n  // Clear button\n  readonly hasClearButton = input<boolean>(false);\n\n  // Outputs\n  readonly cancelEvent = output<void>();\n  readonly applyEvent = output<(string | number | boolean)[]>();\n  readonly modeChanged = output<'include' | 'exclude'>(); // Emitted when IN/EX toggle is clicked in header\n\n  // Component state\n  readonly searchQuery = signal<string>('');\n  selectAll = false;\n\n  // Range filter mode toggle (synced with editingMode from parent)\n  rangeMode: 'include' | 'exclude' = 'include';\n  readonly isLoading = signal<boolean>(false);\n  readonly hasError = signal<boolean>(false);\n  private readonly internalSelected = signal<Set<string>>(new Set());\n  private readonly loadedOptions = signal<FilterOption[]>([]);\n\n  // Value type-specific state\n  dateFrom: Date | null = null;\n  dateTo: Date | null = null;\n  rangeMin = 0;\n  rangeMax = 25;\n  rangeValues = [0, 25];\n  sliderValues = [0, 100];\n  discreteIncluded: (string | number)[] = []; // Discrete values to INCLUDE (for range filters)\n  discreteExcluded: (string | number)[] = []; // Discrete values to EXCLUDE (for range filters)\n  radioValue: string | number | boolean | null = null;\n  textValue = '';\n  numberValue: number | null = null;\n  toggleValue = false;\n  queryValue: string | number | boolean | null = null;\n  treeSelectedNodes: any = null;\n  autocompleteValue: string[] = [];\n  selectedListboxValues: (string | number | boolean)[] = [];\n  readonly autocompleteSuggestions = signal<string[]>([]);\n\n  // Computed properties\n  // Computed signal for effective options (handles fallback from displayOptions to options)\n  readonly effectiveOptions = computed(() => this._getEffectiveOptions());\n\n  readonly showSearch = computed(() => {\n    const opts = this.effectiveOptions();\n    return opts.length > 20;\n  });\n\n  readonly rangeFloor = computed(() => this.min());\n  readonly rangeCeil = computed(() => this.max());\n  readonly rangeStep = computed(() => this.step());\n\n  readonly sliderMin = computed(() => this.sliderConfig()?.min ?? this.min());\n  readonly sliderMax = computed(() => this.sliderConfig()?.max ?? this.max());\n  readonly sliderStep = computed(() => this.sliderConfig()?.step ?? 1);\n  readonly sliderUnit = computed(() => this.sliderConfig()?.unit ?? '');\n\n  readonly filteredDisplayOptions = computed(() => {\n    const query = this.searchQuery().toLowerCase();\n    const opts = this._getEffectiveOptions();\n    if (!query) return opts;\n    return opts.filter((o) => o.label.toLowerCase().includes(query));\n  });\n\n  readonly allSelected = computed(() => {\n    const opts = this._getEffectiveOptions();\n    const sel = this.internalSelected();\n    return opts.length > 0 && opts.every((o) => sel.has(String(o.value)));\n  });\n\n  readonly selectedValues = computed(() => Array.from(this.internalSelected()));\n\n  constructor() {\n    // Load async options when optionsLoader is provided\n    effect(() => {\n      const loader = this.optionsLoader();\n      const context = this.filterContext();\n      console.log('[FilterValueSelector] Async loader effect triggered', {\n        hasLoader: !!loader,\n        field: context?.entity?.id,\n        context,\n      });\n      if (loader) {\n        this._loadAsyncOptions(loader, context);\n      }\n    });\n\n    // Sync selectedListboxValues with internalSelected for virtual scroll\n    effect(() => {\n      const selected = Array.from(this.internalSelected());\n      if (this.enableVirtualScroll()) {\n        this.selectedListboxValues = selected;\n      }\n    });\n\n    // Sync rangeMode with editingMode from parent\n    effect(() => {\n      const mode = this.editingMode();\n      this.rangeMode = mode;\n    });\n  }\n\n  // Watch for changes in selected() input and reinitialize\n  private _selectedEffect = effect(() => {\n    // Trigger when selected() changes\n    const selected = this.selected();\n    const selectedExcluded = this.selectedExcluded();\n    const valueType = this.valueType();\n\n    // Re-initialize radio value\n    if (valueType === 'radio') {\n      this.radioValue = selected.length > 0 ? selected[0] : null;\n    }\n\n    // Re-initialize checkbox values\n    if (valueType === 'checkbox') {\n      this.internalSelected.set(new Set(selected));\n      this.selectAll = this.allSelected();\n    }\n\n    // Re-initialize text-input value\n    if (valueType === 'text-input') {\n      if (selected.length > 0) {\n        this.textValue = String(selected[0]);\n      } else if (selectedExcluded.length > 0) {\n        this.textValue = String(selectedExcluded[0]);\n      } else {\n        this.textValue = '';\n      }\n    }\n\n    // Re-initialize number-input value\n    if (valueType === 'number-input') {\n      if (selected.length > 0) {\n        this.numberValue = Number(selected[0]);\n      } else if (selectedExcluded.length > 0) {\n        this.numberValue = Number(selectedExcluded[0]);\n      } else {\n        this.numberValue = null;\n      }\n    }\n\n    // Re-initialize toggle value\n    if (valueType === 'toggle') {\n      if (selected.length > 0) {\n        this.toggleValue = Boolean(selected[0]);\n      } else {\n        this.toggleValue = false;\n      }\n    }\n\n    // Re-initialize discrete values for range filters\n    // IMPORTANT: For range filters, the array format is ALWAYS: [from, to, ...discreteValues]\n    // - Indices 0-1: Range bounds (from/to) - REQUIRED when present\n    // - Index 2+: Optional discrete values\n    // The array can be in either included or excluded based on rangeMode\n    if (valueType === 'number-range' || valueType === 'number-range-slider') {\n      // Determine which array contains the range (first 2 values)\n      if (selected.length >= 2) {\n        // Range is in included array\n        this.rangeMode = 'include';\n        this.rangeMin = Number(selected[0]);\n        this.rangeMax = Number(selected[1]);\n        this.rangeValues = [Number(selected[0]), Number(selected[1])];\n        this.sliderValues = [Number(selected[0]), Number(selected[1])];\n\n        if (selected.length > 2) {\n          this.discreteIncluded = selected.slice(2);\n        } else {\n          this.discreteIncluded = [];\n        }\n\n        this.discreteExcluded = selectedExcluded;\n      } else if (selectedExcluded.length >= 2) {\n        // Range is in excluded array\n        this.rangeMode = 'exclude';\n        this.rangeMin = Number(selectedExcluded[0]);\n        this.rangeMax = Number(selectedExcluded[1]);\n        this.rangeValues = [Number(selectedExcluded[0]), Number(selectedExcluded[1])];\n        this.sliderValues = [Number(selectedExcluded[0]), Number(selectedExcluded[1])];\n\n        if (selectedExcluded.length > 2) {\n          this.discreteExcluded = selectedExcluded.slice(2);\n        } else {\n          this.discreteExcluded = [];\n        }\n\n        this.discreteIncluded = selected;\n      } else {\n        // No range, only discrete values\n        // Determine mode based on which array has values\n        if (selectedExcluded.length > 0 && selected.length === 0) {\n          // Only excluded values exist - set to exclude mode\n          this.rangeMode = 'exclude';\n        } else {\n          // Either only included values or both - default to include mode\n          this.rangeMode = 'include';\n        }\n        this.discreteIncluded = selected;\n        this.discreteExcluded = selectedExcluded;\n      }\n    } else {\n      // For non-range filters (other than checkbox/radio), discrete values concept doesn't apply\n      this.discreteIncluded = [];\n      this.discreteExcluded = [];\n    }\n  });\n\n  ngOnInit(): void {\n    this._initializeFromSelected();\n  }\n\n  private _initializeFromSelected(): void {\n    const initial = this.selected();\n    const initialExcluded = this.selectedExcluded();\n    const valueType = this.valueType();\n\n    // Initialize checkbox values\n    if (valueType === 'checkbox' && initial.length) {\n      this.internalSelected.set(new Set(initial));\n      this.selectAll = this.allSelected();\n    }\n\n    // Initialize radio value\n    if (valueType === 'radio' && initial.length > 0) {\n      // For radio, selected array should have single value\n      this.radioValue = initial[0];\n    }\n\n    // Initialize text-input value\n    if (valueType === 'text-input') {\n      // Check included first (include mode), then excluded (exclude mode)\n      if (initial.length > 0) {\n        this.textValue = String(initial[0]);\n      } else if (initialExcluded.length > 0) {\n        this.textValue = String(initialExcluded[0]);\n      } else {\n        this.textValue = '';\n      }\n    }\n\n    // Initialize number-input value\n    if (valueType === 'number-input') {\n      if (initial.length > 0) {\n        this.numberValue = Number(initial[0]);\n      } else if (initialExcluded.length > 0) {\n        this.numberValue = Number(initialExcluded[0]);\n      } else {\n        this.numberValue = null;\n      }\n    }\n\n    // Initialize toggle value\n    if (valueType === 'toggle') {\n      if (initial.length > 0) {\n        this.toggleValue = Boolean(initial[0]);\n      } else {\n        this.toggleValue = false;\n      }\n    }\n\n    // Initialize range values - use selected values if available, otherwise use min/max bounds\n    if (\n      (valueType === 'number-range' || valueType === 'number-range-slider') &&\n      initial.length >= 2\n    ) {\n      // Range filter with existing values in INCLUDED array\n      // First two values are the range\n      this.rangeMin = Number(initial[0]);\n      this.rangeMax = Number(initial[1]);\n      this.rangeValues = [Number(initial[0]), Number(initial[1])];\n      this.sliderValues = [Number(initial[0]), Number(initial[1])];\n\n      // Values beyond the first two are discrete included values\n      if (initial.length > 2) {\n        this.discreteIncluded = initial.slice(2);\n      } else {\n        this.discreteIncluded = [];\n      }\n\n      // Initialize discrete excluded values\n      this.discreteExcluded = initialExcluded;\n\n      // Set rangeMode to 'include' since range is in included array\n      this.rangeMode = 'include';\n    } else if (\n      (valueType === 'number-range' || valueType === 'number-range-slider') &&\n      initialExcluded.length >= 2\n    ) {\n      // Range filter with existing values in EXCLUDED array\n      // First two values are the range\n      this.rangeMin = Number(initialExcluded[0]);\n      this.rangeMax = Number(initialExcluded[1]);\n      this.rangeValues = [Number(initialExcluded[0]), Number(initialExcluded[1])];\n      this.sliderValues = [Number(initialExcluded[0]), Number(initialExcluded[1])];\n\n      // Values beyond the first two are discrete excluded values\n      if (initialExcluded.length > 2) {\n        this.discreteExcluded = initialExcluded.slice(2);\n      } else {\n        this.discreteExcluded = [];\n      }\n\n      // Initialize discrete included values\n      this.discreteIncluded = initial;\n\n      // Set rangeMode to 'exclude' since range is in excluded array\n      this.rangeMode = 'exclude';\n    } else if (\n      (valueType === 'number-range' || valueType === 'number-range-slider') &&\n      initialExcluded.length > 0\n    ) {\n      // Range filter with ONLY discrete excluded values (no range tuple)\n      // Example: must_not=!(terms~(event_score~!63))\n      this.rangeMin = this.min();\n      this.rangeMax = this.max();\n      this.rangeValues = [this.min(), this.max()];\n      this.sliderValues = [this.sliderMin(), this.sliderMax()];\n      this.discreteIncluded = initial;\n      this.discreteExcluded = initialExcluded;\n      this.rangeMode = 'exclude'; // Set to exclude mode since only excluded values exist\n    } else if (\n      valueType === 'number-range' ||\n      valueType === 'number-range-slider'\n    ) {\n      // Default to bounds in include mode\n      this.rangeMin = this.min();\n      this.rangeMax = this.max();\n      this.rangeValues = [this.min(), this.max()];\n      this.sliderValues = [this.sliderMin(), this.sliderMax()];\n      this.discreteIncluded = [];\n      this.discreteExcluded = [];\n      this.rangeMode = 'include';\n    }\n  }\n\n  isOptionSelected(value: string | number | boolean): boolean {\n    return this.internalSelected().has(String(value));\n  }\n\n  onAddOption(option: string): void {\n    const next = new Set(this.internalSelected());\n    next.add(option);\n    this.internalSelected.set(next);\n    this.selectAll = this.allSelected();\n  }\n\n  onRemoveOption(option: string): void {\n    const next = new Set(this.internalSelected());\n    next.delete(option);\n    this.internalSelected.set(next);\n    this.selectAll = this.allSelected();\n  }\n\n  onSelectAll(): void {\n    const allValues = this._getEffectiveOptions().map((o) => String(o.value));\n    this.internalSelected.set(new Set(allValues));\n    this.selectAll = true;\n  }\n\n  onDeselectAll(): void {\n    this.internalSelected.set(new Set());\n    this.selectAll = false;\n  }\n\n  onRemoveDiscreteIncluded(value: string | number): void {\n    this.discreteIncluded = this.discreteIncluded.filter((v) => v !== value);\n  }\n\n  onRemoveDiscreteExcluded(value: string | number): void {\n    this.discreteExcluded = this.discreteExcluded.filter((v) => v !== value);\n  }\n\n  onToggleModeFromHeader(mode: 'include' | 'exclude'): void {\n    // Emit mode change event for parent component to handle\n    this.modeChanged.emit(mode);\n  }\n\n  syncSliderFromInputs(): void {\n    // Validate: min should not be greater than max\n    if (this.rangeMin > this.rangeMax) {\n      this.rangeMin = this.rangeMax;\n    }\n    this.rangeValues = [this.rangeMin, this.rangeMax];\n  }\n\n  syncInputsFromSlider(): void {\n    this.rangeMin = this.rangeValues[0];\n    this.rangeMax = this.rangeValues[1];\n  }\n\n  validateDateRange(): void {\n    // Validate: from date should not be greater than to date\n    if (this.dateFrom && this.dateTo && this.dateFrom > this.dateTo) {\n      this.dateFrom = this.dateTo;\n    }\n  }\n\n  validateSliderRange(): void {\n    // Validate: min should not be greater than max for slider values\n    if (this.sliderValues[0] > this.sliderValues[1]) {\n      this.sliderValues = [this.sliderValues[1], this.sliderValues[1]];\n    }\n  }\n\n  onAutocompleteSearch(event: any): void {\n    const query = event.query?.toLowerCase() || '';\n    const opts = this._getEffectiveOptions();\n    const filtered = opts\n      .filter((o) => o.label.toLowerCase().includes(query))\n      .map((o) => o.label)\n      .slice(0, 20);\n    this.autocompleteSuggestions.set(filtered);\n  }\n\n  onClear(): void {\n    const type = this.valueType();\n    switch (type) {\n      case 'checkbox':\n        this.onDeselectAll();\n        break;\n      case 'radio':\n      case 'query':\n        this.radioValue = null;\n        this.queryValue = null;\n        break;\n      case 'date-range':\n        this.dateFrom = null;\n        this.dateTo = null;\n        break;\n      case 'number-range':\n      case 'number-range-slider':\n        this.rangeMin = this.min();\n        this.rangeMax = this.max();\n        this.rangeValues = [this.min(), this.max()];\n        this.sliderValues = [this.sliderMin(), this.sliderMax()];\n        break;\n      case 'text-input':\n        this.textValue = '';\n        break;\n      case 'number-input':\n        this.numberValue = null;\n        break;\n      case 'toggle':\n        this.toggleValue = false;\n        break;\n      case 'tree':\n        this.treeSelectedNodes = null;\n        break;\n      case 'autocomplete':\n        this.autocompleteValue = [];\n        break;\n    }\n  }\n\n  onApply(): void {\n    const type = this.valueType();\n    switch (type) {\n      case 'checkbox':\n        if (this.enableVirtualScroll()) {\n          this.applyEvent.emit(\n            this.selectedListboxValues.map((v) => String(v))\n          );\n        } else {\n          this.applyEvent.emit(this.selectedValues());\n        }\n        break;\n\n      case 'radio':\n        if (this.radioValue !== null) {\n          this.applyEvent.emit([String(this.radioValue)]);\n        } else {\n          this.applyEvent.emit([]);\n        }\n        break;\n\n      case 'date-range': {\n        const from = this.dateFrom ? this.dateFrom.toISOString() : '';\n        const to = this.dateTo ? this.dateTo.toISOString() : '';\n        this.applyEvent.emit([from, to]);\n        break;\n      }\n\n      case 'number-range': {\n        // Only emit range if it's not at default boundaries\n        const hasActiveRange =\n          this.rangeMin !== this.min() || this.rangeMax !== this.max();\n\n        if (this.rangeMode === 'include') {\n          if (hasActiveRange) {\n            // Emit in nested array format: [[from, to], discrete1, discrete2, ...]\n            const rangeTuple = [String(this.rangeMin), String(this.rangeMax)];\n            this.applyEvent.emit([\n              rangeTuple,\n              ...this.discreteIncluded.map((v) => String(v)),\n            ] as any);\n          } else {\n            // No active range, only emit discrete values\n            this.applyEvent.emit(this.discreteIncluded.map((v) => String(v)));\n          }\n        } else {\n          // For exclude mode\n          if (hasActiveRange) {\n            // Emit in nested array format: [[from, to], discrete1, discrete2, ...]\n            const rangeTuple = [String(this.rangeMin), String(this.rangeMax)];\n            this.applyEvent.emit([\n              rangeTuple,\n              ...this.discreteExcluded.map((v) => String(v)),\n            ] as any);\n          } else {\n            // No active range, only emit discrete values\n            this.applyEvent.emit(this.discreteExcluded.map((v) => String(v)));\n          }\n        }\n        break;\n      }\n\n      case 'number-range-slider': {\n        // Only emit range if it's not at default boundaries\n        const hasActiveSliderRange =\n          this.sliderValues[0] !== this.sliderMin() ||\n          this.sliderValues[1] !== this.sliderMax();\n\n        if (this.rangeMode === 'include') {\n          if (hasActiveSliderRange) {\n            // Emit in nested array format: [[from, to], discrete1, discrete2, ...]\n            const sliderRangeTuple = [\n              String(this.sliderValues[0]),\n              String(this.sliderValues[1]),\n            ];\n            this.applyEvent.emit([\n              sliderRangeTuple,\n              ...this.discreteIncluded.map((v) => String(v)),\n            ] as any);\n          } else {\n            // No active range, only emit discrete values\n            this.applyEvent.emit(this.discreteIncluded.map((v) => String(v)));\n          }\n        } else {\n          // For exclude mode\n          if (hasActiveSliderRange) {\n            // Emit in nested array format: [[from, to], discrete1, discrete2, ...]\n            const sliderRangeTuple = [\n              String(this.sliderValues[0]),\n              String(this.sliderValues[1]),\n            ];\n            this.applyEvent.emit([\n              sliderRangeTuple,\n              ...this.discreteExcluded.map((v) => String(v)),\n            ] as any);\n          } else {\n            // No active range, only emit discrete values\n            this.applyEvent.emit(this.discreteExcluded.map((v) => String(v)));\n          }\n        }\n        break;\n      }\n\n      case 'text-input':\n        this.applyEvent.emit(this.textValue ? [this.textValue] : []);\n        break;\n\n      case 'number-input':\n        this.applyEvent.emit(\n          this.numberValue !== null ? [String(this.numberValue)] : []\n        );\n        break;\n\n      case 'toggle':\n        this.applyEvent.emit([String(this.toggleValue)]);\n        break;\n\n      case 'tree':\n        if (this.treeSelectedNodes) {\n          const values = Array.isArray(this.treeSelectedNodes)\n            ? this.treeSelectedNodes\n            : [this.treeSelectedNodes];\n          this.applyEvent.emit(values.map((v) => String(v)));\n        } else {\n          this.applyEvent.emit([]);\n        }\n        break;\n\n      case 'query':\n        if (this.queryValue !== null) {\n          this.applyEvent.emit([String(this.queryValue)]);\n        } else {\n          this.applyEvent.emit([]);\n        }\n        break;\n\n      case 'autocomplete':\n        this.applyEvent.emit(this.autocompleteValue);\n        break;\n\n      default:\n        this.applyEvent.emit([]);\n    }\n  }\n\n  private _getEffectiveOptions(): FilterOption[] {\n    // If async options loaded, use those\n    const loaded = this.loadedOptions();\n    if (loaded.length > 0) {\n      console.log(\n        '[FilterValueSelector] Using async loaded options:',\n        loaded.length,\n        'options'\n      );\n      return loaded;\n    }\n\n    // If displayOptions provided, use those\n    const display = this.displayOptions();\n    if (display.length > 0) {\n      console.log(\n        '[FilterValueSelector] Using display options:',\n        display.length,\n        'options'\n      );\n      return display;\n    }\n\n    // Fall back to legacy string options\n    const legacy = this.options().map((o) => ({ label: o, value: o }));\n    console.log(\n      '[FilterValueSelector] Using legacy options:',\n      legacy.length,\n      'options'\n    );\n    return legacy;\n  }\n\n  private async _loadAsyncOptions(\n    loader: FilterOptionsLoader,\n    context?: FilterContext\n  ): Promise<void> {\n    const field = context?.entity?.id || 'unknown';\n    console.log('[FilterValueSelector] Starting async options load', {\n      field,\n      contextEntity: context?.entity,\n      hasLoader: !!loader,\n    });\n\n    this.isLoading.set(true);\n    this.hasError.set(false);\n\n    try {\n      const result = await loader(field, context);\n      console.log('[FilterValueSelector] Async options loaded successfully', {\n        field,\n        optionsCount: result.length,\n        options: result,\n      });\n      this.loadedOptions.set(result);\n    } catch (error) {\n      console.error('[FilterValueSelector] Failed to load filter options', {\n        field,\n        error,\n      });\n      this.hasError.set(true);\n    } finally {\n      this.isLoading.set(false);\n      console.log('[FilterValueSelector] Async loading completed', {\n        field,\n        hasError: this.hasError(),\n        isLoading: this.isLoading(),\n      });\n    }\n  }\n}\n","import { Injectable, computed, signal } from '@angular/core';\n\n/**\n * Validation message severity levels\n */\nexport type ValidationSeverity = 'error' | 'warning' | 'info';\n\n/**\n * Validation message structure\n */\nexport interface ValidationMessage {\n  id: string;\n  severity: ValidationSeverity;\n  message: string;\n  icon?: string;\n}\n\n/**\n * Validation rule function signature\n * Returns null if valid, or ValidationMessage if invalid\n */\nexport type ValidationRule<T = any> = (\n  context: T\n) => ValidationMessage | null;\n\n/**\n * Generic reactive validation service for filter components\n *\n * Features:\n * - Declarative validation rules\n * - Real-time reactive validation\n * - Multiple validation messages per field\n * - Severity levels (error, warning, info)\n * - Type-safe validation contexts\n *\n * Usage:\n * ```typescript\n * export class FilterComponent {\n *   validationService = inject(FilterValidationService);\n *   filterRows = signal<any[]>([]);\n *\n *   constructor() {\n *     // Register validation rules\n *     this.validationService.registerRule({\n *       id: 'multiple-ranges',\n *       severity: 'warning',\n *       validate: (rows) => this.validateMultipleRanges(rows)\n *     });\n *\n *     // Connect reactive state\n *     effect(() => {\n *       this.validationService.setContext(this.filterRows());\n *     });\n *   }\n *\n *   readonly validationMessages = this.validationService.messages;\n *   readonly hasErrors = this.validationService.hasErrors;\n *   readonly hasWarnings = this.validationService.hasWarnings;\n * }\n * ```\n */\n@Injectable()\nexport class FilterValidationService<TContext = any> {\n  // =========================================================================\n  // INTERNAL STATE\n  // =========================================================================\n\n  private readonly _context = signal<TContext | null>(null);\n  private readonly _rules = signal<Map<string, ValidationRule<TContext>>>(new Map());\n\n  // =========================================================================\n  // PUBLIC SIGNALS\n  // =========================================================================\n\n  /**\n   * All active validation messages\n   */\n  readonly messages = computed<ValidationMessage[]>(() => {\n    const context = this._context();\n    if (!context) return [];\n\n    const rules = this._rules();\n    const messages: ValidationMessage[] = [];\n\n    for (const [id, rule] of rules.entries()) {\n      const message = rule(context);\n      if (message) {\n        messages.push({ ...message, id });\n      }\n    }\n\n    return messages;\n  });\n\n  /**\n   * Error messages only\n   */\n  readonly errors = computed<ValidationMessage[]>(() => {\n    return this.messages().filter(m => m.severity === 'error');\n  });\n\n  /**\n   * Warning messages only\n   */\n  readonly warnings = computed<ValidationMessage[]>(() => {\n    return this.messages().filter(m => m.severity === 'warning');\n  });\n\n  /**\n   * Info messages only\n   */\n  readonly infos = computed<ValidationMessage[]>(() => {\n    return this.messages().filter(m => m.severity === 'info');\n  });\n\n  /**\n   * Check if any errors exist\n   */\n  readonly hasErrors = computed<boolean>(() => {\n    return this.errors().length > 0;\n  });\n\n  /**\n   * Check if any warnings exist\n   */\n  readonly hasWarnings = computed<boolean>(() => {\n    return this.warnings().length > 0;\n  });\n\n  /**\n   * Check if any info messages exist\n   */\n  readonly hasInfos = computed<boolean>(() => {\n    return this.infos().length > 0;\n  });\n\n  /**\n   * Check if any messages exist\n   */\n  readonly hasMessages = computed<boolean>(() => {\n    return this.messages().length > 0;\n  });\n\n  // =========================================================================\n  // PUBLIC METHODS\n  // =========================================================================\n\n  /**\n   * Set the validation context (typically the component state)\n   * This triggers re-validation of all rules\n   */\n  setContext(context: TContext): void {\n    this._context.set(context);\n  }\n\n  /**\n   * Register a validation rule\n   */\n  registerRule(id: string, rule: ValidationRule<TContext>): void {\n    this._rules.update(rules => {\n      const newRules = new Map(rules);\n      newRules.set(id, rule);\n      return newRules;\n    });\n  }\n\n  /**\n   * Unregister a validation rule\n   */\n  unregisterRule(id: string): void {\n    this._rules.update(rules => {\n      const newRules = new Map(rules);\n      newRules.delete(id);\n      return newRules;\n    });\n  }\n\n  /**\n   * Clear all validation rules\n   */\n  clearRules(): void {\n    this._rules.set(new Map());\n  }\n\n  /**\n   * Clear the validation context\n   */\n  clearContext(): void {\n    this._context.set(null);\n  }\n\n  /**\n   * Reset the service (clear context and rules)\n   */\n  reset(): void {\n    this.clearContext();\n    this.clearRules();\n  }\n}\n\n// =========================================================================\n// COMMON VALIDATION RULES\n// =========================================================================\n\n/**\n * Common validation rules that can be reused across filter types\n */\nexport class CommonFilterValidationRules {\n  /**\n   * Validate multiple ranges in number-range filters\n   * Only warns if multiple ranges have the SAME mode (include or exclude)\n   * Mixed modes (e.g., include range + exclude range) are valid\n   */\n  static multipleRanges(rows: any[]): ValidationMessage | null {\n    const rangeRows = rows.filter(\n      r => 'type' in r && r.type === 'range'\n    ) as any[];\n\n    // Count ranges by mode\n    const includeRanges = rangeRows.filter(r => r.mode === 'include');\n    const excludeRanges = rangeRows.filter(r => r.mode === 'exclude');\n\n    // Warn only if multiple ranges with the SAME mode\n    if (includeRanges.length > 1) {\n      return {\n        id: 'multiple-include-ranges',\n        severity: 'warning',\n        message: `Multiple include ranges detected (${includeRanges.length} ranges). Only the first include range will be applied due to current limitations. Consider using discrete values or combining ranges.`,\n        icon: 'pi pi-exclamation-triangle'\n      };\n    }\n\n    if (excludeRanges.length > 1) {\n      return {\n        id: 'multiple-exclude-ranges',\n        severity: 'warning',\n        message: `Multiple exclude ranges detected (${excludeRanges.length} ranges). Only the first exclude range will be applied due to current limitations. Consider using discrete values or combining ranges.`,\n        icon: 'pi pi-exclamation-triangle'\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate overlapping ranges\n   */\n  static overlappingRanges(rows: any[]): ValidationMessage | null {\n    const rangeRows = rows.filter(\n      r => 'type' in r && r.type === 'range' && Array.isArray(r.value)\n    ) as any[];\n\n    if (rangeRows.length < 2) return null;\n\n    // Check for overlaps\n    for (let i = 0; i < rangeRows.length; i++) {\n      for (let j = i + 1; j < rangeRows.length; j++) {\n        const [min1, max1] = rangeRows[i].value as [number, number];\n        const [min2, max2] = rangeRows[j].value as [number, number];\n\n        // Check if ranges overlap\n        if (min1 <= max2 && min2 <= max1) {\n          return {\n            id: 'overlapping-ranges',\n            severity: 'warning',\n            message: `Overlapping ranges detected: [${min1}-${max1}] and [${min2}-${max2}]. This may produce unexpected results.`,\n            icon: 'pi pi-exclamation-triangle'\n          };\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate empty rows\n   */\n  static emptyRows(rows: any[]): ValidationMessage | null {\n    const emptyRows = rows.filter(r => {\n      if (Array.isArray(r.value)) {\n        return r.value.length === 0 || r.value.every((v: any) => v === null || v === undefined || v === '');\n      }\n      return r.value === null || r.value === undefined || r.value === '';\n    });\n\n    if (emptyRows.length > 0) {\n      return {\n        id: 'empty-rows',\n        severity: 'info',\n        message: `${emptyRows.length} empty row(s) will be ignored when applying the filter.`,\n        icon: 'pi pi-info-circle'\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate duplicate values in discrete rows\n   */\n  static duplicateValues(rows: any[]): ValidationMessage | null {\n    const values = rows\n      .filter(r => !Array.isArray(r.value))\n      .map(r => r.value);\n\n    const uniqueValues = new Set(values);\n    const duplicateCount = values.length - uniqueValues.size;\n\n    if (duplicateCount > 0) {\n      return {\n        id: 'duplicate-values',\n        severity: 'info',\n        message: `${duplicateCount} duplicate value(s) detected. Duplicates will be merged automatically.`,\n        icon: 'pi pi-info-circle'\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate conflicting include/exclude values\n   */\n  static conflictingModes(rows: any[]): ValidationMessage | null {\n    const includeValues = new Set(\n      rows.filter(r => r.mode === 'include' && !Array.isArray(r.value)).map(r => r.value)\n    );\n    const excludeValues = new Set(\n      rows.filter(r => r.mode === 'exclude' && !Array.isArray(r.value)).map(r => r.value)\n    );\n\n    const conflicts: any[] = [];\n    for (const val of includeValues) {\n      if (excludeValues.has(val)) {\n        conflicts.push(val);\n      }\n    }\n\n    if (conflicts.length > 0) {\n      return {\n        id: 'conflicting-modes',\n        severity: 'warning',\n        message: `${conflicts.length} value(s) are both included and excluded: ${conflicts.slice(0, 3).join(', ')}${conflicts.length > 3 ? '...' : ''}. Exclude mode will take precedence.`,\n        icon: 'pi pi-exclamation-triangle'\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate row count limits\n   */\n  static rowCountLimit(rows: any[], limit: number, type = 'rows'): ValidationMessage | null {\n    if (rows.length >= limit) {\n      return {\n        id: 'row-count-limit',\n        severity: 'info',\n        message: `Maximum ${limit} ${type} reached. Remove existing rows to add new ones.`,\n        icon: 'pi pi-info-circle'\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate out-of-bounds values for range filters\n   */\n  static outOfBounds(rows: any[], min: number, max: number): ValidationMessage | null {\n    const outOfBoundsRows = rows.filter(r => {\n      if (Array.isArray(r.value)) {\n        const [rangeMin, rangeMax] = r.value as [number, number];\n        return rangeMin < min || rangeMax > max;\n      }\n      if (typeof r.value === 'number') {\n        return r.value < min || r.value > max;\n      }\n      return false;\n    });\n\n    if (outOfBoundsRows.length > 0) {\n      return {\n        id: 'out-of-bounds',\n        severity: 'warning',\n        message: `${outOfBoundsRows.length} value(s) are outside the valid range [${min}-${max}]. These values may be ignored.`,\n        icon: 'pi pi-exclamation-triangle'\n      };\n    }\n\n    return null;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  input,\n  OnDestroy,\n  output,\n  signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { PopoverModule } from 'primeng/popover';\nimport { RadioButton } from 'primeng/radiobutton';\n\nexport interface AutoRefreshConfig {\n  intervalSec: number;\n  repeat: number;\n  remaining: number;\n}\n\nexport interface AutoRefreshIntervalOption {\n  label: string;\n  value: number | null;\n}\n\nexport interface AutoRefreshRepeatOption {\n  label: string;\n  value: number;\n}\n\nconst DEFAULT_INTERVAL_OPTIONS: AutoRefreshIntervalOption[] = [\n  { label: 'Off', value: null },\n  { label: '5 minutes', value: 300 },\n  { label: '10 minutes', value: 600 },\n  { label: '15 minutes', value: 900 },\n  { label: '30 minutes', value: 1800 },\n];\n\nconst DEFAULT_REPEAT_OPTIONS: AutoRefreshRepeatOption[] = [\n  { label: '\\u221E', value: Infinity },\n  { label: '5', value: 5 },\n  { label: '10', value: 10 },\n  { label: '20', value: 20 },\n];\n\n@Component({\n  selector: 'ui-auto-refresh-button',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    TooltipModule,\n    PopoverModule,\n    RadioButton,\n  ],\n  template: `\n    @if (disableAutoRefresh()) {\n      <!-- Simple refresh button (no split) — border matches p-button-outlined -->\n      <button\n        type=\"button\"\n        class=\"auto-refresh-btn tw-inline-flex tw-items-center tw-justify-center tw-h-[var(--p-button-sm-height,2rem)] tw-px-3 tw-bg-transparent tw-border tw-border-solid tw-rounded-[var(--p-button-border-radius,6px)] tw-cursor-pointer tw-transition-colors hover:tw-bg-surface-100 dark:hover:tw-bg-surface-800\"\n        [pTooltip]=\"'Refresh'\"\n        [tooltipOptions]=\"{ showDelay: 300 }\"\n        tooltipPosition=\"bottom\"\n        [disabled]=\"disabled()\"\n        (click)=\"onMainClick()\">\n        <i class=\"pi pi-sync tw-text-primary\"></i>\n      </button>\n    } @else {\n      <!-- Split button container -->\n      <div class=\"tw-inline-flex tw-items-stretch tw-rounded-[var(--p-button-border-radius,6px)] tw-border tw-border-solid tw-transition-colors tw-duration-200\"\n           [ngClass]=\"active() ? 'tw-border-primary tw-bg-primary' : 'auto-refresh-btn'\">\n        <!-- Main refresh button -->\n        <button\n          type=\"button\"\n          class=\"tw-flex tw-items-center tw-justify-center tw-gap-1.5 tw-h-[var(--p-button-sm-height,2rem)] tw-px-3 tw-border-0 tw-cursor-pointer tw-transition-colors tw-rounded-l-[var(--p-button-border-radius,6px)]\"\n          [ngClass]=\"active() ? 'tw-bg-primary hover:tw-bg-primary-emphasis' : 'tw-bg-transparent hover:tw-bg-surface-100 dark:hover:tw-bg-surface-800'\"\n          [pTooltip]=\"tooltipText()\"\n          [tooltipOptions]=\"{ showDelay: 300 }\"\n          tooltipPosition=\"bottom\"\n          [disabled]=\"disabled()\"\n          (click)=\"onMainClick()\">\n          <i class=\"pi pi-sync\"              [ngClass]=\"active() ? 'tw-text-primary-contrast' : 'tw-text-primary'\"></i>\n        </button>\n        <!-- Divider -->\n        <div class=\"tw-w-px tw-self-stretch\"\n             [ngClass]=\"active() ? 'tw-bg-primary-contrast/30' : 'tw-bg-surface-300 dark:tw-bg-surface-600'\"></div>\n        <!-- Dropdown arrow -->\n        <button\n          type=\"button\"\n          class=\"tw-flex tw-items-center tw-justify-center tw-h-[var(--p-button-sm-height,2rem)] tw-px-2 tw-border-0 tw-cursor-pointer tw-transition-colors tw-rounded-r-[var(--p-button-border-radius,6px)]\"\n          [ngClass]=\"active() ? 'tw-bg-primary hover:tw-bg-primary-emphasis' : 'tw-bg-transparent hover:tw-bg-surface-100 dark:hover:tw-bg-surface-800'\"\n          [disabled]=\"disabled()\"\n          (click)=\"popover.toggle($event)\">\n          <i class=\"pi pi-chevron-down tw-text-xs\"\n             [ngClass]=\"active() ? 'tw-text-primary-contrast' : 'tw-text-primary'\"></i>\n        </button>\n      </div>\n\n      <!-- Auto-refresh popover -->\n      <p-popover #popover appendTo=\"body\" [style]=\"{ width: '220px' }\">\n        <div class=\"tw-flex tw-flex-col tw-gap-3 tw-p-1\">\n          <!-- Header -->\n          <span class=\"tw-text-xs tw-font-semibold tw-uppercase tw-tracking-wider tw-text-surface-500 dark:tw-text-surface-400 tw-px-1\">\n            {{ intervalHeader() }}\n          </span>\n          <!-- Interval radio group -->\n          <div class=\"tw-flex tw-flex-col tw-gap-1\">\n            @for (opt of intervalOptions(); track opt.value) {\n              <label class=\"tw-flex tw-items-center tw-gap-2.5 tw-px-2 tw-py-1.5 tw-rounded-md tw-cursor-pointer hover:tw-bg-surface-100 dark:hover:tw-bg-surface-800 tw-transition-colors\"\n                   [ngClass]=\"_interval() === opt.value ? 'tw-bg-primary/10' : ''\">\n                <p-radioButton\n                  [value]=\"opt.value\"\n                  [ngModel]=\"_interval()\"\n                  (ngModelChange)=\"_onSelectInterval($event)\" />\n                <span class=\"tw-text-sm\" [class.tw-text-surface-500]=\"opt.value === null\">{{ opt.label }}</span>\n              </label>\n            }\n          </div>\n          <!-- Separator -->\n          <div class=\"tw-h-px tw-bg-surface-200 dark:tw-bg-surface-700\"></div>\n          <!-- Repeat chips -->\n          <div class=\"tw-flex tw-flex-col tw-gap-2 tw-px-1\">\n            <span class=\"tw-text-xs tw-font-semibold tw-uppercase tw-tracking-wider tw-text-surface-500 dark:tw-text-surface-400\">\n              {{ repeatHeader() }}\n            </span>\n            <div class=\"tw-flex tw-gap-1.5\">\n              @for (opt of repeatOptions(); track opt.value) {\n                <button\n                  type=\"button\"\n                  class=\"tw-h-7 tw-min-w-[36px] tw-px-2.5 tw-rounded-full tw-text-sm tw-font-medium tw-border tw-border-solid tw-cursor-pointer tw-transition-all tw-duration-150\"\n                  [ngClass]=\"_repeat() === opt.value\n                    ? 'tw-bg-primary tw-text-white tw-border-primary'\n                    : 'tw-bg-transparent tw-text-surface-600 dark:tw-text-surface-300 tw-border-surface-300 dark:tw-border-surface-600 hover:tw-border-primary'\"\n                  (click)=\"_onSelectRepeat(opt.value)\">\n                  {{ opt.label }}\n                </button>\n              }\n            </div>\n          </div>\n        </div>\n      </p-popover>\n    }\n  `,\n  styles: [`.auto-refresh-btn { border-color: var(--p-button-outlined-primary-border-color, var(--p-primary-color)); }`],\n  host: { style: 'display: inline-flex' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutoRefreshButtonComponent implements OnDestroy {\n  // ── Inputs ──\n  /** Disables the entire button (refresh + dropdown) */\n  readonly disabled = input<boolean>(false);\n  /** Disables only the auto-refresh dropdown; manual refresh still works */\n  readonly disableAutoRefresh = input<boolean>(false);\n  readonly intervalOptions = input<AutoRefreshIntervalOption[]>(DEFAULT_INTERVAL_OPTIONS);\n  readonly repeatOptions = input<AutoRefreshRepeatOption[]>(DEFAULT_REPEAT_OPTIONS);\n  readonly intervalHeader = input<string>('Auto Refresh');\n  readonly repeatHeader = input<string>('Repeat');\n\n  // ── Outputs ──\n  /** Emits on main button click or each auto-refresh tick */\n  readonly refresh = output<void>();\n  /** Emits the current config on start/stop/update */\n  readonly configChange = output<AutoRefreshConfig | null>();\n\n  // ── Internal state ──\n  readonly _interval = signal<number | null>(null);\n  readonly _repeat = signal<number>(Infinity);\n  readonly _remaining = signal<number>(0);\n  readonly _countdown = signal<number>(0);\n  private _timer: ReturnType<typeof setInterval> | null = null;\n\n  // Stop active auto-refresh when disabled or disableAutoRefresh becomes true\n  private readonly _disableEffect = effect(() => {\n    if ((this.disabled() || this.disableAutoRefresh()) && this.active()) {\n      this.stop();\n    }\n  });\n\n  // ── Computed ──\n  readonly active = computed(() => this._interval() !== null);\n\n  readonly tooltipText = computed(() => {\n    const interval = this._interval();\n    if (interval === null) return 'Refresh';\n    const label = interval < 60 ? `${interval}s` : `${interval / 60}m`;\n    const next = this._countdown();\n    const nextLabel = next >= 60\n      ? `${Math.floor(next / 60)}:${String(next % 60).padStart(2, '0')}`\n      : `${next}s`;\n    const rem = this._remaining();\n    const total = this._repeat();\n    const remLabel = total === Infinity\n      ? 'continuous'\n      : `${total - rem + 1} / ${total}`;\n    return `Auto-refresh: ${label}\\n${nextLabel} \\u00B7 ${remLabel}`;\n  });\n\n  // ── Actions ──\n\n  onMainClick(): void {\n    this.refresh.emit();\n    // If active, reset countdown so next tick restarts the interval\n    const currentInterval = this._interval();\n    if (currentInterval !== null) {\n      this._countdown.set(currentInterval);\n    }\n  }\n\n  _onSelectInterval(intervalSec: number | null): void {\n    if (intervalSec === null) {\n      this.stop();\n      return;\n    }\n    this.start(intervalSec, this._repeat());\n  }\n\n  _onSelectRepeat(repeat: number): void {\n    this._repeat.set(repeat);\n    const currentInterval = this._interval();\n    if (currentInterval !== null) {\n      this.start(currentInterval, repeat);\n    }\n  }\n\n  start(intervalSec: number, repeat: number): void {\n    this._clearTimer();\n    this._interval.set(intervalSec);\n    this._repeat.set(repeat);\n    this._remaining.set(repeat === Infinity ? Infinity : repeat);\n    this._countdown.set(intervalSec);\n\n    this._timer = setInterval(() => {\n      const current = this._countdown();\n      if (current <= 1) {\n        this.refresh.emit();\n        const rem = this._remaining();\n        if (rem !== Infinity) {\n          const next = rem - 1;\n          this._remaining.set(next);\n          if (next <= 0) {\n            this.stop();\n            return;\n          }\n        }\n        this._countdown.set(intervalSec);\n      } else {\n        this._countdown.set(current - 1);\n      }\n    }, 1000);\n\n    this._emitConfig();\n  }\n\n  stop(): void {\n    this._clearTimer();\n    this._interval.set(null);\n    this._remaining.set(0);\n    this._countdown.set(0);\n    this.configChange.emit(null);\n  }\n\n  ngOnDestroy(): void {\n    this._clearTimer();\n  }\n\n  private _clearTimer(): void {\n    if (this._timer) {\n      clearInterval(this._timer);\n      this._timer = null;\n    }\n  }\n\n  private _emitConfig(): void {\n    const interval = this._interval();\n    if (interval === null) return;\n    this.configChange.emit({\n      intervalSec: interval,\n      repeat: this._repeat(),\n      remaining: this._remaining() === Infinity ? -1 : this._remaining(),\n    });\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","SERVICES","DIRECTIVES","COMPONENTS","i1.LocalStorageService","i2.WindowService","i4","i5","i7","i6","seededRandom","randBetween","pick","i8"],"mappings":"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"}