{"version":3,"file":"sinequa-components-utils.mjs","sources":["../../../projects/components/utils/directives/autofocus.ts","../../../projects/components/utils/directives/click-outside.ts","../../../projects/components/utils/directives/scroll-into-view.ts","../../../projects/components/utils/directives/focus-key-list-item.directive.ts","../../../projects/components/utils/directives/focus-key-list.directive.ts","../../../projects/components/utils/ui.service.ts","../../../projects/components/utils/directives/resize-event.directive.ts","../../../projects/components/utils/directives/sticky.ts","../../../projects/components/utils/directives/tooltip/tooltip.component.ts","../../../projects/components/utils/directives/tooltip/tooltip.directive.ts","../../../projects/components/utils/pipes/date-pipe.ts","../../../projects/components/utils/pipes/memory-size-pipe.ts","../../../projects/components/utils/pipes/date-fns.pipe.ts","../../../projects/components/utils/pipes/moment-pipe.ts","../../../projects/components/utils/pipes/number-pipe.ts","../../../projects/components/utils/pipes/relative-time-pipe.ts","../../../projects/components/utils/pipes/time-pipe.ts","../../../projects/components/utils/pipes/value-pipe.ts","../../../projects/components/utils/virtual-scroller/virtual-scroller.ts","../../../projects/components/utils/utils.module.ts","../../../projects/components/utils/voice-recognition/voice-recongnition.service.ts","../../../projects/components/utils/messages/en.ts","../../../projects/components/utils/messages/fr.ts","../../../projects/components/utils/messages/de.ts","../../../projects/components/utils/messages/index.ts","../../../projects/components/utils/parser/app-service-helpers.ts","../../../projects/components/utils/parser/expr-parser.ts","../../../projects/components/utils/parser/expr-builder.ts","../../../projects/components/utils/parser/expr-pipe.ts","../../../projects/components/utils/parser/query-utils.ts","../../../projects/components/utils/sinequa-components-utils.ts"],"sourcesContent":["import {Directive, Input, ElementRef, OnChanges} from \"@angular/core\";\nimport {Utils} from \"@sinequa/core/base\";\n\n@Directive({\n    selector: \"[sqAutofocus]\",\n    standalone: false\n})\nexport class Autofocus implements OnChanges {\n    @Input(\"sqAutofocus\") value: number;\n    element: HTMLElement;\n\n    constructor(elementRef: ElementRef) {\n        this.element = <HTMLElement>elementRef.nativeElement;\n    }\n\n    private setFocus() {\n        Utils.delay()\n            .then(() => {\n                if (this.element.offsetWidth !== 0) {\n                    this.element.focus();\n                }\n            });\n    }\n\n    ngOnChanges() {\n        this.setFocus();\n    }\n}","import {Directive, Input, Output, ElementRef, EventEmitter, HostListener} from \"@angular/core\";\n\nexport interface ClickOutsideOptions {\n    exclude?: string[];\n}\n\n@Directive({\n    selector: \"[sqClickOutside]\",\n    standalone: false\n})\nexport class ClickOutside {\n    @Input(\"sqClickOutside\") options?: ClickOutsideOptions;\n    @Output(\"sqClickOutside\") clickOutside = new EventEmitter<{click: UIEvent}>();\n    element: HTMLElement;\n    wasInside: boolean;\n\n    constructor(elementRef: ElementRef) {\n        this.element = <HTMLElement>elementRef.nativeElement;\n    }\n\n    @HostListener('click', ['$event'])\n    click(event: Event) {\n      this.wasInside = true;\n    }\n\n    @HostListener('document:click', ['$event'])\n    clickHandler(event: MouseEvent) {\n        const _wasInside = this.wasInside;\n        this.wasInside = false;\n        if (!event || !event.target) {\n            return;\n        }\n        if (this.element.offsetWidth === 0) {\n            return;\n        }\n        if (!document.body.contains(<HTMLElement>event.target)) {\n            return;\n        }\n        if (event.target === document.body && document.elementFromPoint(event.pageX, event.pageY) !== event.target) {\n            return;\n        }\n        if (this.element.contains(<HTMLElement>event.target)) {\n            return;\n        }\n        if (this.options?.exclude) {\n            let targetRoot = <HTMLElement>event.target;\n            while (!!targetRoot.parentElement) {\n                targetRoot = targetRoot.parentElement;\n            }\n            for (const selector of this.options.exclude) {\n                const elts = Array.from(targetRoot.querySelectorAll(selector));\n                for (const elt of elts) {\n                    if (elt && elt.contains(<Node>event.target)) {\n                        return;\n                    }\n                }\n            }\n        }\n        if (!_wasInside) {\n            this.clickOutside.emit({click: event});\n        }\n    }\n}\n","import {Directive, Input, OnChanges, SimpleChanges, ElementRef} from \"@angular/core\";\n\nexport interface ScrollIntoViewOptions {\n    active: boolean;\n    first: boolean;\n}\n\n@Directive({\n    selector: \"[sqScrollIntoView]\",\n    standalone: false\n})\nexport class ScrollIntoView implements OnChanges {\n    @Input(\"sqScrollIntoView\") options: ScrollIntoViewOptions;\n\n    constructor(\n        private elementRef: ElementRef) {\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const change = changes['sqScrollIntoView'];\n        if (change && this.options.active && !change.previousValue?.active) {\n            this.elementRef.nativeElement.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n        }\n    }\n}\n","import { Directive, HostBinding, ElementRef } from \"@angular/core\";\nimport { FocusableOption } from \"@angular/cdk/a11y\";\n\n@Directive({\n    selector: \"[sqFocusKeyListItem]\",\n    standalone: false\n})\nexport class FocusKeyListItemDirective implements FocusableOption {\n    @HostBinding() tabindex = -1;\n    @HostBinding(\"attr.role\") role = \"list-item\";\n\n    constructor(protected element: ElementRef) {\n    }\n\n    focus() {\n        this.element.nativeElement.focus();\n    }\n}\n","import { Directive, Input, Output, HostBinding, EventEmitter, OnChanges, AfterContentInit,\n    ContentChildren, QueryList, HostListener } from \"@angular/core\";\nimport { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport { FocusKeyListItemDirective } from \"./focus-key-list-item.directive\";\nimport { Utils } from \"@sinequa/core/base\";\n\n@Directive({\n    selector: \"[sqFocusKeyList]\",\n    standalone: false\n})\nexport class FocusKeyListDirective implements OnChanges, AfterContentInit {\n    @Input() activeItem = -1;\n    @Input() withWrap = true;\n    @Output() itemSelect = new EventEmitter<number>();\n    @HostBinding(\"attr.role\") role = \"list\";\n    @ContentChildren(FocusKeyListItemDirective) components: QueryList<FocusKeyListItemDirective>;\n    protected keyManager: FocusKeyManager<FocusKeyListItemDirective>;\n\n    ngOnChanges() {\n        if (this.keyManager) {\n            this.keyManager.setActiveItem(this.activeItem);\n        }\n    }\n\n    ngAfterContentInit() {\n        this.keyManager = new FocusKeyManager<FocusKeyListItemDirective>(this.components);\n        if (this.withWrap) {\n            this.keyManager.withWrap();\n        }\n        if (this.activeItem >= 0 && this.components.length > 0) {\n            Utils.delay().then(() => {\n                this.keyManager.setActiveItem(this.activeItem);\n            });\n        }\n    }\n\n    @HostListener(\"keydown\", [\"$event\"])\n    onKeydown(event) {\n        this.keyManager.onKeydown(event);\n        this.itemSelect.emit(this.keyManager.activeItemIndex !== null ? this.keyManager.activeItemIndex : undefined);\n    }\n}\n","import {Injectable, Inject, InjectionToken, OnDestroy, ComponentRef} from \"@angular/core\";\nimport {Subject, Observable, BehaviorSubject} from \"rxjs\";\nimport {Utils, MapOf} from \"@sinequa/core/base\";\nimport elementResizeDetectorMaker from \"element-resize-detector\";\nimport {NotificationsService} from \"@sinequa/core/notification\";\nimport {Clipboard} from '@angular/cdk/clipboard';\n\nexport interface CaretPosition {\n    start: number;\n    end: number;\n}\n\nexport const SCREEN_SIZE_RULES = new InjectionToken<MapOf<string>>('SCREEN_SIZE_RULES');\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class UIService implements OnDestroy {\n    _resizeEvent = new Subject<UIEvent>();\n    _priorityResizeEvent = new Subject<UIEvent>();\n    screenSizes: string[];\n    screenSize: string; // one of the screen size rules values\n    elementResizeDetector: any;\n\n    isDarkTheme$ = new BehaviorSubject<boolean>(document.body.classList.contains(\"dark\"));\n\n    private observer: MutationObserver;\n\n    constructor(\n        @Inject(SCREEN_SIZE_RULES) public screenSizeRules: MapOf<string>,\n        public notificationsService: NotificationsService,\n        public clipboard: Clipboard\n    ) {\n        this.screenSizes = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"]; // in ascending size order\n        this.setScreenSize();\n        window.addEventListener(\"resize\", this.resizeEventListener);\n        this.elementResizeDetector = elementResizeDetectorMaker({ strategy: \"scroll\" });\n\n        // start dark/light theme mode observer\n        this.observeThemeChange();\n    }\n\n    protected resizeEventListener = Utils.frame((event: UIEvent) => {\n        this.setScreenSize();\n        this._priorityResizeEvent.next(event);\n        this._resizeEvent.next(event);\n    });\n\n    ngOnDestroy() {\n        this._resizeEvent.complete();\n        this._priorityResizeEvent.complete();\n        window.removeEventListener(\"resize\", this.resizeEventListener);\n\n        // stop from receiving further notifications\n        this.observer.disconnect();\n    }\n\n    get resizeEvent(): Observable<UIEvent> {\n        return this._resizeEvent;\n    }\n\n    get priorityResizeEvent(): Observable<UIEvent> {\n        return this._priorityResizeEvent;\n    }\n\n    /**\n     *\n     * @param appComponentRef\n     *\n     * @deprecated Not used\n     */\n    appInit(appComponentRef: ComponentRef<any>) {}\n\n    // legacy (was called from app.ts)\n    addResizeListener(listener: (event?: UIEvent) => any) {\n        this._resizeEvent.subscribe(listener);\n    }\n\n    private screenSizeIs(list: string | string[]) {\n        //let rules = this.coreConfig.screenSizeRules;\n\n        // validate that we're getting a string or array.\n        if (!Utils.isString(list) && !Array.isArray(list)) {\n            throw new Error('screenSizeIs requires an array or comma-separated list');\n        }\n\n        // if it's a string, convert to array.\n        if (Utils.isString(list)) {\n            list = list.split(/\\s*,\\s*/);\n        }\n\n        return list.some((size) => window.matchMedia(this.screenSizeRules[size]).matches);\n    }\n\n    private setScreenSize() {\n        for (const size of this.screenSizes) {\n            if (this.screenSizeIs(size)) {\n                this.screenSize = size;\n                return;\n            }\n        }\n        throw new Error(\"UIService.setScreenSize - no matching screen size\");\n    }\n\n    screenSizeIsEqual(screenSize: string): boolean {\n        return this.screenSize === screenSize;\n    }\n\n    screenSizeIsGreater(screenSize: string | undefined): boolean {\n        const index1 = this.screenSizes.findIndex((value) => value === this.screenSize);\n        const index2 = this.screenSizes.findIndex((value) => value === screenSize);\n        return index1 > index2;\n    }\n\n    screenSizeIsLess(screenSize: string): boolean {\n        const index1 = this.screenSizes.findIndex((value) => value === this.screenSize);\n        const index2 = this.screenSizes.findIndex((value) => value === screenSize);\n        return index1 < index2;\n    }\n\n    screenSizeIsGreaterOrEqual(screenSize: string | undefined): boolean {\n        if (screenSize === this.screenSize) {\n            return true;\n        }\n        return this.screenSizeIsGreater(screenSize);\n    }\n\n    screenSizeIsLessOrEqual(screenSize: string): boolean {\n        if (screenSize === this.screenSize) {\n            return true;\n        }\n        return this.screenSizeIsLess(screenSize);\n    }\n\n    private _screenSizeTest(screenSize: string): boolean {\n        if (Utils.eqNCN(screenSize, \"always\", \"true\")) {\n            return true;\n        }\n        if (Utils.eqNCN(screenSize, \"never\", \"false\")) {\n            return false;\n        }\n        if (Utils.startsWith(screenSize, \">=\")) {\n            return this.screenSizeIsGreaterOrEqual(screenSize.slice(2));\n        }\n        if (Utils.startsWith(screenSize, \">\")) {\n            return this.screenSizeIsGreater(screenSize.slice(1));\n        }\n        if (Utils.startsWith(screenSize, \"<=\")) {\n            return this.screenSizeIsLessOrEqual(screenSize.slice(2));\n        }\n        if (Utils.startsWith(screenSize, \"<\")) {\n            return this.screenSizeIsLess(screenSize.slice(1));\n        }\n        if (Utils.startsWith(screenSize, \"=\")) {\n            return this.screenSizeIsEqual(screenSize.slice(1));\n        }\n        return this.screenSizeIsEqual(screenSize);\n    }\n\n    // screenSizes is a sequence of size specs with optional operator separated by space or and (AND)\n    // Multiple sequences can be specified using , or ; as a separator (these are OR'd)\n    screenSizeTest(screenSizes: string): boolean {\n        if (!screenSizes) {\n            return true;\n        }\n        const ors = Utils.split(screenSizes, [',', ';']);\n        for (const or of ors) {\n            const ands = Utils.split(or, \" \");\n            if (ands.length === 0) {\n                continue;\n            }\n            let ok = true;\n            for (const and of ands) {\n                if (Utils.eqNC(and, \"and\")) { // space separated but you can use and if you want to\n                    continue;\n                }\n                if (!this._screenSizeTest(and)) {\n                    ok = false;\n                    break;\n                }\n            }\n            if (ok) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    getContentRect(element: HTMLElement): DOMRect {\n        const rect = element.getBoundingClientRect();\n        const computedStyle = window.getComputedStyle(element);\n        const borderLeft = parseFloat(computedStyle.borderLeft);\n        const borderRight = parseFloat(computedStyle.borderRight);\n        const borderTop = parseFloat(computedStyle.borderTop);\n        const borderBottom = parseFloat(computedStyle.borderBottom);\n        const paddingLeft = parseFloat(computedStyle.paddingLeft);\n        const paddingRight = parseFloat(computedStyle.paddingRight);\n        const paddingTop = parseFloat(computedStyle.paddingTop);\n        const paddingBottom = parseFloat(computedStyle.paddingBottom);\n        return {\n            top: rect.top + borderTop + paddingTop,\n            right: rect.right - borderRight - paddingRight,\n            bottom: rect.bottom - borderBottom - paddingBottom,\n            left: rect.left + borderLeft + paddingLeft,\n            width: rect.width - borderLeft - paddingLeft - paddingRight - borderRight,\n            height: rect.height - borderTop - paddingTop - paddingBottom - borderBottom,\n            x: rect.left + borderLeft + paddingLeft,\n            y: rect.top + borderTop + paddingTop,\n            toJSON: () => ''\n        };\n    }\n\n    // caret support\n    getCaret(input: HTMLInputElement): CaretPosition {\n        return {\n            start: input.selectionStart || 0,\n            end: input.selectionEnd || 0\n        };\n    }\n\n    setCaret(input: HTMLInputElement, start: number, end = start, text?: string, selectionAction = UIService.SelectionAction.collapse, ensureVisible = true, raiseEvent = true) {\n        if (start < 0) {\n            return;\n        }\n        if (Utils.isString(text)) {\n            let value = input.value;\n            if (end >= start) {\n                value = value.slice(0, start) + text + value.slice(end);\n            }\n            else {\n                value = value.slice(0, start) + text;\n            }\n            input.value = value;\n            switch (selectionAction) {\n                case UIService.SelectionAction.adjust:\n                    end = start + text.length;\n                    break;\n                case UIService.SelectionAction.none:\n                    break;\n                case UIService.SelectionAction.collapseToStart:\n                    end = start;\n                    break;\n                case UIService.SelectionAction.collapse:\n                default:\n                    end = start + text.length;\n                    start = end;\n                    break;\n            }\n        }\n        if (end < 0) {\n            end = start;\n        }\n        input.setSelectionRange(start, end);\n        if (ensureVisible) {\n            const rect = input.getBoundingClientRect();\n            const contentRect = this.getContentRect(input);\n            const textPos = this.getTextPosition(input, this.getCaret(input).end);\n            let scrollLeft = input.scrollLeft;\n            const minX = contentRect.left + scrollLeft;\n            const maxX = contentRect.right + scrollLeft;\n            const caretX = rect.left + textPos.left;\n            if (caretX < minX || caretX > maxX) {\n                scrollLeft = Math.max(caretX - contentRect.right + 1/*for the caret*/, 0);\n                input.scrollLeft = scrollLeft;\n            }\n        }\n        if (raiseEvent) {\n            const event = new CustomEvent(\"input\");\n            input.dispatchEvent(event);\n        }\n    }\n\n    // See https://github.com/component/textarea-caret-position\n    // We return a lineHeight value in addition\n    private textPositionProperties = [\n        'direction',  // RTL support\n        'boxSizing',\n        'width',  // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n        'height',\n        'overflowX',\n        'overflowY',  // copy the scrollbar for IE\n\n        'borderTopWidth',\n        'borderRightWidth',\n        'borderBottomWidth',\n        'borderLeftWidth',\n        'borderStyle',\n\n        'paddingTop',\n        'paddingRight',\n        'paddingBottom',\n        'paddingLeft',\n\n        // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n        'fontStyle',\n        'fontVariant',\n        'fontWeight',\n        'fontStretch',\n        'fontSize',\n        'fontSizeAdjust',\n        'lineHeight',\n        'fontFamily',\n\n        'textAlign',\n        'textTransform',\n        'textIndent',\n        'textDecoration',  // might not make a difference, but better be safe\n\n        'letterSpacing',\n        'wordSpacing',\n\n        'tabSize',\n        'MozTabSize'\n    ];\n    getTextPosition(element: HTMLElement, position: number, options?: {debug: boolean}): {top: number, left: number, lineHeight: number} {\n        const debug = options && options.debug || false;\n        if (debug) {\n            const el = document.querySelector('#input-textarea-caret-position-mirror-div');\n            if ( el ) {\n                if (el.parentNode) {\n                    el.parentNode.removeChild(el);\n                }\n            }\n        }\n\n        // mirrored div\n        const div = document.createElement('div');\n        div.id = 'input-textarea-caret-position-mirror-div';\n        document.body.appendChild(div);\n\n        const style = div.style;\n        const computed = !!window.getComputedStyle ? getComputedStyle(element) : (<any>element).currentStyle;  // currentStyle for IE < 9\n\n        // default textarea styles\n        style.whiteSpace = 'pre-wrap';\n        if (element.nodeName !== 'INPUT')\n            style.wordWrap = 'break-word';  // only for textarea-s\n\n        // position off-screen\n        style.position = 'absolute';  // required to return coordinates properly\n        if (!debug)\n            style.visibility = 'hidden';  // not 'display: none' because we want rendering\n\n        // transfer the element's properties to the div\n        this.textPositionProperties.forEach(function (prop) {\n            style[prop] = computed[prop];\n        });\n\n        if (!Utils.isUndefined((<any>window).mozInnerScreenX)) {\n            // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n            if (element.scrollHeight > parseInt(computed.height, 10))\n            style.overflowY = 'scroll';\n        } else {\n            style.overflow = 'hidden';  // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n        }\n\n        div.textContent = (<any>element).value.substring(0, position);\n        // the second special handling for input type=\"text\" vs textarea: spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n        if (element.nodeName === 'INPUT' && div.textContent) {\n            div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n        }\n\n        const span = document.createElement('span');\n        // Wrapping must be replicated *exactly*, including when a long word gets\n        // onto the next line, with whitespace at the end of the line before (#7).\n        // The  *only* reliable way to do that is to copy the *entire* rest of the\n        // textarea's content into the <span> created at the caret position.\n        // for inputs, just '.' would be enough, but why bother?\n        div.appendChild(span);\n\n        // return lineHeight too\n        span.textContent = '.';\n        const lineHeight = span.offsetHeight;\n\n        span.textContent = (<any>element).value.substring(position) || '.';  // || because a completely empty faux span doesn't render at all\n\n        const coordinates = {\n            top: span.offsetTop + parseInt(computed['borderTopWidth'], 10),\n            left: span.offsetLeft + parseInt(computed['borderLeftWidth'], 10),\n            lineHeight: lineHeight\n        };\n\n        if (debug) {\n            span.style.backgroundColor = '#aaa';\n        } else {\n            document.body.removeChild(div);\n        }\n\n        return coordinates;\n    }\n\n    getViewport(): ClientRect {\n        return document.body.getBoundingClientRect();\n    }\n\n    addElementResizeListener(element: HTMLElement, listener: (this: HTMLElement) => void) {\n        this.elementResizeDetector.listenTo(element, listener);\n    }\n\n    removeElementResizeListener(element: HTMLElement, listener: (this: HTMLElement) => void) {\n        this.elementResizeDetector.removeListener(element, listener);\n    }\n\n    copyToClipboard(data: string, maxLength = 30) {\n        if (!navigator?.clipboard) {\n            // Note: CDK seems to struggle with large chunks of text\n            this.copyToClipboardCdk(data, maxLength);\n        }\n        else {\n            // Navigator built-in clipboard management\n            navigator.clipboard.writeText(data).then(() => {\n                this.notificationsService.success(\"msg#clipboard.success\", {data: \"\\\"\"+(data.length>maxLength? (data.slice(0,maxLength) + \"...\") : data)+\"\\\"\"});\n            }, err => {\n                this.notificationsService.warning(\"msg#clipboard.error\");\n            });\n        }\n    }\n\n    copyToClipboardCdk(data: string, maxLength = 30) {\n        const pending = this.clipboard.beginCopy(data);\n        let remainingAttempts = 3;\n        const attempt = () => {\n            const result = pending.copy();\n            if (!result && --remainingAttempts) {\n                setTimeout(attempt);\n            } else {\n                // Remember to destroy when you're done!\n                pending.destroy();\n                if(result) {\n                    this.notificationsService.success(\"msg#clipboard.success\", {data: \"\\\"\"+(data.length>maxLength? (data.slice(0,maxLength) + \"...\") : data)+\"\\\"\"});\n                }\n                else {\n                    this.notificationsService.warning(\"msg#clipboard.error\");\n                }\n            }\n        };\n        attempt();\n    }\n\n    /**\n     * Whether the UI is in dark or light mode\n     */\n    isDark(): boolean {\n        return this.isDarkTheme$.getValue();\n    }\n\n    /**\n     * Toggle dark mode\n     */\n    toggleDark() {\n        document.body.classList.toggle(\"dark\");\n    }\n\n    private observeThemeChange() {\n        // Detect body's classes changes (use do detect theme toggle)\n        const el = document.getElementsByTagName('body')[0];\n        this.observer = new MutationObserver((e) => {\n            const isDarkTheme = (e[0].target as HTMLElement).classList.contains(\"dark\");\n            localStorage.setItem('sinequa-theme', isDarkTheme ? 'dark' : 'normal');\n            this.isDarkTheme$.next(isDarkTheme);\n        });\n\n        this.observer.observe(el, {\n            attributes: true,\n            attributeFilter: ['class'],\n            childList: false,\n            characterData: false\n        });\n    }\n}\n\nexport module UIService {\n    export enum SelectionAction {\n        adjust,\n        none,\n        collapseToStart,\n        collapse\n    }\n}\n","import {Directive, ElementRef, Output, EventEmitter, AfterViewInit, OnDestroy, NgZone} from \"@angular/core\";\nimport {UIService} from \"../ui.service\";\n\n@Directive({\n    selector: \"[sqResize]\",\n    standalone: false\n})\nexport class ResizeEventDirective implements AfterViewInit, OnDestroy {\n    @Output(\"sqResize\") resizeEvent = new EventEmitter<DOMRectReadOnly>();\n    // NB we don't use one of the ResizeObserver polyfills as they rely on polling\n    // for changes which continuously consumes cpu time...\n    protected resizeObserver: /*ResizeObserver*/any;\n\n    constructor(\n        protected elementRef: ElementRef,\n        protected zone: NgZone,\n        protected uiService: UIService\n    ) {\n    }\n\n    protected raiseEvent = () => {\n        const contentRect = this.elementRef.nativeElement.getBoundingClientRect();\n        this.resizeEvent.emit(contentRect);\n    }\n\n    ngAfterViewInit() {\n        if ((window as any).ResizeObserver) {\n            this.resizeObserver = new (window as any).ResizeObserver((entries) => {\n                this.zone.run(() => {\n                    const contentRect = (entries?.length === 1 && entries[0].contentRect);\n                    this.resizeEvent.emit(contentRect);\n                });\n            });\n            this.resizeObserver.observe(this.elementRef.nativeElement);\n        }\n        else {\n            this.uiService.addElementResizeListener(this.elementRef.nativeElement, this.raiseEvent);\n        }\n    }\n\n    ngOnDestroy() {\n        if ((window as any).ResizeObserver) {\n            this.resizeObserver.unobserve(this.elementRef.nativeElement);\n        }\n        else {\n            this.uiService.removeElementResizeListener(this.elementRef.nativeElement, this.raiseEvent);\n        }\n    }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Utils } from '@sinequa/core/base';\nimport { UIService } from '../ui.service';\n\n@Component({\n    selector: '[sqSticky]',\n    template: `\n<div [ngStyle]=\"{'margin-top.px': marginTop}\"></div>\n<div #container class=\"sticky-container\" [ngStyle]=\"{'top.px': top, 'bottom.px': bottom}\">\n    <ng-content></ng-content>\n</div>\n`,\n    styles: [`\n.sticky-container {\n    position: sticky;\n    position: -webkit-sticky;\n}\n    `],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class StickyComponent implements OnInit, AfterViewInit, OnDestroy{\n    @Input(\"sqSticky\") offsets?: {top: number, bottom: number};\n    @ViewChild(\"container\") container: ElementRef;\n\n    top?: number;\n    bottom?: number;\n    scrollY: number;\n    marginTop = 0;\n    \n    private listener;\n    \n    constructor(\n        protected ui: UIService,\n        protected cdRef: ChangeDetectorRef){\n    }\n\n    onScroll(forceScrollDown = false) {\n        const scrollDelta = window.pageYOffset - this.scrollY;\n        this.scrollY = window.pageYOffset;\n\n        const offsets = this.offsets || {top: 0, bottom: 0};\n        const componentHeight = this.container.nativeElement.getBoundingClientRect().height;\n        // Scrolling down (OR top of page OR forced after a scroll up OR component height small than screen height)\n        if(scrollDelta >= 0 || this.scrollY === 0 || forceScrollDown || componentHeight + offsets.top + offsets.bottom < window.innerHeight) {\n            this.marginTop = Math.min(this.scrollY, this.marginTop);\n            this.bottom = undefined;\n            this.top = Math.min(window.innerHeight - componentHeight - offsets.bottom, offsets.top);\n        }\n        // Scrolling up\n        else {\n            this.marginTop = Math.max(this.scrollY + window.innerHeight - componentHeight -offsets.bottom - offsets.top, this.marginTop);\n            this.bottom = window.innerHeight - offsets.top - componentHeight;\n            this.top = undefined;\n            if(this.scrollY <= this.marginTop) {\n                this.postScrollUp();\n            }\n        }\n        this.cdRef.markForCheck();\n    }\n\n    postScrollUp = Utils.debounce(() => {\n        this.onScroll(true);\n    }, 250);\n\n    ngOnInit() {\n        if(CSS.supports(\"position\", \"sticky\") || CSS.supports(\"position\", \"-webkit-sticky\")) {            \n            this.scrollY = window.pageYOffset;\n            this.top = (this.offsets?.top || 0);\n        }\n    }\n\n    ngAfterViewInit() {\n        // position: sticky is not supported in Internet Explorer. A workaround could be to rely on position: relative and position: fixed, with additional logic.\n        if(CSS.supports(\"position\", \"sticky\") || CSS.supports(\"position\", \"-webkit-sticky\")) {\n            this.listener = () => this.onScroll();\n            window.addEventListener('scroll', this.listener);\n            window.addEventListener('resize', this.listener);\n            this.ui.addElementResizeListener(this.container.nativeElement, this.listener);\n        }\n    }\n\n    ngOnDestroy() {\n        if(this.listener) {\n            window.removeEventListener('scroll', this.listener);\n            window.removeEventListener('resize', this.listener);\n            this.ui.removeElementResizeListener(this.container.nativeElement, this.listener);\n        }\n    }\n\n}\n","import { Component, ChangeDetectionStrategy, TemplateRef } from '@angular/core';\r\nimport { animate, style, transition, trigger } from '@angular/animations';\r\n\r\n/**\r\n * Internal component that wraps the tooltip's content\r\n */\r\n@Component({\n    selector: 'sqx-tooltip',\n    styleUrls: ['./tooltip.component.scss'],\n    template: `\r\n  <ng-container *ngTemplateOutlet=\"template || defaultTpl; context: {$implicit: data}\"></ng-container>\r\n  <ng-template #defaultTpl let-data>\r\n    <div class=\"sq-tooltip {{tooltipClass}}\" @tooltip [innerHTML]=\"data\"></div>\r\n  </ng-template>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: [\n        trigger('tooltip', [\n            transition(':enter', [\n                style({ opacity: 0 }),\n                animate(300, style({ opacity: 1 })),\n            ]),\n            transition(':leave', [\n                animate(300, style({ opacity: 0 })),\n            ]),\n        ]),\n    ],\n    standalone: false\n})\r\nexport class TooltipComponent<T=string> {\r\n  data?: T;\r\n  template?: TemplateRef<any>;\r\n  tooltipClass?: string;\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnDestroy,\r\n  TemplateRef\r\n} from \"@angular/core\";\r\nimport {\r\n  ConnectedPosition,\r\n  Overlay,\r\n  OverlayPositionBuilder,\r\n  OverlayRef\r\n} from \"@angular/cdk/overlay\";\r\nimport { ComponentPortal } from \"@angular/cdk/portal\";\r\nimport { TooltipComponent } from \"./tooltip.component\";\r\nimport { Utils } from \"@sinequa/core/base\";\r\nimport { Observable, of, Subscription, delay } from \"rxjs\";\r\n\r\nexport type Placement = \"top\" | \"bottom\" | \"right\" | \"left\";\r\n/**\r\n * Directive that attaches a tooltip to the host element\r\n *\r\n * @example\r\n * <div sqTooltip=\"This is a tooltip's text\"></div>\r\n *\r\n * @example\r\n * // A template can be passed to the directive instead of a string. Here 'tooltip' is a template reference\r\n * <div sqTooltip=\"tooltip\"></div>\r\n *\r\n * <ng-template #tooltip>\r\n *  <h2>Title</h2>\r\n *  <p>{{ \"this is a comment\" | uppercase }}</p>\r\n *  <h3>Other text</h3>\r\n * </ng-template>\r\n *\r\n * @example\r\n * //HTML can be used directly (not recommanded)\r\n * <div sqTooltip=\"<h1>Title</h1><br><p>This is a comment</p>\"></div>\r\n */\r\n@Directive({\n    selector: \"[sqTooltip]\",\n    standalone: false\n})\r\nexport class TooltipDirective<TooltipData=undefined, TooltipDisplay=string> implements OnDestroy {\r\n  /**\r\n   * Defining a property called textOrTemplate that can be a string, a function that\r\n   * returns an Observable of a string or undefined, or a TemplateRef.\r\n   */\r\n  @Input(\"sqTooltip\") value?: TooltipDisplay | ((data?: TooltipData) => Observable<TooltipDisplay | undefined> | undefined);\r\n  @Input(\"sqTooltipData\") data?: TooltipData;\r\n  @Input(\"sqTooltipTemplate\") template?: TemplateRef<any>;\r\n\r\n  /**\r\n   * Setting the default value of the placement property to `bottom`\r\n   */\r\n  @Input() placement: Placement = \"bottom\";\r\n  /**\r\n   * List of fallback placement if *Placement* defined can't be applyied\r\n   */\r\n  @Input() fallbackPlacements: Placement | Placement[] = [];\r\n\r\n  /**\r\n   * Delay in millisecond before showing/hiding the tooltip.\r\n   *\r\n   * Default value is 300ms\r\n   */\r\n  @Input() delay = 300;\r\n  /**\r\n   * If the tooltip should stay opened on hover\r\n   */\r\n  @Input() hoverableTooltip = false;\r\n  /**\r\n   * Custom class for the tooltip\r\n   */\r\n  @Input() tooltipClass?: string;\r\n\r\n  /**\r\n   * Applies the \"has-tooltip\" class to its host when displayed\r\n   */\r\n  @HostBinding('class.has-tooltip') hasTooltip = false;\r\n\r\n  private overlayRef: OverlayRef;\r\n  private subscription?: Subscription;\r\n  private clearTimeout?: any;\r\n  static activeTooltip?: TooltipDirective<any, any>;\r\n\r\n  constructor(\r\n    private overlay: Overlay,\r\n    private overlayPositionBuilder: OverlayPositionBuilder,\r\n    private elementRef: ElementRef\r\n  ) { }\r\n\r\n  ngOnDestroy() {\r\n    // do not forget to clear timeout function\r\n    this.clear();\r\n  }\r\n\r\n  @HostListener(\"mouseenter\")\r\n  show() {\r\n    // The tooltip is already showing: just cancel the hiding\r\n    if (this.clearTimeout) {\r\n      this.cancelHide();\r\n      return;\r\n    }\r\n\r\n    this.clear();\r\n\r\n    if (!this.value) return;\r\n\r\n    let obs = Utils.isFunction(this.value)?\r\n      this.value(this.data) :\r\n      of(this.value).pipe(delay(this.delay));\r\n\r\n    this.subscription = obs?.subscribe(data => {\r\n\r\n      // return when value is empty\r\n      if (!data || (typeof data === 'string' && !data.trim())) return;\r\n\r\n      this.clear();\r\n\r\n      TooltipDirective.activeTooltip?.clear();\r\n      TooltipDirective.activeTooltip = this;\r\n\r\n      // set the tooltip's position strategy\r\n      const positionStrategy = this.overlayPositionBuilder\r\n        .flexibleConnectedTo(this.elementRef)\r\n        .withPositions([this.position(), ...this.fallbackPositions()]);\r\n\r\n      const scrollStrategy = this.overlay.scrollStrategies.close();\r\n      this.overlayRef = this.overlay.create({ positionStrategy, scrollStrategy });\r\n\r\n      // instance of the tooltip's component\r\n      const tooltipRef = this.overlayRef.attach(new ComponentPortal(TooltipComponent<TooltipDisplay>));\r\n\r\n      tooltipRef.instance.data = data;\r\n\r\n      if (this.template) {\r\n        tooltipRef.instance.template = this.template;\r\n      }\r\n      if (this.tooltipClass) {\r\n        tooltipRef.instance.tooltipClass = this.tooltipClass;\r\n      }\r\n\r\n      if (this.hoverableTooltip) {\r\n        this.overlayRef.overlayElement.addEventListener(\"mouseenter\", () => this.cancelHide());\r\n        this.overlayRef.overlayElement.addEventListener('mouseleave', () => this.hide());\r\n      }\r\n\r\n      this.hasTooltip = true;\r\n    });\r\n  }\r\n\r\n  @HostListener(\"mousedown\")\r\n  mouseClick() {\r\n    this.clear();\r\n  }\r\n\r\n  @HostListener(\"mouseleave\")\r\n  hide() {\r\n    if (!this.clearTimeout) {\r\n      this.clearTimeout = setTimeout(() => this.clear(), this.hoverableTooltip ? this.delay : 10);\r\n    }\r\n  }\r\n\r\n  cancelHide() {\r\n    if (this.clearTimeout) {\r\n      clearTimeout(this.clearTimeout);\r\n      this.clearTimeout = undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clear timeout function and detach overlayRef\r\n   */\r\n  clear() {\r\n    this.subscription?.unsubscribe();\r\n    this.cancelHide();\r\n    this.overlayRef?.detach();\r\n    this.hasTooltip = false;\r\n  }\r\n\r\n  position(placement = this.placement): ConnectedPosition {\r\n    switch (placement) {\r\n      case \"bottom\":\r\n        return {\r\n          originX: \"center\",\r\n          originY: \"bottom\",\r\n          overlayX: \"center\",\r\n          overlayY: \"top\",\r\n          offsetY: 2\r\n        };\r\n      case \"right\":\r\n        return {\r\n          originX: \"end\",\r\n          originY: \"center\",\r\n          overlayX: \"start\",\r\n          overlayY: \"center\",\r\n          offsetX: 2\r\n        };\r\n      case \"left\":\r\n        return {\r\n          originX: \"start\",\r\n          originY: \"center\",\r\n          overlayX: \"end\",\r\n          overlayY: \"center\",\r\n          offsetX: -2\r\n        };\r\n      default:\r\n        return {\r\n          originX: \"center\",\r\n          originY: \"top\",\r\n          overlayX: \"center\",\r\n          overlayY: \"bottom\",\r\n          offsetY: -2\r\n        };\r\n    }\r\n  }\r\n\r\n  fallbackPositions(): ConnectedPosition[] {\r\n    return Utils.asArray(this.fallbackPlacements).map(p => this.position(p));\r\n  }\r\n\r\n}\r\n","import {Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\n\n@Pipe({\n    name: \"sqDate\", pure: false,\n    standalone: false\n})\nexport class DatePipe extends AbstractIntlPipe<(Number | Date | string), Intl.DateTimeFormatOptions>{\n\n    override updateValue(key: number | Date | string, params: Intl.DateTimeFormatOptions): void {\n        super.updateValue(key, params);\n        this.value = this.intlService.formatDate(key, params);\n    }\n}","import {inject, Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\nimport {FormatService} from \"@sinequa/core/app-utils\";\n\n/**\n * A pipe to transform a number into a readable internationalized memory size label,\n * for example \"126432\" into \"126 kB\".\n *\n * @example\n * <span>Size:</span><span>{{ documentSize | sqMemorySize }}</span>\n */\n@Pipe({\n    name: \"sqMemorySize\", pure: false,\n    standalone: false\n})\nexport class MemorySizePipe extends AbstractIntlPipe<number, void> {\n\n    protected readonly formatService: FormatService = inject(FormatService);\n\n    override updateValue(key: number): void {\n        super.updateValue(key);\n        this.value = this.formatService.formatMemorySize(key);\n    }\n}","import { Pipe } from \"@angular/core\";\r\nimport { AbstractIntlPipe } from \"@sinequa/core/intl\";\r\nimport { differenceInDays, differenceInHours, differenceInMinutes, differenceInMonths, differenceInQuarters, differenceInSeconds, differenceInWeeks, differenceInYears, format, formatDistance, formatDistanceToNow, formatRelative, getDaysInMonth, getTime, getUnixTime, parseISO, toDate } from \"date-fns\";\r\nimport { zonedTimeToUtc } from 'date-fns-tz';\r\n\r\n/**\r\n * When type = \"diff\", unit need to be set\r\n */\r\n\r\nexport interface DateParams {\r\n    format?: string;\r\n    type?: \"fromNow\" | \"from\" | \"toNow\" | \"to\" | \"calendar\" | \"diff\" | \"valueOf\" | \"unix\" | \"daysInMonth\" | \"iso\";\r\n    suffix?: boolean; // from | fromNow | to| toNow (default: true)\r\n    reference?: Date | number | string; // from| to | calendar | diff\r\n    unit?: Intl.RelativeTimeFormatUnit; // diff\r\n    precise?: boolean; // diff @deprecated\r\n}\r\n\r\n// we can expand this easly\r\nconst differenceIn = {\r\n    day: (d,r) => differenceInDays(d,r),\r\n    days: (d,r) => differenceInDays(d,r),\r\n    month: (d,r) => differenceInMonths(d,r),\r\n    months: (d,r) => differenceInMonths(d,r),\r\n    year: (d,r) => differenceInYears(d,r),\r\n    years: (d,r) => differenceInYears(d,r),\r\n    quarter: (d,r) => differenceInQuarters(d,r),\r\n    quarters: (d,r) => differenceInQuarters(d,r),\r\n    week: (d,r) => differenceInWeeks(d,r),\r\n    weeks: (d,r) => differenceInWeeks(d,r),\r\n    hour: (d,r) => differenceInHours(d,r),\r\n    hours: (d, r) => differenceInHours(d, r),\r\n    minute: (d, r) => differenceInMinutes(d, r),\r\n    minutes: (d, r) => differenceInMinutes(d, r),\r\n    second: (d, r) => differenceInSeconds(d, r),\r\n    seconds: (d, r) => differenceInSeconds(d, r),\r\n};\r\n\r\n@Pipe({\n    name: \"sqDateExt\", pure: false,\n    standalone: false\n})\r\nexport class DateFnsPipe extends AbstractIntlPipe<(Date | number | string), DateParams> {\r\n\r\n    override updateValue(key: Date | number | string, params: DateParams = {} as DateParams): void {\r\n        super.updateValue(key, params);\r\n        const m = (typeof key === 'string')\r\n            ? parseISO(key)\r\n            : toDate(key);\r\n\r\n        params = { suffix: true, ...params } as DateParams;\r\n\r\n        if (params.format) {\r\n            this.value = format(m, params.format);\r\n        }\r\n        else {\r\n            params.reference = (typeof (params.reference) === 'string')\r\n                ? parseISO(params.reference)\r\n                : params.reference;\r\n\r\n            switch (params.type) {\r\n                case \"fromNow\":\r\n                    this.value = formatDistance(m, Date.now(), { addSuffix: params.suffix });\r\n                    break;\r\n                case \"from\":\r\n                    this.value = formatDistance(m, params.reference!, { addSuffix: params.suffix });\r\n                    break;\r\n                case \"toNow\":\r\n                    this.value = formatDistanceToNow(m, { addSuffix: params.suffix });\r\n                    break;\r\n                case \"to\":\r\n                    this.value = formatDistance(params.reference!, m, { addSuffix: params.suffix });\r\n                    break;\r\n                case \"calendar\":\r\n                    this.value = formatRelative(m, params.reference!);\r\n                    break;\r\n                case \"diff\":\r\n                    this.value = \"\" + differenceIn[params.unit!](m, params.reference)\r\n                    break;\r\n                case \"valueOf\":\r\n                    this.value = \"\" + getTime(m);\r\n                    break;\r\n                case \"unix\":\r\n                    this.value = \"\" + getUnixTime(m);\r\n                    break;\r\n                case \"daysInMonth\":\r\n                    this.value = \"\" + getDaysInMonth(m);\r\n                    break;\r\n                case \"iso\":\r\n                    this.value = zonedTimeToUtc(m, Intl.DateTimeFormat().resolvedOptions().timeZone).toISOString();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Pipe} from \"@angular/core\";\nimport { DateFnsPipe } from \"./date-fns.pipe\";\n\n/**\n * @deprecated 11.8.2 - Kept only for backward compatibility\n */\n@Pipe({\n    name: \"sqMoment\", pure: false,\n    standalone: false\n})\nexport class MomentPipe extends DateFnsPipe{}\n","import {Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\n\n@Pipe({\n    name: \"sqNumber\", pure: false,\n    standalone: false\n})\nexport class NumberPipe extends AbstractIntlPipe<(number | string), Intl.NumberFormatOptions> {\n\n    override updateValue(key: number | string, params: Intl.NumberFormatOptions): void {\n        super.updateValue(key, params);\n        this.value = typeof key === \"number\" ? this.intlService.formatNumber(key, params) : key;\n    }\n}","import {Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\n\ntype RelativeTimeParams = { unit: Intl.RelativeTimeFormatUnit } & Intl.RelativeTimeFormatOptions & { format?: string };\n\n@Pipe({\n    name: \"sqRelativeTime\", pure: false,\n    standalone: false\n})\nexport class RelativeTimePipe extends AbstractIntlPipe<(string | number | Date | undefined), RelativeTimeParams> {\n\n    override updateValue(key: string | number | Date | undefined, params: RelativeTimeParams): void {\n        super.updateValue(key, params);\n        this.value = this.intlService.formatRelativeTime(key, params);\n    }\n}\n","import {Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\n\n@Pipe({\n    name: \"sqTime\", pure: false,\n    standalone: false\n})\nexport class TimePipe extends AbstractIntlPipe<(number | Date), Intl.DateTimeFormatOptions> {\n\n    override updateValue(key: number | Date, params: Intl.DateTimeFormatOptions): void {\n        super.updateValue(key, params);\n        this.value = this.intlService.formatTime(key, params);\n    }\n}","import {inject, Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\nimport {FormatService, ValueItem} from \"@sinequa/core/app-utils\";\nimport {CCColumn} from \"@sinequa/core/web-services\";\nimport {Utils, FieldValue} from \"@sinequa/core/base\";\n\n@Pipe({\n    name: \"sqValue\", pure: false,\n    standalone: false\n})\nexport class ValuePipe extends AbstractIntlPipe<(ValueItem | FieldValue), CCColumn> {\n\n    protected readonly formatService: FormatService = inject(FormatService);\n\n    override updateValue(key: ValueItem | FieldValue, params: CCColumn): void {\n        super.updateValue(key, params);\n        this.value = this.formatService.formatFieldValue(key, params);\n        this.value = Utils.replace(this.value, /;/g, \"$&\\u200B\");\n    }\n}","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, ViewChild } from '@angular/core';\r\n\r\n/**\r\n * Infinite Scroll Component\r\n *\r\n * The component handles the scrolling and splitting parts\r\n * It takes the whole list in which to scroll in input, and emits the updated one upon scrolling\r\n */\r\n@Component({\n    selector: 'sq-virtual-scroller',\n    styles: [`:host {\r\n    display: block;\r\n  }`],\n    template: `\r\n<ng-content></ng-content>\r\n<div #spacing class=\"d-block\" style=\"height:1rem\">&nbsp;</div>\r\n    `,\n    standalone: false\n})\r\nexport class BsVirtualScroller implements OnChanges, AfterViewInit, OnDestroy {\r\n\r\n  /**\r\n     * The list to be scrolled\r\n     */\r\n  @Input() list: Object[];\r\n\r\n  /**\r\n   * The number of items per loaded pages\r\n   */\r\n  @Input() itemsNumber: number = 10;\r\n\r\n  /**\r\n   * When going to a specific index\r\n   */\r\n  @Input() scrollIndex: number;\r\n\r\n\r\n  /**\r\n   * The updated list after reaching one end of the container\r\n   */\r\n  @Output() newList = new EventEmitter<Object[]>();\r\n\r\n  @ViewChild('spacing', { static: true }) spacing: ElementRef<HTMLDivElement>;\r\n\r\n  private indexTo: number = this.itemsNumber;\r\n  private observer: IntersectionObserver;\r\n\r\n  get subList(): Object[] {\r\n    return this.list?.slice(0, this.indexTo) || [];\r\n  }\r\n\r\n  constructor() { }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes[\"list\"]) {\r\n      // Reset if new list\r\n      this.indexTo = this.itemsNumber;\r\n      this.newList.emit(this.subList);\r\n    }\r\n    if (changes[\"scrollIndex\"]?.currentValue !== undefined && changes[\"scrollIndex\"].currentValue !== -1) {\r\n      // If forced selected index\r\n      if (this.scrollIndex > this.indexTo) {\r\n        this.indexTo = this.scrollIndex + this.itemsNumber < this.list.length\r\n          ? this.scrollIndex + this.itemsNumber : this.list.length;\r\n        this.newList.emit(this.subList);\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    // Add intersection observer to load more data when the spacer div element comes into view\r\n    this.observer = new IntersectionObserver(([entry]) => {\r\n      if (entry.isIntersecting) {\r\n        const isLastPart = this.indexTo + this.itemsNumber >= this.list.length;\r\n        this.indexTo = isLastPart ? this.list.length : this.indexTo + this.itemsNumber;\r\n        this.newList.emit(this.subList);\r\n      }\r\n    });\r\n    this.observer.observe(this.spacing.nativeElement);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.observer.disconnect();\r\n  }\r\n\r\n}","import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {A11yModule} from \"@angular/cdk/a11y\";\n\nimport {IntlModule} from \"@sinequa/core/intl\";\n\n// Formatting pipes\nimport {DatePipe} from \"./pipes/date-pipe\";\nimport {MemorySizePipe} from \"./pipes/memory-size-pipe\";\nimport {MomentPipe} from \"./pipes/moment-pipe\";\nimport {NumberPipe} from \"./pipes/number-pipe\";\nimport {RelativeTimePipe} from \"./pipes/relative-time-pipe\";\nimport {TimePipe} from \"./pipes/time-pipe\";\nimport {ValuePipe} from \"./pipes/value-pipe\";\n\n// UI Directives\nimport {Autofocus} from \"./directives/autofocus\";\nimport {ClickOutside} from \"./directives/click-outside\";\nimport {ScrollIntoView} from \"./directives/scroll-into-view\";\nimport {FocusKeyListDirective} from \"./directives/focus-key-list.directive\";\nimport {FocusKeyListItemDirective} from \"./directives/focus-key-list-item.directive\";\nimport {ResizeEventDirective} from \"./directives/resize-event.directive\";\nimport {StickyComponent} from \"./directives/sticky\";\nimport {TooltipComponent} from \"./directives/tooltip/tooltip.component\";\nimport {TooltipDirective} from \"./directives/tooltip/tooltip.directive\";\nimport {BsVirtualScroller} from \"./virtual-scroller/virtual-scroller\";\n\n// UI Service\nimport {SCREEN_SIZE_RULES} from \"./ui.service\";\n\nexport const defaultScreenSizeRules = {\n    xxl: \"(min-width: 1920px)\",\n    xl: \"(min-width: 1200px) and (max-width: 1919.98px)\",\n    lg: \"(min-width: 992px) and (max-width: 1199.98px)\",\n    md: \"(min-width: 768px) and (max-width: 991.98px)\",\n    sm: \"(min-width: 576px) and (max-width: 767.98px)\",\n    xs: \"(max-width: 575.98px)\",\n};\n\n@NgModule({\n    imports: [\n        CommonModule,\n        A11yModule,\n        IntlModule\n    ],\n    declarations: [\n        DatePipe, MemorySizePipe, MomentPipe, NumberPipe, RelativeTimePipe, TimePipe, ValuePipe,\n        Autofocus, ClickOutside, ScrollIntoView, FocusKeyListDirective, FocusKeyListItemDirective,\n        ResizeEventDirective, StickyComponent, TooltipComponent, TooltipDirective, BsVirtualScroller\n    ],\n    exports: [\n        DatePipe, MemorySizePipe, MomentPipe, NumberPipe, RelativeTimePipe, TimePipe, ValuePipe,\n        Autofocus, ClickOutside, ScrollIntoView, FocusKeyListDirective, FocusKeyListItemDirective,\n        ResizeEventDirective, StickyComponent, TooltipComponent, TooltipDirective, BsVirtualScroller\n    ],\n    providers: [\n        {\n            provide: SCREEN_SIZE_RULES,\n            useValue: defaultScreenSizeRules\n        }\n    ]\n})\nexport class UtilsModule {\n}\n","import {Injectable, OnDestroy} from \"@angular/core\";\r\nimport {IntlService} from \"@sinequa/core/intl\";\r\nimport {NotificationsService} from \"@sinequa/core/notification\";\r\nimport {Subject} from \"rxjs\";\r\n\r\n// eslint-disable-next-line no-var\r\ndeclare var webkitSpeechRecognition: any;\r\n\r\n@Injectable({\r\n  providedIn: \"root\"\r\n})\r\nexport class VoiceRecognitionService implements OnDestroy {\r\n  recognition;\r\n  recognizing = false;\r\n  ignore_onend = false;\r\n  start_timestamp;\r\n\r\n  text = new Subject<string>();\r\n  started = new Subject<boolean>();\r\n  available = false;\r\n\r\n  constructor(\r\n    private intlService: IntlService,\r\n    private notify: NotificationsService\r\n  ) {}\r\n\r\n  init() {\r\n    this.intlService.events.subscribe(() => {\r\n      this.recognition.lang = this.intlService.currentLocale.data?.intl.locale;\r\n    }\r\n    );\r\n\r\n    try {\r\n      this.recognition = new webkitSpeechRecognition();\r\n      this.recognition.continuous = false;\r\n      this.recognition.interimResults = true;\r\n      this.recognition.lang = this.intlService.currentLocale.data?.intl.locale;\r\n\r\n      this.recognition.addEventListener(\"error\", this.onError);\r\n      this.recognition.addEventListener(\"result\", this.onResult);\r\n      this.recognition.addEventListener(\"start\", this.onStart);\r\n      this.recognition.addEventListener(\"end\", this.onEnd);\r\n      this.available = true;\r\n    } catch (error) {\r\n      this.available = false;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.recognition.removeEventListener(\"error\", this.onError);\r\n    this.recognition.removeEventListener(\"result\", this.onResult);\r\n    this.recognition.removeEventListener(\"start\", this.onStart);\r\n    this.recognition.removeEventListener(\"end\", this.onEnd);\r\n  }\r\n\r\n  start() {\r\n    if (this.recognizing) {\r\n      this.stop();\r\n      return;\r\n    }\r\n\r\n    this.text.next(\"\");\r\n    this.started.next(true);\r\n    this.recognition.start();\r\n  }\r\n\r\n  stop() {\r\n    this.recognition.stop();\r\n    this.started.next(false);\r\n  }\r\n\r\n  toggleRecognition() {\r\n    if (this.recognizing) {\r\n      this.stop();\r\n    } else {\r\n      this.start();\r\n    }\r\n  }\r\n\r\n  private onResult = e => {\r\n    const transcript = Array.from(e.results)\r\n      .map((result: any) => result[0])\r\n      .map(result => result.transcript)\r\n      .join(\"\");\r\n\r\n    this.text.next(transcript);\r\n  };\r\n\r\n  private onStart = event => {\r\n    this.recognizing = true;\r\n    this.start_timestamp = event.timeStamp;\r\n  };\r\n\r\n  private onEnd = () => {\r\n    if (this.ignore_onend) {\r\n      return;\r\n    }\r\n    this.recognizing = false;\r\n    this.started.next(false);\r\n  };\r\n\r\n  private onError = event => {\r\n    let message: string = event.error;\r\n    switch (event.error) {\r\n      case \"no-speech\": {\r\n        message = \"No speech was detected.\";\r\n        break;\r\n      }\r\n      case \"audio-capture\": {\r\n        message = \"Audio capture failed.\";\r\n        break;\r\n      }\r\n      case \"not-allowed\": {\r\n        if (event.timeStamp - this.start_timestamp < 100) {\r\n          message = \"info_blocked\";\r\n        } else {\r\n          message = \"The user agent is not allowing any speech input to occur for reasons of security, privacy or user preference.\";\r\n        }\r\n        break;\r\n      }\r\n      case \"aborted\": {\r\n        message = \"Speech input was aborted somehow, maybe by some user-agent-specific behavior such as UI that lets the user cancel speech input.\"\r\n        break;\r\n      };\r\n      case \"network\": {\r\n        message = \"Some network communication that was required to complete the recognition failed.\";\r\n        break;\r\n      }\r\n      case \"service-not-allowed\": {\r\n        message = \"The user agent is not allowing the web application requested speech service, but would allow some speech service, to be used either because the user agent doesn’t support the selected one or because of reasons of security, privacy or user preference.\";\r\n        break;\r\n      }\r\n      case \"bad-grammar\": {\r\n        message = \"There was an error in the speech recognition grammar or semantic tags, or the grammar format or semantic tag format is unsupported.\";\r\n        break;\r\n      }\r\n      case \"language-not-supported\": {\r\n        message = `The language [${this.recognition.lang}] was not supported.`;\r\n        this.recognition.lang = \"en-US\";\r\n        break;\r\n      }\r\n    }\r\n    this.notify.warning(message);\r\n    this.ignore_onend = true;\r\n    this.started.next(false);\r\n  };\r\n}\r\n\r\nexport module VoiceRecognitionService {}","export default {\r\n    \"clipboard\": {\r\n        \"success\": \"{data} copied to the clipboard\",\r\n        \"error\": \"Clipboard error\"\r\n    }\r\n};\r\n","export default {\r\n    \"clipboard\": {\r\n        \"success\": \"{data} copié dans le presse-papiers\",\r\n        \"error\": \"Erreur du presse-papiers\"\r\n    }\r\n};\r\n","export default {\r\n    \"clipboard\": {\r\n        \"success\": \"{data} in die Zwischenablage kopiert\",\r\n        \"error\": \"Zwischenablagefehler\"\r\n    }\r\n};\r\n","import {Utils} from \"@sinequa/core/base\";\r\nimport _enUtils from \"./en\";\r\nimport _frUtils from \"./fr\";\r\nimport _deUtils from \"./de\";\r\n\r\nconst enUtils = Utils.merge({}, _enUtils);\r\nconst frUtils = Utils.merge({}, _frUtils);\r\nconst deUtils = Utils.merge({}, _deUtils);\r\n\r\nexport { enUtils, frUtils, deUtils };\r\n","import {CCColumn, EngineType, EngineTypeModifier} from \"@sinequa/core/web-services\";\n\n/**\n * @ignore\n *\n * Used internally to avoid circular references between ExprParser, AppService and FormatService.\n * Do not export from the app-utils module.\n */\nexport class AppServiceHelpers {\n    static isString(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.string) {\n            return true;\n        }\n        if (column.eType === EngineType.csv && (column.eTypeModifier & EngineTypeModifier.x) === EngineTypeModifier.x) {\n            return true;\n        }\n        return false;\n    }\n\n    static isCsv(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.csv && (column.eTypeModifier & EngineTypeModifier.x) !== EngineTypeModifier.x) {\n            return true;\n        }\n        return false;\n    }\n\n    static isTree(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.csv && (column.eTypeModifier & EngineTypeModifier.t) === EngineTypeModifier.t) {\n            return true;\n        }\n        return false;\n    }\n\n    static isEntity(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.csv && (column.eTypeModifier & (EngineTypeModifier.e | EngineTypeModifier.l)) === (EngineTypeModifier.e | EngineTypeModifier.l)) {\n            return true;\n        }\n        return false;\n    }\n\n    static isBoolean(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.bool) {\n            return true;\n        }\n        return false;\n    }\n\n    static isDate(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.date || column.eType === EngineType.dateTime || column.eType === EngineType.time) {\n            return true;\n        }\n        return false;\n    }\n\n    static isDouble(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.double || column.eType === EngineType.float) {\n            return true;\n        }\n        return false;\n    }\n\n    static isInteger(column: CCColumn | undefined): boolean {\n        if (!column) {\n            return false;\n        }\n        if (column.eType === EngineType.integer || column.eType === EngineType.unsigned) {\n            return true;\n        }\n        return false;\n    }\n\n    static isNumber(column: CCColumn | undefined): boolean {\n        return AppServiceHelpers.isInteger(column) || AppServiceHelpers.isDouble(column);\n    }\n\n    static isScalar(column: CCColumn | undefined): boolean {\n        return AppServiceHelpers.isNumber(column) || AppServiceHelpers.isDate(column) || AppServiceHelpers.isBoolean(column);\n    }\n\n    static isSortable(column: CCColumn | undefined): boolean {\n        return AppServiceHelpers.isString(column) || AppServiceHelpers.isScalar(column) ||\n            (AppServiceHelpers.isCsv(column) && !!column && ((column.eTypeModifier & EngineTypeModifier.l) === EngineTypeModifier.l));\n    }\n}\n","import { AppService, FormatService } from \"@sinequa/core/app-utils\";\nimport { FieldValue, IRef, MapOf, Utils } from \"@sinequa/core/base\";\nimport { IntlService } from \"@sinequa/core/intl\";\nimport { CCColumn, EngineType } from \"@sinequa/core/web-services\";\n\nimport { AppServiceHelpers } from \"./app-service-helpers\";\n\n/**\n * Describes a context for processing expressions\n */\nexport interface ExprContext {\n    appService: AppService;\n    formatService: FormatService;\n    intlService: IntlService;\n    disallowFulltext?: boolean;\n}\n\n/**\n * The operators accepted in fielded search expressions\n */\nexport const enum ExprOperator {\n    none,\n    eq,\n    gt,\n    gte,\n    lt,\n    lte,\n    neq,\n    regex,\n    like,\n    contains,\n    in,\n    between\n}\n\n/**\n * The range operators accepted in fielded search expressions\n */\nexport const enum ExprRange {\n    none,\n    gteLte,\n    gteLt,\n    gtLte,\n    gtLt\n}\n\n/**\n * An object containing the data necessary to format an `Expr` using\n * [IntlService.formatMessage]{@link IntlService#formatMessage}\n */\nexport interface ExprMessage {\n    /**\n     * The `IntlService` compatible message string\n     */\n    message: string;\n    /**\n     * Any values referenced by `message`\n     */\n    values?: {\n        [key: string]: FieldValue\n    };\n}\n\n/**\n * Options to be used with `Expr.toMessage`\n */\nexport interface ExprMessageOptions {\n    /**\n     * If `true`, field names are included in the message\n     */\n    withFields?: boolean;\n    /**\n     * If `true`, use any display value set in the expression\n     */\n    useDisplay?: boolean;\n    /**\n     * Include HTML formatting in the message\n     */\n    asHTML?: boolean;\n    /**\n     * If `true`, don't include any outer `NOT` operator in the message\n     */\n    hideOuterNot?: boolean;\n}\n\n/**\n * @ignore\n */\ninterface ExprMessageCtxt {\n    inner: boolean;\n    message: string[];\n    values: {\n        [key: string]: FieldValue\n    };\n    valueIndex: number;\n}\n\n/**\n * Describes a location in a fielded search expression\n */\nexport interface ExprLocation {\n    start: number;\n    length: number;\n}\n\n/**\n * Describes a location and value in a fielded search expression\n */\nexport interface ExprValueLocation extends ExprLocation {\n    value: string;\n}\n\n/**\n * Describes a location, value and field in a fielded search expression\n */\nexport interface ExprValueInfo extends ExprValueLocation {\n    field: string;\n}\n\n/**\n * Describes the data used in [Expr.evaluate]{@link Expr#evaluate}\n */\nexport interface ExprEvaluationContext {\n    [key: string]: any;\n}\n\n/**\n * Describes an initialization object used in the construction of an {@link Expr} from a value\n */\nexport interface ExprValueInitializer {\n    /**\n     * The expression context\n     */\n    exprContext: ExprContext;\n    /**\n     * A single value\n     */\n    value?: string;\n    /**\n     * An array of values\n     */\n    values?: string[];\n    /**\n     * Locations of the values used in range expressions\n     */\n    locations?: ExprLocation[];\n    /**\n     * The operator used in the expression\n     */\n    operator?: ExprOperator;\n    /**\n     * The field name\n     */\n    field?: string;\n    /**\n     * The display value\n     */\n    display?: string;\n}\n\n/**\n * Describes an initialization object used in the construction of a boolean {@link Expr} with a pair of operands\n */\nexport interface ExprOperandsInitializer {\n    /**\n     * The expression context\n     */\n    exprContext: ExprContext;\n    /**\n     * The first operand\n     */\n    op1: Expr;\n    /**\n     * If `true` this `Expr` represents an `AND` expression, otherwise it represents an `OR` expression\n     */\n    and: boolean;\n    /**\n     * The second operand\n     */\n    op2: Expr;\n    /**\n     * The field name\n     */\n    field?: string;\n    /**\n     * The display value\n     */\n    display?: string;\n}\n\n/**\n * Represents a parsed fielded search expression. A tree of expression nodes is built when an expression\n * combines sub-expressions using boolean operators\n */\nexport class Expr {\n\n    private _field: string | undefined = undefined;\n\n    /**\n     * Return the field name of this expression. Return the first ancestor's non-empty field\n     * if the field on this node is empty\n     */\n    public get field(): string | undefined {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let expr: Expr = this;\n        while (expr) {\n            if (!Utils.isEmpty(expr._field)) {\n                return expr._field;\n            }\n            expr = expr.parent;\n        }\n        return undefined;\n    }\n\n    /**\n     * Set the field name of this expression\n     */\n    public set field(value: string | undefined) {\n        this._field = value;\n    }\n\n    private _display: string | undefined = undefined;\n    private _displayObj: {label?: string, display?: string} | undefined = undefined;\n\n    /**\n     * Return the display value of this expression. Return the first ancestor's non-empty display value\n     * if the display value on this node is empty\n     */\n    public get display(): string | undefined {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let expr: Expr = this;\n        while (expr) {\n            if (!Utils.isEmpty(expr._display)) {\n                return expr._display;\n            }\n            expr = expr.parent;\n        }\n        return undefined;\n    }\n\n    /**\n     * Set the display value of this expression. If the display value is a valid stringified JSON object\n     * then set `displayObj` to the parsed object\n     */\n    public set display(value: string | undefined) {\n        this._display = value;\n        if (!this._display) {\n            this._displayObj = undefined;\n        }\n        else {\n            if (this._display[0] === \"{\" && this._display[this._display.length - 1] === \"}\") {\n                try {\n                    this._displayObj = Utils.fromJson(this._display);\n                }\n                catch (e) {\n                    this._displayObj = undefined;\n                }\n            }\n            else {\n                this._displayObj = undefined;\n            }\n        }\n    }\n\n    /**\n     * Return the display object of this expression. Return the first ancestor's non-empty display object\n     * if the display object on this node is empty\n     */\n    public get displayObj(): {label?: string, display?: string} | undefined {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let expr: Expr = this;\n        while (expr) {\n            if (expr._displayObj) {\n                return expr._displayObj;\n            }\n            expr = expr.parent;\n        }\n        return undefined;\n    }\n\n    /**\n     * The values of this expression\n     */\n    public values: string[] | undefined = undefined;\n    /**\n     * The locations of the values of this expression\n     */\n    public locations: ExprLocation[] | undefined;\n\n    /**\n     * Return the value of this expression. Note that range expressions may have multiple values\n     */\n    public get value(): string | undefined {\n        if (!this.values || this.values.length === 0) {\n            return undefined;\n        }\n        return this.values[0];\n    }\n\n    /**\n     * Set the value of this expression\n     */\n    public set value(value: string | undefined) {\n        if (value === undefined) {\n            this.values = undefined;\n        }\n        else {\n            if (!this.values) {\n                this.values = [];\n            }\n            this.values[0] = value;\n            this.values.length = 1;\n        }\n    }\n\n    /**\n     * The operator of this expression\n     */\n    public operator: ExprOperator;\n    /**\n     * If `true` then this expression included the `NOT` boolean operator\n     */\n    public not: boolean;\n    /**\n     * If `true` then the operands of this expression are combined with the `AND` operator.\n     * Otherwise the operands are combined with the `OR` operator\n     */\n    public and: boolean;\n    /**\n     * The operands of this expression, if any\n     */\n    public operands: Expr[];\n    /**\n     * The parent expression, if any\n     */\n    public parent: Expr;\n    /**\n     * The expression context\n     */\n    public exprContext: ExprContext;\n    /**\n     * The distance specified in a `NEAR` expression\n     */\n    public near: number;\n    /**\n     * The position of this expression's value in the original text\n     */\n    public start: number;\n    /**\n     * The length of this expression's value in the original text\n     */\n    public length: number;\n    private mergedStructured: boolean;\n\n    // for evaluate\n    private _evaluationRegExps: MapOf<RegExp | undefined>;\n    private get evaluationRegExps(): MapOf<RegExp | undefined> {\n        if (!this._evaluationRegExps) {\n            this._evaluationRegExps = {};\n        }\n        return this._evaluationRegExps;\n    }\n\n    constructor(init: ExprValueInitializer | ExprOperandsInitializer) {\n        if (!(<ExprOperandsInitializer>init).op1) {\n            const valueInit: ExprValueInitializer = <ExprValueInitializer>init;\n            this.exprContext = valueInit.exprContext;\n            if (!Utils.isUndefined(valueInit.value)) {\n                this.value = ExprParser.unescape(valueInit.value);\n            }\n            else if (!Utils.isUndefined(valueInit.values)) {\n                this.values = ExprParser.unescapeList(valueInit.values);\n            }\n            this.locations = valueInit.locations;\n            this.field = valueInit.field;\n            this.display = valueInit.display;\n            this.operator = !Utils.isUndefined(valueInit.operator) ? valueInit.operator : ExprOperator.none;\n            this.near = -1;\n            this.start = -1;\n            this.length = 0;\n        }\n        else {\n            const opsInit: ExprOperandsInitializer = init as ExprOperandsInitializer;\n            this.exprContext = opsInit.exprContext;\n            this.field = opsInit.field;\n            this.display = opsInit.display;\n            this.addOperand(opsInit.op1);\n            this.addOperand(opsInit.op2);\n            this.and = opsInit.and;\n            this.near = -1;\n            this.start = -1;\n            this.length = 0;\n        }\n    }\n\n    /**\n     * Add an operand to this expression\n     *\n     * @param operand The operand to add\n     * @param contextField The parser's field context, if any\n     * @param prepend If `true` the operand is prepended to the operands\n     */\n    public addOperand(operand: Expr, contextField?: string, prepend = false) {\n        if (Utils.isUndefined(contextField)) {\n            contextField = this.field;\n        }\n        if (!this.operands) {\n            this.operands = [];\n        }\n        if (!Utils.isEmpty(this.field) && Utils.isEmpty(operand.field) && !operand.isStructured) {\n            if (Utils.isEmpty(contextField)) {\n                // Prefer setting the fields explicitly on the target operands rather the Field to \"text\" on the source operand\n                // operand.field = ExprParser.fieldPartnamePrefix + \"text\";\n                for (const expr of this.operands) {\n                    if (Utils.isEmpty(expr._field)) {\n                        expr._field = this.field;\n                    }\n                }\n                this.field = undefined;\n            }\n        }\n        if (!Utils.eqNC(this.field || \"\", operand.field || \"\")) {\n            operand._field = operand.field;\n        }\n        else {\n            operand._field = undefined;\n        }\n        if (!Utils.isEmpty(this.display)) {\n            operand._display = undefined;\n        }\n        if (prepend) {\n            this.operands.unshift(operand);\n        }\n        else {\n            this.operands.push(operand);\n        }\n        operand.parent = this;\n    }\n\n    /**\n     * Return `true` if this expression is a leaf node (does have a value)\n     */\n    public get isLeaf(): boolean {\n        // if (this.value === null && !this.operands) throw \"Expr.isLeaf - bad expression\";\n        return !!this.value;\n    }\n\n    /**\n     * Make an expression object\n     *\n     * @param exprContext The expression context\n     * @param text The value of the expression\n     * @param field The parser's field context\n     * @param display The display value\n     * @param allowEmptyValue Determines how empty values will be processed when making the expression\n     */\n    public static makeExpr(exprContext: ExprContext, text: string, field: string, display: string, allowEmptyValue: boolean): Expr | undefined {\n        if (!Expr.getIsStructuredField(exprContext, Expr.resolveField(exprContext, field))) {\n            return new Expr({\n                exprContext: exprContext,\n                value: text,\n                field: field,\n                display: display\n            });\n        }\n\n        const values: IRef<string[] | undefined> = {value: undefined};\n        const locations: IRef<ExprLocation[] | undefined> = {value: undefined};\n        const operator: IRef<ExprOperator> = {value: ExprOperator.none};\n        const range: IRef<ExprRange> = {value: ExprRange.none};\n        Expr.parseValue(exprContext, text, field, allowEmptyValue, values, locations, operator, range);\n        if (range.value !== ExprRange.none && values.value && locations.value) {\n            const value1 = values.value[0];\n            const value2 = values.value[1];\n            const location1 = locations.value[0];\n            const location2 = locations.value[1];\n            if (range.value === ExprRange.gteLte && !Utils.eqNC(value1, \"*\") && !Utils.eqNC(value2, \"*\")) {\n                return new Expr({\n                    exprContext: exprContext,\n                    values: values.value,\n                    locations: locations.value,\n                    field: field,\n                    display: display,\n                    operator: ExprOperator.between\n                });\n            }\n            const expr1 = !Utils.eqNC(value1, \"*\") ? new Expr({\n                exprContext: exprContext,\n                value: value1,\n                locations: [location1],\n                field: field,\n                display: display,\n                operator: range.value === ExprRange.gteLt || range.value === ExprRange.gteLte ? ExprOperator.gte : ExprOperator.gt\n            }) : null;\n            const expr2 = !Utils.eqNC(value2, \"*\") ? new Expr({\n                exprContext: exprContext,\n                value: value2,\n                locations: [location2],\n                field: field,\n                display: display,\n                operator: range.value === ExprRange.gteLte || range.value === ExprRange.gtLte ? ExprOperator.lte : ExprOperator.lt\n            }) : undefined;\n            if (!expr1 && !expr2) {\n                return undefined;\n            }\n            if (!(!!expr1 && !!expr2)) return !!expr1 ? expr1 : expr2;\n            return new Expr({\n                exprContext: exprContext,\n                op1: expr1,\n                and: true,\n                op2: expr2,\n                display: display\n            });\n        }\n        return new Expr({\n            exprContext: exprContext,\n            values: values.value,\n            locations: locations.value,\n            field: field,\n            display: display,\n            operator: operator.value\n        });\n    }\n\n    private static resolveField(exprContext: ExprContext, field: string | null | undefined): string {\n        if (Utils.isString(field)) {\n            return exprContext.appService.resolveColumnName(field);\n        }\n        return \"\";\n    }\n\n    private static getColumn(exprContext: ExprContext, field: string | undefined): CCColumn | undefined {\n        return exprContext.appService.getColumn(field);\n    }\n\n    /**\n     * Return the {@link CCColumn} corresponding to this expression\n     */\n    get column(): CCColumn | undefined {\n        return Expr.getColumn(this.exprContext, this.field);\n    }\n\n    private static getIsStructuredField(exprContext: ExprContext, field: string | undefined): boolean {\n        if (!field) {\n            return false;\n        }\n        if (exprContext.disallowFulltext) {\n            return true;\n        }\n        else {\n            if (field[0] === \":\") {\n                return false; // :: => take partname over column\n            }\n            if (Utils.eqNCN(field, \"exists\", \"missing\")) {\n                return true;\n            }\n            return !!Expr.getColumn(exprContext, field);\n        }\n    }\n\n    /**\n     * Return `true` if the expression has a non-fulltext field. In this case the expression will be a leaf node\n     */\n    get isStructuredField(): boolean {\n        if (!this.isLeaf) {\n            return false;\n        }\n        return Expr.getIsStructuredField(this.exprContext, this.field);\n    }\n\n    /**\n     * Return `true` if the expression only contains non-fulltext fields\n     */\n    public get isStructured(): boolean {\n        if (this.mergedStructured) {\n            return true;\n        }\n        if (this.isLeaf) {\n            return this.isStructuredField;\n        }\n        if (!this.operands) {\n            return false;\n        }\n        for (const operand of this.operands) {\n            if (!operand.isStructured) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Return `true` if the expression and its ancestors do not have `not` set to `true`\n     */\n    public get isPositive(): boolean {\n        let positive = true;\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let current: Expr = this;\n        while (current != null) {\n            positive = positive && !current.not;\n            current = current.parent;\n        }\n        return positive;\n    }\n\n    /**\n     * Return an `ExprValueLocation` object for the passed text. Leading and trailing\n     * whitespace is excluded\n     */\n    static getValueAndLocation(text: string): ExprValueLocation {\n        let start = 0;\n        let length = text.length;\n        const value1 = Utils.trimStart(text);\n        start += length - value1.length;\n        length -= length - value1.length;\n        const value2 = Utils.trimEnd(value1);\n        length -= length - value2.length;\n        return {\n            value: value2,\n            start: start,\n            length: length\n        };\n    }\n\n    private static parseValue(exprContext: ExprContext, text: string, field: string, allowEmptyValue: boolean, values: IRef<string[] | undefined>, locations: IRef<ExprLocation[] | undefined>, operator: IRef<ExprOperator>, range: IRef<ExprRange>) {\n        if (Utils.isEmpty(text) && !allowEmptyValue) {\n            return;\n        }\n        const first = text[0];\n        const last = text[text.length - 1];\n        let vl: ExprValueLocation;\n        if (\"[{\".includes(first) && \"]}\".includes(last)) {\n            text = text.substr(1, text.length - 2);\n            let sepLen = 4;\n            let sep = text.indexOf(\" TO \");\n            if (sep === -1) {\n                sepLen = 2;\n                sep = text.indexOf(\"..\");\n            }\n            if (sep === -1) {\n                const vls = ExprParser.valuesAndLocationsFromText(text, ',');\n                values.value = [];\n                locations.value = [];\n                vls.forEach(vl1 => {\n                    values.value!.push(vl1.value);\n                    locations.value!.push({start: 1 + vl1.start, length: vl1.length});\n                });\n                operator.value = ExprOperator.in;\n                return;\n            }\n            vl = Expr.getValueAndLocation(text.substr(0, sep));\n            values.value = [vl.value];\n            locations.value = [{start: 1 + vl.start, length: vl.length}];\n            vl = Expr.getValueAndLocation(text.substr(sep + sepLen));\n            values.value.push(vl.value);\n            locations.value.push({start: 1 + sep + sepLen + vl.start, length: vl.length});\n            if (first === \"[\") {\n                range.value = last === \"]\" ? ExprRange.gteLte : ExprRange.gteLt;\n            }\n            else { // '{'\n                range.value = last === \"}\" ? ExprRange.gtLt : ExprRange.gtLte;\n            }\n            return;\n        }\n        vl = {\n            value: text,\n            start: 0,\n            length: text.length\n        };\n        if (text.startsWith(\"=\")) {\n            operator.value = ExprOperator.eq;\n            vl = Expr.getValueAndLocation(text.substr(1));\n            vl.start += 1;\n        }\n        else if (text.startsWith(\">=\")) {\n            operator.value = ExprOperator.gte;\n            vl = Expr.getValueAndLocation(text.substr(2));\n            vl.start += 2;\n        }\n        else if (text.startsWith(\">\")) {\n            operator.value = ExprOperator.gt;\n            vl = Expr.getValueAndLocation(text.substr(1));\n            vl.start += 1;\n        }\n        else if (text.startsWith(\"<=\")) {\n            operator.value = ExprOperator.lte;\n            vl = Expr.getValueAndLocation(text.substr(2));\n            vl.start += 2;\n        }\n        else if (text.startsWith(\"<>\")) {\n            operator.value = ExprOperator.neq;\n            vl = Expr.getValueAndLocation(text.substr(2));\n            vl.start += 2;\n        }\n        else if (text.startsWith(\"<\")) {\n            operator.value = ExprOperator.lt;\n            vl = Expr.getValueAndLocation(text.substr(1));\n            vl.start += 1;\n        }\n        else if (text.startsWith(\"~\")) {\n            operator.value = ExprOperator.regex;\n            vl = Expr.getValueAndLocation(text.substr(1));\n            vl.start += 1;\n        }\n        else if (text.length > 1 && text.startsWith(\"/\") && text.endsWith(\"/\")) {\n            operator.value = ExprOperator.regex;\n            vl.value = text.substr(1, text.length - 2);\n            vl.start = 1;\n            vl.length = vl.value.length;\n        }\n        if (text.startsWith(\"\\\"\") && text.endsWith(\"\\\"\")) {\n            vl.value = text.substr(1, text.length - 2);\n            vl.start = 1;\n            vl.length = vl.value.length;\n        }\n        values.value = [vl.value];\n        locations.value = [{start: vl.start, length: vl.length}];\n    }\n\n    private static getOperatorText(operator: ExprOperator): string {\n        switch (operator) {\n            case ExprOperator.eq: return \"=\";\n            case ExprOperator.gt: return \">\";\n            case ExprOperator.gte: return \">=\";\n            case ExprOperator.lt: return \"<\";\n            case ExprOperator.lte: return \"<=\";\n            case ExprOperator.neq: return \"<>\";\n            case ExprOperator.regex: return \"REGEXP\";\n            case ExprOperator.like: return \"LIKE\";\n            case ExprOperator.contains: return \"CONTAINS\";\n            case ExprOperator.in: return \"IN\";\n            case ExprOperator.between: return \"BETWEEN\";\n            default: return \"=\";\n        }\n    }\n\n    /**\n     * Find the first `ExprValueInfo` object from a starting position in this expression\n     *\n     * @param start The position at which to start the search\n     */\n    findValue(start: number): ExprValueInfo | undefined {\n        if (this.isLeaf) {\n            if (start >= this.start && start <= this.start + this.length) {\n                if (!this.isStructured) {\n                    return {\n                        /* eslint-disable-next-line */\n                        value: this.value!,\n                        /* eslint-disable-next-line */\n                        field: this.field!,\n                        start: this.start,\n                        length: this.length\n                    };\n                }\n                else if (!!this.locations && this.values && this.values.length === this.locations.length) {\n                    for (let i = 0, ic = this.values.length; i < ic; i++) {\n                        const value = this.values[i];\n                        const location = this.locations[i];\n                        if (start >= this.start + location.start && start <= this.start + location.start + location.length) {\n                            return {\n                                value,\n                                /* eslint-disable-next-line */\n                                field: this.field!,\n                                start: this.start + location.start,\n                                length: location.length\n                            };\n                        }\n                    }\n                }\n            }\n        }\n        else if (!!this.operands) {\n            for (const expr of this.operands) {\n                const value = expr.findValue(start);\n                if (value) {\n                    return value;\n                }\n            }\n        }\n        return undefined;\n    }\n\n    /**\n     * Combine two expressions into a single expression. The second expression will be added to\n     * the first expression and the first expression returned if the first expression is non-leaf\n     * and is an `AND` expression and not negated. Otherwise, a new `AND` expression will be created\n     * to which both expressions are added as operands.\n     */\n    static combine(expr1: Expr, expr2: Expr): Expr {\n        if (!expr1) {\n            return expr2;\n        }\n        if (!expr2) {\n            return expr1;\n        }\n        if (!expr1.isLeaf && expr1.and && !expr1.not) {\n            if (expr1.isLeaf || !expr2.and || expr2.not) {\n                expr1.addOperand(expr2);\n            }\n            else {\n                for (const expr3 of expr2.operands) {\n                    expr1.addOperand(expr3);\n                }\n            }\n            return expr1;\n        }\n        return new Expr({\n            exprContext: expr1.exprContext,\n            op1: expr1,\n            and: true,\n            op2: expr2\n        });\n    }\n\n    private normalizeField(field: string | undefined): string | undefined {\n        if (field && field[0] === ExprParser.fieldPartnamePrefix) {\n            return field.substr(1);\n        }\n        return field;\n    }\n\n    private shouldDisplayField(): boolean {\n        if (!this.field && !this.parent) { // top level full text\n            return true;\n        }\n        return !!this.field && (!this.parent || !Utils.eqNC(this.field, this.parent.field || \"\"));\n    }\n\n    private getOperatorString(): string {\n        if (this.operator === ExprOperator.none || this.operator === ExprOperator.eq) {\n            return \"\";\n        }\n        return Expr.getOperatorText(this.operator);\n    }\n\n    private escapeValue(value: string | null | undefined): string {\n        if (!!value && !!this.column && (AppServiceHelpers.isString(this.column) || AppServiceHelpers.isCsv(this.column))) {\n            return ExprParser.escape(value);\n        }\n        return value || \"\";\n    }\n\n    private getValueString(): string {\n        if (this.operator === ExprOperator.between && this.values && this.values.length === 2) {\n            return `[${this.escapeValue(this.values[0])}..${this.escapeValue(this.values[1])}]`;\n        }\n        if (this.values && this.values.length > 1) {\n            const sb: string[] = [];\n            for (const value of this.values) {\n                if (sb.length > 0) {\n                    sb.push(\", \");\n                }\n                sb.push(this.escapeValue(value));\n            }\n            sb.unshift(\"[\");\n            sb.push(\"]\");\n            return sb.join(\"\");\n        }\n        return this.escapeValue(this.value);\n    }\n\n    private addFieldToString(sb: string[]): boolean {\n        let added = false;\n        if (this.shouldDisplayField()) {\n            sb.push(this.normalizeField(this.field) || \"text\");\n            added = true;\n        }\n        if (this.display) {\n            sb.push(ExprParser.escape(this.display));\n            added = true;\n        }\n        if (added) {\n            sb.push(\":\");\n        }\n        return added;\n    }\n\n    private _toString(withFields: boolean, inner: boolean): string {\n        const sb: string[] = [];\n        if (this.isLeaf) {\n            if (this.not) {\n                sb.push(\"NOT \");\n            }\n            if (withFields) {\n                this.addFieldToString(sb);\n            }\n            sb.push(this.getOperatorString());\n            sb.push(this.getValueString());\n        }\n        else {\n            if (!this.operands) {\n                return \"\";\n            }\n            if (this.not) {\n                sb.push(\"NOT \");\n            }\n            let bracketed = inner;\n            if (this.addFieldToString(sb)) {\n                bracketed = true;\n            }\n            if (bracketed) {\n                sb.push(\"(\");\n            }\n            let first = true;\n            for (const operand of this.operands) {\n                if (!first) {\n                    if (this.and) {\n                        sb.push(\" AND \");\n                    }\n                    else {\n                        sb.push(\" OR \");\n                    }\n                }\n                first = false;\n                sb.push(operand._toString(withFields, true));\n            }\n            if (bracketed) {\n                sb.push(\")\");\n            }\n        }\n        return sb.join(\"\");\n    }\n\n    /**\n     * Return a string representation of this expression\n     *\n     * @param withFields If `true`, include field names\n     */\n    toString(withFields = true): string {\n        return this._toString(withFields, false);\n    }\n\n    private addDisplay(options: ExprMessageOptions, ctxt: ExprMessageCtxt, display: string) {\n        this._addValue(options, ctxt, this.value || \"\", display);\n    }\n\n    private encodeHTML(text: string, options: ExprMessageOptions): string {\n        if (options && options.asHTML) {\n            return Utils.encodeHTML(text);\n        }\n        else {\n            return text;\n        }\n    }\n\n    private _addValue(options: ExprMessageOptions, ctxt: ExprMessageCtxt, value: string, display?: string) {\n        if (options.asHTML) {\n            ctxt.message.push(`<span class=\"sq-value\">`);\n        }\n        const column = this.exprContext.appService.getColumn(this.field);\n        const valueId = `value${ctxt.valueIndex++}`;\n        let _value: FieldValue = value;\n        let _display: string | undefined;\n        if (display) {\n            _display = this.encodeHTML(ExprParser.unescape(display), options);\n        }\n        if (column && AppServiceHelpers.isNumber(column) && Utils.testFloat(value)) {\n            _value = +value;\n        }\n        else if (column && AppServiceHelpers.isDate(column)) {\n            _value = Utils.fromSysDateStr(value) || value;\n        }\n        else if (column && AppServiceHelpers.isBoolean(column)) {\n            _value = Utils.isTrue(value);\n        }\n        else if (Utils.isString(_value)) {\n            _value = this.encodeHTML(_value, options);\n        }\n        ctxt.message.push(`{${valueId}}`);\n        ctxt.values[valueId] = column\n            ? this.exprContext.formatService.formatFieldValue({value: _value, display: _display}, column)\n            : _display || _value;\n        if (options.asHTML) {\n            ctxt.message.push(`</span>`);\n        }\n    }\n\n    private addValue(options: ExprMessageOptions, ctxt: ExprMessageCtxt) {\n        if (this.values) {\n            if (this.operator === ExprOperator.between && this.values.length === 2) {\n                this._addValue(options, ctxt, this.values[0]);\n                ctxt.message.push(\" \");\n                this.addOperator(\"AND\", options, ctxt);\n                ctxt.message.push(\" \");\n                this._addValue(options, ctxt, this.values[1]);\n            }\n            else if (this.values.length > 1) {\n                let first = true;\n                for (const value of this.values) {\n                    ctxt.message.push(first ? \"[\" : \", \");\n                    first = false;\n                    this._addValue(options, ctxt, value);\n                }\n                ctxt.message.push(\"]\");\n            }\n            else {\n                this._addValue(options, ctxt, this.values[0]);\n            }\n        }\n    }\n\n    private addText(options: ExprMessageOptions, ctxt: ExprMessageCtxt, text: string) {\n        const valueId = `value${ctxt.valueIndex++}`;\n        const message = `{${valueId}}`;\n        ctxt.message.push(message);\n        ctxt.values[valueId] = this.encodeHTML(text, options);\n    }\n\n    private addFieldLabel(options: ExprMessageOptions, ctxt: ExprMessageCtxt) {\n        const displayObj = this.displayObj;\n        if (displayObj && displayObj.label) {\n            this.addText(options, ctxt, displayObj.label);\n        }\n        else if (this.field) {\n            const label = this.exprContext.appService.getLabel(this.normalizeField(this.field) || \"\");\n            this.addText(options, ctxt, label);\n        }\n        else {\n            if (!this.isStructured) {\n                const label = this.exprContext.appService.getLabel(\"text\");\n                this.addText(options, ctxt, label);\n            }\n            else {\n                const fields = this.getFields();\n                fields.forEach((field, index) => {\n                    if (index !== 0) {\n                        this.addText(options, ctxt, \"/\");\n                    }\n                    const label = this.exprContext.appService.getLabel(field);\n                    this.addText(options, ctxt, label);\n                });\n            }\n        }\n    }\n\n    private addField(options: ExprMessageOptions, ctxt: ExprMessageCtxt) {\n        if (options.asHTML) {\n            ctxt.message.push(`<span class=\"sq-field\">`);\n        }\n        this.addFieldLabel(options, ctxt);\n        if (options.asHTML) {\n            ctxt.message.push(`</span>`);\n            ctxt.message.push(`<span class=\"sq-separator\">`);\n        }\n        this.addText(options, ctxt, \"msg#system.fieldSeparator\");\n        if (options.asHTML) {\n            ctxt.message.push(`</span>`);\n        }\n    }\n\n    private addOperator(operator: string, options: ExprMessageOptions, ctxt: ExprMessageCtxt) {\n        if (!operator) {\n            return;\n        }\n        if (options.asHTML) {\n            ctxt.message.push(`<span class=\"sq-operator\">`);\n        }\n        ctxt.message.push(this.encodeHTML(operator, options));\n        if (options.asHTML) {\n            ctxt.message.push(`</span>`);\n        }\n    }\n\n    private _toMessage(ctxt: ExprMessageCtxt, options?: ExprMessageOptions): ExprMessage {\n        const inner = ctxt.inner;\n        ctxt.inner = true;\n        if (!options) {\n            options = {};\n        }\n        if (Utils.isUndefined(options.useDisplay)) {\n            options.useDisplay = true;\n        }\n\n        const displayObj = this.displayObj;\n        const display = (displayObj ? displayObj.display : undefined) || this.display;\n        const showNot = this.not && (inner || !options.hideOuterNot);\n        const showField = (options.withFields || inner) && this.shouldDisplayField();\n        if (options.useDisplay && !!display) {\n            if (showNot) {\n                this.addOperator(\"NOT\", options, ctxt);\n                ctxt.message.push(\" \");\n            }\n            if (showField) {\n                this.addField(options, ctxt);\n            }\n            this.addDisplay(options, ctxt, display);\n        }\n        else if (this.isLeaf) {\n            if (showNot) {\n                this.addOperator(\"NOT\", options, ctxt);\n                ctxt.message.push(\" \");\n            }\n            if (showField) {\n                this.addField(options, ctxt);\n            }\n            const operator = this.getOperatorString();\n            if (operator) {\n                this.addOperator(operator, options, ctxt);\n                ctxt.message.push(\" \");\n            }\n            this.addValue(options, ctxt);\n        }\n        else {\n            if (!this.operands) {\n                return {message: \"\"};\n            }\n            if (showNot) {\n                this.addOperator(\"NOT\", options, ctxt);\n                ctxt.message.push(\" \");\n            }\n            let bracketed = inner;\n            if (showField) {\n                this.addField(options, ctxt);\n                bracketed = true;\n            }\n            if (bracketed) {\n                ctxt.message.push(\"(\");\n            }\n            let first = true;\n            for (const operand of this.operands) {\n                if (!first) {\n                    if (this.and) {\n                        ctxt.message.push(\" \");\n                        this.addOperator(\"AND\", options, ctxt);\n                        ctxt.message.push(\" \");\n                    }\n                    else {\n                        ctxt.message.push(\" \");\n                        this.addOperator(\"OR\", options, ctxt);\n                        ctxt.message.push(\" \");\n                    }\n                }\n                first = false;\n                operand._toMessage(ctxt, options);\n            }\n            if (bracketed) {\n                ctxt.message.push(\")\");\n            }\n        }\n        if (inner) {\n            return {message: \"\"};\n        }\n        return {\n            message: ctxt.message.join(\"\"),\n            values: ctxt.values\n        };\n    }\n\n    /**\n     * Return an `ExprMessage` for the expression which can be used with [IntlService.formatMessage]{@link IntlService#formatMessage}\n     * for display purposes\n     */\n    toMessage(options?: ExprMessageOptions): ExprMessage {\n        return this._toMessage({\n            inner: false,\n            message: [\"txt#\"],\n            values: {},\n            valueIndex: 0\n        }, options);\n    }\n\n    private static matchNode(context: ExprContext, expr1: Expr, expr2: Expr): boolean {\n        if (expr1.isLeaf !== expr2.isLeaf) {\n            return false;\n        }\n        if (expr1.isLeaf) {\n            if (expr1.isStructured !== expr2.isStructured) {\n                return false;\n            }\n            if (expr1.not !== expr2.not) {\n                return false;\n            }\n            const field1 = context.appService.resolveColumnAlias(expr1.field);\n            const field2 = context.appService.resolveColumnAlias(expr2.field);\n            if (field1 !== field2) {\n                return false;\n            }\n            const operator1 = expr1.operator === ExprOperator.none ? ExprOperator.eq : expr1.operator;\n            const operator2 = expr2.operator === ExprOperator.none ? ExprOperator.eq : expr2.operator;\n            if (operator1 !== operator2) {\n                return false;\n            }\n        }\n        if (!expr1.isLeaf) {\n            if (expr1.and !== expr2.and) {\n                return false;\n            }\n            // All of the structured and non-structured operands in expr2 must be in expr1 so check that there are at least enough\n            // operands available. (The actual matching of the contents of the operand nodes is done in the recursive calls to MatchNode)\n            if (!expr1.operands !== !expr2.operands) {\n                return false;\n            }\n            let expr1StructuredCount = 0, expr1UnstructuredCount = 0, expr2StructuredCount = 0, expr2UnstructuredCount = 0;\n            expr1.operands.forEach((operand) => { if (operand.isStructured) { expr1StructuredCount++; } else { expr1UnstructuredCount++; }});\n            expr2.operands.forEach((operand) => { if (operand.isStructured) { expr2StructuredCount++; } else { expr2UnstructuredCount++; }});\n            if ((expr2StructuredCount > expr1StructuredCount) || (expr2UnstructuredCount > expr1UnstructuredCount)) {\n                return false;\n            }\n        }\n        const values1Length = expr1.values ? expr1.values.length : 0;\n        const values2Length = expr2.values ? expr2.values.length : 0;\n        if (values1Length !== values2Length) {\n            return false;\n        }\n        if (values1Length && expr1.values && expr2.values) {\n            for (const value1 of expr1.values) {\n                let found = false;\n                for (const value2 of expr2.values) {\n                    if (Utils.eqNC(value1, value2)) {\n                        found = true;\n                    }\n                }\n                if (!found) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Return `true` if this expression matches the passed one\n     */\n    matchNode(expr: Expr): boolean {\n        return Expr.matchNode(this.exprContext, this, expr);\n    }\n\n    /**\n     * Returns the matching expression or sub-expression in this expression with the passed one.\n     *\n     * @param expr The expression to match\n     * @param filter An option filter function called on first level candidate sub-expressions\n     * before matching within them\n     */\n    find(expr: Expr, filter?: (expr: Expr) => boolean): Expr | null {\n        if (this.matchNode(expr)) {\n            if (!this.isLeaf && this.operands) {\n                for (const child1 of expr.operands) {\n                    let found = false;\n                    for (const child2 of this.operands) {\n                        if (filter && filter(child2)) {\n                            continue;\n                        }\n                        if (child2.find(child1)) {\n                            found = true;\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        return null;\n                    }\n                }\n            }\n            return this;\n        }\n        else {\n            if (!this.isLeaf && this.operands) {\n                for (const child of this.operands) {\n                    if (filter && filter(child)) {\n                        continue;\n                    }\n                    if (child.find(expr)) {\n                        return child;\n                    }\n                }\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Perform the passed `action` on this expression and any descendant operands\n     *\n     * @param action The action to perform\n     */\n    forEach(action: (expr: Expr) => void) {\n        action(this);\n        if (this.operands) {\n            for (const operand of this.operands) {\n                operand.forEach(action);\n            }\n        }\n    }\n\n    /**\n     * Execute the callback function on this node and any descendants until the callback returns a truthy value\n     * in which case immediately return `true`. Otherwise return `false`.\n     */\n    some(callback: (expr: Expr) => boolean): boolean {\n        if (callback(this)) {\n            return true;\n        }\n        if (this.operands) {\n            for (const operand of this.operands) {\n                if (operand.some(callback)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Execute the callback function on this node and any descendants until the callback returns a falsy value\n     * in which case, immediately return `false`. Otherwise return `true`.\n     */\n    every(callback: (expr: Expr) => boolean): boolean {\n        if (!callback(this)) {\n            return false;\n        }\n        if (this.operands) {\n            for (const operand of this.operands) {\n                if (!operand.every(callback)) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Return `true` if the exoression has at least one fulltext operand.\n     * The test on `isPositive` filters expressions that only contain\n     * negative fulltext terms which will be ignored on the server. Fulltext\n     * expressions must have at least one positive term.\n     */\n    get hasRelevance(): boolean {\n        return this.some(expr => expr.isLeaf && !expr.isStructured && expr.isPositive);\n    }\n\n    /**\n     * Return an array of all fields used in this expression\n     */\n    getFields(): string[] {\n        const fields: string[] = [];\n        this.forEach((expr) => {\n            const field = this.exprContext.appService.resolveColumnAlias(expr.field);\n            if (field) {\n                if (!fields.find((field1) => Utils.eqNC(field, field1))) {\n                    fields.push(field);\n                }\n            }\n        });\n        return fields;\n    }\n\n    /**\n     * Return an array of all values used in this expression that pertain to the passed field and where the associated `isPositive`\n     * field matches the passed `positive` parameter\n     *\n     * @param field The field for which values are to be returned\n     * @param positive The value to test against `isPositive`\n     */\n    getValues(field: string, positive = true): string[] {\n        const values: string[] = [];\n        const column = this.exprContext.appService.resolveColumnName(field);\n        this.forEach((expr) => {\n            if (column) {\n                const column1 = this.exprContext.appService.resolveColumnName(expr.field);\n                if (!Utils.eqNC(column, column1)) {\n                    return;\n                }\n            }\n            if (expr.isLeaf && expr.isPositive === positive && expr.values) {\n                values.push(...expr.values);\n            }\n        });\n        return values;\n    }\n\n    private getDataValue(data: ExprEvaluationContext, field?: string, defaultScope?: string): any {\n        if (!data) {\n            return undefined;\n        }\n        const fields = Utils.split(field || \"\", \".\");\n        if (fields.length >= 1 && Utils.isUndefined(data[fields[0]]) && !!defaultScope) {\n            // By default, look on the \"defaultScope\" sub-object\n            fields.unshift(...Utils.split(defaultScope, \".\"));\n        }\n        let value: any = data;\n        for (const _field of fields) {\n            if (!value) {\n                break;\n            }\n            value = value[_field];\n        }\n        return value;\n    }\n\n    private getWildcardRegExp(value: string): RegExp | undefined {\n        if (value) {\n            let regExp = this.evaluationRegExps[value];\n            if (!Utils.isUndefined(regExp)) {\n                return regExp;\n            }\n            let haveWildcards = false;\n            let escaping = false;\n            const sb: string[] = [];\n            for (const ch of value) {\n                switch (ch) {\n                    // Handle wildcards and wildcard escaping\n                    case \"\\\\\":\n                        if (escaping) {\n                            sb.push(\"\\\\\\\\\");\n                            escaping = false;\n                        }\n                        else {\n                            escaping = true;\n                        }\n                        break;\n                    case \"*\":\n                        if (escaping) {\n                            sb.push(\"\\\\\");\n                            sb.push(ch);\n                            escaping = false;\n                        }\n                        else {\n                            haveWildcards = true;\n                            sb.push(\".*?\");\n                        }\n                        break;\n                    case \"?\":\n                        if (escaping) {\n                            sb.push(\"\\\\\");\n                            sb.push(ch);\n                            escaping = false;\n                        }\n                        else {\n                            haveWildcards = true;\n                            sb.push(\".\");\n                        }\n                        break;\n                    // Escape other regexp special characters\n                    case \"-\":\n                    case \"/\":\n                    case \"^\":\n                    case \"$\":\n                    case \"+\":\n                    case \".\":\n                    case \"(\":\n                    case \")\":\n                    case \"|\":\n                    case \"[\":\n                    case \"]\":\n                    case \"{\":\n                    case \"}\":\n                        sb.push(\"\\\\\");\n                        sb.push(ch);\n                        escaping = false;\n                        break;\n                    // All other characters just emit\n                    default:\n                        sb.push(ch);\n                        escaping = false;\n                        break;\n                }\n            }\n            if (haveWildcards) {\n                regExp = new RegExp(\"^\" + sb.join(\"\") + \"$\", \"i\");\n                this.evaluationRegExps[value] = regExp;\n                return regExp;\n            }\n            else {\n                this.evaluationRegExps[value] = undefined;\n            }\n        }\n        return undefined;\n    }\n\n    // NB comparisons with NaN always return false\n    private compare(value: string | string[] | undefined, dataValue: any, equality?: boolean): number {\n        if (Array.isArray(dataValue) && dataValue.length === 0) {\n            return NaN;\n        }\n        const column = Expr.getColumn(this.exprContext, this.field || \"\");\n        if (Array.isArray(dataValue) || Array.isArray(value)) {\n            // \"in\" / \"contains\"\n            if (!Array.isArray(dataValue)) {\n                dataValue = [dataValue];\n            }\n            if (Array.isArray(value)) {\n                if (value.length === 0) {\n                    return NaN;\n                }\n            }\n            else {\n                value = [value + \"\"];\n            }\n            // At least one value in the value array must match a value in the dataValue array\n            for (const value1 of value) {\n                for (const dataValue1 of dataValue) {\n                    if (this.compare(value1, dataValue1, true) === 0) {\n                        return 0;\n                    }\n                }\n            }\n            return NaN;\n        }\n        if (!Array.isArray(value)) {\n            value = ExprParser.unescape(value || \"\");\n            if (column && column.parser) {\n                value = this.exprContext.formatService.parseValue(value, column.parser);\n            }\n            if (AppServiceHelpers.isNumber(column)) {\n                if (!Utils.isNumber(dataValue)) {\n                    dataValue = 0;\n                }\n                const _value = Utils.toNumber(value);\n                return dataValue - _value;\n            }\n            if (AppServiceHelpers.isDate(column)) {\n                if (Utils.isString(dataValue)){\n                    dataValue = Utils.toDate(dataValue);\n                }\n                if (Utils.isDate(dataValue)) {\n                    const _value = this.exprContext.intlService.parseDate(value);\n                    if (_value) {\n                        return dataValue.getTime() - _value.getTime();\n                    }\n                }\n                return NaN;\n            }\n            if (AppServiceHelpers.isBoolean(column)) {\n                const _value = Utils.isTrue(value) ? 1 : 0;\n                return (dataValue ? 1 : 0) - _value;\n            }\n            dataValue = dataValue || \"\";\n            if (Utils.isString(dataValue)) {\n                dataValue = ExprParser.unescape(dataValue);\n                if (equality) {\n                    const regExp = this.getWildcardRegExp(value);\n                    if (regExp) {\n                        return regExp.test(dataValue) ? 0 : -1;\n                    }\n                }\n                return Utils.compare(dataValue, value);\n            }\n        }\n        return NaN;\n    }\n\n    /**\n     * Evaluate this expression using `data` to provide field values. Field values\n     * can contain scopes (full stop separated components) to reference sub-objects\n     * in the data\n     *\n     * @param data The field values to be used in the evaluation\n     * @param defaultScope If a field value cannot be resolved then try to retrieve a value with this scope prepended to the field name\n     * @return The boolean result of the expression evaluation\n     */\n    evaluate(data: ExprEvaluationContext, defaultScope?: string): boolean {\n        let ret: boolean;\n        if (this.isLeaf) {\n            if (!this.isStructured) {\n                ret = false;\n            }\n            else {\n                if (Utils.eqNC(this.field || \"\", \"exists\")) {\n                    const dataValue = this.getDataValue(data, this.value, defaultScope);\n                    ret = !Utils.isUndefined(dataValue);\n                }\n                else if (Utils.eqNC(this.field || \"\", \"missing\")) {\n                    const dataValue = this.getDataValue(data, this.value, defaultScope);\n                    ret = Utils.isUndefined(dataValue);\n                }\n                else {\n                    const dataValue = this.getDataValue(data, this.field, defaultScope);\n                    switch (this.operator) {\n                        case ExprOperator.none:\n                        case ExprOperator.eq:\n                            ret = this.compare(this.value, dataValue, true) === 0;\n                            break;\n                        case ExprOperator.gt:\n                            ret = this.compare(this.value, dataValue) > 0;\n                            break;\n                        case ExprOperator.gte:\n                            ret = this.compare(this.value, dataValue) >= 0;\n                            break;\n                        case ExprOperator.lt:\n                            ret = this.compare(this.value, dataValue) < 0;\n                            break;\n                        case ExprOperator.lte:\n                            ret = this.compare(this.value, dataValue) <= 0;\n                            break;\n                        case ExprOperator.neq:\n                            ret = this.compare(this.value, dataValue, true) !== 0;\n                            break;\n                        case ExprOperator.regex: {\n                            const regExp = new RegExp(this.value || \"\");\n                            ret = regExp.test(dataValue + \"\");\n                            break;\n                        }\n                        case ExprOperator.like: // not currently generated in parse\n                            ret = this.compare(this.value + \"*\", dataValue, true) === 0;\n                            break;\n                        case ExprOperator.in:\n                            ret = this.compare(this.values, dataValue, true) === 0;\n                            break;\n                        case ExprOperator.contains: // not currently generated in parse\n                            ret = this.compare(this.value, dataValue, true) === 0;\n                            break;\n                        case ExprOperator.between:\n                            ret = !!this.values &&\n                                this.compare(this.values[0], dataValue) >= 0 && this.compare(this.values[1], dataValue) <= 0;\n                            break;\n                    }\n                }\n            }\n        }\n        else {\n            ret = !!this.and;\n            for (const operand of this.operands) {\n                const ret1 = operand.evaluate(data, defaultScope);\n                if (this.and) {\n                    ret = ret && ret1;\n                    if (!ret) {\n                        break;\n                    }\n                }\n                else {\n                    ret = ret || ret1;\n                }\n            }\n        }\n        if (this.not) {\n            ret = !ret;\n        }\n        return ret;\n    }\n}\n\n/**\n * @ignore\n */\nexport const enum Token {\n    invalid=-1,\n    or=0,\n    and=1,\n    not=2,\n    near=3,\n    infixNear=4,\n    lPar=5,\n    rPar=6,\n    eof=7,\n    value=8\n}\n\n/**\n * @ignore\n */\nconst enum Act {\n    s,  // shift\n    r,  // reduce\n    a,  // accept\n    e1, // error : missing right parenthesis\n    e2, // error : missing operator\n    e3, // error : unbalanced right parenthesis\n    e4  // error : invalid function argument\n}\n\n/**\n * Parsing options\n */\nexport interface ExprParserOptions {\n    /**\n     * If `true` then a fielded search expression with no value will not generate an error. This would be used\n     * when providing feedback during text entry\n     */\n    allowEmptyValues?: boolean;\n    /**\n     * If `true`, fields can contain the scoping character (`.`). This is typically used with `Expr.evaluate`\n     */\n    allowScopedFields?: boolean;\n    /**\n     * If `true` then arbitrary field names are permitted. This is typically used with `Expr.evaluate`\n     */\n    disallowFulltext?: boolean;\n    /**\n     * If `true` then fielded search is enabled\n     */\n    enabledFieldedSearch?: boolean;\n}\n\n/**\n * @ignore\n */\nexport class ExprParserOperator {\n    public static invalid: ExprParserOperator = new ExprParserOperator(Token.invalid);\n    public static or: ExprParserOperator = new ExprParserOperator(Token.or);\n    public static and: ExprParserOperator = new ExprParserOperator(Token.and);\n    public static not: ExprParserOperator = new ExprParserOperator(Token.not);\n    public static lPar: ExprParserOperator = new ExprParserOperator(Token.lPar);\n    public static rPar: ExprParserOperator = new ExprParserOperator(Token.rPar);\n    public static eof: ExprParserOperator = new ExprParserOperator(Token.eof);\n\n    public tok: Token;\n    public tokValue: string;\n    public tokValuePos: number;\n    public tokValueLen: number;\n\n    constructor(tok: Token, value: string = \"\", valuePos: number = -1, valueLen: number = -1) {\n        this.tok = tok;\n        this.tokValue = value;\n        this.tokValuePos = valuePos;\n        this.tokValueLen = valueLen;\n    }\n}\n\n/**\n * A parser for Sinequa fielded search expressions. Such expressions allow filters to be specified in fulltext and\n * can be combined with boolean operators to build complex queries.\n *\n * A single fielded search clause has this form:\n * ``<fieldname>[`display value`]:[:][<operator>]<value>``\n *\n * A field name is either a column name or alias or a partname. In the case of a partname and column name clashing then\n * the field is treated as a column. Two colons can be specified as the separator to denote that the field is a partname.\n * An optional display value can follow the fieldname enclosed in backquote characters\n *\n * Operators are: `=` (default), `>=`, `>`, `<=`, `<`, `~` (regexp)\n * In addition, a regular expression can be specified by enclosing the value in `/` characters\n *\n * An inclusive range of values can be specified using a square bracket syntax: `[value1..value2]`\n * An exclusive range of values can be specified using a curly bracket syntax: `{value1..value2}`\n * The brackets can be mixed. For example: `age:{5..13]` expresses `13 >= age > 5`.\n *\n * For multi-value csv fields an `IN` condition can be expressed using a comma-separated list of values enclosed in square brackets.\n * For example: `authors:[Proust, Orwell, Dickens]`\n *\n * If a value contains reserved characters then it can be enclosed in backquote characters to prevent the parser interpreting them\n * incorrectly. For example: ``code: `a:b:c` ``\n *\n * The parser also supports a NEAR operator to allow searching for terms close to each other. There are two forms suppported:\n * * infix - `term1 NEAR[/n] term2` where `n` is the maximum number of words between the two terms for them to match\n * * function - `NEAR[/n](term1, term2, term3, ...)` where `n` is \"window\" size within which all the terms must be present for them\n * to match. The minimum useful value for n is thus equal to the number of terms passed to the operator.\n *\n * Fielded search expresions can be combined with the boolean operators `AND`, `OR` and `NOT` and brackets used for grouping.\n * For example: `football (age:>=7 AND (name:smith OR name:jones))`\n */\nexport class ExprParser {\n\n    public static fieldPartnamePrefix = \"@\";\n    private static parsetbl: Act[][] = [\n    /* stk  ------------- input ------------*/\n    /*\t\t                                 INFIX                  */\n    /*\t\t         OR\t   AND\t NOT   NEAR  NEAR  (\t  )\t     $  */\n    /*OR */         [Act.r, Act.s, Act.s, Act.s, Act.s, Act.s, Act.r, Act.r],\n    /*AND*/         [Act.r, Act.r, Act.s, Act.s, Act.s, Act.s, Act.r, Act.r],\n    /*NOT*/         [Act.r, Act.r, Act.s, Act.s, Act.r, Act.s, Act.r, Act.r],\n    /*NEAR*/        [Act.r, Act.r, Act.s, Act.s, Act.r, Act.s, Act.r, Act.r],\n    /*INFIXNEAR*/   [Act.r, Act.r, Act.s, Act.s, Act.r, Act.s, Act.r, Act.r],\n    /*(*/           [Act.s, Act.s, Act.s, Act.s, Act.s, Act.s, Act.s, Act.e1],\n    /*)*/           [Act.r, Act.r, Act.r, Act.r, Act.r, Act.e2, Act.r, Act.r],\n    /*$*/           [Act.s, Act.s, Act.s, Act.s, Act.s, Act.s, Act.e3, Act.a]\n    ];\n\n    private exprContext: ExprContext;\n    private options: ExprParserOptions;\n    private expressions: Expr[];\n    private operators: ExprParserOperator[];\n    private fields: string[]; // pushed on '(', popped on ')'\n    private displays: string[]; // pushed on '(', popped on ')'\n    private op: ExprParserOperator;\n    private prevOp: ExprParserOperator;\n    private saveOp: ExprParserOperator; // for default conjunction operator\n    private field: string;\n    private display: string;\n    private text: string;\n    private current: number;\n    private length: number;\n\n    private constructor(exprContext: ExprContext, options?: ExprParserOptions) {\n        this.exprContext = exprContext;\n        this.options = options || {};\n        this.exprContext.disallowFulltext = this.options.disallowFulltext;\n        this.expressions = [];\n        this.operators = [];\n        this.fields = [];\n        this.displays = [];\n        this.text = \"\";\n        this.current = 0;\n        this.length = 0;\n        this.op = this.prevOp = this.saveOp = ExprParserOperator.invalid;\n\n        // Set enabledFieldedSearch from appService.ccquery if not explicitly provided\n        if (Utils.isUndefined(this.options.enabledFieldedSearch)) {\n            this.options.enabledFieldedSearch = exprContext.appService.ccquery?.enableFieldedSearch;\n        }\n    }\n\n    /**\n     * Escape a string so that the characters in it are not processed by the fielded search expression parser.\n     * Single occurrences of the backslash character are replaced by two backslashes and backquote characters\n     * are prefixed by a backslash. Finally, the string is enclosed in backquotes.\n     *\n     * For example: `` a\\`\\b `` => `` a\\\\\\`\\\\b ``\n     */\n    // \\ => \\\\\n    // ` => \\`\n    // then surround with ``\n    public static escape(value: string | undefined): string {\n        if (!value) {\n            return \"``\";\n        }\n        value = String(value); // make sure we have a string\n        if (value.search(/[\\\\`]/) === -1) {\n            return \"`\" + value + \"`\";\n        }\n        const sb: string[] = [\"`\"];\n        for (let i = 0, ic = value.length; i < ic; i++) {\n            const ch = value[i];\n            if (ch === \"\\\\\" || ch === \"`\") {\n                sb.push(\"\\\\\");\n            }\n            sb.push(ch);\n        }\n        sb.push(\"`\");\n        return sb.join(\"\");\n    }\n\n    private static isEscaped(value: string | undefined): boolean {\n        return !!value && value.length >= 2 && value[0] === \"`\" && value[value.length - 1] === \"`\";\n    }\n\n    /**\n     * Perform the reverse operation to [ExprParser.escpae]{@link ExprParser#escape}\n     */\n    // remove surrounding ``\n    // \\\\ => \\\n    // \\` => `\n    public static unescape(value: string): string {\n        if (!ExprParser.isEscaped(value)) {\n            return value;\n        }\n        const sb: string[] = [];\n        for (let i = 1, ic = value.length - 1; i < ic; i++) {\n            let ch = value[i];\n            if (ch === \"\\\\\") {\n                if (i >= ic - 1) { // we end with a \\ => drop it\n                    continue;\n                }\n                ch = value[++i];\n            }\n            sb.push(ch);\n        }\n        return sb.join(\"\");\n    }\n\n    /**\n     * @ignore\n     */\n    public static unescapeList(values: string[]): string[] {\n        if (!values) {\n            return values;\n        }\n        const values1: string[] = [];\n        for (let _i = 0, _a = values; _i < _a.length; _i++) {\n            const value = _a[_i];\n            values1.push(ExprParser.unescape(value));\n        }\n        return values1;\n    }\n\n    /**\n     * @ignore\n     */\n    public static valuesAndLocationsFromText(text: string, separator: string): ExprValueLocation[] {\n        if (Utils.isEmpty(text)) {\n            return [];\n        }\n        if (!text.includes(separator)) {\n            return [{value: text, start: 0, length: text.length}];\n        }\n        const values: ExprValueLocation[] = [];\n        const length = text.length;\n        let current = 0;\n        let currentStart = 0;\n        const sb: string[] = [];\n        let value: ExprValueLocation;\n        while (true) {\n            if (current >= length) {\n                value = Expr.getValueAndLocation(sb.join(\"\"));\n                value.start += currentStart;\n                if (!Utils.isEmpty(value.value)) {\n                    values.push(value);\n                }\n                break;\n            }\n            const ch = text[current];\n            if (ch === \"\\\\\") {\n                sb.push(ch);\n                current++;\n                if (current < length) {\n                    const ch1 = text[current];\n                    if (ch1 === \"\\\\\" || ch1 === \"`\") {\n                        sb.push(ch1);\n                        current++;\n                    }\n                }\n            }\n            else if (ch === \"`\") {\n                const last: IRef<number> = {value: 0};\n                const s = ExprParser.matchUntil(text, length, current, current + 1, \"`\", last);\n                if (!!s) {\n                    sb.push(s);\n                    current = last.value;\n                }\n                else {\n                    sb.push(ch);\n                    current++;\n                }\n            }\n            else if (ch === separator) {\n                value = Expr.getValueAndLocation(sb.join(\"\"));\n                value.start += currentStart;\n                sb.length = 0;\n                if (!Utils.isEmpty(value.value)) {\n                    values.push(value);\n                }\n                current++;\n                currentStart = current;\n            }\n            else {\n                sb.push(ch);\n                current++;\n            }\n        }\n        return values;\n    }\n\n    private matchKeyword(keyword: string, sbCurrentValue: string[], suffixCh?: string): boolean {\n        if (sbCurrentValue.length !== 0) {\n            const currentValue = sbCurrentValue.join(\"\");\n            if (!!currentValue && !\" \\r\\n\\t\".includes(currentValue[currentValue.length - 1])) {\n                return false;\n            }\n        }\n        if (Utils.isEmpty(keyword)) {\n            return false;\n        }\n        const keywordLen = keyword.length;\n        if (this.current + keywordLen > this.length) {\n            return false;\n        }\n        for (let i = 0, ic = keywordLen; i < ic; i++) {\n            const ch = this.text[this.current + i];\n            const kh = keyword[i];\n            if (ch !== kh) {\n                return false;\n            }\n        }\n        if (this.current + keywordLen < this.length) {\n            const nch = this.text[this.current + keywordLen];\n            if (nch !== suffixCh && !\" \\r\\n\\t(\".includes(nch)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    private matchUntil(first: number, start: number, endChars: string, last: IRef<number>): string | undefined {\n        return ExprParser.matchUntil(this.text, this.length, first, start, endChars, last);\n    }\n\n    private static matchUntil(text: string, length: number, first: number, start: number, endChars: string, last: IRef<number>): string | undefined {\n        last.value = start;\n        let found = false;\n        const sb: string[] = [text.substr(first, start - first)];\n        while (last.value < length) {\n            let ch = text[last.value++];\n            if (ch === \"\\\\\") {\n                sb.push(ch);\n                if (last.value < length) {\n                    ch = text[last.value++];\n                    if (ch === \"\\\\\" || ch === \"`\") {\n                        sb.push(ch);\n                        continue;\n                    }\n                }\n            }\n            sb.push(ch);\n            if (endChars.includes(ch)) {\n                found = true;\n                break;\n            }\n        }\n        if (!found) {\n            return undefined;\n        }\n        return sb.join(\"\");\n    }\n\n    private matchSimpleValue(start: number): string {\n        const first = this.current;\n        let last = start;\n        while (last < this.length) {\n            const ch = this.text[last];\n            if (\" \\r\\n\\t)\".includes(ch)) {\n                break;\n            }\n            last++;\n        }\n        if (last === start) {\n            return \"\";\n        }\n        return this.text.substr(first, last - first);\n    }\n\n    private getTerminators(ch: string, allowRanges: boolean): string {\n        if (ch === \"\\\"\") return \"\\\"\";\n        if (ch === \"[\") return allowRanges ? \"]}\" : \"]\";\n        if (ch === \"{\") return allowRanges ? \"}]\" : \"}\";\n        if (ch === \"/\") return \"/\";\n        if (ch === \"(\") return \")\";\n        if (ch === \"`\") return \"`\";\n        return \"\";\n    }\n\n    private canBeTokValue(value: string, canBeEmpty = true) {\n        return !Utils.isEmpty(value) || (canBeEmpty && this.options.allowEmptyValues && !Utils.isEmpty(this.field));\n    }\n\n    private _getTokValue(value: string, canBeEmpty = true): boolean {\n        // Current is pointing at the next non-whitepspace character after this value\n        if (value === null) return false;\n        let pos = this.current;\n        const len = value.length;\n        value = Utils.trimEnd(value);\n        pos -= len - value.length;\n        value = value.trim();\n        if (this.canBeTokValue(value, canBeEmpty)) {\n            this.op = new ExprParserOperator(Token.value, value, pos - value.length, value.length);\n            return true;\n        }\n        return false;\n    }\n\n    private getTokValue(sb: string[], canBeEmpty = true): boolean {\n        if (!sb) {\n            return false;\n        }\n        return this._getTokValue(sb.join(\"\"), canBeEmpty);\n    }\n\n    private ensureNearValue(value: string): string {\n        const defaultNearValue = this.exprContext.appService.ccquery ? this.exprContext.appService.ccquery.defaultNearValue : 0;\n        let near = Utils.toInt(value, defaultNearValue);\n        if (near < 0) {\n            near = defaultNearValue;\n        }\n        return near.toString();\n    }\n\n    private findDisplay(value: string): number {\n        if (!value || value.length < 3) {\n            return -1;\n        }\n        if (value[value.length - 1] !== \"`\") {\n            return -1;\n        }\n        let pos = value.length - 2;\n        while (pos !== -1) {\n            pos = value.lastIndexOf(\"`\", pos);\n            if (pos !== -1) {\n                let escapes = 0;\n                let pos1 = pos - 1;\n                while (pos1 >= 0) {\n                    if (value[pos1] !== \"\\\\\") {\n                        break;\n                    }\n                    escapes++;\n                    pos1--;\n                }\n                if (escapes % 2 === 0) {\n                    return pos;\n                }\n                pos--;\n            }\n        }\n        return -1;\n    }\n\n    private isValidFieldName(name: string): boolean {\n        return this.options.allowScopedFields ? Utils.isValidScopedSimpleName(name) : Utils.isValidSimpleName(name);\n    }\n\n    private isAllowedField(field: string, forcePartname: boolean, isPartname: IRef<boolean>): boolean {\n        isPartname.value = false;\n        if (Utils.eqNCN(field, \"exists\", \"missing\")) {\n            return true;\n        }\n        if (Utils.eqNCN(field, \"text\", \"concepts\", \"refine\", \"matchingpartnames\")) {\n            // NB @concepts, @refine and @matchingpartnames must be handled specially by the caller\n            isPartname.value = true;\n            return true;\n        }\n        const ccquery = this.exprContext.appService.ccquery;\n        if (ccquery) {\n            forcePartname = forcePartname && !this.exprContext.disallowFulltext;\n            let column = forcePartname ? undefined : this.exprContext.appService.getColumn(field);\n            if (!!column) {\n                if (column.eType === EngineType.varchar) { // only type not indexed\n                    column = undefined;\n                }\n                else if ((ccquery.$columnFieldsPattern && ccquery.$columnFieldsPattern.hasPatterns()) &&\n                    !ccquery.$columnFieldsPattern.isIncluded(field) &&\n                    !ccquery.$columnFieldsPattern.isIncluded(column.name)) {\n                    column = undefined;\n                }\n            }\n            if (!this.exprContext.disallowFulltext && !column) {\n                isPartname.value = true;\n                if ((ccquery.$partnameFieldsPattern && ccquery.$partnameFieldsPattern.hasPatterns()) &&\n                    !ccquery.$partnameFieldsPattern.isIncluded(field)) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    private readToken(): string | undefined {\n        if (this.saveOp !== ExprParserOperator.invalid) {\n            this.prevOp = this.op;\n            this.op = this.saveOp;\n            this.saveOp = ExprParserOperator.invalid;\n            return undefined;\n        }\n        let ch;\n        this.prevOp = this.op;\n        let nextValue: string | undefined;\n        const sbCurrentValue: string[] = [];\n        let candidateFieldPos = -1;\n        let fieldSpecified = false;\n        while (true) {\n            if (this.current >= this.length) {\n                if (this.getTokValue(sbCurrentValue)) {\n                    return undefined;\n                }\n                this.op = ExprParserOperator.eof;\n                return undefined;\n            }\n            ch = this.text[this.current];\n            if (ch === \"\\\\\") { // \\ escapes \\ and `\n                sbCurrentValue.push(ch);\n                this.current++;\n                if (this.current < this.length) {\n                    const ch1 = this.text[this.current];\n                    if (ch1 === \"\\\\\" || ch1 === \"`\") {\n                        sbCurrentValue.push(ch1);\n                        this.current++;\n                    }\n                }\n            }\n            else if (ch === \"(\") {\n                if (this.getTokValue(sbCurrentValue, false)) {\n                    return undefined;\n                }\n                this.op = ExprParserOperator.lPar;\n                this.current++;\n                return undefined;\n            }\n            else if (ch === \")\") {\n                if (this.getTokValue(sbCurrentValue)) {\n                    return undefined;\n                }\n                this.op = ExprParserOperator.rPar;\n                this.current++;\n                return undefined;\n            }\n            else if (this.matchKeyword(\"AND\", sbCurrentValue)) {\n                if (this.getTokValue(sbCurrentValue)) {\n                    return undefined;\n                }\n                this.op = ExprParserOperator.and;\n                this.current += 3;\n                return undefined;\n            }\n            else if (this.matchKeyword(\"OR\", sbCurrentValue)) {\n                if (this.getTokValue(sbCurrentValue)) {\n                    return undefined;\n                }\n                this.op = ExprParserOperator.or;\n                this.current += 2;\n                return undefined;\n            }\n            else if (this.matchKeyword(\"NOT\", sbCurrentValue)) {\n                if (this.getTokValue(sbCurrentValue)) {\n                    return undefined;\n                }\n                this.op = ExprParserOperator.not;\n                this.current += 3;\n                return undefined;\n            }\n            else if (this.matchKeyword(\"NEAR\", sbCurrentValue, \"/\")) {\n                if (this.getTokValue(sbCurrentValue)) {\n                    return undefined;\n                }\n                this.current += 4;\n                nextValue = undefined;\n                if (this.current < this.length && this.text[this.current] === \"/\") {\n                    const last: IRef<number> = {value: 0};\n                    nextValue = this.matchUntil(this.current + 1, this.current + 1, \" \\r\\n\\t`\\\"([/\", last);\n                    let near = -1;\n                    if (nextValue !== undefined) {\n                        nextValue = nextValue.substr(0, nextValue.length - 1);\n                        near = Utils.toInt(nextValue, -1);\n                    }\n                    if (near < 0) {\n                        return \"bad operator\";\n                    }\n                    this.current = last.value - 1;\n                }\n                nextValue = this.ensureNearValue(nextValue || \"\");\n                const infix = this.current >= this.length || this.text[this.current] !== \"(\";\n                // For infix, near value is the number of words between the two terms so add the 2 terms to\n                // the window (near/0 = adjacent terms)\n                this.op = infix ?\n                    new ExprParserOperator(Token.infixNear, (Utils.toInt(nextValue) + 2).toString()) :\n                    new ExprParserOperator(Token.near, nextValue);\n                return undefined;\n            }\n            else if (ch === \"+\" || ch === \"-\") {\n                if (this.current + 1 < this.length) {\n                    const ch1 = this.text[this.current + 1];\n                    const last: IRef<number> = {value: 0};\n                    let length: number;\n                    if (\"(\\\"[/`\".includes(ch1)) { // ( \" [ / `\n                        nextValue = this.matchUntil(this.current, this.current + 2, this.getTerminators(ch1, false), last);\n                        length = last.value - this.current;\n                    }\n                    else {\n                        nextValue = this.matchSimpleValue(this.current + 1);\n                        length = !!nextValue ? nextValue.length : 0;\n                    }\n                    if (!!nextValue) {\n                        sbCurrentValue.push(nextValue);\n                        this.current += length;\n                        continue;\n                    }\n                }\n                sbCurrentValue.push(ch);\n                this.current++;\n                continue;\n            }\n            else if (\"\\\"[{/`\".includes(ch)) { // \" [ { / `\n                const last: IRef<number> = {value: 0};\n                nextValue = this.matchUntil(this.current, this.current + 1, this.getTerminators(ch, true), last);\n                if (!!nextValue) {\n                    const forceRange = (fieldSpecified && \"[{\".includes(ch) && sbCurrentValue.length === 0);\n                    sbCurrentValue.push(nextValue);\n                    this.current = last.value;\n                    if (forceRange && this.getTokValue(sbCurrentValue)) {\n                        return undefined;\n                    }\n                    continue;\n                }\n                return \"bad operator: \" + ch;\n            }\n            else {\n                if (ch === \":\" && this.options.enabledFieldedSearch) { // Field\n                    // Pick out previous value and/or field name\n                    // Field specifier can be:\n                    // field:value\n                    // field`display`:value\n                    // `display`:value\n                    const currentValue = sbCurrentValue.join(\"\");\n                    if (candidateFieldPos === -1) {\n                        // Check for display\n                        candidateFieldPos = this.findDisplay(currentValue);\n                        if (candidateFieldPos === -1) {\n                            this.op = ExprParserOperator.invalid;\n                            return \"invalid token\";\n                        }\n                    }\n                    let field = currentValue.substr(candidateFieldPos).trim();\n                    let display = \"\";\n                    // Extract display\n                    const displayStart = this.findDisplay(field);\n                    if (displayStart !== -1) {\n                        display = ExprParser.unescape(field.substr(displayStart, field.length - displayStart));\n                        field = field.substr(0, displayStart);\n                    }\n                    if (this.isValidFieldName(field) || (Utils.isEmpty(field) && !Utils.isEmpty(display))) {\n                        const value = currentValue.substr(0, candidateFieldPos);\n                        if (this.canBeTokValue(value.trim())) {\n                            this.current -= (sbCurrentValue.join(\"\").length - candidateFieldPos); // back up to field\n                            this._getTokValue(value);\n                            return undefined;\n                        }\n                        if (!Utils.isEmpty(field)) {\n                            let forcePartname = false;\n                            if (this.current + 1 < this.length && this.text[this.current + 1] === \":\") {\n                                // :: => force partname over column\n                                forcePartname = true;\n                                this.current++;\n                            }\n                            const isPartname: IRef<boolean> = { value: false };\n                            if (!this.isAllowedField(field, forcePartname, isPartname)) {\n                                candidateFieldPos = -1;\n                                sbCurrentValue.push(\":\");\n                                if (forcePartname) {\n                                    sbCurrentValue.push(\":\");\n                                }\n                                this.current++;\n                                continue;\n                            }\n                            if (isPartname.value) {\n                                field = ExprParser.fieldPartnamePrefix + field;\n                            }\n                        }\n                        if (!Utils.isEmpty(field)) {\n                            this.field = field;\n                            fieldSpecified = true;\n                        }\n                        if (!Utils.isEmpty(display)) {\n                            this.display = display;\n                        }\n                        sbCurrentValue.length = 0;\n                        this.current++;\n                        continue;\n                    }\n                }\n                if (\" \\r\\n\\t)\".includes(ch)) {\n                    candidateFieldPos = -1;\n                }\n                else if (candidateFieldPos === -1) {\n                    candidateFieldPos = sbCurrentValue.join(\"\").length;\n                }\n                sbCurrentValue.push(ch);\n                this.current++;\n            }\n        }\n    }\n\n    private clear() {\n        this.text = \"\";\n        this.current = 0;\n        this.length = 0;\n        this.operators.length = 0;\n        this.expressions.length = 0;\n        this.fields.length = 0;\n        this.displays.length = 0;\n    }\n\n    /**\n     * Parse some text using the Sinequa fielded search syntax\n     *\n     * @return The parsed `Expr` or an error string\n     */\n    public static parse(text: string, context: ExprContext, options?: ExprParserOptions): Expr | string {\n        const parser = new ExprParser(context, options);\n        const error = parser.parse(text);\n        if (error) {\n            return error;\n        }\n        return parser.parseResult();\n    }\n\n    private parseResult(): Expr | string {\n        if (this.expressions.length !== 1) {\n            return \"no expression found\";\n        }\n        return this.expressions[0];\n    }\n\n    private get contextField(): string {\n        let field = this.field;\n        if (Utils.isEmpty(field)) {\n            field = this.peekField();\n        }\n        return field;\n    }\n\n    private get contextDisplay(): string {\n        let display = this.display;\n        if (Utils.isEmpty(display)) {\n            display = this.peekDisplay();\n        }\n        return display;\n    }\n\n    private parse(text: string): string {\n        this.clear();\n        if (this.options.allowEmptyValues && !Utils.len(text.trim())) {\n            const expr = Expr.makeExpr(this.exprContext, \"\", this.contextField, this.contextDisplay, this.options.allowEmptyValues);\n            if (expr) {\n                expr.start = 0;\n                expr.length = 0;\n                this.expressions.push(expr);\n            }\n            return \"\";\n        }\n        this.text = text || \"\";\n        this.length = this.text.length;\n        this.operators.push(ExprParserOperator.eof);\n        let err = this.readToken();\n        if (err) {\n            return err;\n        }\n        while (true) {\n            if ((this.op.tok === Token.value || this.op.tok === Token.lPar || this.op.tok === Token.not || this.op.tok === Token.near) &&\n                (this.prevOp.tok === Token.value || this.prevOp.tok === Token.rPar)) {\n                // Default to AND for space separated terms\n                // NOT xxx => AND NOT xxx\n                this.saveOp = this.op;\n                this.op = ExprParserOperator.and;\n            }\n\n            let a: Act;\n            if (this.op.tok === Token.value) {\n                a = Act.s;\n            }\n            else {\n                a = ExprParser.parsetbl[this.operators[this.operators.length - 1].tok][this.op.tok];\n            }\n            switch (a) {\n                case Act.r:\n                    err = this.reduce();\n                    if (err) {\n                        return err;\n                    }\n                    break;\n                case Act.s:\n                    err = this.shift();\n                    if (err) {\n                        return err;\n                    }\n                    break;\n                case Act.a:\n                    if (this.expressions.length !== 1) {\n                        return \"syntax error\";\n                    }\n                    return \"\";\n                case Act.e1:\n                    return \"missing ')'\";\n                case Act.e2:\n                    return \"missing operator (AND,OR,NOT)\";\n                case Act.e3:\n                    return \"missing '('\";\n                case Act.e4:\n                    return \"invalid argument\";\n            }\n        }\n    }\n\n    private shift(): string | undefined {\n        if (this.op.tok === Token.value) {\n            const value = this.op.tokValue.trim();\n            if (Utils.isEmpty(value) && !this.options.allowEmptyValues) {\n                return \"empty token\";\n            }\n            const expr = Expr.makeExpr(this.exprContext, value, this.contextField, this.contextDisplay, !!this.options.allowEmptyValues);\n            if (!expr) {\n                return \"invalid expression\";\n            }\n            expr.start = this.op.tokValuePos;\n            expr.length = this.op.tokValueLen;\n            if (!!expr.operands) {\n                expr.operands.forEach(operand => {\n                    operand.start = this.op.tokValuePos;\n                    operand.length = this.op.tokValueLen;\n                });\n            }\n            this.expressions.push(expr);\n            this.field = \"\";\n            this.display = \"\";\n        }\n        else {\n            this.operators.push(this.op);\n            if (this.op.tok === Token.lPar) {\n                if (Utils.isEmpty(this.field)) {\n                    this.fields.push(this.peekField());\n                }\n                else {\n                    this.fields.push(this.field);\n                }\n                this.field = \"\";\n                if (Utils.isEmpty(this.display)) {\n                    this.displays.push(this.peekDisplay());\n                }\n                else {\n                    this.displays.push(this.display);\n                }\n                this.display = \"\";\n            }\n        }\n        return this.readToken();\n    }\n\n    private peekField(): string {\n        if (this.fields.length === 0) {\n            return \"\";\n        }\n        return this.fields[this.fields.length - 1];\n    }\n\n    private peekDisplay(): string {\n        if (this.displays.length === 0) {\n            return \"\";\n        }\n        return this.displays[this.displays.length - 1];\n    }\n\n    private canBeMergeTarget(e: Expr, and: boolean): boolean {\n        if (e.isLeaf) {\n            return false;\n        }\n        if (e.near >= 0) {\n            return false;\n        }\n        if (e.and !== and) {\n            return false;\n        }\n        if (e.not) {\n            return false;\n        }\n        return true;\n    }\n\n    private mergeExpr(e1: Expr, e2: Expr, and: boolean): Expr {\n        let source: Expr, target: Expr;\n        let prepend = false;\n        if (this.canBeMergeTarget(e1, and)) {\n            target = e1;\n            source = e2;\n        }\n        else if (this.canBeMergeTarget(e2, and)) {\n            target = e2;\n            source = e1;\n            prepend = true; // to keep the same order as in the input text\n        }\n        else {\n            return new Expr({\n                exprContext: e1.exprContext,\n                op1: e1,\n                and,\n                op2: e2,\n                field: this.peekField(),\n                display: this.peekDisplay()\n            });\n        }\n        if (source.isLeaf || source.and !== and || source.not || !Utils.eq(source.display || \"\", target.display || \"\")) {\n            target.addOperand(source, this.peekField(), prepend);\n        }\n        else {\n            if (source.operands) {\n                for (const operand of source.operands) {\n                    target.addOperand(operand, this.peekField(), prepend);\n                }\n            }\n        }\n        return target;\n    }\n\n    private reduce(): string | undefined {\n        let e: Expr | undefined;\n        let e1: Expr | undefined;\n        let e2: Expr | undefined;\n        const op: ExprParserOperator = this.operators[this.operators.length - 1];\n        switch (op.tok) {\n            case Token.not:\n                // Apply E := NOT E\n                e = this.expressions.pop();\n                const length = this.expressions.length;\n                if (!e) return \"syntax error\";\n                // e is not a field expression and no precedent expression exists (length === 0)\n                if (!e.field && length === 0) return \"should be an field expression\";\n                // when !e.field , works only if a precedent expression exists before \"e\" (length > 0)\n                e.not = !e.not;\n                this.expressions.push(e);\n                break;\n            case Token.and:\n                e2 = this.expressions.pop();\n                e1 = this.expressions.pop();\n                if (!e1 || !e2) {\n                    return \"syntax error\";\n                }\n                this.expressions.push(this.mergeExpr(e1, e2, true));\n                break;\n            case Token.or:\n                e2 = this.expressions.pop();\n                e1 = this.expressions.pop();\n                if (!e1 || !e2) {\n                    return \"syntax error\";\n                }\n                this.expressions.push(this.mergeExpr(e1, e2, false));\n                break;\n            case Token.near:\n                e = this.expressions.pop();\n                if (!e) {\n                    return \"syntax error\";\n                }\n                e.near = Utils.toInt(this.ensureNearValue(op.tokValue));\n                this.expressions.push(e);\n                break;\n            case Token.infixNear:\n                e2 = this.expressions.pop();\n                e1 = this.expressions.pop();\n                if (!e1 || !e2) {\n                    return \"syntax error\";\n                }\n                if (!e2.isLeaf || e2.isStructured || !e1.isLeaf || e1.isStructured || e2.not || e1.not || !Utils.eqNC(e2.field || \"\", e1.field || \"\")) {\n                    return \"syntax error\";\n                }\n                e = new Expr({\n                    exprContext: e1.exprContext,\n                    op1: e1,\n                    and: false,\n                    op2: e2,\n                    field: this.peekField(),\n                    display: this.peekDisplay()\n                });\n                e.near = Utils.toInt(this.ensureNearValue(op.tokValue));\n                this.expressions.push(e);\n                break;\n            case Token.rPar:\n                this.operators.pop();\n                if (this.fields.length === 0) {\n                    return \"missing field\";\n                }\n                if (this.expressions.length === 0) {\n                    return \"syntax error\";\n                }\n                const field = this.fields.pop();\n                const display = this.displays.pop();\n                // Set Field for single term bracketed expressions\n                e = this.expressions[this.expressions.length - 1];\n                if (e.isLeaf) {\n                    if (Utils.isEmpty(e.field)) {\n                        e.field = field;\n                    }\n                    if (Utils.isEmpty(e.display)) {\n                        e.display = display;\n                    }\n                }\n                break;\n        }\n        this.operators.pop();\n        return undefined;\n    }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { ValueItem } from \"@sinequa/core/app-utils\";\nimport { Utils } from \"@sinequa/core/base\";\nimport {\n  Aggregation,\n  AggregationItem,\n  TreeAggregationNode,\n} from \"@sinequa/core/web-services\";\n\nimport { ExprParser } from \"./expr-parser\";\n\n/**\n * Helper class to build selection expressions\n * @deprecated\n */\n@Injectable({\n  providedIn: \"root\",\n})\nexport class ExprBuilder {\n  /**\n   * Make a standard selection expression\n   * (resulting in a SQL clause like \"company contains 'BOEING'\")\n   * @param field Name of the field to select (eg. \"company\")\n   * @param value Value of the field to select (eg. \"BOEING\")\n   * @param display Optional string to display that value (eg. \"Boeing\")\n   */\n  makeExpr(field: string, value: string, display?: string): string {\n    field = this.formatField(field, display);\n    return `${field}:${ExprParser.escape(value)}`; // company`Boeing`: BOEING\n  }\n\n  /**\n   * Make a boolean expression\n   * @param field Name of the field to select (eg. \"toto\")\n   * @param value Value of the field to select (eg. \"true\")\n   * @param display Optional string to display that value (eg. \"True\")\n   */\n  makeBooleanExpr(field: string, value: boolean, display?: string): string {\n    field = this.formatField(field, display);\n    return `${field}:${ExprParser.escape(Utils.toSqlValue(value))}`; // toto`True`: true\n  }\n\n  /**\n   * Make a numerical expression using a comparison operator (>, <, <=, >=, etc.)\n   * @param field Name of the field to select (eg. \"modified\")\n   * @param operator Comparison operator used for that selection (eg. \">\")\n   * @param value Value of the field to select (eg. \"2020-12-15\")\n   * @param display Optional string to display that value (eg. \"After Dec 15 2020\")\n   */\n  makeNumericalExpr(\n    field: string,\n    operator: \">\" | \">=\" | \"<\" | \"<=\" | \"=\" | \"<>\",\n    value: number | Date | string,\n    display?: string\n  ): string {\n    field = this.formatField(field, display);\n\n    if (Utils.isString(value)) {\n      value = ExprParser.escape(value);\n    }\n    if (Utils.isDate(value) || Utils.isNumber(value)) {\n      value = Utils.toSqlValue(value);\n    }\n\n    return `${field}:${operator} ${value}`; // modified`After Dec 15 2020`:> 2020-12-15\n  }\n\n  /**\n   * Make a list expression\n   * @param field Name of the field to select (eg. \"docformat\")\n   * @param values Values of the field to select (eg. ['htm','pdf'])\n   * @param display Optional string to display that value (eg. \"htm, pdf\")\n   */\n  makeListExpr(field: string, values: string[], display?: string): string {\n    field = this.formatField(field, display);\n    return `${field}:[${values.map((v) => ExprParser.escape(v)).join(\",\")}]`; // docformat`htm, pdf`:[`htm`,`pdf`]\n  }\n\n  /**\n   * Make a range expression\n   * @param field Name of the field to select (eg. \"modified\")\n   * @param from Begining of the range (eg. 2020-12-15)\n   * @param to End of the range (eg. 2020-12-20)\n   * @param display Optional string to display that value (eg. \"[Dec 15 2020, Dec 20 2020]\")\n   */\n  makeRangeExpr(\n    field: string,\n    from: number | Date | string,\n    to: number | Date | string,\n    display?: string\n  ): string {\n    field = this.formatField(field, display);\n    return `${field}:[${Utils.toSqlValue(from)}..${Utils.toSqlValue(to)}]`; // modified`[Dec 15 2020, Dec 20 2020]`: [2020-12-15..2020-12-20]\n  }\n\n  /**\n   * Make a RegExp expression\n   * @param field Name of the field to select (eg. \"company\")\n   * @param value Value of the regular expression to match (eg. \"BOE.*\")\n   * @param display Optional string to display that value (eg. \"Boe...\")\n   */\n  makeRegexpExpr(field: string, value: string, display?: string): string {\n    field = this.formatField(field, display);\n    return `${field}:~ ${ExprParser.escape(value)}`; // company`Boe...`:~ BOE.*\n  }\n\n  /**\n   * Make a refine expression\n   * @param text The text to add to the query\n   */\n  makeRefineExpr(text: string): string {\n    return `refine: ${ExprParser.escape(text)}`;\n  }\n\n  /**\n   * Return an expression that selects multiple values for a field\n   * (All values are ANDed)\n   * @param field Name of the field to select (eg. \"company\")\n   * @param values Values of the field to select (eg. ['IBM','APPLE'])\n   * @param display Optional string to display that value (eg. \"IBM and Apple\")\n   */\n  makeAndExpr(\n    field: string,\n    values: (string | ValueItem)[],\n    display?: string\n  ): string {\n    field = this.formatField(field, display);\n    return `${field}:(${this.concatWithOperator(values, \"AND\")})`; // company: (IBM AND APPLE AND GOOGLE)\n  }\n\n  /**\n   * Return an expression that selects multiple values for a field\n   * (All values are ORed)\n   * This function should be equivalent to using makeListExpr\n   * @param field Name of the field to select (eg. \"company\")\n   * @param values Values of the field to select (eg. ['IBM','APPLE'])\n   * @param display Optional string to display that value (eg. \"IBM and Apple\")\n   */\n  makeOrExpr(\n    field: string,\n    values: (string | ValueItem)[],\n    display?: string\n  ): string {\n    field = this.formatField(field, display);\n    return `${field}:(${this.concatWithOperator(values, \"OR\")})`; // company: (IBM OR APPLE OR GOOGLE)\n  }\n\n  /**\n   * Combine a list of values with AND or OR operators\n   * @param values the list of values\n   * @param operator the operator\n   */\n  private concatWithOperator(\n    values: (string | ValueItem)[],\n    operator: \"AND\" | \"OR\"\n  ) {\n    return values\n      .map((v) => {\n        if (Utils.isString(v)) {\n          return ExprParser.escape(v);\n        }\n        if (v.display) {\n          return `${ExprParser.escape(v.display)}:${ExprParser.escape(\n            Utils.toSqlValue(v.value)\n          )}`;\n        }\n        return ExprParser.escape(Utils.toSqlValue(v.value));\n      })\n      .join(\" \" + operator + \" \");\n  }\n\n  /**\n   * Returns the negative expression of the given expression\n   * eg. NOT(person:Bill GATES)\n   * @param expr\n   */\n  makeNotExpr(expr: string): string {\n    return `NOT (${expr})`;\n  }\n\n  /**\n   * Returns an expression that is the union of given expressions\n   * eg. person:Bill GATES OR company:MICROSOFT\n   * @param exprs\n   */\n  concatOrExpr(exprs: string[]): string {\n    if (exprs.length <= 1) {\n      return exprs[0] || \"\";\n    }\n    return `(${exprs.join(\") OR (\")})`;\n  }\n\n  /**\n   * Returns an expression that is the intersection of given expressions\n   * eg. person:Bill GATES AND company:MICROSOFT\n   * @param exprs\n   */\n  concatAndExpr(exprs: string[]): string {\n    if (exprs.length <= 1) {\n      return exprs[0] || \"\";\n    }\n    return `(${exprs.join(\") AND (\")})`;\n  }\n\n  /**\n   * Returns an expression to select the given item\n   * @param field Name of the field to select (eg. \"company\")\n   * @param items A single or list of ValueItem object(s) (eg. content of a record)\n   */\n  makeFieldExpr(\n    field: string,\n    items: ValueItem | ValueItem[],\n    combineWithAnd?: boolean\n  ): string {\n    if (!Array.isArray(items)) {\n      items = [items];\n    }\n    if (items.length === 0) {\n      return \"\"; // Return a falsy string instead of \"()\" or \"``\" which would be truthy\n    }\n    return combineWithAnd\n      ? this.makeAndExpr(field, items)\n      : this.makeOrExpr(field, items);\n  }\n\n  /**\n   * Create an expression for the given aggregation item\n   * @param aggregation The aggregation containing this object\n   * @param items The AggregationItem(s) to select\n   * @param combineWithAnd If there are multiple values, combine them with AND (instead of OR)\n   */\n  makeAggregationExpr(\n    aggregation: Aggregation,\n    items: AggregationItem | AggregationItem[],\n    combineWithAnd?: boolean\n  ): string {\n    if (!Array.isArray(items)) {\n      items = [items];\n    }\n    if (aggregation.valuesAreExpressions) {\n      const exprs = items.map((i) => {\n        // null value must be converted into field expression\n        if (i.value === null)\n          return this.makeFieldExpr(\n            aggregation.column,\n            i as ValueItem,\n            combineWithAnd\n          );\n        // .toString() is to avoid typing issues. With valuesAreExpressions = true, item.value is expected to be a string\n        return i.value.toString();\n      });\n      return combineWithAnd\n        ? this.concatAndExpr(exprs)\n        : this.concatOrExpr(exprs);\n    } else {\n      const _items = this.asValueItems(items, aggregation.isTree);\n      return this.makeFieldExpr(aggregation.column, _items, combineWithAnd);\n    }\n  }\n\n  /**\n   * Combines the field with the optional display value(s)\n   * @param field\n   * @param display\n   */\n  private formatField(field: string, display?: string): string {\n    if (display) {\n      field = `${field}${ExprParser.escape(display)}`;\n    }\n    return field;\n  }\n\n  /**\n   * Return the AggregationItem list as a ValueItem list\n   * @param items\n   * @param isTree\n   */\n  private asValueItems(\n    items: AggregationItem[],\n    isTree?: boolean\n  ): ValueItem[] {\n    if (isTree) {\n      return items.map((i) => ({\n        value: (i as TreeAggregationNode).$path + \"*\",\n        display: i.display || (i.value as string),\n      }));\n    }\n    return items as ValueItem[]; // This works because ValueItem and AggregationItem share the value and display properties\n  }\n}\n","import {Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\nimport {Utils} from \"@sinequa/core/base\";\nimport { Expr, ExprMessageOptions } from \"./expr-parser\";\n/**\n * @deprecated 11.9.0 - Kept only for backward compatibility\n */\n@Pipe({\n    name: \"sqExpr\",\n    standalone: true,\n    pure: false\n})\nexport class ExprPipe extends AbstractIntlPipe<(Expr | string), ExprMessageOptions> {\n\n    override updateValue(key: Expr | string, params: ExprMessageOptions): void {\n        super.updateValue(key, params);\n        if (key instanceof Expr) {\n            const message = key.toMessage(params);\n            this.value = this.intlService.formatMessage(message.message, message.values);\n            this.value = this.value\n                .replace('lte ', '&le; ')\n                .replace('gte ', '&ge; ')\n                .replace('lt ', '&lt; ')\n                .replace('gt ', '&gt; ');\n        }\n        else {\n            this.value = this.intlService.formatMessage(key);\n            if (params && params.asHTML) {\n                this.value = Utils.encodeHTML(this.value);\n            }\n        }\n    }\n}","import { Utils } from \"@sinequa/core/base\";\r\nimport { IQuery, Select } from \"@sinequa/core/web-services\";\r\n\r\n// deprecated functions\r\n\r\n/**\r\n * Add a select filter to the query\r\n *\r\n * @param expr The fielded search expression to filter the results\r\n * @param facet The name of the associated facet\r\n *\r\n * @deprecated\r\n */\r\nexport const addSelect = (query: IQuery, expr: string, facet?: string) => {\r\n  pushSelect( query,\r\n    {\r\n      expression: expr,\r\n      facet: facet || \"\"\r\n    });\r\n}\r\n\r\n/**\r\n * Adds a new `Select` object to the end of the query's `selects`\r\n *\r\n * @deprecated\r\n */\r\nexport const pushSelect = (query: IQuery, select: Select) => {\r\n  if (!query || !query.select) {\r\n    query.select = [];\r\n  }\r\n  query.select.push(select);\r\n}\r\n\r\n/**\r\n * Remove the last `Select` object from the `selects` and return it\r\n *\r\n * @deprecated\r\n */\r\nexport const popSelect = (query: IQuery): Select | undefined => {\r\n  if (!query || !query.select) {\r\n    return undefined;\r\n  }\r\n  return query.select.pop();\r\n}\r\n\r\n/**\r\n * Remove the `Select` object identified by `indexOrFacet`\r\n *\r\n * @param indexOrFacet either an index in the `selects` array or a facet name\r\n * @param all If `true` and `indexOrFacet` is a facet name then all `Select` objects with a matching facet name will be removed\r\n *\r\n * @deprecated\r\n */\r\nexport const removeSelect = (query: IQuery, indexOrFacet: number | string, all = false): void => {\r\n  if (!query || !query.select) {\r\n    return;\r\n  }\r\n  if (Utils.isString(indexOrFacet)) {\r\n    // indexOrFacet is a facet name\r\n    for (let i = query.select.length - 1; i >= 0; i--) {\r\n      const _select = query.select[i];\r\n      if (Utils.eqNC(_select.facet, indexOrFacet)) {\r\n        query.select.splice(i, 1);\r\n        if (query.select.length === 0) {\r\n          delete query.select; // Clean the query if no more select\r\n          return;\r\n        }\r\n        if (!all) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  else {\r\n    if (indexOrFacet < 0 || indexOrFacet >= query.select.length) {\r\n      return;\r\n    }\r\n    query.select.splice(indexOrFacet, 1);\r\n    if (query.select.length === 0) {\r\n      delete query.select;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Replace a `Select` with another\r\n *\r\n * @param index The index in the `selects` array of the `Select to replace\r\n * @param select The `Select` to use as a replacement\r\n *\r\n * @deprecated\r\n */\r\nexport const replaceSelect = (query: IQuery, index: number, select: Select) => {\r\n  if (!query || !query.select) {\r\n    return;\r\n  }\r\n  query.select.splice(index, 1, select);\r\n}\r\n\r\n/**\r\n* Find the index of the nth `Select` object matching the passed facet name\r\n*\r\n* @param facet A facet name\r\n* @param ordinal Specifies which `Select` object to retrieve among selects with the same facet name\r\n*\r\n* @deprecated\r\n*/\r\nexport const findSelectIndex = (query: IQuery, facet: string, ordinal = 0): number => {\r\n  if (!query || !query.select) {\r\n    return -1;\r\n  }\r\n  let index = 0;\r\n  let facetOrdinal = 0;\r\n  let facetIndex = -1;\r\n  for (const select of query.select) {\r\n    if (Utils.eqNC(facet, select.facet)) {\r\n      facetIndex = index;\r\n      if (facetOrdinal === ordinal) {\r\n        break;\r\n      }\r\n      facetOrdinal++;\r\n    }\r\n    index++;\r\n  }\r\n  return facetIndex;\r\n}\r\n\r\n/**\r\n * Find the first `Select` matching the passed facet name\r\n *\r\n * @param facet A facet name\r\n * @param fromEnd If `true` start searching backwards from the last `Select`\r\n *\r\n * @deprecated\r\n */\r\nexport const findSelect = (query: IQuery, facet: string, fromEnd = true): Select | undefined => {\r\n  const facetSelectIndex = findSelectIndex(query, facet, fromEnd ? -1 : 0);\r\n  return facetSelectIndex >= 0 ? query.select && query.select[facetSelectIndex] : undefined;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UIService","i2","i1"],"mappings":"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"}