{"version":3,"file":"sinequa-components-filters.mjs","sources":["../../../projects/components/filters/filters.component.ts","../../../projects/components/filters/filters.component.html","../../../projects/components/filters/drag-drop-manager.service.ts","../../../projects/components/filters/drag-drop-manager.directive.ts","../../../projects/components/filters/filters-editor.component.ts","../../../projects/components/filters/filters-editor.component.html","../../../projects/components/filters/filters-view.component.ts","../../../projects/components/filters/filters-view.component.html","../../../projects/components/filters/drag-drop-patch.ts","../../../projects/components/filters/filters.module.ts","../../../projects/components/filters/messages/en.ts","../../../projects/components/filters/messages/fr.ts","../../../projects/components/filters/messages/de.ts","../../../projects/components/filters/messages/index.ts","../../../projects/components/filters/sinequa-components-filters.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnChanges, Output, SimpleChanges } from \"@angular/core\";\nimport { AppService, Query } from \"@sinequa/core/app-utils\";\nimport { Filter, ExprFilter, ValueFilter, NullFilter, InFilter, BetweenFilter, isExprFilter, CCColumn } from \"@sinequa/core/web-services\";\nimport { SearchService } from \"@sinequa/components/search\";\n\n@Component({\n    selector: 'sq-filters',\n    templateUrl: './filters.component.html',\n    styles: [`\na {\n  color: inherit;\n}\n  `],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class FiltersComponent implements OnChanges {\n  @Input() query: Query;\n  @Input() filter: Filter|undefined;\n  @Input() showField = true;\n  @Input() showOperator = true;\n  @Input() allowRemove = true;\n  @Input() allowNesting = false;\n  @Input() filtersClass = 'text-nowrap';\n  @Output() filterEdit = new EventEmitter<Query>();\n\n  exprFilter?: ExprFilter;\n  valueFilter?: ValueFilter;\n  betweenFilter?: BetweenFilter;\n  inFilter?: InFilter;\n  nullFilter?: NullFilter;\n\n  field?: string;\n  column?: CCColumn;\n  operator?: string;\n\n  searchService = inject(SearchService);\n\n  constructor(\n    public appService: AppService\n  ) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if(changes.filter) {\n      this.exprFilter = undefined;\n      this.valueFilter = undefined;\n      this.betweenFilter = undefined;\n      this.inFilter = undefined;\n      this.nullFilter = undefined;\n      this.field = undefined;\n      this.operator = undefined;\n      if(this.filter) {\n\n        switch(this.filter.operator) {\n          case 'and': case 'or': case 'not': this.exprFilter = this.filter; break;\n          case 'between': this.betweenFilter = this.filter; break;\n          case 'in': this.inFilter = this.filter; break;\n          case 'null': this.nullFilter = this.filter; break;\n          default: this.valueFilter = this.filter;\n        }\n\n        const field = this.getField(this.filter);\n        if(field) {\n          this.column = this.appService.getColumn(field);\n          this.field = this.exprFilter? this.appService.getPluralLabel(field) : this.appService.getSingularLabel(field);\n        }\n\n        // Get the operator displayed in front of the value\n        this.operator = (this.exprFilter || this.filter.display || !this.filter.operator) ?\n          'eq' : this.filter.operator;\n      }\n    }\n  }\n\n  /**\n   * Returns the field of the current filter if it exists and is unique.\n   * An expr filter might contain nested filters applied on different fields\n   */\n  getField(filter: Filter): string | undefined {\n    if(isExprFilter(filter)) {\n      const set = new Set(filter.filters.map(f => this.getField(f)));\n      return set.size === 1? set.values().next().value : undefined;\n    }\n    return filter.field;\n  }\n\n  remove() {\n    this.query.removeFilters(f => f === this.filter);\n    this.filterEdit.emit(this.query);\n    this.searchService.search();\n  }\n\n  nestFilter() {\n    this.query.nestFilter(c => c === this.filter, 'and');\n    this.filterEdit.emit(this.query);\n  }\n\n  unnestFilter() {\n    this.query.unnestFilter(c => c === this.filter);\n    this.filterEdit.emit(this.query);\n  }\n}\n","<ng-container *ngIf=\"filter\">\n  <!-- Display the field (if it exists) -->\n  <span *ngIf=\"showField && field\">{{field | sqMessage}}</span>\n\n  <!-- Filter is an expression (with AND/OR/NOT) -->\n  <ng-container *ngIf=\"exprFilter && !filter.display\">\n    <!-- Display an equality operator if this expression is attached to a field -->\n    <span class=\"sq-filter-operator\" *ngIf=\"showOperator && showField && field\">{{'msg#filters.operator.'+operator | sqMessage}}</span>\n    <!-- build the display by listing the child filters -->\n    <span class=\"sq-filters-expr\">\n      <ng-container *ngFor=\"let c of exprFilter?.filters; let first = first\">\n        <!-- Display AND/OR/NOT before each value -->\n        <span class=\"sq-filter-operator\" *ngIf=\"exprFilter?.operator === 'not' || !first\"> {{'msg#filters.operator.'+exprFilter?.operator | sqMessage}} </span>\n        <sq-filters\n          [query]=\"query\"\n          [filter]=\"c\"\n          [showField]=\"showField && !field\"\n          [showOperator]=\"showOperator\"\n          [allowRemove]=\"allowRemove\"\n          [filtersClass]=\"filtersClass\"\n          (filterEdit)=\"filterEdit.emit(query)\">\n        </sq-filters>\n      </ng-container>\n    </span>\n  </ng-container>\n\n  <span *ngIf=\"!exprFilter || filter.display\" [ngClass]=\"filtersClass\" [title]=\"!showField && field? (field | sqMessage) : ''\">\n\n    <ng-container *ngIf=\"exprFilter\">\n      <!-- Display an equality operator if this expression is attached to a field -->\n      <span class=\"sq-filter-operator\" *ngIf=\"showOperator && showField && field\">{{'msg#filters.operator.'+operator | sqMessage}}</span>\n      <span class=\"sq-filter-value\">{{filter.display | sqMessage}}</span>\n    </ng-container>\n\n    <!-- Filter is a direct value -->\n    <ng-container *ngIf=\"valueFilter as value\">\n      <span *ngIf=\"showOperator && (showField || operator !== 'eq')\">{{'msg#filters.operator.'+operator | sqMessage}}</span>\n      <span class=\"sq-filter-value\">{{(value.display || value.value) | sqValue:column}}</span>\n    </ng-container>\n\n    <ng-container *ngIf=\"betweenFilter as value\">\n      <span *ngIf=\"showOperator\">{{'msg#filters.operator.between' | sqMessage}} </span>\n      <span *ngIf=\"value.display\">{{value.display | sqMessage}}</span>\n      <span *ngIf=\"!value.display\">\n        <span class=\"sq-filter-value\">{{ value.start | sqValue:column}}</span>\n        <span>{{'msg#filters.operator.and' | sqMessage}}</span>\n        <span class=\"sq-filter-value\">{{ value.end | sqValue:column}}</span>\n      </span>\n    </ng-container>\n\n    <ng-container *ngIf=\"inFilter as value\">\n      <span class=\"sq-filter-operator\" *ngIf=\"showOperator\">{{'msg#filters.operator.in' | sqMessage}} </span>\n      <span *ngIf=\"value.display\">{{value.display | sqMessage}}</span>\n      <span *ngIf=\"!value.display\">\n        <span>[</span>\n        <ng-container *ngFor=\"let v of value.values; let last=last\">\n          <span class=\"sq-filter-value\">{{ v | sqValue:column}}</span>\n          <span *ngIf=\"!last\">, </span>\n        </ng-container>\n        <span>]</span>\n      </span>\n    </ng-container>\n\n    <ng-container *ngIf=\"nullFilter as value\">\n      <span *ngIf=\"value.display\">{{value.display | sqMessage}}</span>\n      <span *ngIf=\"!value.display\">\n        <span *ngIf=\"showOperator\" class=\"sq-filter-operator\">{{'msg#filters.operator.null' | sqMessage}} </span>\n        <span *ngIf=\"value.not\" class=\"sq-filter-value\">{{'msg#filters.operator.not' | sqMessage}}</span>\n        <span class=\"sq-filter-value\">NULL</span>\n      </span>\n    </ng-container>\n\n    <!-- Nest this filter -->\n    <a role=\"button\" (click)=\"nestFilter()\"\n      class=\"ms-2\"\n      [title]=\"'msg#filters.nest' | sqMessage:{value:filter?.display || valueFilter?.value || field}\"\n      *ngIf=\"allowNesting\"> <!-- Display the nest button on \"leafs\" only to avoid duplicate buttons -->\n      <i class=\"fas fa-code-branch fa-fw fa-rotate-90\"></i>\n    </a>\n\n    <!-- Remove this filter -->\n    <a role=\"button\" (click)=\"remove()\"\n      class=\"ms-1\"\n      [title]=\"'msg#filters.remove' | sqMessage:{value: filter?.display || valueFilter?.value || field}\"\n      *ngIf=\"allowRemove\"> <!-- Display the remove button on \"leafs\" only to avoid duplicate buttons -->\n      <i class=\"fas fa-times\"></i>\n    </a>\n  </span>\n</ng-container>\n","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\n@Injectable({providedIn: 'root'})\nexport class DragAndDropManagerService {\n    private list = new BehaviorSubject<string[]>([]);\n\n    public onListChange = (): Observable<string[]> => this.list.asObservable();\n\n    public register = (id: string) => {\n        if (!id || this.list.value.includes(id)) {\n            return\n        }\n        this.list.next([...this.list.value, id])\n    }\n\n    public unregister = (id: string) => {\n        this.list.next(this.list.value.filter(x => x !== id))\n    }\n}\n","import { CdkDropList } from \"@angular/cdk/drag-drop\";\nimport { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { DragAndDropManagerService } from \"./drag-drop-manager.service\";\n\n@Directive({\n    selector: '[dragAndDropManager]',\n    standalone: false\n})\nexport class DragAndDropManagerDirective implements OnInit, OnDestroy {\n\n  private manager!: Subscription;\n\n  constructor(\n    private dropList: CdkDropList,\n    private managerService: DragAndDropManagerService\n  ) { }\n\n  ngOnInit(): void {\n    this.managerService.register(this.dropList.id)\n    this.manager = this.managerService.onListChange().subscribe(x => {\n      this.dropList.connectedTo = x.reverse();\n    })\n  }\n\n  ngOnDestroy(): void {\n    this.manager.unsubscribe()\n  }\n}\n","import { CdkDragDrop, moveItemInArray, transferArrayItem } from \"@angular/cdk/drag-drop\";\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, SimpleChanges } from \"@angular/core\";\nimport { Action, ActionItemOptions } from \"@sinequa/components/action\";\nimport { Filter } from \"@sinequa/core/web-services\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { FiltersComponent } from \"./filters.component\";\n\n@Component({\n    selector: 'sq-filters-editor',\n    templateUrl: './filters-editor.component.html',\n    styleUrls: ['./filters-editor.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class FiltersEditorComponent extends FiltersComponent implements OnInit, OnDestroy {\n  @Input() canDrag = false;\n\n  @Input('onDragDrop')\n  public onDragDrop$!: Subject<CdkDragDrop<Filter[]>>;\n\n  options: ActionItemOptions = {\n    item: new Action({\n      children: [\n        new Action({name: 'and', text: \"msg#filters.menu.and\", action: () => this.setOperator('and')}),\n        new Action({name: 'or', text: \"msg#filters.menu.or\", action: () => this.setOperator('or')}),\n        new Action({name: 'not', text: \"msg#filters.menu.not\", action: () => this.setOperator('not')}),\n        new Action({separator: true}),\n        new Action({text: \"msg#filters.menu.nest\", title: \"msg#filters.menu.nestTitle\", action: () => this.nestFilter()}),\n        new Action({text: \"msg#filters.menu.unnest\", title: \"msg#filters.menu.unnestTitle\", action: () => this.unnestFilter()}),\n        new Action({text: \"msg#filters.menu.delete\", action: () => this.remove()})\n      ]\n    }),\n    inMenu: false,\n    size: 'sm'\n  };\n\n  override ngOnChanges(changes: SimpleChanges): void {\n    super.ngOnChanges(changes);\n    if(changes.filter) {\n      this.updateAction();\n    }\n  }\n\n  sub?: Subscription;\n  ngOnInit() {\n    if(!this.canDrag) {\n      this.onDragDrop$ = new Subject<CdkDragDrop<Filter[]>>();\n      this.sub = this.onDragDrop$.subscribe(e => this.onDragDrop(e));\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.sub?.unsubscribe();\n  }\n\n  updateAction() {\n    if(this.exprFilter) {\n      this.options.item.text = 'msg#filters.operator.'+this.exprFilter.operator;\n      this.options.item.children?.forEach(a => a.selected = a.name === this.exprFilter?.operator);\n      this.options = {...this.options}; // Force change detection\n    }\n  }\n\n  setOperator(op: 'and'|'or'|'not') {\n    if(this.exprFilter) {\n      this.exprFilter.operator = op;\n      this.updateAction();\n      this.filterEdit.emit(this.query);\n    }\n  }\n\n  drop(event: CdkDragDrop<Filter[]>) {\n    this.onDragDrop$.next(event);\n  }\n\n  private onDragDrop(event: CdkDragDrop<Filter[]>) {\n    if (event.container === event.previousContainer) {\n      moveItemInArray(event.container.data, event.previousIndex, event.currentIndex)\n    }\n    else {\n      transferArrayItem(\n        event.previousContainer.data,\n        event.container.data,\n        event.previousIndex,\n        event.currentIndex);\n        this.query.cleanFilters();\n    }\n    this.filterEdit.emit(this.query);\n  }\n}\n","<div *ngIf=\"filter\" class=\"d-flex align-items-center\">\n\n  <i class=\"sq-grip fas fa-grip-vertical text-muted me-1\" [title]=\"'msg#filters.drag' | sqMessage\" *ngIf=\"canDrag\"></i>\n\n  <!-- Filter is an expression (with AND/OR/NOT) -->\n  <ng-container *ngIf=\"exprFilter && !filter.display\">\n    <!-- Display AND/OR/NOT -->\n    <div class=\"sq-filter-operator\">\n      <li class=\"list-inline-item\" [sq-action-item]=\"options\"></li>\n    </div>\n    <div class=\"sq-expr-container ms-2 ps-2 border-3 rounded-3 border-start\"\n      cdkDropList\n      [cdkDropListData]=\"exprFilter.filters\"\n      dragAndDropManager\n      (cdkDropListDropped)=\"drop($event)\">\n      <sq-filters-editor *ngFor=\"let f of exprFilter.filters\"\n        cdkDrag\n        class=\"d-block my-1\"\n        [query]=\"query\"\n        [filter]=\"f\"\n        [showField]=\"showField\"\n        [showOperator]=\"showOperator\"\n        [allowRemove]=\"allowRemove\"\n        [allowNesting]=\"allowNesting\"\n        [canDrag]=\"true\"\n        [onDragDrop]=\"onDragDrop$\"\n        (filterEdit)=\"filterEdit.next(query)\">\n      </sq-filters-editor>\n    </div>\n  </ng-container>\n\n  <!-- Filter is a direct value -->\n  <sq-filters *ngIf=\"!exprFilter || filter.display\"\n    [query]=\"query\"\n    [filter]=\"filter\"\n    [showField]=\"showField\"\n    [showOperator]=\"showOperator\"\n    [allowRemove]=\"allowRemove\"\n    [allowNesting]=\"allowNesting\"\n    (filterEdit)=\"filterEdit.next(query)\">\n  </sq-filters>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from \"@angular/core\";\nimport { Query } from \"@sinequa/core/app-utils\";\nimport { isExprFilter } from \"@sinequa/core/web-services\";\n\n@Component({\n    selector: 'sq-filters-view',\n    templateUrl: './filters-view.component.html',\n    styles: [`\n  .sq-simple-mode a:not(:hover) {\n    color: rgb(0,0,0,.5);\n  }\n  .sq-simple-mode:hover sq-filters ::ng-deep sq-filters .sq-filters-expr {\n    border-bottom: 2px solid rgb(0,0,0,0.2);\n    border-radius: 0.25rem;\n  }\n  `],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class FiltersViewComponent implements OnChanges {\n  @Input() query: Query;\n  @Input() showField = false;\n  @Input() allowRemove = true;\n  @Input() allowNesting = false;\n  @Input() closeOnClickOutside = false;\n  @Input() simpleModeClass = \"\";\n  @Input() advancedModeClass = \"\";\n  @Input() filtersClass: string;\n\n  @Output() filterEdit = new EventEmitter<Query>();\n\n  advancedMode = false;\n  isSimpleFilter = true;\n\n  ngOnChanges() {\n    this.updateView();\n  }\n\n  updateView() {\n    this.isSimpleFilter = !isExprFilter(this.query.filters) || !!this.query.filters?.display;\n    if(!this.query.filters) {\n      this.advancedMode = false;\n    }\n  }\n\n  toggleEdit() {\n    this.advancedMode = !this.advancedMode;\n  }\n\n  onClickOutside() {\n    if(this.closeOnClickOutside) {\n      this.advancedMode = false;\n    }\n  }\n\n  onFiltersChange() {\n    this.updateView();\n    this.filterEdit.emit(this.query);\n  }\n\n  clearFilters() {\n    delete this.query.filters;\n    this.updateView();\n    this.filterEdit.emit(this.query);\n  }\n}\n","<div *ngIf=\"query.filters\" (sqClickOutside)=\"onClickOutside()\">\n\n  <div class=\"sq-simple-mode\" [ngClass]=\"simpleModeClass\" *ngIf=\"!advancedMode\">\n    <sq-filters class=\"me-3\"\n      [query]=\"query\"\n      [filter]=\"query.filters\"\n      [showField]=\"showField\"\n      [allowRemove]=\"allowRemove\"\n      [allowNesting]=\"allowNesting\"\n      [filtersClass]=\"filtersClass\"\n      (filterEdit)=\"onFiltersChange()\"\n    ></sq-filters>\n\n    <span *ngIf=\"!isSimpleFilter\" class=\"text-nowrap\">\n      <a  class=\"sq-filter-action\"\n        role=\"button\"\n        [sqTooltip]=\"'msg#filters.editTitle' | sqMessage\"\n        (click)=\"toggleEdit()\">\n        <i class=\"fas fa-fw fa-edit\"></i>\n        <span> {{'msg#filters.edit' | sqMessage}}</span>\n      </a>\n\n      <a  class=\"sq-filter-action ms-2\"\n        role=\"button\"\n        [sqTooltip]=\"'msg#filters.clearTitle' | sqMessage\"\n        (click)=\"clearFilters()\">\n        <i class=\"sq-filter-clear me-1\"></i>\n        <span> {{'msg#filters.clear' | sqMessage}}</span>\n      </a>\n    </span>\n\n  </div>\n\n  <div class=\"sq-advanced-mode d-flex flex-row align-items-end\" [ngClass]=\"advancedModeClass\" *ngIf=\"advancedMode\">\n    <sq-filters-editor\n      [query]=\"query\"\n      [filter]=\"query.filters\"\n      [showField]=\"true\"\n      [allowRemove]=\"true\"\n      [allowNesting]=\"true\"\n      (filterEdit)=\"onFiltersChange()\"\n    ></sq-filters-editor>\n\n    <a\n      class=\"sq-filter-action ms-auto text-nowrap\"\n      role=\"button\"\n      [sqTooltip]=\"'msg#filters.saveTitle' | sqMessage\"\n      (click)=\"toggleEdit()\">\n      <i class=\"fas fa-fw fa-check\"></i>\n      <span> {{'msg#filters.save' | sqMessage}}</span>\n    </a>\n  </div>\n\n</div>\n","import { coerceElement } from '@angular/cdk/coercion';\nimport { DragRef, DropListRef } from '@angular/cdk/drag-drop';\n\n// A few lines of code used for debugging (saved to avoid having to re-write them)\n// let reflistToString = (list: DropListRef[]) => JSON.stringify(list.map(ref => coerceElement(ref.element).id));\n// console.log(\"Targets: \" + reflistToString(targets));\n\nexport function installPatch() {\n  DropListRef.prototype._getSiblingContainerFromPosition = function(\n    item: DragRef,\n    x: number,\n    y: number\n  ): DropListRef | undefined {\n    // Possible targets include siblings and 'this'\n    //@ts-ignore\n    let targets = [this, ...this._siblings];\n\n    // Only consider targets where the drag postition is within the client rect\n    // (this avoids calling enterPredicate on each possible target)\n    let matchingTargets = targets.filter(ref => {\n      return ref._clientRect && isInsideClientRect(ref._clientRect, x, y);\n    });\n\n    // Stop if no targets match the coordinates\n    if (matchingTargets.length == 0) {\n      return undefined;\n    }\n\n    // Order candidates by DOM hierarchy and z-index\n    let orderedMatchingTargets = orderByHierarchy(matchingTargets);\n\n    // The drop target is the last matching target in the list\n    let matchingTarget =\n      orderedMatchingTargets[orderedMatchingTargets.length - 1];\n\n    // Only return matching target if it is a sibling\n    if (matchingTarget === this) {\n      return undefined;\n    }\n\n    // Can the matching target receive the item?\n    if (!matchingTarget._canReceive(item, x, y)) {\n      return undefined;\n    }\n\n    // Return matching target\n    return matchingTarget;\n  };\n}\n\n// Not possible to improt isInsideClientRect from @angular/cdk/drag-drop/client-rect\nfunction isInsideClientRect(clientRect: ClientRect, x: number, y: number) {\n  const { top, bottom, left, right } = clientRect;\n  return y >= top && y <= bottom && x >= left && x <= right;\n}\n\n// Order a list of DropListRef so that for nested pairs, the outer DropListRef\n// is preceding the inner DropListRef. Should probably be ammended to also\n// sort by Z-level.\nfunction orderByHierarchy(refs: DropListRef[]) {\n  // Build a map from HTMLElement to DropListRef\n  let refsByElement: Map<HTMLElement, DropListRef> = new Map();\n  refs.forEach(ref => {\n    refsByElement.set(coerceElement(ref.element), ref);\n  });\n\n  // Function to identify the closest ancestor among th DropListRefs\n  let findAncestor = (ref: DropListRef) => {\n    let ancestor = coerceElement(ref.element).parentElement;\n\n    while (ancestor) {\n      if (refsByElement.has(ancestor)) {\n        return refsByElement.get(ancestor);\n      }\n      ancestor = ancestor.parentElement;\n    }\n\n    return undefined;\n  };\n\n  // Node type for tree structure\n  type NodeType = { ref: DropListRef; parent?: NodeType; children: NodeType[] };\n\n  // Add all refs as nodes to the tree\n  let tree: Map<DropListRef, NodeType> = new Map();\n  refs.forEach(ref => {\n    tree.set(ref, { ref: ref, children: [] });\n  });\n\n  // Build parent-child links in tree\n  refs.forEach(ref => {\n    let parent = findAncestor(ref);\n\n    if (parent) {\n      let node = tree.get(ref);\n      let parentNode = tree.get(parent);\n\n      node!.parent = parentNode;\n      parentNode!.children.push(node!);\n    }\n  });\n\n  // Find tree roots\n  let roots = Array.from(tree.values()).filter(node => !node.parent);\n\n  // Function to recursively build ordered list from roots and down\n  let buildOrderedList = (nodes: NodeType[], list: DropListRef[]) => {\n    list.push(...nodes.map(node => node.ref));\n    nodes.forEach(node => {\n      buildOrderedList(node.children, list);\n    });\n  };\n\n  // Build and return the ordered list\n  let ordered: DropListRef[] = [];\n  buildOrderedList(roots, ordered);\n  return ordered;\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { DragDropModule} from '@angular/cdk/drag-drop';\n\nimport { installPatch } from \"./drag-drop-patch\";\nimport { IntlModule } from \"@sinequa/core/intl\";\nimport { UtilsModule } from \"@sinequa/components/utils\";\nimport { BsActionModule } from \"@sinequa/components/action\";\n\nimport { FiltersComponent } from \"./filters.component\";\nimport { FiltersEditorComponent } from \"./filters-editor.component\";\nimport { DragAndDropManagerDirective } from \"./drag-drop-manager.directive\";\nimport { FiltersViewComponent } from \"./filters-view.component\";\n\n// This patches Angular CDK to enable nested drag & drop lists\n// See: https://mounted.medium.com/angular-cdk-nested-drag-and-drop-d849365a7ca9\ninstallPatch();\n\n@NgModule({\n  imports: [\n    CommonModule,\n    DragDropModule,\n    IntlModule,\n    UtilsModule,\n    BsActionModule\n  ],\n  exports: [FiltersComponent, FiltersEditorComponent, FiltersViewComponent],\n  declarations: [\n    FiltersComponent,\n    FiltersEditorComponent,\n    FiltersViewComponent,\n    DragAndDropManagerDirective,\n  ]\n})\nexport class FiltersModule {}\n","export default {\n  \"filters\": {\n    \"operator\": {\n      \"eq\": \": \",\n      \"neq\": \" ≠ \",\n      \"gte\": \" ≥ \",\n      \"gt\": \" > \",\n      \"lte\": \" ≤ \",\n      \"lt\": \" < \",\n      \"contains\": \" contains \",\n      \"between\": \" between \",\n      \"in\": \" in \",\n      \"and\": \" and \",\n      \"or\": \" or \",\n      \"not\": \" not \",\n      \"null\": \" is \",\n      \"like\": \" like \"\n    },\n    \"menu\": {\n      \"nest\": \"Nest\",\n      \"nestTitle\": \"Nest this filter in a AND\",\n      \"unnest\": \"Un-nest\",\n      \"unnestTitle\": \"Only keep the first child filter\",\n      \"delete\": \"Delete\",\n      \"and\": \"And\",\n      \"or\": \"Or\",\n      \"not\": \"Not\"\n    },\n    \"drag\": \"Drag and Drop\",\n    \"remove\": \"Remove filter \\\"{value}\\\"\",\n    \"nest\": \"Nest filter \\\"{value}\\\" in a AND\",\n    \"edit\": \"Edit\",\n    \"editTitle\": \"Edit advanced filters\",\n    \"clear\": \"Clear\",\n    \"clearTitle\": \"Clear all filters\",\n    \"save\": \"Save\",\n    \"saveTitle\": \"Save advanced filters\"\n  }\n}\n","export default {\n  \"filters\": {\n    \"operator\": {\n      \"eq\": \": \",\n      \"neq\": \" ≠ \",\n      \"gte\": \" ≥ \",\n      \"gt\": \" > \",\n      \"lte\": \" ≤ \",\n      \"lt\": \" < \",\n      \"contains\": \" contient \",\n      \"between\": \" entre \",\n      \"in\": \" parmi \",\n      \"and\": \" et \",\n      \"or\": \" ou \",\n      \"not\": \" pas \",\n      \"null\": \" \"\n    },\n    \"menu\": {\n      \"nest\": \"Imbriquer\",\n      \"nestTitle\": \"Imbriquer ce filtre dans un ET\",\n      \"unnest\": \"Désimbriquer\",\n      \"unnestTitle\": \"Garder seulement le premier filtre de cette liste\",\n      \"delete\": \"Supprimer\",\n      \"and\": \"Et\",\n      \"or\": \"Ou\",\n      \"not\": \"Pas\"\n    },\n    \"drag\": \"Glisser et déposer\",\n    \"remove\": \"Enlever le filtre \\\"{value}\\\"\",\n    \"nest\": \"Imbriquer le filtre \\\"{value}\\\" dans un ET\",\n    \"edit\": \"Modifier\",\n    \"editTitle\": \"Modifier les filtres avancés\",\n    \"clear\": \"Supprimer\",\n    \"clearTitle\": \"Supprimer les filtres\",\n    \"save\": \"Valider\",\n    \"saveTitle\": \"Valider les filtres avancés\"\n  }\n}\n","export default {\n  \"filters\": {\n    \"operator\": {\n      \"eq\": \": \",\n      \"neq\": \" ≠ \",\n      \"gte\": \" ≥ \",\n      \"gt\": \" > \",\n      \"lte\": \" ≤ \",\n      \"lt\": \" < \",\n      \"contains\": \" enthält \",\n      \"between\": \" zwischen \",\n      \"in\": \" unter \",\n      \"and\": \" und \",\n      \"or\": \" oder \",\n      \"not\": \" nicht \",\n      \"null\": \"ist \"\n    },\n    \"menu\": {\n      \"nest\": \"Verschachteln\",\n      \"nestTitle\": \"Verschachteln Sie diesen Filter in einem UND\",\n      \"unnest\": \"Entschachteln\",\n      \"unnestTitle\": \"Behalten Sie nur den ersten untergeordneten Filter\",\n      \"delete\": \"Löschen\",\n      \"and\": \"Und\",\n      \"or\": \"Oder\",\n      \"not\": \"Nicht\"\n    },\n    \"drag\": \"Drag-and-Drop\",\n    \"remove\": \"Filter entfernen \\\"{value}\\\"\",\n    \"nest\": \"Verschachteln Sie den Filter \\\"{value}\\\" in einem UND\",\n    \"edit\": \"Erweiterte\",\n    \"editTitle\": \"Erweiterte Filter\",\n    \"clear\": \"Löschen\",\n    \"clearTitle\": \"Filter löschen\",\n    \"save\": \"Speichern\",\n    \"saveTitle\": \"Speichern\"\n  }\n}\n","import {Utils} from \"@sinequa/core/base\";\nimport _enFilters from \"./en\";\nimport _frFilters from \"./fr\";\nimport _deFilters from \"./de\";\n\nconst enFilters = Utils.merge({}, _enFilters);\nconst frFilters = Utils.merge({}, _frFilters);\nconst deFilters = Utils.merge({}, _deFilters);\n\nexport { enFilters, frFilters, deFilters };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i2.DragAndDropManagerService","i3","i4.FiltersComponent","i5.DragAndDropManagerDirective","i6","i3.FiltersComponent","i4.FiltersEditorComponent","i5"],"mappings":"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"}