{"version":3,"file":"spinque-angular-ui-facet.mjs","sources":["../../../projects/spinque-angular-ui/facet/src/facet-dropdown/facet-overlay-ref.ts","../../../projects/spinque-angular-ui/facet/src/facet-dropdown/facet-overlay.component.ts","../../../projects/spinque-angular-ui/facet/src/facet-dropdown/facet-dropdown.service.ts","../../../projects/spinque-angular-ui/facet/src/facet-dropdown/facet-dropdown-close.directive.ts","../../../projects/spinque-angular-ui/facet/src/facet-dropdown/facet-dropdown-trigger.directive.ts","../../../projects/spinque-angular-ui/facet/src/facet-dropdown/facet-dropdown.component.ts","../../../projects/spinque-angular-ui/facet/src/facet-dropdown/facet-dropdown.component.html","../../../projects/spinque-angular-ui/facet/src/facet-label/facet-label.component.ts","../../../projects/spinque-angular-ui/facet/src/facet-label/facet-label.component.html","../../../projects/spinque-angular-ui/facet/src/facet-multi-list/facet-multi-list.component.ts","../../../projects/spinque-angular-ui/facet/src/facet-multi-list/facet-multi-list.component.html","../../../projects/spinque-angular-ui/facet/src/facet-toggle/facet-toggle.component.ts","../../../projects/spinque-angular-ui/facet/src/facet-toggle/facet-toggle.component.html","../../../projects/spinque-angular-ui/facet/src/facet-number-slider/facet-number-slider.component.ts","../../../projects/spinque-angular-ui/facet/src/facet-number-slider/facet-number-slider.component.html","../../../projects/spinque-angular-ui/facet/src/facet-date-slider/facet-date-slider.component.ts","../../../projects/spinque-angular-ui/facet/src/facet-date-slider/facet-date-slider.component.html","../../../projects/spinque-angular-ui/facet/spinque-angular-ui-facet.ts"],"sourcesContent":["import { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\nimport { InjectionToken } from '@angular/core';\n\n/**\n * Class that is instanciated whenever a facet overlay is created and serves as a reference for that specific overlay\n */\nexport class SpinqueFacetOverlayRef {\n  private afterClosed$ = new Subject();\n  private optionChange$ = new Subject();\n  public isClosed = false;\n\n  constructor(private overlayRef: OverlayRef) { }\n\n  change(data: any) {\n    this.optionChange$.next(data);\n  }\n\n  close(data?: any): void {\n    this.afterClosed$.next(data);\n    this.afterClosed$.complete();\n    this.overlayRef.dispose();\n    this.isClosed = true;\n  }\n\n  afterClosed(): Observable<any> {\n    return this.afterClosed$.asObservable();\n  }\n\n  optionChange() {\n    return this.optionChange$.asObservable();\n  }\n}\n\nexport const FACET_OVERLAY_TEMPLATE = new InjectionToken<any>('FACET_OVERLAY_TEMPLATE');","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, TemplateRef, ElementRef, OnInit } from '@angular/core';\nimport { SpinqueFacetOverlayRef, FACET_OVERLAY_TEMPLATE } from './facet-overlay-ref';\nimport { CommonModule } from '@angular/common';\n\nconst ANIMATION_TIMINGS = '250ms cubic-bezier(0.175, 0.885, 0.32, 1)';\n\n/**\n * Component that contains the dropdown with facet\n */\n@Component({\n    selector: 'spinque-facet-overlay',\n    imports: [CommonModule],\n    host: {\n      'tabindex': '-1',\n      '(keydown)': 'onKeyDown($event)'\n    },\n    template: `<ng-container *ngTemplateOutlet=\"template\" />`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styles: [\n        `\n      :host {\n        display: block;\n        background: white;\n        border-radius: 20px;\n        overflow: hidden;\n        outline: none;\n      }\n      ::ng-deep .title {\n        margin: 8px 16px;\n        font-weight: 500;\n        font-size: 1.1rem;\n        padding: 8px 0;\n      }\n    `\n    ],\n    animations: [\n        trigger('dropDown', [\n            state('void', style({ transform: 'scale(1, 0.6)', transformOrigin: 'top left', opacity: 0 })),\n            state('enter', style({ transform: 'none', opacity: 1 })),\n            transition('* => *', animate(ANIMATION_TIMINGS))\n        ])\n    ]\n})\nexport class SpinqueFacetOverlayComponent implements OnInit {\n  animationState: 'void' | 'enter' = 'enter';\n  animationStateChanged = new EventEmitter<AnimationEvent>();\n\n  constructor(\n    public facetOverlayRef: SpinqueFacetOverlayRef,\n    @Inject(FACET_OVERLAY_TEMPLATE) public template: TemplateRef<any>,\n    private elementRef: ElementRef\n  ) { }\n\n  ngOnInit() {\n    // Focus the overlay content when it's created\n    setTimeout(() => {\n      const overlayContent = this.elementRef.nativeElement.querySelector('.overlay-content');\n      if (overlayContent) {\n        overlayContent.focus();\n      }\n    }, 0);\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    // Handle Escape key to close the overlay\n    if (event.key === 'Escape') {\n      this.facetOverlayRef.close();\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }\n\n  @HostBinding('class.mat-elevation-z8') z8 = true;\n  @HostBinding('@dropDown') get dropDown(): string {\n    return this.animationState;\n  }\n}","import { MediaMatcher } from '@angular/cdk/layout';\nimport { ConnectionPositionPair, Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, ElementRef, Injectable, Injector, TemplateRef } from '@angular/core';\nimport { SpinqueFacetOverlayRef, FACET_OVERLAY_TEMPLATE } from './facet-overlay-ref';\nimport { SpinqueFacetOverlayComponent } from './facet-overlay.component';\nimport { FocusTrapFactory } from '@angular/cdk/a11y';\n\nconst BREAKPOINT_FULLSCREEN = 500;\n\nclass PortalInjector implements Injector {\n constructor(\n   private _parentInjector: Injector,\n   private _customTokens: WeakMap<any, any>) { }\n\n get(token: any, notFoundValue?: any): any {\n   const value = this._customTokens.get(token);\n\n   if (typeof value !== 'undefined') {\n     return value;\n   }\n\n   return this._parentInjector.get<any>(token, notFoundValue);\n }\n}\n\n/**\n * Service that manages the facet dropdowns, with a public API to open and close dropdowns.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class SpinqueFacetDropdownService {\n  openOverlays: SpinqueFacetOverlayRef[] = [];\n\n  constructor(\n    private overlay: Overlay,\n    private injector: Injector,\n    private media: MediaMatcher,\n    private focusTrapFactory: FocusTrapFactory\n  ) { }\n\n  public open(template: TemplateRef<any>, originElement?: ElementRef, height?: string | undefined): SpinqueFacetOverlayRef {\n    const query = this.media.matchMedia(`(min-width: ${BREAKPOINT_FULLSCREEN}px)`);\n    // Returns an OverlayRef (which is a PortalHost)\n    const overlayRef = this.createOverlay(query.matches ? originElement : undefined, height);\n\n    const facetOverlayRef = new SpinqueFacetOverlayRef(overlayRef);\n    this.openOverlays.push(facetOverlayRef);\n\n    const overlayComponent = this.attachOverlayContainer(overlayRef, template, facetOverlayRef);\n\n    overlayRef.backdropClick().subscribe(_ => facetOverlayRef.close());\n\n    // Focus management: Move focus to the overlay when it opens\n    setTimeout(() => {\n      const overlayElement = overlayRef.overlayElement;\n      if (overlayElement) {\n        // Create and enable focus trap\n        const focusTrap = this.focusTrapFactory.create(overlayElement);\n        focusTrap.focusInitialElement();\n      }\n    }, 0);\n\n    return facetOverlayRef;\n  }\n\n  public closeAll() {\n    this.openOverlays.filter(o => !o.isClosed).forEach(o => o.close());\n    this.openOverlays = [];\n  }\n\n  private createOverlay(originElement: ElementRef | undefined, height?: string | undefined) {\n    const overlayConfig = this.getOverlayConfig(originElement, height);\n    return this.overlay.create(overlayConfig);\n  }\n\n  private attachOverlayContainer(overlayRef: OverlayRef, template: TemplateRef<any>, facetOverlayRef: SpinqueFacetOverlayRef) {\n    const injector = this.createInjector(template, facetOverlayRef);\n\n    const containerPortal = new ComponentPortal(SpinqueFacetOverlayComponent, null, injector);\n    const containerRef: ComponentRef<SpinqueFacetOverlayComponent> = overlayRef.attach(containerPortal);\n\n    return containerRef.instance;\n  }\n\n  private createInjector(template: TemplateRef<any>, dialogRef: SpinqueFacetOverlayRef) {\n    // Instantiate new WeakMap for our custom injection tokens\n    const injectionTokens = new WeakMap();\n\n    // Set custom injection tokens\n    injectionTokens.set(SpinqueFacetOverlayRef, dialogRef);\n    injectionTokens.set(FACET_OVERLAY_TEMPLATE, template);\n\n    // Instantiate new PortalInjector\n    return new PortalInjector(this.injector, injectionTokens);\n  }\n\n  private getOverlayConfig(originElement: ElementRef | undefined, height?: string | undefined): OverlayConfig {\n    // The position is determined by the existance and location of an origin element\n    let positionStrategy;\n    if (originElement) {\n      // Hierarchy of perferred positions of the overlay\n      const positions = [\n        new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'top' }),\n        new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'top' }),\n        new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'bottom' }),\n        new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'bottom' })\n      ];\n      positionStrategy = this.overlay\n        .position()\n        .flexibleConnectedTo(originElement)\n        .withPositions(positions)\n        .withPush(true);\n    } else {\n      positionStrategy = this.overlay\n        .position()\n        .global()\n        .centerHorizontally()\n        .centerVertically();\n    }\n\n    const overlayConfig = new OverlayConfig({\n      hasBackdrop: true,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      positionStrategy,\n      height\n    });\n\n    return overlayConfig;\n  }\n}","import { Directive, HostListener } from '@angular/core';\nimport { SpinqueFacetDropdownService } from './facet-dropdown.service';\n\n/**\n * Directive that closes the facet dropdown when host element is clicked on.\n */\n@Directive({\n  selector: '[spinqueFacetDropdownClose]',\n  standalone: true\n})\nexport class SpinqueFacetDropdownCloseDirective {\n  constructor(private facetDropdown: SpinqueFacetDropdownService) {}\n\n  @HostListener('click') click() {\n    this.facetDropdown.closeAll();\n  }\n}","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { SpinqueFacetDropdown } from './facet-dropdown.component';\n\n/**\n * Directive that triggers an inputted facet dropdown component when host element is clicked on.\n */\n@Directive({\n  selector: '[spinqueFacetDropdownTrigger]',\n  standalone: true\n})\nexport class SpinqueFacetDropdownTrigger {\n  /**\n   * A SpinqueFacetDropdownComponenent that should be opened when the host element is clicked on\n   */\n  @Input() spinqueFacetDropdownTrigger?: SpinqueFacetDropdown;\n\n  constructor(private elRef: ElementRef) {}\n\n  @HostListener('click') click() {\n    if (!this.spinqueFacetDropdownTrigger) {\n      return;\n    }\n    const buttonElement = this.elRef;\n    this.spinqueFacetDropdownTrigger.open(buttonElement);\n  }\n\n  @HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) {\n    // Handle Enter and Space keys to open dropdown\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault();\n      this.click();\n    }\n  }\n}","\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { tap } from 'rxjs/operators';\nimport { DropdownableFacet } from '../facet.interface';\nimport { SpinqueFacetDropdownCloseDirective } from './facet-dropdown-close.directive';\nimport { SpinqueFacetDropdownService } from './facet-dropdown.service';\n\n/**\n * Component that holds a facet dropdown. Expects a facet as element content.\n */\n@Component({\n    selector: 'spinque-facet-dropdown',\n    imports: [MatIconModule, MatButtonModule, SpinqueFacetDropdownCloseDirective],\n    templateUrl: './facet-dropdown.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styles: [`\n    ::ng-deep .search-box {\n      position: sticky;\n      top: 0;\n      background: white;\n      z-index: 10;\n    }\n    .content {\n      overflow-y: auto;\n      height: calc(100% - 57px);\n    }\n    .actions {\n      border-top: 1px solid #ddd;\n      padding: 8px;\n      height: 57px;\n      display: flex;\n      flex-direction: row;\n    }\n  `]\n})\nexport class SpinqueFacetDropdown implements OnInit {\n  @ViewChild(TemplateRef) template?: TemplateRef<any>;\n  @Input() facet?: DropdownableFacet; // OR any other type of facet component\n  @Input() showActions = true;\n  @Input() height?: string;\n  @Input() ariaLabelClearButton?: string = 'Clear';\n  @Input() ariaLabelCloseButton?: string = 'Close' ;\n  @Output() close = new EventEmitter<any>();\n\n  private triggerElement?: ElementRef;\n\n  constructor(private facetDropdown: SpinqueFacetDropdownService) { }\n\n  ngOnInit() {\n    if (!this.facet) {\n      return;\n    }\n    this.facet.visible = false;\n  }\n\n  open(originElement: ElementRef) {\n    if (!this.facet || !this.template) {\n      return;\n    }\n    this.triggerElement = originElement;\n    this.facet.visible = true;\n    this.facet.update();\n    this.facetDropdown.open(this.template, originElement, this.height).afterClosed()\n      .pipe(tap(() => {\n        this.facet ? this.facet.visible = false : null;\n        // Return focus to trigger element when overlay closes\n        if (this.triggerElement) {\n          setTimeout(() => {\n            const triggerElement = this.triggerElement?.nativeElement;\n            if (triggerElement) {\n              triggerElement.focus();\n            }\n          }, 0);\n        }\n      }))\n      .subscribe(() => this.facet ? this.close.emit({ facetId: this.facet.facetId, selected: this.facet.selected }) : null);\n  }\n}","<ng-template #contentTemplate>\n  <div class=\"content\">\n    <ng-content />\n  </div>\n\n  @if (facet && showActions) {\n    <div class=\"actions\">\n      <button \n      mat-icon-button \n      (click)=\"facet.clear()\" \n      [disabled]=\"!facet.selected || facet.selected.length === 0\" \n      [attr.aria-label]=\"ariaLabelClearButton\">\n        <mat-icon>remove_done</mat-icon>\n      </button>\n      <span style=\"flex: 1 1 auto\"></span>\n      <button \n      mat-button color=\"primary\" \n      [attr.aria-label]=\"ariaLabelCloseButton\"\n      spinqueFacetDropdownClose>\n        OK\n      </button>\n    </div>\n  }\n</ng-template>","\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * Renders a label string for a given facet component, indicating what is/is not selected\n */\n@Component({\n    selector: 'spinque-facet-label',\n    imports: [],\n    templateUrl: './facet-label.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styles: []\n})\nexport class SpinqueFacetLabel {\n  selected = input<any>([]);\n  options = input<any[]>([]);\n  singular = input<string>('option');\n  plural = input<string>('options');\n\n  readonly selectedOptions = computed(() => {\n    const selected = this.selected();\n    const options = this.options();\n    if (!selected || selected.length === 0 || !options || options.length === 0) {\n      return [];\n    }\n    return options.filter((o: any) => selected.includes(o.id));\n  });\n}\n","@if (!selected() || selected().length === 0) {\n  <span class=\"spinque-facet-title\">\n    <ng-content />\n  </span>\n} @else if (selected().length === 1) {\n  &nbsp;{{ selectedOptions()[0].title }}\n} @else {\n  &nbsp;{{ selected().length }} {{ plural() }}\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  signal,\n  SimpleChange,\n  SimpleChanges,\n  TemplateRef\n} from '@angular/core';\nimport { MatListModule, MatSelectionListChange } from '@angular/material/list';\nimport { Query } from '@spinque/query-api';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { catchError, filter, map, switchMap, tap } from 'rxjs/operators';\nimport { SpinqueApiService } from '@spinque/angular-ui';\nimport { DropdownableFacet } from '../facet.interface';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SpinqueSearchField } from \"@spinque/angular-ui/search-field\";\n\n@Component({\n    selector: 'spinque-facet-multi-list',\n    imports: [CommonModule, SpinqueSearchField, ReactiveFormsModule, FormsModule, MatListModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, SpinqueSearchField],\n    templateUrl: './facet-multi-list.component.html',\n    exportAs: 'spinqueFacetMultiList',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styles: [\n        `\n      .spinque-facet-options {\n        overflow: auto;\n      }\n      .loading {\n        padding: 20px 0;\n        justify-content: center;\n        display: flex;\n      }\n      .spinque-facet-option-label {\n        padding-right: 16px;\n        overflow: hidden;\n        text-overflow: ellipsis;\n      }\n      .spinque-facet-option-count {\n        font-size: 12px;\n        color: var(--mat-list-list-item-supporting-text-color);\n      }\n      mat-list-option {\n        height: 48px !important;\n      }\n    `,\n    ]\n})\nexport class SpinqueFacetMultiList implements OnInit, OnChanges, DropdownableFacet {\n  // Query stack to fetch facet options\n  @Input() queryStack: Query[] = [];\n\n  @Input() sort: 'name' | 'score' = 'score';\n  @Input() sortOrder: 'asc' | 'desc' = 'asc';\n  @Input() sortFn?: (a: object, b: object) => number;\n\n  @Input() templateRef?: TemplateRef<any>;\n\n  @Input() search = false;\n  @Input() searchLabel = 'Filter';\n\n  @Input() count = 1024;\n  @Input() scroll = true;\n  @Input() scrollOffset = 50;\n\n  @Input() showScore = true;\n\n  @Input() selected: string[] = [];\n  @Input() singular = 'item';\n  @Input() plural = 'items';\n  \n  @Input() noResults = 'No results';\n  @Input() noResultsSecondaryLabel = 'Could not fetch facet options';\n\n  @Input() showNoneAsAll = false;\n\n  @Input() optionMapping = (option: any) => option;\n\n  visible = true;\n  options: any[] = [];\n  optionIds: string[] = [];\n  filteredOptions: any[] = [];\n  isLoading = signal(false);\n  // allLoaded = false;\n  queryControl = new FormControl<string>('');\n\n  error: any;\n\n  // We use an observable so that we can cancel previous requests for options that are still running\n  queryChange = new BehaviorSubject<Query[]>([]);\n\n  @Output() selectedChange = new EventEmitter<string[]>();\n  @Output() deselectedChange = new EventEmitter<string[]>();\n\n  @ContentChild(TemplateRef) template?: TemplateRef<any>;\n\n  constructor(private api: SpinqueApiService) { }\n\n  ngOnInit() {\n    this.queryControl.valueChanges.subscribe(value => {\n      this.filteredOptions = this.options.filter((o: any) => o.title.toLowerCase().includes(this.queryControl.value?.toLowerCase()))\n    });\n\n    this.queryChange\n      .pipe(\n        filter(() => this.visible),\n        switchMap(() => {\n          this.options = [];\n          this.optionIds = [];\n          return this.getFacetOptions(0);\n        })\n      )\n      .subscribe((options: any[]) => {\n        this.options = options;\n        this.optionIds = options.map(o => o.id);\n        this.filteredOptions = this.options.filter((o) =>\n          o.title.toLowerCase().includes(this.queryControl.value?.toLowerCase())\n        );\n      });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (\n      changes['queryStack'] &&\n      this.hasRelevantChange(changes['queryStack'])\n    ) {\n      this.queryChange.next(this.queryStack);\n    }\n  }\n\n  clear() {\n    this.selected = [];\n    this.selectedChange.emit(this.selected);\n  }\n\n  update() {\n    this.queryChange.next(this.queryStack);\n  }\n\n  get facetId(): string {\n    if (!this.queryStack) {\n      return 'unknown';\n    }\n    return this.queryStack[this.queryStack.length - 1].endpoint;\n  }\n\n  hasRelevantChange(queryChange: SimpleChange): boolean {\n    const filterEndpoint = `${queryChange.currentValue[queryChange.currentValue.length - 1].endpoint\n      }:FILTER`;\n\n    // the first change is always relevant\n    if (queryChange.firstChange) {\n      return true;\n    }\n\n    // maybe the query object turns out the same\n    const prev = queryChange.previousValue as Query[];\n    const current = queryChange.currentValue as Query[];\n\n    if (this.isEqual(prev, current)) {\n      return false;\n    }\n\n    if (prev.length === 0) {\n      return true;\n    }\n\n    const prevFilter = prev.find((q) => q.endpoint === filterEndpoint);\n    const currentFilter = current.find((q) => q.endpoint === filterEndpoint);\n    if (!this.isEqual(prevFilter, currentFilter)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  isEqual(a: any, b: any): boolean {\n    return JSON.stringify(a) === JSON.stringify(b);\n  }\n\n  getFacetOptions(offset?: number): Observable<any[]> {\n    if (this.queryStack.length === 0) {\n      return of([]);\n    }\n    this.isLoading.set(true);\n    this.error = undefined;\n    const config = {\n      count: this.count,\n      offset,\n    };\n    return this.api.getResults(this.queryStack, config).pipe(\n      map((response) => {\n        this.isLoading.set(false);\n\n        const options = response.items.map((item) => {\n          const tuple = item.tuple;\n          if (\n            tuple.length === 1 &&\n            (typeof tuple[0] === 'string' || typeof tuple[0] === 'number')\n          ) {\n            return {\n              score: item.probability,\n              id: tuple[0],\n              title: tuple[0],\n            };\n          } else if (\n            tuple.length === 2 &&\n            tuple[0] instanceof Object &&\n            (typeof tuple[1] === 'string' || typeof tuple[1] === 'number')\n          ) {\n            return {\n              score: item.probability,\n              id: tuple[0].id,\n              title: tuple[1],\n            };\n          } else {\n            return {\n              score: item.probability,\n              id: (tuple[0] as any).id,\n              value: tuple,\n            };\n          }\n        });\n\n        return options;\n      }),\n      map(options => options.map(option => this.optionMapping(option))),\n      map(options => {\n        if (this.sortFn) {\n          return options.sort(this.sortFn);\n        } else if (this.sort === 'name') {\n          return this.sortOrder === 'desc'\n            ? options.sort((a: any, b: any) => b.title.toString().localeCompare(a.title.toString(), 'en-US'))\n            : options.sort((a: any, b: any) => a.title.toString().localeCompare(b.title.toString(), 'en-US'));\n        } else {\n          return options;\n        }\n      }),\n      tap(options => {\n        this.isLoading.set(false);\n        this.error = undefined;\n        // this.allLoaded = options.length < this.count;\n        this.selected = [...this.selected]; // The mat-list-option needs a reset of this\n      }),\n      catchError((error) => {\n        this.isLoading.set(false);\n        this.error = error.error || error;\n        return of([]);\n      })\n    );\n  }\n\n  compareOption(o1: any, o2: any) {\n    return o1 && o2 && o1.id === o2.id;\n  }\n\n  selectionChange() {\n    if (this.selected.length === this.options.length && this.showNoneAsAll) {\n      this.selected = [];\n    }\n    this.selectedChange.emit(this.selected);\n  }\n\n  deselectOne(event: MatSelectionListChange) {\n    this.selected = this.optionIds.filter(id => id !== event.options[0].value);\n    this.selectionChange();\n  }\n\n  setSelection(options: any[]) {\n    const oldSelected = JSON.stringify(this.selected);\n\n    this.selected = (options || []).filter(id => this.options.find(o => o.id === id));\n\n    if (oldSelected !== JSON.stringify(this.selected)) {\n      this.selectedChange.emit(this.selected);\n      const deselected = this.options.filter(o => !this.selected.find(s => s === o));\n      this.deselectedChange.emit(deselected);\n    }\n  }\n\n  listScroll(event: any) {\n    // if (this.isLoading || this.allLoaded) {\n    //   return;\n    // }\n    // const el = event.target;\n    // if (el.scrollTop > 0 && el.scrollTop + el.offsetHeight >= el.scrollHeight - this.scrollOffset) {\n    //   const offset = this.options.length;\n    //   this.getFacetOptions(offset)\n    //     .pipe(map(result => ({ ...result, options: result.options.map((option: any) => this.optionMapping(option)) })))\n    //     .subscribe(data => {\n    //       this.options = [...this.options, ...data.options];\n    //     });\n    // }\n  }\n}\n","<div>\n  @if (search) {\n    <!-- <div class=\"search-box\">\n      <mat-form-field appearance=\"fill\" style=\"margin: 0.75em 0.75em -0.75em; width: calc(100% - 1.5rem)\">\n        <mat-label>{{ searchLabel }} {{ plural }}</mat-label>\n        <mat-icon matPrefix>search</mat-icon>\n        <input matInput [formControl]=\"queryControl\">\n        @if (queryControl.value !== '') {\n          <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"queryControl.setValue('')\">\n            <mat-icon>close</mat-icon>\n          </button>\n        }\n      </mat-form-field>\n    </div> -->\n\n    <spinque-search-field\n      [placeholder]=\"searchLabel + ' ' + plural\"\n      [showSearchButton]=\"false\"\n      icon=\"search\"\n      (queryChange)=\"queryControl.setValue($event)\"\n      style=\"display: block; margin: 12px; width: calc(100% - 24px)\"\n      #searchField />\n  }\n\n  @if (isLoading() && (!options || options.length === 0)) {\n    <div class=\"loading\">\n      <mat-spinner [diameter]=\"50\" aria-label=\"Loading options\" />\n    </div>\n  }\n\n  @if (!isLoading() && !error) {\n    <div class=\"spinque-facet-options\" (scroll)=\"listScroll($event)\" [ngStyle]=\"{ 'max-height': scroll ? '500px' : 'unset' }\">\n      @if (showNoneAsAll && selected.length === 0) {\n        <mat-selection-list (selectionChange)=\"deselectOne($event)\" #selectionList>\n          @for (item of filteredOptions; track item) {\n            <mat-list-option [value]=\"item.id\" checkboxPosition=\"before\" selected>\n              <ng-container *ngTemplateOutlet=\"templateRef ? templateRef : template ? template : defaultTemplate; context: { $implicit: item }\" />\n            </mat-list-option>\n          }\n        </mat-selection-list>\n      }\n\n      @if (!showNoneAsAll || selected.length > 0) {\n        <mat-selection-list [(ngModel)]=\"selected\" (selectionChange)=\"selectionChange()\" #selectionList>\n          @for (item of filteredOptions; track item) {\n            <mat-list-option [value]=\"item.id\" checkboxPosition=\"before\">\n              <ng-container *ngTemplateOutlet=\"templateRef ? templateRef : template ? template : defaultTemplate; context: { $implicit: item }\" />\n            </mat-list-option>\n          }\n        </mat-selection-list>\n      }\n\n      @if (filteredOptions && filteredOptions.length === 0) {\n        <div class=\"error\" style=\"text-align: center; padding: 24px 0;\">\n          <mat-icon style=\"font-size: 96px; width: 96px; height: 96px; opacity: 0.25;\">search_off</mat-icon>\n        </div>\n      }\n    </div>\n  }\n\n  @if (!isLoading() && error) {\n    <div class=\"error\" style=\"padding: 0 16px\">\n      <h3>{{ noResults }}</h3>\n      @if (noResultsSecondaryLabel) {\n        <p>{{ noResultsSecondaryLabel }}</p>\n      }\n    </div>\n  }\n</div>\n\n<ng-template let-item #defaultTemplate>\n  <div style=\"display: flex; flex-direction: row\">\n    <div class=\"spinque-facet-option-label\" style=\"flex: 1 1 auto\">{{ item.title }}</div>\n    @if (showScore) {\n      <div class=\"spinque-facet-option-count\">{{ item.score | number }}</div>\n    }\n  </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Query } from '@spinque/query-api';\nimport { SpinqueFacetMultiList } from '../facet-multi-list/facet-multi-list.component';\nimport { SpinqueFacetDropdown } from '../facet-dropdown/facet-dropdown.component';\nimport { SpinqueFacetLabel } from '../facet-label/facet-label.component';\nimport { SpinqueFacetDropdownTrigger } from '../facet-dropdown/facet-dropdown-trigger.directive';\n\n/**\n * Simple component that combines a button, SpinqueFacetDropdown and SpinqueFacetMultiList into one single\n * button that toggles a dropdown containing a multilist facet.\n */\n@Component({\n    selector: 'spinque-facet-toggle',\n    imports: [\n        SpinqueFacetMultiList,\n        SpinqueFacetDropdown,\n        SpinqueFacetDropdownTrigger,\n        SpinqueFacetLabel,\n        MatButtonModule,\n        MatIconModule,\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    templateUrl: './facet-toggle.component.html',\n    styles: []\n})\nexport class SpinqueFacetToggle {\n  /**\n   * The QueryStack to get the facet options for\n   */\n  @Input() queryStack: Query[] = [];\n\n  @Input() sort: 'name' | 'score' = 'score';\n  @Input() sortOrder: 'asc' | 'desc' = 'asc';\n  @Input() sortFn?: (a: object, b: object) => number;\n\n  @Input() search = false;\n  @Input() searchLabel = 'Filter';\n\n  @Input() count = 1024;\n  @Input() scrollOffset = 50;\n  @Input() height?: string;\n\n  @Input() showScore = true;\n\n  @Input() selected: string[] = [];\n  @Input() singular = 'selected';\n  @Input() plural = 'selected';\n  @Input() noResults = 'No results';\n  @Input() noResultsSecondaryLabel = 'Could not fetch facet options';\n\n  @Input() optionMapping: (input: any) => any = option => option;\n\n  /**\n   * The text to display in the toggle button\n   */\n  @Input() label?: string;\n  @Input() ariaLabel?: string = \"Open facet\";\n  @Input() ariaLabelClearButton?: string = 'Clear';\n  @Input() ariaLabelCloseButton?: string = 'Close';\n\n  /**\n   * Emits when the selection of the facet has changed\n   */\n  @Output() selectedChange = new EventEmitter<string[]>();\n\n  @ContentChild(TemplateRef) templateRef?: TemplateRef<any>;\n}","@defer {\n  @if (facet?.selected.length > 0) {\n    <button class=\"spinque-facet-button\" [attr.aria-label]=\"ariaLabel\" mat-flat-button [spinqueFacetDropdownTrigger]=\"dropdown\">\n      <spinque-facet-label [selected]=\"facet.selected\" [options]=\"facet.options\" [singular]=\"facet.singular\" [plural]=\"facet.plural\">{{ label }}</spinque-facet-label>\n      <mat-icon iconPositionEnd>arrow_drop_down</mat-icon>\n    </button>\n  } @else {\n    <button class=\"spinque-facet-button\" [attr.aria-label]=\"ariaLabel\" mat-stroked-button [spinqueFacetDropdownTrigger]=\"dropdown\">\n      <spinque-facet-label [selected]=\"facet.selected\" [options]=\"facet.options\" [singular]=\"facet.singular\" [plural]=\"facet.plural\">{{ label }}</spinque-facet-label>\n      <mat-icon iconPositionEnd>arrow_drop_down</mat-icon>\n    </button>\n  }\n  <spinque-facet-dropdown [facet]=\"facet\" [height]=\"height\" [ariaLabelClearButton]=\"ariaLabelClearButton\" [ariaLabelCloseButton]=\"ariaLabelCloseButton\" #dropdown>\n    <spinque-facet-multi-list\n      [queryStack]=\"queryStack\"\n      [sort]=\"sort\"\n      [sortOrder]=\"sortOrder\"\n      [sortFn]=\"sortFn\"\n      [templateRef]=\"templateRef\"\n      [search]=\"search\"\n      [searchLabel]=\"searchLabel\"\n      [count]=\"count\"\n      [scrollOffset]=\"scrollOffset\"\n      [showScore]=\"showScore\"\n      [selected]=\"selected\"\n      [singular]=\"singular\"\n      [plural]=\"plural\"\n      [noResults]=\"noResults\"\n      [noResultsSecondaryLabel]=\"noResultsSecondaryLabel\"\n      [optionMapping]=\"optionMapping\"\n      [scroll]=\"false\"\n      (selectedChange)=\"selectedChange.emit($event)\"\n      #facet />\n  </spinque-facet-dropdown>\n} @placeholder {\n  <button class=\"spinque-facet-button\" [attr.aria-label]=\"ariaLabel\" mat-stroked-button>\n    {{ label }}\n    <mat-icon iconPositionEnd>arrow_drop_down</mat-icon>\n  </button>\n} @loading {\n  <button disabled class=\"spinque-facet-button\"[attr.aria-label]=\"ariaLabel\" mat-stroked-button>\n    {{ label }}\n    <mat-icon iconPositionEnd>arrow_drop_down</mat-icon>\n  </button>\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { isEqual } from 'lodash';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { debounceTime, map, switchMap, tap } from 'rxjs/operators';\n\nimport { Query, ResultItem, TupleTypes } from '@spinque/query-api';\n\nimport { SpinqueApiService } from '@spinque/angular-ui';\nimport { DropdownableFacet } from '../facet.interface';\nimport { CommonModule } from '@angular/common';\nimport { MatSliderModule } from '@angular/material/slider';\n\n@Component({\n    selector: 'spinque-facet-number-slider',\n    imports: [CommonModule, MatSliderModule, ReactiveFormsModule],\n    templateUrl: './facet-number-slider.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    styles: []\n})\nexport class SpinqueFacetNumberSlider implements OnInit, OnChanges, DropdownableFacet {\n  @Input() queryStack: Query[] = [];\n  @Input() label = 'Pick a number';\n  @Input() step: number = 1;\n\n  @Input() optionMapping: ((o: ResultItem<TupleTypes[]>) => string) | undefined = undefined;\n  @Input() numberFormatter: (o: string) => number = (o) => {\n    try {\n      return parseInt(o);\n    } catch (e) {\n      return NaN;\n    }\n  };\n  @Input() displayFormatter: ((o: number) => string) | undefined = undefined;\n  @Input() debounceTime = 250;\n\n  @Output() selectedChange = new EventEmitter<number | undefined>();\n\n  formField = new FormControl<number>(0, { nonNullable: true });\n\n  // We use an observable so that we can cancel previous requests for options that are still running\n  queryChange = new BehaviorSubject<Query[]>([]);\n\n  options: number[] = [];\n  isLoading = false;\n\n  _selected: number | undefined;\n  get selected(): number | undefined {\n    return this._selected;\n  }\n\n  @Input() set selected(value: undefined | number | string | string[]) {\n    if (!this.optionMapping) {\n      console.error('Please define an optionMapping for the SpinqueFacetSlider');\n      return;\n    }\n    if (value === undefined || (Array.isArray(value) && value.length === 0)) {\n      this._selected = undefined;\n      return;\n    }\n    if (typeof value === 'number') {\n      this._selected = value;\n      return;\n    }\n    let _value: string;\n    if (Array.isArray(value)) {\n      _value = value[0];\n    } else {\n      _value = value;\n    }\n    this._selected = this.numberFormatter(_value);\n  }\n\n  constructor(private rest: SpinqueApiService) {}\n\n  ngOnInit() {\n    this.formField.disable();\n\n    this.formField.valueChanges.pipe(debounceTime(this.debounceTime)).subscribe((value) => {\n      if (value === this.max) {\n        this._selected = undefined;\n      } else {\n        this._selected = value;\n      }\n      this.selectedChange.emit(this._selected);\n    });\n\n    this.queryChange\n      .pipe(\n        switchMap(() => {\n          this.formField.disable();\n          return this.getFacetOptions();\n        }),\n      )\n      .subscribe((data) => {\n        this.formField.enable();\n        this.options = data;\n\n        // We got new options so we have to check if the current selection is still in range\n        if (this._selected === undefined) {\n          this.formField.patchValue(this.max);\n        } else if (this._selected < this.min) {\n          this.formField.patchValue(this.min);\n        } else if (this._selected > this.max) {\n          this.formField.patchValue(this.max);\n        }\n      });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const queryChanged = changes['queryStack'] && this.hasRelevantChange(changes['queryStack']);\n    if (queryChanged) {\n      this.queryChange.next(this.queryStack);\n    }\n  }\n\n  get facetId(): string {\n    if (!this.queryStack) {\n      return 'unknown';\n    }\n    return this.queryStack[this.queryStack.length - 1].endpoint;\n  }\n\n  public update() {\n    this.queryChange.next(this.queryStack);\n  }\n\n  hasRelevantChange(queryChange: {\n    previousValue: Query[] | null;\n    currentValue: Query[] | null;\n    firstChange: boolean;\n  }): boolean {\n    const filterEndpoint = `${this.facetId}:FILTER`;\n\n    // the first change is always relevant\n    if (queryChange.firstChange) {\n      return true;\n    }\n\n    // maybe the query object turns out the same\n    const prev = queryChange.previousValue;\n    const current = queryChange.currentValue;\n    if (isEqual(prev, current)) {\n      return false;\n    }\n\n    const prevFilter = prev?.find((q) => q.endpoint === filterEndpoint);\n    const currentFilter = current?.find((q) => q.endpoint === filterEndpoint);\n    if (!isEqual(prevFilter, currentFilter)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  clear() {\n    this._selected = undefined;\n    this.selectedChange.emit(this._selected);\n  }\n\n  getFacetOptions(): Observable<number[]> {\n    if (this.optionMapping === undefined) {\n      console.error('Please define an optionMapping for the SpinqueFacetSlider');\n      return of([]);\n    } else {\n      this.isLoading = true;\n\n      return this.rest.getResults(this.queryStack).pipe(\n        map((result) => {\n          const toNumber: (o: ResultItem<TupleTypes[]>) => number = (o) =>\n            this.optionMapping !== undefined ? this.numberFormatter(this.optionMapping(o)) : 0;\n          return [...result.items.map(toNumber)];\n        }),\n        tap(() => {\n          this.isLoading = false;\n        }),\n      );\n    }\n  }\n\n  compareOption(o1: any, o2: any) {\n    return o1 && o2 && o1.id === o2.id;\n  }\n\n  get min(): number {\n    if (!this.options || this.options.length === 0) {\n      return 0;\n    }\n    return Math.min(...this.options);\n  }\n\n  get max(): number {\n    if (!this.options || this.options.length === 0) {\n      return 0;\n    }\n    return Math.max(...this.options);\n  }\n\n  get range(): number {\n    if (!this.options || this.options.length === 0) {\n      return 0;\n    }\n    return Math.max(...this.options) - Math.min(...this.options);\n  }\n\n}\n","<div>\n  <!-- Label of the slider -->\n  @if (label) {\n    <div style=\"font-size: 16px; font-weight: 500; color: #333; margin: 32px 0 16px\">{{ label }}</div>\n  }\n\n  <!-- Currently selected date value -->\n  <div style=\"display: flex; flex-direction: row; font-size: 12px; color: #999; padding: 0 8px\">\n    @if (!isLoading && formField.value !== undefined) {\n      <span>\n        {{ displayFormatter ? displayFormatter(formField.value) : formField.value }}\n      </span>\n    }\n    &nbsp;\n  </div>\n\n  <!-- Actual slider -->\n  <mat-slider\n    [step]=\"step\"\n    [min]=\"min\"\n    [max]=\"max\"\n    color=\"primary\"\n    style=\"width: 100%\">\n    <input matSliderThumb [formControl]=\"formField\" />\n    <!-- <input matSliderStartThumb [formControl]=\"formField\"> -->\n    <!-- <input matSliderEndThumb> -->\n  </mat-slider>\n\n  <!-- Date range labels -->\n  <div\n    style=\"display: flex; flex-direction: row; justify-content: space-between; font-size: 12px; color: #999; padding: 0 8px\"\n    [ngStyle]=\"{ 'opacity': isLoading ? '0' : '1' }\">\n    <div>{{ displayFormatter ? displayFormatter(min) : min }}</div>\n    <div>{{ displayFormatter ? displayFormatter(max) : max }}</div>\n  </div>\n</div>\n","import { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\n\nimport { Query, ResultItem, TupleTypes } from '@spinque/query-api';\n\nimport { SpinqueFacetNumberSlider } from '../facet-number-slider/facet-number-slider.component';\nimport { DropdownableFacet } from '../facet.interface';\n\n@Component({\n    selector: 'spinque-facet-date-slider',\n    imports: [SpinqueFacetNumberSlider],\n    providers: [DatePipe],\n    templateUrl: './facet-date-slider.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    styles: []\n})\nexport class SpinqueFacetDateSlider implements OnInit, OnChanges, DropdownableFacet {\n  @Input() queryStack: Query[] = [];\n  @Input() label = 'Pick a date';\n  @Input() step = 1000 * 60 * 60 * 24;\n\n  @Input() optionMapping: (o: ResultItem<TupleTypes[]>) => string = o => o.tuple as unknown as string;\n\n  @Input() selected: string | string[] | undefined;\n\n  @Output() selectedChange = new EventEmitter<string | undefined>();\n\n  @Input() format: string = 'yyyy-MM-dd';\n\n  @ViewChild('slider') slider?: SpinqueFacetNumberSlider;\n\n  numberToDate = (n: number) => this.datePipe.transform(n, this.format) || 'Not a date';\n  dateToNumber = (n: string) => new Date(`${n} 00:00`).getTime();\n\n  constructor(private datePipe: DatePipe) {}\n\n  ngOnInit() { }\n\n  ngOnChanges(changes: SimpleChanges) { }\n\n  get facetId(): string {\n    if (!this.queryStack) {\n      return 'unknown';\n    }\n    return this.queryStack[this.queryStack.length - 1].endpoint;\n  }\n\n  update() {\n    this.slider?.update();\n  }\n\n  clear() {\n    this.slider?.clear();\n  }\n\n  parseSelectedChange(value: number | undefined) {\n    this.selectedChange.emit(value !== undefined ? this.numberToDate(value) : value);\n  }\n\n}\n","<spinque-facet-number-slider\n  [queryStack]=\"queryStack\"\n  [optionMapping]=\"optionMapping\"\n  [numberFormatter]=\"dateToNumber\"\n  [displayFormatter]=\"numberToDate\"\n  [selected]=\"selected\"\n  [step]=\"step\"\n  [label]=\"label\"\n  (selectedChange)=\"parseSelectedChange($event)\"\n  #slider>\n</spinque-facet-number-slider>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1.SpinqueFacetDropdownService","i3","i1","i4","i5"],"mappings":"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"}