{"version":3,"sources":["webpack:///./src/js/react-components/search-box/Input.js","webpack:///./src/js/react-components/search-box/index.js","webpack:///./node_modules/roving-ux-react/dist/esm/index.js","webpack:///./src/js/react-components/coveo-search-results/engine.js"],"names":["Input","controller","placeholder","urlSearchPage","clearButtonLabel","searchButtonLabel","state","setState","useState","roverProps","getTargetProps","useRovingIndex","useEffect","subscribe","redirect","window","location","href","value","handleKeyDown","e","key","className","onChange","updateText","target","onKeyDown","aria-label","suggestions","length","role","map","suggestion","index","rawValue","onClick","selectSuggestion","handleSelectSuggestion","SearchBox","coveoOrganizationId","coveoApiKey","coveoHeadlessSearchEngine","coveoSearchEngine","searchBoxController","buildSearchBox","options","numberOfSuggestions","reducer","action","type","Error","activeIndex","dispatch","initialized","targets","getTargetRef","ref","current","includes","push","tabIndex","focusPrevItem","focusNextItem","onFocus","_a","focus","preventDefault","organizationID","apiKey","debug","buildSearchEngine","configuration","organizationId","accessToken","getSampleSearchEngineConfiguration","loggerOptions","level"],"mappings":"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","file":"48.bundle.js","sourcesContent":["import React, { useState, useEffect } from 'react'\nimport { useRovingIndex } from 'roving-ux-react'\n\nconst Input = ({ controller, placeholder, urlSearchPage, clearButtonLabel, searchButtonLabel }) => {\n const [state, setState] = useState(controller.state)\n const { roverProps, getTargetProps } = useRovingIndex()\n\n useEffect(\n () =>\n controller.subscribe(() => {\n setState(controller.state)\n }),\n []\n )\n\n const redirect = () => (window.location.href = `${urlSearchPage}${state.value}`)\n\n const handleKeyDown = (e) => {\n if (e.key === 'Enter') redirect()\n }\n\n const handleClearSearch = () => {\n controller.updateText('')\n }\n\n const handleInputChange = (e) => {\n controller.updateText(e.target.value)\n }\n\n const handleSelectSuggestion = (value) => {\n controller.selectSuggestion(value)\n redirect()\n }\n\n return (\n <>\n handleKeyDown(e)}\n aria-label={placeholder}\n placeholder={placeholder}\n />\n {state.suggestions?.length > 0 && state.value && (\n \n )}\n {state.value.length > 0 && (\n handleClearSearch()}\n aria-label={clearButtonLabel}\n >\n )}\n redirect()}\n aria-label={searchButtonLabel}\n >\n \n )\n}\n\nexport default Input\n","import React from 'react'\nimport { buildSearchBox } from '@coveo/headless'\nimport { coveoSearchEngine } from '../coveo-search-results/engine'\nimport Input from './Input'\n\nconst SearchBox = ({\n coveoOrganizationId,\n coveoApiKey,\n placeholder,\n urlSearchPage,\n clearButtonLabel,\n searchButtonLabel\n}) => {\n const coveoHeadlessSearchEngine =\n coveoOrganizationId && coveoApiKey\n ? coveoSearchEngine(coveoOrganizationId, coveoApiKey, false)\n : coveoSearchEngine()\n const searchBoxController = buildSearchBox(coveoHeadlessSearchEngine, {\n options: {\n numberOfSuggestions: 5\n }\n })\n\n return (\n <>\n
\n
\n \n
\n
\n \n )\n}\n\nexport default SearchBox\n","import { useCallback, useEffect, useReducer, useRef } from 'react';\nfunction reducer(state, action) {\n switch (action.type) {\n case 'prev':\n return state - 1;\n case 'next':\n return state + 1;\n default:\n throw new Error();\n }\n}\nexport function useRovingIndex() {\n const [activeIndex, dispatch] = useReducer(reducer, 0);\n const initialized = useRef(false);\n const targets = useRef([]);\n // collects all targets during rendering\n const getTargetRef = useCallback((ref) => {\n if (targets.current.includes(ref))\n return;\n targets.current.push(ref);\n }, []);\n const getTargetProps = useCallback((index) => ({\n ref: getTargetRef,\n tabIndex: activeIndex === index ? 0 : -1,\n }), [activeIndex, getTargetRef]);\n const focusPrevItem = useCallback(() => {\n // clamp to 0 and above only\n if (activeIndex - 1 >= 0) {\n dispatch({ type: 'prev' });\n }\n }, [activeIndex]);\n const focusNextItem = useCallback(() => {\n // clamp navigation to target bounds\n if (activeIndex + 1 < targets.current.length) {\n dispatch({ type: 'next' });\n }\n }, [activeIndex]);\n // when container or children get focus\n const onFocus = useCallback(() => {\n var _a;\n (_a = targets.current[activeIndex]) === null || _a === void 0 ? void 0 : _a.focus();\n }, [activeIndex]);\n // watch for arrow keys\n const onKeyDown = useCallback((e) => {\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n e.preventDefault();\n focusNextItem();\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n e.preventDefault();\n focusPrevItem();\n break;\n }\n }, [focusPrevItem, focusNextItem]);\n // watch for new active item and focus it\n useEffect(() => {\n var _a;\n if (initialized.current) {\n (_a = targets.current[activeIndex]) === null || _a === void 0 ? void 0 : _a.focus();\n }\n else {\n initialized.current = true;\n }\n }, [activeIndex]);\n return {\n activeIndex,\n roverProps: { tabIndex: -1, onFocus, onKeyDown },\n getTargetProps,\n };\n}\n//# sourceMappingURL=index.js.map","import { buildSearchEngine, getSampleSearchEngineConfiguration } from '@coveo/headless'\n\nexport function coveoSearchEngine(organizationID, apiKey, debug = true) {\n const engine = buildSearchEngine({\n configuration:\n organizationID && apiKey\n ? {\n organizationId: organizationID,\n accessToken: apiKey\n }\n : getSampleSearchEngineConfiguration(), // for testing purposes\n loggerOptions: debug ? { level: 'info' } : { level: 'error' }\n })\n return engine\n}\n"],"sourceRoot":""}