{"version":3,"file":"TechnicalDownloadSearch-Chunk-06fd6d407e61b5a7bb5d.js","mappings":"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","sources":["webpack://react-app/./node_modules/.pnpm/decode-uri-component@0.4.1/node_modules/decode-uri-component/index.js","webpack://react-app/./node_modules/.pnpm/split-on-first@3.0.0/node_modules/split-on-first/index.js","webpack://react-app/./node_modules/.pnpm/filter-obj@5.1.0/node_modules/filter-obj/index.js","webpack://react-app/./node_modules/.pnpm/query-string@8.2.0/node_modules/query-string/base.js","webpack://react-app/./node_modules/.pnpm/query-string@8.2.0/node_modules/query-string/index.js","webpack://react-app/./components/Shared/src/utility/hooks/useModal.ts","webpack://react-app/./components/Shared/src/utility/config/animations.ts","webpack://react-app/./components/Shared/src/components/atoms/Modal/Portal.tsx","webpack://react-app/./components/Shared/src/utility/helpers/bodyScrollLock.ts","webpack://react-app/./components/Shared/src/utility/hooks/useListingComponentData.ts","webpack://react-app/./components/Shared/src/utility/helpers/throttle.ts","webpack://react-app/./components/Shared/src/components/atoms/Checkbox/Checkbox.tsx","webpack://react-app/./components/Shared/src/components/atoms/IconButton/IconButton.tsx","webpack://react-app/./components/Shared/src/components/atoms/Modal/FullScreenModal.tsx","webpack://react-app/./components/Shared/src/components/atoms/Rows/Rows.tsx","webpack://react-app/./components/Shared/src/components/molecules/ExpandableBanner/ExpandableBanner.tsx","webpack://react-app/./components/Shared/src/utility/helpers/ensureArray.ts","webpack://react-app/./components/Shared/src/utility/helpers/extractDocumentsFromProductsArray.ts","webpack://react-app/./components/Shared/src/utility/helpers/removeObjectKeys.ts","webpack://react-app/./components/Shared/src/components/organisms/TechnicalDownloadSearch/components/DownloadItemRow.tsx","webpack://react-app/./components/Shared/src/components/organisms/TechnicalDownloadSearch/components/FilterSection.tsx","webpack://react-app/./components/Shared/src/components/organisms/TechnicalDownloadSearch/TechnicalDownloadSearch.tsx","webpack://react-app/./components/organisms/TechnicalDownloadSearch/TechnicalDownloadSearchWrapper.tsx","webpack://react-app/./components/Shared/src/components/atoms/Search/HighlightedResult.tsx","webpack://react-app/./components/Shared/src/components/atoms/Search/Search.tsx"],"sourcesContent":["const token = '%[a-f0-9]{2}';\nconst singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nconst multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tconst left = components.slice(0, split);\n\tconst right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch {\n\t\tlet tokens = input.match(singleMatcher) || [];\n\n\t\tfor (let i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tconst replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD',\n\t};\n\n\tlet match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch {\n\t\t\tconst result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tconst entries = Object.keys(replaceMap);\n\n\tfor (const key of entries) {\n\t\t// Replace all decoded components\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nexport default function decodeUriComponent(encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n}\n","export default function splitOnFirst(string, separator) {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (string === '' || separator === '') {\n\t\treturn [];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n}\n","export function includeKeys(object, predicate) {\n\tconst result = {};\n\n\tif (Array.isArray(predicate)) {\n\t\tfor (const key of predicate) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor?.enumerable) {\n\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// `Reflect.ownKeys()` is required to retrieve symbol properties\n\t\tfor (const key of Reflect.ownKeys(object)) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor.enumerable) {\n\t\t\t\tconst value = object[key];\n\t\t\t\tif (predicate(key, value, object)) {\n\t\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function excludeKeys(object, predicate) {\n\tif (Array.isArray(predicate)) {\n\t\tconst set = new Set(predicate);\n\t\treturn includeKeys(object, key => !set.has(key));\n\t}\n\n\treturn includeKeys(object, (key, value, object) => !predicate(key, value, object));\n}\n","import decodeComponent from 'decode-uri-component';\nimport splitOnFirst from 'split-on-first';\nimport {includeKeys} from 'filter-obj';\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\n// eslint-disable-next-line unicorn/prefer-code-point\nconst strictUriEncode = string => encodeURIComponent(string).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result, [encode(key, options), '[', index, ']'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), '[]'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[]=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), ':list='].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), ':list=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator'\n\t\t\t\t? '[]='\n\t\t\t\t: '=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\tencode(key, options),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : (value === null ? value : decode(value, options));\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null\n\t\t\t\t\t? []\n\t\t\t\t\t: value.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], ...arrayValue];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...[accumulator[key]].flat(), value];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nexport function extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nexport function parse(query, options) {\n\toptions = {\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false,\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst returnValue = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn returnValue;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn returnValue;\n\t}\n\n\tfor (const parameter of query.split('&')) {\n\t\tif (parameter === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parameter_ = options.decode ? parameter.replace(/\\+/g, ' ') : parameter;\n\n\t\tlet [key, value] = splitOnFirst(parameter_, '=');\n\n\t\tif (key === undefined) {\n\t\t\tkey = parameter_;\n\t\t}\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : (['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options));\n\t\tformatter(decode(key, options), value, returnValue);\n\t}\n\n\tfor (const [key, value] of Object.entries(returnValue)) {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const [key2, value2] of Object.entries(value)) {\n\t\t\t\tvalue[key2] = parseValue(value2, options);\n\t\t\t}\n\t\t} else {\n\t\t\treturnValue[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn returnValue;\n\t}\n\n\t// TODO: Remove the use of `reduce`.\n\t// eslint-disable-next-line unicorn/no-array-reduce\n\treturn (options.sort === true ? Object.keys(returnValue).sort() : Object.keys(returnValue).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = returnValue[key];\n\t\tresult[key] = Boolean(value) && typeof value === 'object' && !Array.isArray(value) ? keysSorter(value) : value;\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexport function stringify(object, options) {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = {encode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',', ...options};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key]))\n\t\t|| (options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const [key, value] of Object.entries(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = value;\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n}\n\nexport function parseUrl(url, options) {\n\toptions = {\n\t\tdecode: true,\n\t\t...options,\n\t};\n\n\tlet [url_, hash] = splitOnFirst(url, '#');\n\n\tif (url_ === undefined) {\n\t\turl_ = url;\n\t}\n\n\treturn {\n\t\turl: url_?.split('?')?.[0] ?? '',\n\t\tquery: parse(extract(url), options),\n\t\t...(options && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}),\n\t};\n}\n\nexport function stringifyUrl(object, options) {\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true,\n\t\t...options,\n\t};\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = extract(object.url);\n\n\tconst query = {\n\t\t...parse(queryFromUrl, {sort: false}),\n\t\t...object.query,\n\t};\n\n\tlet queryString = stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\tconst urlObjectForFragmentEncode = new URL(url);\n\t\turlObjectForFragmentEncode.hash = object.fragmentIdentifier;\n\t\thash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n}\n\nexport function pick(input, filter, options) {\n\toptions = {\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false,\n\t\t...options,\n\t};\n\n\tconst {url, query, fragmentIdentifier} = parseUrl(input, options);\n\n\treturn stringifyUrl({\n\t\turl,\n\t\tquery: includeKeys(query, filter),\n\t\tfragmentIdentifier,\n\t}, options);\n}\n\nexport function exclude(input, filter, options) {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn pick(input, exclusionFilter, options);\n}\n","import * as queryString from './base.js';\n\nexport default queryString;\n","import { RefObject, useEffect } from 'react';\nimport { usePreventScroll } from 'react-aria';\n\n// A useful hook to lock the scroll position of the rest of a page when a modal is open and provide a focus trap\nconst useModal = (\n isOpen: boolean,\n setIsOpen: (isOpen: boolean) => void,\n targetRef: RefObject\n) => {\n usePreventScroll({ isDisabled: !isOpen });\n\n useEffect(() => {\n if (typeof window === 'undefined' || !targetRef.current) {\n return;\n }\n\n // Retain which element activated the modal\n const activeElement = (document.activeElement ||\n document.body) as HTMLElement;\n const modalElement = targetRef.current;\n\n if (isOpen && modalElement) {\n const focusableElements = modalElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement;\n\n const handleTabKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement?.focus();\n } else if (\n !event.shiftKey &&\n document.activeElement === lastElement\n ) {\n event.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n const handleEscapeKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n // Set focus back to the element which activated the modal\n activeElement?.focus();\n }\n };\n\n modalElement.addEventListener('keydown', handleTabKeyPress);\n modalElement.addEventListener('keydown', handleEscapeKeyPress);\n\n modalElement.focus();\n\n return () => {\n modalElement.removeEventListener('keydown', handleTabKeyPress);\n modalElement.removeEventListener('keydown', handleEscapeKeyPress);\n };\n }\n }, [isOpen, setIsOpen, targetRef]);\n};\n\nexport default useModal;\n","export const slideTransition = {\n duration: 0.8,\n ease: [0.74, 0, 0.19, 1.02],\n};\n\nexport const fadeTransition = {\n delay: 0.15,\n duration: 0.3,\n ease: 'easeIn',\n};\n\nexport const fadeInUp = {\n hidden: {\n opacity: 0,\n y: 50,\n transition: {\n duration: 1,\n ease: [0.22, 1, 0.36, 1],\n },\n },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n duration: 1,\n ease: [0.22, 1, 0.36, 1],\n type: 'spring',\n stiffness: 50,\n damping: 14,\n },\n },\n};\n\nexport const fadeInUpSlow = {\n hidden: {\n opacity: 0,\n y: 50,\n transition: {\n duration: 1,\n ease: [0.4, 0, 0.2, 1],\n },\n },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n duration: 1,\n ease: [0.4, 0, 0.2, 1],\n type: 'spring',\n stiffness: 50,\n damping: 14,\n },\n },\n};\n\nexport const fadeIn = {\n hidden: {\n opacity: 0,\n transition: {\n duration: 0.5,\n ease: 'easeInOut',\n },\n },\n visible: {\n opacity: 1,\n transition: {\n duration: 0.5,\n ease: 'easeInOut',\n },\n },\n};\n","import { PropsWithChildren, useEffect, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface Props {\n readonly mountId: string;\n}\n\nconst Portal = ({ mountId, children }: PropsWithChildren) => {\n const containerElement = useMemo(() => document.createElement('div'), []);\n\n useEffect(() => {\n document.getElementById(mountId)?.appendChild(containerElement);\n\n return () => {\n document.getElementById(mountId)?.removeChild(containerElement);\n };\n }, [mountId, containerElement]);\n\n return createPortal(children, containerElement);\n};\n\nexport default Portal;\n","import throttle from './throttle';\n\nconst bodyScrollLock = (isScrollLocked: boolean) => {\n const documentElementScroll =\n document.documentElement.style.getPropertyValue('--scroll-y');\n const cacheLocator = documentElementScroll || `${window.scrollY}px`;\n\n const throttledSetScrollY = throttle(\n () =>\n document.documentElement.style.setProperty(\n '--scroll-y',\n `${window.scrollY}px`\n ),\n 200\n );\n\n if (!documentElementScroll) {\n window.addEventListener('scroll', throttledSetScrollY);\n }\n\n const { body } = document;\n\n if (isScrollLocked) {\n const scrollY = cacheLocator;\n body.style.scrollbarGutter = 'stable';\n body.style.overflowY = 'hidden';\n body.style.position = 'fixed';\n body.style.top = `-${scrollY}`;\n body.style.left = '0px';\n body.style.right = '0px';\n } else {\n body.style.position = '';\n body.style.overflowY = 'auto';\n const scrollY = body.style.top || cacheLocator;\n body.style.top = '';\n window.scrollTo(0, Math.abs(parseInt(scrollY || '0', 10)));\n }\n};\n\nexport default bodyScrollLock;\n","import queryString from 'query-string';\nimport { useState } from 'react';\n\ninterface IListingComponentState {\n readonly data: TData;\n readonly loading: boolean;\n readonly error: string;\n readonly isInitialData: boolean;\n readonly pushToUrl?: boolean;\n}\n\n// Extend the hook definition with TData for the data structure\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst useListingComponentData = , TData>(\n apiEndpoint: string,\n initialData: TData,\n skipEmptyString = true,\n pushToUrl = true\n) => {\n const [state, setState] = useState>({\n data: initialData,\n loading: false,\n error: '',\n isInitialData: true,\n });\n\n const fetchData = async (formData: TFormData) => {\n try {\n setState({ ...state, loading: true, error: '' });\n const requestQueryString = `?${queryString.stringify(formData, {\n skipEmptyString: skipEmptyString,\n arrayFormat: 'comma',\n })}`;\n\n const response = await fetch(`${apiEndpoint}${requestQueryString}`);\n\n if (!response.ok) {\n throw new Error(`Request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n\n if (pushToUrl) {\n const currentUrl = new URL(window.location.href);\n const searchParams = currentUrl.searchParams;\n\n (Object.keys(formData) as Array).forEach((key) => {\n const value = formData[key];\n searchParams.set(key?.toString(), value?.toString());\n });\n\n window.history.pushState({}, '', currentUrl.href);\n }\n\n setState({ ...state, data, loading: false, isInitialData: false });\n } catch (error) {\n setState({ ...state, loading: false, error: 'Error fetching data' });\n }\n };\n\n return { fetchData, state };\n};\n\nexport default useListingComponentData;\n","function throttle any>(\n func: T,\n limit: number\n): (...args: Parameters) => void {\n let lastFunc: NodeJS.Timeout | undefined;\n let lastRan: number | undefined;\n\n return function (this: ThisParameterType, ...args: Parameters) {\n const context = this;\n\n if (!lastRan) {\n func.apply(context, args);\n lastRan = Date.now();\n } else {\n if (lastFunc) clearTimeout(lastFunc);\n\n lastFunc = setTimeout(function () {\n if (Date.now() - (lastRan ?? 0) >= limit) {\n func.apply(context, args);\n lastRan = Date.now();\n }\n }, limit - (Date.now() - (lastRan ?? 0)));\n }\n };\n}\n\nexport default throttle;\n","import Text from '@atoms/Text/Text';\nimport { ICheckbox } from '@models/ICheckbox';\nimport classNames from 'classnames';\n\nconst Checkbox = ({\n checked,\n dataTestId,\n hideLabelOnMobile,\n indeterminate = false,\n label,\n labelClasses,\n onChange,\n register,\n richTextLabel = false,\n ...props\n}: ICheckbox) => (\n \n onChange?.(e),\n })}\n />\n \n \n \n {richTextLabel ? (\n \n ) : (\n \n {label}\n

\n )}\n \n);\n\nexport default Checkbox;\n","import Icon from '@atoms/Icon/Icon';\nimport Text from '@atoms/Text/Text';\nimport { IIconButton } from '@models/IIconButton';\nimport classNames from 'classnames';\n\nconst IconButton = ({\n className,\n dataTestId,\n href,\n label,\n icon,\n onClick,\n}: IIconButton) => {\n const Component = href ? 'a' : 'button';\n\n return (\n onClick()}\n className={classNames(className, 'tw-flex tw-items-center tw-gap-3')}\n >\n \n {label}\n \n );\n};\n\nexport default IconButton;\n","import Icon from '@atoms/Icon/Icon';\nimport Text from '@atoms/Text/Text';\nimport SiteEnum from '@models/enums/SiteEnum';\nimport { slideTransition } from '@utility/config/animations';\nimport useModal from '@utility/hooks/useModal';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { PropsWithChildren, useRef } from 'react';\nimport Portal from './Portal';\n\nexport interface IFullScreenModal {\n readonly closeLabel?: string;\n readonly isOpen: boolean;\n readonly setIsOpen: (state: boolean) => void;\n readonly site?: SiteEnum;\n readonly title: string;\n}\n\nconst FullScreenModal = ({\n children,\n closeLabel = 'close',\n isOpen,\n setIsOpen,\n site = SiteEnum.B2B,\n title,\n}: PropsWithChildren) => {\n const targetRef = useRef(null);\n\n useModal(isOpen, setIsOpen, targetRef);\n\n return (\n \n {isOpen && (\n \n \n
\n \n {/* {title} */}\n {title}\n setIsOpen(false)}\n >\n \n \n
\n {children}\n \n \n
\n )}\n
\n );\n};\n\nexport default FullScreenModal;\n","import classNames from 'classnames';\nimport { PropsWithChildren } from 'react';\n\ninterface IRows {\n borderTop?: boolean;\n borderBottom?: boolean;\n className?: string;\n}\n\nconst Rows = ({\n children,\n borderTop,\n borderBottom = true,\n className = '',\n}: PropsWithChildren) => {\n const containerClasses = classNames(\n 'tw-divide-y tw-divide-grey-20',\n className,\n {\n 'tw-border-t tw-border-grey-20': borderTop,\n 'tw-border-b tw-border-grey-20': borderBottom,\n }\n );\n\n return
{children}
;\n};\n\nexport default Rows;\n","import Icon from '@atoms/Icon/Icon';\nimport Portal from '@atoms/Modal/Portal';\nimport { IExpandableBanner } from '@models/IExpandableBanner';\nimport { slideTransition } from '@utility/config/animations';\nimport bodyScrollLock from '@utility/helpers/bodyScrollLock';\nimport FocusTrap from 'focus-trap-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { PropsWithChildren, useEffect, useRef, useState } from 'react';\nconst ExpandableBanner = ({\n dataTestId,\n children,\n text,\n}: PropsWithChildren) => {\n const [isOpen, setOpen] = useState(false);\n\n const targetRef = useRef(null);\n\n useEffect(() => {\n if (isOpen && targetRef.current) {\n bodyScrollLock(true);\n }\n\n return () => {\n bodyScrollLock(false);\n };\n }, [isOpen]);\n\n return (\n \n \n
\n \n {\n setOpen(!isOpen);\n }}\n className=\"tw-w-full tw-cursor-pointer tw-bg-grey-30 tw-py-xs tw-text-sm tw-outline-none focus-visible:tw-ring-2 focus-visible:tw-ring-black\"\n aria-expanded={isOpen}\n aria-controls=\"expandable-banner\"\n data-testid={`${dataTestId}-Expandable-Banner-Button`}\n >\n
\n {text}\n \n \n \n
\n \n
\n \n {isOpen && (\n \n \n {children}\n \n \n )}\n \n
\n \n
\n \n
\n );\n};\n\nexport default ExpandableBanner;\n","const ensureArray = (value: string | string[]): string[] => {\n if (typeof value === 'string') {\n return [value];\n }\n return value;\n};\n\nexport default ensureArray;\n","import IProductDatasheets, {\n IProductDatasheet,\n} from '@models/IProductDatasheets';\n\n// The JSON structure for datasheets contains quite a complex structure, hence the need for this function\n// see: productDatasheets.mocks.ts\nconst extractDocumentsFromProductsArray = (products: IProductDatasheets[]) => {\n const extractedDatasheetsArray: IProductDatasheet[] = [];\n\n const extractDatasheetsFromValueArray = (filesArray: IProductDatasheet[]) => {\n filesArray.forEach((item) => {\n extractedDatasheetsArray.push(item);\n });\n };\n\n products.forEach((product) => {\n product.value.forEach((datasheetsTypeSet) => {\n extractDatasheetsFromValueArray(datasheetsTypeSet.value);\n\n if (datasheetsTypeSet.children && datasheetsTypeSet.children.length > 0) {\n datasheetsTypeSet.children.forEach((datasheetChildset) => {\n extractDatasheetsFromValueArray(datasheetChildset.value);\n });\n }\n });\n });\n\n return extractedDatasheetsArray;\n};\n\nexport default extractDocumentsFromProductsArray;\n","const removeObjectKeys = (\n object: Record,\n excludedKeys: string[]\n) => {\n const objectWithKeysRemoved = { ...object }; // Create a copy of the original object\n\n excludedKeys.forEach((key) => {\n if (objectWithKeysRemoved.hasOwnProperty(key)) {\n delete objectWithKeysRemoved[key]; // Delete the property if it exists\n }\n });\n\n return objectWithKeysRemoved;\n};\n\nexport default removeObjectKeys;\n","import Checkbox from '@atoms/Checkbox/Checkbox';\nimport Icon from '@atoms/Icon/Icon';\nimport Text from '@atoms/Text/Text';\nimport IFormComponent from '@models/IFormComponent';\nimport { IProductDatasheet } from '@models/IProductDatasheets';\nimport { ChangeEvent } from 'react';\n\ninterface IDownloadItemRow extends IFormComponent {\n readonly dataTestId: string;\n readonly selectedDocuments: IProductDatasheet[];\n readonly setSelectedDocuments: (newSelectedIds: IProductDatasheet[]) => void;\n readonly removeDocument: (id: number) => void;\n readonly value: IProductDatasheet;\n readonly label: string;\n readonly fileName: string;\n readonly name: string;\n readonly downloadLabel: string;\n readonly addLabel: string;\n readonly fileUrl: string;\n readonly cultureCode: string;\n readonly category: string;\n readonly customerInfo: {\n readonly industryNameForPageLoadTracking: string;\n readonly subIndustryNameForPageLoadTracking: string;\n readonly targetAudienceForPageLoadTracking: string;\n readonly regionForPageLoadTracking: string;\n };\n}\n\nconst DownloadItemRow = ({\n dataTestId,\n selectedDocuments,\n setSelectedDocuments,\n removeDocument,\n value,\n name,\n addLabel,\n fileName,\n fileUrl,\n cultureCode,\n downloadLabel,\n category,\n register,\n customerInfo,\n}: IDownloadItemRow) => {\n const onCheckboxChange = (e: ChangeEvent) => {\n const isChecked = e.target?.checked;\n const document = JSON.parse(e.target.value);\n\n if (isChecked) {\n setSelectedDocuments([...selectedDocuments, document]);\n } else {\n removeDocument(document.id);\n }\n };\n\n return (\n
\n \n {name}\n \n
\n {\n window.dataLayer.push({\n event: 'trackingEvent_file_download',\n event_name_variable: 'file_download',\n trackingEvent_file_download: {\n document_name: fileName,\n language_for_document: cultureCode,\n document_type: category,\n },\n customer_info: {\n user_industry: customerInfo.industryNameForPageLoadTracking,\n user_sub_industry:\n customerInfo.subIndustryNameForPageLoadTracking,\n user_region: customerInfo.regionForPageLoadTracking,\n target_audience: customerInfo.targetAudienceForPageLoadTracking,\n },\n });\n }}\n data-testid={`${dataTestId}-Download-Item-Button`}\n >\n \n \n {downloadLabel}\n \n \n document.id)\n .includes(value.id)}\n dataTestId={`${dataTestId}-Add-Item-Button`}\n onChange={onCheckboxChange}\n name=\"documents\"\n value={JSON.stringify(value)}\n label={addLabel}\n register={register}\n hideLabelOnMobile\n />\n
\n
\n );\n};\n\nexport default DownloadItemRow;\n","import Checkbox from '@atoms/Checkbox/Checkbox';\nimport Select from '@atoms/Select/Select';\nimport Text from '@atoms/Text/Text';\nimport VariantTypeEnum from '@models/enums/VariantTypeEnum';\nimport { IFilter, IFilterGroup } from '@models/IFilterGroup';\nimport IFormComponent from '@models/IFormComponent';\nimport { ChangeEvent } from 'react';\n\ninterface IFilterSection extends IFormComponent {\n readonly countries: (IFilter & { readonly languages?: IFilter[] })[];\n readonly countryPlaceholder: string;\n readonly dataTestId: string;\n readonly disableLanguageSelection: boolean;\n readonly filters: IFilterGroup;\n readonly onCountryChange: (countryItem: IFilter, reset: boolean) => void;\n readonly languagePlaceholder: string;\n readonly languages: IFilter[];\n readonly selectedLanguage: IFilter | null;\n readonly setSelectedLanguage: (newSelectedItem: IFilter | null) => void;\n readonly selectedCountry: IFilter | null;\n readonly setSelectedCountry: (newSelectedItem: IFilter | null) => void;\n readonly selectedFileTypes: string[];\n readonly setSelectedFileTypes: (newSelectedItem: string[]) => void;\n}\n\nconst FilterSection = ({\n countries,\n countryPlaceholder,\n dataTestId,\n disableLanguageSelection,\n filters,\n onCountryChange,\n languagePlaceholder,\n languages,\n register,\n selectedLanguage,\n setSelectedLanguage,\n selectedCountry,\n setSelectedCountry,\n selectedFileTypes,\n setSelectedFileTypes,\n setValue,\n}: IFilterSection) => {\n const onCheckboxChange = (\n e: ChangeEvent,\n filterId: string\n ) => {\n const isChecked = e.target?.checked;\n const prevFileTypes = [...selectedFileTypes];\n const parsedFilterId = String(filters.id);\n if (isChecked) {\n setSelectedFileTypes([...prevFileTypes, filterId]);\n setValue?.(parsedFilterId, [...selectedFileTypes, filterId]);\n } else {\n setSelectedFileTypes(prevFileTypes?.filter((id) => id !== filterId));\n setValue?.(\n parsedFilterId,\n selectedFileTypes.filter((id) => id !== filterId)\n );\n }\n };\n\n return (\n
\n {\n setValue?.('language', '');\n if (item) {\n setSelectedCountry(item);\n onCountryChange(item, true);\n }\n }}\n options={countries}\n placeholder={countryPlaceholder}\n register={register}\n selectedItem={selectedCountry}\n setValue={setValue}\n variant={VariantTypeEnum.Primary}\n />\n \n
\n \n {filters.label}\n \n
\n {filters.options.map((filter, index) => {\n const filterId = String(filter.id);\n return (\n onCheckboxChange(e, filterId)}\n key={filter.id}\n label={filter.label}\n name={filterId}\n register={register}\n value={filter.id}\n />\n );\n })}\n
\n
\n
\n );\n};\n\nexport default FilterSection;\n","import AccordionItem from '@atoms/AccordionItem/AccordionItem';\nimport Button from '@atoms/Button/Button';\nimport Checkbox from '@atoms/Checkbox/Checkbox';\nimport Icon from '@atoms/Icon/Icon';\nimport IconButton from '@atoms/IconButton/IconButton';\nimport LoadingSpinner from '@atoms/LoadingSpinner/LoadingSpinner';\nimport FullScreenModal from '@atoms/Modal/FullScreenModal';\nimport Rows from '@atoms/Rows/Rows';\nimport Search from '@atoms/Search/Search';\nimport Text from '@atoms/Text/Text';\nimport { IFilter } from '@models/IFilterGroup';\nimport IFormValues from '@models/IFormValues';\nimport IProductDatasheets, {\n IDatasheetTypeSetChildren,\n IProductDatasheet,\n} from '@models/IProductDatasheets';\nimport {\n IProductDatasheetsResponse,\n ITechnicalDownloadSearch,\n ITechnicalDownloadSearchFormData,\n} from '@models/ITechnicalDownloadSearch';\nimport BreakpointEnum from '@models/enums/BreakpointEnum';\nimport SizeEnum from '@models/enums/SizeEnum';\nimport Accordion from '@molecules/Accordion/Accordion';\nimport ExpandableBanner from '@molecules/ExpandableBanner/ExpandableBanner';\nimport ListingPlaceholder from '@molecules/ListingPlaceholder/ListingPlaceholder';\nimport { breakpointsAbove } from '@utility/config/breakpoints';\nimport ensureArray from '@utility/helpers/ensureArray';\nimport extractDocumentsFromProductsArray from '@utility/helpers/extractDocumentsFromProductsArray';\nimport removeObjectKeys from '@utility/helpers/removeObjectKeys';\nimport replaceValuesInLabel from '@utility/helpers/replaceValuesInLabel';\nimport useBreakpoint from '@utility/hooks/useBreakpoint';\nimport useListingComponentData from '@utility/hooks/useListingComponentData';\nimport classNames from 'classnames';\nimport queryString from 'query-string';\nimport { useEffect, useState } from 'react';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport DownloadItemRow from './components/DownloadItemRow';\nimport FilterSection from './components/FilterSection';\n\nconst TechnicalDownloadSearchPage = ({\n addAllLabel,\n addLabel,\n apiEndpoint,\n applyLabel,\n closeLabel,\n collapseLabel,\n countries,\n countryPlaceholder,\n currentCulture,\n defaultCountryCode,\n documentsAddedLabel,\n documentsLabel,\n documentsShownLabel,\n downloadAsMultipleLabel,\n downloadAsSingleLabel,\n downloadLabel,\n expandLabel,\n filterLabel,\n filters,\n header,\n industryNameForPageLoadTracking,\n languagePlaceholder,\n loadingLabel,\n noResultsHeader,\n noResultsLabel,\n noResultsText,\n noSearchTermHeader,\n noSearchTermText,\n openLabel,\n regionForPageLoadTracking,\n removeAllLabel,\n removeLabel,\n requiredErrorMessage,\n searchLabel,\n site,\n subIndustryNameForPageLoadTracking,\n subText,\n targetAudienceForPageLoadTracking,\n}: ITechnicalDownloadSearch) => {\n const [expandAll, setExpandAll] = useState(false);\n const [submittedText, setSubmittedText] = useState('');\n const [isMobileFiltersOpen, setIsMobileFiltersOpen] = useState(false);\n const [selectedLanguage, setSelectedLanguage] = useState(\n null\n );\n const [selectedCountry, setSelectedCountry] = useState({\n label: countryPlaceholder,\n id: '',\n });\n const [selectedFileTypes, setSelectedFileTypes] = useState([]);\n const [selectedDocuments, setSelectedDocuments] = useState<\n IProductDatasheet[]\n >([]);\n const [languageOptions, setLanguageOptions] = useState([]);\n const [languagesLoading, setLanguagesLoading] = useState(false);\n\n const breakpoint = useBreakpoint();\n\n const searchEndpoint = `${apiEndpoint}/search`;\n\n const downloadEndpoint = `${apiEndpoint}/download/`;\n\n const dataTestIdPrefix = 'C26-TDS';\n\n // Get params from the current address in the client, but whitelisted by filters to ensure any other values are not converted\n const parsedUrlParams =\n typeof window !== 'undefined' &&\n queryString.parse(\n queryString.pick(window?.location?.search, [\n 'freetext',\n 'location',\n 'language',\n filters.id as string,\n ]),\n { arrayFormat: 'comma' }\n );\n\n const initialSearchText = parsedUrlParams ? parsedUrlParams?.freetext : '';\n\n // Initialise listing component data\n const { fetchData, state } = useListingComponentData<\n ITechnicalDownloadSearchFormData,\n IProductDatasheetsResponse\n >(searchEndpoint, { products: [] });\n\n // Initialise react-hook-form\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitSuccessful },\n watch,\n setValue,\n getValues,\n } = useForm({\n defaultValues: {\n documents: [] as string[],\n ...parsedUrlParams,\n } as IFormValues,\n });\n\n // is add all checkbox checked\n const addAllChecked = watch('addAll');\n\n // country\n const country = watch('location') as string;\n\n // create an array of only documents from products data - they come from the api in a complex nested structure\n const allDocuments = extractDocumentsFromProductsArray(state.data.products);\n\n // create an array of all unique documents - the same documents can be listed in the 'children' for multiple top-level documents\n const allUniqueDocuments: IProductDatasheet[] = allDocuments.filter(\n (value, index, self) =>\n self.findIndex((obj) => obj.id === value.id) === index\n );\n\n // select all documents\n const selectAllDocuments = () => setSelectedDocuments(allDocuments);\n\n // remove a document\n const removeDocument = (documentId: number) =>\n setSelectedDocuments(\n selectedDocuments?.filter((document) => document.id !== documentId)\n );\n\n // remove all documents\n const removeAllDocuments = () => setSelectedDocuments([]);\n\n // Submit handler\n const onSubmit: SubmitHandler = async (data, e) => {\n e?.preventDefault();\n\n await fetchData(\n removeObjectKeys(data, [\n 'addAll',\n ...filters.options.map((filter) => filter.id as string),\n ])\n );\n setSubmittedText(`${data.freetext ?? ''}`);\n setValue('addAll', null);\n };\n\n // A shared function which will get languages and populate the language dropdown accordingly\n const setLanguages = async (countryItem: IFilter, reset: boolean = true) => {\n setSelectedLanguage(null);\n setLanguagesLoading(true);\n const response = await fetch(\n `${apiEndpoint}/country/languages/?countryCode=${countryItem.id}&siteCulture=${currentCulture}`\n );\n const data = (await response.json()) as IFilter[];\n\n setLanguageOptions(data?.length ? data : []);\n setLanguagesLoading(false);\n // This if statement is used for when this function is called in useEffect() to get languages first time around\n if (\n parsedUrlParams &&\n parsedUrlParams.language &&\n parsedUrlParams.location &&\n !reset\n ) {\n const language = data.find(\n (language) => language.id === parsedUrlParams.language\n );\n if (language) {\n setSelectedLanguage(language);\n setValue('language', language.id as string);\n }\n }\n };\n\n // user's default country takes precedence, but if that is not being passed then it will use whatever is in the query param\n useEffect(() => {\n const initialCountryCode =\n (parsedUrlParams && parsedUrlParams.location) || defaultCountryCode;\n\n const initialCountry = countries.find(\n (country) => country.id === initialCountryCode\n );\n\n if (initialCountry) {\n setSelectedCountry(initialCountry);\n setValue('location', initialCountry.id as string);\n setLanguages(initialCountry, false);\n }\n\n // Initial state for file categories\n const initialFileTypes =\n (parsedUrlParams as ITechnicalDownloadSearchFormData)[\n filters.id as string\n ] ?? filters.options.map((option) => option.id as string);\n\n setValue(filters.id as string, ensureArray(initialFileTypes));\n setSelectedFileTypes(ensureArray(initialFileTypes));\n\n // Only do an initial fetch if there is parameters in the query string\n if (\n parsedUrlParams &&\n (parsedUrlParams.freetext || (parsedUrlParams.freetext && initialCountry))\n ) {\n fetchData({\n ...parsedUrlParams,\n location: initialCountry?.id as string,\n });\n }\n }, []);\n\n useEffect(() => {\n document.documentElement.style.overflowY = 'auto';\n }, []);\n\n useEffect(() => {\n if (state.data.products.length) {\n window.dataLayer.push({\n event: 'trackingEvent_search_results',\n event_name_variable: 'search_results',\n trackingEvent_search_results: {\n search_type: 'datasheet',\n search_count: state.data.products.length,\n search_term: getValues('freetext'),\n document_type: selectedFileTypes\n .map((value) => value.toLocaleUpperCase())\n .sort(),\n document_language: selectedLanguage?.label ?? languagePlaceholder,\n document_country: selectedCountry?.label ?? countryPlaceholder,\n },\n });\n }\n }, [state.data.products]);\n\n const filterSectionProps = {\n countries: [{ label: countryPlaceholder, id: '' }, ...countries],\n countryPlaceholder,\n filters,\n onCountryChange: setLanguages,\n languagePlaceholder,\n languages: languageOptions,\n register,\n selectedLanguage,\n setSelectedLanguage,\n selectedCountry,\n setSelectedCountry,\n selectedFileTypes,\n setSelectedFileTypes,\n setValue,\n disableLanguageSelection: !country || languagesLoading,\n };\n\n return (\n
\n \n
\n {header}\n \n {subText}\n \n
\n
\n \n {/*\n ---------------------------------------\n FILTERS MODAL / ACCORDION - MOBILE ONLY\n ---------------------------------------\n */}\n setIsMobileFiltersOpen(true)}\n type=\"button\"\n className=\"tw-flex tw-w-full tw-items-center tw-justify-between tw-rounded-[4px] tw-bg-grey-10 tw-p-xs tw-outline-none xl:tw-hidden\"\n data-testid={`${dataTestIdPrefix}-Mobile-Filter-Button`}\n >\n {filterLabel}\n \n \n \n
\n \n
\n
\n {\n e.preventDefault();\n const submitHandler = handleSubmit(onSubmit);\n submitHandler(e);\n setIsMobileFiltersOpen(false);\n }}\n label={applyLabel}\n dataTestId={`${dataTestIdPrefix}-Mobile-Apply-Filter-Button`}\n />\n
\n \n \n {allDocuments.length === 0\n ? noResultsLabel\n : replaceValuesInLabel(documentsShownLabel, [\n allDocuments.length,\n ])}\n \n
\n {/*\n -------------------------------------\n DESKTOP FILTERS / PRODUCT COUNT LABEL\n -------------------------------------\n */}\n {breakpoint &&\n breakpointsAbove(BreakpointEnum.Large).includes(breakpoint) && (\n
\n \n {allDocuments.length === 0\n ? noResultsLabel\n : replaceValuesInLabel(documentsShownLabel, [\n allUniqueDocuments.length,\n ])}\n \n
\n \n
\n {\n e.preventDefault();\n const submitHandler = handleSubmit(onSubmit);\n submitHandler(e);\n }}\n variant=\"yellow\"\n label={applyLabel}\n dataTestId={`${dataTestIdPrefix}-Desktop-Apply-Filter-Button`}\n />\n
\n )}\n {/*\n -----------------------------------------------------\n MAIN TABLE AREA - INCLUDING SECTIONS FOR ERROR STATES\n -----------------------------------------------------\n */}\n
\n {state.loading && (\n
\n \n
\n )}\n {/* USER HAS NOT ENTERED A SEARCH TERM */}\n {!state.loading &&\n !state.data.products.length &&\n !isSubmitSuccessful && (\n \n )}\n {/* NO PRODUCT FOUND FOR APPLIED FILTERS / TEXT */}\n {!state.loading &&\n isSubmitSuccessful &&\n state.data.products.length === 0 && (\n \n )}\n {/*\n --------------------------------\n MAIN DOCUMENTS TABLE / ACCORDION\n --------------------------------\n */}\n {!state.loading && !!state.data.products.length && (\n <>\n
\n setExpandAll(!expandAll)}\n label={expandAll ? collapseLabel : expandLabel}\n dataTestId={`${dataTestIdPrefix}-${\n expandAll ? 'Collapse-All-Button' : 'Expand-All-Button'\n }`}\n />\n \n addAllChecked ? removeAllDocuments() : selectAllDocuments()\n }\n label={addAllChecked ? removeAllLabel : addAllLabel}\n register={register}\n dataTestId={`${dataTestIdPrefix}-Add-All-Button`}\n />\n
\n \n {state.data.products.map(\n (product: IProductDatasheets, index: number) => (\n \n {product.value.map((datasheetsSet, setIndex: number) => (\n 0\n ? 'tw-ml-xs lg:tw-ml-sm'\n : 'tw-pl-xs lg:tw-pl-sm'\n )}\n >\n \n \n {datasheetsSet.name}\n \n {datasheetsSet.value.map((datasheet) => (\n \n ))}\n \n {!!datasheetsSet.children.length && (\n \n {datasheetsSet.children.map(\n (\n childSet: IDatasheetTypeSetChildren,\n index\n ) => (\n \n \n {childSet.value.map((childDatasheet) => (\n \n ))}\n \n \n )\n )}\n \n )}\n
\n ))}\n \n )\n )}\n \n \n )}\n \n \n {/*\n -----------------\n EXPANDABLE BANNER\n -----------------\n */}\n {selectedDocuments.length > 0 && (\n \n \n
\n
\n doc.id\n )}`}\n download\n label={downloadAsSingleLabel}\n dataTestId={`${dataTestIdPrefix}-Expandable-Banner-Download-Single-Button`}\n />\n doc.id\n )}`}\n download\n modifier=\"outline\"\n variant=\"grey80\"\n label={downloadAsMultipleLabel}\n dataTestId={`${dataTestIdPrefix}-Expandable-Banner-Download-Multiple-Button`}\n />\n
\n
\n
\n \n
\n {documentsLabel}\n removeAllDocuments()}\n data-testid={`${dataTestIdPrefix}-Expandable-Banner-Remove-All-Button`}\n >\n \n {removeAllLabel}\n \n \n
\n {selectedDocuments.map((document, index) => (\n \n \n {`${document.name} (${document.location} - ${document.language})`}\n \n removeDocument(document.id)}\n data-testid={`${dataTestIdPrefix}-Expandable-Banner-Document-Remove-Button-${index}`}\n >\n \n {removeLabel}\n \n \n
\n ))}\n \n \n \n \n )}\n
\n );\n};\n\nexport default TechnicalDownloadSearchPage;\n","import { ITechnicalDownloadSearch } from '@models/ITechnicalDownloadSearch';\nimport SiteEnum from '@models/enums/SiteEnum';\nimport SharedTechnicalDownloadSearch from '@organisms/TechnicalDownloadSearch/TechnicalDownloadSearch';\n\nconst TechnicalDownloadSearch = (props: ITechnicalDownloadSearch) => (\n \n);\n\nexport default TechnicalDownloadSearch;\n","interface IHighlightedResult {\n readonly result: string;\n readonly match: string;\n}\n\nconst HighlightedResult = ({ result, match }: IHighlightedResult) => {\n const matchIndex = result.toLowerCase().indexOf(match.toLowerCase());\n\n const startString = result.substring(0, matchIndex);\n const matchString = result.substring(matchIndex, matchIndex + match.length);\n const endString = result.substring(matchIndex + match.length, result.length);\n\n return (\n <>\n {startString && {startString}}\n {matchString}\n {endString && {endString}}\n \n );\n};\n\nexport default HighlightedResult;\n","import Icon from '@atoms/Icon/Icon';\nimport LoadingSpinner from '@atoms/LoadingSpinner/LoadingSpinner';\nimport Text from '@atoms/Text/Text';\nimport { ErrorMessage } from '@hookform/error-message';\nimport { ISearch } from '@models/ISearch';\nimport SizeEnum from '@models/enums/SizeEnum';\nimport classNames from 'classnames';\nimport { useCombobox } from 'downshift';\nimport { debounce } from 'lodash';\nimport { useEffect, useRef, useState } from 'react';\nimport { useAsyncList } from 'react-stately';\nimport HighlightedResult from './HighlightedResult';\n\nconst Search = ({\n autoCompleteEndpoint,\n autoFocus = false,\n backgroundColor = 'tw-bg-white dark:tw-bg-grey-10',\n dataTestId,\n errors,\n initialValue,\n label,\n large = false,\n list,\n name = '',\n predictiveCharacterLength = 3,\n register,\n requiredErrorMessage,\n searchClasses,\n setValue,\n darkMode = false,\n onAutoCompleteSelect,\n clearSearch,\n ...rest\n}: ISearch) => {\n const [inputValue, setInputValue] = useState('');\n\n const suggestions = useAsyncList({\n async load({ signal, filterText }) {\n if (list) {\n return {\n items: list,\n };\n } else if (filterText && filterText.length >= predictiveCharacterLength) {\n const res = await fetch(`${autoCompleteEndpoint}=${filterText}`, {\n signal,\n });\n\n const json = await res.json();\n\n return {\n items: json,\n };\n }\n\n return {\n items: [],\n };\n },\n });\n\n const { items, isLoading } = suggestions;\n\n const debouncedValueChange = useRef(\n debounce(async ({ inputValue }) => {\n suggestions.setFilterText(inputValue ?? '');\n setValue?.(name ?? '', inputValue ?? '', { shouldValidate: true });\n setInputValue(inputValue ?? '');\n }, 500)\n ).current;\n\n const {\n isOpen,\n getLabelProps,\n getMenuProps,\n getToggleButtonProps,\n getInputProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n reset,\n } = useCombobox({\n onInputValueChange: debouncedValueChange,\n initialInputValue: initialValue ?? '',\n items,\n });\n\n useEffect(() => {\n selectedItem && onAutoCompleteSelect?.(selectedItem);\n }, [selectedItem]);\n\n const showDropdown =\n isOpen && inputValue.length >= predictiveCharacterLength && !!items.length;\n\n const hasErrors = errors && name in errors;\n\n useEffect(() => {\n if (clearSearch && clearSearch > 0) reset();\n }, [clearSearch]);\n\n return (\n
\n \n \n
\n {\n // Workaround to allow form submission when nothing in dropdown is selected\n if (\n e.key !== 'Enter' ||\n highlightedIndex > -1 ||\n !onAutoCompleteSelect\n ) {\n getInputProps()?.onKeyDown?.(e);\n }\n }}\n data-testid={dataTestId}\n />\n {/* tw-hidden input - the input above cannot accept both register() and getInputProps(),\n so we have another input registered and we set its value on line 48 when the shown one changes\n this ensures correct form integration with react-hook-form */}\n \n \n \n \n
\n
\n \n {isLoading ? (\n
\n \n
\n ) : (\n showDropdown &&\n items.map((item, index) => {\n return (\n \n \n \n );\n })\n )}\n \n {requiredErrorMessage && errors && (\n (\n \n {message}\n \n )}\n />\n )}\n \n );\n};\n\nexport default Search;\n"],"names":["token","singleMatcher","RegExp","multiMatcher","decodeComponents","components","split","decodeURIComponent","join","length","left","slice","right","Array","prototype","concat","call","decode","input","tokens","match","i","decodeUriComponent","encodedURI","TypeError","replaceMap","exec","result","entries","Object","keys","key","replace","customDecodeURIComponent","splitOnFirst","string","separator","separatorIndex","indexOf","includeKeys","object","predicate","isArray","descriptor","getOwnPropertyDescriptor","enumerable","defineProperty","Reflect","ownKeys","isNullOrUndefined","value","strictUriEncode","encodeURIComponent","x","charCodeAt","toString","toUpperCase","encodeFragmentIdentifier","Symbol","validateArrayFormatSeparator","encode","options","strict","keysSorter","sort","a","b","Number","map","removeHash","hashStart","parseValue","parseNumbers","isNaN","trim","parseBooleans","toLowerCase","extract","queryStart","parse","query","arrayFormat","arrayFormatSeparator","formatter","accumulator","undefined","includes","isEncodedArray","newValue","item","test","arrayValue","flat","parserForArrayFormat","returnValue","create","parameter","parameter_","key2","value2","reduce","Boolean","stringify","shouldFilter","skipNull","skipEmptyString","index","keyValueSep","encoderForArrayFormat","objectCopy","filter","parseUrl","url","url_","hash","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","queryString","getHash","urlObjectForFragmentEncode","URL","pick","exclude","useModal","isOpen","setIsOpen","targetRef","usePreventScroll","isDisabled","useEffect","window","current","activeElement","document","body","modalElement","focusableElements","querySelectorAll","firstElement","lastElement","handleTabKeyPress","event","shiftKey","preventDefault","focus","handleEscapeKeyPress","addEventListener","removeEventListener","slideTransition","duration","ease","fadeTransition","delay","fadeInUp","hidden","opacity","y","transition","visible","type","stiffness","damping","fadeInUpSlow","fadeIn","_ref","mountId","children","containerElement","useMemo","createElement","getElementById","appendChild","removeChild","createPortal","isScrollLocked","documentElementScroll","documentElement","style","getPropertyValue","cacheLocator","scrollY","throttledSetScrollY","throttle","setProperty","scrollbarGutter","overflowY","position","top","scrollTo","Math","abs","parseInt","apiEndpoint","initialData","arguments","pushToUrl","state","setState","useState","data","loading","error","isInitialData","fetchData","async","requestQueryString","formData","response","fetch","ok","Error","status","json","currentUrl","location","href","searchParams","forEach","set","history","pushState","func","limit","lastFunc","lastRan","_len","args","_key","context","this","clearTimeout","setTimeout","Date","now","apply","checked","dataTestId","hideLabelOnMobile","indeterminate","label","labelClasses","onChange","register","richTextLabel","props","React","className","classNames","_extends","name","e","viewBox","points","Text","variant","dangerouslySetInnerHTML","__html","icon","onClick","Component","Icon","closeLabel","site","SiteEnum","B2B","title","useRef","AnimatePresence","Portal","motion","div","initial","animate","exit","role","ref","tabIndex","id","size","borderTop","borderBottom","containerClasses","text","setOpen","bodyScrollLock","height","rotate","mode","FocusTrap","focusTrapOptions","preventScroll","allowOutsideClick","products","extractedDatasheetsArray","extractDatasheetsFromValueArray","filesArray","push","product","datasheetsTypeSet","datasheetChildset","removeObjectKeys","excludedKeys","objectWithKeysRemoved","hasOwnProperty","selectedDocuments","setSelectedDocuments","removeDocument","addLabel","fileName","fileUrl","cultureCode","downloadLabel","category","customerInfo","target","rel","dataLayer","event_name_variable","trackingEvent_file_download","document_name","language_for_document","document_type","customer_info","user_industry","industryNameForPageLoadTracking","user_sub_industry","subIndustryNameForPageLoadTracking","user_region","regionForPageLoadTracking","target_audience","targetAudienceForPageLoadTracking","Checkbox","isChecked","JSON","countries","countryPlaceholder","disableLanguageSelection","filters","onCountryChange","languagePlaceholder","languages","selectedLanguage","setSelectedLanguage","selectedCountry","setSelectedCountry","selectedFileTypes","setSelectedFileTypes","setValue","Select","displayLabel","onSelectedItemChange","placeholder","selectedItem","VariantTypeEnum","Primary","disabled","filterId","String","onCheckboxChange","prevFileTypes","parsedFilterId","addAllLabel","applyLabel","collapseLabel","currentCulture","defaultCountryCode","documentsAddedLabel","documentsLabel","documentsShownLabel","downloadAsMultipleLabel","downloadAsSingleLabel","expandLabel","filterLabel","header","loadingLabel","noResultsHeader","noResultsLabel","noResultsText","noSearchTermHeader","noSearchTermText","openLabel","removeAllLabel","removeLabel","requiredErrorMessage","searchLabel","subText","expandAll","setExpandAll","submittedText","setSubmittedText","isMobileFiltersOpen","setIsMobileFiltersOpen","languageOptions","setLanguageOptions","languagesLoading","setLanguagesLoading","breakpoint","useBreakpoint","searchEndpoint","downloadEndpoint","dataTestIdPrefix","parsedUrlParams","search","initialSearchText","freetext","useListingComponentData","handleSubmit","formState","errors","isSubmitSuccessful","watch","getValues","useForm","defaultValues","documents","addAllChecked","country","allDocuments","extractDocumentsFromProductsArray","allUniqueDocuments","self","findIndex","obj","documentId","removeAllDocuments","onSubmit","setLanguages","countryItem","reset","language","find","initialCountryCode","initialCountry","initialFileTypes","option","ensureArray","trackingEvent_search_results","search_type","search_count","search_term","toLocaleUpperCase","document_language","document_country","filterSectionProps","Search","autoCompleteEndpoint","initialValue","FullScreenModal","FilterSection","Button","buttonClasses","submitHandler","replaceValuesInLabel","breakpointsAbove","BreakpointEnum","Large","LoadingSpinner","SizeEnum","ListingPlaceholder","iconName","message","Fragment","IconButton","Accordion","AccordionItem","productId","datasheetsSet","setIndex","Rows","datasheet","DownloadItemRow","childSet","childDatasheet","ExpandableBanner","as","doc","download","modifier","SharedTechnicalDownloadSearch","matchIndex","startString","substring","matchString","endString","autoFocus","backgroundColor","large","list","predictiveCharacterLength","searchClasses","darkMode","onAutoCompleteSelect","clearSearch","rest","inputValue","setInputValue","suggestions","useAsyncList","load","_ref2","signal","filterText","items","res","isLoading","debouncedValueChange","debounce","_ref3","setFilterText","shouldValidate","getLabelProps","getMenuProps","getToggleButtonProps","getInputProps","highlightedIndex","getItemProps","useCombobox","onInputValueChange","initialInputValue","showDropdown","hasErrors","htmlFor","onKeyDown","required","Medium","HighlightedResult","ErrorMessage","render","_ref4"],"sourceRoot":""}