{"version":3,"file":"static/js/3166.37e73e15.chunk.js","mappings":"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","sources":["../node_modules/@coveo/atomic/dist/esm/src/utils/accessibility-utils.tsx","../node_modules/@coveo/atomic/dist/bueno/dist/browser/bueno.esm.js","../node_modules/@coveo/atomic/dist/esm/src/components/common/button.tsx","../node_modules/@coveo/atomic/dist/esm/src/components/common/button-style.tsx","../node_modules/@coveo/atomic/dist/esm/src/utils/debounce-utils.tsx","../node_modules/@coveo/atomic/dist/esm/src/utils/device-utils.ts","../node_modules/@coveo/atomic/dist/esm/src/utils/event-utils.ts","../node_modules/@coveo/atomic/dist/esm/src/components/common/hidden.tsx","../node_modules/@coveo/atomic/dist/esm/src/utils/initialization-utils.tsx","../node_modules/@coveo/atomic/dist/esm/src/utils/ripple.ts","../node_modules/@coveo/atomic/dist/esm/src/components/common/search-box/search-box-wrapper.tsx","../node_modules/@coveo/atomic/dist/esm/src/components/common/search-box/text-area-clear-button.tsx","../node_modules/@coveo/atomic/dist/esm/src/components/common/search-box/search-text-area.tsx","../node_modules/@coveo/atomic/dist/esm/src/utils/promise-utils.ts","../node_modules/@coveo/atomic/dist/esm/src/components/common/suggestions/suggestion-manager.ts","../node_modules/@coveo/atomic/dist/esm/src/components/search/atomic-search-box/search-suggestion.tsx","../node_modules/@coveo/atomic/dist/esm/src/components/common/suggestions/suggestions-common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {AnyBindings} from '../components/common/interface/bindings';\nimport {buildCustomEvent} from './event-utils';\nimport {InitializableComponent} from './initialization-utils';\nimport {defer} from './utils';\n\nexport const findAriaLiveEventName = 'atomic/accessibility/findAriaLive';\n\nexport interface FindAriaLiveEventArgs {\n element?: HTMLAtomicAriaLiveElement;\n}\n\nexport function AriaLiveRegion(regionName: string, assertive = false) {\n function getAriaLiveElement() {\n const event = buildCustomEvent(\n findAriaLiveEventName,\n {}\n );\n document.dispatchEvent(event);\n const {element} = event.detail;\n return element;\n }\n\n function dispatchMessage(message: string) {\n getAriaLiveElement()?.updateMessage(regionName, message, assertive);\n }\n\n function registerRegion() {\n getAriaLiveElement()?.registerRegion(regionName, assertive);\n }\n\n return (\n component: InitializableComponent,\n setterName: string\n ) => {\n const {componentWillRender} = component;\n Object.defineProperty(component, setterName, {\n set: (message: string) => dispatchMessage(message),\n });\n\n component.componentWillRender = function () {\n componentWillRender && componentWillRender.call(this);\n registerRegion();\n };\n };\n}\n\nexport class FocusTargetController {\n private bindings: AnyBindings;\n private lastSearchId?: string;\n private element?: HTMLElement;\n private onFocusCallback?: Function;\n private doFocusAfterSearch = false;\n private doFocusOnNextTarget = false;\n\n constructor(private component: InitializableComponent) {\n this.bindings = component.bindings;\n this.handleComponentRenderLoop();\n }\n\n public setTarget(el: HTMLElement | undefined) {\n if (!el) {\n return;\n }\n this.element = el;\n if (this.doFocusOnNextTarget) {\n this.doFocusOnNextTarget = false;\n this.focus();\n }\n }\n\n public async focus() {\n await defer();\n this.element?.focus();\n this.onFocusCallback?.();\n }\n\n public focusAfterSearch() {\n this.lastSearchId = this.bindings.store.getUniqueIDFromEngine(\n this.bindings.engine\n );\n this.doFocusAfterSearch = true;\n return new Promise((resolve) => (this.onFocusCallback = resolve));\n }\n\n public focusOnNextTarget() {\n this.doFocusOnNextTarget = true;\n return new Promise((resolve) => (this.onFocusCallback = resolve));\n }\n\n public disableForCurrentSearch() {\n if (\n this.bindings.store.getUniqueIDFromEngine(this.bindings.engine) !==\n this.lastSearchId\n ) {\n this.doFocusAfterSearch = false;\n }\n }\n\n private handleComponentRenderLoop() {\n const originalComponentDidRender = this.component.componentDidRender;\n\n this.component.componentDidRender = () => {\n originalComponentDidRender &&\n originalComponentDidRender.call(this.component);\n if (!this.bindings) {\n return;\n }\n if (\n this.doFocusAfterSearch &&\n this.bindings.store.getUniqueIDFromEngine(this.bindings.engine) !==\n this.lastSearchId\n ) {\n this.doFocusAfterSearch = false;\n if (this.element) {\n const el = this.element;\n // The focus seems to be flaky without deferring, especially on iOS.\n defer().then(() => {\n el.focus();\n this.onFocusCallback?.();\n });\n }\n }\n };\n }\n}\n\nfunction isFocusable(element: Element) {\n // Source: https://stackoverflow.com/a/30753870\n if (element.getAttribute('tabindex') === '-1') {\n return false;\n }\n if (element.hasAttribute('tabindex')) {\n return true;\n }\n if (element.getAttribute('contentEditable') === 'true') {\n return true;\n }\n switch (element.tagName) {\n case 'A':\n case 'AREA':\n return element.hasAttribute('href');\n case 'INPUT':\n case 'SELECT':\n case 'TEXTAREA':\n case 'BUTTON':\n return !element.hasAttribute('disabled');\n case 'IFRAME':\n return true;\n default:\n return false;\n }\n}\n\nexport function* getFocusableDescendants(\n element: Element\n): Generator {\n if (isFocusable(element)) {\n yield element as HTMLElement;\n }\n let children = Array.from(element.children);\n if (element instanceof HTMLSlotElement) {\n children = element.assignedElements();\n } else if (element.shadowRoot) {\n children.push(...Array.from(element.shadowRoot.children));\n }\n for (const child of children) {\n yield* getFocusableDescendants(child);\n }\n}\n\nexport function getFirstFocusableDescendant(\n element: Element\n): HTMLElement | null {\n return getFocusableDescendants(element).next().value ?? null;\n}\n","/**\n * @license\n *\n * Copyright 2024 Coveo Solutions Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// src/schema.ts\nfunction buildSchemaValidationError(errors, context) {\n const message = `\n The following properties are invalid:\n\n ${errors.join(\"\\n\t\")}\n \n ${context}\n `;\n return new SchemaValidationError(message);\n}\nvar SchemaValidationError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"SchemaValidationError\";\n }\n};\nvar Schema = class {\n constructor(definition) {\n this.definition = definition;\n }\n validate(values = {}, message = \"\") {\n const mergedValues = {\n ...this.default,\n ...values\n };\n const errors = [];\n for (const property in this.definition) {\n const error = this.definition[property].validate(mergedValues[property]);\n error && errors.push(`${property}: ${error}`);\n }\n if (errors.length) {\n throw buildSchemaValidationError(errors, message);\n }\n return mergedValues;\n }\n get default() {\n const defaultValues = {};\n for (const property in this.definition) {\n const defaultValue = this.definition[property].default;\n if (defaultValue !== void 0) {\n defaultValues[property] = defaultValue;\n }\n }\n return defaultValues;\n }\n};\n\n// src/values/value.ts\nvar Value = class {\n constructor(baseConfig = {}) {\n this.baseConfig = baseConfig;\n }\n validate(value) {\n if (this.baseConfig.required && isNullOrUndefined(value)) {\n return \"value is required.\";\n }\n return null;\n }\n get default() {\n return this.baseConfig.default instanceof Function ? this.baseConfig.default() : this.baseConfig.default;\n }\n get required() {\n return this.baseConfig.required === true;\n }\n};\nfunction isUndefined(value) {\n return value === void 0;\n}\nfunction isNull(value) {\n return value === null;\n}\nfunction isNullOrUndefined(value) {\n return isUndefined(value) || isNull(value);\n}\n\n// src/values/number-value.ts\nvar NumberValue = class {\n constructor(config = {}) {\n this.config = config;\n this.value = new Value(config);\n }\n validate(value) {\n const valueValidation = this.value.validate(value);\n if (valueValidation) {\n return valueValidation;\n }\n if (!isNumberOrUndefined(value)) {\n return \"value is not a number.\";\n }\n if (value < this.config.min) {\n return `minimum value of ${this.config.min} not respected.`;\n }\n if (value > this.config.max) {\n return `maximum value of ${this.config.max} not respected.`;\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isNumberOrUndefined(value) {\n return isUndefined(value) || isNumber(value);\n}\nfunction isNumber(value) {\n return typeof value === \"number\" && !isNaN(value);\n}\n\n// src/values/boolean-value.ts\nvar BooleanValue = class {\n constructor(config = {}) {\n this.value = new Value(config);\n }\n validate(value) {\n const valueValidation = this.value.validate(value);\n if (valueValidation) {\n return valueValidation;\n }\n if (!isBooleanOrUndefined(value)) {\n return \"value is not a boolean.\";\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isBooleanOrUndefined(value) {\n return isUndefined(value) || isBoolean(value);\n}\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\n\n// src/values/string-value.ts\nvar urlRegex = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\nvar StringValue = class {\n constructor(config = {}) {\n this.config = {\n emptyAllowed: true,\n url: false,\n ...config\n };\n this.value = new Value(this.config);\n }\n validate(value) {\n const { emptyAllowed, url, regex, constrainTo } = this.config;\n const valueValidation = this.value.validate(value);\n if (valueValidation) {\n return valueValidation;\n }\n if (isUndefined(value)) {\n return null;\n }\n if (!isString(value)) {\n return \"value is not a string.\";\n }\n if (!emptyAllowed && !value.length) {\n return \"value is an empty string.\";\n }\n if (url && !urlRegex.test(value)) {\n return \"value is not a valid URL.\";\n }\n if (regex && !regex.test(value)) {\n return `value did not match provided regex ${regex}`;\n }\n if (constrainTo && !constrainTo.includes(value)) {\n const values = constrainTo.join(\", \");\n return `value should be one of: ${values}.`;\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isString(value) {\n return Object.prototype.toString.call(value) === \"[object String]\";\n}\n\n// src/values/complex-value.ts\nvar RecordValue = class {\n constructor(config = {}) {\n this.config = {\n options: { required: false },\n values: {},\n ...config\n };\n }\n validate(input) {\n if (isUndefined(input)) {\n return this.config.options.required ? \"value is required and is currently undefined\" : null;\n }\n if (!isRecord(input)) {\n return \"value is not an object\";\n }\n for (const [k, v] of Object.entries(this.config.values)) {\n if (v.required && isNullOrUndefined(input[k])) {\n return `value does not contain ${k}`;\n }\n }\n let out = \"\";\n for (const [key, validator] of Object.entries(this.config.values)) {\n const value = input[key];\n const invalidValue = validator.validate(value);\n if (invalidValue !== null) {\n out += \" \" + invalidValue;\n }\n }\n return out === \"\" ? null : out;\n }\n get default() {\n return void 0;\n }\n get required() {\n return !!this.config.options.required;\n }\n};\nfunction isRecord(value) {\n return value !== void 0 && typeof value === \"object\";\n}\nvar ArrayValue = class {\n constructor(config = {}) {\n this.config = config;\n this.value = new Value(this.config);\n }\n validate(input) {\n if (!isNullOrUndefined(input) && !Array.isArray(input)) {\n return \"value is not an array\";\n }\n const invalid = this.value.validate(input);\n if (invalid !== null) {\n return invalid;\n }\n if (isNullOrUndefined(input)) {\n return null;\n }\n if (this.config.max !== void 0 && input.length > this.config.max) {\n return `value contains more than ${this.config.max}`;\n }\n if (this.config.min !== void 0 && input.length < this.config.min) {\n return `value contains less than ${this.config.min}`;\n }\n if (this.config.each !== void 0) {\n let out = \"\";\n input.forEach((el) => {\n if (this.config.each.required && isNullOrUndefined(el)) {\n out = `value is null or undefined: ${input.join(\",\")}`;\n }\n const isInvalid = this.validatePrimitiveValue(el, this.config.each);\n if (isInvalid !== null) {\n out += \" \" + isInvalid;\n }\n });\n return out === \"\" ? null : out;\n }\n return null;\n }\n validatePrimitiveValue(v, validator) {\n if (isBoolean(v)) {\n return validator.validate(v);\n } else if (isString(v)) {\n return validator.validate(v);\n } else if (isNumber(v)) {\n return validator.validate(v);\n } else if (isRecord(v)) {\n return validator.validate(v);\n }\n return \"value is not a primitive value\";\n }\n get default() {\n return void 0;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\n// src/values/enum-value.ts\nvar EnumValue = class {\n constructor(config) {\n this.config = config;\n this.value = new Value(config);\n }\n validate(value) {\n const invalid = this.value.validate(value);\n if (invalid !== null) {\n return invalid;\n }\n if (isUndefined(value)) {\n return null;\n }\n const valueInEnum = Object.values(this.config.enum).find(\n (enumValue) => enumValue === value\n );\n if (!valueInEnum) {\n return \"value is not in enum.\";\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nexport {\n ArrayValue,\n BooleanValue,\n EnumValue,\n NumberValue,\n RecordValue,\n Schema,\n SchemaValidationError,\n StringValue,\n Value,\n isArray,\n isBoolean,\n isBooleanOrUndefined,\n isNull,\n isNullOrUndefined,\n isNumber,\n isNumberOrUndefined,\n isRecord,\n isString,\n isUndefined\n};\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {createRipple} from '../../utils/ripple';\nimport {\n ButtonStyle,\n getRippleColorForButtonStyle,\n getClassNameForButtonStyle,\n} from './button-style';\n\nexport interface ButtonProps {\n style: ButtonStyle;\n onClick?(event?: MouseEvent): void;\n class?: string;\n text?: string;\n part?: string;\n type?: string;\n form?: string;\n role?: string;\n disabled?: boolean;\n ariaLabel?: string;\n ariaExpanded?: string;\n ariaPressed?: string;\n ariaChecked?: string;\n ariaCurrent?: string;\n ariaControls?: string;\n ariaHidden?: string;\n tabIndex?: string;\n title?: string;\n ref?(element?: HTMLButtonElement): void;\n}\n\nexport const Button: FunctionalComponent = (props, children) => {\n const rippleColor = getRippleColorForButtonStyle(props.style);\n const className = getClassNameForButtonStyle(props.style);\n\n const attributes = {\n class: props.class ? `${className} ${props.class}` : className,\n part: props.part,\n onClick: props.onClick,\n title: props.title,\n type: props.type,\n role: props.role,\n 'aria-label': props.ariaLabel,\n 'aria-expanded': props.ariaExpanded,\n 'aria-pressed': props.ariaPressed,\n 'aria-checked': props.ariaChecked,\n 'aria-current': props.ariaCurrent,\n 'aria-controls': props.ariaControls,\n 'aria-hidden': props.ariaHidden,\n disabled: props.disabled,\n ref(buttonEl?: HTMLButtonElement) {\n if (props.form) {\n buttonEl?.setAttribute('form', props.form);\n }\n if (props.ariaHidden) {\n buttonEl?.setAttribute('aria-hidden', props.ariaHidden);\n }\n if (props.tabIndex) {\n buttonEl?.setAttribute('tabindex', props.tabIndex);\n }\n props.ref?.(buttonEl);\n },\n };\n\n return (\n createRipple(e, {color: rippleColor})}\n >\n {props.text ? {props.text} : null}\n {children}\n \n );\n};\n","export type ButtonStyle =\n | 'primary'\n | 'outline-primary'\n | 'outline-neutral'\n | 'outline-error'\n | 'outline-bg-neutral'\n | 'outline-bg-error'\n | 'text-primary'\n | 'text-neutral'\n | 'text-transparent'\n | 'square-neutral';\n\nexport function getClassNameForButtonStyle(buttonStyle: ButtonStyle) {\n switch (buttonStyle) {\n case 'primary':\n return 'btn-primary';\n case 'outline-primary':\n return 'btn-outline-primary';\n case 'outline-neutral':\n return 'btn-outline-neutral';\n case 'outline-error':\n return 'btn-outline-error';\n case 'outline-bg-neutral':\n return 'btn-outline-bg-neutral';\n case 'outline-bg-error':\n return 'btn-outline-bg-error';\n case 'text-primary':\n return 'btn-text-primary';\n case 'text-neutral':\n return 'btn-text-neutral';\n case 'text-transparent':\n return 'btn-text-transparent';\n case 'square-neutral':\n return 'btn-square-neutral';\n }\n}\n\nexport function getRippleColorForButtonStyle(buttonStyle: ButtonStyle) {\n switch (buttonStyle) {\n case 'primary':\n return 'primary';\n case 'text-transparent':\n return 'neutral-light';\n default:\n return 'neutral';\n }\n}\n","export interface DebouncedQueueOptions {\n delay: number;\n}\n\nexport interface DebouncedQueue {\n enqueue(execute: () => void, uniqueId?: string): void;\n clear(): void;\n cancelActionIfQueued(id: string): void;\n}\n\ninterface QueuedAction {\n id?: string;\n execute: () => void;\n}\n\nexport function buildDebouncedQueue(\n options: DebouncedQueueOptions\n): DebouncedQueue {\n let actions: QueuedAction[] = [];\n let intervalId: ReturnType | null = null;\n\n function dequeueAction() {\n const action = actions.shift();\n if (action) {\n action.execute();\n } else {\n clearInterval(intervalId!);\n intervalId = null;\n }\n }\n\n function cancelActionIfQueued(id: string) {\n actions = actions.filter((action) => action.id !== id);\n }\n\n return {\n enqueue(execute: () => void, uniqueId?: string) {\n if (uniqueId) {\n cancelActionIfQueued(uniqueId);\n }\n actions.push({id: uniqueId, execute});\n if (intervalId === null) {\n dequeueAction();\n intervalId = setInterval(dequeueAction, options.delay);\n }\n },\n clear() {\n actions = [];\n },\n cancelActionIfQueued,\n };\n}\n\nexport function debounce<\n ExecuteParameters extends unknown[],\n ExecuteReturnType,\n>(\n execute: (\n ...args: ExecuteParameters\n ) => Promise | ExecuteReturnType,\n wait: number\n) {\n let timer: ReturnType;\n\n return (...args: ExecuteParameters): Promise => {\n clearTimeout(timer);\n return new Promise((resolve) => {\n timer = setTimeout(() => resolve(execute(...args)), wait);\n });\n };\n}\n","export function isIOS() {\n // Source: https://stackoverflow.com/a/62094756\n const iosQuirkPresent = () => {\n const audio = new Audio();\n\n audio.volume = 0.5;\n return audio.volume === 1; // volume cannot be changed from \"1\" on iOS 12 and below\n };\n\n const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);\n const isAppleDevice = navigator.userAgent.includes('Macintosh');\n const isTouchScreen = navigator.maxTouchPoints >= 1; // true for iOS 13 (and hopefully beyond)\n\n return isIOS || (isAppleDevice && (isTouchScreen || iosQuirkPresent()));\n}\n\nexport function isMacOS() {\n // Source: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform#examples\n return navigator.platform.startsWith('Mac');\n}\n\nexport function hasKeyboard() {\n return window.matchMedia('(any-hover: hover)').matches;\n}\n","export function buildCustomEvent(name: string, detail: T) {\n return new CustomEvent(name, {\n detail,\n // Event will bubble up the DOM until it is caught\n bubbles: true,\n // Allows to verify if event is caught (cancelled). If it's not caught, it won't be initialized.\n cancelable: true,\n // Allows to compose Atomic components inside one another, event will go across DOM/Shadow DOM\n composed: true,\n });\n}\n\nexport function listenOnce(\n element: HTMLElement,\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions\n): void;\nexport function listenOnce(\n element: HTMLElement,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n): void;\nexport function listenOnce(\n element: HTMLElement,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n): void {\n const _listener: EventListener = (evt: Event) => {\n element.removeEventListener(type, _listener, options);\n typeof listener === 'object'\n ? listener.handleEvent.call(element, evt)\n : listener.call(element, evt);\n };\n element.addEventListener(type, _listener, options);\n}\n","import {FunctionalComponent, Host, h} from '@stencil/core';\n\nexport const Hidden: FunctionalComponent = () => (\n \n);\n","import {\n ComponentInterface,\n getElement,\n h,\n forceUpdate as forceUpdateComponent,\n} from '@stencil/core';\nimport {TOptions} from 'i18next';\nimport {Hidden} from '../components/common/hidden';\nimport {AnyBindings} from '../components/common/interface/bindings';\nimport {Bindings} from '../components/search/atomic-search-interface/atomic-search-interface';\nimport {buildCustomEvent} from './event-utils';\nimport {closest} from './utils';\n\ndeclare global {\n interface Window {\n applyFocusVisiblePolyfill?: (shadowRoot: ShadowRoot) => void;\n }\n}\n\nexport type InitializeEventHandler = (bindings: AnyBindings) => void;\nexport type InitializeEvent = CustomEvent;\nexport const initializeEventName = 'atomic/initializeComponent';\nconst initializableElements = [\n 'atomic-recs-interface',\n 'atomic-search-interface',\n 'atomic-commerce-interface',\n 'atomic-commerce-recommendation-interface',\n 'atomic-relevance-inspector',\n 'atomic-insight-interface',\n 'atomic-external',\n];\n\n/**\n * Retrieves `Bindings` or `CommerceBindings` on a configured parent interface.\n * @param event - The element on which to dispatch the event, which must be the child of a configured Atomic container element.\n * @returns A promise that resolves upon initialization of the parent container element, and rejects otherwise.\n */\nexport function initializeBindings<\n SpecificBindings extends AnyBindings = Bindings,\n>(element: Element) {\n return new Promise((resolve, reject) => {\n const event = buildCustomEvent(\n initializeEventName,\n (bindings) => resolve(bindings as SpecificBindings)\n );\n element.dispatchEvent(event);\n\n if (!closest(element, initializableElements.join(', '))) {\n reject(new MissingInterfaceParentError(element.nodeName.toLowerCase()));\n }\n });\n}\n\nexport class MissingInterfaceParentError extends Error {\n constructor(elementName: string) {\n super(\n `The \"${elementName}\" element must be the child of the following elements: ${initializableElements.join(\n ', '\n )}`\n );\n }\n}\n\n/**\n * Necessary interface an Atomic Component must have to initialize itself correctly.\n */\nexport interface InitializableComponent<\n SpecificBindings extends AnyBindings = Bindings,\n> extends ComponentInterface {\n /**\n * Bindings passed from the `AtomicSearchInterface` to its children components.\n */\n bindings: SpecificBindings;\n /**\n * Method called right after the `bindings` property is defined. This is the method where Headless Framework controllers should be initialized.\n */\n initialize?: () => void;\n error: Error;\n}\n\n/**\n * Makes Shadow Dom elements compatible with the focus-visible polyfill https://github.com/WICG/focus-visible\n * Necessary for Safari under version 15.4.\n */\nexport function applyFocusVisiblePolyfill(element: HTMLElement) {\n if (!element.shadowRoot) {\n return;\n }\n\n if (window.applyFocusVisiblePolyfill) {\n window.applyFocusVisiblePolyfill(element.shadowRoot);\n return;\n }\n\n window.addEventListener(\n 'focus-visible-polyfill-ready',\n () => window.applyFocusVisiblePolyfill?.(element.shadowRoot!),\n {once: true}\n );\n}\n\ntype InitializeBindingsProps = {\n forceUpdate?: boolean;\n};\n\nconst renderedAttribute = 'data-atomic-rendered';\nconst loadedAttribute = 'data-atomic-loaded';\n\n/**\n * A [StencilJS property decorator](https://stenciljs.com/) to be used on a property named `bindings`.\n * This will automatically fetch the `Bindings` from the parent `atomic-search-interface` or `atomic-external` components.\n *\n * Once a component is bound, the `initialize` method is called.\n * In the event of an initialization error, the `error` property will be set and an `atomic-component-error` will be rendered.\n *\n * In order for a component using this decorator to render properly, it should have an internal state bound to one of the properties from `bindings`.\n * This is possible by using the `BindStateToController` decorator.\n *\n * @example\n * @InitializeBindings() public bindings!: Bindings;\n *\n * For more information and examples, view the \"Utilities\" section of the readme.\n */\nexport function InitializeBindings({\n forceUpdate,\n}: InitializeBindingsProps = {}) {\n return (\n component: InitializableComponent,\n bindingsProperty: string\n ) => {\n const {\n componentWillLoad,\n render,\n componentDidRender,\n componentDidLoad,\n disconnectedCallback,\n } = component;\n let unsubscribeLanguage = () => {};\n\n if (bindingsProperty !== 'bindings') {\n return console.error(\n `The InitializeBindings decorator should be used on a property called \"bindings\", and not \"${bindingsProperty}\"`,\n component\n );\n }\n\n component.componentWillLoad = function () {\n const element = getElement(this);\n element.setAttribute(renderedAttribute, 'false');\n element.setAttribute(loadedAttribute, 'false');\n const event = buildCustomEvent(\n initializeEventName,\n (bindings: SpecificBindings) => {\n this.bindings = bindings;\n\n const updateLanguage = () => forceUpdateComponent(this);\n this.bindings.i18n.on('languageChanged', updateLanguage);\n unsubscribeLanguage = () =>\n this.bindings.i18n.off('languageChanged', updateLanguage);\n\n try {\n // When no controller is initialized, updating a property with a State() decorator, there will be no re-render.\n // In this case, we have to manually trigger it.\n if (this.initialize) {\n this.initialize();\n if (forceUpdate) {\n forceUpdateComponent(this);\n }\n } else {\n forceUpdateComponent(this);\n }\n } catch (e) {\n this.error = e as Error;\n }\n }\n );\n\n element.dispatchEvent(event);\n\n if (!closest(element, initializableElements.join(', '))) {\n this.error = new MissingInterfaceParentError(\n element.nodeName.toLowerCase()\n );\n return;\n }\n\n return componentWillLoad && componentWillLoad.call(this);\n };\n\n component.render = function () {\n if (this.error) {\n return (\n \n );\n }\n\n if (!this.bindings) {\n return ;\n }\n\n getElement(this).setAttribute(renderedAttribute, 'true');\n return render && render.call(this);\n };\n\n component.disconnectedCallback = function () {\n const element = getElement(this);\n element.setAttribute(renderedAttribute, 'false');\n element.setAttribute(loadedAttribute, 'false');\n unsubscribeLanguage();\n disconnectedCallback && disconnectedCallback.call(this);\n };\n\n component.componentDidRender = function () {\n const element = getElement(this);\n if (element.getAttribute(renderedAttribute) === 'false') {\n return;\n }\n\n componentDidRender && componentDidRender.call(this);\n if (element.getAttribute(loadedAttribute) === 'false') {\n element.setAttribute(loadedAttribute, 'true');\n applyFocusVisiblePolyfill(getElement(this));\n componentDidLoad && componentDidLoad.call(this);\n }\n };\n\n component.componentDidLoad = function () {};\n };\n}\n\n/**\n * A [StencilJS property decorator](https://stenciljs.com/) is used together with the [State decorator](https://stenciljs.com/docs/state#state-decorator).\n * This allows the Stencil component state property to automatically get updates from a [Coveo Headless controller](https://docs.coveo.com/en/headless/latest/usage/#use-headless-controllers).\n *\n * @example\n * @BindStateToController('pager') @State() private pagerState!: PagerState;\n *\n * For more information and examples, view the \"Utilities\" section of the readme.\n *\n * @param controllerProperty The controller property to subscribe to. The controller has to be created inside of the `initialize` method.\n * @param options The configurable `BindStateToController` options.\n */\nexport function BindStateToController(\n controllerProperty: string,\n options?: {\n /**\n * Component's method to be called when state is updated.\n */\n onUpdateCallbackMethod?: string;\n }\n) {\n return (\n component: InitializableComponent,\n stateProperty: string\n ) => {\n const {disconnectedCallback, initialize} = component;\n\n component.initialize = function () {\n initialize && initialize.call(this);\n\n if (!initialize) {\n return console.error(\n `ControllerState: The \"initialize\" method has to be defined and instantiate a controller for the property ${controllerProperty}`,\n component\n );\n }\n\n if (!this[controllerProperty]) {\n return;\n }\n\n if (\n options?.onUpdateCallbackMethod &&\n !this[options.onUpdateCallbackMethod]\n ) {\n return console.error(\n `ControllerState: The onUpdateCallbackMethod property \"${options.onUpdateCallbackMethod}\" is not defined`,\n component\n );\n }\n\n this.unsubscribeController = this[controllerProperty].subscribe(() => {\n this[stateProperty] = this[controllerProperty].state;\n options?.onUpdateCallbackMethod &&\n this[options.onUpdateCallbackMethod]();\n });\n };\n\n component.disconnectedCallback = function () {\n !getElement(this).isConnected && this.unsubscribeController?.();\n disconnectedCallback && disconnectedCallback.call(this);\n };\n };\n}\n\ninterface DeferredExecution {\n args: unknown[];\n}\n\nexport function DeferUntilRender() {\n return (component: ComponentInterface, methodName: string) => {\n const {componentDidRender, connectedCallback} = component;\n const originalMethod = component[methodName] as Function;\n let deferredExecutions: DeferredExecution[] = [];\n\n component.connectedCallback = function () {\n this[methodName] = function (...args: unknown[]) {\n deferredExecutions.push({args});\n };\n connectedCallback && connectedCallback.call(this);\n };\n\n component.componentDidRender = function () {\n deferredExecutions.forEach(({args}) =>\n originalMethod.call(this, ...args)\n );\n deferredExecutions = [];\n componentDidRender && componentDidRender.call(this);\n };\n };\n}\n\nexport type I18nState = Record string>;\n","import {listenOnce} from './event-utils';\n\ninterface RippleOptions {\n color: string;\n /**\n * When the ripple's parent is not the event's origin\n */\n parent?: Element;\n}\n\nconst RIPPLE = 'ripple';\n\nfunction getAnimationDurationInMilliseconds(radiusPixels: number) {\n // A 318px wide button has a duration of 700ms.\n return Math.cbrt(radiusPixels) * 129.21;\n}\n\nfunction setPositionRelativeIfStatic(element: Element) {\n if (getComputedStyle(element).position === 'static') {\n element.classList.add('ripple-relative');\n }\n}\n\nexport function createRipple(event: MouseEvent, options: RippleOptions) {\n const button = options.parent ?? (event.currentTarget as Element);\n const existingRipple = button.getElementsByClassName(RIPPLE)[0];\n existingRipple && existingRipple.remove();\n\n button.classList.add('ripple-parent');\n setPositionRelativeIfStatic(button);\n Array.from(button.children).forEach(setPositionRelativeIfStatic);\n\n const ripple = document.createElement('span');\n ripple.classList.add(RIPPLE);\n ripple.style.backgroundColor = `var(--atomic-${options.color})`;\n ripple.setAttribute('part', RIPPLE);\n\n const diameter = Math.max(button.clientWidth, button.clientHeight);\n const radius = diameter / 2;\n const animationDuration = getAnimationDurationInMilliseconds(radius);\n const {top, left} = button.getBoundingClientRect();\n ripple.style.width = ripple.style.height = `${diameter}px`;\n ripple.style.left = `${event.clientX - (left + radius)}px`;\n ripple.style.top = `${event.clientY - (top + radius)}px`;\n ripple.style.setProperty('--animation-duration', `${animationDuration}ms`);\n button.prepend(ripple);\n cleanupAnimationOnFinish(ripple, animationDuration);\n}\n\nasync function cleanupAnimationOnFinish(\n ripple: HTMLSpanElement,\n animationDuration: number\n) {\n listenOnce(ripple, 'animationend', () => {\n ripple && ripple.remove();\n });\n // Backup in case the button gets hidden or unmounted and the ripple hasn't been cleaned up.\n setTimeout(\n () => ripple?.remove(),\n animationDuration + animationDuration * 0.1\n );\n}\n","import {FunctionalComponent, h} from '@stencil/core';\n\ninterface Props {\n disabled: boolean;\n textArea?: boolean;\n}\n\nexport const SearchBoxWrapper: FunctionalComponent = (\n props,\n children\n) => {\n const getClasses = () => {\n const baseClasses =\n 'flex bg-background w-full border border-neutral rounded-md focus-within:ring';\n const focusClasses = props.disabled\n ? 'focus-within:border-disabled focus-within:ring-neutral'\n : 'focus-within:border-primary focus-within:ring-ring-primary';\n const inputTypeClasses = props.textArea\n ? 'absolute top-0 left-0'\n : 'relative h-full';\n\n return [baseClasses, focusClasses, inputTypeClasses].join(' ');\n };\n\n return (\n
\n {children}\n
\n );\n};\n","import {FunctionalComponent, h} from '@stencil/core';\nimport ClearSlim from '../../../images/clear-slim.svg';\nimport {Button, ButtonProps} from '../button';\nimport {AnyBindings} from '../interface/bindings';\n\ninterface Props extends Partial {\n bindings: AnyBindings;\n inputRef: HTMLInputElement | HTMLTextAreaElement | null;\n}\n\nexport const TextAreaClearButton: FunctionalComponent = ({\n inputRef,\n bindings,\n onClick,\n ...defaultButtonProps\n}) => (\n \n {\n onClick?.();\n inputRef?.focus();\n }}\n ariaLabel={bindings.i18n.t('clear')}\n {...defaultButtonProps}\n >\n \n \n \n);\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {JSXBase} from '@stencil/core/internal';\nimport {AnyBindings} from '../interface/bindings';\nimport {TextAreaClearButton} from './text-area-clear-button';\n\ninterface Props extends JSXBase.TextareaHTMLAttributes {\n textAreaRef: HTMLTextAreaElement;\n loading: boolean;\n bindings: AnyBindings;\n value: string;\n ariaLabel: string;\n onClear(): void;\n popup?: {\n id: string;\n activeDescendant: string;\n expanded: boolean;\n hasSuggestions: boolean;\n };\n}\n\nfunction getPopupAttributes(props: Required['popup']) {\n return {\n role: 'combobox',\n autocomplete: 'off',\n autocapitalize: 'off',\n autocorrect: 'off',\n ...(props.activeDescendant && {\n 'aria-activedescendant': props.activeDescendant,\n }),\n 'aria-expanded': `${props.hasSuggestions && props.expanded}`,\n 'aria-autocomplete': 'both',\n 'aria-haspopup': 'true',\n 'aria-controls': props.id,\n };\n}\n\nfunction syncTextWithReplica(elem: HTMLTextAreaElement, value?: string) {\n const parent = elem?.parentNode as HTMLElement;\n if (!parent) {\n return;\n }\n if (elem.value === '\\n') {\n return;\n }\n parent.dataset.replicatedValue = value ?? elem.value;\n}\n\nfunction resetReplicaText(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n delete parent.dataset.replicatedValue;\n }\n}\n\nfunction collapseTextArea(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n parent.classList.remove('expanded');\n }\n}\n\nfunction expandTextArea(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n parent.classList.add('expanded');\n }\n}\n\nexport const SearchTextArea: FunctionalComponent = ({\n textAreaRef,\n loading,\n bindings,\n onInput,\n onFocus,\n onBlur,\n onChange,\n onKeyDown,\n onKeyUp,\n value,\n ariaLabel,\n onClear,\n popup,\n ...defaultInputProps\n}) => (\n
\n
\n {\n onInput?.(e);\n syncTextWithReplica(textAreaRef);\n }}\n onKeyDown={(e) => {\n syncTextWithReplica(textAreaRef);\n if (e.key === 'Enter') {\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n }\n onKeyDown?.(e);\n }}\n onKeyUp={(e) => {\n onKeyUp?.(e);\n if (e.key === 'Enter') {\n e.preventDefault();\n return;\n }\n syncTextWithReplica(textAreaRef);\n }}\n onBlur={(e) => {\n onBlur?.(e);\n collapseTextArea(textAreaRef);\n syncTextWithReplica(textAreaRef);\n }}\n onChange={(e) => {\n onChange?.(e);\n syncTextWithReplica(textAreaRef);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n const target = e.target as HTMLTextAreaElement;\n syncTextWithReplica(textAreaRef ?? target);\n expandTextArea(textAreaRef ?? target);\n }}\n autocomplete=\"off\"\n {...(popup && getPopupAttributes(popup))}\n {...defaultInputProps}\n value={value}\n />\n
\n\n {loading && (\n
\n \n
\n )}\n {!loading && value && (\n {\n onClear();\n resetReplicaText(textAreaRef);\n }}\n />\n )}\n
\n);\n","export function promiseTimeout(prom: T | Promise, ms: number) {\n let id: NodeJS.Timeout;\n const timeout = new Promise((_, reject) => {\n id = setTimeout(() => {\n reject(new Error('Promise timed out.'));\n }, ms);\n });\n return Promise.race([prom, timeout]).then(() => {\n clearTimeout(id);\n });\n}\n","import {isNullOrUndefined} from '@coveo/bueno';\nimport {forceUpdate} from '@stencil/core';\nimport DOMPurify from 'dompurify';\nimport {debounce} from '../../../utils/debounce-utils';\nimport {promiseTimeout} from '../../../utils/promise-utils';\nimport {\n SearchBoxSuggestionElement,\n SearchBoxSuggestionsBindings,\n SearchBoxSuggestionsEvent,\n elementHasNoQuery,\n elementHasQuery,\n} from './suggestions-common';\n\n/**\n * List of suggestions that will be displayed along other lists (e.g recent queries) when the search box's input is selected.\n */\nexport interface SearchBoxSuggestions {\n /**\n * The search box will sort the position of suggestions using this value, the lowest value being first.\n * By default, the DOM position will be used.\n */\n position: number;\n /**\n * Whether the suggestions should be listed in the right or left panel. By default, the suggestions are listed in the right panel.\n */\n panel?: 'left' | 'right';\n /**\n * Method that returns the list of elements which will be rendered in the list of suggestions.\n */\n renderItems(): SearchBoxSuggestionElement[];\n /**\n * Hook called when the user changes the search box's input value. This can lead to all the query suggestions being updated.\n */\n onInput?(): Promise | void;\n /**\n * Hook called when the current suggested query changes as the user navigates the list of suggestions.\n * This is used for instant results, which are rendered based on the current suggested query.\n * @param q The new current suggested query.\n */\n onSuggestedQueryChange?(q: string): Promise | void;\n}\n\ninterface SearchBoxProps {\n getSearchBoxValue: () => string;\n updateQuery: (suggestedQuery: string) => void;\n getSuggestionTimeout: () => number;\n getNumberOfSuggestionsToDisplay: () => number;\n getSuggestionDelay: () => number;\n getLogger: () => Pick;\n getHost: () => HTMLElement;\n}\n\nexport class SuggestionManager {\n public suggestions: SearchBoxSuggestions[] = [];\n public leftSuggestionElements: SearchBoxSuggestionElement[] = [];\n public rightSuggestionElements: SearchBoxSuggestionElement[] = [];\n public leftPanel: HTMLElement | undefined = undefined;\n public rightPanel: HTMLElement | undefined = undefined;\n public triggerSuggestions: () => Promise;\n public activeDescendant = '';\n public suggestedQuery = '';\n\n private queryDataAttribute = 'data-query';\n private suggestionEvents: SearchBoxSuggestionsEvent[] =\n [];\n\n private previousActiveDescendantElement: HTMLElement | null = null;\n private leftSuggestions: SearchBoxSuggestions[] = [];\n private rightSuggestions: SearchBoxSuggestions[] = [];\n\n constructor(private ownerSearchBoxProps: SearchBoxProps) {\n this.triggerSuggestions = debounce(\n () => this.executeQuerySuggestion(),\n this.ownerSearchBoxProps.getSuggestionDelay()\n );\n }\n\n public get partialSuggestionBindings(): Pick<\n SearchBoxSuggestionsBindings,\n | 'suggestedQuery'\n | 'clearSuggestions'\n | 'triggerSuggestions'\n | 'getSuggestions'\n | 'getSuggestionElements'\n > {\n return {\n suggestedQuery: () => this.suggestedQuery,\n clearSuggestions: () => this.clearSuggestions(),\n triggerSuggestions: () => this.triggerSuggestions(),\n getSuggestions: () => this.suggestions,\n getSuggestionElements: () => this.allSuggestionElements,\n };\n }\n\n public get activeDescendantElement(): HTMLElement | null {\n if (!this.hasActiveDescendant) {\n return null;\n }\n\n return (\n this.leftPanel?.querySelector(`#${this.activeDescendant}`) ||\n this.rightPanel?.querySelector(`#${this.activeDescendant}`) ||\n null\n );\n }\n\n public onSubmit() {\n this.updateActiveDescendant();\n this.clearSuggestions();\n }\n\n public updateActiveDescendant(id = '') {\n this.activeDescendant = id;\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n public clickOnActiveElement() {\n this.activeDescendantElement?.click();\n this.updateActiveDescendant();\n }\n\n public isRightPanelInFocus() {\n if (\n isNullOrUndefined(this.panelInFocus) ||\n isNullOrUndefined(this.rightPanel)\n ) {\n return false;\n }\n\n return this.panelInFocus === this.rightPanel;\n }\n\n public initializeSuggestions(\n bindings: SearchBoxSuggestionsBindings\n ) {\n this.suggestions = this.suggestionEvents.map((event) => event(bindings));\n }\n\n public registerSuggestionsFromEvent(\n event: CustomEvent>,\n bindings: SearchBoxSuggestionsBindings\n ) {\n event.preventDefault();\n event.stopPropagation();\n this.suggestionEvents.push(event.detail);\n this.suggestions.push(event.detail(bindings));\n }\n\n public registerSuggestions(suggestions: SearchBoxSuggestions) {\n this.suggestions.push(suggestions);\n }\n\n public get isDoubleList() {\n return Boolean(\n this.leftSuggestionElements.length && this.rightSuggestionElements.length\n );\n }\n\n public focusPanel(side: 'left' | 'right') {\n const panel = side === 'left' ? this.leftPanel : this.rightPanel;\n\n if (this.panelInFocus === panel) {\n return;\n }\n if (panel && panel.firstElementChild) {\n const panelHasActiveDescendant =\n this.previousActiveDescendantElement &&\n panel.contains(this.previousActiveDescendantElement);\n const newValue = panelHasActiveDescendant\n ? this.previousActiveDescendantElement!\n : (panel.firstElementChild as HTMLElement);\n this.updateDescendants(newValue.id);\n }\n }\n\n public clearSuggestions() {\n this.clearSuggestionElements();\n this.updateActiveDescendant();\n }\n\n public focusNextValue() {\n if (!this.hasSuggestions || !this.nextOrFirstValue) {\n return;\n }\n\n this.focusValue(this.nextOrFirstValue as HTMLElement);\n }\n\n public focusValue(value: HTMLElement) {\n this.updateActiveDescendant(value.id);\n this.scrollActiveDescendantIntoView();\n this.updateQueryFromSuggestion();\n }\n\n public onSuggestionMouseOver(\n item: SearchBoxSuggestionElement,\n side: 'left' | 'right',\n id: string\n ) {\n const thisPanel = side === 'left' ? this.leftPanel : this.rightPanel;\n if (this.panelInFocus === thisPanel) {\n this.updateActiveDescendant(id);\n } else {\n this.updateDescendants(id);\n }\n if (item.query) {\n this.updateSuggestedQuery(item.query);\n }\n }\n\n public onSuggestionClick(item: SearchBoxSuggestionElement, e: Event) {\n if (item.query) {\n this.clearSuggestions();\n this.updateOwnerSearchboxQuery(item.query);\n }\n item.onSelect && item.onSelect(e);\n }\n\n public get hasSuggestions() {\n return !!this.allSuggestionElements.length;\n }\n\n public get allSuggestionElements() {\n return [...this.leftSuggestionElements, ...this.rightSuggestionElements];\n }\n\n public focusPreviousValue() {\n if (this.firstValue === this.activeDescendantElement) {\n this.updateActiveDescendant();\n return;\n }\n\n if (!this.hasSuggestions || !this.previousOrLastValue) {\n return;\n }\n\n this.focusValue(this.previousOrLastValue as HTMLElement);\n }\n\n public get hasActiveDescendant() {\n return this.activeDescendant !== '';\n }\n\n private async executeQuerySuggestion() {\n this.updateActiveDescendant();\n const settled = await Promise.allSettled(\n this.suggestions.map((suggestion) =>\n promiseTimeout(\n suggestion.onInput ? suggestion.onInput() : Promise.resolve(),\n this.ownerSearchBoxProps.getSuggestionTimeout()\n )\n )\n );\n\n const fulfilledSuggestions: SearchBoxSuggestions[] = [];\n\n settled.forEach((prom, j) => {\n if (prom.status === 'fulfilled') {\n fulfilledSuggestions.push(this.suggestions[j]);\n } else {\n this.ownerSearchBoxProps\n .getLogger()\n .warn(\n 'Some query suggestions are not being shown because the promise timed out.'\n );\n }\n });\n\n const splitSuggestions = (side: 'left' | 'right', isDefault = false) =>\n fulfilledSuggestions\n .filter(\n (suggestion) =>\n suggestion.panel === side || (!suggestion.panel && isDefault)\n )\n .sort(this.sortSuggestions);\n\n this.leftSuggestions = splitSuggestions('left', true);\n this.leftSuggestionElements = this.getAndFilterLeftSuggestionElements();\n\n this.rightSuggestions = splitSuggestions('right');\n this.rightSuggestionElements = this.getSuggestionElements(\n this.rightSuggestions\n );\n\n const defaultSuggestedQuery =\n this.allSuggestionElements.find(elementHasQuery)?.query || '';\n\n this.updateSuggestedQuery(defaultSuggestedQuery);\n }\n\n private get lastValue() {\n return this.panelInFocus?.lastElementChild;\n }\n\n private get previousOrLastValue() {\n if (!this.hasActiveDescendant) {\n return this.lastValue;\n }\n\n return (\n this.activeDescendantElement?.previousElementSibling || this.lastValue\n );\n }\n\n private sortSuggestions(a: SearchBoxSuggestions, b: SearchBoxSuggestions) {\n return a.position - b.position;\n }\n\n private get nextOrFirstValue() {\n if (!this.hasActiveDescendant) {\n return this.firstValue;\n }\n\n return this.activeDescendantElement?.nextElementSibling || this.firstValue;\n }\n\n private get firstValue() {\n return this.panelInFocus?.firstElementChild;\n }\n\n private get panelInFocus() {\n if (this.leftPanel?.contains(this.activeDescendantElement)) {\n return this.leftPanel;\n }\n if (this.rightPanel?.contains(this.activeDescendantElement)) {\n return this.rightPanel;\n }\n return this.leftPanel || this.rightPanel;\n }\n\n private scrollActiveDescendantIntoView() {\n this.activeDescendantElement?.scrollIntoView({\n block: 'nearest',\n });\n }\n\n private updateQueryFromSuggestion() {\n const suggestedQuery = this.activeDescendantElement?.getAttribute(\n this.queryDataAttribute\n );\n this.updateOwnerSearchboxQuery(suggestedQuery || '');\n }\n\n private updateOwnerSearchboxQuery(query: string) {\n if (query && this.ownerSearchBoxProps.getSearchBoxValue() !== query) {\n this.ownerSearchBoxProps.updateQuery(query);\n this.updateSuggestedQuery(query);\n }\n }\n\n private async updateSuggestedQuery(suggestedQuery: string) {\n await Promise.allSettled(\n this.suggestions.map((suggestion) =>\n promiseTimeout(\n suggestion.onSuggestedQueryChange\n ? suggestion.onSuggestedQueryChange(suggestedQuery)\n : Promise.resolve(),\n this.ownerSearchBoxProps.getSuggestionTimeout()\n )\n )\n );\n this.suggestedQuery = suggestedQuery;\n this.updateSuggestionElements(suggestedQuery);\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n private updateSuggestionElements(query: string) {\n if (!this.isPanelInFocus(this.leftPanel, query)) {\n this.leftSuggestionElements = this.getAndFilterLeftSuggestionElements();\n }\n\n if (!this.isPanelInFocus(this.rightPanel, query)) {\n this.rightSuggestionElements = this.getSuggestionElements(\n this.rightSuggestions\n );\n }\n }\n\n public forceUpdate() {\n this.updateSuggestionElements(this.suggestedQuery);\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n private isPanelInFocus(\n panel: HTMLElement | undefined,\n query: string\n ): boolean {\n if (!this.activeDescendantElement) {\n return false;\n }\n\n if (query) {\n const escaped = DOMPurify.sanitize(query);\n return !!panel?.querySelector(\n `[${this.queryDataAttribute}=\"${escaped}\"]`\n );\n }\n\n return this.activeDescendantElement?.closest('ul') === panel;\n }\n\n private getAndFilterLeftSuggestionElements() {\n const suggestionElements = this.getSuggestionElements(this.leftSuggestions);\n const filterOnDuplicate = new Set();\n\n const out = suggestionElements.filter((suggestionElement) => {\n if (isNullOrUndefined(suggestionElement.query)) {\n return true;\n }\n if (filterOnDuplicate.has(suggestionElement.query)) {\n return false;\n } else {\n filterOnDuplicate.add(suggestionElement.query);\n return true;\n }\n });\n\n return out;\n }\n\n private getSuggestionElements(suggestions: SearchBoxSuggestions[]) {\n const elements = suggestions\n .map((suggestion) => suggestion.renderItems())\n .flat();\n\n const max =\n this.ownerSearchBoxProps.getNumberOfSuggestionsToDisplay() +\n elements.filter(elementHasNoQuery).length;\n\n return elements.slice(0, max);\n }\n\n private updateDescendants(activeDescendant = '') {\n const newPrevDescendantElement = this.activeDescendantElement;\n this.previousActiveDescendantElement = newPrevDescendantElement;\n this.updateActiveDescendant(activeDescendant);\n }\n\n private clearSuggestionElements() {\n this.leftSuggestionElements = [];\n this.rightSuggestionElements = [];\n }\n}\n","import {h, FunctionalComponent, VNode, Fragment} from '@stencil/core';\nimport {JSXBase} from '@stencil/core/internal';\nimport {isMacOS} from '../../../utils/device-utils';\nimport {AnyBindings} from '../../common/interface/bindings';\nimport {SearchBoxSuggestionElement} from '../../common/suggestions/suggestions-common';\n\nexport const queryDataAttribute = 'data-query';\n\ntype Side = 'left' | 'right';\n\ninterface SearchSuggestionProps {\n bindings: AnyBindings;\n id: string;\n suggestion: SearchBoxSuggestionElement;\n isSelected: boolean;\n side: Side;\n index: number;\n lastIndex: number;\n isDoubleList: boolean;\n}\n\ninterface ButtonSearchSuggestionProps extends SearchSuggestionProps {\n onClick?(e: Event): void;\n onMouseOver?(e: Event): void;\n}\n\nfunction getPartsForSuggestion(\n suggestion: SearchBoxSuggestionElement,\n isSelected: boolean\n) {\n let part = 'suggestion';\n if (isSelected) {\n part += ' active-suggestion';\n }\n if (suggestion.query) {\n part += ' suggestion-with-query';\n }\n if (suggestion.part) {\n part += ` ${suggestion.part}`;\n }\n return part;\n}\n\nfunction getClassesForSuggestion(isSelected: boolean) {\n return `flex px-4 min-h-[40px] items-center text-left text-neutral-dark cursor-pointer ${\n isSelected ? 'bg-neutral-light' : ''\n }`;\n}\n\nfunction isHTMLElement(el: VNode | Element): el is HTMLElement {\n return el instanceof HTMLElement;\n}\n\nfunction ensureContentForRenderedSuggestion({\n renderedSuggestion,\n suggestion,\n}: {\n renderedSuggestion: HTMLElement;\n suggestion: SearchBoxSuggestionElement;\n}) {\n if (isHTMLElement(suggestion.content)) {\n renderedSuggestion.replaceChildren(suggestion.content);\n }\n}\n\nfunction getAriaLabelForRenderedSuggestion({\n bindings,\n renderedSuggestion,\n suggestion,\n side,\n index,\n lastIndex,\n isDoubleList,\n isButton,\n}: {\n bindings: AnyBindings;\n renderedSuggestion: HTMLElement;\n suggestion: SearchBoxSuggestionElement;\n side: Side;\n index: number;\n lastIndex: number;\n isDoubleList: boolean;\n isButton: boolean;\n}) {\n const contentLabel =\n suggestion.ariaLabel ??\n suggestion.query ??\n renderedSuggestion.innerText ??\n bindings.i18n.t('no-title');\n const labelWithType =\n isMacOS() && isButton\n ? bindings.i18n.t('search-suggestion-button', {\n label: contentLabel,\n interpolation: {escapeValue: false},\n })\n : contentLabel;\n const position = index + 1;\n const count = lastIndex + 1;\n\n if (!isDoubleList) {\n return bindings.i18n.t('search-suggestion-single-list', {\n label: labelWithType,\n position,\n count,\n interpolation: {escapeValue: false},\n });\n }\n\n return bindings.i18n.t('search-suggestion-double-list', {\n label: labelWithType,\n position,\n count,\n side: bindings.i18n.t(side === 'left' ? 'left' : 'right'),\n interpolation: {escapeValue: false},\n });\n}\n\nfunction getContentForSuggestion(suggestion: SearchBoxSuggestionElement) {\n return !isHTMLElement(suggestion.content) ? (\n suggestion.content\n ) : (\n \n );\n}\n\nfunction getCommonSearchSuggestionAttributes(\n {\n bindings,\n id,\n suggestion,\n isSelected,\n side,\n index,\n lastIndex,\n isDoubleList,\n }: SearchSuggestionProps,\n isButton: boolean\n): JSXBase.HTMLAttributes {\n return {\n id: id,\n key: suggestion.key,\n part: getPartsForSuggestion(suggestion, isSelected),\n class: getClassesForSuggestion(isSelected),\n ref: (el) => {\n if (!el) {\n return;\n }\n ensureContentForRenderedSuggestion({\n renderedSuggestion: el,\n suggestion,\n });\n el.setAttribute(\n 'aria-label',\n getAriaLabelForRenderedSuggestion({\n bindings,\n renderedSuggestion: el,\n suggestion,\n side,\n index,\n lastIndex,\n isDoubleList,\n isButton,\n })\n );\n },\n };\n}\n\nexport const SimpleSearchSuggestion: FunctionalComponent<\n SearchSuggestionProps\n> = (props) => {\n return (\n \n {getContentForSuggestion(props.suggestion)}\n \n );\n};\n\nexport const ButtonSearchSuggestion: FunctionalComponent<\n ButtonSearchSuggestionProps\n> = (props) => {\n return (\n e.preventDefault()}\n onClick={(e: Event) => props.onClick?.(e)}\n onMouseOver={(e: Event) => props.onMouseOver?.(e)}\n {...{[queryDataAttribute]: props.suggestion.query}}\n >\n {getContentForSuggestion(props.suggestion)}\n \n );\n};\n","import {VNode} from '@stencil/core';\nimport {buildCustomEvent} from '../../../utils/event-utils';\nimport {closest} from '../../../utils/utils';\nimport {AnyBindings} from '../interface/bindings';\n\n/**\n * Element which will be rendered in the list of suggestions.\n */\nexport interface SearchBoxSuggestionElement {\n /**\n * Stable identity which enables Stencil to reuse DOM elements for better performance.\n * The best way to pick a key is to use a string that uniquely identifies that list item among its siblings (often your data will already have IDs).\n */\n key: string;\n /**\n * Rendered content of the element.\n */\n content: Element | VNode;\n /**\n * Hook called when the suggestion is selected.\n * @param e DOM event.\n */\n onSelect?(e: Event): void;\n /**\n * The query associated with the suggestion which will replace the query in the search box if the suggestion is selected.\n */\n query?: string;\n /**\n * For improved accessibility, set this property with additional information.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label\n */\n ariaLabel?: string;\n /**\n * Adds a specific shadow part attribute that can be selected with the CSS ::part pseudo-element.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/::part\n */\n part?: string;\n /**\n * Whether to hide the suggestion when it's the last one in the list.\n */\n hideIfLast?: boolean;\n}\n\n/**\n * Element which will be rendered in the list of suggestions.\n */\nexport interface SearchBoxSuggestionElement {\n /**\n * Stable identity which enables Stencil to reuse DOM elements for better performance.\n * The best way to pick a key is to use a string that uniquely identifies that list item among its siblings (often your data will already have IDs).\n */\n key: string;\n /**\n * Rendered content of the element.\n */\n content: Element | VNode;\n /**\n * Hook called when the selection is selected.\n * @param e DOM event.\n */\n onSelect?(e: Event): void;\n /**\n * The query associated with the suggestion which will replace the query in the search box if the suggestion is selected.\n */\n query?: string;\n /**\n * For improved accessibility, provide this property with additional information.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label\n */\n ariaLabel?: string;\n /**\n * Adds a specific shadow part attribute that can be selected with the CSS ::part pseudo-element.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/::part\n */\n part?: string;\n /**\n * Hide the suggestion if it's the last in the list.\n */\n hideIfLast?: boolean;\n}\n\n/**\n * List of suggestions that will be displayed along other lists (e.g recent queries) when the search box's input is selected.\n */\nexport interface SearchBoxSuggestions {\n /**\n * The search box will sort the position of suggestions using this value. The lowest value being first.\n * By default, the DOM position will be used.\n */\n position: number;\n /**\n * Whether the suggestions should be listed in the right or left panel. By default, the suggestions are listed in the right panel.\n */\n panel?: 'left' | 'right';\n /**\n * Method that returns the list of elements which will be rendered in the list of suggestions.\n */\n renderItems(): SearchBoxSuggestionElement[];\n /**\n * Hook called when the user changes the search box's input value. This can lead to all the query suggestions being updated.\n */\n onInput?(): Promise | void;\n /**\n * Hook called when the suggested query changes as a user traverses through the list of suggestions.\n * This is used for instant results, which are rendered based on the current suggested query.\n * @param q The new suggested query.\n */\n onSuggestedQueryChange?(q: string): Promise | void;\n}\n\n/**\n * Event sent from the registered query suggestions to the parent search box.\n */\nexport type SearchBoxSuggestionsEvent<\n SearchBoxController,\n Bindings = AnyBindings,\n> = (\n /**\n * The bindings passed from the search box to the suggestions.\n */\n bindings: SearchBoxSuggestionsBindings\n) => SearchBoxSuggestions;\n\nconst searchBoxElements = [\n 'atomic-search-box',\n 'atomic-insight-search-box',\n 'atomic-commerce-search-box',\n];\n\n/**\n * The bindings passed from the search box to the suggestions.\n */\nexport type SearchBoxSuggestionsBindings<\n SearchBoxController,\n Bindings = AnyBindings,\n> = Bindings & {\n /**\n * The unique id of the search box.\n */\n id: string;\n /**\n * Whether the search box is [standalone](https://docs.coveo.com/en/atomic/latest/usage/ssb/).\n */\n isStandalone: boolean;\n /**\n * The search box headless controller.\n */\n searchBoxController: SearchBoxController;\n /**\n * The number of queries to display when the user interacts with the search box.\n */\n numberOfQueries: number;\n /**\n * Whether to clear all active query filters when the end user submits a new query from the search box.\n */\n clearFilters: boolean;\n /**\n * Retrieves the suggested query, meaning the query that would be sent if the search is executed.\n * The suggested query changes as a user traverses through the list of suggestions.\n */\n suggestedQuery(): string;\n /**\n * Removes the current suggestions.\n */\n clearSuggestions(): void;\n /**\n * Triggers update & retrieval of all suggestions.\n */\n triggerSuggestions(): void;\n /**\n * Retrieves the current suggestions.\n */\n getSuggestions(): SearchBoxSuggestions[];\n /**\n * Retrieves the current suggestions elements.\n */\n getSuggestionElements(): SearchBoxSuggestionElement[];\n};\n\n/**\n * Dispatches an event which retrieves the `SearchBoxSuggestionsBindings` on a configured parent search box.\n * @param event Event sent from the registered query suggestions to the parent search box.\n * @param element Element on which to dispatch the event, which must be the child of a configured search box.\n */\nexport const dispatchSearchBoxSuggestionsEvent = <\n SearchBoxController,\n Bindings = AnyBindings,\n>(\n event: SearchBoxSuggestionsEvent,\n element: HTMLElement\n) => {\n element.dispatchEvent(\n buildCustomEvent('atomic/searchBoxSuggestion/register', event)\n );\n\n if (!closest(element, searchBoxElements.join(', '))) {\n throw new Error(\n `The \"${element.nodeName.toLowerCase()}\" component was not handled, as it is not a child of the following elements: ${searchBoxElements.join(\n ', '\n )}`\n );\n }\n};\n\nexport function elementHasNoQuery(el: SearchBoxSuggestionElement) {\n return !el.query;\n}\n\nexport function elementHasQuery(el: SearchBoxSuggestionElement) {\n return !!el.query;\n}\n"],"names":["getFocusableDescendants","findAriaLiveEventName","AriaLiveRegion","regionName","assertive","arguments","length","undefined","getAriaLiveElement","event","buildCustomEvent","document","dispatchEvent","detail","element","component","setterName","componentWillRender","Object","defineProperty","set","message","dispatchMessage","_a","updateMessage","call","this","registerRegion","FocusTargetController","_classCallCheck","doFocusAfterSearch","doFocusOnNextTarget","bindings","handleComponentRenderLoop","_createClass","key","value","setTarget","el","focus","_focus","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_b","wrap","_callee$","_context","prev","next","defer","onFocusCallback","stop","apply","focusAfterSearch","_this","lastSearchId","store","getUniqueIDFromEngine","engine","Promise","resolve","focusOnNextTarget","_this2","disableForCurrentSearch","_this3","originalComponentDidRender","componentDidRender","then","isFocusable","getAttribute","hasAttribute","tagName","children","_children","_iterator","_step","child","getFocusableDescendants$","_context2","Array","from","HTMLSlotElement","assignedElements","shadowRoot","push","_toConsumableArray","_createForOfIteratorHelper","s","n","done","delegateYield","t1","e","f","finish","_marked","getFirstFocusableDescendant","SchemaValidationError","_Error","_callSuper","name","_inherits","_wrapNativeSuper","Error","Schema","definition","validate","values","mergedValues","_objectSpread","default","errors","property","error","concat","buildSchemaValidationError","context","join","get","defaultValues","defaultValue","Value","baseConfig","required","isNullOrUndefined","Function","isUndefined","isNull","NumberValue","config","valueValidation","isNumberOrUndefined","isNumber","isNaN","min","max","urlRegex","StringValue","emptyAllowed","url","_this$config","regex","constrainTo","isString","prototype","toString","test","includes","isArray","Button","props","rippleColor","getRippleColorForButtonStyle","style","className","getClassNameForButtonStyle","attributes","class","part","onClick","title","type","role","ariaLabel","ariaExpanded","ariaPressed","ariaChecked","ariaCurrent","ariaControls","ariaHidden","disabled","ref","buttonEl","form","setAttribute","tabIndex","h","onMouseDown","createRipple","color","text","buttonStyle","buildDebouncedQueue","options","actions","intervalId","dequeueAction","action","shift","execute","clearInterval","cancelActionIfQueued","id","filter","enqueue","uniqueId","setInterval","delay","clear","debounce","wait","timer","_len","args","_key","clearTimeout","setTimeout","isIOS","navigator","userAgent","isAppleDevice","isTouchScreen","maxTouchPoints","iosQuirkPresent","audio","Audio","volume","isMacOS","platform","startsWith","hasKeyboard","window","matchMedia","matches","CustomEvent","bubbles","cancelable","composed","listenOnce","listener","addEventListener","_listener","evt","removeEventListener","handleEvent","Hidden","Host","initializeEventName","initializableElements","MissingInterfaceParentError","elementName","applyFocusVisiblePolyfill","once","renderedAttribute","loadedAttribute","InitializeBindings","forceUpdate$1","forceUpdate","bindingsProperty","componentWillLoad","render","componentDidLoad","disconnectedCallback","unsubscribeLanguage","console","getElement","updateLanguage","i18n","on","off","initialize","closest","nodeName","toLowerCase","BindStateToController","controllerProperty","stateProperty","onUpdateCallbackMethod","unsubscribeController","subscribe","state","isConnected","RIPPLE","setPositionRelativeIfStatic","getComputedStyle","position","classList","add","button","parent","currentTarget","existingRipple","getElementsByClassName","remove","forEach","ripple","createElement","backgroundColor","diameter","Math","clientWidth","clientHeight","radius","animationDuration","getAnimationDurationInMilliseconds","radiusPixels","cbrt","_button$getBoundingCl","getBoundingClientRect","top","left","width","height","clientX","clientY","setProperty","prepend","cleanupAnimationOnFinish","_x","_x2","_cleanupAnimationOnFinish","SearchBoxWrapper","getClasses","textArea","TextAreaClearButton","_ref","inputRef","defaultButtonProps","_objectWithoutProperties","_excluded","t","icon","syncTextWithReplica","elem","parentNode","dataset","replicatedValue","SearchTextArea","_ref2","textAreaRef","loading","onInput","onFocus","onBlur","onChange","onKeyDown","onKeyUp","onClear","popup","defaultInputProps","_excluded2","placeholder","rows","shiftKey","preventDefault","collapseTextArea","target","expandTextArea","autocomplete","getPopupAttributes","autocapitalize","autocorrect","activeDescendant","hasSuggestions","expanded","resetReplicaText","promiseTimeout","prom","ms","timeout","_","reject","race","SuggestionManager","ownerSearchBoxProps","suggestions","leftSuggestionElements","rightSuggestionElements","leftPanel","rightPanel","suggestedQuery","queryDataAttribute","suggestionEvents","previousActiveDescendantElement","leftSuggestions","rightSuggestions","triggerSuggestions","executeQuerySuggestion","getSuggestionDelay","clearSuggestions","getSuggestions","getSuggestionElements","allSuggestionElements","hasActiveDescendant","querySelector","onSubmit","updateActiveDescendant","getHost","clickOnActiveElement","activeDescendantElement","click","isRightPanelInFocus","panelInFocus","initializeSuggestions","map","registerSuggestionsFromEvent","stopPropagation","registerSuggestions","Boolean","focusPanel","side","panel","firstElementChild","newValue","contains","updateDescendants","clearSuggestionElements","focusNextValue","nextOrFirstValue","focusValue","scrollActiveDescendantIntoView","updateQueryFromSuggestion","onSuggestionMouseOver","item","thisPanel","query","updateSuggestedQuery","onSuggestionClick","updateOwnerSearchboxQuery","onSelect","focusPreviousValue","firstValue","previousOrLastValue","_executeQuerySuggestion","settled","fulfilledSuggestions","splitSuggestions","defaultSuggestedQuery","allSettled","suggestion","getSuggestionTimeout","sent","j","status","getLogger","warn","isDefault","sort","sortSuggestions","getAndFilterLeftSuggestionElements","find","elementHasQuery","lastElementChild","previousElementSibling","lastValue","a","b","nextElementSibling","scrollIntoView","block","getSearchBoxValue","updateQuery","_updateSuggestedQuery","_callee2","_this4","_callee2$","onSuggestedQueryChange","updateSuggestionElements","isPanelInFocus","escaped","DOMPurify","sanitize","suggestionElements","filterOnDuplicate","Set","suggestionElement","has","elements","renderItems","flat","getNumberOfSuggestionsToDisplay","elementHasNoQuery","slice","newPrevDescendantElement","getPartsForSuggestion","isSelected","getClassesForSuggestion","isHTMLElement","HTMLElement","getContentForSuggestion","content","Fragment","getCommonSearchSuggestionAttributes","_ref5","isButton","index","lastIndex","isDoubleList","ensureContentForRenderedSuggestion","_ref3","renderedSuggestion","replaceChildren","getAriaLabelForRenderedSuggestion","_ref4","contentLabel","_c","innerText","labelWithType","label","interpolation","escapeValue","count","SimpleSearchSuggestion","ButtonSearchSuggestion","_defineProperty","onMouseOver","searchBoxElements","dispatchSearchBoxSuggestionsEvent"],"sourceRoot":""}