{"version":3,"file":"static/js/3852.5d71840e.chunk.js","mappings":"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","sources":["../node_modules/@coveo/atomic/dist/esm/src/components/search/atomic-relevance-inspector/atomic-relevance-inspector.tsx","../node_modules/@coveo/atomic/dist/esm/src/components/search/atomic-relevance-inspector/atomic-relevance-inspector.pcss?tag=atomic-relevance-inspector&encapsulation=shadow","../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/event-utils.ts","../node_modules/@coveo/atomic/dist/esm/src/utils/ripple.ts"],"sourcesContent":["import {PlatformEnvironment, getOrganizationEndpoints} from '@coveo/headless';\nimport {Component, h, Prop, Event, EventEmitter} from '@stencil/core';\nimport {Button} from '../../common/button';\nimport {Bindings} from '../atomic-search-interface/atomic-search-interface';\n\n/**\n * The `atomic-relevance-inspector` component is used internally to offer insight on search page relevance, as well as information to help troubleshoot issues during development.\n */\n@Component({\n tag: 'atomic-relevance-inspector',\n styleUrl: 'atomic-relevance-inspector.pcss',\n shadow: true,\n})\nexport class AtomicRelevanceInspector {\n /**\n * The Atomic interface bindings, namely the headless search engine and i18n instances.\n */\n @Prop() bindings!: Bindings;\n\n @Prop({reflect: true}) open = false;\n\n @Event({eventName: 'atomic/relevanceInspector/close'})\n closeRelevanceInspector: EventEmitter<null> | undefined;\n\n public render() {\n return (\n <atomic-modal\n exportparts=\"footer\"\n isOpen={this.open}\n close={() => {\n this.closeRelevanceInspector?.emit();\n }}\n >\n <p slot=\"header\">Open the relevance inspector</p>\n <p slot=\"body\">\n The Relevance Inspector will open in the Coveo Administration Console.\n </p>\n <div slot=\"footer\" class=\"w-full flex justify-end items-center\">\n <Button\n style=\"outline-primary\"\n class=\"p-2 mr-2\"\n onClick={() => this.closeRelevanceInspector?.emit()}\n >\n Ignore\n </Button>\n <a\n class=\"btn-primary p-2\"\n target=\"_blank\"\n href={this.adminHref}\n onClick={() => this.closeRelevanceInspector?.emit()}\n >\n Open\n </a>\n </div>\n </atomic-modal>\n );\n }\n\n private extractEnvironmentFromPlatformURL(): PlatformEnvironment {\n const {platformUrl} = this.bindings.engine.state.configuration;\n const fallbackEnv = 'prod';\n\n const platformUrlMatch = platformUrl.match(\n /^https:\\/\\/platform(?<env>dev|stg|hipaa)/\n );\n\n if (platformUrlMatch) {\n return (\n (platformUrlMatch.groups?.env as PlatformEnvironment) ?? fallbackEnv\n );\n }\n\n const organizationEndpointMatch = platformUrl.match(\n /^https:\\/\\/[a-z0-9]+\\.org(?<env>dev|stg|hipaa)/\n );\n\n if (organizationEndpointMatch) {\n return (\n (organizationEndpointMatch.groups?.env as PlatformEnvironment) ??\n fallbackEnv\n );\n }\n\n return fallbackEnv;\n }\n\n private get adminHref() {\n const {organizationId} = this.bindings.engine.state.configuration;\n\n const {admin} = getOrganizationEndpoints(\n organizationId,\n this.extractEnvironmentFromPlatformURL() as PlatformEnvironment\n );\n const {searchResponseId} = this.bindings.engine.state.search;\n return `${admin}/admin/#/${organizationId}/search/relevanceInspector/${searchResponseId}`;\n }\n}\n","@import '../../../global/global.pcss';\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<ButtonProps> = (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 <button\n {...attributes}\n onMouseDown={(e) => createRipple(e, {color: rippleColor})}\n >\n {props.text ? <span class=\"truncate\">{props.text}</span> : null}\n {children}\n </button>\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 function buildCustomEvent<T>(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<K extends keyof HTMLElementEventMap>(\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 {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"],"names":["AtomicRelevanceInspector","open","render","_this","h","key","exportparts","isOpen","this","close","_a","closeRelevanceInspector","emit","slot","class","Button","style","onClick","target","href","adminHref","value","extractEnvironmentFromPlatformURL","platformUrl","bindings","engine","state","configuration","fallbackEnv","platformUrlMatch","match","_wrapRegExp","env","_b","groups","organizationEndpointMatch","_d","_c","get","organizationId","admin","Li","searchResponseId","search","concat","props","children","rippleColor","getRippleColorForButtonStyle","className","getClassNameForButtonStyle","attributes","part","title","type","role","ariaLabel","ariaExpanded","ariaPressed","ariaChecked","ariaCurrent","ariaControls","ariaHidden","disabled","ref","buttonEl","form","setAttribute","tabIndex","call","_objectSpread","onMouseDown","e","createRipple","color","text","buttonStyle","buildCustomEvent","name","detail","CustomEvent","bubbles","cancelable","composed","listenOnce","element","listener","options","addEventListener","_listener","evt","removeEventListener","handleEvent","RIPPLE","setPositionRelativeIfStatic","getComputedStyle","position","classList","add","event","button","parent","currentTarget","existingRipple","getElementsByClassName","remove","Array","from","forEach","ripple","document","createElement","backgroundColor","diameter","Math","max","clientWidth","clientHeight","radius","animationDuration","getAnimationDurationInMilliseconds","radiusPixels","cbrt","_button$getBoundingCl","getBoundingClientRect","top","left","width","height","clientX","clientY","setProperty","prepend","cleanupAnimationOnFinish","_x","_x2","_cleanupAnimationOnFinish","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","setTimeout","stop"],"sourceRoot":""}