{"version":3,"file":"survey-BAKsehwP.js","sources":["../../node_modules/dompurify/dist/purify.es.mjs","../../app/javascript/components/surveys/questions/components/shared_styles.ts","../../app/javascript/components/surveys/questions/components/question_label.tsx","../../node_modules/react-id-generator/lib/index.js","../../app/javascript/components/components/base_ui/higher_order_components/questions/shared_components/prompt_with_secondary_text.tsx","../../app/javascript/components/components/base_ui/higher_order_components/questions/use_construct_aria_label.ts","../../app/javascript/components/components/base_ui/higher_order_components/questions/datepicker_question_wrapper.tsx","../../app/javascript/components/surveys/questions/survey_question_date_picker.tsx","../../app/javascript/components/surveys/questions/mentorship_chat_group/student_select.tsx","../../app/javascript/components/surveys/questions/mentorship_chat_group/optional_student_info.tsx","../../app/javascript/components/surveys/questions/components/question_fieldset_legend.tsx","../../app/javascript/components/surveys/questions/question_helpers.tsx","../../app/javascript/components/components/base_ui/higher_order_components/questions/shared_components/shared_form_control_label.tsx","../../app/javascript/components/components/base_ui/higher_order_components/questions/input_question_wrapper.tsx","../../app/javascript/components/components/base_ui/higher_order_components/questions/textarea_question_wrapper.tsx","../../app/javascript/components/components/base_ui/higher_order_components/questions/multiselect_question_wrapper.tsx","../../app/javascript/components/surveys/questions/multi_select.tsx","../../app/javascript/components/surveys/questions/conversation.tsx","../../app/javascript/components/components/data_entry/text_area/index.tsx","../../app/javascript/components/surveys/questions/flags.tsx","../../app/javascript/components/surveys/questions/components/likert.tsx","../../app/javascript/components/surveys/questions/nps.tsx","../../node_modules/baseui/esm/radio/constants.js","../../app/javascript/components/components/base_ui/higher_order_components/questions/select_question_wrapper.tsx","../../app/javascript/components/surveys/questions/select/select_shared_utils.tsx","../../app/javascript/components/surveys/questions/select/deprecated_select.tsx","../../app/javascript/components/surveys/questions/select/survey_question_select.tsx","../../app/javascript/components/components/base_ui/higher_order_components/questions/likert_question_wrapper.tsx","../../app/javascript/components/surveys/questions/likert/use_normalize_survey_question_likert_customizations.ts","../../app/javascript/components/surveys/questions/likert/use_survey_question_likert_validation.ts","../../app/javascript/components/surveys/questions/likert/survey_question_likert.tsx","../../app/javascript/components/surveys/questions/hooks/useRotatingQuestion.ts","../../app/javascript/components/surveys/questions/rotating_likert.tsx","../../app/javascript/components/surveys/questions/rotating_open_response.tsx","../../app/javascript/components/surveys/questions/rotating_career_open_response.tsx","../../app/javascript/components/surveys/questions/survey_question_select_with_select_follow_up.tsx","../../app/javascript/components/surveys/questions/generic/single_select.tsx","../../app/javascript/components/surveys/questions/generic/multi_select.tsx","../../app/javascript/components/surveys/questions/generic/input.tsx","../../app/javascript/components/surveys/questions/generic/generic.tsx","../../app/javascript/components/surveys/questions/counterparts_info.tsx","../../app/javascript/components/surveys/questions/survey_question_number_input.tsx","../../app/javascript/components/surveys/questions/survey_question_open_response.tsx","../../app/javascript/components/surveys/questions/survey_question_text_input.tsx","../../node_modules/downshift/node_modules/react-is/cjs/react-is.production.min.js","../../node_modules/downshift/node_modules/react-is/index.js","../../node_modules/compute-scroll-into-view/dist/index.js","../../node_modules/downshift/dist/downshift.esm.js","../../app/javascript/components/components/layout/chip/index.tsx","../../app/javascript/components/components/data_entry/tags/index.tsx","../../app/javascript/components/components/data_entry/input_autocomplete/index.tsx","../../app/javascript/components/surveys/questions/multi_select_dropdown.tsx","../../app/javascript/components/shared/use_device_type.ts","../../app/javascript/components/surveys/survey.tsx"],"sourcesContent":["/*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE */\n\nconst {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor\n} = Object;\nlet {\n  freeze,\n  seal,\n  create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n  apply,\n  construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n  freeze = function freeze(x) {\n    return x;\n  };\n}\nif (!seal) {\n  seal = function seal(x) {\n    return x;\n  };\n}\nif (!apply) {\n  apply = function apply(fun, thisValue, args) {\n    return fun.apply(thisValue, args);\n  };\n}\nif (!construct) {\n  construct = function construct(Func, args) {\n    return new Func(...args);\n  };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n  return function (thisArg) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    return apply(func, thisArg, args);\n  };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n  return function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return construct(func, args);\n  };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n        element = lcElement;\n      }\n    }\n    set[element] = true;\n  }\n  return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n  return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n  const newObject = create(null);\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (Array.isArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (value && typeof value === 'object' && value.constructor === Object) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n  return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n    object = getPrototypeOf(object);\n  }\n  function fallbackValue() {\n    return null;\n  }\n  return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ARIA_ATTR: ARIA_ATTR,\n  ATTR_WHITESPACE: ATTR_WHITESPACE,\n  CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n  DATA_ATTR: DATA_ATTR,\n  DOCTYPE_NAME: DOCTYPE_NAME,\n  ERB_EXPR: ERB_EXPR,\n  IS_ALLOWED_URI: IS_ALLOWED_URI,\n  IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n  MUSTACHE_EXPR: MUSTACHE_EXPR,\n  TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  attribute: 2,\n  text: 3,\n  cdataSection: 4,\n  entityReference: 5,\n  // Deprecated\n  entityNode: 6,\n  // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9,\n  documentType: 10,\n  documentFragment: 11,\n  notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n  return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n    return null;\n  }\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      }\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n    return null;\n  }\n};\nconst _createHooksMap = function _createHooksMap() {\n  return {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: []\n  };\n};\nfunction createDOMPurify() {\n  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n  const DOMPurify = root => createDOMPurify(root);\n  DOMPurify.version = '3.2.4';\n  DOMPurify.removed = [];\n  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n    return DOMPurify;\n  }\n  let {\n    document\n  } = window;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes\n  } = window;\n  const ElementPrototype = Element.prototype;\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName\n  } = document;\n  const {\n    importNode\n  } = originalDocument;\n  let hooks = _createHooksMap();\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT\n  } = EXPRESSIONS;\n  let {\n    IS_ALLOWED_URI: IS_ALLOWED_URI$1\n  } = EXPRESSIONS;\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n  /*\n   * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: false\n    }\n  }));\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n  let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc = null;\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n  const formElement = document.createElement('form');\n  const isRegexOrFunction = function isRegexOrFunction(testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n  /**\n   * _parseConfig\n   *\n   * @param cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function _parseConfig() {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n    PARSER_MEDIA_TYPE =\n    // eslint-disable-next-line unicorn/prefer-includes\n    SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n    HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, text);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, html$1);\n        addToSet(ALLOWED_ATTR, html);\n      }\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, svg$1);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, svgFilters);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, mathMl$1);\n        addToSet(ALLOWED_ATTR, mathMl);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n    }\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n        ALLOWED_TAGS = clone(ALLOWED_TAGS);\n      }\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n    }\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n    }\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n      }\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n      }\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      }\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n    CONFIG = cfg;\n  };\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n  /**\n   * @param element a DOM element whose namespace is being checked\n   * @returns Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function _checkValidNamespace(element) {\n    let parent = getParentNode(element);\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template'\n      };\n    }\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n      }\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n    }\n    // For XHTML and XML documents that support custom namespaces\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return true;\n    }\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n  /**\n   * _forceRemove\n   *\n   * @param node a DOM node\n   */\n  const _forceRemove = function _forceRemove(node) {\n    arrayPush(DOMPurify.removed, {\n      element: node\n    });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n  /**\n   * _removeAttribute\n   *\n   * @param name an Attribute name\n   * @param element a DOM node\n   */\n  const _removeAttribute = function _removeAttribute(name, element) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: element.getAttributeNode(name),\n        from: element\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: element\n      });\n    }\n    element.removeAttribute(name);\n    // We void attribute values for unremovable \"is\" attributes\n    if (name === 'is') {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(element);\n        } catch (_) {}\n      } else {\n        try {\n          element.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n  /**\n   * _initDocument\n   *\n   * @param dirty - a string of dirty markup\n   * @return a DOM, filled with the dirty markup\n   */\n  const _initDocument = function _initDocument(dirty) {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n    }\n    const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n    const body = doc.body || doc.documentElement;\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n    }\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n    }\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param root The root element or node to start traversing on.\n   * @return The created NodeIterator\n   */\n  const _createNodeIterator = function _createNodeIterator(root) {\n    return createNodeIterator.call(root.ownerDocument || root, root,\n    // eslint-disable-next-line no-bitwise\n    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n  };\n  /**\n   * _isClobbered\n   *\n   * @param element element to check for clobbering attacks\n   * @return true if clobbered, false if safe\n   */\n  const _isClobbered = function _isClobbered(element) {\n    return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n  };\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true is object is a DOM node\n   */\n  const _isNode = function _isNode(value) {\n    return typeof Node === 'function' && value instanceof Node;\n  };\n  function _executeHooks(hooks, currentNode, data) {\n    arrayForEach(hooks, hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   * @param currentNode to check for permission to exist\n   * @return true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function _sanitizeElements(currentNode) {\n    let content = null;\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove element if anything forbids its presence */\n    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n          return false;\n        }\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n          return false;\n        }\n      }\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        content = stringReplace(content, expr, ' ');\n      });\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, {\n          element: currentNode.cloneNode()\n        });\n        currentNode.textContent = content;\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n    return false;\n  };\n  /**\n   * _isValidAttribute\n   *\n   * @param lcTag Lowercase tag name of containing element.\n   * @param lcName Lowercase attribute name.\n   * @param value Attribute value.\n   * @return Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n      return false;\n    }\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n      // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n      // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n      _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n      // Alternative, second condition checks if it's an `is`-attribute, AND\n      // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n      return false;\n    } else ;\n    return true;\n  };\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param tagName name of the tag of the node to sanitize\n   * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param currentNode to sanitize\n   */\n  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n    const {\n      attributes\n    } = currentNode;\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n      forceKeepAttr: undefined\n    };\n    let l = attributes.length;\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const {\n        name,\n        namespaceURI,\n        value: attrValue\n      } = attr;\n      const lcName = transformCaseFunc(name);\n      let value = name === 'value' ? attrValue : stringTrim(attrValue);\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n      value = hookEvent.attrValue;\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n      /* Remove attribute */\n      _removeAttribute(name, currentNode);\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        continue;\n      }\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        continue;\n      }\n      /* Handle attributes that require Trusted Types */\n      if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n        if (namespaceURI) ; else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML':\n              {\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n              }\n            case 'TrustedScriptURL':\n              {\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n              }\n          }\n        }\n      }\n      /* Handle invalid data-* attribute set by try-catching it */\n      try {\n        if (namespaceURI) {\n          currentNode.setAttributeNS(namespaceURI, name, value);\n        } else {\n          /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n          currentNode.setAttribute(name, value);\n        }\n        if (_isClobbered(currentNode)) {\n          _forceRemove(currentNode);\n        } else {\n          arrayPop(DOMPurify.removed);\n        }\n      } catch (_) {}\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n  };\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n    while (shadowNode = shadowIterator.nextNode()) {\n      /* Execute a hook if present */\n      _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty) {\n    let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n      // eslint-disable-next-line unicorn/prefer-includes\n      dirty.indexOf('<') === -1) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      }\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n    /* Now start iterating over the created document */\n    while (currentNode = nodeIterator.nextNode()) {\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n    }\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n      return returnNode;\n    }\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n    /* Serialize doctype if allowed */\n    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n  };\n  DOMPurify.setConfig = function () {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n  DOMPurify.removeHook = function (entryPoint, hookFunction) {\n    if (hookFunction !== undefined) {\n      const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n      return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n    }\n    return arrayPop(hooks[entryPoint]);\n  };\n  DOMPurify.removeHooks = function (entryPoint) {\n    hooks[entryPoint] = [];\n  };\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","import styled from \"styled-components\";\n\nexport const StyledQuestionPrompt = styled.label`\n  a {\n    text-decoration: underline;\n  }\n`;\n\nexport const StyledDescription = styled.span`\n  display: block;\n  font-weight: 500;\n  font-size: 15px;\n  margin-top: 17px;\n  margin-bottom: 12px;\n  color: ${({ theme }) => theme.deprecatedColors.accent.four};\n  a {\n    text-decoration: underline;\n  }\n`;\n\nexport const RequiredMarker = styled.span`\n  color: ${({ theme }) => theme.deprecatedColors.error};\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport DOMPurify from \"dompurify\";\nimport { HiddenAccessibleSpan } from \"../../../components/accessibility/hidden_accessible_span\";\nimport { RequiredMarker, StyledQuestionPrompt, StyledDescription } from \"./shared_styles\";\n\nconst StyledLabel = styled.span`\n  display: inline-block;\n  font-weight: 300;\n  font-size: 18px;\n  margin-bottom: 12px;\n  white-space: pre-wrap;\n`;\n\nexport default function QuestionLabel({\n  label,\n  description,\n  questionIsOptional = false,\n  htmlFor,\n  hideRequiredMarker = false,\n  dataTest,\n  ...rest\n}: {\n  label: string;\n  description?: string;\n  questionIsOptional?: boolean;\n  className?: string;\n  htmlFor?: string;\n  hideRequiredMarker?: boolean;\n  dataTest?: string;\n}) {\n  return (\n    <StyledLabel {...rest}>\n      {/* We're moving away from required indicators as a UX choice, but won't do the refactor en masse. This flag allows us to update some areas incrementally */}\n      {!questionIsOptional && !hideRequiredMarker && (\n        <>\n          <RequiredMarker aria-hidden={true}>* </RequiredMarker>\n          <HiddenAccessibleSpan>Required</HiddenAccessibleSpan>\n        </>\n      )}\n\n      <StyledQuestionPrompt\n        htmlFor={htmlFor}\n        dangerouslySetInnerHTML={{\n          __html: DOMPurify.sanitize(label, { ALLOWED_ATTR: [\"href\", \"aria-label\", \"target\"] }),\n        }}\n      />\n\n      {description && (\n        <StyledDescription\n          dangerouslySetInnerHTML={{\n            __html: DOMPurify.sanitize(description, {\n              ALLOWED_ATTR: [\"href\", \"aria-label\", \"target\"],\n            }),\n          }}\n        ></StyledDescription>\n      )}\n    </StyledLabel>\n  );\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar React = require('react');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar React__default = /*#__PURE__*/_interopDefaultLegacy(React);\n\nvar globalPrefix = \"id\";\nvar lastId = 0;\nfunction nextId(localPrefix) {\n  lastId++;\n  return \"\".concat(localPrefix || globalPrefix).concat(lastId);\n}\nvar resetId = function resetId() {\n  lastId = 0;\n};\nvar setPrefix = function setPrefix(newPrefix) {\n  globalPrefix = newPrefix;\n};\n\nvar getIds = function getIds(count, prefix) {\n  var ids = [];\n\n  for (var i = 0; i < count; i++) {\n    ids.push(nextId(prefix));\n  }\n\n  return ids;\n};\n\nfunction usePrevious(value) {\n  var ref = React__default['default'].useRef();\n  React__default['default'].useEffect(function () {\n    ref.current = value;\n  });\n  return ref.current;\n}\n\nfunction useId() {\n  var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n  var prefix = arguments.length > 1 ? arguments[1] : undefined;\n  var idsListRef = React__default['default'].useRef([]);\n  var prevCount = usePrevious(count);\n  var prevPrefix = usePrevious(prefix);\n\n  if (count !== prevCount || prevPrefix !== prefix) {\n    idsListRef.current = getIds(count, prefix);\n  }\n\n  return idsListRef.current;\n}\n\nexports['default'] = nextId;\nexports.resetId = resetId;\nexports.setPrefix = setPrefix;\nexports.useId = useId;\n","import React from \"react\";\nimport { ParagraphMedium } from \"baseui/typography\";\nimport styled from \"styled-components\";\n\nconst StyledSupplementalQuestionPromptDiv = styled.div`\n  display: flex;\n  white-space: pre-wrap;\n`;\n\nconst StyledParagraphMedium = styled(ParagraphMedium)`\n  font-weight: 500;\n  padding-right: 3px;\n  margin-top: 0;\n  margin-bottom: 0;\n  max-width: 700px;\n`;\n\nconst StyledText = styled(ParagraphMedium)`\n  color: ${({ theme }) => theme.colors.contentTertiary};\n  margin-bottom: ${({ theme }) => theme.sizing.scale300};\n  margin-top: 0;\n  max-width: 700px;\n`;\n\nexport const StyledOptionalText = styled.span`\n  font-weight: ${({ theme }) => theme.typography.ParagraphMedium.fontWeight};\n  color: ${({ theme }) => theme.colors.contentTertiary};\n  margin-bottom: 0;\n  display: inline;\n`;\n\ninterface Props {\n  supplementalQuestionPrompt: string | React.ReactNode;\n  secondaryText?: string;\n  optional: boolean;\n  dataTest?: string;\n}\n\nconst PromptWithSecondaryText = ({\n  supplementalQuestionPrompt,\n  secondaryText,\n  optional,\n  dataTest = \"question-prompt-with-secondary-text\",\n}: Props) => {\n  return (\n    <div>\n      <StyledSupplementalQuestionPromptDiv>\n        <StyledParagraphMedium data-test={`${dataTest}-supplemental-question-prompt`}>\n          {supplementalQuestionPrompt}{\" \"}\n          {optional ? (\n            <StyledOptionalText data-test={`${dataTest}-optional-tag`}>\n              (Optional)\n            </StyledOptionalText>\n          ) : (\n            \"\"\n          )}\n        </StyledParagraphMedium>\n      </StyledSupplementalQuestionPromptDiv>\n      {secondaryText && (\n        <StyledText data-test={`${dataTest}-secondary-text`}>{secondaryText}</StyledText>\n      )}\n    </div>\n  );\n};\n\nexport default PromptWithSecondaryText;\n","export function useConstructAriaLabel() {\n  const constructAriaLabel = (\n    supplementalQuestionPrompt?: string,\n    secondaryText?: string,\n    label?: string,\n    optional = false,\n    maxCharacterLimit?: number\n  ) => {\n    const supplementalQuestionPromptSubstring = supplementalQuestionPrompt\n      ? `${supplementalQuestionPrompt} `\n      : \"\";\n    const secondaryTextSubstring = secondaryText ? `${secondaryText} ` : \"\";\n    const labelSubstring = label ? `${label} ` : \"\";\n    const optionalSubstring = optional ? `(Optional) ` : \"\";\n    const maxCharacterLimitSubString = maxCharacterLimit\n      ? `Max ${maxCharacterLimit} characters. `\n      : \"\";\n\n    return (\n      supplementalQuestionPromptSubstring +\n      optionalSubstring +\n      secondaryTextSubstring +\n      labelSubstring +\n      maxCharacterLimitSubString\n    );\n  };\n\n  return {\n    constructAriaLabel,\n  };\n}\n","import React from \"react\";\nimport nextId from \"react-id-generator\";\n\nimport { Overrides } from \"baseui/overrides\";\n\nimport FormControl from \"../../inputs/form_control\";\nimport PromptWithSecondaryText from \"./shared_components/prompt_with_secondary_text\";\nimport { useConstructAriaLabel } from \"./use_construct_aria_label\";\nimport { Datepicker, DatepickerProps } from \"../../date_and_time/datepicker\";\nimport { Theme } from \"../../../../styling/baseui_theme\";\nimport { DatepickerOverrides } from \"baseui/datepicker\";\n\nconst DATEPICKER_NAMESPACE = \"datepicker-input\";\nexport interface DatepickerQuestionWrapperProps extends Omit<DatepickerProps, \"inputAriaLabel\"> {\n  supplementalQuestionPrompt: string;\n  secondaryText?: string;\n  label?: string;\n  optional: boolean;\n  placeholder?: string;\n  errorMessage?: string;\n  overrides?: Overrides<DatepickerOverrides>;\n}\n\nconst formControlOverrides = {\n  Label: {\n    style: ({ $theme }: { $theme: Theme }) => ({\n      fontSize: $theme.typography.LabelSmall.fontSize,\n      marginBottom: 0,\n    }),\n  },\n};\n\nconst DatepickerQuestionWrapper = ({\n  supplementalQuestionPrompt,\n  secondaryText,\n  label,\n  optional,\n  errorMessage,\n  placeholder,\n  dataTest,\n  ...datepickerProps\n}: DatepickerQuestionWrapperProps) => {\n  const { constructAriaLabel } = useConstructAriaLabel();\n\n  const datepickerId = nextId(DATEPICKER_NAMESPACE);\n\n  return (\n    <div>\n      {supplementalQuestionPrompt && (\n        <PromptWithSecondaryText\n          supplementalQuestionPrompt={supplementalQuestionPrompt}\n          secondaryText={secondaryText}\n          optional={optional}\n          dataTest={dataTest}\n        />\n      )}\n      <FormControl\n        label=\"Date\"\n        htmlFor={datepickerId}\n        error={errorMessage}\n        overrides={formControlOverrides}\n        dataTest={`${dataTest}-form-control`}\n      >\n        <Datepicker\n          {...datepickerProps}\n          inputAriaLabel={constructAriaLabel(\n            supplementalQuestionPrompt,\n            secondaryText,\n            label,\n            optional,\n          )}\n          placeholder={placeholder || \"yyyy/mm/dd\"}\n          dataTest={dataTest}\n          error={!!errorMessage}\n        />\n      </FormControl>\n    </div>\n  );\n};\n\nexport default DatepickerQuestionWrapper;\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport QuestionLabel from \"./components/question_label\";\nimport { QuestionProps } from \"../survey\";\nimport DatePickerComponent from \"../../components/data_entry/date_picker\";\nimport nextId from \"react-id-generator\";\nimport DatepickerQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/datepicker_question_wrapper\";\n\nexport type Answer = string;\nexport interface Customizations {\n  prompt: string;\n  description?: string;\n  optional?: boolean;\n  minDateDaysRelativeToToday?: number;\n  maxDateDaysRelativeToToday?: number;\n}\n\nconst StyledDatePicker = styled.div`\n  text-transform: none;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n\n  .calendar {\n    margin-top: ${({ theme }) => theme.sizing.scale300};\n  }\n`;\n\nexport default function SurveyQuestionDatePicker({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, Customizations>) {\n  const label = customizations.prompt;\n  const id = nextId();\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const description = customizations.description;\n\n  // set up for limiting datepicker by a range\n  let minDate: Date | undefined;\n  if (typeof customizations.minDateDaysRelativeToToday === \"number\") {\n    minDate = new Date();\n    minDate.setDate(minDate.getDate() + customizations.minDateDaysRelativeToToday);\n    minDate.setHours(0, 0, 0, 0);\n  }\n\n  let maxDate: Date | undefined;\n  if (typeof customizations.maxDateDaysRelativeToToday === \"number\") {\n    maxDate = new Date();\n    maxDate.setDate(maxDate.getDate() + customizations.maxDateDaysRelativeToToday);\n    maxDate.setHours(0, 0, 0, 0);\n  }\n\n  const date =\n    // if a day is unselected, the answer will be \"\"\n    currentAnswer && currentAnswer.length > 0 ? new Date(currentAnswer) : undefined;\n\n  const answerIsValidRequired = optional || date !== undefined;\n\n  // TODO: remove showSurveyRefresh later when we remove deprecatedDatepicker - avoiding\n  // checking the date validation here because the old component does not support it\n  const answerIsValidDate =\n    !showRefreshedComponents ||\n    (date !== undefined &&\n      (minDate === undefined || date >= minDate) &&\n      (maxDate === undefined || date <= maxDate));\n\n  useEffect(() => {\n    setAbleToSubmit(answerIsValidRequired && answerIsValidDate);\n  }, [answerIsValidRequired, answerIsValidDate, setAbleToSubmit]);\n\n  const [datepickerErrorMessage, setDatepickerErrorMessage] = useState<string | undefined>(\n    undefined,\n  );\n  useEffect(() => {\n    const requiredErrorMessage = \"Please complete the required field.\";\n    const dateErrorMessage =\n      minDate && maxDate\n        ? `Please select a date between ${minDate.toLocaleDateString()} and ${maxDate.toLocaleDateString()}.`\n        : minDate\n          ? `Please select a date on or after ${minDate.toLocaleDateString()}.`\n          : maxDate\n            ? `Please select a date on or before ${maxDate.toLocaleDateString()}.`\n            : undefined;\n\n    if (showValidation) {\n      setDatepickerErrorMessage(\n        !answerIsValidRequired\n          ? requiredErrorMessage\n          : !answerIsValidDate\n            ? dateErrorMessage\n            : undefined,\n      );\n    }\n  }, [showValidation, answerIsValidRequired, answerIsValidDate, minDate, maxDate]);\n\n  const deprecatedDatepicker = (\n    <StyledDatePicker>\n      <QuestionLabel\n        label={label}\n        htmlFor={id}\n        description={description}\n        data-test=\"datepicker-question-label\"\n      />\n      <DatePickerComponent\n        id={id}\n        className=\"calendar\"\n        selectedDays={[date]}\n        // eslint-disable-next-line\n        // @ts-ignore this is a problem w/ the react-day-picker types\n        onDayClick={(day: Date, { selected }: { selected: boolean }) =>\n          updateAnswer(selected ? \"\" : day.toString())\n        }\n        error={datepickerErrorMessage}\n      />\n    </StyledDatePicker>\n  );\n\n  const datepicker = (\n    <DatepickerQuestionWrapper\n      supplementalQuestionPrompt={label}\n      secondaryText={description}\n      label={label}\n      optional={optional}\n      errorMessage={datepickerErrorMessage}\n      dataTest={\"datepicker-question\"}\n      minDate={minDate}\n      maxDate={maxDate}\n      value={[date]}\n      onChange={(newValue) => updateAnswer(newValue.date ? newValue.date.toString() : \"\")}\n    />\n  );\n\n  return showRefreshedComponents ? datepicker : deprecatedDatepicker;\n}\n","import React, { useContext, useEffect } from \"react\";\nimport { gql } from \"@urql/core\";\nimport { SurveyContext, QuestionProps } from \"../../survey\";\nimport Checkbox from \"../../../components/data_entry/checkbox\";\nimport { MentorChatGroupsDocument } from \"../../../generated/graphql\";\nimport QuestionLabel from \"../components/question_label\";\nimport nextId from \"react-id-generator\";\nimport { useQuery } from \"urql\";\nimport { captureError } from \"../../../../utils/capture_error\";\n\ngql`\n  query MentorChatGroups($mentorId: ID!) {\n    mentor(id: $mentorId) {\n      id\n      mentorships {\n        id\n        isMatched\n        chatGroup {\n          id\n        }\n        student {\n          id\n          user {\n            id\n            firstName\n            lastName\n          }\n        }\n      }\n    }\n  }\n`;\n\nexport default function MentorChatGroupStudentSelect({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n}: QuestionProps<string[], { prompt: string }>) {\n  const { participantId, mentorshipChatGroupId } = useContext(SurveyContext);\n\n  const [{ fetching, error, data }] = useQuery({\n    query: MentorChatGroupsDocument,\n    variables: { mentorId: participantId },\n  });\n\n  // an empty array is still valid here, it just means the user selected \"none\"\n  const answerIsValid = typeof currentAnswer !== \"undefined\";\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  if (fetching || data === null) return <div>Loading...</div>;\n  if (error || !data) {\n    const graphQLErrorsForAPM = error?.graphQLErrors?.join(\"; \") ?? \"\";\n    captureError(new Error(`Error fetching useMentorChatGroupsQuery: ${graphQLErrorsForAPM}`));\n    return null;\n  }\n\n  const mentorships = data.mentor.mentorships;\n\n  if (!mentorshipChatGroupId) {\n    throw new Error(\"Can only use as part of a mentorship group survey\");\n  }\n\n  const matchedMentorshipsInChatGroup = mentorships.filter(\n    (mentorship) =>\n      mentorship.chatGroup &&\n      mentorship.chatGroup.id === mentorshipChatGroupId &&\n      mentorship.isMatched,\n  );\n\n  const label = customizations.prompt;\n  const id = \"student-select-\" + nextId();\n\n  const selectedStudentIds = currentAnswer ? currentAnswer : [];\n  return (\n    <div className=\"student-select\">\n      <QuestionLabel label={label} htmlFor={id} />\n      {matchedMentorshipsInChatGroup.map((mentorship) => {\n        const student = mentorship.student;\n        const user = student.user;\n\n        return (\n          <Checkbox\n            htmlFor={id}\n            key={student.id}\n            dataTest=\"student-select\"\n            label={`${user.firstName} ${user.lastName}`}\n            checked={selectedStudentIds.includes(student.id)}\n            onChange={() => {\n              const index = selectedStudentIds.indexOf(student.id);\n              if (index > -1) {\n                updateAnswer([\n                  ...selectedStudentIds.slice(0, index),\n                  ...selectedStudentIds.slice(index + 1),\n                ]);\n              } else {\n                updateAnswer([...selectedStudentIds, student.id]);\n              }\n            }}\n          />\n        );\n      })}\n      <Checkbox\n        label=\"None\"\n        htmlFor={id}\n        checked={\n          !!(\n            currentAnswer /* we don't want this checked if currentAnswer isn't set */ &&\n            currentAnswer.length === 0\n          )\n        }\n        onChange={() => {\n          updateAnswer([]);\n        }}\n      />\n    </div>\n  );\n}\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { SurveyContext, QuestionProps } from \"../../survey\";\nimport Checkbox from \"../../../components/data_entry/checkbox\";\nimport Input from \"../../../components/data_entry/input\";\nimport { RadioGroup, RadioButton } from \"../../../components/data_entry/radio\";\nimport { MentorChatGroupsDocument } from \"../../../generated/graphql\";\nimport styled from \"styled-components\";\nimport QuestionLabel from \"../components/question_label\";\nimport nextId from \"react-id-generator\";\nimport { useQuery } from \"urql\";\nimport { captureError } from \"../../../../utils/capture_error\";\n\ntype answer = false | { studentId: string; info: string }[];\n\nconst StyledStudentSelect = styled.div`\n  margin-top: 12px;\n`;\n\nexport default function MentorChatGroupOptionalStudentInfo({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n}: QuestionProps<answer, { yesNoPrompt: string; selectPrompt: string }>) {\n  const { participantId, mentorshipChatGroupId } = useContext(SurveyContext);\n\n  // this is a temporary data store for input student info. when the user un-checks\n  // a student, the info gets removed from currentAnswer. We want to make sure they\n  // don't have to re-type everything if they re-check the student again, so we save\n  // it here just in case\n  const [savedStudentInfo, setSavedStudentInfo] = useState<{\n    [studentId: string]: string;\n  }>({});\n\n  const [{ fetching, error, data }] = useQuery({\n    query: MentorChatGroupsDocument,\n    variables: { mentorId: participantId },\n  });\n\n  const answerIsValid = typeof currentAnswer !== \"undefined\";\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  if (fetching || data === null) return <div>Loading...</div>;\n  if (error || !data) {\n    const graphQLErrorsForAPM = error?.graphQLErrors?.join(\"; \") ?? \"\";\n    captureError(new Error(`Error fetching useMentorChatGroupsQuery: ${graphQLErrorsForAPM}`));\n    return null;\n  }\n\n  const mentorships = data.mentor.mentorships;\n\n  if (!mentorshipChatGroupId) {\n    throw new Error(\"Can only use as part of a mentorship group survey\");\n  }\n  const mentorshipsInChatGroup = mentorships.filter(\n    (mentorship) => mentorship.chatGroup && mentorship.chatGroup.id === mentorshipChatGroupId,\n  );\n\n  const yesNoLabel = customizations.yesNoPrompt;\n  const selectLabel = customizations.selectPrompt;\n  const id = nextId();\n\n  return (\n    <div className=\"optional-student-info\">\n      <QuestionLabel label={yesNoLabel} htmlFor={id} />\n      <RadioGroup\n        name=\"recordStudentInfo\"\n        value={\n          // if the user hasn't provided an answer yet, don't select anything\n          typeof currentAnswer === \"undefined\" ? \"\" : currentAnswer ? \"yes\" : \"no\"\n        }\n        onChange={(newValue) => updateAnswer(newValue === \"yes\" ? [] : false)}\n      >\n        <RadioButton\n          data-test=\"optional-student-info-yes\"\n          key=\"yes\"\n          label=\"Yes\"\n          value=\"yes\"\n          htmlFor={id}\n        />\n        <RadioButton key=\"no\" label=\"No\" value=\"no\" htmlFor={id} />\n      </RadioGroup>\n      {currentAnswer && (\n        <StyledStudentSelect>\n          <QuestionLabel label={selectLabel} htmlFor={id} />\n          {mentorshipsInChatGroup.map((mentorship) => {\n            const student = mentorship.student;\n            const user = student.user;\n\n            const answerIndex = currentAnswer.findIndex(\n              (answer) => answer.studentId === student.id,\n            );\n            return (\n              <div key={student.id}>\n                <Checkbox\n                  dataTest=\"optional-student-info-student-select\"\n                  label={`${user.firstName} ${user.lastName}`}\n                  checked={currentAnswer.map((student) => student.studentId).includes(student.id)}\n                  htmlFor={id}\n                  onChange={() => {\n                    if (answerIndex > -1) {\n                      updateAnswer([\n                        ...currentAnswer.slice(0, answerIndex),\n                        ...currentAnswer.slice(answerIndex + 1),\n                      ]);\n                    } else {\n                      updateAnswer([\n                        ...currentAnswer,\n                        {\n                          studentId: student.id,\n                          info: savedStudentInfo[student.id] ? savedStudentInfo[student.id] : \"\",\n                        },\n                      ]);\n                    }\n                  }}\n                />\n                {answerIndex > -1 && (\n                  <Input\n                    data-test=\"optional-student-info-text\"\n                    type=\"text\"\n                    id={id}\n                    value={currentAnswer[answerIndex].info}\n                    onChange={({ currentTarget: { value: newInfo } }) => {\n                      setSavedStudentInfo({\n                        ...savedStudentInfo,\n                        [student.id]: newInfo,\n                      });\n                      updateAnswer([\n                        ...currentAnswer.slice(0, answerIndex),\n                        { ...currentAnswer[answerIndex], info: newInfo },\n                        ...currentAnswer.slice(answerIndex + 1),\n                      ]);\n                    }}\n                  />\n                )}\n              </div>\n            );\n          })}\n        </StyledStudentSelect>\n      )}\n    </div>\n  );\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { HiddenAccessibleSpan } from \"../../../components/accessibility/hidden_accessible_span\";\nimport DOMPurify from \"dompurify\";\nimport { RequiredMarker, StyledQuestionPrompt, StyledDescription } from \"./shared_styles\";\n\nconst StyledLegend = styled.legend`\n  display: inline-block;\n  font-weight: 300;\n  font-size: 18px;\n  margin-bottom: 12px;\n  white-space: pre-wrap;\n`;\n\nexport const StyledFieldset = styled.fieldset`\n  border: none;\n  padding: 0;\n`;\n\nexport default function QuestionFieldsetLegend({\n  legend,\n  description,\n  questionIsOptional = false,\n  hideRequiredMarker = false,\n  dataTest,\n  htmlFor,\n  ...rest\n}: {\n  legend: string;\n  description?: string;\n  questionIsOptional?: boolean;\n  className?: string;\n  hideRequiredMarker?: boolean;\n  dataTest?: string;\n  htmlFor?: string;\n}) {\n  return (\n    <>\n      {/* We're moving away from required indicators as a UX choice, but won't do the refactor en masse. This flag allows us to update some areas incrementally */}\n      <StyledLegend {...rest}>\n        {!questionIsOptional && !hideRequiredMarker && (\n          <>\n            <RequiredMarker aria-hidden={true}>* </RequiredMarker>\n            <HiddenAccessibleSpan>Required</HiddenAccessibleSpan>\n          </>\n        )}\n        <StyledQuestionPrompt\n          htmlFor={htmlFor}\n          dangerouslySetInnerHTML={{\n            __html: DOMPurify.sanitize(legend, { ALLOWED_ATTR: [\"href\", \"aria-label\", \"target\"] }),\n          }}\n        />\n      </StyledLegend>\n\n      {description && (\n        <StyledDescription\n          dangerouslySetInnerHTML={{\n            __html: DOMPurify.sanitize(description, {\n              ALLOWED_ATTR: [\"href\", \"aria-label\", \"target\"],\n            }),\n          }}\n        ></StyledDescription>\n      )}\n    </>\n  );\n}\n","// This file is used to help us with Matching Survey migrations into the survey framework.\n// we need backwards compatibility for our existing question templates, but ideally we integrate\n// the two in a better way going forward.\n\ninterface Option {\n  text: string;\n  image?: string;\n  oid: string;\n  value?: boolean;\n}\n\ninterface SurveyQuestionSelectOption {\n  id: string;\n  label: string;\n}\n\ninterface SurveyQuestionSelectOtherOption {\n  id: string | undefined;\n  label: string | undefined;\n}\n\nfunction getOptionText(option: string | Option | undefined): string | undefined {\n  if (option) {\n    return typeof option === \"string\" ? option : option.text;\n  }\n  return undefined;\n}\nfunction getOptionLabel(\n  option: string | SurveyQuestionSelectOption | undefined,\n): string | undefined {\n  if (option) {\n    return typeof option === \"string\" ? option : option.label;\n  }\n  return undefined;\n}\n\nfunction getOptionOid(option: string | Option | undefined): string | undefined {\n  if (option) {\n    return typeof option === \"string\" ? option : option.oid;\n  }\n  return undefined;\n}\n\nfunction getOptionObjectFromText(\n  optionText: string,\n  optionList: (string | Option)[],\n): string | Option | undefined {\n  return optionList.find(\n    (option) => (typeof option === \"string\" ? option : option.text) === optionText,\n  );\n}\n\nfunction selectedOptionPresent(selectedOption: string | Option | undefined): boolean {\n  if (typeof selectedOption === \"string\") {\n    return selectedOption.length > 0;\n  } else {\n    return !!selectedOption?.oid;\n  }\n}\n\nexport {\n  getOptionText,\n  getOptionLabel,\n  getOptionObjectFromText,\n  getOptionOid,\n  selectedOptionPresent,\n};\nexport type { Option, SurveyQuestionSelectOption, SurveyQuestionSelectOtherOption };\n","import styled from \"styled-components\";\nimport React from \"react\";\nimport { StyledOptionalText } from \"./prompt_with_secondary_text\";\nimport { ParagraphMedium } from \"baseui/typography\";\n\nconst QuestionLabel = styled(\"div\")`\n  // Respect any line breaks in the label\n  white-space: pre-wrap;\n  max-width: 700px;\n`;\n\nconst StyledSecondaryText = styled(ParagraphMedium)`\n  color: ${({ theme }) => theme.colors.contentTertiary};\n  margin-top: ${({ theme }) => theme.sizing.scale100};\n  margin-bottom: 0;\n  max-width: 700px;\n`;\n\nexport const getFormControlLabel = (\n  supplementalQuestionPrompt: string | undefined,\n  label: string | undefined,\n  optional: boolean,\n  secondaryText: string | undefined,\n  dataTest: string | undefined,\n) => {\n  // Display secondaryText under the main question label when supplementalQuestionPrompt is not present\n  const styledSecondaryLabel = !supplementalQuestionPrompt && secondaryText && (\n    <StyledSecondaryText data-test={`${dataTest}-secondary-text`}>\n      {secondaryText}\n    </StyledSecondaryText>\n  );\n\n  // We only want to show the optional text in the label if there is no supplemental question prompt and if the question is optional.\n  // If there IS a supplemental question prompt AND it's optional, the optional text will be shown in the supplemental question prompt component instead of the traditional label prop.\n  return !supplementalQuestionPrompt && optional ? (\n    <>\n      <QuestionLabel data-test={`${dataTest}-label`}>\n        {label} <StyledOptionalText>(Optional)</StyledOptionalText>\n      </QuestionLabel>\n      {styledSecondaryLabel}\n    </>\n  ) : label ? (\n    <>\n      <QuestionLabel data-test={`${dataTest}-label`}>{label}</QuestionLabel>\n      {styledSecondaryLabel}\n    </>\n  ) : null;\n};\n","import React from \"react\";\nimport nextId from \"react-id-generator\";\nimport { mergeOverrides } from \"baseui\";\nimport { Overrides } from \"baseui/overrides\";\nimport { FormControlOverrides } from \"baseui/form-control\";\n\nimport FormControl from \"../../inputs/form_control\";\nimport Input, { InputOverrides, InputProps } from \"../../inputs/input\";\nimport PromptWithSecondaryText from \"./shared_components/prompt_with_secondary_text\";\nimport { useConstructAriaLabel } from \"./use_construct_aria_label\";\nimport { getFormControlLabel } from \"./shared_components/shared_form_control_label\";\nimport { captureError } from \"../../../../../utils/capture_error\";\n\nconst INPUT_AREA_NAMESPACE = \"textarea-input\";\n\nexport interface InputQuestionWrapperProps extends InputProps {\n  label?: string;\n  secondaryText?: string;\n  supplementalQuestionPrompt?: string;\n  optional: boolean;\n  placeholder?: string;\n  errorMessage?: string;\n  overrides?: Overrides<InputOverrides>;\n  ariaLabel?: string; // use this if the supplemental question prompt, secondary text, and label cannot be provided, such as in the case of a follow up input to an \"other\" option\n}\n\nconst inputOverrides = (maxCharacterCount?: number): Overrides<InputOverrides> => ({\n  Root: {\n    style: ({ $theme }) => ({\n      marginTop:\n        // If we have a character counter, reduce the top margin.\n        maxCharacterCount ? `-${$theme.sizing.scale300}` : `0`,\n      maxWidth: \"620px\",\n    }),\n  },\n});\n\nconst formControlOverrides = (): Overrides<FormControlOverrides> => ({\n  Label: {\n    style: () => ({\n      marginBottom: \"0\",\n    }),\n  },\n});\n\nconst InputQuestionWrapper = ({\n  supplementalQuestionPrompt,\n  secondaryText,\n  label,\n  optional,\n  placeholder,\n  errorMessage,\n  overrides,\n  ariaLabel,\n  dataTest,\n  ...inputProps\n}: InputQuestionWrapperProps) => {\n  const { constructAriaLabel } = useConstructAriaLabel();\n\n  if (overrides) {\n    overrides = mergeOverrides(inputOverrides(inputProps.maxCharacterCount), overrides);\n  } else {\n    overrides = inputOverrides(inputProps.maxCharacterCount);\n  }\n\n  const inputId = nextId(INPUT_AREA_NAMESPACE);\n\n  if (\n    !supplementalQuestionPrompt &&\n    !secondaryText &&\n    !label &&\n    !ariaLabel &&\n    !inputProps[\"aria-label\"]\n  ) {\n    captureError(\n      \"Error! If input question wrapper does not have supplemental question prompt, secondary text, label, or aria-label, it must have an ariaLabel prop, otherwise the input is inaccessible for assistive technologies.\",\n    );\n  }\n\n  return (\n    <div>\n      {supplementalQuestionPrompt && (\n        <PromptWithSecondaryText\n          supplementalQuestionPrompt={supplementalQuestionPrompt}\n          secondaryText={secondaryText}\n          optional={optional}\n          dataTest={dataTest}\n        />\n      )}\n\n      <FormControl\n        label={getFormControlLabel(\n          supplementalQuestionPrompt,\n          label,\n          optional,\n          secondaryText,\n          dataTest,\n        )}\n        htmlFor={inputId}\n        error={errorMessage}\n        overrides={formControlOverrides()}\n        dataTest={`${dataTest}-form-control`}\n      >\n        <Input\n          currentCharacterCount={inputProps.currentCharacterCount}\n          maxCharacterCount={inputProps.maxCharacterCount}\n          aria-label={\n            ariaLabel ??\n            constructAriaLabel(\n              supplementalQuestionPrompt,\n              secondaryText,\n              label,\n              optional,\n              inputProps.maxCharacterCount,\n            )\n          }\n          id={inputId}\n          placeholder={placeholder}\n          dataTest={dataTest}\n          {...inputProps}\n          error={!!errorMessage}\n          overrides={overrides}\n        />\n      </FormControl>\n    </div>\n  );\n};\n\nexport default InputQuestionWrapper;\n","import React from \"react\";\nimport FormControl from \"../../inputs/form_control\";\nimport Textarea, { TextareaOverrides, TextareaProps } from \"../../inputs/textarea\";\nimport PromptWithSecondaryText from \"./shared_components/prompt_with_secondary_text\";\nimport { Overrides } from \"baseui/overrides\";\nimport nextId from \"react-id-generator\";\nimport { useConstructAriaLabel } from \"./use_construct_aria_label\";\nimport { FormControlOverrides } from \"baseui/form-control\";\nimport { getFormControlLabel } from \"./shared_components/shared_form_control_label\";\n\nconst TEXT_AREA_NAMESPACE = \"textarea-input\";\n\nexport interface TextareaWrapperProps extends TextareaProps {\n  supplementalQuestionPrompt?: string;\n  secondaryText?: string;\n  label?: string;\n  optional: boolean;\n  placeholder?: string;\n  errorMessage?: string;\n}\n\nconst textareaOverrides = (\n  currentCharacterCount?: number,\n  label?: string,\n): Overrides<TextareaOverrides> => ({\n  Root: {\n    style: ({ $theme }) => ({\n      marginTop:\n        // If we have a character counter OR no label, remove the top margin.\n        currentCharacterCount != undefined || !label ? undefined : `-${$theme.sizing.scale500}`,\n      maxWidth: \"620px\",\n    }),\n  },\n});\n\nconst TextareaQuestionWrapper = ({\n  supplementalQuestionPrompt,\n  secondaryText,\n  label,\n  optional,\n  placeholder,\n  errorMessage,\n  ...textareaProps\n}: TextareaWrapperProps) => {\n  const { constructAriaLabel } = useConstructAriaLabel();\n\n  const textAreaId = nextId(TEXT_AREA_NAMESPACE);\n\n  const formControlOverrides = (): Overrides<FormControlOverrides> => ({\n    Label: {\n      style: () => ({\n        marginBottom: \"0\",\n      }),\n    },\n  });\n\n  return (\n    <div>\n      {supplementalQuestionPrompt && (\n        <PromptWithSecondaryText\n          supplementalQuestionPrompt={supplementalQuestionPrompt}\n          secondaryText={secondaryText}\n          optional={optional}\n          dataTest={textareaProps?.dataTest}\n        />\n      )}\n\n      <FormControl\n        label={getFormControlLabel(\n          supplementalQuestionPrompt,\n          label,\n          optional,\n          secondaryText,\n          textareaProps?.dataTest,\n        )}\n        htmlFor={textAreaId}\n        error={errorMessage}\n        dataTest={textareaProps?.dataTest}\n        overrides={formControlOverrides()}\n      >\n        <Textarea\n          id={textAreaId}\n          aria-label={constructAriaLabel(\n            supplementalQuestionPrompt,\n            secondaryText,\n            label,\n            optional,\n            textareaProps.maxCharacterCount,\n          )}\n          placeholder={placeholder}\n          {...textareaProps}\n          error={!!errorMessage}\n          overrides={textareaOverrides(textareaProps.currentCharacterCount)}\n        />\n      </FormControl>\n    </div>\n  );\n};\n\nexport default TextareaQuestionWrapper;\n","import React, { useEffect, useState } from \"react\";\n\nimport { Overrides } from \"baseui/overrides\";\nimport { FormControlOverrides } from \"baseui/form-control\";\n\nimport FormControl from \"../../inputs/form_control\";\nimport { TextareaOverrides } from \"../../inputs/textarea\";\nimport Checkbox from \"../../inputs/checkbox\";\nimport { InputOverrides } from \"../../inputs/input\";\nimport PromptWithSecondaryText from \"./shared_components/prompt_with_secondary_text\";\nimport { useConstructAriaLabel } from \"./use_construct_aria_label\";\n\nimport Input from \"./input_question_wrapper\";\nimport Textarea from \"./textarea_question_wrapper\";\n\nexport enum MultiSelectFollowUpQuestionType {\n  TEXT_INPUT = \"text_input\",\n  TEXT_AREA = \"text_area\",\n}\n\nexport enum AnswerCountStrictness {\n  MAX_COUNT = \"max_count\",\n  MIN_COUNT = \"min_count\",\n  EXACT_COUNT = \"exact_count\",\n}\n\nexport interface MultiSelectWrapperProps {\n  questionPrompt: string;\n  secondaryText?: string;\n  optional: boolean;\n  showErrors: boolean;\n  options: MultiSelectOption[];\n  onChange: (newAnswer: MultiSelectOption) => void;\n  setAbleToSubmit: (ableToSubmit: boolean) => void;\n  requiredAnswerCount?: number;\n  answerCountStrictness?: AnswerCountStrictness;\n  dataTest?: string;\n}\n\nexport interface MultiSelectOption {\n  id: string;\n  label: string;\n  value: boolean;\n  followup?: MultiSelectFollowUp;\n}\n\n// This interface exists largely because existing question types, used by SIFP questions\n// and flags reporting, allowed followup text boxes for some or all checkboxes within a multi-select.\n// The shape of this interface has been designed to also fit the 'other' option\n// that is present in many questions. Doing so also prevents us from having to\n// assume that the final option with oid 'other' always needs to have a text input vs text area.\n// It is up to the caller to decide what to do with the followup values.\n// This component only knows how to capture the followup data and pass it back up,\n// in an effort to keep specific question template type business logic, including\n// knowledge of any json structure, out of the presentation layer.\nexport interface MultiSelectFollowUp {\n  type: MultiSelectFollowUpQuestionType;\n  optional: boolean;\n  value: string | undefined;\n  placeholder?: string;\n  maxCharacters?: number;\n}\n\nexport const formControlOverrides: Overrides<FormControlOverrides> = {\n  ControlContainer: {\n    style: () => ({\n      marginTop: \"0px\",\n      marginBottom: \"0px\",\n      width: \"fit-content\",\n    }),\n  },\n};\n\nconst textareaOverrides = (maxCharacters?: number): Overrides<TextareaOverrides> => ({\n  Root: {\n    style: ({ $theme }) => ({\n      marginTop:\n        // If we have a character counter, reduce the top margin.\n        maxCharacters ? `-${$theme.sizing.scale300}` : `${$theme.sizing.scale800}`,\n      maxWidth: \"620px\",\n    }),\n  },\n});\n\nconst inputOverrides = (maxCharacters?: number): Overrides<InputOverrides> => ({\n  Root: {\n    style: ({ $theme }) => ({\n      marginTop:\n        // If we have a character counter, reduce the top margin.\n        maxCharacters ? `0` : `${$theme.sizing.scale300}`,\n      maxWidth: \"620px\",\n    }),\n  },\n});\n\nconst getFollowupErrorMessage = (option: MultiSelectOption) => {\n  if (!option.followup) {\n    return;\n  }\n\n  const requiredAnswerIsMissing = !option.followup.optional && !option.followup.value;\n  const answerExceedsCharacterLimit =\n    option.followup.maxCharacters &&\n    option.followup.value &&\n    option.followup.value.length > option.followup.maxCharacters;\n\n  if (requiredAnswerIsMissing) {\n    return \"Please complete the required field.\";\n  } else if (option.followup.maxCharacters && answerExceedsCharacterLimit) {\n    return `Maximum character limit exceeded by ${\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore TS can't see we already guard against undefined in answerExceedsCharacterLimit\n      option.followup.value.length - option.followup.maxCharacters\n    } characters.`;\n  }\n};\n\nconst MultiSelectQuestionWrapper = ({\n  questionPrompt,\n  secondaryText,\n  optional,\n  showErrors,\n  options,\n  onChange,\n  setAbleToSubmit,\n  requiredAnswerCount,\n  answerCountStrictness,\n  dataTest,\n}: MultiSelectWrapperProps) => {\n  const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n  const { constructAriaLabel } = useConstructAriaLabel();\n\n  useEffect(() => {\n    let ableToSubmit = true;\n    const selectedOptions = options.filter((option) => option.value);\n\n    // Due to how many different ways this component can be flexible,\n    // and the fact that we are dealing with not one input (or even a radio group)\n    // but potentially three different input types, plus an array of checkboxes,\n    // the effort to accomplish this with yup was not in scope for TA-752.\n    if (!optional) {\n      ableToSubmit = selectedOptions.length > 0;\n\n      setErrorMessage(ableToSubmit ? \"\" : \"Please select an option.\");\n\n      if (answerCountStrictness === AnswerCountStrictness.EXACT_COUNT && !!requiredAnswerCount) {\n        ableToSubmit = selectedOptions.length === requiredAnswerCount;\n\n        setErrorMessage(ableToSubmit ? \"\" : `Please select ${requiredAnswerCount} options.`);\n      } else if (\n        answerCountStrictness === AnswerCountStrictness.MAX_COUNT &&\n        !!requiredAnswerCount\n      ) {\n        ableToSubmit = selectedOptions.length > 0 && selectedOptions.length <= requiredAnswerCount;\n\n        setErrorMessage(ableToSubmit ? \"\" : `Please select up to ${requiredAnswerCount} options.`);\n      } else if (\n        answerCountStrictness === AnswerCountStrictness.MIN_COUNT &&\n        !!requiredAnswerCount\n      ) {\n        ableToSubmit = selectedOptions.length >= requiredAnswerCount;\n\n        setErrorMessage(\n          ableToSubmit ? \"\" : `Please select at least ${requiredAnswerCount} options.`,\n        );\n      }\n    }\n\n    const selectedOptionsWithFollowupErrors = selectedOptions.filter(\n      (option) =>\n        option.followup?.type && !option.followup?.optional && getFollowupErrorMessage(option),\n    );\n\n    if (selectedOptionsWithFollowupErrors.length > 0) {\n      ableToSubmit = false;\n    }\n\n    // catch-all\n    if (ableToSubmit) {\n      setErrorMessage(\"\");\n    }\n\n    setAbleToSubmit(ableToSubmit);\n    // Adding options and setAbleToSubmit as dependencies causes a \"maximum update\n    // depth exceeded\" warning for follow-up questions\n    // eslint-disable-next-line\n  }, [answerCountStrictness, optional, requiredAnswerCount]);\n\n  return (\n    <>\n      <PromptWithSecondaryText\n        supplementalQuestionPrompt={questionPrompt}\n        secondaryText={secondaryText}\n        optional={optional}\n        aria-label={`${questionPrompt}${optional ? ` (Optional)` : \"\"}${\n          secondaryText ? ` ${secondaryText}` : \"\"\n        }`}\n        dataTest={dataTest}\n      />\n      {options?.map((option, idx) => {\n        const optionIsSelected = option.value;\n\n        // This is a bit of a hack in order to only show the error message once\n        // at the very end of the group of checkboxes\n        // but not show an error on the checkbox if the error is on the follow-up element\n        const formError = idx === options.length - 1 ? errorMessage : \"no-caption\";\n\n        return (\n          <div key={option.id}>\n            <FormControl\n              key={`form-${option.id}`}\n              htmlFor={option.id}\n              error={showErrors ? formError : undefined}\n              overrides={formControlOverrides}\n              dataTest={`${dataTest}-form-control`}\n            >\n              <Checkbox\n                dataTest={`${dataTest}-checkbox-${option.id}`}\n                aria-label={\n                  idx === 0\n                    ? constructAriaLabel(questionPrompt, secondaryText, option.label, optional)\n                    : option.label\n                }\n                key={option.id}\n                value={option.id}\n                checked={optionIsSelected}\n                onChange={(e) => {\n                  // For the sake of data cleanliness,\n                  // clear out any free responses if unchecking the parent checkbox\n                  if (option.followup && !e.currentTarget.checked) {\n                    onChange({\n                      ...option,\n                      value: e.currentTarget.checked,\n                      followup: { ...option.followup, value: undefined },\n                    });\n                  } else {\n                    onChange({ ...option, value: e.currentTarget.checked });\n                  }\n                }}\n                error={showErrors && !!errorMessage}\n              >\n                {option.label}\n              </Checkbox>\n            </FormControl>\n            {optionIsSelected &&\n              option.followup?.type === MultiSelectFollowUpQuestionType.TEXT_AREA && (\n                <Textarea\n                  id={`${option.id}-followup`}\n                  key={`${option.id}-followup`}\n                  dataTest={`${dataTest}-followup-textarea-${option.id}`}\n                  aria-label={constructAriaLabel(\n                    undefined,\n                    undefined,\n                    `Follow up text area for selected option: ${option.label}.`,\n                    option.followup?.optional,\n                    option.followup?.maxCharacters,\n                  )}\n                  optional={!!option.followup.optional}\n                  placeholder={option.followup.placeholder ?? \"Type your response here...\"}\n                  currentCharacterCount={option.followup.value?.length || 0}\n                  maxCharacterCount={option.followup.maxCharacters}\n                  errorMessage={showErrors ? getFollowupErrorMessage(option) : undefined}\n                  value={option.followup.value}\n                  onChange={(e) => {\n                    // appease typescript\n                    if (option.followup) {\n                      onChange({\n                        ...option,\n                        followup: { ...option.followup, value: e.target.value },\n                      });\n                    }\n                  }}\n                  overrides={textareaOverrides(option.followup.maxCharacters)}\n                />\n              )}\n            {optionIsSelected &&\n              option.followup?.type === MultiSelectFollowUpQuestionType.TEXT_INPUT && (\n                <Input\n                  id={`${option.id}-followup`}\n                  key={`${option.id}-followup`}\n                  dataTest={`${dataTest}-followup-input-${option.id}`}\n                  aria-label={constructAriaLabel(\n                    undefined,\n                    undefined,\n                    `Follow up text input for selected option: ${option.label}.`,\n                    option.followup?.optional,\n                    option.followup?.maxCharacters,\n                  )}\n                  type=\"text\"\n                  optional={!!option.followup.optional}\n                  placeholder={option.followup.placeholder ?? \"Type your response here...\"}\n                  currentCharacterCount={option.followup.value?.length || 0}\n                  maxCharacterCount={option.followup.maxCharacters}\n                  errorMessage={showErrors ? getFollowupErrorMessage(option) : undefined}\n                  value={option.followup.value}\n                  onChange={(e) => {\n                    // appease typescript\n                    if (option.followup) {\n                      onChange({\n                        ...option,\n                        followup: { ...option.followup, value: e.target.value },\n                      });\n                    }\n                  }}\n                  overrides={inputOverrides(option.followup.maxCharacters)}\n                />\n              )}\n          </div>\n        );\n      })}\n    </>\n  );\n};\n\nexport default MultiSelectQuestionWrapper;\n","import React, { useEffect } from \"react\";\nimport Checkbox, { CheckBoxDisplay, CheckboxGroup } from \"../../components/data_entry/checkbox\";\nimport Input from \"../../components/data_entry/input\";\nimport QuestionFieldsetLegend, { StyledFieldset } from \"./components/question_fieldset_legend\";\nimport { QuestionProps } from \"../survey\";\nimport { Option, getOptionObjectFromText } from \"./question_helpers\";\nimport nextId from \"react-id-generator\";\nimport MultiSelectQuestionWrapper, {\n  MultiSelectOption,\n} from \"../../components/base_ui/higher_order_components/questions/multiselect_question_wrapper\";\nimport { getOptionOid } from \"./question_helpers\";\nimport InputQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/input_question_wrapper\";\n\nexport interface Answer {\n  standard: (string | Option | undefined)[];\n  writeIn?: string;\n}\n\ninterface OtherOption extends Option {\n  optional?: boolean;\n}\n\nexport interface Customizations {\n  prompt: string;\n  options: (string | Option)[];\n  withOtherOption?: OtherOption;\n  optional?: boolean;\n  description?: string;\n}\n\nexport default function MultiSelect({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, Customizations>) {\n  const label = customizations.prompt;\n  const id = \"multi-select-\" + nextId();\n  const secondaryText = customizations.description ?? \"\";\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const otherOption = customizations.withOtherOption;\n  let options = customizations.options;\n\n  if (otherOption) {\n    options = options.concat(otherOption);\n  }\n\n  const selectedOptions = currentAnswer ? currentAnswer.standard : [];\n  const answerIsValid =\n    (optional &&\n      (!otherOption ||\n        !selectedOptions.includes(getOptionObjectFromText(otherOption.text, options)))) ||\n    ((currentAnswer?.standard.length || 0) > 0 &&\n      (!(\n        otherOption &&\n        !otherOption.optional &&\n        selectedOptions.includes(getOptionObjectFromText(otherOption.text, options))\n      ) ||\n        (currentAnswer?.writeIn != null && currentAnswer.writeIn.length > 0)));\n  const followUpErrorMessage =\n    showValidation && !answerIsValid ? \"Please complete the required field.\" : \"\";\n\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  const deprecatedMultiSelect = (\n    <div className=\"multi-select\">\n      <StyledFieldset name={label}>\n        <QuestionFieldsetLegend\n          legend={label}\n          description={secondaryText}\n          questionIsOptional={optional}\n          data-test=\"multi-select-question-label\"\n        />\n        <CheckboxGroup display={CheckBoxDisplay.normal}>\n          {options.map((option) => {\n            const label = typeof option === \"string\" ? option : option.text;\n            return (\n              <Checkbox\n                dataTest=\"multi-select-checkbox\"\n                label={label}\n                key={label}\n                checked={selectedOptions.includes(getOptionObjectFromText(label, options))}\n                htmlFor={id}\n                onChange={() => {\n                  const index = selectedOptions.indexOf(getOptionObjectFromText(label, options));\n                  if (index > -1) {\n                    // The answer is already checked, uncheck it.\n                    updateAnswer({\n                      standard: [\n                        ...selectedOptions.slice(0, index),\n                        ...selectedOptions.slice(index + 1),\n                      ],\n                      writeIn: option === otherOption ? undefined : currentAnswer?.writeIn,\n                    });\n                  } else {\n                    // The answer is not checked yet, check it.\n                    updateAnswer({\n                      ...currentAnswer,\n                      standard: [...selectedOptions, getOptionObjectFromText(label, options)],\n                    });\n                  }\n                }}\n              />\n            );\n          })}\n        </CheckboxGroup>\n        {otherOption &&\n          selectedOptions.includes(getOptionObjectFromText(otherOption.text, options)) && (\n            <Input\n              type=\"text\"\n              value={currentAnswer && currentAnswer.writeIn ? currentAnswer.writeIn : \"\"}\n              id={id}\n              questionIsOptional={otherOption.optional ?? false}\n              onChange={({ currentTarget: { value: updatedWriteIn } }) =>\n                updateAnswer({\n                  standard: selectedOptions,\n                  writeIn: updatedWriteIn,\n                })\n              }\n            />\n          )}\n      </StyledFieldset>\n    </div>\n  );\n\n  const multiSelect = (\n    <>\n      <MultiSelectQuestionWrapper\n        questionPrompt={label}\n        optional={optional}\n        secondaryText={secondaryText}\n        showErrors={showValidation && !answerIsValid && !selectedOptions.length}\n        options={options.map((option) => {\n          const optionLabel = typeof option === \"string\" ? option : option.text;\n          return {\n            id: getOptionOid(option) || \"\",\n            label: optionLabel || \"\",\n            value: selectedOptions.includes(getOptionObjectFromText(optionLabel, options)),\n          };\n        })}\n        onChange={(newAnswer: MultiSelectOption) => {\n          const option = typeof newAnswer === \"string\" ? newAnswer : newAnswer.label;\n          const optionObject = getOptionObjectFromText(option, options);\n          const index = selectedOptions.indexOf(optionObject);\n\n          if (index > -1) {\n            // The answer is already checked, uncheck it.\n            updateAnswer({\n              standard: [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)],\n              writeIn: optionObject === otherOption ? undefined : currentAnswer?.writeIn,\n            });\n          } else {\n            // The answer is not checked yet, check it.\n            updateAnswer({\n              ...currentAnswer,\n              standard: [...selectedOptions, optionObject],\n            });\n          }\n        }}\n        setAbleToSubmit={setAbleToSubmit}\n        dataTest={id}\n      />\n      {otherOption &&\n        selectedOptions.includes(getOptionObjectFromText(otherOption.text, options)) && (\n          <InputQuestionWrapper\n            ariaLabel={`Follow-up input field for: ${otherOption.text}`}\n            optional={false} // it might be required but we don't want to show the optional label\n            value={currentAnswer && currentAnswer.writeIn ? currentAnswer.writeIn : \"\"}\n            onChange={({ currentTarget: { value: updatedWriteIn } }) =>\n              updateAnswer({\n                standard: selectedOptions,\n                writeIn: updatedWriteIn,\n              })\n            }\n            errorMessage={followUpErrorMessage}\n            dataTest={`${id}-follow-up-input`}\n          />\n        )}\n    </>\n  );\n  return showRefreshedComponents ? multiSelect : deprecatedMultiSelect;\n}\n","import React, { useContext, Fragment, useEffect } from \"react\";\nimport Checkbox from \"../../components/data_entry/checkbox\";\nimport Input from \"../../components/data_entry/input\";\nimport {\n  ModeOfCommunication,\n  ConversationTopic,\n  ProgramSegmentDocument,\n} from \"../../generated/graphql\";\nimport { gql } from \"@urql/core\";\nimport { SurveyParticipantDataDocument, ConversationTopicsDocument } from \"../../generated/graphql\";\nimport { SurveyContext, QuestionProps } from \"../survey\";\nimport QuestionLabel from \"./components/question_label\";\nimport styled from \"styled-components\";\nimport { useQuery } from \"urql\";\n\nexport interface Answer {\n  modesOfCommunication: { standard: ModeOfCommunication[]; writeIn?: string };\n  conversationTopics: { standard: ConversationTopic[]; writeIn?: string };\n}\n\nexport interface Customizations {\n  modeOfCommunicationPrompt: string;\n  topicsPrompt: string;\n  description?: string;\n}\n\nconst modeOfCommunicationOptions = [\n  {\n    label: \"Videochat (Skype, Facetime, etc)\",\n    value: ModeOfCommunication.Videochat,\n  },\n  {\n    label: \"Email\",\n    value: ModeOfCommunication.Email,\n  },\n  {\n    label: \"Talking on the phone\",\n    value: ModeOfCommunication.TalkingOnPhone,\n  },\n  {\n    label: \"Texting\",\n    value: ModeOfCommunication.Texting,\n  },\n  {\n    label: \"Social media (Instagram, Facebook, Snapchat, LinkedIn)\",\n    value: ModeOfCommunication.SocialMedia,\n  },\n  {\n    label: \"Meeting in person\",\n    value: ModeOfCommunication.MeetingInPerson,\n  },\n  { label: \"Other\", value: ModeOfCommunication.Other },\n];\n\nfunction conversationTopicLabel(topic: ConversationTopic): string {\n  switch (topic) {\n    case ConversationTopic.GettingToKnowEachOther:\n      return \"Getting to know each other\";\n    case ConversationTopic.Career:\n      return \"Career (jobs, internships, what to do after graduation)\";\n    case ConversationTopic.CorporateCareer:\n      return \"Career\";\n    case ConversationTopic.Activities:\n      return \"Activities (sports, clubs, being a leader on campus)\";\n    case ConversationTopic.SchoolLife:\n      return \"School life (eating, weather, culture)\";\n    case ConversationTopic.StayingBalanced:\n      return \"Staying balanced (wellness, anxiety, stress, self-care)\";\n    case ConversationTopic.Academics:\n      return \"Academics (classes, instructors, grades, studying)\";\n    case ConversationTopic.FamilyLife:\n      return \"Family life\";\n    case ConversationTopic.GraduateSchool:\n      return \"Graduate school\";\n    case ConversationTopic.Resumes:\n      return \"Resumes\";\n    case ConversationTopic.Interviewing:\n      return \"Interviewing\";\n    case ConversationTopic.LinkedIn:\n      return \"LinkedIn\";\n    case ConversationTopic.CareerFairs:\n      return \"Career fairs\";\n    case ConversationTopic.Networking:\n      return \"Networking\";\n    case ConversationTopic.ConnectingCourseworkToCareer:\n      return \"Connecting coursework to career\";\n    case ConversationTopic.ResearchOpportunities:\n      return \"Research opportunities\";\n    case ConversationTopic.StudentOrCampusLife:\n      return \"Student or campus life\";\n    case ConversationTopic.ComparingSchools:\n      return \"Comparing schools\";\n    case ConversationTopic.FinancialAid:\n      return \"Financial aid\";\n    case ConversationTopic.OnboardingToCompanyOrDepartment:\n      return \"Onboarding to Company/Department\";\n    case ConversationTopic.ProfessionalDevelopment:\n      return \"Professional Development\";\n    case ConversationTopic.WorkLifeBalance:\n      return \"Work/Life Balance\";\n    case ConversationTopic.GettingInvolvedAndCompanyProgramming:\n      return \"Getting Involved/Company Programming\";\n    case ConversationTopic.CurrentEvents:\n      return \"Current Events\";\n    case ConversationTopic.OvercomingObstaclesAndNavigatingTheWorkplace:\n      return \"Overcoming Obstacles/Navigating the Workplace\";\n    case ConversationTopic.ManagingUp:\n      return \"Managing Up\";\n    case ConversationTopic.BuildingProfessionalBrand:\n      return \"Building Professional Brand\";\n    case ConversationTopic.BenefitsAndCompensation:\n      return \"Benefits & Compensation\";\n    case ConversationTopic.PersonnelChallenges:\n      return \"Personnel Challenges\";\n    case ConversationTopic.Other:\n      return \"Other\";\n    default:\n      throw new Error(`Unrecognized conversation topic ${topic}`);\n  }\n}\n\ngql`\n  query SurveyParticipantData($participantId: ID!) {\n    participant(id: $participantId) {\n      id\n      program {\n        id\n        segment\n        programSequence {\n          id\n          school {\n            id\n            shortName\n          }\n        }\n      }\n    }\n  }\n`;\n\ngql`\n  query ConversationTopics($segment: ProgramSegment!, $programId: ID!, $questionId: ID!) {\n    conversationTopics(segment: $segment, programId: $programId, questionId: $questionId)\n  }\n`;\n\ngql`\n  query ProgramSegment($programId: ID!) {\n    program(id: $programId) {\n      id\n      segment\n      programSequence {\n        id\n        school {\n          id\n          shortName\n        }\n      }\n    }\n  }\n`;\n\nconst ConversationTopicsQuestion = styled.div`\n  margin-top: ${({ theme }) => theme.deprecatedSpacing.component.eight};\n`;\n\nexport default function Conversation({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  questionId,\n}: QuestionProps<Answer, Customizations>) {\n  const { participantId, programId = \"\" } = useContext(SurveyContext);\n\n  const [{ fetching, error, data }] = useQuery({\n    query: SurveyParticipantDataDocument,\n    variables: { participantId },\n    pause: !participantId,\n  });\n\n  const [\n    { fetching: fetchingProgramSegment, error: errorProgramSegment, data: programSegmentData },\n  ] = useQuery({\n    query: ProgramSegmentDocument,\n    variables: { programId: programId },\n    pause: !programId,\n  });\n\n  const [{ fetching: fetchingTopics, data: topicsData }] = useQuery({\n    query: ConversationTopicsDocument,\n    variables: {\n      // The conversation topics are based on the program segment, and the program segment could be obtained\n      // from either the current participant or the program (from the secret survey preview)\n      // When coming from the secret survey preview, the programId will be set and segment retrieved from there\n      // instead of from the participant\n\n      // checking this in the pause\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      segment: data?.participant.program.segment || programSegmentData?.program.segment,\n      programId: programId,\n      questionId: questionId ? questionId.toString() : \"\",\n    },\n    pause: !data?.participant.program.segment && !programSegmentData?.program.segment,\n  });\n\n  let modeOfCommunicationLabel = \"\";\n  let topicsLabel = \"\";\n\n  const answeredConversationTopicsQuestion =\n    !!currentAnswer &&\n    (currentAnswer.conversationTopics.standard.length > 0 ||\n      (currentAnswer.conversationTopics.writeIn?.length || 0) > 0);\n\n  const answeredModesOfCommunicationQuestion =\n    !!currentAnswer &&\n    (currentAnswer.modesOfCommunication.standard.length > 0 ||\n      (currentAnswer.modesOfCommunication.writeIn?.length || 0) > 0);\n\n  const answerIsValid =\n    typeof currentAnswer !== \"undefined\" &&\n    (!topicsLabel || answeredConversationTopicsQuestion) &&\n    (!modeOfCommunicationLabel || answeredModesOfCommunicationQuestion);\n\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  if (fetching || data === null || fetchingProgramSegment || programSegmentData === null)\n    return <div>Loading...</div>;\n\n  if ((error || !data) && (errorProgramSegment || !programSegmentData)) return <div>Uh oh</div>;\n\n  modeOfCommunicationLabel = customizations.modeOfCommunicationPrompt;\n  const description = customizations.description;\n  topicsLabel = customizations.topicsPrompt;\n  const answer = currentAnswer\n    ? currentAnswer\n    : { modesOfCommunication: { standard: [] }, conversationTopics: { standard: [] } };\n\n  return (\n    <div>\n      {modeOfCommunicationLabel && (\n        <div>\n          <QuestionLabel label={modeOfCommunicationLabel} description={description} />\n          {modeOfCommunicationOptions.map((option) => (\n            <Fragment key={option.value}>\n              <Checkbox\n                dataTest=\"conversation-log-mode-of-communication\"\n                label={option.label}\n                checked={answer.modesOfCommunication.standard.includes(option.value)}\n                onChange={() => {\n                  const index = answer.modesOfCommunication.standard.indexOf(option.value);\n                  if (index > -1) {\n                    updateAnswer({\n                      conversationTopics: answer.conversationTopics,\n                      modesOfCommunication: {\n                        standard: [\n                          ...answer.modesOfCommunication.standard.slice(0, index),\n                          ...answer.modesOfCommunication.standard.slice(index + 1),\n                        ],\n                        writeIn:\n                          option.value === ModeOfCommunication.Other\n                            ? undefined\n                            : answer.modesOfCommunication.writeIn,\n                      },\n                    });\n                  } else {\n                    updateAnswer({\n                      conversationTopics: answer.conversationTopics,\n                      modesOfCommunication: {\n                        ...answer.modesOfCommunication,\n                        standard: [...answer.modesOfCommunication.standard, option.value],\n                      },\n                    });\n                  }\n                }}\n              />\n              {option.value === ModeOfCommunication.Other &&\n                answer.modesOfCommunication.standard.includes(option.value) && (\n                  <Input\n                    type=\"text\"\n                    value={\n                      answer.modesOfCommunication.writeIn ? answer.modesOfCommunication.writeIn : \"\"\n                    }\n                    onChange={({ currentTarget: { value: updatedWriteIn } }) =>\n                      updateAnswer({\n                        conversationTopics: answer.conversationTopics,\n                        modesOfCommunication: {\n                          ...answer.modesOfCommunication,\n                          writeIn: updatedWriteIn,\n                        },\n                      })\n                    }\n                  />\n                )}\n            </Fragment>\n          ))}\n        </div>\n      )}\n\n      {fetchingTopics || topicsData === null ? (\n        <div>Loading...</div>\n      ) : !topicsData ? (\n        <div>Uh oh</div>\n      ) : (\n        <ConversationTopicsQuestion>\n          <QuestionLabel label={topicsLabel} description={description} />\n          {topicsData.conversationTopics.map((topic) => (\n            <Fragment key={topic}>\n              <Checkbox\n                dataTest=\"conversation-log-topic\"\n                label={conversationTopicLabel(topic)}\n                checked={answer.conversationTopics.standard.includes(topic)}\n                onChange={() => {\n                  const index = answer.conversationTopics.standard.indexOf(topic);\n                  if (index > -1) {\n                    updateAnswer({\n                      modesOfCommunication: answer.modesOfCommunication,\n                      conversationTopics: {\n                        standard: [\n                          ...answer.conversationTopics.standard.slice(0, index),\n                          ...answer.conversationTopics.standard.slice(index + 1),\n                        ],\n                        writeIn:\n                          topic === ConversationTopic.Other\n                            ? undefined\n                            : answer.conversationTopics.writeIn,\n                      },\n                    });\n                  } else {\n                    updateAnswer({\n                      modesOfCommunication: answer.modesOfCommunication,\n                      conversationTopics: {\n                        ...answer.conversationTopics,\n                        standard: [...answer.conversationTopics.standard, topic],\n                      },\n                    });\n                  }\n                }}\n              />\n              {topic === ConversationTopic.Other &&\n                answer.conversationTopics.standard.includes(topic) && (\n                  <Input\n                    type=\"text\"\n                    value={\n                      answer.conversationTopics.writeIn ? answer.conversationTopics.writeIn : \"\"\n                    }\n                    onChange={({ currentTarget: { value: updatedWriteIn } }) =>\n                      updateAnswer({\n                        modesOfCommunication: answer.modesOfCommunication,\n                        conversationTopics: {\n                          ...answer.conversationTopics,\n                          writeIn: updatedWriteIn,\n                        },\n                      })\n                    }\n                  />\n                )}\n            </Fragment>\n          ))}\n        </ConversationTopicsQuestion>\n      )}\n    </div>\n  );\n}\n","import React, { HTMLProps } from \"react\";\nimport styled from \"styled-components\";\n\ninterface Props extends HTMLProps<HTMLTextAreaElement> {\n  label?: string;\n  error?: string;\n  questionIsOptional?: boolean;\n}\n\nconst TextArea = styled.span<{ hasError: boolean }>`\n  position: relative;\n  display: block;\n\n  .label {\n    display: block;\n    text-transform: uppercase;\n    color: ${({ theme }) => theme.colors.contentPrimary};\n    font-size: ${({ theme }) => theme.font.size.label.one};\n    font-family: Arial;\n    margin-bottom: ${({ theme }) => theme.deprecatedSpacing.component.three};\n  }\n\n  .text-area {\n    /* this is a hack to avoid chrome's auto-complete styling */\n    transition: color 9999s ease-out, background-color 9999s ease-out;\n    transition-delay: 9999s;\n\n    box-sizing: border-box;\n    width: 100%;\n    background-color: ${({ theme }) => theme.deprecatedColors.white};\n    vertical-align: middle;\n    font-size: ${({ theme }) => theme.font.size.body.one};\n    font-family: Arial;\n    color: ${({ theme }) => theme.deprecatedColors.text.normal};\n    border: 1px solid ${({ theme }) => theme.deprecatedColors.gray.six};\n    border-radius: ${({ theme }) => theme.deprecatedSpacing.component.two};\n    padding: 8px;\n    border: 1px solid\n      ${({ theme, hasError }) =>\n        hasError ? theme.deprecatedColors.error : theme.deprecatedColors.gray.six};\n\n    &:focus {\n      border-color: ${({ theme }) => theme.deprecatedColors.primary.normal};\n      outline-style: none;\n    }\n  }\n\n  .errorText {\n    display: block;\n    color: ${({ theme, hasError }) =>\n      hasError ? theme.deprecatedColors.error : theme.deprecatedColors.gray.six};\n    font-size: ${({ theme }) => theme.font.size.body.three};\n    line-height: ${({ theme }) => theme.font.size.body.two};\n`;\n\nexport default function TextAreaInput({\n  className,\n  label,\n  error,\n  questionIsOptional = true,\n  ...inputProps\n}: Props) {\n  return (\n    <TextArea hasError={!!error} className={className}>\n      {label && <label className=\"label\">{label}</label>}\n      <textarea className=\"text-area\" {...inputProps} aria-required={!questionIsOptional} />\n      {error && <span className=\"errorText\">{error}</span>}\n    </TextArea>\n  );\n}\n","import React, { useContext, Fragment, useEffect } from \"react\";\nimport Checkbox from \"../../components/data_entry/checkbox\";\nimport {\n  SurveyParticipantDataDocument,\n  FlagCategoriesDocument,\n  FlagCategory,\n  ProgramSegmentDocument,\n} from \"../../generated/graphql\";\nimport { SurveyContext, QuestionProps } from \"../survey\";\nimport TextArea from \"../../components/data_entry/text_area\";\nimport { RadioGroup, RadioButton } from \"../../components/data_entry/radio\";\nimport QuestionLabel from \"./components/question_label\";\nimport styled from \"styled-components\";\nimport { gql } from \"urql\";\nimport { useQuery } from \"urql\";\n\ngql`\n  query FlagCategories($filter: FlagCategoryFilter) {\n    flagCategories(filter: $filter) {\n      id\n      name\n      identifier\n      label\n    }\n  }\n`;\n\nexport interface Answer {\n  selectedFlags: FlagCategory[\"identifier\"][];\n  writeIn?: string;\n  extraInfo: string;\n  shouldSchoolFollowUp: \"YES\" | \"NO\" | \"NOT_SURE\";\n}\n\nexport interface Customizations {\n  prompt: string;\n  followUpPrompt: string;\n  schoolSupportPrompt: string;\n  schoolSupportDescription: string;\n  hideSchoolSupportQuestion: boolean;\n  description?: string;\n}\n\nconst FlagsExtraQuestion = styled.div`\n  margin-top: ${({ theme }) => theme.deprecatedSpacing.component.eight};\n`;\n\nexport default function Flags({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n}: QuestionProps<Answer, Customizations>) {\n  const query = new URLSearchParams(window.location.search);\n  const initialCategory = query.get(\"initialCategory\") || \"\";\n\n  const { participantId, programId = \"\" } = useContext(SurveyContext);\n\n  const [{ fetching, error, data }] = useQuery({\n    query: SurveyParticipantDataDocument,\n    variables: { participantId },\n    pause: !participantId,\n  });\n\n  const [\n    { fetching: fetchingProgramSegment, error: errorProgramSegment, data: programSegmentData },\n  ] = useQuery({\n    query: ProgramSegmentDocument,\n    variables: { programId: programId },\n    pause: !programId,\n  });\n\n  const [{ fetching: categoriesFetching, error: categoriesError, data: categoriesData }] = useQuery(\n    {\n      query: FlagCategoriesDocument,\n      // The flag categories are based on the program, and the program could be obtained\n      // from either the current participant or the program id provided from the secret survey preview\n      variables: { filter: { programId: data?.participant.program.id || programId || \"\" } },\n      pause: !data?.participant.program.id && !programId,\n    },\n  );\n  // @TODO - we could get more nuanced here if we wanted to the follow-up to be required if something is selected\n  const answerIsValid = typeof currentAnswer !== \"undefined\";\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  // Pre-populate a flag if we have a query string on the url field.\n  useEffect(() => {\n    const category = categoriesData?.flagCategories.find(\n      (flagCategory) => flagCategory.name === initialCategory,\n    );\n    if (category) {\n      updateAnswer({\n        selectedFlags: [category.identifier],\n        extraInfo: \"\",\n        shouldSchoolFollowUp: \"YES\",\n      });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [initialCategory, categoriesData]);\n\n  if (fetching || data === null || fetchingProgramSegment || programSegmentData === null)\n    return <div>Loading...</div>;\n\n  if ((error || !data) && (errorProgramSegment || !programSegmentData)) return <div>Uh oh</div>;\n\n  const program = data?.participant.program || programSegmentData?.program;\n  const label = customizations.prompt;\n  const followUpLabel = customizations.followUpPrompt;\n  const description = customizations.description;\n  const schoolSupportLabel = customizations.schoolSupportPrompt;\n  const schoolSupportDescriptionLabel = customizations.schoolSupportDescription;\n  const hideSchoolSupportQuestion = customizations.hideSchoolSupportQuestion;\n\n  if (categoriesFetching || categoriesData === null) return <div>Loading...</div>;\n  if (!categoriesData || categoriesError) return <div>Uh oh</div>;\n\n  const sortedCategories = categoriesData.flagCategories.sort((a, b) =>\n    a.label.localeCompare(b.label),\n  );\n\n  const answer: Answer = currentAnswer\n    ? currentAnswer\n    : {\n        selectedFlags: [],\n        extraInfo: \"\",\n        shouldSchoolFollowUp: \"YES\",\n      };\n  return (\n    <div className=\"multi-select\">\n      <QuestionLabel label={label} description={description} />\n      <Checkbox\n        label=\"None\"\n        checked={!!(currentAnswer && answer.selectedFlags.length === 0)}\n        onChange={() => {\n          updateAnswer({\n            selectedFlags: [],\n            extraInfo: \"\",\n            shouldSchoolFollowUp: \"YES\",\n          });\n        }}\n      />\n      {sortedCategories.map((flagCategory) => (\n        <Checkbox\n          label={flagCategory.label || undefined}\n          key={flagCategory.identifier}\n          checked={answer.selectedFlags.includes(flagCategory.identifier)}\n          onChange={() => {\n            const index = answer.selectedFlags.indexOf(flagCategory.identifier);\n            const updatedOptions =\n              index > -1\n                ? [\n                    ...answer.selectedFlags.slice(0, index),\n                    ...answer.selectedFlags.slice(index + 1),\n                  ]\n                : [...answer.selectedFlags, flagCategory.identifier];\n            updateAnswer(\n              currentAnswer\n                ? {\n                    ...currentAnswer,\n                    selectedFlags: updatedOptions,\n                  }\n                : {\n                    selectedFlags: updatedOptions,\n                    extraInfo: \"\",\n                    shouldSchoolFollowUp: \"YES\",\n                  },\n            );\n          }}\n        />\n      ))}\n      {answer.selectedFlags.length > 0 && (\n        <Fragment>\n          <FlagsExtraQuestion>\n            <QuestionLabel label={followUpLabel} />\n            <TextArea\n              rows={3}\n              onChange={({ currentTarget: { value: updatedResponse } }) =>\n                updateAnswer(\n                  currentAnswer\n                    ? {\n                        ...currentAnswer,\n                        extraInfo: updatedResponse,\n                      }\n                    : {\n                        selectedFlags: [],\n                        extraInfo: updatedResponse,\n                        shouldSchoolFollowUp: \"YES\",\n                      },\n                )\n              }\n              value={currentAnswer ? currentAnswer.extraInfo : \"\"}\n            />\n          </FlagsExtraQuestion>\n        </Fragment>\n      )}\n      {answer.selectedFlags.length > 0 && !hideSchoolSupportQuestion && (\n        <Fragment>\n          <FlagsExtraQuestion>\n            <QuestionLabel label={schoolSupportLabel} description={schoolSupportDescriptionLabel} />\n            <RadioGroup\n              name=\"flagSchoolFollowUp\"\n              value={currentAnswer ? currentAnswer.shouldSchoolFollowUp : \"YES\"}\n              onChange={(newValue) =>\n                updateAnswer(\n                  currentAnswer\n                    ? { ...currentAnswer, shouldSchoolFollowUp: newValue }\n                    : {\n                        selectedFlags: [],\n                        extraInfo: \"\",\n                        shouldSchoolFollowUp: newValue,\n                      },\n                )\n              }\n            >\n              <>\n                <RadioButton\n                  label={`Yes — send this information to a ${program?.programSequence.school.shortName} representative`}\n                  value=\"YES\"\n                />\n                <RadioButton label=\"No immediate support needed\" value=\"NO\" />\n              </>\n            </RadioGroup>\n          </FlagsExtraQuestion>\n        </Fragment>\n      )}\n    </div>\n  );\n}\n","import React, { ReactNode, useContext } from \"react\";\nimport TextArea from \"../../../components/data_entry/text_area\";\nimport QuestionLabel from \"./question_label\";\nimport { RadioGroup, RadioButton, RadioGroupDisplay } from \"../../../components/data_entry/radio\";\nimport styled from \"styled-components\";\nimport MultiSelect from \"../multi_select\";\nimport { Option } from \"../question_helpers\";\nimport { SurveyContext, SurveyDisplay } from \"../../survey\";\n\nconst ScaleLabel = styled.div`\n  font-weight: ${({ theme }) => theme.font.weight.normal};\n  font-size: ${({ theme }) => theme.font.size.body.one};\n  margin-bottom: ${({ theme }) => theme.deprecatedSpacing.component.four};\n  color: ${({ theme }) => theme.deprecatedColors.primary.dark};\n`;\n\nexport interface LikertFollowUpMultiSelectAnswer {\n  standard: (string | Option | undefined)[];\n  writeIn?: string;\n}\n\nexport const times = <T extends ReactNode>(\n  fn: (num: number, index: number) => T,\n  start: number,\n  end: number\n): T[] => {\n  let num = start;\n  let index = 0;\n  const list = [];\n  while (num <= end) {\n    list[index] = fn(num, index);\n    index += 1;\n    num += 1;\n  }\n  return list;\n};\n\nconst StyledRadioButton = styled(RadioButton)`\n  flex-grow: 1;\n`;\n\nconst LikertExtraQuestion = styled.div`\n  margin-top: ${({ theme }) => theme.deprecatedSpacing.component.eight};\n`;\n\nexport type Scale = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport default function Likert({\n  prompt,\n  value,\n  onChangeValue,\n  followUpPrompt = \"\",\n  followUpResponse = \"\",\n  followUpLowScore = false,\n  followUpLowPrompt = \"\",\n  followUpLowResponse = \"\",\n  followUpLowQuestion,\n  lowScoreThreshold = 4,\n  onChangeLowFollowUp = () => undefined,\n  followUpHighScore = false,\n  followUpHighPrompt = \"\",\n  followUpHighResponse = \"\",\n  highScoreThreshold = 5,\n  onChangeHighFollowUp = () => undefined,\n  optional = false,\n  max = 7,\n  maxLabel = \"High\",\n  min = 1,\n  minLabel = \"Low\",\n  displayValues,\n  description,\n  followUpLowDescription,\n}: {\n  prompt: string;\n  value?: Scale;\n  onChangeValue: (newValue: Scale) => void;\n  followUpPrompt?: string;\n  followUpResponse?: string | LikertFollowUpMultiSelectAnswer;\n  followUpLowScore?: boolean;\n  followUpLowPrompt?: string;\n  followUpLowResponse?: string | LikertFollowUpMultiSelectAnswer;\n  // Fixing an accessibility issue in this PR and don't want to scope creep too much trying to figure out what the\n  // type is supposed to be to avoid the eslint warning around this 'any'. Sincerest shame, Lindsay\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  followUpLowQuestion?: { type: string; [propName: string]: any };\n  lowScoreThreshold?: number;\n  followUpHighScore?: boolean;\n  followUpHighPrompt?: string;\n  followUpHighResponse?: string | LikertFollowUpMultiSelectAnswer;\n  highScoreThreshold?: number;\n  onChangeLowFollowUp?: (\n    updatedFollowUpAnswer: string | LikertFollowUpMultiSelectAnswer | undefined\n  ) => void;\n  onChangeHighFollowUp?: (\n    updatedFollowUpAnswer: string | LikertFollowUpMultiSelectAnswer | undefined\n  ) => void;\n  max?: Scale;\n  maxLabel?: string;\n  min?: Scale;\n  minLabel?: string;\n  optional?: boolean;\n  displayValues?: string[] | number[];\n  description?: string;\n  followUpLowDescription?: string;\n}) {\n  // DEPRECATION: avoid using followUpPrompt in favor of followUpLowPrompt\n  //              avoid using followUpResponse in favor of followUpLowResponse\n  // this aliasing is here to support pre-existing likert questions\n  followUpLowPrompt = followUpLowPrompt || followUpPrompt;\n  followUpLowResponse = followUpLowResponse || followUpResponse;\n  const { display } = useContext(SurveyContext);\n\n  return (\n    <div>\n      <QuestionLabel\n        questionIsOptional={optional}\n        className=\"question-label\"\n        label={prompt}\n        description={description}\n        hideRequiredMarker={display == SurveyDisplay.banner}\n        data-test=\"likert-question-label\"\n      />\n      <ScaleLabel className=\"scale-label\">\n        {min}={minLabel} {max}={maxLabel}\n      </ScaleLabel>\n      <RadioGroup\n        name=\"likert\"\n        value={value}\n        onChange={onChangeValue}\n        display={RadioGroupDisplay.buttonGroup}\n      >\n        {times(\n          (num, index) => {\n            return (\n              <StyledRadioButton\n                className=\"likert-option\"\n                dataTest=\"likert-option\"\n                key={num}\n                label={`${displayValues ? displayValues[index] : num}`}\n                value={num}\n              />\n            );\n          },\n          min,\n          max\n        )}\n      </RadioGroup>\n      {followUpLowScore && value && value <= lowScoreThreshold && (\n        <LikertExtraQuestion>\n          {followUpLowQuestion?.type === \"multi_select\" && (\n            <MultiSelect\n              customizations={{\n                prompt: followUpLowPrompt,\n                description: followUpLowDescription,\n                options: followUpLowQuestion.options,\n                withOtherOption: followUpLowQuestion.withOtherOption,\n                optional: followUpLowQuestion.optional,\n              }}\n              currentAnswer={\n                typeof followUpLowResponse !== \"string\" ? followUpLowResponse : undefined\n              }\n              updateAnswer={(newAnswer) => {\n                onChangeLowFollowUp(newAnswer);\n              }}\n              setAbleToSubmit={() => {\n                /* No-op. We don't currently support required follow ups for this question. */\n              }}\n              showValidation={false}\n            />\n          )}\n          {!followUpLowQuestion && (\n            <>\n              <QuestionLabel\n                questionIsOptional={true}\n                className=\"question-label\"\n                label={followUpLowPrompt}\n                description={followUpLowDescription}\n              />\n              <TextArea\n                rows={3}\n                onChange={({ currentTarget: { value: updatedResponse } }) =>\n                  onChangeLowFollowUp(updatedResponse)\n                }\n                questionIsOptional={true}\n                value={typeof followUpLowResponse === \"string\" ? followUpLowResponse : undefined}\n              />\n            </>\n          )}\n        </LikertExtraQuestion>\n      )}\n      {followUpHighScore && value && value >= highScoreThreshold && (\n        <div>\n          <QuestionLabel\n            questionIsOptional={false}\n            className=\"question-label\"\n            label={followUpHighPrompt}\n            description={\"\"}\n          />\n          <TextArea\n            rows={3}\n            questionIsOptional={false}\n            onChange={({ currentTarget: { value: updatedResponse } }) =>\n              onChangeHighFollowUp(updatedResponse)\n            }\n            value={typeof followUpHighResponse == \"string\" ? followUpHighResponse : undefined}\n          />\n        </div>\n      )}\n    </div>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport Likert, { LikertFollowUpMultiSelectAnswer, Scale as LikertScale } from \"./components/likert\";\nimport { QuestionProps } from \"../survey\";\n\ninterface Answer {\n  value: LikertScale;\n  followUpResponse?: string | LikertFollowUpMultiSelectAnswer;\n}\nexport default function Nps({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n}: QuestionProps<\n  Answer,\n  {\n    prompt: string;\n    followUpLowScore: boolean;\n    followUpPrompt?: string;\n    description?: string;\n  }\n>) {\n  const label = customizations.prompt;\n  const description = customizations.description;\n  const followUpLowScore = customizations.followUpLowScore;\n  const answerIsValid = typeof currentAnswer?.value !== \"undefined\";\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  return (\n    <div className=\"nps\">\n      {followUpLowScore ? (\n        <Likert\n          value={currentAnswer ? currentAnswer.value : undefined}\n          prompt={label}\n          description={description}\n          onChangeValue={(newValue) =>\n            updateAnswer(\n              currentAnswer ? { ...currentAnswer, value: newValue } : { value: newValue }\n            )\n          }\n          followUpLowScore={true}\n          followUpPrompt={customizations.followUpPrompt}\n          followUpResponse={\n            currentAnswer && currentAnswer.followUpResponse ? currentAnswer.followUpResponse : \"\"\n          }\n          onChangeLowFollowUp={(newResponse) => {\n            if (!currentAnswer)\n              throw new Error(\"Attempted to update NPS low score follow up without a score\");\n            updateAnswer({ ...currentAnswer, followUpResponse: newResponse });\n          }}\n        />\n      ) : (\n        <Likert\n          value={currentAnswer ? currentAnswer.value : undefined}\n          prompt={label}\n          description={description}\n          onChangeValue={(newValue) =>\n            updateAnswer(\n              currentAnswer ? { ...currentAnswer, value: newValue } : { value: newValue }\n            )\n          }\n          followUpLowScore={false}\n        />\n      )}\n    </div>\n  );\n}\n","/*\nCopyright (c) Uber Technologies, Inc.\n\nThis source code is licensed under the MIT license found in the\nLICENSE file in the root directory of this source tree.\n*/\n\n/* eslint-disable import/prefer-default-export */\nexport var STATE_TYPE = {\n  change: 'CHANGE'\n};\nexport var ALIGN = {\n  vertical: 'vertical',\n  horizontal: 'horizontal'\n};\n/* eslint-enable import/prefer-default-export */","import React from \"react\";\nimport FormControl from \"../../inputs/form_control\";\nimport Select, { SelectProps } from \"../../inputs/select\";\nimport PromptWithSecondaryText from \"./shared_components/prompt_with_secondary_text\";\nimport { Overrides } from \"baseui/overrides\";\nimport nextId from \"react-id-generator\";\nimport { Option, SelectOverrides, Value } from \"baseui/select\";\nimport InputQuestionWrapper from \"./input_question_wrapper\";\nimport Radio, { RadioGroup, RadioProps } from \"../../inputs/radio\";\nimport styled from \"styled-components\";\nimport baseuiTheme from \"../../../../styling/baseui_theme\";\nimport { InputOverrides } from \"baseui/input\";\nimport { FormControlOverrides } from \"baseui/form-control\";\nimport { useConstructAriaLabel } from \"./use_construct_aria_label\";\nimport { getFormControlLabel } from \"./shared_components/shared_form_control_label\";\nimport { captureError } from \"../../../../../utils/capture_error\";\n\nconst SELECT_NAMESPACE = \"single-select-input\";\n\n// marginbottom prop is not camel cased to avoid this console warning:\n// Warning: React does not recognize the `marginBottom` prop on a DOM element.\nconst StyledPromptWithSecondaryTextWrapper = styled.div<{ marginbottom?: string }>`\n  margin-bottom: ${({ marginbottom }) => marginbottom};\n`;\n\nconst StyledFollowUpWrapper = styled.div<{ marginTop?: string }>`\n  margin-top: ${({ marginTop }) => marginTop};\n`;\n\n// Normalize some of the interface between Select and Radio, which have\n// slightly different types in the Base library\nexport interface SelectQuestionWrapperValue {\n  id: string;\n  label: string;\n}\n// First, create a type from the shared prop names between Select and Radio\ninterface PickRadioSelectCombinedProps\n  extends Pick<SelectProps | RadioProps, keyof SelectProps & keyof RadioProps> {}\n// Next, omit these shared props so we can normalize their types below\ninterface OmitRadioSelectCombinedProps\n  extends Omit<PickRadioSelectCombinedProps, \"value\" | \"options\" | \"onChange\"> {}\n// Finally, normalize these types so that they can be used interchangeably\nexport interface RadioSelectCombinedProps extends OmitRadioSelectCombinedProps {\n  options: { label: string; id: string }[];\n  value?: SelectQuestionWrapperValue | Option;\n  onChange: (value: SelectQuestionWrapperValue | Option) => void;\n}\n\nexport interface SelectQuestionWrapperProps extends RadioSelectCombinedProps {\n  supplementalQuestionPrompt?: string;\n  secondaryText?: string;\n  label?: string;\n  optional: boolean;\n  placeholder?: string;\n  errorMessage?: string;\n  showFollowUp?: boolean;\n  followUpPrompt?: string;\n  followUpIsOptional?: boolean;\n  followUpCurrentCharacterCount?: number;\n  followUpMaxCharacterCount?: number;\n  followUpValue?: string;\n  followUpErrorMessage?: string;\n  followUpAriaLabel?: string; // Use this intentionally if the supplemental question prompt, secondary text, and label cannot be provided, such as in the case of a follow up input to an \"other\" option\n  onChangeFollowUpValue?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n  // A carry over from the current implementation, which allows the question component to tell the parent\n  // component if it has an error or not. This is used to determine if the form can be submitted or not.\n  setAbleToSubmit?: (ableToSubmit: boolean) => void;\n  dataTest?: string;\n}\n\nconst selectOverrides: Overrides<SelectOverrides> = {\n  Root: {\n    style: ({ $theme }) => ({\n      marginTop: `-${$theme.sizing.scale500}`,\n      maxWidth: \"620px\",\n    }),\n  },\n};\n\nconst radioFormControlOverrides: Overrides<FormControlOverrides> = {\n  Label: {\n    style: () => {\n      return {\n        marginBottom: 0,\n      };\n    },\n  },\n};\n\nconst inputOverrides = (maxCharacters?: number): Overrides<InputOverrides> => ({\n  Root: {\n    style: ({ $theme }) => ({\n      marginTop:\n        // If we have a character counter, reduce the top margin.\n        maxCharacters ? `0` : `${$theme.sizing.scale300}`,\n      maxWidth: \"620px\",\n    }),\n  },\n});\n\nconst RADIO_VARIATION_CUTOFF = 5;\n\nconst SelectQuestionWrapper = ({\n  supplementalQuestionPrompt,\n  secondaryText, // customizations.description\n  label, //customizations.prompt\n  value, //currentAnswer\n  optional, //customizations.optional\n  placeholder,\n  errorMessage,\n  showFollowUp,\n\n  followUpPrompt, // customizations.followUp.prompt\n  followUpIsOptional = false, // customizations.followUp?.optional,\n  followUpCurrentCharacterCount,\n  followUpMaxCharacterCount,\n  followUpValue,\n  followUpErrorMessage,\n  followUpAriaLabel,\n  onChangeFollowUpValue,\n  setAbleToSubmit,\n  dataTest = \"select-question-wrapper\",\n  ...selectProps\n}: SelectQuestionWrapperProps) => {\n  const { constructAriaLabel } = useConstructAriaLabel();\n\n  if (!label && !supplementalQuestionPrompt) {\n    captureError(\n      \"Cannot render question: SelectQuestionWrapper must have a label or supplementalQuestionPrompt but found neither\",\n    );\n    return null;\n  }\n\n  const selectId = nextId(SELECT_NAMESPACE);\n\n  const { options } = selectProps;\n\n  return (\n    <div>\n      {supplementalQuestionPrompt && (\n        <StyledPromptWithSecondaryTextWrapper\n          marginbottom={\n            !label && options.length > RADIO_VARIATION_CUTOFF\n              ? baseuiTheme.sizing.scale650\n              : !label && !!secondaryText && options.length <= RADIO_VARIATION_CUTOFF\n                ? `-${baseuiTheme.sizing.scale400}`\n                : undefined\n          }\n        >\n          <PromptWithSecondaryText\n            supplementalQuestionPrompt={supplementalQuestionPrompt}\n            secondaryText={secondaryText}\n            optional={optional}\n          />\n        </StyledPromptWithSecondaryTextWrapper>\n      )}\n      {(options?.length as number) > RADIO_VARIATION_CUTOFF && (\n        <FormControl\n          label={getFormControlLabel(\n            supplementalQuestionPrompt,\n            label,\n            optional,\n            secondaryText,\n            dataTest,\n          )}\n          htmlFor={selectId}\n          error={errorMessage}\n          dataTest={dataTest}\n        >\n          <Select\n            id={selectId}\n            {...(selectProps as unknown as SelectProps)}\n            placeholder={placeholder}\n            error={!!errorMessage}\n            aria-label={constructAriaLabel(\n              supplementalQuestionPrompt,\n              secondaryText,\n              label,\n              optional,\n            )}\n            // Even though this is single select, for some reason Base shows the placeholder alongside the\n            // selected value if the value provided here is not an array?\n            value={value ? ([value] as Value) : undefined}\n            onChange={(params) => selectProps.onChange(params.value[0])}\n            overrides={selectOverrides}\n            searchable\n            clearable\n            dataTest={dataTest}\n          />\n        </FormControl>\n      )}\n      {(options?.length as number) <= RADIO_VARIATION_CUTOFF && (\n        <FormControl\n          label={getFormControlLabel(\n            supplementalQuestionPrompt,\n            label,\n            optional,\n            secondaryText,\n            dataTest,\n          )}\n          htmlFor={selectId}\n          error={errorMessage}\n          overrides={radioFormControlOverrides}\n          dataTest={`${dataTest}-form-control`}\n        >\n          <RadioGroup\n            id={selectId}\n            aria-label={constructAriaLabel(\n              supplementalQuestionPrompt,\n              secondaryText,\n              label,\n              optional,\n            )}\n            {...(selectProps as unknown as RadioProps)}\n            onChange={(e) =>\n              selectProps.onChange({\n                id: e.target.value,\n                label: options.find((option) => option.id === e.target.value)?.label ?? \"\",\n              })\n            }\n            value={(value as SelectQuestionWrapperValue)?.id}\n            error={!!errorMessage}\n            overrides={undefined}\n          >\n            {options.map((option, idx) => (\n              <Radio\n                value={option.id}\n                key={option.id}\n                data-test={`${dataTest}-radio-option-${idx + 1}`}\n              >\n                <span data-test={`${dataTest}-radio-option-${option.id}`}>{option.label}</span>\n              </Radio>\n            ))}\n          </RadioGroup>\n        </FormControl>\n      )}\n      {showFollowUp && (\n        <StyledFollowUpWrapper\n          marginTop={\n            !followUpPrompt && options.length <= RADIO_VARIATION_CUTOFF\n              ? `-${baseuiTheme.sizing.scale800}`\n              : options.length > RADIO_VARIATION_CUTOFF\n                ? baseuiTheme.sizing.scale750\n                : undefined\n          }\n        >\n          <InputQuestionWrapper\n            label={followUpPrompt}\n            optional={!!followUpIsOptional}\n            value={followUpValue}\n            onChange={onChangeFollowUpValue}\n            currentCharacterCount={followUpCurrentCharacterCount}\n            maxCharacterCount={followUpMaxCharacterCount}\n            errorMessage={followUpErrorMessage}\n            ariaLabel={followUpAriaLabel}\n            overrides={inputOverrides(followUpMaxCharacterCount)}\n            dataTest=\"select-follow-up-input\"\n          />\n        </StyledFollowUpWrapper>\n      )}\n    </div>\n  );\n};\n\nexport default SelectQuestionWrapper;\n","import { Option } from \"../question_helpers\";\n\nexport interface Answer {\n  selectedOption?: string | Option | undefined;\n  writeIn?: string;\n  followUpResponse?: string;\n  label?: string;\n}\n\nexport interface Customizations {\n  prompt: string;\n  description?: string;\n  options: (string | Option)[];\n  followUp?: {\n    option: string;\n    optional?: boolean;\n    prompt: string;\n    includeOpenResponse: boolean;\n    placeholder?: string;\n  };\n  optional?: boolean;\n  withOtherOption?: Option;\n}\n\nexport function isOptional(customizations: Customizations) {\n  return typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n}\n\nexport function getOptionsForSelectComponent(options: (string | Option)[], otherOption?: Option) {\n  const optionsForSelectComponent = options\n    .filter((option) => option)\n    .map((option) => {\n      if (typeof option === \"object\") {\n        return { id: option.oid, label: option.text };\n      } else if (typeof option === \"string\") {\n        const snakeCaseOption = option\n          .replace(/[^a-zA-Z0-9👍👎\\s]/gu, \"\")\n          .trim()\n          .toLowerCase()\n          .replace(/\\s+/g, \"_\");\n        return { id: snakeCaseOption, label: option };\n      }\n      return { id: option, label: option };\n    });\n  const optionsIncludeOtherOption = optionsForSelectComponent\n    .map((option) => option.id)\n    .includes(otherOption?.oid as string);\n\n  // If 'Other' option isn't included already, add it to the end of the list\n  // Adding this extra bit to check if this option is already present in the array because for some reason\n  // it was being added multiple times.\n  if (otherOption?.oid && !optionsIncludeOtherOption) {\n    optionsForSelectComponent.push({ id: otherOption.oid, label: otherOption.text });\n  }\n  return optionsForSelectComponent;\n}\n\nexport function getQuestionOptions(options: (string | Option)[], otherOption?: Option) {\n  const questionOptions = options.map((option) => option as Option);\n\n  const questionOptionsIncludesOtherOption = questionOptions\n    .map((option) => option.oid)\n    .includes(otherOption?.oid as string);\n\n  // If 'Other' option isn't included already, add it to the end of the list\n  // Adding this extra bit to check if this option is already present in the array because for some reason\n  // it was being added multiple times.\n  if (otherOption && !questionOptionsIncludesOtherOption) {\n    questionOptions.push(otherOption);\n  }\n  return questionOptions;\n}\n","import React, { useContext, useEffect } from \"react\";\nimport {\n  RadioGroup as DeprecatedRadioGroup,\n  RadioButton,\n} from \"../../../components/data_entry/radio\";\nimport Input from \"../../../components/data_entry/input\";\nimport TextArea from \"../../../components/data_entry/text_area\";\nimport QuestionLabel from \"../components/question_label\";\nimport QuestionFieldsetLegend, { StyledFieldset } from \"../components/question_fieldset_legend\";\nimport { SurveyContext, SurveyDisplay } from \"../../survey\";\nimport styled from \"styled-components\";\nimport nextId from \"react-id-generator\";\nimport { getOptionObjectFromText, getOptionText, selectedOptionPresent } from \"../question_helpers\";\nimport { Answer, Customizations, getQuestionOptions, isOptional } from \"./select_shared_utils\";\n\nconst StyledFollowUp = styled.div`\n  margin-top: 2em;\n`;\n\nexport default function DeprecatedSelect({\n  customizations,\n  updateAnswer,\n  currentAnswer,\n  setAbleToSubmit,\n}: {\n  customizations: Customizations;\n  updateAnswer: (newAnswer: Answer) => void;\n  currentAnswer?: Answer;\n  setAbleToSubmit: (ableToSubmit: boolean) => void;\n}) {\n  const { display } = useContext(SurveyContext);\n  const id = nextId();\n\n  const optional = isOptional(customizations);\n  const selectedOption = currentAnswer?.selectedOption;\n\n  // These options have the structure of { oid: string, text: string }[]\n  const questionOptions = getQuestionOptions(\n    customizations.options,\n    customizations.withOtherOption,\n  );\n  const withOtherOption = customizations.withOtherOption;\n\n  const followUp = customizations.followUp;\n  const followUpOptionSelected = followUp && getOptionText(selectedOption) === followUp?.option;\n\n  const optionalFollowUp =\n    typeof followUp?.optional === \"undefined\" ? true : customizations.optional;\n\n  const otherOptionSelected =\n    withOtherOption && getOptionText(currentAnswer?.selectedOption) === withOtherOption.text;\n\n  const valueProvidedForOtherOption =\n    currentAnswer?.writeIn != null && currentAnswer.writeIn.length > 0;\n\n  const valueProvidedForFollowUpOption = (currentAnswer?.followUpResponse?.length || 0) > 0;\n\n  const followUpIsValid =\n    !followUpOptionSelected || optionalFollowUp || valueProvidedForFollowUpOption;\n\n  const otherOptionIsValid = !otherOptionSelected || valueProvidedForOtherOption;\n\n  const answerIsValid =\n    optional || (selectedOptionPresent(selectedOption) && otherOptionIsValid && followUpIsValid);\n\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  return (\n    <div className=\"multi-select\">\n      <StyledFieldset name={customizations.prompt}>\n        <QuestionFieldsetLegend\n          legend={customizations.prompt}\n          description={customizations.description}\n          questionIsOptional={optional}\n          // We want to hide the required marker for micro surveys, but not on survey pages\n          // because there is currently no error handling/feedback when submitting a survey without answering all required questions\n          hideRequiredMarker={display === SurveyDisplay.banner}\n          className=\"question-label\"\n          data-test=\"single-select-question-label\"\n        />\n        {(display == SurveyDisplay.banner || display == SurveyDisplay.page) && (\n          <DeprecatedRadioGroup\n            name=\"selectQuestion\"\n            value={getOptionText(selectedOption)}\n            onChange={(newValue) =>\n              updateAnswer({ selectedOption: getOptionObjectFromText(newValue, questionOptions) })\n            }\n            role=\"group\"\n            aria-labelledby={id}\n          >\n            {questionOptions.map((option) => {\n              const label = getOptionText(option) || \"\";\n              return (\n                <RadioButton\n                  data-test=\"select-option\"\n                  key={label}\n                  label={label}\n                  value={label}\n                  role=\"radio\"\n                />\n              );\n            })}\n          </DeprecatedRadioGroup>\n        )}\n        {selectedOption && otherOptionSelected && (\n          <Input\n            type=\"text\"\n            value={currentAnswer && currentAnswer.writeIn ? currentAnswer.writeIn : \"\"}\n            onChange={({ currentTarget: { value: updatedWriteIn } }) =>\n              updateAnswer({\n                selectedOption: selectedOption,\n                writeIn: updatedWriteIn,\n              })\n            }\n          />\n        )}\n        {followUp && followUpOptionSelected && (\n          <StyledFollowUp>\n            <QuestionLabel\n              label={followUp.prompt}\n              className=\"question-label\"\n              questionIsOptional={optionalFollowUp}\n            />\n            {followUp.includeOpenResponse && (\n              <TextArea\n                data-test=\"select-follow-up-input\"\n                rows={3}\n                placeholder={followUp.placeholder ? followUp.placeholder : undefined}\n                questionIsOptional={optionalFollowUp}\n                onChange={({ currentTarget: { value: updatedResponse } }) =>\n                  updateAnswer({\n                    ...currentAnswer,\n                    selectedOption: selectedOption,\n                    followUpResponse: updatedResponse,\n                  })\n                }\n                value={currentAnswer ? currentAnswer.followUpResponse : \"\"}\n              />\n            )}\n          </StyledFollowUp>\n        )}\n      </StyledFieldset>\n    </div>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { QuestionProps } from \"../../survey\";\nimport SelectQuestionWrapper from \"../../../components/base_ui/higher_order_components/questions/select_question_wrapper\";\nimport DeprecatedSelect from \"./deprecated_select\";\nimport {\n  Answer,\n  Customizations,\n  isOptional,\n  getOptionsForSelectComponent,\n  getQuestionOptions,\n} from \"./select_shared_utils\";\nimport { getOptionObjectFromText, getOptionOid, getOptionText } from \"../question_helpers\";\n\nconst SELECT_FOLLOW_UP_CHARACTER_LIMIT = 50;\n\nexport default function SurveyQuestionSelect({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n  dataTest = \"survey-question-select\",\n}: QuestionProps<Answer, Customizations>) {\n  const selectedOption = currentAnswer?.selectedOption;\n  const optional = isOptional(customizations);\n\n  // These options have the structure of { id: string, label: string }[] needed for the SelectQuestionWrapper component\n  const selectComponentOptions = getOptionsForSelectComponent(\n    customizations.options,\n    customizations.withOtherOption,\n  );\n\n  // These options have the structure of { oid: string, text: string }[] needed to transform the component option selected\n  // to a valid question answer.\n  const questionOptions = getQuestionOptions(\n    customizations.options,\n    customizations.withOtherOption,\n  );\n\n  const followUpOptionSelected =\n    customizations.followUp &&\n    currentAnswer &&\n    getOptionText(selectedOption) === customizations.followUp?.option;\n\n  const otherOptionSelected = currentAnswer && getOptionOid(selectedOption) === \"other\";\n\n  const showFollowUp = followUpOptionSelected || otherOptionSelected;\n\n  const { followUpResponse, writeIn } = currentAnswer || {};\n  const followUpCharacterCount = followUpResponse?.length ?? writeIn?.length ?? 0;\n  const maximumCharacterLimitExceededBy = followUpCharacterCount - SELECT_FOLLOW_UP_CHARACTER_LIMIT;\n\n  // The logic implemented here is mirrored from the deprecated select component\n  const followUpIsOptional =\n    typeof customizations.followUp?.optional === \"undefined\" ? true : customizations.optional;\n\n  const followUpRequiredAndWithinCharacterLimit =\n    !followUpIsOptional &&\n    showFollowUp &&\n    followUpCharacterCount > 0 &&\n    maximumCharacterLimitExceededBy <= 0;\n\n  const followUpNotRequiredAndWithinCharacterLimit =\n    followUpIsOptional && showFollowUp && maximumCharacterLimitExceededBy <= 0;\n\n  const noFollowUpIsAsked = !customizations.followUp && !otherOptionSelected;\n\n  const followUpIsValid =\n    followUpRequiredAndWithinCharacterLimit ||\n    followUpNotRequiredAndWithinCharacterLimit ||\n    noFollowUpIsAsked ||\n    !showFollowUp;\n\n  const answerIsValid = optional || !!currentAnswer;\n\n  const followUpCurrentCharacterCount = followUpCharacterCount ?? 0;\n\n  const followUpCharacterLimitExceeded = !followUpIsValid && maximumCharacterLimitExceededBy > 0;\n\n  const requiredErrorMessage = \"Please complete the required field.\";\n  const characterLimitErrorMessage = `Maximum character limit exceeded by ${maximumCharacterLimitExceededBy} character${maximumCharacterLimitExceededBy > 1 ? \"s\" : \"\"}.`;\n\n  const followUpMissingButRequired =\n    !followUpIsValid && showValidation && currentAnswer?.followUpResponse === undefined;\n\n  const followUpAriaLabel =\n    showFollowUp && !customizations.followUp?.prompt\n      ? `Follow-up input field for: ${currentAnswer.label}`\n      : otherOptionSelected\n        ? `Follow-up input field for: ${customizations.withOtherOption?.text}`\n        : undefined;\n\n  const ableToSubmit = answerIsValid && followUpIsValid;\n\n  useEffect(() => {\n    setAbleToSubmit(ableToSubmit as boolean);\n  }, [ableToSubmit, setAbleToSubmit]);\n\n  const select = (\n    <SelectQuestionWrapper\n      label={customizations.prompt}\n      secondaryText={customizations.description}\n      optional={optional}\n      options={selectComponentOptions}\n      value={selectComponentOptions.find(\n        (option) =>\n          option.id === getOptionOid(selectedOption) ||\n          option.label === getOptionText(selectedOption),\n      )}\n      onChange={(newAnswer) => {\n        updateAnswer({\n          selectedOption: newAnswer\n            ? getOptionObjectFromText(newAnswer.label as string, questionOptions)\n            : undefined,\n        });\n      }}\n      followUpPrompt={otherOptionSelected ? \"\" : customizations.followUp?.prompt}\n      followUpIsOptional={followUpIsOptional}\n      showFollowUp={showFollowUp}\n      followUpMaxCharacterCount={SELECT_FOLLOW_UP_CHARACTER_LIMIT}\n      followUpErrorMessage={\n        followUpCharacterLimitExceeded\n          ? characterLimitErrorMessage\n          : followUpMissingButRequired\n            ? requiredErrorMessage\n            : undefined\n      }\n      followUpCurrentCharacterCount={followUpCurrentCharacterCount}\n      followUpAriaLabel={followUpAriaLabel}\n      errorMessage={!answerIsValid && showValidation ? requiredErrorMessage : undefined}\n      onChangeFollowUpValue={(e) => {\n        updateAnswer({\n          ...currentAnswer,\n          [followUpOptionSelected ? \"followUpResponse\" : \"writeIn\"]: e.target.value,\n        });\n      }}\n      dataTest={dataTest}\n    />\n  );\n\n  return showRefreshedComponents ? (\n    select\n  ) : (\n    <DeprecatedSelect\n      customizations={customizations}\n      updateAnswer={updateAnswer}\n      currentAnswer={currentAnswer}\n      setAbleToSubmit={setAbleToSubmit}\n    />\n  );\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport deprecatedTheme from \"../../../../styling/deprecated_theme\";\nimport FormControl from \"../../inputs/form_control\";\nimport Radio, { RadioGroup, RadioGroupProps, ALIGN } from \"../../inputs/radio\";\nimport { Radio as BaseRadio, RadioGroupOverrides } from \"baseui/radio\";\nimport PromptWithSecondaryText from \"./shared_components/prompt_with_secondary_text\";\nimport { Overrides } from \"baseui/overrides\";\nimport nextId from \"react-id-generator\";\nimport TextAreaQuestionWrapper, { TextareaWrapperProps } from \"./textarea_question_wrapper\";\nimport { useConstructAriaLabel } from \"./use_construct_aria_label\";\nimport MultiSelectQuestionWrapper, { MultiSelectOption } from \"./multiselect_question_wrapper\";\n\nconst LIKERT_RADIO_NAMESPACE = \"likert-radio-group\";\n\nexport interface FollowUpLowQuestionProps {\n  type: string;\n  options: MultiSelectOption[];\n  optional: boolean;\n  onChange: (newAnswer: MultiSelectOption) => void;\n  setAbleToSubmit: (ableToSubmit: boolean) => void;\n  showErrors: boolean;\n}\n\nexport interface LikertQuestionWrapperProps extends RadioGroupProps {\n  prompt: string;\n  description?: string;\n  optional?: boolean;\n  min?: number;\n  minLabel?: string;\n  max?: number;\n  maxLabel?: string;\n  displayValues?: { [key: number]: string | number };\n  errorMessage?: string;\n  followUpPrompt?: string; // deprecated\n  followUpResponse?: string; // deprecated\n  followUpLowScore?: boolean;\n  lowScoreThreshold?: number;\n  followUpLowPrompt?: string;\n  followUpLowResponse?: string;\n  followUpHighScore?: boolean;\n  highScoreThreshold?: number;\n  followUpHighPrompt?: string;\n  followUpHighResponse?: string;\n  followUpCurrentCharacterCount?: TextareaWrapperProps[\"currentCharacterCount\"];\n  followUpMaxCharacterCount?: TextareaWrapperProps[\"maxCharacterCount\"];\n  onChangeFollowUp?: TextareaWrapperProps[\"onChange\"];\n  followUpLowQuestion?: FollowUpLowQuestionProps;\n  followUpLowDescription?: string;\n  followUpErrorMessage?: string;\n  followUpIsOptional?: boolean;\n  dataTest?: string;\n}\n\nconst StyledRadioLabel = styled.div`\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-line-clamp: 3;\n  line-clamp: 3;\n  -webkit-box-orient: vertical;\n`;\nconst StyledTextAreaContainer = styled.div`\n  max-width: 700px;\n  margin-top: ${({ theme }) => theme.sizing.scale800};\n`;\n\nconst likertRadioGroupOverrides: Overrides<RadioGroupOverrides> = {\n  RadioGroupRoot: {\n    style: ({ $theme }) => ({\n      display: \"flex\",\n      alignItems: \"flex-start\",\n      gap: $theme.sizing.scale800,\n      maxWidth: \"800px\",\n    }),\n  },\n};\n\nconst likertRadioOverrides: Overrides<BaseRadio> = {\n  Root: {\n    style: ({ $theme }) => ({\n      display: \"flex\",\n      flexDirection: \"column\",\n      gap: $theme.sizing.scale300,\n      marginTop: \"0px\",\n      marginRight: \"0px\",\n    }),\n  },\n  Label: {\n    style: {\n      maxWidth: \"124px\",\n      paddingLeft: \"0px\",\n      textAlign: \"center\",\n    },\n  },\n};\n\nconst likertRadioGroupOverridesMobile: Overrides<BaseRadio> = {};\nconst likertRadioOverridesMobile: Overrides<BaseRadio> = {};\n\nconst LikertQuestionWrapper = ({\n  prompt,\n  description,\n  optional = false,\n  min = 1,\n  minLabel = \"Low\",\n  max = 7,\n  maxLabel = \"High\",\n  displayValues,\n  errorMessage,\n\n  followUpPrompt, // deprecated\n  followUpResponse, // deprecated\n\n  followUpLowScore = false,\n  lowScoreThreshold = 4,\n  followUpLowPrompt,\n  followUpLowResponse,\n  followUpLowQuestion,\n  followUpLowDescription,\n\n  followUpHighScore = false,\n  highScoreThreshold = 5,\n  followUpHighPrompt,\n  followUpHighResponse,\n\n  followUpIsOptional,\n  followUpCurrentCharacterCount = 0,\n  followUpMaxCharacterCount = 1200,\n  onChangeFollowUp,\n  followUpErrorMessage,\n  dataTest = \"likert-question-wrapper\",\n  ...radioGroupProps\n}: LikertQuestionWrapperProps) => {\n  const { constructAriaLabel } = useConstructAriaLabel();\n  const secondaryText = description\n    ? description\n    : displayValues\n      ? \"\"\n      : `${min}=${minLabel} ${max}=${maxLabel}`;\n\n  // DEPRECATION: avoid using followUpPrompt in favor of followUpLowPrompt\n  //              avoid using followUpResponse in favor of followUpLowResponse\n  // this aliasing is here to support pre-existing likert questions\n  followUpLowPrompt = followUpLowPrompt || followUpPrompt;\n  followUpLowResponse = followUpLowResponse || followUpResponse;\n\n  const inputId = nextId(LIKERT_RADIO_NAMESPACE);\n  const value = radioGroupProps.value ? parseInt(radioGroupProps.value) : undefined;\n\n  // create a new list of display values that includes all sequential numbers between the\n  // specified min and max, regardless of if a display value is provided for that number\n  const radioValues: LikertQuestionWrapperProps[\"displayValues\"] = {};\n  for (let i = min; i <= max; i++) {\n    radioValues[i] = displayValues && displayValues[i] ? displayValues[i] : \"\";\n  }\n\n  const followUpLow = value !== undefined && value <= lowScoreThreshold && followUpLowScore;\n  const followUpHigh = value !== undefined && value >= highScoreThreshold && followUpHighScore;\n\n  const followUpQuestionPrompt = followUpLow\n    ? followUpLowPrompt\n    : followUpHigh\n      ? followUpHighPrompt\n      : \"Can you share more?\";\n\n  const followUpQuestionResponse = followUpLow\n    ? followUpLowResponse\n    : followUpHigh\n      ? followUpHighResponse\n      : \"\"; // setting this to undefined causes weird behavior with inputs that then think they are uncontrolled when they are not\n\n  // check size of window to determine if we should show mobile view - the mobile view\n  // layout is quite different from the desktop view and we cannot make it work through\n  // the use of overrides so assigning this boolean upfront is the best way to go\n  const mobileView = window.matchMedia(deprecatedTheme.deprecatedBreakpoints.small).matches;\n\n  return (\n    <div>\n      <PromptWithSecondaryText\n        supplementalQuestionPrompt={prompt}\n        secondaryText={secondaryText}\n        optional={optional}\n        dataTest={dataTest}\n      />\n      <div>\n        <FormControl htmlFor={inputId} error={errorMessage} dataTest={dataTest}>\n          <RadioGroup\n            name={prompt}\n            id={inputId}\n            aria-label={constructAriaLabel(prompt, description, secondaryText, optional)}\n            align={mobileView ? ALIGN.vertical : ALIGN.horizontal}\n            overrides={mobileView ? likertRadioGroupOverridesMobile : likertRadioGroupOverrides}\n            error={!!errorMessage}\n            {...radioGroupProps}\n          >\n            {Object.entries(radioValues).map(([k, v]) => (\n              <Radio\n                key={k}\n                value={k}\n                overrides={mobileView ? likertRadioOverridesMobile : likertRadioOverrides}\n                dataTest={`${dataTest}-radio-${k}`}\n                tab-index={0}\n              >\n                {mobileView ? (\n                  <StyledRadioLabel>{k && v ? `${k}- ${v}` : `${k}`}</StyledRadioLabel>\n                ) : (\n                  <>\n                    <div>{k}</div>\n                    {k && (\n                      <StyledRadioLabel data-test={`${dataTest}-radio-label-${k}`}>\n                        {v}\n                      </StyledRadioLabel>\n                    )}\n                  </>\n                )}\n              </Radio>\n            ))}\n          </RadioGroup>\n        </FormControl>\n      </div>\n      {(followUpLow || followUpHigh) &&\n        (followUpLowQuestion?.type === \"multi_select\" ? (\n          <MultiSelectQuestionWrapper\n            questionPrompt={followUpLowPrompt || \"\"}\n            secondaryText={followUpLowDescription}\n            optional={followUpLowQuestion.optional}\n            options={followUpLowQuestion.options}\n            showErrors={followUpLowQuestion.showErrors}\n            onChange={followUpLowQuestion.onChange}\n            setAbleToSubmit={followUpLowQuestion.setAbleToSubmit}\n            dataTest={`${dataTest}-multi-select-follow-up-question`}\n          ></MultiSelectQuestionWrapper>\n        ) : (\n          <StyledTextAreaContainer>\n            <TextAreaQuestionWrapper\n              optional={followUpIsOptional !== undefined ? followUpIsOptional : true}\n              supplementalQuestionPrompt={followUpQuestionPrompt}\n              placeholder={\"Type your response here...\"}\n              value={followUpQuestionResponse ?? \"\"}\n              currentCharacterCount={followUpCurrentCharacterCount}\n              maxCharacterCount={followUpMaxCharacterCount}\n              onChange={onChangeFollowUp}\n              errorMessage={followUpErrorMessage}\n              dataTest={`${dataTest}-textarea-follow-up-question`}\n            />\n          </StyledTextAreaContainer>\n        ))}\n    </div>\n  );\n};\n\nexport default LikertQuestionWrapper;\n","import { Scale } from \"../components/likert\";\nimport { Customizations, FollowUpLowQuestionOption } from \"./survey_question_likert\";\n\nexport interface LikertCustomizationsNormalized {\n  label: string; // customizations.prompt\n  description?: string; // customizations.description\n\n  followUpLowDescriptionLabel?: string; // customizations.followUpLowDescription\n  followUpLowScore?: boolean; // customizations.followUpLowScore\n  followUpLowQuestion?: {\n    type: string;\n    options: FollowUpLowQuestionOption[];\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    [propName: string]: any;\n  };\n  followUpLowScoreThreshold?: number; // customizations.lowScoreThreshold\n  followUpLowPrompt?: string; // customizations.followUpLowPrompt\n\n  followUpHighScore?: boolean; // customizations.followUpHighScore\n  followUpHighScoreThreshold?: number; // customizations.highScoreThreshold\n  followUpHighPrompt?: string; // customizations.followUpHighPrompt\n\n  max: Scale; // customizations.max\n  maxLabel?: string; // customizations.maxLabel\n  min: Scale; // customizations.min\n  minLabel?: string; // customizations.minLabel\n\n  displayValues?: string[] | number[]; // customizations.displayValues\n\n  optional: boolean; // customizations.optional\n  followUpLowScoreIsOptional: boolean;\n  followUpHighScoreIsOptional: boolean;\n}\n\nexport const useNormalizeSurveyQuestionLikertCustomizations = (\n  customizations: Customizations\n): LikertCustomizationsNormalized => {\n  customizations.followUpLowScore = customizations.followUpLowScore || customizations.followUpScore;\n  customizations.followUpLowPrompt =\n    customizations.followUpLowPrompt || customizations.followUpPrompt;\n\n  // Deconstruct the customizations object\n  const label = customizations.prompt;\n  const description = customizations.description;\n\n  const followUpLowDescriptionLabel = customizations.followUpLowDescription;\n  const followUpLowScore = customizations.followUpLowScore;\n  const followUpLowQuestion = customizations.followUpLowQuestion; // a non-open-response follow up (in practice, a multi-select question)\n  const followUpLowScoreThreshold = customizations.lowScoreThreshold ?? 4; // mirrors default set in likert_question_wrapper\n  const followUpLowPrompt = customizations.followUpLowPrompt;\n  // Based on hard-coded values in legacy component app/javascript/components/surveys/questions/components/likert.tsx\n  const followUpLowScoreIsOptional = followUpLowQuestion ? !!followUpLowQuestion.optional : true;\n\n  const followUpHighScore = customizations.followUpHighScore;\n  const followUpHighScoreThreshold = customizations.highScoreThreshold ?? 5; // mirrors default set in likert_question_wrapper\n  const followUpHighPrompt = customizations.followUpHighPrompt;\n  // Based on hard-coded values in legacy component app/javascript/components/surveys/questions/components/likert.tsx\n  const followUpHighScoreIsOptional = false;\n\n  const max = customizations.max ?? 7;\n  const maxLabel = customizations.maxLabel;\n  const min = customizations.min ?? 1;\n  const minLabel = customizations.minLabel;\n\n  const displayValues = customizations.displayValues;\n\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n\n  return {\n    label,\n    description,\n\n    followUpLowDescriptionLabel,\n    followUpLowScore,\n    followUpLowQuestion,\n    followUpLowScoreThreshold,\n    followUpLowPrompt,\n\n    followUpHighScore,\n    followUpHighScoreThreshold,\n    followUpHighPrompt,\n\n    max,\n    maxLabel,\n    min,\n    minLabel,\n\n    displayValues,\n\n    optional,\n    followUpLowScoreIsOptional,\n    followUpHighScoreIsOptional,\n  };\n};\n","import { Answer, Customizations } from \"./survey_question_likert\";\nimport { useNormalizeSurveyQuestionLikertCustomizations } from \"./use_normalize_survey_question_likert_customizations\";\n\nexport const LIKERT_FOLLOW_UP_CHARACTER_LIMIT = 1200;\nexport const LIKERT_MULTI_SELECT_OTHER_OPTION_FOLLOW_UP_CHARACTER_LIMIT = 75;\n\nexport const useSurveyQuestionLikertValidation = (\n  customizations: Customizations,\n  currentAnswer: Answer | undefined,\n  followUpState: { triggeredLowScoreFollowUp: boolean; triggeredHighScoreFollowUp: boolean }\n) => {\n  const { triggeredLowScoreFollowUp, triggeredHighScoreFollowUp } = followUpState;\n\n  const {\n    followUpLowScore,\n    followUpLowQuestion,\n    followUpHighScore,\n    optional,\n    followUpLowScoreIsOptional,\n    followUpHighScoreIsOptional,\n  } = useNormalizeSurveyQuestionLikertCustomizations(customizations);\n\n  const { value, followUpLowResponse, followUpHighResponse } = currentAnswer || {};\n  const followUpLowMultiSelectResponse =\n    typeof followUpLowResponse !== \"string\" && followUpLowResponse?.standard !== undefined\n      ? followUpLowResponse\n      : undefined;\n\n  const hasOpenResponseFollowUp =\n    (triggeredLowScoreFollowUp || triggeredHighScoreFollowUp) && !followUpLowQuestion;\n  const hasMultiSelectFollowUp =\n    (triggeredLowScoreFollowUp || triggeredHighScoreFollowUp) && followUpLowQuestion;\n  const followUpLowResponseLength =\n    hasOpenResponseFollowUp && followUpLowResponse\n      ? (followUpLowResponse as string).length\n      : undefined;\n  const followUpHighResponseLength =\n    hasOpenResponseFollowUp && followUpHighResponse\n      ? (followUpHighResponse as string).length\n      : undefined;\n  const followUpLowResponseWriteInLength =\n    hasMultiSelectFollowUp && followUpLowMultiSelectResponse?.writeIn\n      ? (followUpLowMultiSelectResponse?.writeIn as string).length\n      : undefined;\n  const followUpCharacterCount =\n    followUpLowResponseLength ??\n    followUpHighResponseLength ??\n    followUpLowResponseWriteInLength ??\n    0;\n  const maximumCharacterLimitExceededBy =\n    followUpCharacterCount -\n    (hasOpenResponseFollowUp\n      ? LIKERT_FOLLOW_UP_CHARACTER_LIMIT\n      : LIKERT_MULTI_SELECT_OTHER_OPTION_FOLLOW_UP_CHARACTER_LIMIT);\n\n  const deprecatedAnswerIsValid = optional ? true : typeof value !== \"undefined\";\n\n  const answerIsValid = optional ? true : typeof value !== \"undefined\";\n\n  const noFollowUpIsAsked =\n    (!followUpLowScore && !followUpHighScore) ||\n    (!triggeredLowScoreFollowUp && !triggeredHighScoreFollowUp);\n  const followUpLowScoreIsValid =\n    (triggeredLowScoreFollowUp &&\n      followUpLowScore &&\n      followUpLowScoreIsOptional &&\n      maximumCharacterLimitExceededBy <= 0) ||\n    (triggeredLowScoreFollowUp &&\n      followUpLowScore &&\n      !followUpLowScoreIsOptional &&\n      maximumCharacterLimitExceededBy <= 0 &&\n      (followUpLowResponseLength ?? 0) > 0) ||\n    !followUpLowScore ||\n    triggeredHighScoreFollowUp;\n  const followUpHighScoreIsValid =\n    (triggeredHighScoreFollowUp &&\n      followUpHighScore &&\n      followUpHighScoreIsOptional &&\n      maximumCharacterLimitExceededBy <= 0) ||\n    (triggeredHighScoreFollowUp &&\n      followUpHighScore &&\n      !followUpHighScoreIsOptional &&\n      maximumCharacterLimitExceededBy <= 0 &&\n      (followUpHighResponseLength ?? 0) > 0) ||\n    !followUpHighScore ||\n    triggeredLowScoreFollowUp;\n  const followUpIsValid =\n    noFollowUpIsAsked || (followUpLowScoreIsValid && followUpHighScoreIsValid);\n\n  return {\n    deprecatedAnswerIsValid,\n    answerIsValid,\n    followUpIsValid,\n    ableToSubmit: answerIsValid && followUpIsValid,\n    maximumCharacterLimitExceededBy,\n    followUpCurrentCharacterCount: followUpLowResponseLength ?? followUpHighResponseLength ?? 0,\n    maximumCharacterLimitToRespect: hasOpenResponseFollowUp\n      ? LIKERT_FOLLOW_UP_CHARACTER_LIMIT\n      : hasMultiSelectFollowUp\n      ? LIKERT_MULTI_SELECT_OTHER_OPTION_FOLLOW_UP_CHARACTER_LIMIT\n      : 0,\n  };\n};\n","import React, { useEffect } from \"react\";\nimport Likert, {\n  Scale as LikertScale,\n  LikertFollowUpMultiSelectAnswer,\n} from \"../components/likert\";\nimport { QuestionProps } from \"../../survey\";\nimport LikertQuestionWrapper, {\n  FollowUpLowQuestionProps,\n} from \"../../../components/base_ui/higher_order_components/questions/likert_question_wrapper\";\nimport {\n  MultiSelectFollowUpQuestionType,\n  MultiSelectOption,\n} from \"../../../components/base_ui/higher_order_components/questions/multiselect_question_wrapper\";\nimport { Option } from \"../question_helpers\";\nimport {\n  LikertCustomizationsNormalized,\n  useNormalizeSurveyQuestionLikertCustomizations,\n} from \"./use_normalize_survey_question_likert_customizations\";\nimport {\n  LIKERT_FOLLOW_UP_CHARACTER_LIMIT,\n  LIKERT_MULTI_SELECT_OTHER_OPTION_FOLLOW_UP_CHARACTER_LIMIT,\n  useSurveyQuestionLikertValidation,\n} from \"./use_survey_question_likert_validation\";\n\nexport interface Answer {\n  value: LikertScale;\n  followUpResponse?: string | LikertFollowUpMultiSelectAnswer;\n  followUpLowResponse?: string | LikertFollowUpMultiSelectAnswer;\n  followUpHighResponse?: string | LikertFollowUpMultiSelectAnswer;\n}\n\nexport interface FollowUpLowQuestionOption {\n  oid: string;\n  text: string;\n}\n\nexport interface Customizations {\n  prompt: string;\n  followUpPrompt?: string;\n  followUpScore?: boolean;\n  followUpLowScore?: boolean;\n  followUpLowPrompt?: string;\n  followUpLowDescription?: string;\n  followUpLowQuestion?: {\n    type: string;\n    options: FollowUpLowQuestionOption[];\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    [propName: string]: any;\n  };\n  followUpHighScore: boolean;\n  followUpHighPrompt?: string;\n  max?: LikertScale;\n  maxLabel?: string;\n  min?: LikertScale;\n  minLabel?: string;\n  displayValues?: string[] | number[];\n  optional?: boolean;\n  lowScoreThreshold?: number;\n  highScoreThreshold?: number;\n  description?: string;\n  hideForKeyValuePairsOr?: { [key: string]: boolean };\n}\n\nexport default function SurveyQuestionLikert({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n  dataTest = \"survey-question-likert\",\n}: QuestionProps<Answer, Customizations>) {\n  const { value, followUpLowResponse, followUpHighResponse } = currentAnswer || {};\n  const followUpLowMultiSelectResponse =\n    typeof followUpLowResponse !== \"string\" && followUpLowResponse?.standard !== undefined\n      ? followUpLowResponse\n      : undefined;\n\n  const {\n    label,\n    description,\n    followUpLowDescriptionLabel,\n    followUpLowScore,\n    followUpLowQuestion,\n    followUpLowScoreThreshold,\n    followUpLowPrompt,\n    followUpHighScore,\n    followUpHighScoreThreshold,\n    followUpHighPrompt,\n    max,\n    maxLabel,\n    minLabel,\n    min,\n    displayValues,\n    optional,\n    followUpLowScoreIsOptional,\n    followUpHighScoreIsOptional,\n  }: LikertCustomizationsNormalized =\n    useNormalizeSurveyQuestionLikertCustomizations(customizations);\n\n  const valueTriggersLowScoreFollowUp = (value?: LikertScale) => {\n    return (\n      followUpLowScore === true && value !== undefined && +value <= (followUpLowScoreThreshold ?? 0)\n    );\n  };\n  const valueTriggersHighScoreFollowUp = (value?: LikertScale) => {\n    return (\n      followUpHighScore === true &&\n      value !== undefined &&\n      +value >= (followUpHighScoreThreshold ?? 0)\n    );\n  };\n  const triggeredLowScoreFollowUp = valueTriggersLowScoreFollowUp(value);\n  const triggeredHighScoreFollowUp = valueTriggersHighScoreFollowUp(value);\n\n  const {\n    deprecatedAnswerIsValid,\n    answerIsValid,\n    followUpIsValid,\n    ableToSubmit,\n    maximumCharacterLimitExceededBy,\n    followUpCurrentCharacterCount,\n    maximumCharacterLimitToRespect,\n  } = useSurveyQuestionLikertValidation(customizations, currentAnswer, {\n    triggeredLowScoreFollowUp,\n    triggeredHighScoreFollowUp,\n  });\n\n  const followUpIsOptional = triggeredLowScoreFollowUp\n    ? followUpLowScoreIsOptional\n    : triggeredHighScoreFollowUp\n      ? followUpHighScoreIsOptional\n      : true;\n\n  const requiredErrorMessage = \"Please complete the required field.\";\n  const characterLimitErrorMessage =\n    maximumCharacterLimitExceededBy === 1\n      ? `Maximum character limit exceeded by ${maximumCharacterLimitExceededBy} character.`\n      : `Maximum character limit exceeded by ${maximumCharacterLimitExceededBy} characters.`;\n\n  useEffect(() => {\n    if (showRefreshedComponents) {\n      setAbleToSubmit(ableToSubmit);\n    } else {\n      setAbleToSubmit(deprecatedAnswerIsValid);\n    }\n  }, [deprecatedAnswerIsValid, ableToSubmit, setAbleToSubmit, showRefreshedComponents]);\n\n  // Transform data for the new component\n  const displayValuesToFormat = displayValues ? displayValues : [];\n  const displayValuesFormattedForLikert = !displayValues\n    ? undefined\n    : Object.fromEntries(displayValuesToFormat.map((v, index) => [index + min, v]));\n  const followUpLowQuestionOptions = followUpLowQuestion\n    ? [\n        ...(followUpLowQuestion.options as FollowUpLowQuestionOption[]).map(\n          (option: FollowUpLowQuestionOption) => ({\n            id: option.oid,\n            label: option.text,\n            value: false,\n          }),\n        ),\n        ...(followUpLowQuestion.withOtherOption\n          ? [\n              {\n                id: followUpLowQuestion.withOtherOption.oid,\n                label: followUpLowQuestion.withOtherOption.text,\n                value: false,\n                followup: {\n                  optional: true,\n                  type: MultiSelectFollowUpQuestionType.TEXT_INPUT,\n                  value: \"\",\n                  maxCharacters: LIKERT_MULTI_SELECT_OTHER_OPTION_FOLLOW_UP_CHARACTER_LIMIT,\n                },\n              },\n            ]\n          : []),\n      ]\n    : [];\n\n  const getValueForMultiSelectOption = (option: (typeof followUpLowQuestionOptions)[0]) =>\n    followUpLowMultiSelectResponse?.standard?.find(\n      (selectedOption) => (selectedOption as Option)?.oid === option.id,\n    )\n      ? true\n      : false;\n\n  // If we're dealing with a multi-select flup, the shape of the followUpLowResponse is not a string, instead:\n  // followUpLowResponse: { standard: [{ oid: something, text: \"Something\", optional: boolean }], writeIn: undefined | \"something\" }\n  const followUpLowQuestionFormattedForLikert = followUpLowQuestion\n    ? {\n        onChange: (newResponse: MultiSelectOption) => {\n          const newResponseHasWriteIn = newResponse.id === followUpLowQuestion.withOtherOption?.oid;\n          const writeIn = newResponseHasWriteIn ? newResponse?.followup?.value : undefined;\n          return currentAnswer && value !== undefined\n            ? updateAnswer({\n                ...currentAnswer,\n                followUpLowResponse:\n                  triggeredLowScoreFollowUp && followUpLowQuestionOptions.length > 0\n                    ? {\n                        standard: followUpLowQuestionOptions\n                          .map((option) =>\n                            option.id === newResponse.id\n                              ? { ...option, ...newResponse, oid: option.id, text: option.label }\n                              : {\n                                  ...option,\n                                  oid: option.id,\n                                  text: option.label,\n                                  value: getValueForMultiSelectOption(option),\n                                },\n                          )\n                          .filter((option) => option.value),\n                        writeIn,\n                      }\n                    : undefined,\n              })\n            : undefined;\n        },\n        setAbleToSubmit: () => {\n          /* No-op. We don't currently support required follow ups for this question. */\n        },\n        type: followUpLowQuestion.type,\n        showErrors: (!followUpIsValid && showValidation) || maximumCharacterLimitExceededBy > 0,\n        optional: followUpLowQuestion.optional,\n        options: followUpLowQuestionOptions.map((option) => ({\n          ...option,\n          value: getValueForMultiSelectOption(option),\n          followup:\n            option.id === followUpLowQuestion.withOtherOption?.oid\n              ? {\n                  ...(option as MultiSelectOption).followup,\n                  value: followUpLowMultiSelectResponse?.writeIn,\n                }\n              : undefined,\n        })),\n      }\n    : undefined;\n\n  const deprecatedLikert = (\n    <div className=\"likert\">\n      {followUpLowScore || followUpHighScore ? (\n        <Likert\n          value={currentAnswer ? currentAnswer.value : undefined}\n          prompt={label}\n          max={max}\n          min={min}\n          maxLabel={customizations.maxLabel}\n          minLabel={customizations.minLabel}\n          optional={optional}\n          displayValues={displayValues}\n          description={description}\n          onChangeValue={(newValue) => {\n            let answer = currentAnswer;\n            if (\n              answer?.followUpHighResponse &&\n              typeof customizations.lowScoreThreshold !== \"undefined\" &&\n              newValue >= customizations?.lowScoreThreshold\n            ) {\n              const { followUpHighResponse, ...withoutFollowUpHighResponse } = answer;\n              answer = withoutFollowUpHighResponse;\n            }\n\n            if (\n              answer?.followUpLowResponse &&\n              typeof customizations.highScoreThreshold !== \"undefined\" &&\n              newValue >= customizations?.highScoreThreshold\n            ) {\n              const { followUpLowResponse, ...withoutFollowUpLowResponse } = answer;\n              answer = withoutFollowUpLowResponse;\n            }\n            updateAnswer({ ...answer, value: newValue });\n          }}\n          followUpLowScore={followUpLowScore}\n          followUpLowPrompt={customizations.followUpLowPrompt}\n          followUpLowDescription={followUpLowDescriptionLabel}\n          followUpLowResponse={\n            currentAnswer && currentAnswer.followUpLowResponse\n              ? currentAnswer.followUpLowResponse\n              : \"\"\n          }\n          followUpLowQuestion={customizations.followUpLowQuestion}\n          lowScoreThreshold={customizations.lowScoreThreshold}\n          onChangeLowFollowUp={(newResponse) => {\n            if (!currentAnswer)\n              throw new Error(\"Attempted to update NPS low score follow up without a score\");\n            updateAnswer({ ...currentAnswer, followUpLowResponse: newResponse });\n          }}\n          followUpHighScore={followUpHighScore}\n          followUpHighPrompt={customizations.followUpHighPrompt}\n          followUpHighResponse={\n            currentAnswer && currentAnswer.followUpHighResponse\n              ? currentAnswer.followUpHighResponse\n              : \"\"\n          }\n          highScoreThreshold={customizations.highScoreThreshold}\n          onChangeHighFollowUp={(newResponse) => {\n            if (!currentAnswer)\n              throw new Error(\"Attempted to update NPS low score follow up without a score\");\n\n            updateAnswer({\n              ...currentAnswer,\n              followUpHighResponse: newResponse,\n            });\n          }}\n        />\n      ) : (\n        <Likert\n          value={currentAnswer ? currentAnswer.value : undefined}\n          prompt={label}\n          max={max}\n          min={min}\n          maxLabel={customizations.maxLabel}\n          minLabel={customizations.minLabel}\n          optional={optional}\n          displayValues={displayValues}\n          description={description}\n          onChangeValue={(newValue) =>\n            updateAnswer(\n              currentAnswer ? { ...currentAnswer, value: newValue } : { value: newValue },\n            )\n          }\n          followUpLowScore={false}\n          followUpHighScore={false}\n        />\n      )}\n    </div>\n  );\n\n  const likert = (\n    <LikertQuestionWrapper\n      optional={optional}\n      prompt={label}\n      description={description}\n      displayValues={displayValuesFormattedForLikert}\n      max={max}\n      maxLabel={maxLabel}\n      min={min}\n      minLabel={minLabel}\n      value={value !== undefined ? value.toString() : undefined}\n      onChange={(e) => {\n        updateAnswer({\n          followUpLowResponse:\n            triggeredLowScoreFollowUp &&\n            valueTriggersLowScoreFollowUp(+e.target.value as LikertScale)\n              ? followUpLowResponse\n              : undefined,\n          followUpHighResponse:\n            triggeredHighScoreFollowUp &&\n            valueTriggersHighScoreFollowUp(+e.target.value as LikertScale)\n              ? followUpHighResponse\n              : undefined,\n          value: +e.target.value as LikertScale,\n        });\n      }}\n      followUpMaxCharacterCount={LIKERT_FOLLOW_UP_CHARACTER_LIMIT}\n      followUpCurrentCharacterCount={followUpCurrentCharacterCount}\n      followUpLowScore={followUpLowScore}\n      followUpLowPrompt={followUpLowPrompt}\n      followUpLowQuestion={followUpLowQuestionFormattedForLikert as FollowUpLowQuestionProps}\n      followUpLowDescription={followUpLowDescriptionLabel}\n      followUpLowResponse={followUpLowResponse as string}\n      lowScoreThreshold={followUpLowScoreThreshold}\n      followUpIsOptional={followUpIsOptional}\n      followUpHighScore={followUpHighScore}\n      followUpHighPrompt={followUpHighPrompt}\n      followUpHighResponse={followUpHighResponse as string}\n      highScoreThreshold={followUpHighScoreThreshold}\n      // This is the handler for open response follow ups. Multi-select follow ups are handled\n      // separately, see above.\n      onChangeFollowUp={(e) => {\n        if (!currentAnswer || !value)\n          throw new Error(\"Attempted to update low/high score follow up without a score\");\n\n        updateAnswer({\n          ...currentAnswer,\n          followUpHighResponse: triggeredHighScoreFollowUp ? e.target.value : undefined,\n          followUpLowResponse: triggeredLowScoreFollowUp ? e.target.value : undefined,\n        });\n      }}\n      errorMessage={!answerIsValid && showValidation ? requiredErrorMessage : undefined}\n      followUpErrorMessage={\n        !followUpIsValid && maximumCharacterLimitExceededBy > 0\n          ? characterLimitErrorMessage\n          : !followUpIsValid &&\n              showValidation &&\n              maximumCharacterLimitExceededBy === maximumCharacterLimitToRespect * -1\n            ? requiredErrorMessage\n            : undefined\n      }\n      dataTest={dataTest}\n    />\n  );\n\n  return showRefreshedComponents ? likert : deprecatedLikert;\n}\n","import { gql } from \"@urql/core\";\nimport { ParticipantSurveyResponsesDocument } from \"../../../generated/graphql\";\nimport { useContext } from \"react\";\nimport { SurveyContext } from \"../../survey\";\nimport { AppContext } from \"../../../app\";\nimport { useQuery } from \"urql\";\nimport { SurveyAudienceContext } from \"../../survey_page\";\n\ngql`\n  query ParticipantSurveyResponses($userId: ID!) {\n    user(id: $userId) {\n      id\n      surveyResponses {\n        id\n        context {\n          participantId\n          mentorshipChatGroupId\n          mentorshipId\n        }\n      }\n    }\n  }\n`;\n\nexport default function useRotatingQuestionIndex({\n  numberOfQuestions,\n  // This is an ugly work around so useSurveyQuestion can use this hook to determine the correct question index for\n  // rotating questions. The error notification component is rendered outside of the SurveyContext provider (because not all instances\n  // of surveys need buttons, errors, or are even submittable, such as the case of previews.). So when useSurveyQuestion calls this hook,\n  // useRotatingQuestion doesn't know what the context of the survey is (since it is called outside of the context of the survey context provider).\n  // We manually pass it in here so we can determine the correct question index and render the right prompt for the error message.\n  // TODO: ripe for refactor of some kind\n  surveyAudienceContext,\n  pause,\n}: {\n  numberOfQuestions: number;\n  surveyAudienceContext?: SurveyAudienceContext;\n  pause?: boolean;\n}): { fetching: boolean; questionIndex?: number } {\n  const { userId } = useContext(AppContext);\n  const currentSurveyContext = useContext(SurveyContext);\n  const surveyId = currentSurveyContext.surveyId;\n  const participantId = currentSurveyContext.participantId;\n  const [{ fetching, error, data }] = useQuery({\n    query: ParticipantSurveyResponsesDocument,\n    variables: { userId },\n    pause,\n  });\n  if (fetching || data === null) return { fetching: true, questionIndex: undefined };\n  if (pause) {\n    return { fetching: false, questionIndex: undefined };\n  }\n  if (error || !data) {\n    throw new Error(\n      `Error determining rotating survey question for survey:${surveyId}, participant${participantId}`\n    );\n  }\n\n  const contextToUse = surveyAudienceContext ?? currentSurveyContext;\n\n  const responses = data.user.surveyResponses.filter((response) => {\n    // we need to make sure the context of this response is applicable. Currently this only includes\n    // mentorships and mentorship chat groups. if we end up adding more context types w/ rotating\n    // questions, this will need to be updated\n    if (contextToUse.mentorshipChatGroupId) {\n      if (\n        !response.context.mentorshipChatGroupId ||\n        // this isn't ideal but graphql ids are strings so we need to make sure whatever we got from rails is a string\n        // (since the context object is untyped json)\n        `${response.context.mentorshipChatGroupId}` !== contextToUse.mentorshipChatGroupId\n      ) {\n        return false;\n      }\n    }\n    if (contextToUse.mentorshipId) {\n      if (\n        !response.context.mentorshipId ||\n        // this isn't ideal but graphql ids are strings so we need to make sure whatever we got from rails is a string\n        // (since the context object is untyped json)\n        `${response.context.mentorshipId}` !== contextToUse.mentorshipId\n      ) {\n        return false;\n      }\n    }\n    if (contextToUse.participantId) {\n      if (\n        !response.context.participantId ||\n        // this isn't ideal but graphql ids are strings so we need to make sure whatever we got from rails is a string\n        // (since the context object is untyped json)\n        `${response.context.participantId}` !== contextToUse.participantId\n      ) {\n        return false;\n      }\n    }\n    return true;\n  });\n  const numberOfResponses = responses.length;\n  const questionIndex = numberOfResponses % numberOfQuestions;\n  return { fetching: false, questionIndex };\n}\n","import React, { useEffect } from \"react\";\nimport { QuestionProps } from \"../survey\";\nimport Likert, { LikertFollowUpMultiSelectAnswer, Scale as LikertScale } from \"./components/likert\";\nimport useRotatingQuestionIndex from \"./hooks/useRotatingQuestion\";\nimport { captureError } from \"../../../utils/capture_error\";\n\nexport interface Answer {\n  prompt: string;\n  value: LikertScale;\n  qid: string;\n  followUpResponse?: string | LikertFollowUpMultiSelectAnswer;\n  followUpQid?: string;\n}\n\nexport interface Customizations {\n  rotatingQuestions: {\n    prompt: string;\n    qid: string;\n    followUpLowScore: boolean;\n    followUpPrompt?: string;\n    followUpQid?: string;\n    description?: string;\n  }[];\n}\n\nexport default function RotatingLikert({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n}: QuestionProps<Answer, Customizations>) {\n  const { fetching, questionIndex } = useRotatingQuestionIndex({\n    numberOfQuestions: customizations.rotatingQuestions.length,\n  });\n  const answerIsValid = typeof currentAnswer?.value !== \"undefined\";\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  if (fetching || questionIndex === null) return <div>Loading...</div>;\n  if (typeof questionIndex === \"undefined\") {\n    captureError(new Error(`Question index is undefined for rotating likert`));\n    throw new Error(\"The question index is undefined\");\n  }\n  const likertQuestion = customizations.rotatingQuestions[questionIndex];\n\n  return (\n    <div className=\"multi-select\">\n      {likertQuestion.followUpLowScore ? (\n        <Likert\n          value={currentAnswer ? currentAnswer.value : undefined}\n          prompt={likertQuestion.prompt}\n          description={likertQuestion.description}\n          onChangeValue={(newValue) =>\n            updateAnswer(\n              currentAnswer\n                ? { ...currentAnswer, value: newValue }\n                : {\n                    prompt: likertQuestion.prompt,\n                    qid: likertQuestion.qid,\n                    followUpQid: likertQuestion.followUpQid,\n                    value: newValue,\n                  },\n            )\n          }\n          followUpLowScore={true}\n          followUpPrompt={likertQuestion.followUpPrompt}\n          followUpResponse={\n            currentAnswer && currentAnswer.followUpResponse ? currentAnswer.followUpResponse : \"\"\n          }\n          onChangeLowFollowUp={(newResponse) => {\n            if (!currentAnswer)\n              throw new Error(\"Attempted to update NPS low score follow up without a score\");\n            updateAnswer({ ...currentAnswer, followUpResponse: newResponse });\n          }}\n        />\n      ) : (\n        <Likert\n          value={currentAnswer ? currentAnswer.value : undefined}\n          prompt={likertQuestion.prompt}\n          description={likertQuestion.description}\n          onChangeValue={(newValue) =>\n            updateAnswer(\n              currentAnswer\n                ? { ...currentAnswer, value: newValue }\n                : { prompt: likertQuestion.prompt, qid: likertQuestion.qid, value: newValue },\n            )\n          }\n          followUpLowScore={false}\n        />\n      )}\n    </div>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { QuestionProps } from \"../survey\";\nimport TextArea from \"../../components/data_entry/text_area\";\nimport QuestionLabel from \"./components/question_label\";\nimport useRotatingQuestionIndex from \"./hooks/useRotatingQuestion\";\n\nexport interface Answer {\n  prompt: string;\n  answer: string;\n  qid: string;\n}\n\nexport interface Customizations {\n  rotatingQuestions: { prompt: string; qid: string }[];\n  placeholder?: string;\n  optional?: boolean;\n  description?: string;\n}\n\nexport default function RotatingOpenResponse({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n}: QuestionProps<Answer, Customizations>) {\n  const { fetching, questionIndex } = useRotatingQuestionIndex({\n    numberOfQuestions: customizations.rotatingQuestions.length,\n  });\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const placeholder = customizations.placeholder;\n  const description = customizations.description;\n  const answerIsValid = optional || (currentAnswer?.answer?.length || 0) > 0;\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  if (fetching || questionIndex === null) return <div>Loading...</div>;\n  if (typeof questionIndex === \"undefined\") throw new Error(\"Failed to load rotating question\");\n  const question = customizations.rotatingQuestions[questionIndex];\n\n  return (\n    <div className=\"multi-select\">\n      <QuestionLabel\n        label={question.prompt}\n        questionIsOptional={optional}\n        description={description}\n      />\n      <TextArea\n        placeholder={\n          placeholder ? placeholder : optional ? undefined : \"Enter n/a if not applicable\"\n        }\n        rows={4}\n        questionIsOptional={optional}\n        onChange={({ currentTarget: { value: updatedResponse } }) =>\n          updateAnswer({\n            prompt: question.prompt,\n            qid: question.qid,\n            answer: updatedResponse,\n          })\n        }\n        value={currentAnswer ? currentAnswer.answer : \"\"}\n      />\n    </div>\n  );\n}\n","import React, { useContext, Fragment, useEffect } from \"react\";\nimport { SurveyContext, QuestionProps } from \"../survey\";\nimport {\n  PostSessionSurveyCareerQuestionDocument,\n  PostSessionSurveyCareerQuestionQuery,\n} from \"../../generated/graphql\";\nimport TextArea from \"../../components/data_entry/text_area\";\nimport { gql } from \"@urql/core\";\nimport QuestionLabel from \"./components/question_label\";\nimport useRotatingQuestionIndex from \"./hooks/useRotatingQuestion\";\nimport { useQuery } from \"urql\";\nimport { captureError } from \"../../../utils/capture_error\";\n\nfunction availableMentorQuestions({\n  studentFirstName,\n  studentGoal,\n  getGeneric = false,\n}: {\n  studentFirstName: string;\n  studentGoal?: string;\n  getGeneric?: boolean;\n}) {\n  const questions = [\n    {\n      prompt:\n        \"Is there anything else you'd like to share about your mentee? For example, important questions they asked, things they are really excited/confused/nervous about, or advice you have for the school to support them better.\",\n      qid: \"rotating_career_mentor_anything_else\",\n    },\n    {\n      prompt: `Please share one way in which you have helped ${\n        getGeneric ? \"{studentName}\" : studentFirstName\n      } be more successful.`,\n      qid: \"rotating_career_mentor_success\",\n    },\n    {\n      prompt: `How has participating in this mentorship program impacted your relationship with your institution?`,\n      qid: \"rotating_career_mentor_impact\",\n    },\n  ];\n  // we only want to include the student goal question if the student has one in their profile\n  if (studentGoal) {\n    questions.splice(2, 0, {\n      prompt: `At the beginning of this program, we asked ${\n        getGeneric ? \"{studentName}\" : studentFirstName\n      } to choose a top goal for the year: secure an internship, learn more about career options, do well in courses, or a write-in answer. They chose: \"${\n        getGeneric ? \"{goal}\" : studentGoal\n      }\". How have you helped ${\n        getGeneric ? \"{studentName}\" : studentFirstName\n      } make progress towards this goal, and/or what difficulties have you encountered along the way?`,\n      qid: \"rotating_career_mentor_goal\",\n    });\n  }\n  return questions;\n}\n\nfunction availableStudentQuestions({\n  mentorFirstName,\n  studentGoal,\n  getGeneric = false,\n}: {\n  mentorFirstName: string;\n  studentGoal?: string;\n  getGeneric?: boolean;\n}) {\n  const questions = [\n    {\n      prompt:\n        \"Is there anything you'd like to share with your school about your mentorship? For example, something you're excited or worried about, or a goal you've set.\",\n      qid: \"rotating_career_mentee_anything_else\",\n    },\n    {\n      prompt: `What is one question ${\n        getGeneric ? \"{mentorName}\" : mentorFirstName\n      } has helped you answer? How did they help you answer it?`,\n      qid: \"rotating_career_mentee_success\",\n    },\n    {\n      prompt: `How has participating in this mentorship program impacted your relationship with your institution?`,\n      qid: \"rotating_career_mentee_impact\",\n    },\n  ];\n  // we only want to include the student goal question if the student has one in their profile\n  if (studentGoal) {\n    questions.splice(2, 0, {\n      prompt: `At the beginning of this program, we asked you to choose a top goal for the year: secure an internship, learn more about career options, do well in courses, or a write-in answer. You chose: \"${\n        getGeneric ? \"{goal}\" : studentGoal\n      }\". How has ${\n        getGeneric ? \"{mentorName}\" : mentorFirstName\n      } helped you make progress towards this goal, and/or what difficulties have you encountered along the way?`,\n      qid: \"rotating_career_mentee_goal\",\n    });\n  }\n  return questions;\n}\n\ngql`\n  query PostSessionSurveyCareerQuestion($participantId: ID!, $mentorshipId: ID!) {\n    participant(id: $participantId) {\n      id\n      __typename\n      program {\n        id\n        programSequence {\n          id\n          school {\n            id\n            name\n          }\n        }\n      }\n    }\n    mentorship(id: $mentorshipId) {\n      id\n      student {\n        id\n        user {\n          id\n          firstName\n          lastName\n        }\n        programGoal\n      }\n      mentor {\n        id\n        user {\n          id\n          firstName\n          lastName\n        }\n      }\n    }\n  }\n`;\n\nexport interface Answer {\n  prompt: {\n    generic: string;\n    actual: string;\n    qid: string;\n  };\n  answer: string;\n}\n\nexport interface Customizations {\n  optional?: boolean;\n}\n\ninterface Props extends QuestionProps<Answer, Customizations> {\n  participant: PostSessionSurveyCareerQuestionQuery[\"participant\"];\n  mentorship: PostSessionSurveyCareerQuestionQuery[\"mentorship\"];\n}\n\nexport const getRotatingCareerOpenResponseQuestions = (\n  participant: PostSessionSurveyCareerQuestionQuery[\"participant\"],\n  mentorship: PostSessionSurveyCareerQuestionQuery[\"mentorship\"],\n) =>\n  participant.__typename === \"Mentor\"\n    ? availableMentorQuestions({\n        studentFirstName: mentorship.student.user.firstName,\n        studentGoal: mentorship.student.programGoal ? mentorship.student.programGoal : undefined,\n      })\n    : availableStudentQuestions({\n        mentorFirstName: mentorship.mentor.user.firstName,\n        studentGoal: mentorship.student.programGoal ? mentorship.student.programGoal : undefined,\n      });\n\nfunction RotatingCareerOpenResponseInput({\n  currentAnswer,\n  updateAnswer,\n  participant,\n  mentorship,\n  setAbleToSubmit,\n  customizations,\n}: Props) {\n  const rotatingQuestions = getRotatingCareerOpenResponseQuestions(participant, mentorship);\n  const genericRotatingQuestions =\n    participant.__typename === \"Mentor\"\n      ? availableMentorQuestions({\n          studentFirstName: mentorship.student.user.firstName,\n          studentGoal: mentorship.student.programGoal ? mentorship.student.programGoal : undefined,\n          getGeneric: true,\n        })\n      : availableStudentQuestions({\n          mentorFirstName: mentorship.mentor.user.firstName,\n          studentGoal: mentorship.student.programGoal ? mentorship.student.programGoal : undefined,\n          getGeneric: true,\n        });\n  const { fetching, questionIndex } = useRotatingQuestionIndex({\n    numberOfQuestions: rotatingQuestions.length,\n  });\n  const optional =\n    !customizations || typeof customizations.optional === \"undefined\"\n      ? false\n      : customizations.optional;\n  const answerIsValid = optional || (currentAnswer?.answer?.length || 0) > 0;\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  if (fetching || questionIndex === null) return <div>Loading...</div>;\n  if (typeof questionIndex === \"undefined\") {\n    captureError(new Error(`Question index is undefined`));\n    throw new Error(\"Question index is undefined\");\n  }\n  const question = rotatingQuestions[questionIndex];\n  const genericQuestion = genericRotatingQuestions[questionIndex];\n\n  return (\n    <Fragment>\n      <QuestionLabel\n        data-test=\"rotating-career-question-prompt\"\n        label={question.prompt}\n        questionIsOptional={optional}\n      />\n      <TextArea\n        data-test=\"rotating-career-question-input\"\n        rows={3}\n        questionIsOptional={optional}\n        onChange={({ currentTarget: { value: updatedResponse } }) =>\n          updateAnswer({\n            prompt: { generic: genericQuestion.prompt, actual: question.prompt, qid: question.qid },\n            answer: updatedResponse,\n          })\n        }\n        value={currentAnswer ? currentAnswer.answer : \"\"}\n      />\n    </Fragment>\n  );\n}\n\nexport default function RotatingCareerOpenResponse(\n  props: QuestionProps<Answer, { optional?: boolean }>,\n) {\n  const { participantId, mentorshipId } = useContext(SurveyContext);\n  if (!mentorshipId) {\n    captureError(new Error(`Error: missing mentorshipId for RotatingCareerOpenResponse`));\n    throw new Error(\"Missing mentorship id\");\n  }\n  const [{ fetching, error, data }] = useQuery({\n    query: PostSessionSurveyCareerQuestionDocument,\n    variables: { participantId, mentorshipId },\n  });\n  if (fetching || data === null) return <div>Loading...</div>;\n  if (error || !data) {\n    const graphQLErrorsForAPM = error?.graphQLErrors?.join(\"; \") ?? \"\";\n    captureError(\n      new Error(`Error fetching usePostSessionSurveyCareerQuestionQuery: ${graphQLErrorsForAPM}`),\n    );\n    return null;\n  }\n\n  const { participant, mentorship } = data;\n  return (\n    <div className=\"multi-select\">\n      <RotatingCareerOpenResponseInput\n        {...props}\n        participant={participant}\n        mentorship={mentorship}\n      />\n    </div>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { RadioGroup, RadioButton } from \"../../components/data_entry/radio\";\nimport QuestionLabel from \"./components/question_label\";\nimport { QuestionProps } from \"../survey\";\nimport SelectQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/select_question_wrapper\";\n\nexport interface Answer {\n  selectedOption: string;\n  selectedFollowUpOption?: string;\n}\n\nexport interface Customizations {\n  prompt: string;\n  options: string[];\n  description?: string;\n  followUp?: {\n    whenOptionSelected: string;\n    prompt: string;\n    description?: string;\n    options: string[];\n    qid?: string;\n  };\n}\n\nexport default function SurveyQuestionSelectWithSelectFollowUp({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, Customizations>) {\n  const label = customizations.prompt;\n  const options = customizations.options;\n  const followUp = customizations.followUp;\n  const description = customizations.description;\n\n  const selectedOption = currentAnswer ? currentAnswer.selectedOption : undefined;\n  const selectedFollowUpOption = currentAnswer ? currentAnswer.selectedFollowUpOption : undefined;\n\n  const optionIsValid = (currentAnswer?.selectedOption?.length || 0) > 0;\n  const followUpOptionIsTriggered = followUp && selectedOption === followUp.whenOptionSelected;\n  const followUpOptionIsValid = (currentAnswer?.selectedFollowUpOption?.length || 0) > 0;\n  const answerIsValid = optionIsValid && (followUpOptionIsTriggered ? followUpOptionIsValid : true);\n\n  useEffect(() => {\n    setAbleToSubmit(!!answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  const requiredErrorMessage = \"Please complete the required field.\";\n\n  const deprecatedSelectWithSelectFollowUp = (\n    <div className=\"multi-select\">\n      <QuestionLabel label={label} description={description} />\n      <RadioGroup\n        name=\"selectQuestion\"\n        value={selectedOption}\n        onChange={(newValue) => updateAnswer({ selectedOption: newValue })}\n      >\n        {options.map((option) => (\n          <RadioButton data-test=\"select-option\" key={option} label={option} value={option} />\n        ))}\n      </RadioGroup>\n      {followUp && selectedOption === followUp.whenOptionSelected && (\n        <div>\n          <QuestionLabel label={followUp.prompt} description={followUp.description} />\n          <RadioGroup\n            name=\"selectQuestion\"\n            value={selectedFollowUpOption}\n            onChange={(followUpValue) =>\n              updateAnswer({\n                selectedOption: selectedOption,\n                selectedFollowUpOption: followUpValue,\n              })\n            }\n          >\n            {followUp.options.map((option) => (\n              <RadioButton\n                data-test=\"follow-up-select-option\"\n                key={option}\n                label={option}\n                value={option}\n              />\n            ))}\n          </RadioGroup>\n        </div>\n      )}\n    </div>\n  );\n\n  const selectWithSelectFollowUp = (\n    <>\n      <SelectQuestionWrapper\n        label={label}\n        secondaryText={description}\n        optional={false}\n        options={options.map((option) => ({ id: option, label: option }))}\n        value={{ id: selectedOption, label: selectedOption }}\n        onChange={(newAnswer) => updateAnswer({ selectedOption: newAnswer.id as string })}\n        // SelectQuestionWrapper only handles follow-ups of type Input\n        // And SelectWithSelectFollowUp is only used in a single place\n        // So this implementation is doing the bare minimum to refresh the UI\n        // Without making the follow-up component logic more flexible\n        showFollowUp={false}\n        errorMessage={!optionIsValid && showValidation ? requiredErrorMessage : undefined}\n        dataTest=\"select-with-select-follow-up\"\n      />\n      {followUpOptionIsTriggered && (\n        <SelectQuestionWrapper\n          label={followUp.prompt}\n          secondaryText={followUp.description}\n          optional={false}\n          options={followUp.options.map((option) => ({ id: option, label: option }))}\n          value={{ id: selectedFollowUpOption, label: selectedFollowUpOption }}\n          onChange={(followUpValue) =>\n            updateAnswer({\n              selectedOption: selectedOption,\n              selectedFollowUpOption: followUpValue.id as string,\n            })\n          }\n          errorMessage={!followUpOptionIsValid && showValidation ? requiredErrorMessage : undefined}\n          data-test=\"follow-up-select-option\"\n        />\n      )}\n    </>\n  );\n\n  return showRefreshedComponents ? selectWithSelectFollowUp : deprecatedSelectWithSelectFollowUp;\n}\n","import React, { useEffect } from \"react\";\nimport { QuestionProps } from \"../../survey\";\nimport { RadioButton, RadioGroup } from \"../../../components/data_entry/radio\";\nimport { Answer } from \"./generic\";\nimport styled from \"styled-components\";\nimport QuestionFieldsetLegend, { StyledFieldset } from \"../components/question_fieldset_legend\";\nimport SelectQuestionWrapper from \"../../../components/base_ui/higher_order_components/questions/select_question_wrapper\";\n\nconst StyledDeprecatedSingleSelect = styled.div`\n  margin-top: 2em;\n`;\n\nconst StyledSingleSelect = styled.div`\n  margin-top: ${({ theme }) => theme.sizing.scale600};\n`;\n\nexport interface SingleSelectCustomization {\n  qid: string;\n  text: string;\n  description?: string;\n  optional?: boolean;\n  qInfo: {\n    type: string;\n    options: {\n      text: string;\n      oid: string;\n    }[];\n  };\n}\n\nexport default function SingleSelect({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, SingleSelectCustomization>) {\n  const label = customizations.text;\n  const description = customizations.description;\n\n  const options = customizations.qInfo.options;\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const qid = customizations.qid;\n\n  const answerIsValid =\n    optional ||\n    (currentAnswer && currentAnswer[qid] ? (currentAnswer[qid].length || 0) > 0 : false);\n\n  // Adding setAbleToSubmit as dependency might break survey behavior (e.g. questions that have follow-ups such as the desired_mentoring_frequency question)\n  // If you're making edits to this please check that this works with follow-up questions\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n    // eslint-disable-next-line\n  }, [answerIsValid, currentAnswer]);\n\n  const selectedOption = currentAnswer ? currentAnswer[qid] : undefined;\n\n  const transformedOptions = options.map((option) => ({\n    id: option.oid,\n    label: option.text,\n  }));\n\n  const deprecatedSingleSelect = (\n    <StyledDeprecatedSingleSelect>\n      <StyledFieldset>\n        <QuestionFieldsetLegend\n          legend={label}\n          questionIsOptional={optional}\n          description={description}\n        />\n        <RadioGroup\n          name=\"selectQuestion\"\n          value={selectedOption}\n          onChange={(newValue) => {\n            updateAnswer({ [qid]: newValue });\n          }}\n        >\n          {options.map((option) => (\n            <RadioButton\n              data-test=\"select-option\"\n              key={`${qid}-${option.oid}`}\n              label={option.text}\n              value={option.oid}\n            />\n          ))}\n        </RadioGroup>\n      </StyledFieldset>\n    </StyledDeprecatedSingleSelect>\n  );\n\n  const singleSelect = (\n    <StyledSingleSelect>\n      <SelectQuestionWrapper\n        data-test=\"generic-single-select\"\n        label={label}\n        secondaryText={description}\n        optional={optional}\n        value={transformedOptions.find((option) => option.id === selectedOption)}\n        onChange={(newValue) => {\n          updateAnswer({ [qid]: newValue.id });\n        }}\n        options={transformedOptions}\n        errorMessage={\n          showValidation && !answerIsValid ? \"Please complete the required field.\" : undefined\n        }\n        setAbleToSubmit={setAbleToSubmit}\n      />\n    </StyledSingleSelect>\n  );\n\n  return showRefreshedComponents ? singleSelect : deprecatedSingleSelect;\n}\n","import React, { useEffect } from \"react\";\nimport { QuestionProps } from \"../../survey\";\nimport { Answer } from \"./generic\";\nimport Checkbox from \"../../../components/data_entry/checkbox\";\nimport styled from \"styled-components\";\nimport QuestionFieldsetLegend, { StyledFieldset } from \"../components/question_fieldset_legend\";\nimport MultiSelectQuestionWrapper, {\n  MultiSelectOption,\n} from \"../../../components/base_ui/higher_order_components/questions/multiselect_question_wrapper\";\nimport { getOptionText, getOptionOid } from \"../question_helpers\";\n\nconst StyledMultiSelect = styled.div`\n  margin-top: 2em;\n`;\n\nconst StyledMultiSelectContainer = styled.div`\n  margin-top: ${({ theme }) => theme.sizing.scale600};\n`;\n\nexport interface MultiSelectCustomization {\n  qid: string;\n  text: string;\n  description?: string;\n  optional?: boolean;\n  qInfo: {\n    type: string;\n    options: {\n      text: string;\n      oid: string;\n    }[];\n  };\n}\n\nexport default function MultiSelect({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, MultiSelectCustomization>) {\n  const label = customizations.text;\n  const secondaryText = customizations.description ?? \"\";\n  const options = customizations.qInfo.options;\n  const qid = customizations.qid;\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const answerIsValid =\n    optional ||\n    (currentAnswer && currentAnswer[qid] ? (currentAnswer[qid].length || 0) > 0 : false);\n  const selectedOptions = currentAnswer && currentAnswer[qid] ? currentAnswer[qid] : [];\n\n  // Adding setAbleToSubmit as dependency might break survey behavior (e.g. questions that have follow-ups such as the desired_mentoring_frequency question)\n  // If you're making edits to this please check that this works with follow-up questions\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n    // eslint-disable-next-line\n  }, [answerIsValid, currentAnswer, selectedOptions]);\n\n  const deprecatedMultiSelect = (\n    <StyledMultiSelect>\n      <StyledFieldset>\n        <QuestionFieldsetLegend\n          legend={label}\n          questionIsOptional={optional}\n          description={secondaryText}\n        />\n        {options.map((option) => (\n          <Checkbox\n            dataTest=\"multi-select-checkbox\"\n            label={option.text}\n            key={`${qid}-${option.oid}`}\n            checked={selectedOptions.includes(option.oid)}\n            onChange={() => {\n              const index = selectedOptions.indexOf(option.oid);\n              if (index > -1) {\n                // The answer is already checked, uncheck it.\n                updateAnswer({\n                  [qid]: [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)],\n                });\n              } else {\n                // The answer is not checked yet, check it.\n                updateAnswer({ [qid]: [...selectedOptions, option.oid] });\n              }\n            }}\n          />\n        ))}\n      </StyledFieldset>\n    </StyledMultiSelect>\n  );\n\n  const multiSelect = (\n    <StyledMultiSelectContainer>\n      <MultiSelectQuestionWrapper\n        questionPrompt={label}\n        optional={optional}\n        secondaryText={secondaryText}\n        showErrors={showValidation && !answerIsValid}\n        options={options.map((option) => ({\n          id: getOptionOid(option) || \"\",\n          label: getOptionText(option) || \"\",\n          value: selectedOptions.includes(option.oid),\n        }))}\n        onChange={(newAnswer: MultiSelectOption) => {\n          const index = selectedOptions.indexOf(newAnswer.id);\n          if (index > -1) {\n            // The answer is already checked, uncheck it.\n            updateAnswer({\n              [qid]: [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)],\n            });\n          } else {\n            // The answer is not checked yet, check it.\n            updateAnswer({ [qid]: [...selectedOptions, newAnswer.id] });\n          }\n        }}\n        setAbleToSubmit={setAbleToSubmit}\n        dataTest=\"generic-multi-select\"\n      />\n    </StyledMultiSelectContainer>\n  );\n\n  return showRefreshedComponents ? multiSelect : deprecatedMultiSelect;\n}\n","import React, { useEffect } from \"react\";\nimport { QuestionProps } from \"../../survey\";\nimport QuestionLabel from \"../components/question_label\";\nimport { Answer } from \"./generic\";\nimport styled from \"styled-components\";\nimport TextArea from \"../../../components/data_entry/text_area\";\nimport InputQuestionWrapper from \"../../../components/base_ui/higher_order_components/questions/input_question_wrapper\";\n\nconst StyledDeprecatedInput = styled.div`\n  margin-top: 2em;\n`;\n\nconst StyledInput = styled.div`\n  margin-top: ${({ theme }) => theme.sizing.scale600};\n`;\n\nexport interface InputCustomization {\n  qid: string;\n  text: string;\n  description?: string;\n  optional?: boolean;\n  qInfo: {\n    type: string;\n    placeholder?: string;\n  };\n}\n\nexport default function Input({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, InputCustomization>) {\n  const label = customizations.text;\n  const description = customizations.description ?? \"\";\n\n  const qid = customizations.qid;\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const answerIsValid =\n    optional ||\n    (currentAnswer && currentAnswer[qid] ? (currentAnswer[qid].length || 0) > 0 : false);\n\n  // Adding setAbleToSubmit as dependency might break survey behavior\n  // If you're making edits to this please check that this works with follow-up questions if applicable\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n    // eslint-disable-next-line\n  }, [answerIsValid, currentAnswer]);\n\n  const deprecatedInput = (\n    <StyledDeprecatedInput>\n      <QuestionLabel\n        label={label}\n        htmlFor={`${qid}-follow-up`}\n        questionIsOptional={optional}\n        description={description}\n      />\n      <TextArea\n        id={`${qid}-follow-up`}\n        data-test=\"open-response-input\"\n        placeholder={customizations.qInfo.placeholder}\n        rows={1}\n        questionIsOptional={optional}\n        onChange={({ currentTarget: { value: updatedResponse } }) =>\n          updateAnswer({ [qid]: updatedResponse })\n        }\n        value={currentAnswer ? currentAnswer[qid] : \"\"}\n      />\n    </StyledDeprecatedInput>\n  );\n\n  const input = (\n    <StyledInput>\n      <InputQuestionWrapper\n        id={`${qid}-follow-up`}\n        dataTest=\"generic-input\"\n        label={label}\n        secondaryText={description}\n        placeholder={customizations.qInfo.placeholder}\n        optional={optional}\n        value={currentAnswer ? currentAnswer[qid] : \"\"}\n        onChange={({ currentTarget: { value: updatedResponse } }) =>\n          updateAnswer({ [qid]: updatedResponse })\n        }\n        errorMessage={\n          showValidation && !answerIsValid ? \"Please complete the required field.\" : undefined\n        }\n      />\n    </StyledInput>\n  );\n  return showRefreshedComponents ? input : deprecatedInput;\n}\n","import React, { Fragment } from \"react\";\nimport { QuestionProps } from \"../../survey\";\nimport _ from \"lodash\";\nimport SingleSelect from \"./single_select\";\nimport MultiSelect from \"./multi_select\";\nimport Input from \"./input\";\n\n// Answer can take on any shape.\nexport interface Answer {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [propName: string]: any;\n}\n\nexport interface FollowUp {\n  whenOidSelectedOr?: string[];\n  qid: string;\n  text: string;\n  description?: string;\n  optional?: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  qInfo: any;\n}\n\nexport default function Generic({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<\n  Answer,\n  {\n    qid: string;\n    text: string;\n    description?: string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    qInfo: any;\n    followUps?: FollowUp[];\n  }\n>) {\n  const qid = customizations.qid;\n  const followUps = customizations.followUps || [];\n\n  // With the new answer, remove any stale follow up answers.\n  const updateAndScrubAnswer = (answer: Answer) => {\n    // Quickly get what we would be showing\n    const tempNewFollowUps = filterFollowUpConditions(qid, answer, followUps);\n\n    // Queue up all irrelevant follow ups to remove\n    const followUpsToRemove = followUps.filter((followUp) => {\n      return !tempNewFollowUps.map((f) => f.qid).includes(followUp.qid);\n    });\n\n    // Remove the irrelevant follow ups\n    const newAnswers = _.omit(\n      currentAnswer,\n      followUpsToRemove.map((followUp) => followUp.qid),\n    );\n    updateAnswer({ ...newAnswers, ...answer });\n  };\n\n  const followUpsToDisplay = filterFollowUpConditions(qid, currentAnswer, followUps);\n  const QuestionComponent = componentForQuestionType(customizations.qInfo.type);\n\n  return (\n    <Fragment>\n      <QuestionComponent\n        key={qid}\n        customizations={customizations}\n        currentAnswer={currentAnswer}\n        updateAnswer={updateAndScrubAnswer}\n        setAbleToSubmit={setAbleToSubmit}\n        questionId={qid}\n        showValidation={showValidation}\n        showRefreshedComponents={showRefreshedComponents}\n      />\n\n      {/* TODO: There is a bug here where only the last of the follow-ups will dictate setAbleToSubmit, not addressing this yet since we might overhaul this component */}\n      {followUpsToDisplay.map((followUp) => (\n        <Generic\n          key={followUp.qid}\n          customizations={followUp}\n          currentAnswer={currentAnswer}\n          updateAnswer={updateAndScrubAnswer}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={qid}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      ))}\n    </Fragment>\n  );\n}\n\nfunction componentForQuestionType(type: string) {\n  switch (type) {\n    case \"single_select\":\n      return SingleSelect;\n    case \"multi_select\":\n      return MultiSelect;\n    case \"short_text\": // can't be renamed without changing database values\n      return Input;\n  }\n  // Not implemented yet\n  throw `Unsupported generic question type: ${type}.`;\n}\n\nfunction filterFollowUpConditions(\n  qid: string,\n  currentAnswer?: Answer,\n  followUps?: FollowUp[],\n): FollowUp[] {\n  if (!currentAnswer) {\n    return [];\n  }\n  if (followUps) {\n    return followUps.filter((followUp) => {\n      const answerArray = Array.isArray(currentAnswer[qid])\n        ? currentAnswer[qid]\n        : Array(currentAnswer[qid]);\n      if (\n        followUp.whenOidSelectedOr &&\n        _.intersection(followUp.whenOidSelectedOr, answerArray).length > 0\n      ) {\n        return true;\n      }\n    });\n  }\n  return [];\n}\n","import React, { useContext, useEffect } from \"react\";\nimport { gql } from \"@urql/core\";\nimport { SurveyContext, QuestionProps } from \"../survey\";\nimport { CounterpartsQuestionDocument } from \"../../generated/graphql\";\nimport QuestionLabel from \"./components/question_label\";\nimport Input from \"../../components/data_entry/input\";\nimport styled from \"styled-components\";\nimport { useQuery } from \"urql\";\nimport { captureError } from \"../../../utils/capture_error\";\n\ngql`\n  query CounterpartsQuestion($participantId: ID!) {\n    participant(id: $participantId) {\n      id\n      __typename\n      mentorships(status: MATCHED) {\n        id\n        student {\n          __typename\n          id\n          user {\n            id\n            firstName\n            lastName\n          }\n        }\n        mentor {\n          __typename\n          id\n          user {\n            id\n            firstName\n            lastName\n          }\n        }\n      }\n    }\n  }\n`;\n\ninterface Answer {\n  [mentorshipId: string]: string;\n}\n\ninterface Customizations {\n  prompt: string;\n  inputType: \"text\" | \"number\";\n  description?: string;\n  optional?: boolean;\n  placeholder?: string;\n}\n\nconst Question = styled.div`\n  .counterpart {\n    margin-top: ${({ theme }) => theme.deprecatedSpacing.component.three};\n  }\n`;\n\nexport default function CounterpartsInfo({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n}: QuestionProps<Answer, Customizations>) {\n  const { participantId } = useContext(SurveyContext);\n\n  const [{ fetching, error, data }] = useQuery({\n    query: CounterpartsQuestionDocument,\n    variables: { participantId },\n  });\n\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const description = customizations.description;\n  const placeholder = customizations.placeholder;\n  const filledOut =\n    !!data &&\n    !!currentAnswer &&\n    data.participant.mentorships.every((mentorship) =>\n      Object.keys(currentAnswer).includes(mentorship.id),\n    );\n  let answerIsValid = optional ? true : typeof currentAnswer !== \"undefined\" && filledOut;\n  answerIsValid =\n    // if the input is a number, make sure none of the answers are less than 0\n    customizations.inputType === \"number\" &&\n    currentAnswer &&\n    Object.keys(currentAnswer).some((key) => parseInt(currentAnswer[key], 10) < 0)\n      ? false\n      : answerIsValid;\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  if (fetching || data === null) return <div>Loading...</div>;\n  if (error || !data) {\n    const graphQLErrorsForAPM = error?.graphQLErrors?.join(\"; \") ?? \"\";\n    captureError(new Error(`Error fetching useCounterpartsQuestionQuery: ${graphQLErrorsForAPM}`));\n    return null;\n  }\n\n  const mentorships = data.participant.mentorships;\n  const userIsMentor = data.participant.__typename === \"Mentor\";\n\n  const label = customizations.prompt;\n\n  return (\n    <Question className=\"counterparts-info\">\n      <QuestionLabel label={label} description={description} questionIsOptional={optional} />\n      {mentorships.map((mentorship) => {\n        const counterpart = userIsMentor ? mentorship.student : mentorship.mentor;\n\n        return (\n          <Input\n            className=\"counterpart\"\n            type={customizations.inputType}\n            placeholder={placeholder ? placeholder : optional ? undefined : \"Type here...\"}\n            min={customizations.inputType === \"number\" ? 0 : undefined}\n            key={counterpart.id}\n            label={`${counterpart.user.firstName} ${counterpart.user.lastName}`}\n            value={(currentAnswer && currentAnswer[mentorship.id]) || \"\"}\n            questionIsOptional={optional}\n            onChange={({ currentTarget: { value } }) => {\n              if (value.length < 1) {\n                const updatedAnswer: Answer = { ...currentAnswer };\n                delete updatedAnswer[mentorship.id];\n                updateAnswer(updatedAnswer);\n              } else {\n                updateAnswer({ ...currentAnswer, [mentorship.id]: value });\n              }\n            }}\n          />\n        );\n      })}\n    </Question>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport TextArea from \"../../components/data_entry/text_area\";\nimport QuestionLabel from \"./components/question_label\";\nimport { QuestionProps } from \"../survey\";\nimport { RadioButton, RadioGroup } from \"../../components/data_entry/radio\";\nimport { Option, getOptionObjectFromText, getOptionText, getOptionOid } from \"./question_helpers\";\nimport styled from \"styled-components\";\nimport nextId from \"react-id-generator\";\nimport InputQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/input_question_wrapper\";\nimport SelectQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/select_question_wrapper\";\n\nexport interface Customizations {\n  prompt: string;\n  optional?: boolean;\n  description?: string;\n  placeholder?: string;\n  maxValue?: number;\n  followUp?: {\n    qid: string;\n    whenGreaterThan: number;\n    prompt: string;\n    description?: string;\n    options: (string | Option)[];\n  };\n}\n\nexport interface Answer {\n  value: string;\n  selectedFollowUpOption?: string | Option;\n}\n\nconst StyledFollowUp = styled.div`\n  margin-top: 2em;\n`;\n\nconst NumberErrorLabel = styled.div`\n  color: red;\n  margin-top: 1em;\n`;\n\nexport default function SurveyQuestionNumberInput({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, Customizations>) {\n  const [showNumberError, setShowNumberError] = useState(false);\n  const [numericInputErrorMessage, setNumericInputErrorMessage] = useState<string | undefined>(\n    undefined,\n  );\n  const [followUpQuestionErrorMessage, setfollowUpQuestionErrorMessage] = useState<\n    string | undefined\n  >(undefined);\n  const [touched, setTouched] = useState<boolean>(false);\n  const [showMaxCharactersError, setShowMaxCharactersError] = useState(false);\n  const label = customizations.prompt;\n  const id = \"number-input-\" + nextId();\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const description = customizations.description;\n  const placeholder = customizations.placeholder;\n  const currentAnswerValue = currentAnswer ? currentAnswer.value : undefined;\n  const selectedFollowUpOption = currentAnswer ? currentAnswer.selectedFollowUpOption : undefined;\n  const followUp = customizations.followUp;\n  const maxValue = customizations.maxValue;\n\n  const isFollowUpQuestionAnswerValid = (): boolean => {\n    return (\n      !followUp ||\n      // This is a bit complicated - If it has a follow up, we should make sure it either is showing and answered, or not showing at all.\n      (!!followUp &&\n        ((shouldShowFollowUp(currentAnswerValue) && !!selectedFollowUpOption) ||\n          !shouldShowFollowUp(currentAnswerValue)))\n    );\n  };\n  const answerIsValid =\n    optional ||\n    (typeof currentAnswerValue !== \"undefined\" &&\n      currentAnswerValue !== \"\" &&\n      isFollowUpQuestionAnswerValid());\n\n  const numericInputAnswerIsValid = optional || currentAnswerValue;\n  const followUpQuestionAnswerIsValid = isFollowUpQuestionAnswerValid();\n\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  useEffect(() => {\n    setNumericInputErrorMessage(\n      !numericInputAnswerIsValid ? \"Please complete the required field.\" : undefined,\n    );\n  }, [numericInputAnswerIsValid]);\n\n  useEffect(() => {\n    setfollowUpQuestionErrorMessage(\n      !followUpQuestionAnswerIsValid ? \"Please complete the required field.\" : undefined,\n    );\n  }, [followUpQuestionAnswerIsValid]);\n\n  function shouldShowFollowUp(currentAnswerValue: string | undefined): boolean {\n    return (\n      !!followUp &&\n      !!currentAnswerValue &&\n      Number.isInteger(parseInt(currentAnswerValue)) &&\n      Number(currentAnswerValue) > followUp.whenGreaterThan\n    );\n  }\n\n  const deprecatedNumberInput = (\n    <div className=\"number-input\">\n      <QuestionLabel\n        label={label}\n        htmlFor={id}\n        description={description}\n        questionIsOptional={optional}\n      />\n      <TextArea\n        data-test=\"number-input-input\"\n        id={id}\n        placeholder={placeholder ? placeholder : optional ? undefined : \"Please only enter numbers\"}\n        rows={1}\n        questionIsOptional={optional}\n        onChange={({ currentTarget: { value: updatedResponse } }) => {\n          const numberFormat = /^\\d*\\.?\\d*$/;\n          const numberIsProperFormat = numberFormat.test(updatedResponse.trim());\n          const numberIsWithinValidRange = maxValue ? parseInt(updatedResponse) <= maxValue : true;\n          if (numberIsProperFormat && numberIsWithinValidRange) {\n            updateAnswer({ value: updatedResponse });\n            setShowNumberError(false);\n            setShowMaxCharactersError(false);\n          } else if (!numberIsProperFormat) {\n            setShowNumberError(true);\n            updateAnswer({ value: \"\" });\n          } else if (!numberIsWithinValidRange) {\n            setShowMaxCharactersError(true);\n            updateAnswer({ value: \"\" });\n          }\n        }}\n        value={currentAnswerValue ? currentAnswerValue : \"\"}\n      />\n      {showNumberError && <NumberErrorLabel>Numbers only please.</NumberErrorLabel>}\n      {showMaxCharactersError && (\n        <NumberErrorLabel>Please enter a number from 0 - {maxValue}.</NumberErrorLabel>\n      )}\n      {followUp && currentAnswerValue && shouldShowFollowUp(currentAnswerValue) && (\n        <StyledFollowUp>\n          <QuestionLabel\n            label={followUp.prompt}\n            description={followUp.description}\n            questionIsOptional={false}\n          />\n          <RadioGroup\n            name=\"numberInputQuestion\"\n            value={getOptionText(selectedFollowUpOption)}\n            onChange={(followUpValue) =>\n              updateAnswer({\n                value: currentAnswerValue,\n                selectedFollowUpOption: getOptionObjectFromText(followUpValue, followUp.options),\n              })\n            }\n          >\n            {followUp.options.map((option) => {\n              const optionText = getOptionText(option);\n              return (\n                <RadioButton\n                  data-test=\"number-input-select-option\"\n                  key={optionText}\n                  label={optionText || \"\"}\n                  value={optionText}\n                />\n              );\n            })}\n          </RadioGroup>\n        </StyledFollowUp>\n      )}\n    </div>\n  );\n  const numberInput = (\n    <>\n      <InputQuestionWrapper\n        id={id}\n        dataTest=\"number-input-input\"\n        supplementalQuestionPrompt={description && label}\n        label={description ? \"\" : label}\n        secondaryText={description}\n        optional={optional}\n        placeholder={placeholder}\n        type=\"number\"\n        min={0}\n        max={maxValue}\n        value={currentAnswerValue ? currentAnswerValue : \"\"}\n        onChange={({ currentTarget: { value: updatedResponse } }) => {\n          if (!maxValue || (maxValue && maxValue < 100 && updatedResponse.length <= 2)) {\n            updateAnswer({ value: updatedResponse });\n          }\n        }}\n        onBlur={() => {\n          setTouched(true);\n        }}\n        errorMessage={touched || showValidation ? numericInputErrorMessage : undefined}\n      ></InputQuestionWrapper>\n      {followUp && currentAnswerValue && shouldShowFollowUp(currentAnswerValue) && (\n        <SelectQuestionWrapper\n          dataTest=\"number-input-select-option\"\n          options={followUp.options.map((option) => ({\n            id: getOptionOid(option) || \"\",\n            label: getOptionText(option) || \"\",\n          }))}\n          onChange={(followUpValue) => {\n            updateAnswer({\n              value: currentAnswerValue,\n              selectedFollowUpOption: getOptionObjectFromText(\n                followUpValue.label as string,\n                followUp.options,\n              ),\n            });\n          }}\n          optional={false}\n          label={followUp.prompt}\n          value={{\n            id: selectedFollowUpOption ? getOptionOid(selectedFollowUpOption) : \"\",\n            label: getOptionText(selectedFollowUpOption) || \"\",\n          }}\n          errorMessage={showValidation ? followUpQuestionErrorMessage : undefined}\n        ></SelectQuestionWrapper>\n      )}\n    </>\n  );\n\n  return showRefreshedComponents ? numberInput : deprecatedNumberInput;\n}\n","import React, { useEffect, useState } from \"react\";\nimport TextArea from \"../../components/data_entry/text_area\";\nimport QuestionLabel from \"./components/question_label\";\nimport { QuestionProps } from \"../survey\";\nimport nextId from \"react-id-generator\";\nimport TextareaQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/textarea_question_wrapper\";\n\nexport interface Customizations {\n  prompt: string;\n  description?: string;\n  placeholder?: string;\n  optional?: boolean;\n}\n\nexport type Answer = string;\n\nexport default function SurveyQuestionOpenResponse({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n  hackToHideFeedback = false,\n}: QuestionProps<Answer, Customizations>) {\n  const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n  const [touched, setTouched] = useState<boolean>(false);\n\n  const label = customizations.prompt;\n  const id = \"open-response-\" + nextId();\n  const description = customizations.description;\n  const placeholder = customizations.placeholder;\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const answerIsValid = optional || (typeof currentAnswer !== \"undefined\" && currentAnswer !== \"\");\n\n  useEffect(() => {\n    setErrorMessage(!answerIsValid ? \"Please complete the required field.\" : undefined);\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  const deprecatedOpenResponse = (\n    <div className=\"open-response\">\n      <QuestionLabel\n        label={\n          // This is a hack, and intentionally does not try to relabel 'mentorship'\n          // in a place where we can't easily determine program id.\n          // This hack is in place because the open-response question on the Post-Session Survey\n          // leads to some answers from participants where participants/partners expect quick action.\n          // However, there is no good process for reviewing PSS responses in a timely manner.\n          // It takes PS a lot of manual time to review these responses via exports.\n          // Removing a question from the PSS \"the right way\" is high-effort due to current survey design.\n          // This hack keeps the question around but instructs the user to our normal helpdesk flow,\n          // and does not allow submission for that question so that we don't have the liability of\n          // having to do something with feedback that we cannot quickly and efficiently address.\n          hackToHideFeedback\n            ? \"If there's anything we can do to improve your experience that requires immediate attention (like a change in your mentorship), please email us at help@mentorcollective.org.\"\n            : label\n        }\n        htmlFor={id}\n        description={description}\n        // If using the hack, we need to guarantee that the question is optional\n        // so that there is never a scenario where the entire survey submission is blocked\n        // due to this question being tampered with\n        questionIsOptional={hackToHideFeedback ? true : optional}\n        data-test=\"open-response-question-label\"\n      />\n      {hackToHideFeedback ? (\n        <></>\n      ) : (\n        <TextArea\n          data-test=\"open-response-input\"\n          id={id}\n          questionIsOptional={optional}\n          placeholder={\n            placeholder ? placeholder : optional ? undefined : \"Enter n/a if not applicable\"\n          }\n          rows={4}\n          onChange={({ currentTarget: { value: updatedResponse } }) =>\n            updateAnswer(updatedResponse)\n          }\n          value={currentAnswer ? currentAnswer : \"\"}\n          error={\n            !answerIsValid && showValidation ? \"Please complete the required field.\" : undefined\n          }\n        />\n      )}\n    </div>\n  );\n\n  const openResponse = (\n    <TextareaQuestionWrapper\n      dataTest={\"textarea-input\"}\n      id={id}\n      label={label}\n      secondaryText={description}\n      optional={optional}\n      placeholder={placeholder}\n      value={currentAnswer}\n      onChange={({ currentTarget: { value: updatedResponse } }) => {\n        updateAnswer(updatedResponse);\n      }}\n      onBlur={() => {\n        setTouched(true);\n      }}\n      errorMessage={touched || showValidation ? errorMessage : undefined}\n    />\n  );\n\n  return showRefreshedComponents ? openResponse : deprecatedOpenResponse;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { QuestionProps } from \"../survey\";\nimport nextId from \"react-id-generator\";\nimport InputQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/input_question_wrapper\";\n\nexport interface Customizations {\n  prompt: string;\n  description?: string;\n  placeholder?: string;\n  optional?: boolean;\n}\n\nexport type Answer = string;\n\nexport default function SurveyQuestionTextInput({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n}: QuestionProps<Answer, Customizations>) {\n  const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n  const [touched, setTouched] = useState<boolean>(false);\n\n  // Hardcoded to for now, ideally this would be passed in from the backend.\n  const maxCharacterCount = 100;\n\n  const label = customizations.prompt;\n  const id = \"open-response-\" + nextId();\n  const description = customizations.description;\n  const placeholder = customizations.placeholder;\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n\n  const hasNoOptionalityError =\n    optional || (typeof currentAnswer !== \"undefined\" && currentAnswer !== \"\");\n  const hasNoLengthError = (currentAnswer?.length || 0) <= maxCharacterCount;\n\n  useEffect(() => {\n    if (!hasNoOptionalityError) {\n      setErrorMessage(\"Please complete the required field.\");\n      setAbleToSubmit(false);\n    } else if (!hasNoLengthError) {\n      setErrorMessage(\"Please shorten your response.\");\n      setAbleToSubmit(false);\n    } else {\n      setErrorMessage(undefined);\n      setAbleToSubmit(true);\n    }\n  }, [hasNoOptionalityError, hasNoLengthError, setAbleToSubmit]);\n\n  return (\n    <InputQuestionWrapper\n      dataTest=\"text-input\"\n      id={id}\n      label={label}\n      secondaryText={description}\n      optional={optional}\n      placeholder={placeholder}\n      currentCharacterCount={currentAnswer?.length || 0}\n      maxCharacterCount={maxCharacterCount}\n      value={currentAnswer}\n      onChange={({ currentTarget: { value: updatedResponse } }) => {\n        updateAnswer(updatedResponse);\n      }}\n      onBlur={() => {\n        setTouched(true);\n      }}\n      errorMessage={touched || showValidation ? errorMessage : undefined}\n    />\n  );\n}\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","const t=t=>\"object\"==typeof t&&null!=t&&1===t.nodeType,e=(t,e)=>(!e||\"hidden\"!==t)&&(\"visible\"!==t&&\"clip\"!==t),n=(t,n)=>{if(t.clientHeight<t.scrollHeight||t.clientWidth<t.scrollWidth){const o=getComputedStyle(t,null);return e(o.overflowY,n)||e(o.overflowX,n)||(t=>{const e=(t=>{if(!t.ownerDocument||!t.ownerDocument.defaultView)return null;try{return t.ownerDocument.defaultView.frameElement}catch(t){return null}})(t);return!!e&&(e.clientHeight<t.scrollHeight||e.clientWidth<t.scrollWidth)})(t)}return!1},o=(t,e,n,o,l,r,i,s)=>r<t&&i>e||r>t&&i<e?0:r<=t&&s<=n||i>=e&&s>=n?r-t-o:i>e&&s<n||r<t&&s>n?i-e+l:0,l=t=>{const e=t.parentElement;return null==e?t.getRootNode().host||null:e},r=(e,r)=>{var i,s,d,h;if(\"undefined\"==typeof document)return[];const{scrollMode:c,block:f,inline:u,boundary:a,skipOverflowHiddenElements:g}=r,p=\"function\"==typeof a?a:t=>t!==a;if(!t(e))throw new TypeError(\"Invalid target\");const m=document.scrollingElement||document.documentElement,w=[];let W=e;for(;t(W)&&p(W);){if(W=l(W),W===m){w.push(W);break}null!=W&&W===document.body&&n(W)&&!n(document.documentElement)||null!=W&&n(W,g)&&w.push(W)}const b=null!=(s=null==(i=window.visualViewport)?void 0:i.width)?s:innerWidth,H=null!=(h=null==(d=window.visualViewport)?void 0:d.height)?h:innerHeight,{scrollX:y,scrollY:M}=window,{height:v,width:E,top:x,right:C,bottom:I,left:R}=e.getBoundingClientRect(),{top:T,right:B,bottom:F,left:V}=(t=>{const e=window.getComputedStyle(t);return{top:parseFloat(e.scrollMarginTop)||0,right:parseFloat(e.scrollMarginRight)||0,bottom:parseFloat(e.scrollMarginBottom)||0,left:parseFloat(e.scrollMarginLeft)||0}})(e);let k=\"start\"===f||\"nearest\"===f?x-T:\"end\"===f?I+F:x+v/2-T+F,D=\"center\"===u?R+E/2-V+B:\"end\"===u?C+B:R-V;const L=[];for(let t=0;t<w.length;t++){const e=w[t],{height:n,width:l,top:r,right:i,bottom:s,left:d}=e.getBoundingClientRect();if(\"if-needed\"===c&&x>=0&&R>=0&&I<=H&&C<=b&&x>=r&&I<=s&&R>=d&&C<=i)return L;const h=getComputedStyle(e),a=parseInt(h.borderLeftWidth,10),g=parseInt(h.borderTopWidth,10),p=parseInt(h.borderRightWidth,10),W=parseInt(h.borderBottomWidth,10);let T=0,B=0;const F=\"offsetWidth\"in e?e.offsetWidth-e.clientWidth-a-p:0,V=\"offsetHeight\"in e?e.offsetHeight-e.clientHeight-g-W:0,S=\"offsetWidth\"in e?0===e.offsetWidth?0:l/e.offsetWidth:0,X=\"offsetHeight\"in e?0===e.offsetHeight?0:n/e.offsetHeight:0;if(m===e)T=\"start\"===f?k:\"end\"===f?k-H:\"nearest\"===f?o(M,M+H,H,g,W,M+k,M+k+v,v):k-H/2,B=\"start\"===u?D:\"center\"===u?D-b/2:\"end\"===u?D-b:o(y,y+b,b,a,p,y+D,y+D+E,E),T=Math.max(0,T+M),B=Math.max(0,B+y);else{T=\"start\"===f?k-r-g:\"end\"===f?k-s+W+V:\"nearest\"===f?o(r,s,n,g,W+V,k,k+v,v):k-(r+n/2)+V/2,B=\"start\"===u?D-d-a:\"center\"===u?D-(d+l/2)+F/2:\"end\"===u?D-i+p+F:o(d,i,l,a,p+F,D,D+E,E);const{scrollLeft:t,scrollTop:h}=e;T=0===X?0:Math.max(0,Math.min(h+T/X,e.scrollHeight-n/X+V)),B=0===S?0:Math.max(0,Math.min(t+B/S,e.scrollWidth-l/S+F)),k+=h-T,D+=t-B}L.push({el:e,top:T,left:B})}return L};export{r as compute};//# sourceMappingURL=index.js.map\n","import _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport React, { cloneElement, Component, useRef, useEffect, useLayoutEffect, useCallback, useReducer, useMemo } from 'react';\nimport { isForwardRef } from 'react-is';\nimport { compute } from 'compute-scroll-into-view';\nimport { __assign } from 'tslib';\n\nvar idCounter = 0;\n\n/**\n * Accepts a parameter and returns it if it's a function\n * or a noop function if it's not. This allows us to\n * accept a callback, but not worry about it if it's not\n * passed.\n * @param {Function} cb the callback\n * @return {Function} a function\n */\nfunction cbToCb(cb) {\n  return typeof cb === 'function' ? cb : noop;\n}\nfunction noop() {}\n\n/**\n * Scroll node into view if necessary\n * @param {HTMLElement} node the element that should scroll into view\n * @param {HTMLElement} menuNode the menu element of the component\n */\nfunction scrollIntoView(node, menuNode) {\n  if (!node) {\n    return;\n  }\n  var actions = compute(node, {\n    boundary: menuNode,\n    block: 'nearest',\n    scrollMode: 'if-needed'\n  });\n  actions.forEach(function (_ref) {\n    var el = _ref.el,\n      top = _ref.top,\n      left = _ref.left;\n    el.scrollTop = top;\n    el.scrollLeft = left;\n  });\n}\n\n/**\n * @param {HTMLElement} parent the parent node\n * @param {HTMLElement} child the child node\n * @param {Window} environment The window context where downshift renders.\n * @return {Boolean} whether the parent is the child or the child is in the parent\n */\nfunction isOrContainsNode(parent, child, environment) {\n  var result = parent === child || child instanceof environment.Node && parent.contains && parent.contains(child);\n  return result;\n}\n\n/**\n * Simple debounce implementation. Will call the given\n * function once after the time given has passed since\n * it was last called.\n * @param {Function} fn the function to call after the time\n * @param {Number} time the time to wait\n * @return {Function} the debounced function\n */\nfunction debounce(fn, time) {\n  var timeoutId;\n  function cancel() {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n    }\n  }\n  function wrapper() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    cancel();\n    timeoutId = setTimeout(function () {\n      timeoutId = null;\n      fn.apply(void 0, args);\n    }, time);\n  }\n  wrapper.cancel = cancel;\n  return wrapper;\n}\n\n/**\n * This is intended to be used to compose event handlers.\n * They are executed in order until one of them sets\n * `event.preventDownshiftDefault = true`.\n * @param {...Function} fns the event handler functions\n * @return {Function} the event handler to add to an element\n */\nfunction callAllEventHandlers() {\n  for (var _len2 = arguments.length, fns = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    fns[_key2] = arguments[_key2];\n  }\n  return function (event) {\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    return fns.some(function (fn) {\n      if (fn) {\n        fn.apply(void 0, [event].concat(args));\n      }\n      return event.preventDownshiftDefault || event.hasOwnProperty('nativeEvent') && event.nativeEvent.preventDownshiftDefault;\n    });\n  };\n}\nfunction handleRefs() {\n  for (var _len4 = arguments.length, refs = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    refs[_key4] = arguments[_key4];\n  }\n  return function (node) {\n    refs.forEach(function (ref) {\n      if (typeof ref === 'function') {\n        ref(node);\n      } else if (ref) {\n        ref.current = node;\n      }\n    });\n  };\n}\n\n/**\n * This generates a unique ID for an instance of Downshift\n * @return {String} the unique ID\n */\nfunction generateId() {\n  return String(idCounter++);\n}\n\n/**\n * Resets idCounter to 0. Used for SSR.\n */\nfunction resetIdCounter() {\n  // istanbul ignore next\n  if ('useId' in React) {\n    console.warn(\"It is not necessary to call resetIdCounter when using React 18+\");\n    return;\n  }\n  idCounter = 0;\n}\n\n/**\n * Default implementation for status message. Only added when menu is open.\n * Will specify if there are results in the list, and if so, how many,\n * and what keys are relevant.\n *\n * @param {Object} param the downshift state and other relevant properties\n * @return {String} the a11y status message\n */\nfunction getA11yStatusMessage(_ref2) {\n  var isOpen = _ref2.isOpen,\n    resultCount = _ref2.resultCount,\n    previousResultCount = _ref2.previousResultCount;\n  if (!isOpen) {\n    return '';\n  }\n  if (!resultCount) {\n    return 'No results are available.';\n  }\n  if (resultCount !== previousResultCount) {\n    return resultCount + \" result\" + (resultCount === 1 ? ' is' : 's are') + \" available, use up and down arrow keys to navigate. Press Enter key to select.\";\n  }\n  return '';\n}\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array\n * otherwise returns the argument\n * @param {*} arg the maybe-array\n * @param {*} defaultValue the value if arg is falsey not defined\n * @return {*} the arg or it's first item\n */\nfunction unwrapArray(arg, defaultValue) {\n  arg = Array.isArray(arg) ? /* istanbul ignore next (preact) */arg[0] : arg;\n  if (!arg && defaultValue) {\n    return defaultValue;\n  } else {\n    return arg;\n  }\n}\n\n/**\n * @param {Object} element (P)react element\n * @return {Boolean} whether it's a DOM element\n */\nfunction isDOMElement(element) {\n\n  // then we assume this is react\n  return typeof element.type === 'string';\n}\n\n/**\n * @param {Object} element (P)react element\n * @return {Object} the props\n */\nfunction getElementProps(element) {\n  return element.props;\n}\n\n/**\n * Throws a helpful error message for required properties. Useful\n * to be used as a default in destructuring or object params.\n * @param {String} fnName the function name\n * @param {String} propName the prop name\n */\nfunction requiredProp(fnName, propName) {\n  // eslint-disable-next-line no-console\n  console.error(\"The property \\\"\" + propName + \"\\\" is required in \\\"\" + fnName + \"\\\"\");\n}\nvar stateKeys = ['highlightedIndex', 'inputValue', 'isOpen', 'selectedItem', 'type'];\n/**\n * @param {Object} state the state object\n * @return {Object} state that is relevant to downshift\n */\nfunction pickState(state) {\n  if (state === void 0) {\n    state = {};\n  }\n  var result = {};\n  stateKeys.forEach(function (k) {\n    if (state.hasOwnProperty(k)) {\n      result[k] = state[k];\n    }\n  });\n  return result;\n}\n\n/**\n * This will perform a shallow merge of the given state object\n * with the state coming from props\n * (for the controlled component scenario)\n * This is used in state updater functions so they're referencing\n * the right state regardless of where it comes from.\n *\n * @param {Object} state The state of the component/hook.\n * @param {Object} props The props that may contain controlled values.\n * @returns {Object} The merged controlled state.\n */\nfunction getState(state, props) {\n  if (!state || !props) {\n    return state;\n  }\n  return Object.keys(state).reduce(function (prevState, key) {\n    prevState[key] = isControlledProp(props, key) ? props[key] : state[key];\n    return prevState;\n  }, {});\n}\n\n/**\n * This determines whether a prop is a \"controlled prop\" meaning it is\n * state which is controlled by the outside of this component rather\n * than within this component.\n *\n * @param {Object} props The props that may contain controlled values.\n * @param {String} key the key to check\n * @return {Boolean} whether it is a controlled controlled prop\n */\nfunction isControlledProp(props, key) {\n  return props[key] !== undefined;\n}\n\n/**\n * Normalizes the 'key' property of a KeyboardEvent in IE/Edge\n * @param {Object} event a keyboardEvent object\n * @return {String} keyboard key\n */\nfunction normalizeArrowKey(event) {\n  var key = event.key,\n    keyCode = event.keyCode;\n  /* istanbul ignore next (ie) */\n  if (keyCode >= 37 && keyCode <= 40 && key.indexOf('Arrow') !== 0) {\n    return \"Arrow\" + key;\n  }\n  return key;\n}\n\n/**\n * Simple check if the value passed is object literal\n * @param {*} obj any things\n * @return {Boolean} whether it's object literal\n */\nfunction isPlainObject(obj) {\n  return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\n/**\n * Returns the next non-disabled highlightedIndex value.\n *\n * @param {number} start The current highlightedIndex.\n * @param {number} offset The offset from the current highlightedIndex to start searching.\n * @param {unknown[]} items The items array.\n * @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.\n * @param {boolean?} circular If the search reaches the end, if it can search again starting from the other end.\n * @returns {number} The next highlightedIndex.\n */\nfunction getHighlightedIndex(start, offset, items, isItemDisabled, circular) {\n  if (circular === void 0) {\n    circular = false;\n  }\n  var count = items.length;\n  if (count === 0) {\n    return -1;\n  }\n  var itemsLastIndex = count - 1;\n  if (typeof start !== 'number' || start < 0 || start > itemsLastIndex) {\n    start = offset > 0 ? -1 : itemsLastIndex + 1;\n  }\n  var current = start + offset;\n  if (current < 0) {\n    current = circular ? itemsLastIndex : 0;\n  } else if (current > itemsLastIndex) {\n    current = circular ? 0 : itemsLastIndex;\n  }\n  var highlightedIndex = getNonDisabledIndex(current, offset < 0, items, isItemDisabled, circular);\n  if (highlightedIndex === -1) {\n    return start >= count ? -1 : start;\n  }\n  return highlightedIndex;\n}\n\n/**\n * Returns the next non-disabled highlightedIndex value.\n *\n * @param {number} start The current highlightedIndex.\n * @param {boolean} backwards If true, it will search backwards from the start.\n * @param {unknown[]} items The items array.\n * @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.\n * @param {boolean} circular If the search reaches the end, if it can search again starting from the other end.\n * @returns {number} The next non-disabled index.\n */\nfunction getNonDisabledIndex(start, backwards, items, isItemDisabled, circular) {\n  if (circular === void 0) {\n    circular = false;\n  }\n  var count = items.length;\n  if (backwards) {\n    for (var index = start; index >= 0; index--) {\n      if (!isItemDisabled(items[index], index)) {\n        return index;\n      }\n    }\n  } else {\n    for (var _index = start; _index < count; _index++) {\n      if (!isItemDisabled(items[_index], _index)) {\n        return _index;\n      }\n    }\n  }\n  if (circular) {\n    return getNonDisabledIndex(backwards ? count - 1 : 0, backwards, items, isItemDisabled);\n  }\n  return -1;\n}\n\n/**\n * Checks if event target is within the downshift elements.\n *\n * @param {EventTarget} target Target to check.\n * @param {HTMLElement[]} downshiftElements The elements that form downshift (list, toggle button etc).\n * @param {Window} environment The window context where downshift renders.\n * @param {boolean} checkActiveElement Whether to also check activeElement.\n *\n * @returns {boolean} Whether or not the target is within downshift elements.\n */\nfunction targetWithinDownshift(target, downshiftElements, environment, checkActiveElement) {\n  if (checkActiveElement === void 0) {\n    checkActiveElement = true;\n  }\n  return environment && downshiftElements.some(function (contextNode) {\n    return contextNode && (isOrContainsNode(contextNode, target, environment) || checkActiveElement && isOrContainsNode(contextNode, environment.document.activeElement, environment));\n  });\n}\n\n// eslint-disable-next-line import/no-mutable-exports\nvar validateControlledUnchanged = noop;\n/* istanbul ignore next */\nif (process.env.NODE_ENV !== 'production') {\n  validateControlledUnchanged = function validateControlledUnchanged(state, prevProps, nextProps) {\n    var warningDescription = \"This prop should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled Downshift element for the lifetime of the component. More info: https://github.com/downshift-js/downshift#control-props\";\n    Object.keys(state).forEach(function (propKey) {\n      if (prevProps[propKey] !== undefined && nextProps[propKey] === undefined) {\n        // eslint-disable-next-line no-console\n        console.error(\"downshift: A component has changed the controlled prop \\\"\" + propKey + \"\\\" to be uncontrolled. \" + warningDescription);\n      } else if (prevProps[propKey] === undefined && nextProps[propKey] !== undefined) {\n        // eslint-disable-next-line no-console\n        console.error(\"downshift: A component has changed the uncontrolled prop \\\"\" + propKey + \"\\\" to be controlled. \" + warningDescription);\n      }\n    });\n  };\n}\n\nvar cleanupStatus = debounce(function (documentProp) {\n  getStatusDiv(documentProp).textContent = '';\n}, 500);\n\n/**\n * Get the status node or create it if it does not already exist.\n * @param {Object} documentProp document passed by the user.\n * @return {HTMLElement} the status node.\n */\nfunction getStatusDiv(documentProp) {\n  var statusDiv = documentProp.getElementById('a11y-status-message');\n  if (statusDiv) {\n    return statusDiv;\n  }\n  statusDiv = documentProp.createElement('div');\n  statusDiv.setAttribute('id', 'a11y-status-message');\n  statusDiv.setAttribute('role', 'status');\n  statusDiv.setAttribute('aria-live', 'polite');\n  statusDiv.setAttribute('aria-relevant', 'additions text');\n  Object.assign(statusDiv.style, {\n    border: '0',\n    clip: 'rect(0 0 0 0)',\n    height: '1px',\n    margin: '-1px',\n    overflow: 'hidden',\n    padding: '0',\n    position: 'absolute',\n    width: '1px'\n  });\n  documentProp.body.appendChild(statusDiv);\n  return statusDiv;\n}\n\n/**\n * @param {String} status the status message\n * @param {Object} documentProp document passed by the user.\n */\nfunction setStatus(status, documentProp) {\n  if (!status || !documentProp) {\n    return;\n  }\n  var div = getStatusDiv(documentProp);\n  div.textContent = status;\n  cleanupStatus(documentProp);\n}\n\n/**\n * Removes the status element from the DOM\n * @param {Document} documentProp \n */\nfunction cleanupStatusDiv(documentProp) {\n  var statusDiv = documentProp == null ? void 0 : documentProp.getElementById('a11y-status-message');\n  if (statusDiv) {\n    statusDiv.remove();\n  }\n}\n\nvar unknown = process.env.NODE_ENV !== \"production\" ? '__autocomplete_unknown__' : 0;\nvar mouseUp = process.env.NODE_ENV !== \"production\" ? '__autocomplete_mouseup__' : 1;\nvar itemMouseEnter = process.env.NODE_ENV !== \"production\" ? '__autocomplete_item_mouseenter__' : 2;\nvar keyDownArrowUp = process.env.NODE_ENV !== \"production\" ? '__autocomplete_keydown_arrow_up__' : 3;\nvar keyDownArrowDown = process.env.NODE_ENV !== \"production\" ? '__autocomplete_keydown_arrow_down__' : 4;\nvar keyDownEscape = process.env.NODE_ENV !== \"production\" ? '__autocomplete_keydown_escape__' : 5;\nvar keyDownEnter = process.env.NODE_ENV !== \"production\" ? '__autocomplete_keydown_enter__' : 6;\nvar keyDownHome = process.env.NODE_ENV !== \"production\" ? '__autocomplete_keydown_home__' : 7;\nvar keyDownEnd = process.env.NODE_ENV !== \"production\" ? '__autocomplete_keydown_end__' : 8;\nvar clickItem = process.env.NODE_ENV !== \"production\" ? '__autocomplete_click_item__' : 9;\nvar blurInput = process.env.NODE_ENV !== \"production\" ? '__autocomplete_blur_input__' : 10;\nvar changeInput = process.env.NODE_ENV !== \"production\" ? '__autocomplete_change_input__' : 11;\nvar keyDownSpaceButton = process.env.NODE_ENV !== \"production\" ? '__autocomplete_keydown_space_button__' : 12;\nvar clickButton = process.env.NODE_ENV !== \"production\" ? '__autocomplete_click_button__' : 13;\nvar blurButton = process.env.NODE_ENV !== \"production\" ? '__autocomplete_blur_button__' : 14;\nvar controlledPropUpdatedSelectedItem = process.env.NODE_ENV !== \"production\" ? '__autocomplete_controlled_prop_updated_selected_item__' : 15;\nvar touchEnd = process.env.NODE_ENV !== \"production\" ? '__autocomplete_touchend__' : 16;\n\nvar stateChangeTypes$3 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  blurButton: blurButton,\n  blurInput: blurInput,\n  changeInput: changeInput,\n  clickButton: clickButton,\n  clickItem: clickItem,\n  controlledPropUpdatedSelectedItem: controlledPropUpdatedSelectedItem,\n  itemMouseEnter: itemMouseEnter,\n  keyDownArrowDown: keyDownArrowDown,\n  keyDownArrowUp: keyDownArrowUp,\n  keyDownEnd: keyDownEnd,\n  keyDownEnter: keyDownEnter,\n  keyDownEscape: keyDownEscape,\n  keyDownHome: keyDownHome,\n  keyDownSpaceButton: keyDownSpaceButton,\n  mouseUp: mouseUp,\n  touchEnd: touchEnd,\n  unknown: unknown\n});\n\nvar _excluded$3 = [\"refKey\", \"ref\"],\n  _excluded2$3 = [\"onClick\", \"onPress\", \"onKeyDown\", \"onKeyUp\", \"onBlur\"],\n  _excluded3$2 = [\"onKeyDown\", \"onBlur\", \"onChange\", \"onInput\", \"onChangeText\"],\n  _excluded4$2 = [\"refKey\", \"ref\"],\n  _excluded5 = [\"onMouseMove\", \"onMouseDown\", \"onClick\", \"onPress\", \"index\", \"item\"];\nvar Downshift = /*#__PURE__*/function () {\n  var Downshift = /*#__PURE__*/function (_Component) {\n    function Downshift(_props) {\n      var _this;\n      _this = _Component.call(this, _props) || this;\n      // fancy destructuring + defaults + aliases\n      // this basically says each value of state should either be set to\n      // the initial value or the default value if the initial value is not provided\n      _this.id = _this.props.id || \"downshift-\" + generateId();\n      _this.menuId = _this.props.menuId || _this.id + \"-menu\";\n      _this.labelId = _this.props.labelId || _this.id + \"-label\";\n      _this.inputId = _this.props.inputId || _this.id + \"-input\";\n      _this.getItemId = _this.props.getItemId || function (index) {\n        return _this.id + \"-item-\" + index;\n      };\n      _this.items = [];\n      // itemCount can be changed asynchronously\n      // from within downshift (so it can't come from a prop)\n      // this is why we store it as an instance and use\n      // getItemCount rather than just use items.length\n      // (to support windowing + async)\n      _this.itemCount = null;\n      _this.previousResultCount = 0;\n      _this.timeoutIds = [];\n      /**\n       * @param {Function} fn the function to call after the time\n       * @param {Number} time the time to wait\n       */\n      _this.internalSetTimeout = function (fn, time) {\n        var id = setTimeout(function () {\n          _this.timeoutIds = _this.timeoutIds.filter(function (i) {\n            return i !== id;\n          });\n          fn();\n        }, time);\n        _this.timeoutIds.push(id);\n      };\n      _this.setItemCount = function (count) {\n        _this.itemCount = count;\n      };\n      _this.unsetItemCount = function () {\n        _this.itemCount = null;\n      };\n      _this.isItemDisabled = function (_item, index) {\n        var currentElementNode = _this.getItemNodeFromIndex(index);\n        return currentElementNode && currentElementNode.hasAttribute('disabled');\n      };\n      _this.setHighlightedIndex = function (highlightedIndex, otherStateToSet) {\n        if (highlightedIndex === void 0) {\n          highlightedIndex = _this.props.defaultHighlightedIndex;\n        }\n        if (otherStateToSet === void 0) {\n          otherStateToSet = {};\n        }\n        otherStateToSet = pickState(otherStateToSet);\n        _this.internalSetState(_extends({\n          highlightedIndex: highlightedIndex\n        }, otherStateToSet));\n      };\n      _this.clearSelection = function (cb) {\n        _this.internalSetState({\n          selectedItem: null,\n          inputValue: '',\n          highlightedIndex: _this.props.defaultHighlightedIndex,\n          isOpen: _this.props.defaultIsOpen\n        }, cb);\n      };\n      _this.selectItem = function (item, otherStateToSet, cb) {\n        otherStateToSet = pickState(otherStateToSet);\n        _this.internalSetState(_extends({\n          isOpen: _this.props.defaultIsOpen,\n          highlightedIndex: _this.props.defaultHighlightedIndex,\n          selectedItem: item,\n          inputValue: _this.props.itemToString(item)\n        }, otherStateToSet), cb);\n      };\n      _this.selectItemAtIndex = function (itemIndex, otherStateToSet, cb) {\n        var item = _this.items[itemIndex];\n        if (item == null) {\n          return;\n        }\n        _this.selectItem(item, otherStateToSet, cb);\n      };\n      _this.selectHighlightedItem = function (otherStateToSet, cb) {\n        return _this.selectItemAtIndex(_this.getState().highlightedIndex, otherStateToSet, cb);\n      };\n      // any piece of our state can live in two places:\n      // 1. Uncontrolled: it's internal (this.state)\n      //    We will call this.setState to update that state\n      // 2. Controlled: it's external (this.props)\n      //    We will call this.props.onStateChange to update that state\n      //\n      // In addition, we'll call this.props.onChange if the\n      // selectedItem is changed.\n      _this.internalSetState = function (stateToSet, cb) {\n        var isItemSelected, onChangeArg;\n        var onStateChangeArg = {};\n        var isStateToSetFunction = typeof stateToSet === 'function';\n\n        // we want to call `onInputValueChange` before the `setState` call\n        // so someone controlling the `inputValue` state gets notified of\n        // the input change as soon as possible. This avoids issues with\n        // preserving the cursor position.\n        // See https://github.com/downshift-js/downshift/issues/217 for more info.\n        if (!isStateToSetFunction && stateToSet.hasOwnProperty('inputValue')) {\n          _this.props.onInputValueChange(stateToSet.inputValue, _extends({}, _this.getStateAndHelpers(), stateToSet));\n        }\n        return _this.setState(function (state) {\n          var _newStateToSet;\n          state = _this.getState(state);\n          var newStateToSet = isStateToSetFunction ? stateToSet(state) : stateToSet;\n\n          // Your own function that could modify the state that will be set.\n          newStateToSet = _this.props.stateReducer(state, newStateToSet);\n\n          // checks if an item is selected, regardless of if it's different from\n          // what was selected before\n          // used to determine if onSelect and onChange callbacks should be called\n          isItemSelected = newStateToSet.hasOwnProperty('selectedItem');\n          // this keeps track of the object we want to call with setState\n          var nextState = {};\n          // we need to call on change if the outside world is controlling any of our state\n          // and we're trying to update that state. OR if the selection has changed and we're\n          // trying to update the selection\n          if (isItemSelected && newStateToSet.selectedItem !== state.selectedItem) {\n            onChangeArg = newStateToSet.selectedItem;\n          }\n          (_newStateToSet = newStateToSet).type || (_newStateToSet.type = unknown);\n          Object.keys(newStateToSet).forEach(function (key) {\n            // onStateChangeArg should only have the state that is\n            // actually changing\n            if (state[key] !== newStateToSet[key]) {\n              onStateChangeArg[key] = newStateToSet[key];\n            }\n            // the type is useful for the onStateChangeArg\n            // but we don't actually want to set it in internal state.\n            // this is an undocumented feature for now... Not all internalSetState\n            // calls support it and I'm not certain we want them to yet.\n            // But it enables users controlling the isOpen state to know when\n            // the isOpen state changes due to mouseup events which is quite handy.\n            if (key === 'type') {\n              return;\n            }\n            newStateToSet[key];\n            // if it's coming from props, then we don't care to set it internally\n            if (!isControlledProp(_this.props, key)) {\n              nextState[key] = newStateToSet[key];\n            }\n          });\n\n          // if stateToSet is a function, then we weren't able to call onInputValueChange\n          // earlier, so we'll call it now that we know what the inputValue state will be.\n          if (isStateToSetFunction && newStateToSet.hasOwnProperty('inputValue')) {\n            _this.props.onInputValueChange(newStateToSet.inputValue, _extends({}, _this.getStateAndHelpers(), newStateToSet));\n          }\n          return nextState;\n        }, function () {\n          // call the provided callback if it's a function\n          cbToCb(cb)();\n\n          // only call the onStateChange and onChange callbacks if\n          // we have relevant information to pass them.\n          var hasMoreStateThanType = Object.keys(onStateChangeArg).length > 1;\n          if (hasMoreStateThanType) {\n            _this.props.onStateChange(onStateChangeArg, _this.getStateAndHelpers());\n          }\n          if (isItemSelected) {\n            _this.props.onSelect(stateToSet.selectedItem, _this.getStateAndHelpers());\n          }\n          if (onChangeArg !== undefined) {\n            _this.props.onChange(onChangeArg, _this.getStateAndHelpers());\n          }\n          // this is currently undocumented and therefore subject to change\n          // We'll try to not break it, but just be warned.\n          _this.props.onUserAction(onStateChangeArg, _this.getStateAndHelpers());\n        });\n      };\n      //////////////////////////// ROOT\n      _this.rootRef = function (node) {\n        return _this._rootNode = node;\n      };\n      _this.getRootProps = function (_temp, _temp2) {\n        var _extends2;\n        var _ref = _temp === void 0 ? {} : _temp,\n          _ref$refKey = _ref.refKey,\n          refKey = _ref$refKey === void 0 ? 'ref' : _ref$refKey,\n          ref = _ref.ref,\n          rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);\n        var _ref2 = _temp2 === void 0 ? {} : _temp2,\n          _ref2$suppressRefErro = _ref2.suppressRefError,\n          suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n        // this is used in the render to know whether the user has called getRootProps.\n        // It uses that to know whether to apply the props automatically\n        _this.getRootProps.called = true;\n        _this.getRootProps.refKey = refKey;\n        _this.getRootProps.suppressRefError = suppressRefError;\n        var _this$getState = _this.getState(),\n          isOpen = _this$getState.isOpen;\n        return _extends((_extends2 = {}, _extends2[refKey] = handleRefs(ref, _this.rootRef), _extends2.role = 'combobox', _extends2['aria-expanded'] = isOpen, _extends2['aria-haspopup'] = 'listbox', _extends2['aria-owns'] = isOpen ? _this.menuId : undefined, _extends2['aria-labelledby'] = _this.labelId, _extends2), rest);\n      };\n      //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ROOT\n      _this.keyDownHandlers = {\n        ArrowDown: function ArrowDown(event) {\n          var _this2 = this;\n          event.preventDefault();\n          if (this.getState().isOpen) {\n            var amount = event.shiftKey ? 5 : 1;\n            this.moveHighlightedIndex(amount, {\n              type: keyDownArrowDown\n            });\n          } else {\n            this.internalSetState({\n              isOpen: true,\n              type: keyDownArrowDown\n            }, function () {\n              var itemCount = _this2.getItemCount();\n              if (itemCount > 0) {\n                var _this2$getState = _this2.getState(),\n                  highlightedIndex = _this2$getState.highlightedIndex;\n                var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, 1, {\n                  length: itemCount\n                }, _this2.isItemDisabled, true);\n                _this2.setHighlightedIndex(nextHighlightedIndex, {\n                  type: keyDownArrowDown\n                });\n              }\n            });\n          }\n        },\n        ArrowUp: function ArrowUp(event) {\n          var _this3 = this;\n          event.preventDefault();\n          if (this.getState().isOpen) {\n            var amount = event.shiftKey ? -5 : -1;\n            this.moveHighlightedIndex(amount, {\n              type: keyDownArrowUp\n            });\n          } else {\n            this.internalSetState({\n              isOpen: true,\n              type: keyDownArrowUp\n            }, function () {\n              var itemCount = _this3.getItemCount();\n              if (itemCount > 0) {\n                var _this3$getState = _this3.getState(),\n                  highlightedIndex = _this3$getState.highlightedIndex;\n                var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, -1, {\n                  length: itemCount\n                }, _this3.isItemDisabled, true);\n                _this3.setHighlightedIndex(nextHighlightedIndex, {\n                  type: keyDownArrowUp\n                });\n              }\n            });\n          }\n        },\n        Enter: function Enter(event) {\n          if (event.which === 229) {\n            return;\n          }\n          var _this$getState2 = this.getState(),\n            isOpen = _this$getState2.isOpen,\n            highlightedIndex = _this$getState2.highlightedIndex;\n          if (isOpen && highlightedIndex != null) {\n            event.preventDefault();\n            var item = this.items[highlightedIndex];\n            var itemNode = this.getItemNodeFromIndex(highlightedIndex);\n            if (item == null || itemNode && itemNode.hasAttribute('disabled')) {\n              return;\n            }\n            this.selectHighlightedItem({\n              type: keyDownEnter\n            });\n          }\n        },\n        Escape: function Escape(event) {\n          event.preventDefault();\n          this.reset(_extends({\n            type: keyDownEscape\n          }, !this.state.isOpen && {\n            selectedItem: null,\n            inputValue: ''\n          }));\n        }\n      };\n      //////////////////////////// BUTTON\n      _this.buttonKeyDownHandlers = _extends({}, _this.keyDownHandlers, {\n        ' ': function _(event) {\n          event.preventDefault();\n          this.toggleMenu({\n            type: keyDownSpaceButton\n          });\n        }\n      });\n      _this.inputKeyDownHandlers = _extends({}, _this.keyDownHandlers, {\n        Home: function Home(event) {\n          var _this$getState3 = this.getState(),\n            isOpen = _this$getState3.isOpen;\n          if (!isOpen) {\n            return;\n          }\n          event.preventDefault();\n          var itemCount = this.getItemCount();\n          if (itemCount <= 0 || !isOpen) {\n            return;\n          }\n\n          // get next non-disabled starting downwards from 0 if that's disabled.\n          var newHighlightedIndex = getNonDisabledIndex(0, false, {\n            length: itemCount\n          }, this.isItemDisabled);\n          this.setHighlightedIndex(newHighlightedIndex, {\n            type: keyDownHome\n          });\n        },\n        End: function End(event) {\n          var _this$getState4 = this.getState(),\n            isOpen = _this$getState4.isOpen;\n          if (!isOpen) {\n            return;\n          }\n          event.preventDefault();\n          var itemCount = this.getItemCount();\n          if (itemCount <= 0 || !isOpen) {\n            return;\n          }\n\n          // get next non-disabled starting upwards from last index if that's disabled.\n          var newHighlightedIndex = getNonDisabledIndex(itemCount - 1, true, {\n            length: itemCount\n          }, this.isItemDisabled);\n          this.setHighlightedIndex(newHighlightedIndex, {\n            type: keyDownEnd\n          });\n        }\n      });\n      _this.getToggleButtonProps = function (_temp3) {\n        var _ref3 = _temp3 === void 0 ? {} : _temp3,\n          onClick = _ref3.onClick;\n          _ref3.onPress;\n          var onKeyDown = _ref3.onKeyDown,\n          onKeyUp = _ref3.onKeyUp,\n          onBlur = _ref3.onBlur,\n          rest = _objectWithoutPropertiesLoose(_ref3, _excluded2$3);\n        var _this$getState5 = _this.getState(),\n          isOpen = _this$getState5.isOpen;\n        var enabledEventHandlers = {\n          onClick: callAllEventHandlers(onClick, _this.buttonHandleClick),\n          onKeyDown: callAllEventHandlers(onKeyDown, _this.buttonHandleKeyDown),\n          onKeyUp: callAllEventHandlers(onKeyUp, _this.buttonHandleKeyUp),\n          onBlur: callAllEventHandlers(onBlur, _this.buttonHandleBlur)\n        };\n        var eventHandlers = rest.disabled ? {} : enabledEventHandlers;\n        return _extends({\n          type: 'button',\n          role: 'button',\n          'aria-label': isOpen ? 'close menu' : 'open menu',\n          'aria-haspopup': true,\n          'data-toggle': true\n        }, eventHandlers, rest);\n      };\n      _this.buttonHandleKeyUp = function (event) {\n        // Prevent click event from emitting in Firefox\n        event.preventDefault();\n      };\n      _this.buttonHandleKeyDown = function (event) {\n        var key = normalizeArrowKey(event);\n        if (_this.buttonKeyDownHandlers[key]) {\n          _this.buttonKeyDownHandlers[key].call(_this, event);\n        }\n      };\n      _this.buttonHandleClick = function (event) {\n        event.preventDefault();\n        // handle odd case for Safari and Firefox which\n        // don't give the button the focus properly.\n        /* istanbul ignore if (can't reasonably test this) */\n        if (_this.props.environment) {\n          var _this$props$environme = _this.props.environment.document,\n            body = _this$props$environme.body,\n            activeElement = _this$props$environme.activeElement;\n          if (body && body === activeElement) {\n            event.target.focus();\n          }\n        }\n        // to simplify testing components that use downshift, we'll not wrap this in a setTimeout\n        // if the NODE_ENV is test. With the proper build system, this should be dead code eliminated\n        // when building for production and should therefore have no impact on production code.\n        if (process.env.NODE_ENV === 'test') {\n          _this.toggleMenu({\n            type: clickButton\n          });\n        } else {\n          // Ensure that toggle of menu occurs after the potential blur event in iOS\n          _this.internalSetTimeout(function () {\n            return _this.toggleMenu({\n              type: clickButton\n            });\n          });\n        }\n      };\n      _this.buttonHandleBlur = function (event) {\n        var blurTarget = event.target; // Save blur target for comparison with activeElement later\n        // Need setTimeout, so that when the user presses Tab, the activeElement is the next focused element, not body element\n        _this.internalSetTimeout(function () {\n          if (_this.isMouseDown || !_this.props.environment) {\n            return;\n          }\n          var activeElement = _this.props.environment.document.activeElement;\n          if ((activeElement == null || activeElement.id !== _this.inputId) && activeElement !== blurTarget // Do nothing if we refocus the same element again (to solve issue in Safari on iOS)\n          ) {\n            _this.reset({\n              type: blurButton\n            });\n          }\n        });\n      };\n      //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ BUTTON\n      /////////////////////////////// LABEL\n      _this.getLabelProps = function (props) {\n        return _extends({\n          htmlFor: _this.inputId,\n          id: _this.labelId\n        }, props);\n      };\n      //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ LABEL\n      /////////////////////////////// INPUT\n      _this.getInputProps = function (_temp4) {\n        var _ref4 = _temp4 === void 0 ? {} : _temp4,\n          onKeyDown = _ref4.onKeyDown,\n          onBlur = _ref4.onBlur,\n          onChange = _ref4.onChange,\n          onInput = _ref4.onInput;\n          _ref4.onChangeText;\n          var rest = _objectWithoutPropertiesLoose(_ref4, _excluded3$2);\n        var onChangeKey;\n        var eventHandlers = {};\n\n        /* istanbul ignore next (preact) */\n        {\n          onChangeKey = 'onChange';\n        }\n        var _this$getState6 = _this.getState(),\n          inputValue = _this$getState6.inputValue,\n          isOpen = _this$getState6.isOpen,\n          highlightedIndex = _this$getState6.highlightedIndex;\n        if (!rest.disabled) {\n          var _eventHandlers;\n          eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, _this.inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, _this.inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, _this.inputHandleBlur), _eventHandlers);\n        }\n        return _extends({\n          'aria-autocomplete': 'list',\n          'aria-activedescendant': isOpen && typeof highlightedIndex === 'number' && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) : undefined,\n          'aria-controls': isOpen ? _this.menuId : undefined,\n          'aria-labelledby': rest && rest['aria-label'] ? undefined : _this.labelId,\n          // https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion\n          // revert back since autocomplete=\"nope\" is ignored on latest Chrome and Opera\n          autoComplete: 'off',\n          value: inputValue,\n          id: _this.inputId\n        }, eventHandlers, rest);\n      };\n      _this.inputHandleKeyDown = function (event) {\n        var key = normalizeArrowKey(event);\n        if (key && _this.inputKeyDownHandlers[key]) {\n          _this.inputKeyDownHandlers[key].call(_this, event);\n        }\n      };\n      _this.inputHandleChange = function (event) {\n        _this.internalSetState({\n          type: changeInput,\n          isOpen: true,\n          inputValue: event.target.value,\n          highlightedIndex: _this.props.defaultHighlightedIndex\n        });\n      };\n      _this.inputHandleBlur = function () {\n        // Need setTimeout, so that when the user presses Tab, the activeElement is the next focused element, not the body element\n        _this.internalSetTimeout(function () {\n          var _activeElement$datase;\n          if (_this.isMouseDown || !_this.props.environment) {\n            return;\n          }\n          var activeElement = _this.props.environment.document.activeElement;\n          var downshiftButtonIsActive = (activeElement == null || (_activeElement$datase = activeElement.dataset) == null ? void 0 : _activeElement$datase.toggle) && _this._rootNode && _this._rootNode.contains(activeElement);\n          if (!downshiftButtonIsActive) {\n            _this.reset({\n              type: blurInput\n            });\n          }\n        });\n      };\n      //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ INPUT\n      /////////////////////////////// MENU\n      _this.menuRef = function (node) {\n        _this._menuNode = node;\n      };\n      _this.getMenuProps = function (_temp5, _temp6) {\n        var _extends3;\n        var _ref5 = _temp5 === void 0 ? {} : _temp5,\n          _ref5$refKey = _ref5.refKey,\n          refKey = _ref5$refKey === void 0 ? 'ref' : _ref5$refKey,\n          ref = _ref5.ref,\n          props = _objectWithoutPropertiesLoose(_ref5, _excluded4$2);\n        var _ref6 = _temp6 === void 0 ? {} : _temp6,\n          _ref6$suppressRefErro = _ref6.suppressRefError,\n          suppressRefError = _ref6$suppressRefErro === void 0 ? false : _ref6$suppressRefErro;\n        _this.getMenuProps.called = true;\n        _this.getMenuProps.refKey = refKey;\n        _this.getMenuProps.suppressRefError = suppressRefError;\n        return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, _this.menuRef), _extends3.role = 'listbox', _extends3['aria-labelledby'] = props && props['aria-label'] ? undefined : _this.labelId, _extends3.id = _this.menuId, _extends3), props);\n      };\n      //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ MENU\n      /////////////////////////////// ITEM\n      _this.getItemProps = function (_temp7) {\n        var _enabledEventHandlers;\n        var _ref7 = _temp7 === void 0 ? {} : _temp7,\n          onMouseMove = _ref7.onMouseMove,\n          onMouseDown = _ref7.onMouseDown,\n          onClick = _ref7.onClick;\n          _ref7.onPress;\n          var index = _ref7.index,\n          _ref7$item = _ref7.item,\n          item = _ref7$item === void 0 ? process.env.NODE_ENV === 'production' ? /* istanbul ignore next */undefined : requiredProp('getItemProps', 'item') : _ref7$item,\n          rest = _objectWithoutPropertiesLoose(_ref7, _excluded5);\n        if (index === undefined) {\n          _this.items.push(item);\n          index = _this.items.indexOf(item);\n        } else {\n          _this.items[index] = item;\n        }\n        var onSelectKey = 'onClick';\n        var customClickHandler = onClick;\n        var enabledEventHandlers = (_enabledEventHandlers = {\n          // onMouseMove is used over onMouseEnter here. onMouseMove\n          // is only triggered on actual mouse movement while onMouseEnter\n          // can fire on DOM changes, interrupting keyboard navigation\n          onMouseMove: callAllEventHandlers(onMouseMove, function () {\n            if (index === _this.getState().highlightedIndex) {\n              return;\n            }\n            _this.setHighlightedIndex(index, {\n              type: itemMouseEnter\n            });\n\n            // We never want to manually scroll when changing state based\n            // on `onMouseMove` because we will be moving the element out\n            // from under the user which is currently scrolling/moving the\n            // cursor\n            _this.avoidScrolling = true;\n            _this.internalSetTimeout(function () {\n              return _this.avoidScrolling = false;\n            }, 250);\n          }),\n          onMouseDown: callAllEventHandlers(onMouseDown, function (event) {\n            // This prevents the activeElement from being changed\n            // to the item so it can remain with the current activeElement\n            // which is a more common use case.\n            event.preventDefault();\n          })\n        }, _enabledEventHandlers[onSelectKey] = callAllEventHandlers(customClickHandler, function () {\n          _this.selectItemAtIndex(index, {\n            type: clickItem\n          });\n        }), _enabledEventHandlers);\n\n        // Passing down the onMouseDown handler to prevent redirect\n        // of the activeElement if clicking on disabled items\n        var eventHandlers = rest.disabled ? {\n          onMouseDown: enabledEventHandlers.onMouseDown\n        } : enabledEventHandlers;\n        return _extends({\n          id: _this.getItemId(index),\n          role: 'option',\n          'aria-selected': _this.getState().highlightedIndex === index\n        }, eventHandlers, rest);\n      };\n      //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ITEM\n      _this.clearItems = function () {\n        _this.items = [];\n      };\n      _this.reset = function (otherStateToSet, cb) {\n        if (otherStateToSet === void 0) {\n          otherStateToSet = {};\n        }\n        otherStateToSet = pickState(otherStateToSet);\n        _this.internalSetState(function (_ref8) {\n          var selectedItem = _ref8.selectedItem;\n          return _extends({\n            isOpen: _this.props.defaultIsOpen,\n            highlightedIndex: _this.props.defaultHighlightedIndex,\n            inputValue: _this.props.itemToString(selectedItem)\n          }, otherStateToSet);\n        }, cb);\n      };\n      _this.toggleMenu = function (otherStateToSet, cb) {\n        if (otherStateToSet === void 0) {\n          otherStateToSet = {};\n        }\n        otherStateToSet = pickState(otherStateToSet);\n        _this.internalSetState(function (_ref9) {\n          var isOpen = _ref9.isOpen;\n          return _extends({\n            isOpen: !isOpen\n          }, isOpen && {\n            highlightedIndex: _this.props.defaultHighlightedIndex\n          }, otherStateToSet);\n        }, function () {\n          var _this$getState7 = _this.getState(),\n            isOpen = _this$getState7.isOpen,\n            highlightedIndex = _this$getState7.highlightedIndex;\n          if (isOpen) {\n            if (_this.getItemCount() > 0 && typeof highlightedIndex === 'number') {\n              _this.setHighlightedIndex(highlightedIndex, otherStateToSet);\n            }\n          }\n          cbToCb(cb)();\n        });\n      };\n      _this.openMenu = function (cb) {\n        _this.internalSetState({\n          isOpen: true\n        }, cb);\n      };\n      _this.closeMenu = function (cb) {\n        _this.internalSetState({\n          isOpen: false\n        }, cb);\n      };\n      _this.updateStatus = debounce(function () {\n        var _this$props;\n        if (!((_this$props = _this.props) != null && (_this$props = _this$props.environment) != null && _this$props.document)) {\n          return;\n        }\n        var state = _this.getState();\n        var item = _this.items[state.highlightedIndex];\n        var resultCount = _this.getItemCount();\n        var status = _this.props.getA11yStatusMessage(_extends({\n          itemToString: _this.props.itemToString,\n          previousResultCount: _this.previousResultCount,\n          resultCount: resultCount,\n          highlightedItem: item\n        }, state));\n        _this.previousResultCount = resultCount;\n        setStatus(status, _this.props.environment.document);\n      }, 200);\n      var _this$props2 = _this.props,\n        defaultHighlightedIndex = _this$props2.defaultHighlightedIndex,\n        _this$props2$initialH = _this$props2.initialHighlightedIndex,\n        _highlightedIndex = _this$props2$initialH === void 0 ? defaultHighlightedIndex : _this$props2$initialH,\n        defaultIsOpen = _this$props2.defaultIsOpen,\n        _this$props2$initialI = _this$props2.initialIsOpen,\n        _isOpen = _this$props2$initialI === void 0 ? defaultIsOpen : _this$props2$initialI,\n        _this$props2$initialI2 = _this$props2.initialInputValue,\n        _inputValue = _this$props2$initialI2 === void 0 ? '' : _this$props2$initialI2,\n        _this$props2$initialS = _this$props2.initialSelectedItem,\n        _selectedItem = _this$props2$initialS === void 0 ? null : _this$props2$initialS;\n      var _state = _this.getState({\n        highlightedIndex: _highlightedIndex,\n        isOpen: _isOpen,\n        inputValue: _inputValue,\n        selectedItem: _selectedItem\n      });\n      if (_state.selectedItem != null && _this.props.initialInputValue === undefined) {\n        _state.inputValue = _this.props.itemToString(_state.selectedItem);\n      }\n      _this.state = _state;\n      return _this;\n    }\n    _inheritsLoose(Downshift, _Component);\n    var _proto = Downshift.prototype;\n    /**\n     * Clear all running timeouts\n     */\n    _proto.internalClearTimeouts = function internalClearTimeouts() {\n      this.timeoutIds.forEach(function (id) {\n        clearTimeout(id);\n      });\n      this.timeoutIds = [];\n    }\n\n    /**\n     * Gets the state based on internal state or props\n     * If a state value is passed via props, then that\n     * is the value given, otherwise it's retrieved from\n     * stateToMerge\n     *\n     * @param {Object} stateToMerge defaults to this.state\n     * @return {Object} the state\n     */;\n    _proto.getState = function getState$1(stateToMerge) {\n      if (stateToMerge === void 0) {\n        stateToMerge = this.state;\n      }\n      return getState(stateToMerge, this.props);\n    };\n    _proto.getItemCount = function getItemCount() {\n      // things read better this way. They're in priority order:\n      // 1. `this.itemCount`\n      // 2. `this.props.itemCount`\n      // 3. `this.items.length`\n      var itemCount = this.items.length;\n      if (this.itemCount != null) {\n        itemCount = this.itemCount;\n      } else if (this.props.itemCount !== undefined) {\n        itemCount = this.props.itemCount;\n      }\n      return itemCount;\n    };\n    _proto.getItemNodeFromIndex = function getItemNodeFromIndex(index) {\n      return this.props.environment ? this.props.environment.document.getElementById(this.getItemId(index)) : null;\n    };\n    _proto.scrollHighlightedItemIntoView = function scrollHighlightedItemIntoView() {\n      /* istanbul ignore else (react-native) */\n      {\n        var node = this.getItemNodeFromIndex(this.getState().highlightedIndex);\n        this.props.scrollIntoView(node, this._menuNode);\n      }\n    };\n    _proto.moveHighlightedIndex = function moveHighlightedIndex(amount, otherStateToSet) {\n      var itemCount = this.getItemCount();\n      var _this$getState8 = this.getState(),\n        highlightedIndex = _this$getState8.highlightedIndex;\n      if (itemCount > 0) {\n        var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, amount, {\n          length: itemCount\n        }, this.isItemDisabled, true);\n        this.setHighlightedIndex(nextHighlightedIndex, otherStateToSet);\n      }\n    };\n    _proto.getStateAndHelpers = function getStateAndHelpers() {\n      var _this$getState9 = this.getState(),\n        highlightedIndex = _this$getState9.highlightedIndex,\n        inputValue = _this$getState9.inputValue,\n        selectedItem = _this$getState9.selectedItem,\n        isOpen = _this$getState9.isOpen;\n      var itemToString = this.props.itemToString;\n      var id = this.id;\n      var getRootProps = this.getRootProps,\n        getToggleButtonProps = this.getToggleButtonProps,\n        getLabelProps = this.getLabelProps,\n        getMenuProps = this.getMenuProps,\n        getInputProps = this.getInputProps,\n        getItemProps = this.getItemProps,\n        openMenu = this.openMenu,\n        closeMenu = this.closeMenu,\n        toggleMenu = this.toggleMenu,\n        selectItem = this.selectItem,\n        selectItemAtIndex = this.selectItemAtIndex,\n        selectHighlightedItem = this.selectHighlightedItem,\n        setHighlightedIndex = this.setHighlightedIndex,\n        clearSelection = this.clearSelection,\n        clearItems = this.clearItems,\n        reset = this.reset,\n        setItemCount = this.setItemCount,\n        unsetItemCount = this.unsetItemCount,\n        setState = this.internalSetState;\n      return {\n        // prop getters\n        getRootProps: getRootProps,\n        getToggleButtonProps: getToggleButtonProps,\n        getLabelProps: getLabelProps,\n        getMenuProps: getMenuProps,\n        getInputProps: getInputProps,\n        getItemProps: getItemProps,\n        // actions\n        reset: reset,\n        openMenu: openMenu,\n        closeMenu: closeMenu,\n        toggleMenu: toggleMenu,\n        selectItem: selectItem,\n        selectItemAtIndex: selectItemAtIndex,\n        selectHighlightedItem: selectHighlightedItem,\n        setHighlightedIndex: setHighlightedIndex,\n        clearSelection: clearSelection,\n        clearItems: clearItems,\n        setItemCount: setItemCount,\n        unsetItemCount: unsetItemCount,\n        setState: setState,\n        // props\n        itemToString: itemToString,\n        // derived\n        id: id,\n        // state\n        highlightedIndex: highlightedIndex,\n        inputValue: inputValue,\n        isOpen: isOpen,\n        selectedItem: selectedItem\n      };\n    };\n    _proto.componentDidMount = function componentDidMount() {\n      var _this4 = this;\n      /* istanbul ignore if (react-native) */\n      if (process.env.NODE_ENV !== 'production' && true && this.getMenuProps.called && !this.getMenuProps.suppressRefError) {\n        validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);\n      }\n\n      /* istanbul ignore if (react-native or SSR) */\n      if (!this.props.environment) {\n        this.cleanup = function () {\n          _this4.internalClearTimeouts();\n        };\n      } else {\n        // this.isMouseDown helps us track whether the mouse is currently held down.\n        // This is useful when the user clicks on an item in the list, but holds the mouse\n        // down long enough for the list to disappear (because the blur event fires on the input)\n        // this.isMouseDown is used in the blur handler on the input to determine whether the blur event should\n        // trigger hiding the menu.\n        var onMouseDown = function onMouseDown() {\n          _this4.isMouseDown = true;\n        };\n        var onMouseUp = function onMouseUp(event) {\n          _this4.isMouseDown = false;\n          // if the target element or the activeElement is within a downshift node\n          // then we don't want to reset downshift\n          var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment);\n          if (!contextWithinDownshift && _this4.getState().isOpen) {\n            _this4.reset({\n              type: mouseUp\n            }, function () {\n              return _this4.props.onOuterClick(_this4.getStateAndHelpers());\n            });\n          }\n        };\n        // Touching an element in iOS gives focus and hover states, but touching out of\n        // the element will remove hover, and persist the focus state, resulting in the\n        // blur event not being triggered.\n        // this.isTouchMove helps us track whether the user is tapping or swiping on a touch screen.\n        // If the user taps outside of Downshift, the component should be reset,\n        // but not if the user is swiping\n        var onTouchStart = function onTouchStart() {\n          _this4.isTouchMove = false;\n        };\n        var onTouchMove = function onTouchMove() {\n          _this4.isTouchMove = true;\n        };\n        var onTouchEnd = function onTouchEnd(event) {\n          var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment, false);\n          if (!_this4.isTouchMove && !contextWithinDownshift && _this4.getState().isOpen) {\n            _this4.reset({\n              type: touchEnd\n            }, function () {\n              return _this4.props.onOuterClick(_this4.getStateAndHelpers());\n            });\n          }\n        };\n        var environment = this.props.environment;\n        environment.addEventListener('mousedown', onMouseDown);\n        environment.addEventListener('mouseup', onMouseUp);\n        environment.addEventListener('touchstart', onTouchStart);\n        environment.addEventListener('touchmove', onTouchMove);\n        environment.addEventListener('touchend', onTouchEnd);\n        this.cleanup = function () {\n          _this4.internalClearTimeouts();\n          _this4.updateStatus.cancel();\n          environment.removeEventListener('mousedown', onMouseDown);\n          environment.removeEventListener('mouseup', onMouseUp);\n          environment.removeEventListener('touchstart', onTouchStart);\n          environment.removeEventListener('touchmove', onTouchMove);\n          environment.removeEventListener('touchend', onTouchEnd);\n        };\n      }\n    };\n    _proto.shouldScroll = function shouldScroll(prevState, prevProps) {\n      var _ref10 = this.props.highlightedIndex === undefined ? this.getState() : this.props,\n        currentHighlightedIndex = _ref10.highlightedIndex;\n      var _ref11 = prevProps.highlightedIndex === undefined ? prevState : prevProps,\n        prevHighlightedIndex = _ref11.highlightedIndex;\n      var scrollWhenOpen = currentHighlightedIndex && this.getState().isOpen && !prevState.isOpen;\n      var scrollWhenNavigating = currentHighlightedIndex !== prevHighlightedIndex;\n      return scrollWhenOpen || scrollWhenNavigating;\n    };\n    _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n      if (process.env.NODE_ENV !== 'production') {\n        validateControlledUnchanged(this.state, prevProps, this.props);\n        /* istanbul ignore if (react-native) */\n        if (this.getMenuProps.called && !this.getMenuProps.suppressRefError) {\n          validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);\n        }\n      }\n      if (isControlledProp(this.props, 'selectedItem') && this.props.selectedItemChanged(prevProps.selectedItem, this.props.selectedItem)) {\n        this.internalSetState({\n          type: controlledPropUpdatedSelectedItem,\n          inputValue: this.props.itemToString(this.props.selectedItem)\n        });\n      }\n      if (!this.avoidScrolling && this.shouldScroll(prevState, prevProps)) {\n        this.scrollHighlightedItemIntoView();\n      }\n\n      /* istanbul ignore else (react-native) */\n      {\n        this.updateStatus();\n      }\n    };\n    _proto.componentWillUnmount = function componentWillUnmount() {\n      this.cleanup(); // avoids memory leak\n    };\n    _proto.render = function render() {\n      var children = unwrapArray(this.props.children, noop);\n      // because the items are rerendered every time we call the children\n      // we clear this out each render and it will be populated again as\n      // getItemProps is called.\n      this.clearItems();\n      // we reset this so we know whether the user calls getRootProps during\n      // this render. If they do then we don't need to do anything,\n      // if they don't then we need to clone the element they return and\n      // apply the props for them.\n      this.getRootProps.called = false;\n      this.getRootProps.refKey = undefined;\n      this.getRootProps.suppressRefError = undefined;\n      // we do something similar for getMenuProps\n      this.getMenuProps.called = false;\n      this.getMenuProps.refKey = undefined;\n      this.getMenuProps.suppressRefError = undefined;\n      // we do something similar for getLabelProps\n      this.getLabelProps.called = false;\n      // and something similar for getInputProps\n      this.getInputProps.called = false;\n      var element = unwrapArray(children(this.getStateAndHelpers()));\n      if (!element) {\n        return null;\n      }\n      if (this.getRootProps.called || this.props.suppressRefError) {\n        if (process.env.NODE_ENV !== 'production' && !this.getRootProps.suppressRefError && !this.props.suppressRefError) {\n          validateGetRootPropsCalledCorrectly(element, this.getRootProps);\n        }\n        return element;\n      } else if (isDOMElement(element)) {\n        // they didn't apply the root props, but we can clone\n        // this and apply the props ourselves\n        return /*#__PURE__*/cloneElement(element, this.getRootProps(getElementProps(element)));\n      }\n\n      /* istanbul ignore else */\n      if (process.env.NODE_ENV !== 'production') {\n        // they didn't apply the root props, but they need to\n        // otherwise we can't query around the autocomplete\n\n        throw new Error('downshift: If you return a non-DOM element, you must apply the getRootProps function');\n      }\n\n      /* istanbul ignore next */\n      return undefined;\n    };\n    return Downshift;\n  }(Component);\n  Downshift.defaultProps = {\n    defaultHighlightedIndex: null,\n    defaultIsOpen: false,\n    getA11yStatusMessage: getA11yStatusMessage,\n    itemToString: function itemToString(i) {\n      if (i == null) {\n        return '';\n      }\n      if (process.env.NODE_ENV !== 'production' && isPlainObject(i) && !i.hasOwnProperty('toString')) {\n        // eslint-disable-next-line no-console\n        console.warn('downshift: An object was passed to the default implementation of `itemToString`. You should probably provide your own `itemToString` implementation. Please refer to the `itemToString` API documentation.', 'The object that was passed:', i);\n      }\n      return String(i);\n    },\n    onStateChange: noop,\n    onInputValueChange: noop,\n    onUserAction: noop,\n    onChange: noop,\n    onSelect: noop,\n    onOuterClick: noop,\n    selectedItemChanged: function selectedItemChanged(prevItem, item) {\n      return prevItem !== item;\n    },\n    environment: /* istanbul ignore next (ssr) */\n    typeof window === 'undefined' || false ? undefined : window,\n    stateReducer: function stateReducer(state, stateToSet) {\n      return stateToSet;\n    },\n    suppressRefError: false,\n    scrollIntoView: scrollIntoView\n  };\n  Downshift.stateChangeTypes = stateChangeTypes$3;\n  return Downshift;\n}();\nprocess.env.NODE_ENV !== \"production\" ? Downshift.propTypes = {\n  children: PropTypes.func,\n  defaultHighlightedIndex: PropTypes.number,\n  defaultIsOpen: PropTypes.bool,\n  initialHighlightedIndex: PropTypes.number,\n  initialSelectedItem: PropTypes.any,\n  initialInputValue: PropTypes.string,\n  initialIsOpen: PropTypes.bool,\n  getA11yStatusMessage: PropTypes.func,\n  itemToString: PropTypes.func,\n  onChange: PropTypes.func,\n  onSelect: PropTypes.func,\n  onStateChange: PropTypes.func,\n  onInputValueChange: PropTypes.func,\n  onUserAction: PropTypes.func,\n  onOuterClick: PropTypes.func,\n  selectedItemChanged: PropTypes.func,\n  stateReducer: PropTypes.func,\n  itemCount: PropTypes.number,\n  id: PropTypes.string,\n  environment: PropTypes.shape({\n    addEventListener: PropTypes.func.isRequired,\n    removeEventListener: PropTypes.func.isRequired,\n    document: PropTypes.shape({\n      createElement: PropTypes.func.isRequired,\n      getElementById: PropTypes.func.isRequired,\n      activeElement: PropTypes.any.isRequired,\n      body: PropTypes.any.isRequired\n    }).isRequired,\n    Node: PropTypes.func.isRequired\n  }),\n  suppressRefError: PropTypes.bool,\n  scrollIntoView: PropTypes.func,\n  // things we keep in state for uncontrolled components\n  // but can accept as props for controlled components\n  /* eslint-disable react/no-unused-prop-types */\n  selectedItem: PropTypes.any,\n  isOpen: PropTypes.bool,\n  inputValue: PropTypes.string,\n  highlightedIndex: PropTypes.number,\n  labelId: PropTypes.string,\n  inputId: PropTypes.string,\n  menuId: PropTypes.string,\n  getItemId: PropTypes.func\n  /* eslint-enable react/no-unused-prop-types */\n} : void 0;\nfunction validateGetMenuPropsCalledCorrectly(node, _ref12) {\n  var refKey = _ref12.refKey;\n  if (!node) {\n    // eslint-disable-next-line no-console\n    console.error(\"downshift: The ref prop \\\"\" + refKey + \"\\\" from getMenuProps was not applied correctly on your menu element.\");\n  }\n}\nfunction validateGetRootPropsCalledCorrectly(element, _ref13) {\n  var refKey = _ref13.refKey;\n  var refKeySpecified = refKey !== 'ref';\n  var isComposite = !isDOMElement(element);\n  if (isComposite && !refKeySpecified && !isForwardRef(element)) {\n    // eslint-disable-next-line no-console\n    console.error('downshift: You returned a non-DOM element. You must specify a refKey in getRootProps');\n  } else if (!isComposite && refKeySpecified) {\n    // eslint-disable-next-line no-console\n    console.error(\"downshift: You returned a DOM element. You should not specify a refKey in getRootProps. You specified \\\"\" + refKey + \"\\\"\");\n  }\n  if (!isForwardRef(element) && !getElementProps(element)[refKey]) {\n    // eslint-disable-next-line no-console\n    console.error(\"downshift: You must apply the ref prop \\\"\" + refKey + \"\\\" from getRootProps onto your root element.\");\n  }\n}\n\nvar dropdownDefaultStateValues = {\n  highlightedIndex: -1,\n  isOpen: false,\n  selectedItem: null,\n  inputValue: ''\n};\nfunction callOnChangeProps(action, state, newState) {\n  var props = action.props,\n    type = action.type;\n  var changes = {};\n  Object.keys(state).forEach(function (key) {\n    invokeOnChangeHandler(key, action, state, newState);\n    if (newState[key] !== state[key]) {\n      changes[key] = newState[key];\n    }\n  });\n  if (props.onStateChange && Object.keys(changes).length) {\n    props.onStateChange(_extends({\n      type: type\n    }, changes));\n  }\n}\nfunction invokeOnChangeHandler(key, action, state, newState) {\n  var props = action.props,\n    type = action.type;\n  var handler = \"on\" + capitalizeString(key) + \"Change\";\n  if (props[handler] && newState[key] !== undefined && newState[key] !== state[key]) {\n    props[handler](_extends({\n      type: type\n    }, newState));\n  }\n}\n\n/**\n * Default state reducer that returns the changes.\n *\n * @param {Object} s state.\n * @param {Object} a action with changes.\n * @returns {Object} changes.\n */\nfunction stateReducer(s, a) {\n  return a.changes;\n}\n\n/**\n * Debounced call for updating the a11y message.\n */\nvar updateA11yStatus = debounce(function (status, document) {\n  setStatus(status, document);\n}, 200);\n\n// istanbul ignore next\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\n// istanbul ignore next\nvar useElementIds = 'useId' in React // Avoid conditional useId call\n? function useElementIds(_ref) {\n  var id = _ref.id,\n    labelId = _ref.labelId,\n    menuId = _ref.menuId,\n    getItemId = _ref.getItemId,\n    toggleButtonId = _ref.toggleButtonId,\n    inputId = _ref.inputId;\n  // Avoid conditional useId call\n  var reactId = \"downshift-\" + React.useId();\n  if (!id) {\n    id = reactId;\n  }\n  var elementIdsRef = useRef({\n    labelId: labelId || id + \"-label\",\n    menuId: menuId || id + \"-menu\",\n    getItemId: getItemId || function (index) {\n      return id + \"-item-\" + index;\n    },\n    toggleButtonId: toggleButtonId || id + \"-toggle-button\",\n    inputId: inputId || id + \"-input\"\n  });\n  return elementIdsRef.current;\n} : function useElementIds(_ref2) {\n  var _ref2$id = _ref2.id,\n    id = _ref2$id === void 0 ? \"downshift-\" + generateId() : _ref2$id,\n    labelId = _ref2.labelId,\n    menuId = _ref2.menuId,\n    getItemId = _ref2.getItemId,\n    toggleButtonId = _ref2.toggleButtonId,\n    inputId = _ref2.inputId;\n  var elementIdsRef = useRef({\n    labelId: labelId || id + \"-label\",\n    menuId: menuId || id + \"-menu\",\n    getItemId: getItemId || function (index) {\n      return id + \"-item-\" + index;\n    },\n    toggleButtonId: toggleButtonId || id + \"-toggle-button\",\n    inputId: inputId || id + \"-input\"\n  });\n  return elementIdsRef.current;\n};\nfunction getItemAndIndex(itemProp, indexProp, items, errorMessage) {\n  var item, index;\n  if (itemProp === undefined) {\n    if (indexProp === undefined) {\n      throw new Error(errorMessage);\n    }\n    item = items[indexProp];\n    index = indexProp;\n  } else {\n    index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;\n    item = itemProp;\n  }\n  return [item, index];\n}\nfunction isAcceptedCharacterKey(key) {\n  return /^\\S{1}$/.test(key);\n}\nfunction capitalizeString(string) {\n  return \"\" + string.slice(0, 1).toUpperCase() + string.slice(1);\n}\nfunction useLatestRef(val) {\n  var ref = useRef(val);\n  // technically this is not \"concurrent mode safe\" because we're manipulating\n  // the value during render (so it's not idempotent). However, the places this\n  // hook is used is to support memoizing callbacks which will be called\n  // *during* render, so we need the latest values *during* render.\n  // If not for this, then we'd probably want to use useLayoutEffect instead.\n  ref.current = val;\n  return ref;\n}\n\n/**\n * Computes the controlled state using a the previous state, props,\n * two reducers, one from downshift and an optional one from the user.\n * Also calls the onChange handlers for state values that have changed.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} props The hook props, also passed to createInitialState.\n * @param {Function} createInitialState Function that returns the initial state.\n * @param {Function} isStateEqual Function that checks if a previous state is equal to the next.\n * @returns {Array} An array with the state and an action dispatcher.\n */\nfunction useEnhancedReducer(reducer, props, createInitialState, isStateEqual) {\n  var prevStateRef = useRef();\n  var actionRef = useRef();\n  var enhancedReducer = useCallback(function (state, action) {\n    actionRef.current = action;\n    state = getState(state, action.props);\n    var changes = reducer(state, action);\n    var newState = action.props.stateReducer(state, _extends({}, action, {\n      changes: changes\n    }));\n    return newState;\n  }, [reducer]);\n  var _useReducer = useReducer(enhancedReducer, props, createInitialState),\n    state = _useReducer[0],\n    dispatch = _useReducer[1];\n  var propsRef = useLatestRef(props);\n  var dispatchWithProps = useCallback(function (action) {\n    return dispatch(_extends({\n      props: propsRef.current\n    }, action));\n  }, [propsRef]);\n  var action = actionRef.current;\n  useEffect(function () {\n    var prevState = getState(prevStateRef.current, action == null ? void 0 : action.props);\n    var shouldCallOnChangeProps = action && prevStateRef.current && !isStateEqual(prevState, state);\n    if (shouldCallOnChangeProps) {\n      callOnChangeProps(action, prevState, state);\n    }\n    prevStateRef.current = state;\n  }, [state, action, isStateEqual]);\n  return [state, dispatchWithProps];\n}\n\n/**\n * Wraps the useEnhancedReducer and applies the controlled prop values before\n * returning the new state.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} props The hook props, also passed to createInitialState.\n * @param {Function} createInitialState Function that returns the initial state.\n * @param {Function} isStateEqual Function that checks if a previous state is equal to the next.\n * @returns {Array} An array with the state and an action dispatcher.\n */\nfunction useControlledReducer$1(reducer, props, createInitialState, isStateEqual) {\n  var _useEnhancedReducer = useEnhancedReducer(reducer, props, createInitialState, isStateEqual),\n    state = _useEnhancedReducer[0],\n    dispatch = _useEnhancedReducer[1];\n  return [getState(state, props), dispatch];\n}\nvar defaultProps$3 = {\n  itemToString: function itemToString(item) {\n    return item ? String(item) : '';\n  },\n  itemToKey: function itemToKey(item) {\n    return item;\n  },\n  stateReducer: stateReducer,\n  scrollIntoView: scrollIntoView,\n  environment: /* istanbul ignore next (ssr) */\n  typeof window === 'undefined' || false ? undefined : window\n};\nfunction getDefaultValue$1(props, propKey, defaultStateValues) {\n  if (defaultStateValues === void 0) {\n    defaultStateValues = dropdownDefaultStateValues;\n  }\n  var defaultValue = props[\"default\" + capitalizeString(propKey)];\n  if (defaultValue !== undefined) {\n    return defaultValue;\n  }\n  return defaultStateValues[propKey];\n}\nfunction getInitialValue$1(props, propKey, defaultStateValues) {\n  if (defaultStateValues === void 0) {\n    defaultStateValues = dropdownDefaultStateValues;\n  }\n  var value = props[propKey];\n  if (value !== undefined) {\n    return value;\n  }\n  var initialValue = props[\"initial\" + capitalizeString(propKey)];\n  if (initialValue !== undefined) {\n    return initialValue;\n  }\n  return getDefaultValue$1(props, propKey, defaultStateValues);\n}\nfunction getInitialState$2(props) {\n  var selectedItem = getInitialValue$1(props, 'selectedItem');\n  var isOpen = getInitialValue$1(props, 'isOpen');\n  var highlightedIndex = getInitialHighlightedIndex(props);\n  var inputValue = getInitialValue$1(props, 'inputValue');\n  return {\n    highlightedIndex: highlightedIndex < 0 && selectedItem && isOpen ? props.items.findIndex(function (item) {\n      return props.itemToKey(item) === props.itemToKey(selectedItem);\n    }) : highlightedIndex,\n    isOpen: isOpen,\n    selectedItem: selectedItem,\n    inputValue: inputValue\n  };\n}\nfunction getHighlightedIndexOnOpen(props, state, offset) {\n  var items = props.items,\n    initialHighlightedIndex = props.initialHighlightedIndex,\n    defaultHighlightedIndex = props.defaultHighlightedIndex,\n    isItemDisabled = props.isItemDisabled,\n    itemToKey = props.itemToKey;\n  var selectedItem = state.selectedItem,\n    highlightedIndex = state.highlightedIndex;\n  if (items.length === 0) {\n    return -1;\n  }\n\n  // initialHighlightedIndex will give value to highlightedIndex on initial state only.\n  if (initialHighlightedIndex !== undefined && highlightedIndex === initialHighlightedIndex && !isItemDisabled(items[initialHighlightedIndex], initialHighlightedIndex)) {\n    return initialHighlightedIndex;\n  }\n  if (defaultHighlightedIndex !== undefined && !isItemDisabled(items[defaultHighlightedIndex], defaultHighlightedIndex)) {\n    return defaultHighlightedIndex;\n  }\n  if (selectedItem) {\n    return items.findIndex(function (item) {\n      return itemToKey(selectedItem) === itemToKey(item);\n    });\n  }\n  if (offset < 0 && !isItemDisabled(items[items.length - 1], items.length - 1)) {\n    return items.length - 1;\n  }\n  if (offset > 0 && !isItemDisabled(items[0], 0)) {\n    return 0;\n  }\n  return -1;\n}\n/**\n * Tracks mouse and touch events, such as mouseDown, touchMove and touchEnd.\n *\n * @param {Window} environment The environment to add the event listeners to, for instance window.\n * @param {() => void} handleBlur The function that is called if mouseDown or touchEnd occured outside the downshiftElements.\n * @param {Array<{current: HTMLElement}>} downshiftElementsRefs The refs for the elements that should not trigger a blur action from mouseDown or touchEnd.\n * @returns {{isMouseDown: boolean, isTouchMove: boolean, isTouchEnd: boolean}} The mouse and touch events information, if any of are happening.\n */\nfunction useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs) {\n  var mouseAndTouchTrackersRef = useRef({\n    isMouseDown: false,\n    isTouchMove: false,\n    isTouchEnd: false\n  });\n  useEffect(function () {\n    if (!environment) {\n      return noop;\n    }\n    var downshiftElements = downshiftElementsRefs.map(function (ref) {\n      return ref.current;\n    });\n    function onMouseDown() {\n      mouseAndTouchTrackersRef.current.isTouchEnd = false; // reset this one.\n      mouseAndTouchTrackersRef.current.isMouseDown = true;\n    }\n    function onMouseUp(event) {\n      mouseAndTouchTrackersRef.current.isMouseDown = false;\n      if (!targetWithinDownshift(event.target, downshiftElements, environment)) {\n        handleBlur();\n      }\n    }\n    function onTouchStart() {\n      mouseAndTouchTrackersRef.current.isTouchEnd = false;\n      mouseAndTouchTrackersRef.current.isTouchMove = false;\n    }\n    function onTouchMove() {\n      mouseAndTouchTrackersRef.current.isTouchMove = true;\n    }\n    function onTouchEnd(event) {\n      mouseAndTouchTrackersRef.current.isTouchEnd = true;\n      if (!mouseAndTouchTrackersRef.current.isTouchMove && !targetWithinDownshift(event.target, downshiftElements, environment, false)) {\n        handleBlur();\n      }\n    }\n    environment.addEventListener('mousedown', onMouseDown);\n    environment.addEventListener('mouseup', onMouseUp);\n    environment.addEventListener('touchstart', onTouchStart);\n    environment.addEventListener('touchmove', onTouchMove);\n    environment.addEventListener('touchend', onTouchEnd);\n    return function cleanup() {\n      environment.removeEventListener('mousedown', onMouseDown);\n      environment.removeEventListener('mouseup', onMouseUp);\n      environment.removeEventListener('touchstart', onTouchStart);\n      environment.removeEventListener('touchmove', onTouchMove);\n      environment.removeEventListener('touchend', onTouchEnd);\n    };\n  }, [downshiftElementsRefs, environment, handleBlur]);\n  return mouseAndTouchTrackersRef.current;\n}\n\n/* istanbul ignore next */\n// eslint-disable-next-line import/no-mutable-exports\nvar useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {\n  return noop;\n};\n/**\n * Custom hook that checks if getter props are called correctly.\n *\n * @param  {...any} propKeys Getter prop names to be handled.\n * @returns {Function} Setter function called inside getter props to set call information.\n */\n/* istanbul ignore next */\nif (process.env.NODE_ENV !== 'production') {\n  useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {\n    for (var _len = arguments.length, propKeys = new Array(_len), _key = 0; _key < _len; _key++) {\n      propKeys[_key] = arguments[_key];\n    }\n    var getterPropsCalledRef = useRef(propKeys.reduce(function (acc, propKey) {\n      acc[propKey] = {};\n      return acc;\n    }, {}));\n    useEffect(function () {\n      Object.keys(getterPropsCalledRef.current).forEach(function (propKey) {\n        var propCallInfo = getterPropsCalledRef.current[propKey];\n        if (!Object.keys(propCallInfo).length) {\n          // eslint-disable-next-line no-console\n          console.error(\"downshift: You forgot to call the \" + propKey + \" getter function on your component / element.\");\n          return;\n        }\n        var suppressRefError = propCallInfo.suppressRefError,\n          refKey = propCallInfo.refKey,\n          elementRef = propCallInfo.elementRef;\n        if (suppressRefError) {\n          return;\n        }\n        if (!(elementRef != null && elementRef.current)) {\n          // eslint-disable-next-line no-console\n          console.error(\"downshift: The ref prop \\\"\" + refKey + \"\\\" from \" + propKey + \" was not applied correctly on your element.\");\n        }\n      });\n    }, []);\n    var setGetterPropCallInfo = useCallback(function (propKey, suppressRefError, refKey, elementRef) {\n      getterPropsCalledRef.current[propKey] = {\n        suppressRefError: suppressRefError,\n        refKey: refKey,\n        elementRef: elementRef\n      };\n    }, []);\n    return setGetterPropCallInfo;\n  };\n}\n\n/**\n * Adds an a11y aria live status message if getA11yStatusMessage is passed.\n * @param {(options: Object) => string} getA11yStatusMessage The function that builds the status message.\n * @param {Object} options The options to be passed to getA11yStatusMessage if called.\n * @param {Array<unknown>} dependencyArray The dependency array that triggers the status message setter via useEffect.\n * @param {{document: Document}} environment The environment object containing the document.\n */\nfunction useA11yMessageStatus(getA11yStatusMessage, options, dependencyArray, environment) {\n  if (environment === void 0) {\n    environment = {};\n  }\n  var document = environment.document;\n  var isInitialMount = useIsInitialMount();\n\n  // Adds an a11y aria live status message if getA11yStatusMessage is passed.\n  useEffect(function () {\n    if (!getA11yStatusMessage || isInitialMount || false || !document) {\n      return;\n    }\n    var status = getA11yStatusMessage(options);\n    updateA11yStatus(status, document);\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, dependencyArray);\n\n  // Cleanup the status message container.\n  useEffect(function () {\n    return function () {\n      updateA11yStatus.cancel();\n      cleanupStatusDiv(document);\n    };\n  }, [document]);\n}\nfunction useScrollIntoView(_ref3) {\n  var highlightedIndex = _ref3.highlightedIndex,\n    isOpen = _ref3.isOpen,\n    itemRefs = _ref3.itemRefs,\n    getItemNodeFromIndex = _ref3.getItemNodeFromIndex,\n    menuElement = _ref3.menuElement,\n    scrollIntoViewProp = _ref3.scrollIntoView;\n  // used not to scroll on highlight by mouse.\n  var shouldScrollRef = useRef(true);\n  // Scroll on highlighted item if change comes from keyboard.\n  useIsomorphicLayoutEffect(function () {\n    if (highlightedIndex < 0 || !isOpen || !Object.keys(itemRefs.current).length) {\n      return;\n    }\n    if (shouldScrollRef.current === false) {\n      shouldScrollRef.current = true;\n    } else {\n      scrollIntoViewProp(getItemNodeFromIndex(highlightedIndex), menuElement);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [highlightedIndex]);\n  return shouldScrollRef;\n}\n\n// eslint-disable-next-line import/no-mutable-exports\nvar useControlPropsValidator = noop;\n/* istanbul ignore next */\nif (process.env.NODE_ENV !== 'production') {\n  useControlPropsValidator = function useControlPropsValidator(_ref4) {\n    var props = _ref4.props,\n      state = _ref4.state;\n    // used for checking when props are moving from controlled to uncontrolled.\n    var prevPropsRef = useRef(props);\n    var isInitialMount = useIsInitialMount();\n    useEffect(function () {\n      if (isInitialMount) {\n        return;\n      }\n      validateControlledUnchanged(state, prevPropsRef.current, props);\n      prevPropsRef.current = props;\n    }, [state, props, isInitialMount]);\n  };\n}\n\n/**\n * Handles selection on Enter / Alt + ArrowUp. Closes the menu and resets the highlighted index, unless there is a highlighted.\n * In that case, selects the item and resets to defaults for open state and highlighted idex.\n * @param {Object} props The useCombobox props.\n * @param {number} highlightedIndex The index from the state.\n * @param {boolean} inputValue Also return the input value for state.\n * @returns The changes for the state.\n */\nfunction getChangesOnSelection(props, highlightedIndex, inputValue) {\n  var _props$items;\n  if (inputValue === void 0) {\n    inputValue = true;\n  }\n  var shouldSelect = ((_props$items = props.items) == null ? void 0 : _props$items.length) && highlightedIndex >= 0;\n  return _extends({\n    isOpen: false,\n    highlightedIndex: -1\n  }, shouldSelect && _extends({\n    selectedItem: props.items[highlightedIndex],\n    isOpen: getDefaultValue$1(props, 'isOpen'),\n    highlightedIndex: getDefaultValue$1(props, 'highlightedIndex')\n  }, inputValue && {\n    inputValue: props.itemToString(props.items[highlightedIndex])\n  }));\n}\n\n/**\n * Check if a state is equal for dropdowns, by comparing isOpen, inputValue, highlightedIndex and selected item.\n * Used by useSelect and useCombobox.\n *\n * @param {Object} prevState\n * @param {Object} newState\n * @returns {boolean} Wheather the states are deeply equal.\n */\nfunction isDropdownsStateEqual(prevState, newState) {\n  return prevState.isOpen === newState.isOpen && prevState.inputValue === newState.inputValue && prevState.highlightedIndex === newState.highlightedIndex && prevState.selectedItem === newState.selectedItem;\n}\n\n/**\n * Tracks if it's the first render.\n */\nfunction useIsInitialMount() {\n  var isInitialMountRef = React.useRef(true);\n  React.useEffect(function () {\n    isInitialMountRef.current = false;\n    return function () {\n      isInitialMountRef.current = true;\n    };\n  }, []);\n  return isInitialMountRef.current;\n}\n\n/**\n * Returns the new highlightedIndex based on the defaultHighlightedIndex prop, if it's not disabled.\n *\n * @param {Object} props Props from useCombobox or useSelect.\n * @returns {number} The highlighted index.\n */\nfunction getDefaultHighlightedIndex(props) {\n  var highlightedIndex = getDefaultValue$1(props, 'highlightedIndex');\n  if (highlightedIndex > -1 && props.isItemDisabled(props.items[highlightedIndex], highlightedIndex)) {\n    return -1;\n  }\n  return highlightedIndex;\n}\n\n/**\n * Returns the new highlightedIndex based on the initialHighlightedIndex prop, if not disabled.\n *\n * @param {Object} props Props from useCombobox or useSelect.\n * @returns {number} The highlighted index.\n */\nfunction getInitialHighlightedIndex(props) {\n  var highlightedIndex = getInitialValue$1(props, 'highlightedIndex');\n  if (highlightedIndex > -1 && props.isItemDisabled(props.items[highlightedIndex], highlightedIndex)) {\n    return -1;\n  }\n  return highlightedIndex;\n}\n\n// Shared between all exports.\nvar commonPropTypes = {\n  environment: PropTypes.shape({\n    addEventListener: PropTypes.func.isRequired,\n    removeEventListener: PropTypes.func.isRequired,\n    document: PropTypes.shape({\n      createElement: PropTypes.func.isRequired,\n      getElementById: PropTypes.func.isRequired,\n      activeElement: PropTypes.any.isRequired,\n      body: PropTypes.any.isRequired\n    }).isRequired,\n    Node: PropTypes.func.isRequired\n  }),\n  itemToString: PropTypes.func,\n  itemToKey: PropTypes.func,\n  stateReducer: PropTypes.func\n};\n\n// Shared between useSelect, useCombobox, Downshift.\nvar commonDropdownPropTypes = _extends({}, commonPropTypes, {\n  getA11yStatusMessage: PropTypes.func,\n  highlightedIndex: PropTypes.number,\n  defaultHighlightedIndex: PropTypes.number,\n  initialHighlightedIndex: PropTypes.number,\n  isOpen: PropTypes.bool,\n  defaultIsOpen: PropTypes.bool,\n  initialIsOpen: PropTypes.bool,\n  selectedItem: PropTypes.any,\n  initialSelectedItem: PropTypes.any,\n  defaultSelectedItem: PropTypes.any,\n  id: PropTypes.string,\n  labelId: PropTypes.string,\n  menuId: PropTypes.string,\n  getItemId: PropTypes.func,\n  toggleButtonId: PropTypes.string,\n  onSelectedItemChange: PropTypes.func,\n  onHighlightedIndexChange: PropTypes.func,\n  onStateChange: PropTypes.func,\n  onIsOpenChange: PropTypes.func,\n  scrollIntoView: PropTypes.func\n});\n\nfunction downshiftCommonReducer(state, action, stateChangeTypes) {\n  var type = action.type,\n    props = action.props;\n  var changes;\n  switch (type) {\n    case stateChangeTypes.ItemMouseMove:\n      changes = {\n        highlightedIndex: action.disabled ? -1 : action.index\n      };\n      break;\n    case stateChangeTypes.MenuMouseLeave:\n      changes = {\n        highlightedIndex: -1\n      };\n      break;\n    case stateChangeTypes.ToggleButtonClick:\n    case stateChangeTypes.FunctionToggleMenu:\n      changes = {\n        isOpen: !state.isOpen,\n        highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)\n      };\n      break;\n    case stateChangeTypes.FunctionOpenMenu:\n      changes = {\n        isOpen: true,\n        highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)\n      };\n      break;\n    case stateChangeTypes.FunctionCloseMenu:\n      changes = {\n        isOpen: false\n      };\n      break;\n    case stateChangeTypes.FunctionSetHighlightedIndex:\n      changes = {\n        highlightedIndex: props.isItemDisabled(props.items[action.highlightedIndex], action.highlightedIndex) ? -1 : action.highlightedIndex\n      };\n      break;\n    case stateChangeTypes.FunctionSetInputValue:\n      changes = {\n        inputValue: action.inputValue\n      };\n      break;\n    case stateChangeTypes.FunctionReset:\n      changes = {\n        highlightedIndex: getDefaultHighlightedIndex(props),\n        isOpen: getDefaultValue$1(props, 'isOpen'),\n        selectedItem: getDefaultValue$1(props, 'selectedItem'),\n        inputValue: getDefaultValue$1(props, 'inputValue')\n      };\n      break;\n    default:\n      throw new Error('Reducer called without proper action type.');\n  }\n  return _extends({}, state, changes);\n}\n/* eslint-enable complexity */\n\nfunction getItemIndexByCharacterKey(_a) {\n    var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, isItemDisabled = _a.isItemDisabled;\n    var lowerCasedKeysSoFar = keysSoFar.toLowerCase();\n    for (var index = 0; index < items.length; index++) {\n        // if we already have a search query in progress, we also consider the current highlighted item.\n        var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;\n        var item = items[offsetIndex];\n        if (item !== undefined &&\n            itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar) &&\n            !isItemDisabled(item, offsetIndex)) {\n            return offsetIndex;\n        }\n    }\n    return highlightedIndex;\n}\nvar propTypes$2 = __assign(__assign({}, commonDropdownPropTypes), { items: PropTypes.array.isRequired, isItemDisabled: PropTypes.func });\nvar defaultProps$2 = __assign(__assign({}, defaultProps$3), { isItemDisabled: function () {\n        return false;\n    } });\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes$2 = noop;\n/* istanbul ignore next */\nif (process.env.NODE_ENV !== 'production') {\n    validatePropTypes$2 = function (options, caller) {\n        PropTypes.checkPropTypes(propTypes$2, options, 'prop', caller.name);\n    };\n}\n\nvar ToggleButtonClick$1 = process.env.NODE_ENV !== \"production\" ? '__togglebutton_click__' : 0;\nvar ToggleButtonKeyDownArrowDown = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_arrow_down__' : 1;\nvar ToggleButtonKeyDownArrowUp = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_arrow_up__' : 2;\nvar ToggleButtonKeyDownCharacter = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_character__' : 3;\nvar ToggleButtonKeyDownEscape = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_escape__' : 4;\nvar ToggleButtonKeyDownHome = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_home__' : 5;\nvar ToggleButtonKeyDownEnd = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_end__' : 6;\nvar ToggleButtonKeyDownEnter = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_enter__' : 7;\nvar ToggleButtonKeyDownSpaceButton = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_space_button__' : 8;\nvar ToggleButtonKeyDownPageUp = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_page_up__' : 9;\nvar ToggleButtonKeyDownPageDown = process.env.NODE_ENV !== \"production\" ? '__togglebutton_keydown_page_down__' : 10;\nvar ToggleButtonBlur = process.env.NODE_ENV !== \"production\" ? '__togglebutton_blur__' : 11;\nvar MenuMouseLeave$1 = process.env.NODE_ENV !== \"production\" ? '__menu_mouse_leave__' : 12;\nvar ItemMouseMove$1 = process.env.NODE_ENV !== \"production\" ? '__item_mouse_move__' : 13;\nvar ItemClick$1 = process.env.NODE_ENV !== \"production\" ? '__item_click__' : 14;\nvar FunctionToggleMenu$1 = process.env.NODE_ENV !== \"production\" ? '__function_toggle_menu__' : 15;\nvar FunctionOpenMenu$1 = process.env.NODE_ENV !== \"production\" ? '__function_open_menu__' : 16;\nvar FunctionCloseMenu$1 = process.env.NODE_ENV !== \"production\" ? '__function_close_menu__' : 17;\nvar FunctionSetHighlightedIndex$1 = process.env.NODE_ENV !== \"production\" ? '__function_set_highlighted_index__' : 18;\nvar FunctionSelectItem$1 = process.env.NODE_ENV !== \"production\" ? '__function_select_item__' : 19;\nvar FunctionSetInputValue$1 = process.env.NODE_ENV !== \"production\" ? '__function_set_input_value__' : 20;\nvar FunctionReset$2 = process.env.NODE_ENV !== \"production\" ? '__function_reset__' : 21;\n\nvar stateChangeTypes$2 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  FunctionCloseMenu: FunctionCloseMenu$1,\n  FunctionOpenMenu: FunctionOpenMenu$1,\n  FunctionReset: FunctionReset$2,\n  FunctionSelectItem: FunctionSelectItem$1,\n  FunctionSetHighlightedIndex: FunctionSetHighlightedIndex$1,\n  FunctionSetInputValue: FunctionSetInputValue$1,\n  FunctionToggleMenu: FunctionToggleMenu$1,\n  ItemClick: ItemClick$1,\n  ItemMouseMove: ItemMouseMove$1,\n  MenuMouseLeave: MenuMouseLeave$1,\n  ToggleButtonBlur: ToggleButtonBlur,\n  ToggleButtonClick: ToggleButtonClick$1,\n  ToggleButtonKeyDownArrowDown: ToggleButtonKeyDownArrowDown,\n  ToggleButtonKeyDownArrowUp: ToggleButtonKeyDownArrowUp,\n  ToggleButtonKeyDownCharacter: ToggleButtonKeyDownCharacter,\n  ToggleButtonKeyDownEnd: ToggleButtonKeyDownEnd,\n  ToggleButtonKeyDownEnter: ToggleButtonKeyDownEnter,\n  ToggleButtonKeyDownEscape: ToggleButtonKeyDownEscape,\n  ToggleButtonKeyDownHome: ToggleButtonKeyDownHome,\n  ToggleButtonKeyDownPageDown: ToggleButtonKeyDownPageDown,\n  ToggleButtonKeyDownPageUp: ToggleButtonKeyDownPageUp,\n  ToggleButtonKeyDownSpaceButton: ToggleButtonKeyDownSpaceButton\n});\n\n/* eslint-disable complexity */\nfunction downshiftSelectReducer(state, action) {\n  var _props$items;\n  var type = action.type,\n    props = action.props,\n    altKey = action.altKey;\n  var changes;\n  switch (type) {\n    case ItemClick$1:\n      changes = {\n        isOpen: getDefaultValue$1(props, 'isOpen'),\n        highlightedIndex: getDefaultHighlightedIndex(props),\n        selectedItem: props.items[action.index]\n      };\n      break;\n    case ToggleButtonKeyDownCharacter:\n      {\n        var lowercasedKey = action.key;\n        var inputValue = \"\" + state.inputValue + lowercasedKey;\n        var prevHighlightedIndex = !state.isOpen && state.selectedItem ? props.items.findIndex(function (item) {\n          return props.itemToKey(item) === props.itemToKey(state.selectedItem);\n        }) : state.highlightedIndex;\n        var highlightedIndex = getItemIndexByCharacterKey({\n          keysSoFar: inputValue,\n          highlightedIndex: prevHighlightedIndex,\n          items: props.items,\n          itemToString: props.itemToString,\n          isItemDisabled: props.isItemDisabled\n        });\n        changes = {\n          inputValue: inputValue,\n          highlightedIndex: highlightedIndex,\n          isOpen: true\n        };\n      }\n      break;\n    case ToggleButtonKeyDownArrowDown:\n      {\n        var _highlightedIndex = state.isOpen ? getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled) : altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1);\n        changes = {\n          highlightedIndex: _highlightedIndex,\n          isOpen: true\n        };\n      }\n      break;\n    case ToggleButtonKeyDownArrowUp:\n      if (state.isOpen && altKey) {\n        changes = getChangesOnSelection(props, state.highlightedIndex, false);\n      } else {\n        var _highlightedIndex2 = state.isOpen ? getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled) : getHighlightedIndexOnOpen(props, state, -1);\n        changes = {\n          highlightedIndex: _highlightedIndex2,\n          isOpen: true\n        };\n      }\n      break;\n    // only triggered when menu is open.\n    case ToggleButtonKeyDownEnter:\n    case ToggleButtonKeyDownSpaceButton:\n      changes = getChangesOnSelection(props, state.highlightedIndex, false);\n      break;\n    case ToggleButtonKeyDownHome:\n      changes = {\n        highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled),\n        isOpen: true\n      };\n      break;\n    case ToggleButtonKeyDownEnd:\n      changes = {\n        highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled),\n        isOpen: true\n      };\n      break;\n    case ToggleButtonKeyDownPageUp:\n      changes = {\n        highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled)\n      };\n      break;\n    case ToggleButtonKeyDownPageDown:\n      changes = {\n        highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled)\n      };\n      break;\n    case ToggleButtonKeyDownEscape:\n      changes = {\n        isOpen: false,\n        highlightedIndex: -1\n      };\n      break;\n    case ToggleButtonBlur:\n      changes = _extends({\n        isOpen: false,\n        highlightedIndex: -1\n      }, state.highlightedIndex >= 0 && ((_props$items = props.items) == null ? void 0 : _props$items.length) && {\n        selectedItem: props.items[state.highlightedIndex]\n      });\n      break;\n    case FunctionSelectItem$1:\n      changes = {\n        selectedItem: action.selectedItem\n      };\n      break;\n    default:\n      return downshiftCommonReducer(state, action, stateChangeTypes$2);\n  }\n  return _extends({}, state, changes);\n}\n/* eslint-enable complexity */\n\nvar _excluded$2 = [\"onClick\"],\n  _excluded2$2 = [\"onMouseLeave\", \"refKey\", \"ref\"],\n  _excluded3$1 = [\"onBlur\", \"onClick\", \"onPress\", \"onKeyDown\", \"refKey\", \"ref\"],\n  _excluded4$1 = [\"item\", \"index\", \"onMouseMove\", \"onClick\", \"onMouseDown\", \"onPress\", \"refKey\", \"disabled\", \"ref\"];\nuseSelect.stateChangeTypes = stateChangeTypes$2;\nfunction useSelect(userProps) {\n  if (userProps === void 0) {\n    userProps = {};\n  }\n  validatePropTypes$2(userProps, useSelect);\n  // Props defaults and destructuring.\n  var props = _extends({}, defaultProps$2, userProps);\n  var scrollIntoView = props.scrollIntoView,\n    environment = props.environment,\n    getA11yStatusMessage = props.getA11yStatusMessage;\n  // Initial state depending on controlled props.\n  var _useControlledReducer = useControlledReducer$1(downshiftSelectReducer, props, getInitialState$2, isDropdownsStateEqual),\n    state = _useControlledReducer[0],\n    dispatch = _useControlledReducer[1];\n  var isOpen = state.isOpen,\n    highlightedIndex = state.highlightedIndex,\n    selectedItem = state.selectedItem,\n    inputValue = state.inputValue;\n  // Element efs.\n  var toggleButtonRef = useRef(null);\n  var menuRef = useRef(null);\n  var itemRefs = useRef({});\n\n  // used to keep the inputValue clearTimeout object between renders.\n  var clearTimeoutRef = useRef(null);\n  // prevent id re-generation between renders.\n  var elementIds = useElementIds(props);\n  // utility callback to get item element.\n  var latest = useLatestRef({\n    state: state,\n    props: props\n  });\n\n  // Some utils.\n  var getItemNodeFromIndex = useCallback(function (index) {\n    return itemRefs.current[elementIds.getItemId(index)];\n  }, [elementIds]);\n\n  // Effects.\n  // Adds an a11y aria live status message if getA11yStatusMessage is passed.\n  useA11yMessageStatus(getA11yStatusMessage, state, [isOpen, highlightedIndex, selectedItem, inputValue], environment);\n  // Scroll on highlighted item if change comes from keyboard.\n  var shouldScrollRef = useScrollIntoView({\n    menuElement: menuRef.current,\n    highlightedIndex: highlightedIndex,\n    isOpen: isOpen,\n    itemRefs: itemRefs,\n    scrollIntoView: scrollIntoView,\n    getItemNodeFromIndex: getItemNodeFromIndex\n  });\n  // Sets cleanup for the keysSoFar callback, debounded after 500ms.\n  useEffect(function () {\n    // init the clean function here as we need access to dispatch.\n    clearTimeoutRef.current = debounce(function (outerDispatch) {\n      outerDispatch({\n        type: FunctionSetInputValue$1,\n        inputValue: ''\n      });\n    }, 500);\n\n    // Cancel any pending debounced calls on mount\n    return function () {\n      clearTimeoutRef.current.cancel();\n    };\n  }, []);\n  // Invokes the keysSoFar callback set up above.\n  useEffect(function () {\n    if (!inputValue) {\n      return;\n    }\n    clearTimeoutRef.current(dispatch);\n  }, [dispatch, inputValue]);\n  useControlPropsValidator({\n    props: props,\n    state: state\n  });\n  // Focus the toggle button on first render if required.\n  useEffect(function () {\n    var focusOnOpen = getInitialValue$1(props, 'isOpen');\n    if (focusOnOpen && toggleButtonRef.current) {\n      toggleButtonRef.current.focus();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, useCallback(function handleBlur() {\n    if (latest.current.state.isOpen) {\n      dispatch({\n        type: ToggleButtonBlur\n      });\n    }\n  }, [dispatch, latest]), useMemo(function () {\n    return [menuRef, toggleButtonRef];\n  }, [menuRef.current, toggleButtonRef.current]));\n  var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');\n  // Reset itemRefs on close.\n  useEffect(function () {\n    if (!isOpen) {\n      itemRefs.current = {};\n    }\n  }, [isOpen]);\n\n  // Event handler functions.\n  var toggleButtonKeyDownHandlers = useMemo(function () {\n    return {\n      ArrowDown: function ArrowDown(event) {\n        event.preventDefault();\n        dispatch({\n          type: ToggleButtonKeyDownArrowDown,\n          altKey: event.altKey\n        });\n      },\n      ArrowUp: function ArrowUp(event) {\n        event.preventDefault();\n        dispatch({\n          type: ToggleButtonKeyDownArrowUp,\n          altKey: event.altKey\n        });\n      },\n      Home: function Home(event) {\n        event.preventDefault();\n        dispatch({\n          type: ToggleButtonKeyDownHome\n        });\n      },\n      End: function End(event) {\n        event.preventDefault();\n        dispatch({\n          type: ToggleButtonKeyDownEnd\n        });\n      },\n      Escape: function Escape() {\n        if (latest.current.state.isOpen) {\n          dispatch({\n            type: ToggleButtonKeyDownEscape\n          });\n        }\n      },\n      Enter: function Enter(event) {\n        event.preventDefault();\n        dispatch({\n          type: latest.current.state.isOpen ? ToggleButtonKeyDownEnter : ToggleButtonClick$1\n        });\n      },\n      PageUp: function PageUp(event) {\n        if (latest.current.state.isOpen) {\n          event.preventDefault();\n          dispatch({\n            type: ToggleButtonKeyDownPageUp\n          });\n        }\n      },\n      PageDown: function PageDown(event) {\n        if (latest.current.state.isOpen) {\n          event.preventDefault();\n          dispatch({\n            type: ToggleButtonKeyDownPageDown\n          });\n        }\n      },\n      ' ': function _(event) {\n        event.preventDefault();\n        var currentState = latest.current.state;\n        if (!currentState.isOpen) {\n          dispatch({\n            type: ToggleButtonClick$1\n          });\n          return;\n        }\n        if (currentState.inputValue) {\n          dispatch({\n            type: ToggleButtonKeyDownCharacter,\n            key: ' '\n          });\n        } else {\n          dispatch({\n            type: ToggleButtonKeyDownSpaceButton\n          });\n        }\n      }\n    };\n  }, [dispatch, latest]);\n\n  // Action functions.\n  var toggleMenu = useCallback(function () {\n    dispatch({\n      type: FunctionToggleMenu$1\n    });\n  }, [dispatch]);\n  var closeMenu = useCallback(function () {\n    dispatch({\n      type: FunctionCloseMenu$1\n    });\n  }, [dispatch]);\n  var openMenu = useCallback(function () {\n    dispatch({\n      type: FunctionOpenMenu$1\n    });\n  }, [dispatch]);\n  var setHighlightedIndex = useCallback(function (newHighlightedIndex) {\n    dispatch({\n      type: FunctionSetHighlightedIndex$1,\n      highlightedIndex: newHighlightedIndex\n    });\n  }, [dispatch]);\n  var selectItem = useCallback(function (newSelectedItem) {\n    dispatch({\n      type: FunctionSelectItem$1,\n      selectedItem: newSelectedItem\n    });\n  }, [dispatch]);\n  var reset = useCallback(function () {\n    dispatch({\n      type: FunctionReset$2\n    });\n  }, [dispatch]);\n  var setInputValue = useCallback(function (newInputValue) {\n    dispatch({\n      type: FunctionSetInputValue$1,\n      inputValue: newInputValue\n    });\n  }, [dispatch]);\n  // Getter functions.\n  var getLabelProps = useCallback(function (_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n      onClick = _ref.onClick,\n      labelProps = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n    var labelHandleClick = function labelHandleClick() {\n      var _toggleButtonRef$curr;\n      (_toggleButtonRef$curr = toggleButtonRef.current) == null || _toggleButtonRef$curr.focus();\n    };\n    return _extends({\n      id: elementIds.labelId,\n      htmlFor: elementIds.toggleButtonId,\n      onClick: callAllEventHandlers(onClick, labelHandleClick)\n    }, labelProps);\n  }, [elementIds]);\n  var getMenuProps = useCallback(function (_temp2, _temp3) {\n    var _extends2;\n    var _ref2 = _temp2 === void 0 ? {} : _temp2,\n      onMouseLeave = _ref2.onMouseLeave,\n      _ref2$refKey = _ref2.refKey,\n      refKey = _ref2$refKey === void 0 ? 'ref' : _ref2$refKey,\n      ref = _ref2.ref,\n      rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$2);\n    var _ref3 = _temp3 === void 0 ? {} : _temp3,\n      _ref3$suppressRefErro = _ref3.suppressRefError,\n      suppressRefError = _ref3$suppressRefErro === void 0 ? false : _ref3$suppressRefErro;\n    var menuHandleMouseLeave = function menuHandleMouseLeave() {\n      dispatch({\n        type: MenuMouseLeave$1\n      });\n    };\n    setGetterPropCallInfo('getMenuProps', suppressRefError, refKey, menuRef);\n    return _extends((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function (menuNode) {\n      menuRef.current = menuNode;\n    }), _extends2.id = elementIds.menuId, _extends2.role = 'listbox', _extends2['aria-labelledby'] = rest && rest['aria-label'] ? undefined : \"\" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), _extends2), rest);\n  }, [dispatch, setGetterPropCallInfo, elementIds]);\n  var getToggleButtonProps = useCallback(function (_temp4, _temp5) {\n    var _extends3;\n    var _ref4 = _temp4 === void 0 ? {} : _temp4,\n      onBlur = _ref4.onBlur,\n      onClick = _ref4.onClick;\n      _ref4.onPress;\n      var onKeyDown = _ref4.onKeyDown,\n      _ref4$refKey = _ref4.refKey,\n      refKey = _ref4$refKey === void 0 ? 'ref' : _ref4$refKey,\n      ref = _ref4.ref,\n      rest = _objectWithoutPropertiesLoose(_ref4, _excluded3$1);\n    var _ref5 = _temp5 === void 0 ? {} : _temp5,\n      _ref5$suppressRefErro = _ref5.suppressRefError,\n      suppressRefError = _ref5$suppressRefErro === void 0 ? false : _ref5$suppressRefErro;\n    var latestState = latest.current.state;\n    var toggleButtonHandleClick = function toggleButtonHandleClick() {\n      dispatch({\n        type: ToggleButtonClick$1\n      });\n    };\n    var toggleButtonHandleBlur = function toggleButtonHandleBlur() {\n      if (latestState.isOpen && !mouseAndTouchTrackers.isMouseDown) {\n        dispatch({\n          type: ToggleButtonBlur\n        });\n      }\n    };\n    var toggleButtonHandleKeyDown = function toggleButtonHandleKeyDown(event) {\n      var key = normalizeArrowKey(event);\n      if (key && toggleButtonKeyDownHandlers[key]) {\n        toggleButtonKeyDownHandlers[key](event);\n      } else if (isAcceptedCharacterKey(key)) {\n        dispatch({\n          type: ToggleButtonKeyDownCharacter,\n          key: key\n        });\n      }\n    };\n    var toggleProps = _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (toggleButtonNode) {\n      toggleButtonRef.current = toggleButtonNode;\n    }), _extends3['aria-activedescendant'] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : '', _extends3['aria-controls'] = elementIds.menuId, _extends3['aria-expanded'] = latest.current.state.isOpen, _extends3['aria-haspopup'] = 'listbox', _extends3['aria-labelledby'] = rest && rest['aria-label'] ? undefined : \"\" + elementIds.labelId, _extends3.id = elementIds.toggleButtonId, _extends3.role = 'combobox', _extends3.tabIndex = 0, _extends3.onBlur = callAllEventHandlers(onBlur, toggleButtonHandleBlur), _extends3), rest);\n    if (!rest.disabled) {\n      /* istanbul ignore if (react-native) */\n      {\n        toggleProps.onClick = callAllEventHandlers(onClick, toggleButtonHandleClick);\n        toggleProps.onKeyDown = callAllEventHandlers(onKeyDown, toggleButtonHandleKeyDown);\n      }\n    }\n    setGetterPropCallInfo('getToggleButtonProps', suppressRefError, refKey, toggleButtonRef);\n    return toggleProps;\n  }, [dispatch, elementIds, latest, mouseAndTouchTrackers, setGetterPropCallInfo, toggleButtonKeyDownHandlers]);\n  var getItemProps = useCallback(function (_temp6) {\n    var _extends4;\n    var _ref6 = _temp6 === void 0 ? {} : _temp6,\n      itemProp = _ref6.item,\n      indexProp = _ref6.index,\n      onMouseMove = _ref6.onMouseMove,\n      onClick = _ref6.onClick,\n      onMouseDown = _ref6.onMouseDown;\n      _ref6.onPress;\n      var _ref6$refKey = _ref6.refKey,\n      refKey = _ref6$refKey === void 0 ? 'ref' : _ref6$refKey,\n      disabledProp = _ref6.disabled,\n      ref = _ref6.ref,\n      rest = _objectWithoutPropertiesLoose(_ref6, _excluded4$1);\n    if (disabledProp !== undefined) {\n      console.warn('Passing \"disabled\" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useSelect.');\n    }\n    var _latest$current = latest.current,\n      latestState = _latest$current.state,\n      latestProps = _latest$current.props;\n    var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),\n      item = _getItemAndIndex[0],\n      index = _getItemAndIndex[1];\n    var disabled = latestProps.isItemDisabled(item, index);\n    var itemHandleMouseMove = function itemHandleMouseMove() {\n      if (mouseAndTouchTrackers.isTouchEnd || index === latestState.highlightedIndex) {\n        return;\n      }\n      shouldScrollRef.current = false;\n      dispatch({\n        type: ItemMouseMove$1,\n        index: index,\n        disabled: disabled\n      });\n    };\n    var itemHandleClick = function itemHandleClick() {\n      dispatch({\n        type: ItemClick$1,\n        index: index\n      });\n    };\n    var itemHandleMouseDown = function itemHandleMouseDown(e) {\n      return e.preventDefault();\n    }; // keep focus on the toggle after item click select.\n\n    var itemProps = _extends((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function (itemNode) {\n      if (itemNode) {\n        itemRefs.current[elementIds.getItemId(index)] = itemNode;\n      }\n    }), _extends4['aria-disabled'] = disabled, _extends4['aria-selected'] = item === latestState.selectedItem, _extends4.id = elementIds.getItemId(index), _extends4.role = 'option', _extends4), rest);\n    if (!disabled) {\n      /* istanbul ignore next (react-native) */\n      {\n        itemProps.onClick = callAllEventHandlers(onClick, itemHandleClick);\n      }\n    }\n    itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);\n    itemProps.onMouseDown = callAllEventHandlers(onMouseDown, itemHandleMouseDown);\n    return itemProps;\n  }, [latest, elementIds, mouseAndTouchTrackers, shouldScrollRef, dispatch]);\n  return {\n    // prop getters.\n    getToggleButtonProps: getToggleButtonProps,\n    getLabelProps: getLabelProps,\n    getMenuProps: getMenuProps,\n    getItemProps: getItemProps,\n    // actions.\n    toggleMenu: toggleMenu,\n    openMenu: openMenu,\n    closeMenu: closeMenu,\n    setHighlightedIndex: setHighlightedIndex,\n    selectItem: selectItem,\n    reset: reset,\n    setInputValue: setInputValue,\n    // state.\n    highlightedIndex: highlightedIndex,\n    isOpen: isOpen,\n    selectedItem: selectedItem,\n    inputValue: inputValue\n  };\n}\n\nvar InputKeyDownArrowDown = process.env.NODE_ENV !== \"production\" ? '__input_keydown_arrow_down__' : 0;\nvar InputKeyDownArrowUp = process.env.NODE_ENV !== \"production\" ? '__input_keydown_arrow_up__' : 1;\nvar InputKeyDownEscape = process.env.NODE_ENV !== \"production\" ? '__input_keydown_escape__' : 2;\nvar InputKeyDownHome = process.env.NODE_ENV !== \"production\" ? '__input_keydown_home__' : 3;\nvar InputKeyDownEnd = process.env.NODE_ENV !== \"production\" ? '__input_keydown_end__' : 4;\nvar InputKeyDownPageUp = process.env.NODE_ENV !== \"production\" ? '__input_keydown_page_up__' : 5;\nvar InputKeyDownPageDown = process.env.NODE_ENV !== \"production\" ? '__input_keydown_page_down__' : 6;\nvar InputKeyDownEnter = process.env.NODE_ENV !== \"production\" ? '__input_keydown_enter__' : 7;\nvar InputChange = process.env.NODE_ENV !== \"production\" ? '__input_change__' : 8;\nvar InputBlur = process.env.NODE_ENV !== \"production\" ? '__input_blur__' : 9;\nvar InputClick = process.env.NODE_ENV !== \"production\" ? '__input_click__' : 10;\nvar MenuMouseLeave = process.env.NODE_ENV !== \"production\" ? '__menu_mouse_leave__' : 11;\nvar ItemMouseMove = process.env.NODE_ENV !== \"production\" ? '__item_mouse_move__' : 12;\nvar ItemClick = process.env.NODE_ENV !== \"production\" ? '__item_click__' : 13;\nvar ToggleButtonClick = process.env.NODE_ENV !== \"production\" ? '__togglebutton_click__' : 14;\nvar FunctionToggleMenu = process.env.NODE_ENV !== \"production\" ? '__function_toggle_menu__' : 15;\nvar FunctionOpenMenu = process.env.NODE_ENV !== \"production\" ? '__function_open_menu__' : 16;\nvar FunctionCloseMenu = process.env.NODE_ENV !== \"production\" ? '__function_close_menu__' : 17;\nvar FunctionSetHighlightedIndex = process.env.NODE_ENV !== \"production\" ? '__function_set_highlighted_index__' : 18;\nvar FunctionSelectItem = process.env.NODE_ENV !== \"production\" ? '__function_select_item__' : 19;\nvar FunctionSetInputValue = process.env.NODE_ENV !== \"production\" ? '__function_set_input_value__' : 20;\nvar FunctionReset$1 = process.env.NODE_ENV !== \"production\" ? '__function_reset__' : 21;\nvar ControlledPropUpdatedSelectedItem = process.env.NODE_ENV !== \"production\" ? '__controlled_prop_updated_selected_item__' : 22;\n\nvar stateChangeTypes$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ControlledPropUpdatedSelectedItem: ControlledPropUpdatedSelectedItem,\n  FunctionCloseMenu: FunctionCloseMenu,\n  FunctionOpenMenu: FunctionOpenMenu,\n  FunctionReset: FunctionReset$1,\n  FunctionSelectItem: FunctionSelectItem,\n  FunctionSetHighlightedIndex: FunctionSetHighlightedIndex,\n  FunctionSetInputValue: FunctionSetInputValue,\n  FunctionToggleMenu: FunctionToggleMenu,\n  InputBlur: InputBlur,\n  InputChange: InputChange,\n  InputClick: InputClick,\n  InputKeyDownArrowDown: InputKeyDownArrowDown,\n  InputKeyDownArrowUp: InputKeyDownArrowUp,\n  InputKeyDownEnd: InputKeyDownEnd,\n  InputKeyDownEnter: InputKeyDownEnter,\n  InputKeyDownEscape: InputKeyDownEscape,\n  InputKeyDownHome: InputKeyDownHome,\n  InputKeyDownPageDown: InputKeyDownPageDown,\n  InputKeyDownPageUp: InputKeyDownPageUp,\n  ItemClick: ItemClick,\n  ItemMouseMove: ItemMouseMove,\n  MenuMouseLeave: MenuMouseLeave,\n  ToggleButtonClick: ToggleButtonClick\n});\n\nfunction getInitialState$1(props) {\n  var initialState = getInitialState$2(props);\n  var selectedItem = initialState.selectedItem;\n  var inputValue = initialState.inputValue;\n  if (inputValue === '' && selectedItem && props.defaultInputValue === undefined && props.initialInputValue === undefined && props.inputValue === undefined) {\n    inputValue = props.itemToString(selectedItem);\n  }\n  return _extends({}, initialState, {\n    inputValue: inputValue\n  });\n}\nvar propTypes$1 = _extends({}, commonDropdownPropTypes, {\n  items: PropTypes.array.isRequired,\n  isItemDisabled: PropTypes.func,\n  inputValue: PropTypes.string,\n  defaultInputValue: PropTypes.string,\n  initialInputValue: PropTypes.string,\n  inputId: PropTypes.string,\n  onInputValueChange: PropTypes.func\n});\n\n/**\n * The useCombobox version of useControlledReducer, which also\n * checks if the controlled prop selectedItem changed between\n * renders. If so, it will also update inputValue with its\n * string equivalent. It uses the common useEnhancedReducer to\n * compute the rest of the state.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} props The hook props, also passed to createInitialState.\n * @param {Function} createInitialState Function that returns the initial state.\n * @param {Function} isStateEqual Function that checks if a previous state is equal to the next.\n * @returns {Array} An array with the state and an action dispatcher.\n */\nfunction useControlledReducer(reducer, props, createInitialState, isStateEqual) {\n  var previousSelectedItemRef = useRef();\n  var _useEnhancedReducer = useEnhancedReducer(reducer, props, createInitialState, isStateEqual),\n    state = _useEnhancedReducer[0],\n    dispatch = _useEnhancedReducer[1];\n  var isInitialMount = useIsInitialMount();\n  useEffect(function () {\n    if (!isControlledProp(props, 'selectedItem')) {\n      return;\n    }\n    if (!isInitialMount // on first mount we already have the proper inputValue for a initial selected item.\n    ) {\n      var shouldCallDispatch = props.itemToKey(props.selectedItem) !== props.itemToKey(previousSelectedItemRef.current);\n      if (shouldCallDispatch) {\n        dispatch({\n          type: ControlledPropUpdatedSelectedItem,\n          inputValue: props.itemToString(props.selectedItem)\n        });\n      }\n    }\n    previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [state.selectedItem, props.selectedItem]);\n  return [getState(state, props), dispatch];\n}\n\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes$1 = noop;\n/* istanbul ignore next */\nif (process.env.NODE_ENV !== 'production') {\n  validatePropTypes$1 = function validatePropTypes(options, caller) {\n    PropTypes.checkPropTypes(propTypes$1, options, 'prop', caller.name);\n  };\n}\nvar defaultProps$1 = _extends({}, defaultProps$3, {\n  isItemDisabled: function isItemDisabled() {\n    return false;\n  }\n});\n\n/* eslint-disable complexity */\nfunction downshiftUseComboboxReducer(state, action) {\n  var _props$items;\n  var type = action.type,\n    props = action.props,\n    altKey = action.altKey;\n  var changes;\n  switch (type) {\n    case ItemClick:\n      changes = {\n        isOpen: getDefaultValue$1(props, 'isOpen'),\n        highlightedIndex: getDefaultHighlightedIndex(props),\n        selectedItem: props.items[action.index],\n        inputValue: props.itemToString(props.items[action.index])\n      };\n      break;\n    case InputKeyDownArrowDown:\n      if (state.isOpen) {\n        changes = {\n          highlightedIndex: getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled, true)\n        };\n      } else {\n        changes = {\n          highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1),\n          isOpen: props.items.length >= 0\n        };\n      }\n      break;\n    case InputKeyDownArrowUp:\n      if (state.isOpen) {\n        if (altKey) {\n          changes = getChangesOnSelection(props, state.highlightedIndex);\n        } else {\n          changes = {\n            highlightedIndex: getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled, true)\n          };\n        }\n      } else {\n        changes = {\n          highlightedIndex: getHighlightedIndexOnOpen(props, state, -1),\n          isOpen: props.items.length >= 0\n        };\n      }\n      break;\n    case InputKeyDownEnter:\n      changes = getChangesOnSelection(props, state.highlightedIndex);\n      break;\n    case InputKeyDownEscape:\n      changes = _extends({\n        isOpen: false,\n        highlightedIndex: -1\n      }, !state.isOpen && {\n        selectedItem: null,\n        inputValue: ''\n      });\n      break;\n    case InputKeyDownPageUp:\n      changes = {\n        highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled, true)\n      };\n      break;\n    case InputKeyDownPageDown:\n      changes = {\n        highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled, true)\n      };\n      break;\n    case InputKeyDownHome:\n      changes = {\n        highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled)\n      };\n      break;\n    case InputKeyDownEnd:\n      changes = {\n        highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled)\n      };\n      break;\n    case InputBlur:\n      changes = _extends({\n        isOpen: false,\n        highlightedIndex: -1\n      }, state.highlightedIndex >= 0 && ((_props$items = props.items) == null ? void 0 : _props$items.length) && action.selectItem && {\n        selectedItem: props.items[state.highlightedIndex],\n        inputValue: props.itemToString(props.items[state.highlightedIndex])\n      });\n      break;\n    case InputChange:\n      changes = {\n        isOpen: true,\n        highlightedIndex: getDefaultHighlightedIndex(props),\n        inputValue: action.inputValue\n      };\n      break;\n    case InputClick:\n      changes = {\n        isOpen: !state.isOpen,\n        highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)\n      };\n      break;\n    case FunctionSelectItem:\n      changes = {\n        selectedItem: action.selectedItem,\n        inputValue: props.itemToString(action.selectedItem)\n      };\n      break;\n    case ControlledPropUpdatedSelectedItem:\n      changes = {\n        inputValue: action.inputValue\n      };\n      break;\n    default:\n      return downshiftCommonReducer(state, action, stateChangeTypes$1);\n  }\n  return _extends({}, state, changes);\n}\n/* eslint-enable complexity */\n\nvar _excluded$1 = [\"onMouseLeave\", \"refKey\", \"ref\"],\n  _excluded2$1 = [\"item\", \"index\", \"refKey\", \"ref\", \"onMouseMove\", \"onMouseDown\", \"onClick\", \"onPress\", \"disabled\"],\n  _excluded3 = [\"onClick\", \"onPress\", \"refKey\", \"ref\"],\n  _excluded4 = [\"onKeyDown\", \"onChange\", \"onInput\", \"onBlur\", \"onChangeText\", \"onClick\", \"refKey\", \"ref\"];\nuseCombobox.stateChangeTypes = stateChangeTypes$1;\nfunction useCombobox(userProps) {\n  if (userProps === void 0) {\n    userProps = {};\n  }\n  validatePropTypes$1(userProps, useCombobox);\n  // Props defaults and destructuring.\n  var props = _extends({}, defaultProps$1, userProps);\n  var items = props.items,\n    scrollIntoView = props.scrollIntoView,\n    environment = props.environment,\n    getA11yStatusMessage = props.getA11yStatusMessage;\n  // Initial state depending on controlled props.\n  var _useControlledReducer = useControlledReducer(downshiftUseComboboxReducer, props, getInitialState$1, isDropdownsStateEqual),\n    state = _useControlledReducer[0],\n    dispatch = _useControlledReducer[1];\n  var isOpen = state.isOpen,\n    highlightedIndex = state.highlightedIndex,\n    selectedItem = state.selectedItem,\n    inputValue = state.inputValue;\n\n  // Element refs.\n  var menuRef = useRef(null);\n  var itemRefs = useRef({});\n  var inputRef = useRef(null);\n  var toggleButtonRef = useRef(null);\n  var isInitialMount = useIsInitialMount();\n\n  // prevent id re-generation between renders.\n  var elementIds = useElementIds(props);\n  // used to keep track of how many items we had on previous cycle.\n  var previousResultCountRef = useRef();\n  // utility callback to get item element.\n  var latest = useLatestRef({\n    state: state,\n    props: props\n  });\n  var getItemNodeFromIndex = useCallback(function (index) {\n    return itemRefs.current[elementIds.getItemId(index)];\n  }, [elementIds]);\n\n  // Effects.\n  // Adds an a11y aria live status message if getA11yStatusMessage is passed.\n  useA11yMessageStatus(getA11yStatusMessage, state, [isOpen, highlightedIndex, selectedItem, inputValue], environment);\n  // Scroll on highlighted item if change comes from keyboard.\n  var shouldScrollRef = useScrollIntoView({\n    menuElement: menuRef.current,\n    highlightedIndex: highlightedIndex,\n    isOpen: isOpen,\n    itemRefs: itemRefs,\n    scrollIntoView: scrollIntoView,\n    getItemNodeFromIndex: getItemNodeFromIndex\n  });\n  useControlPropsValidator({\n    props: props,\n    state: state\n  });\n  // Focus the input on first render if required.\n  useEffect(function () {\n    var focusOnOpen = getInitialValue$1(props, 'isOpen');\n    if (focusOnOpen && inputRef.current) {\n      inputRef.current.focus();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  useEffect(function () {\n    if (!isInitialMount) {\n      previousResultCountRef.current = items.length;\n    }\n  });\n  var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, useCallback(function handleBlur() {\n    if (latest.current.state.isOpen) {\n      dispatch({\n        type: InputBlur,\n        selectItem: false\n      });\n    }\n  }, [dispatch, latest]), useMemo(function () {\n    return [menuRef, toggleButtonRef, inputRef];\n  }, [menuRef.current, toggleButtonRef.current, inputRef.current]));\n  var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');\n  // Reset itemRefs on close.\n  useEffect(function () {\n    if (!isOpen) {\n      itemRefs.current = {};\n    }\n  }, [isOpen]);\n  // Reset itemRefs on close.\n  useEffect(function () {\n    var _inputRef$current;\n    if (!isOpen || !(environment != null && environment.document) || !(inputRef != null && (_inputRef$current = inputRef.current) != null && _inputRef$current.focus)) {\n      return;\n    }\n    if (environment.document.activeElement !== inputRef.current) {\n      inputRef.current.focus();\n    }\n  }, [isOpen, environment]);\n\n  /* Event handler functions */\n  var inputKeyDownHandlers = useMemo(function () {\n    return {\n      ArrowDown: function ArrowDown(event) {\n        event.preventDefault();\n        dispatch({\n          type: InputKeyDownArrowDown,\n          altKey: event.altKey\n        });\n      },\n      ArrowUp: function ArrowUp(event) {\n        event.preventDefault();\n        dispatch({\n          type: InputKeyDownArrowUp,\n          altKey: event.altKey\n        });\n      },\n      Home: function Home(event) {\n        if (!latest.current.state.isOpen) {\n          return;\n        }\n        event.preventDefault();\n        dispatch({\n          type: InputKeyDownHome\n        });\n      },\n      End: function End(event) {\n        if (!latest.current.state.isOpen) {\n          return;\n        }\n        event.preventDefault();\n        dispatch({\n          type: InputKeyDownEnd\n        });\n      },\n      Escape: function Escape(event) {\n        var latestState = latest.current.state;\n        if (latestState.isOpen || latestState.inputValue || latestState.selectedItem || latestState.highlightedIndex > -1) {\n          event.preventDefault();\n          dispatch({\n            type: InputKeyDownEscape\n          });\n        }\n      },\n      Enter: function Enter(event) {\n        var latestState = latest.current.state;\n        // if closed or no highlighted index, do nothing.\n        if (!latestState.isOpen || event.which === 229 // if IME composing, wait for next Enter keydown event.\n        ) {\n          return;\n        }\n        event.preventDefault();\n        dispatch({\n          type: InputKeyDownEnter\n        });\n      },\n      PageUp: function PageUp(event) {\n        if (latest.current.state.isOpen) {\n          event.preventDefault();\n          dispatch({\n            type: InputKeyDownPageUp\n          });\n        }\n      },\n      PageDown: function PageDown(event) {\n        if (latest.current.state.isOpen) {\n          event.preventDefault();\n          dispatch({\n            type: InputKeyDownPageDown\n          });\n        }\n      }\n    };\n  }, [dispatch, latest]);\n\n  // Getter props.\n  var getLabelProps = useCallback(function (labelProps) {\n    return _extends({\n      id: elementIds.labelId,\n      htmlFor: elementIds.inputId\n    }, labelProps);\n  }, [elementIds]);\n  var getMenuProps = useCallback(function (_temp, _temp2) {\n    var _extends2;\n    var _ref = _temp === void 0 ? {} : _temp,\n      onMouseLeave = _ref.onMouseLeave,\n      _ref$refKey = _ref.refKey,\n      refKey = _ref$refKey === void 0 ? 'ref' : _ref$refKey,\n      ref = _ref.ref,\n      rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n    var _ref2 = _temp2 === void 0 ? {} : _temp2,\n      _ref2$suppressRefErro = _ref2.suppressRefError,\n      suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n    setGetterPropCallInfo('getMenuProps', suppressRefError, refKey, menuRef);\n    return _extends((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function (menuNode) {\n      menuRef.current = menuNode;\n    }), _extends2.id = elementIds.menuId, _extends2.role = 'listbox', _extends2['aria-labelledby'] = rest && rest['aria-label'] ? undefined : \"\" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, function () {\n      dispatch({\n        type: MenuMouseLeave\n      });\n    }), _extends2), rest);\n  }, [dispatch, setGetterPropCallInfo, elementIds]);\n  var getItemProps = useCallback(function (_temp3) {\n    var _extends3, _ref4;\n    var _ref3 = _temp3 === void 0 ? {} : _temp3,\n      itemProp = _ref3.item,\n      indexProp = _ref3.index,\n      _ref3$refKey = _ref3.refKey,\n      refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,\n      ref = _ref3.ref,\n      onMouseMove = _ref3.onMouseMove,\n      onMouseDown = _ref3.onMouseDown,\n      onClick = _ref3.onClick;\n      _ref3.onPress;\n      var disabledProp = _ref3.disabled,\n      rest = _objectWithoutPropertiesLoose(_ref3, _excluded2$1);\n    if (disabledProp !== undefined) {\n      console.warn('Passing \"disabled\" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useCombobox.');\n    }\n    var _latest$current = latest.current,\n      latestProps = _latest$current.props,\n      latestState = _latest$current.state;\n    var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),\n      item = _getItemAndIndex[0],\n      index = _getItemAndIndex[1];\n    var disabled = latestProps.isItemDisabled(item, index);\n    var onSelectKey = 'onClick';\n    var customClickHandler = onClick;\n    var itemHandleMouseMove = function itemHandleMouseMove() {\n      if (mouseAndTouchTrackers.isTouchEnd || index === latestState.highlightedIndex) {\n        return;\n      }\n      shouldScrollRef.current = false;\n      dispatch({\n        type: ItemMouseMove,\n        index: index,\n        disabled: disabled\n      });\n    };\n    var itemHandleClick = function itemHandleClick() {\n      dispatch({\n        type: ItemClick,\n        index: index\n      });\n    };\n    var itemHandleMouseDown = function itemHandleMouseDown(e) {\n      return e.preventDefault();\n    }; // keep focus on the input after item click select.\n\n    return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {\n      if (itemNode) {\n        itemRefs.current[elementIds.getItemId(index)] = itemNode;\n      }\n    }), _extends3['aria-disabled'] = disabled, _extends3['aria-selected'] = index === latestState.highlightedIndex, _extends3.id = elementIds.getItemId(index), _extends3.role = 'option', _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {\n      onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),\n      onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)\n    }, rest);\n  }, [dispatch, elementIds, latest, mouseAndTouchTrackers, shouldScrollRef]);\n  var getToggleButtonProps = useCallback(function (_temp4) {\n    var _extends4;\n    var _ref5 = _temp4 === void 0 ? {} : _temp4,\n      onClick = _ref5.onClick;\n      _ref5.onPress;\n      var _ref5$refKey = _ref5.refKey,\n      refKey = _ref5$refKey === void 0 ? 'ref' : _ref5$refKey,\n      ref = _ref5.ref,\n      rest = _objectWithoutPropertiesLoose(_ref5, _excluded3);\n    var latestState = latest.current.state;\n    var toggleButtonHandleClick = function toggleButtonHandleClick() {\n      dispatch({\n        type: ToggleButtonClick\n      });\n    };\n    return _extends((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function (toggleButtonNode) {\n      toggleButtonRef.current = toggleButtonNode;\n    }), _extends4['aria-controls'] = elementIds.menuId, _extends4['aria-expanded'] = latestState.isOpen, _extends4.id = elementIds.toggleButtonId, _extends4.tabIndex = -1, _extends4), !rest.disabled && _extends({}, {\n      onClick: callAllEventHandlers(onClick, toggleButtonHandleClick)\n    }), rest);\n  }, [dispatch, latest, elementIds]);\n  var getInputProps = useCallback(function (_temp5, _temp6) {\n    var _extends5;\n    var _ref6 = _temp5 === void 0 ? {} : _temp5,\n      onKeyDown = _ref6.onKeyDown,\n      onChange = _ref6.onChange,\n      onInput = _ref6.onInput,\n      onBlur = _ref6.onBlur;\n      _ref6.onChangeText;\n      var onClick = _ref6.onClick,\n      _ref6$refKey = _ref6.refKey,\n      refKey = _ref6$refKey === void 0 ? 'ref' : _ref6$refKey,\n      ref = _ref6.ref,\n      rest = _objectWithoutPropertiesLoose(_ref6, _excluded4);\n    var _ref7 = _temp6 === void 0 ? {} : _temp6,\n      _ref7$suppressRefErro = _ref7.suppressRefError,\n      suppressRefError = _ref7$suppressRefErro === void 0 ? false : _ref7$suppressRefErro;\n    setGetterPropCallInfo('getInputProps', suppressRefError, refKey, inputRef);\n    var latestState = latest.current.state;\n    var inputHandleKeyDown = function inputHandleKeyDown(event) {\n      var key = normalizeArrowKey(event);\n      if (key && inputKeyDownHandlers[key]) {\n        inputKeyDownHandlers[key](event);\n      }\n    };\n    var inputHandleChange = function inputHandleChange(event) {\n      dispatch({\n        type: InputChange,\n        inputValue: event.target.value\n      });\n    };\n    var inputHandleBlur = function inputHandleBlur(event) {\n      /* istanbul ignore else */\n      if (environment != null && environment.document && latestState.isOpen && !mouseAndTouchTrackers.isMouseDown) {\n        var isBlurByTabChange = event.relatedTarget === null && environment.document.activeElement !== environment.document.body;\n        dispatch({\n          type: InputBlur,\n          selectItem: !isBlurByTabChange\n        });\n      }\n    };\n    var inputHandleClick = function inputHandleClick() {\n      dispatch({\n        type: InputClick\n      });\n    };\n\n    /* istanbul ignore next (preact) */\n    var onChangeKey = 'onChange';\n    var eventHandlers = {};\n    if (!rest.disabled) {\n      var _eventHandlers;\n      eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.onClick = callAllEventHandlers(onClick, inputHandleClick), _eventHandlers);\n    }\n    return _extends((_extends5 = {}, _extends5[refKey] = handleRefs(ref, function (inputNode) {\n      inputRef.current = inputNode;\n    }), _extends5['aria-activedescendant'] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : '', _extends5['aria-autocomplete'] = 'list', _extends5['aria-controls'] = elementIds.menuId, _extends5['aria-expanded'] = latestState.isOpen, _extends5['aria-labelledby'] = rest && rest['aria-label'] ? undefined : elementIds.labelId, _extends5.autoComplete = 'off', _extends5.id = elementIds.inputId, _extends5.role = 'combobox', _extends5.value = latestState.inputValue, _extends5), eventHandlers, rest);\n  }, [dispatch, elementIds, environment, inputKeyDownHandlers, latest, mouseAndTouchTrackers, setGetterPropCallInfo]);\n\n  // returns\n  var toggleMenu = useCallback(function () {\n    dispatch({\n      type: FunctionToggleMenu\n    });\n  }, [dispatch]);\n  var closeMenu = useCallback(function () {\n    dispatch({\n      type: FunctionCloseMenu\n    });\n  }, [dispatch]);\n  var openMenu = useCallback(function () {\n    dispatch({\n      type: FunctionOpenMenu\n    });\n  }, [dispatch]);\n  var setHighlightedIndex = useCallback(function (newHighlightedIndex) {\n    dispatch({\n      type: FunctionSetHighlightedIndex,\n      highlightedIndex: newHighlightedIndex\n    });\n  }, [dispatch]);\n  var selectItem = useCallback(function (newSelectedItem) {\n    dispatch({\n      type: FunctionSelectItem,\n      selectedItem: newSelectedItem\n    });\n  }, [dispatch]);\n  var setInputValue = useCallback(function (newInputValue) {\n    dispatch({\n      type: FunctionSetInputValue,\n      inputValue: newInputValue\n    });\n  }, [dispatch]);\n  var reset = useCallback(function () {\n    dispatch({\n      type: FunctionReset$1\n    });\n  }, [dispatch]);\n  return {\n    // prop getters.\n    getItemProps: getItemProps,\n    getLabelProps: getLabelProps,\n    getMenuProps: getMenuProps,\n    getInputProps: getInputProps,\n    getToggleButtonProps: getToggleButtonProps,\n    // actions.\n    toggleMenu: toggleMenu,\n    openMenu: openMenu,\n    closeMenu: closeMenu,\n    setHighlightedIndex: setHighlightedIndex,\n    setInputValue: setInputValue,\n    selectItem: selectItem,\n    reset: reset,\n    // state.\n    highlightedIndex: highlightedIndex,\n    isOpen: isOpen,\n    selectedItem: selectedItem,\n    inputValue: inputValue\n  };\n}\n\nvar defaultStateValues = {\n  activeIndex: -1,\n  selectedItems: []\n};\n\n/**\n * Returns the initial value for a state key in the following order:\n * 1. controlled prop, 2. initial prop, 3. default prop, 4. default\n * value from Downshift.\n *\n * @param {Object} props Props passed to the hook.\n * @param {string} propKey Props key to generate the value for.\n * @returns {any} The initial value for that prop.\n */\nfunction getInitialValue(props, propKey) {\n  return getInitialValue$1(props, propKey, defaultStateValues);\n}\n\n/**\n * Returns the default value for a state key in the following order:\n * 1. controlled prop, 2. default prop, 3. default value from Downshift.\n *\n * @param {Object} props Props passed to the hook.\n * @param {string} propKey Props key to generate the value for.\n * @returns {any} The initial value for that prop.\n */\nfunction getDefaultValue(props, propKey) {\n  return getDefaultValue$1(props, propKey, defaultStateValues);\n}\n\n/**\n * Gets the initial state based on the provided props. It uses initial, default\n * and controlled props related to state in order to compute the initial value.\n *\n * @param {Object} props Props passed to the hook.\n * @returns {Object} The initial state.\n */\nfunction getInitialState(props) {\n  var activeIndex = getInitialValue(props, 'activeIndex');\n  var selectedItems = getInitialValue(props, 'selectedItems');\n  return {\n    activeIndex: activeIndex,\n    selectedItems: selectedItems\n  };\n}\n\n/**\n * Returns true if dropdown keydown operation is permitted. Should not be\n * allowed on keydown with modifier keys (ctrl, alt, shift, meta), on\n * input element with text content that is either highlighted or selection\n * cursor is not at the starting position.\n *\n * @param {KeyboardEvent} event The event from keydown.\n * @returns {boolean} Whether the operation is allowed.\n */\nfunction isKeyDownOperationPermitted(event) {\n  if (event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) {\n    return false;\n  }\n  var element = event.target;\n  if (element instanceof HTMLInputElement &&\n  // if element is a text input\n  element.value !== '' && (\n  // and we have text in it\n  // and cursor is either not at the start or is currently highlighting text.\n  element.selectionStart !== 0 || element.selectionEnd !== 0)) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Check if a state is equal for taglist, by comparing active index and selected items.\n * Used by useSelect and useCombobox.\n *\n * @param {Object} prevState\n * @param {Object} newState\n * @returns {boolean} Wheather the states are deeply equal.\n */\nfunction isStateEqual(prevState, newState) {\n  return prevState.selectedItems === newState.selectedItems && prevState.activeIndex === newState.activeIndex;\n}\nvar propTypes = {\n  stateReducer: commonPropTypes.stateReducer,\n  itemToKey: commonPropTypes.itemToKey,\n  environment: commonPropTypes.environment,\n  selectedItems: PropTypes.array,\n  initialSelectedItems: PropTypes.array,\n  defaultSelectedItems: PropTypes.array,\n  getA11yStatusMessage: PropTypes.func,\n  activeIndex: PropTypes.number,\n  initialActiveIndex: PropTypes.number,\n  defaultActiveIndex: PropTypes.number,\n  onActiveIndexChange: PropTypes.func,\n  onSelectedItemsChange: PropTypes.func,\n  keyNavigationNext: PropTypes.string,\n  keyNavigationPrevious: PropTypes.string\n};\nvar defaultProps = {\n  itemToKey: defaultProps$3.itemToKey,\n  stateReducer: defaultProps$3.stateReducer,\n  environment: defaultProps$3.environment,\n  keyNavigationNext: 'ArrowRight',\n  keyNavigationPrevious: 'ArrowLeft'\n};\n\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes = noop;\n/* istanbul ignore next */\nif (process.env.NODE_ENV !== 'production') {\n  validatePropTypes = function validatePropTypes(options, caller) {\n    PropTypes.checkPropTypes(propTypes, options, 'prop', caller.name);\n  };\n}\n\nvar SelectedItemClick = process.env.NODE_ENV !== \"production\" ? '__selected_item_click__' : 0;\nvar SelectedItemKeyDownDelete = process.env.NODE_ENV !== \"production\" ? '__selected_item_keydown_delete__' : 1;\nvar SelectedItemKeyDownBackspace = process.env.NODE_ENV !== \"production\" ? '__selected_item_keydown_backspace__' : 2;\nvar SelectedItemKeyDownNavigationNext = process.env.NODE_ENV !== \"production\" ? '__selected_item_keydown_navigation_next__' : 3;\nvar SelectedItemKeyDownNavigationPrevious = process.env.NODE_ENV !== \"production\" ? '__selected_item_keydown_navigation_previous__' : 4;\nvar DropdownKeyDownNavigationPrevious = process.env.NODE_ENV !== \"production\" ? '__dropdown_keydown_navigation_previous__' : 5;\nvar DropdownKeyDownBackspace = process.env.NODE_ENV !== \"production\" ? '__dropdown_keydown_backspace__' : 6;\nvar DropdownClick = process.env.NODE_ENV !== \"production\" ? '__dropdown_click__' : 7;\nvar FunctionAddSelectedItem = process.env.NODE_ENV !== \"production\" ? '__function_add_selected_item__' : 8;\nvar FunctionRemoveSelectedItem = process.env.NODE_ENV !== \"production\" ? '__function_remove_selected_item__' : 9;\nvar FunctionSetSelectedItems = process.env.NODE_ENV !== \"production\" ? '__function_set_selected_items__' : 10;\nvar FunctionSetActiveIndex = process.env.NODE_ENV !== \"production\" ? '__function_set_active_index__' : 11;\nvar FunctionReset = process.env.NODE_ENV !== \"production\" ? '__function_reset__' : 12;\n\nvar stateChangeTypes = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  DropdownClick: DropdownClick,\n  DropdownKeyDownBackspace: DropdownKeyDownBackspace,\n  DropdownKeyDownNavigationPrevious: DropdownKeyDownNavigationPrevious,\n  FunctionAddSelectedItem: FunctionAddSelectedItem,\n  FunctionRemoveSelectedItem: FunctionRemoveSelectedItem,\n  FunctionReset: FunctionReset,\n  FunctionSetActiveIndex: FunctionSetActiveIndex,\n  FunctionSetSelectedItems: FunctionSetSelectedItems,\n  SelectedItemClick: SelectedItemClick,\n  SelectedItemKeyDownBackspace: SelectedItemKeyDownBackspace,\n  SelectedItemKeyDownDelete: SelectedItemKeyDownDelete,\n  SelectedItemKeyDownNavigationNext: SelectedItemKeyDownNavigationNext,\n  SelectedItemKeyDownNavigationPrevious: SelectedItemKeyDownNavigationPrevious\n});\n\n/* eslint-disable complexity */\nfunction downshiftMultipleSelectionReducer(state, action) {\n  var type = action.type,\n    index = action.index,\n    props = action.props,\n    selectedItem = action.selectedItem;\n  var activeIndex = state.activeIndex,\n    selectedItems = state.selectedItems;\n  var changes;\n  switch (type) {\n    case SelectedItemClick:\n      changes = {\n        activeIndex: index\n      };\n      break;\n    case SelectedItemKeyDownNavigationPrevious:\n      changes = {\n        activeIndex: activeIndex - 1 < 0 ? 0 : activeIndex - 1\n      };\n      break;\n    case SelectedItemKeyDownNavigationNext:\n      changes = {\n        activeIndex: activeIndex + 1 >= selectedItems.length ? -1 : activeIndex + 1\n      };\n      break;\n    case SelectedItemKeyDownBackspace:\n    case SelectedItemKeyDownDelete:\n      {\n        if (activeIndex < 0) {\n          break;\n        }\n        var newActiveIndex = activeIndex;\n        if (selectedItems.length === 1) {\n          newActiveIndex = -1;\n        } else if (activeIndex === selectedItems.length - 1) {\n          newActiveIndex = selectedItems.length - 2;\n        }\n        changes = _extends({\n          selectedItems: [].concat(selectedItems.slice(0, activeIndex), selectedItems.slice(activeIndex + 1))\n        }, {\n          activeIndex: newActiveIndex\n        });\n        break;\n      }\n    case DropdownKeyDownNavigationPrevious:\n      changes = {\n        activeIndex: selectedItems.length - 1\n      };\n      break;\n    case DropdownKeyDownBackspace:\n      changes = {\n        selectedItems: selectedItems.slice(0, selectedItems.length - 1)\n      };\n      break;\n    case FunctionAddSelectedItem:\n      changes = {\n        selectedItems: [].concat(selectedItems, [selectedItem])\n      };\n      break;\n    case DropdownClick:\n      changes = {\n        activeIndex: -1\n      };\n      break;\n    case FunctionRemoveSelectedItem:\n      {\n        var _newActiveIndex = activeIndex;\n        var selectedItemIndex = selectedItems.findIndex(function (item) {\n          return props.itemToKey(item) === props.itemToKey(selectedItem);\n        });\n        if (selectedItemIndex < 0) {\n          break;\n        }\n        if (selectedItems.length === 1) {\n          _newActiveIndex = -1;\n        } else if (selectedItemIndex === selectedItems.length - 1) {\n          _newActiveIndex = selectedItems.length - 2;\n        }\n        changes = {\n          selectedItems: [].concat(selectedItems.slice(0, selectedItemIndex), selectedItems.slice(selectedItemIndex + 1)),\n          activeIndex: _newActiveIndex\n        };\n        break;\n      }\n    case FunctionSetSelectedItems:\n      {\n        var newSelectedItems = action.selectedItems;\n        changes = {\n          selectedItems: newSelectedItems\n        };\n        break;\n      }\n    case FunctionSetActiveIndex:\n      {\n        var _newActiveIndex2 = action.activeIndex;\n        changes = {\n          activeIndex: _newActiveIndex2\n        };\n        break;\n      }\n    case FunctionReset:\n      changes = {\n        activeIndex: getDefaultValue(props, 'activeIndex'),\n        selectedItems: getDefaultValue(props, 'selectedItems')\n      };\n      break;\n    default:\n      throw new Error('Reducer called without proper action type.');\n  }\n  return _extends({}, state, changes);\n}\n\nvar _excluded = [\"refKey\", \"ref\", \"onClick\", \"onKeyDown\", \"selectedItem\", \"index\"],\n  _excluded2 = [\"refKey\", \"ref\", \"onKeyDown\", \"onClick\", \"preventKeyAction\"];\nuseMultipleSelection.stateChangeTypes = stateChangeTypes;\nfunction useMultipleSelection(userProps) {\n  if (userProps === void 0) {\n    userProps = {};\n  }\n  validatePropTypes(userProps, useMultipleSelection);\n  // Props defaults and destructuring.\n  var props = _extends({}, defaultProps, userProps);\n  var getA11yStatusMessage = props.getA11yStatusMessage,\n    environment = props.environment,\n    keyNavigationNext = props.keyNavigationNext,\n    keyNavigationPrevious = props.keyNavigationPrevious;\n\n  // Reducer init.\n  var _useControlledReducer = useControlledReducer$1(downshiftMultipleSelectionReducer, props, getInitialState, isStateEqual),\n    state = _useControlledReducer[0],\n    dispatch = _useControlledReducer[1];\n  var activeIndex = state.activeIndex,\n    selectedItems = state.selectedItems;\n\n  // Refs.\n  var isInitialMount = useIsInitialMount();\n  var dropdownRef = useRef(null);\n  var selectedItemRefs = useRef();\n  selectedItemRefs.current = [];\n  var latest = useLatestRef({\n    state: state,\n    props: props\n  });\n\n  // Effects.\n  // Adds an a11y aria live status message if getA11yStatusMessage is passed.\n  useA11yMessageStatus(getA11yStatusMessage, state, [activeIndex, selectedItems], environment);\n  // Sets focus on active item.\n  useEffect(function () {\n    if (isInitialMount) {\n      return;\n    }\n    if (activeIndex === -1 && dropdownRef.current) {\n      dropdownRef.current.focus();\n    } else if (selectedItemRefs.current[activeIndex]) {\n      selectedItemRefs.current[activeIndex].focus();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [activeIndex]);\n  useControlPropsValidator({\n    props: props,\n    state: state\n  });\n  var setGetterPropCallInfo = useGetterPropsCalledChecker('getDropdownProps');\n\n  // Event handler functions.\n  var selectedItemKeyDownHandlers = useMemo(function () {\n    var _ref;\n    return _ref = {}, _ref[keyNavigationPrevious] = function () {\n      dispatch({\n        type: SelectedItemKeyDownNavigationPrevious\n      });\n    }, _ref[keyNavigationNext] = function () {\n      dispatch({\n        type: SelectedItemKeyDownNavigationNext\n      });\n    }, _ref.Delete = function Delete() {\n      dispatch({\n        type: SelectedItemKeyDownDelete\n      });\n    }, _ref.Backspace = function Backspace() {\n      dispatch({\n        type: SelectedItemKeyDownBackspace\n      });\n    }, _ref;\n  }, [dispatch, keyNavigationNext, keyNavigationPrevious]);\n  var dropdownKeyDownHandlers = useMemo(function () {\n    var _ref2;\n    return _ref2 = {}, _ref2[keyNavigationPrevious] = function (event) {\n      if (isKeyDownOperationPermitted(event)) {\n        dispatch({\n          type: DropdownKeyDownNavigationPrevious\n        });\n      }\n    }, _ref2.Backspace = function Backspace(event) {\n      if (isKeyDownOperationPermitted(event)) {\n        dispatch({\n          type: DropdownKeyDownBackspace\n        });\n      }\n    }, _ref2;\n  }, [dispatch, keyNavigationPrevious]);\n\n  // Getter props.\n  var getSelectedItemProps = useCallback(function (_temp) {\n    var _extends2;\n    var _ref3 = _temp === void 0 ? {} : _temp,\n      _ref3$refKey = _ref3.refKey,\n      refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,\n      ref = _ref3.ref,\n      onClick = _ref3.onClick,\n      onKeyDown = _ref3.onKeyDown,\n      selectedItemProp = _ref3.selectedItem,\n      indexProp = _ref3.index,\n      rest = _objectWithoutPropertiesLoose(_ref3, _excluded);\n    var latestState = latest.current.state;\n    var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),\n      index = _getItemAndIndex[1];\n    var isFocusable = index > -1 && index === latestState.activeIndex;\n    var selectedItemHandleClick = function selectedItemHandleClick() {\n      dispatch({\n        type: SelectedItemClick,\n        index: index\n      });\n    };\n    var selectedItemHandleKeyDown = function selectedItemHandleKeyDown(event) {\n      var key = normalizeArrowKey(event);\n      if (key && selectedItemKeyDownHandlers[key]) {\n        selectedItemKeyDownHandlers[key](event);\n      }\n    };\n    return _extends((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function (selectedItemNode) {\n      if (selectedItemNode) {\n        selectedItemRefs.current.push(selectedItemNode);\n      }\n    }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);\n  }, [dispatch, latest, selectedItemKeyDownHandlers]);\n  var getDropdownProps = useCallback(function (_temp2, _temp3) {\n    var _extends3;\n    var _ref4 = _temp2 === void 0 ? {} : _temp2,\n      _ref4$refKey = _ref4.refKey,\n      refKey = _ref4$refKey === void 0 ? 'ref' : _ref4$refKey,\n      ref = _ref4.ref,\n      onKeyDown = _ref4.onKeyDown,\n      onClick = _ref4.onClick,\n      _ref4$preventKeyActio = _ref4.preventKeyAction,\n      preventKeyAction = _ref4$preventKeyActio === void 0 ? false : _ref4$preventKeyActio,\n      rest = _objectWithoutPropertiesLoose(_ref4, _excluded2);\n    var _ref5 = _temp3 === void 0 ? {} : _temp3,\n      _ref5$suppressRefErro = _ref5.suppressRefError,\n      suppressRefError = _ref5$suppressRefErro === void 0 ? false : _ref5$suppressRefErro;\n    setGetterPropCallInfo('getDropdownProps', suppressRefError, refKey, dropdownRef);\n    var dropdownHandleKeyDown = function dropdownHandleKeyDown(event) {\n      var key = normalizeArrowKey(event);\n      if (key && dropdownKeyDownHandlers[key]) {\n        dropdownKeyDownHandlers[key](event);\n      }\n    };\n    var dropdownHandleClick = function dropdownHandleClick() {\n      dispatch({\n        type: DropdownClick\n      });\n    };\n    return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (dropdownNode) {\n      if (dropdownNode) {\n        dropdownRef.current = dropdownNode;\n      }\n    }), _extends3), !preventKeyAction && {\n      onKeyDown: callAllEventHandlers(onKeyDown, dropdownHandleKeyDown),\n      onClick: callAllEventHandlers(onClick, dropdownHandleClick)\n    }, rest);\n  }, [dispatch, dropdownKeyDownHandlers, setGetterPropCallInfo]);\n\n  // returns\n  var addSelectedItem = useCallback(function (selectedItem) {\n    dispatch({\n      type: FunctionAddSelectedItem,\n      selectedItem: selectedItem\n    });\n  }, [dispatch]);\n  var removeSelectedItem = useCallback(function (selectedItem) {\n    dispatch({\n      type: FunctionRemoveSelectedItem,\n      selectedItem: selectedItem\n    });\n  }, [dispatch]);\n  var setSelectedItems = useCallback(function (newSelectedItems) {\n    dispatch({\n      type: FunctionSetSelectedItems,\n      selectedItems: newSelectedItems\n    });\n  }, [dispatch]);\n  var setActiveIndex = useCallback(function (newActiveIndex) {\n    dispatch({\n      type: FunctionSetActiveIndex,\n      activeIndex: newActiveIndex\n    });\n  }, [dispatch]);\n  var reset = useCallback(function () {\n    dispatch({\n      type: FunctionReset\n    });\n  }, [dispatch]);\n  return {\n    getSelectedItemProps: getSelectedItemProps,\n    getDropdownProps: getDropdownProps,\n    addSelectedItem: addSelectedItem,\n    removeSelectedItem: removeSelectedItem,\n    setSelectedItems: setSelectedItems,\n    setActiveIndex: setActiveIndex,\n    reset: reset,\n    selectedItems: selectedItems,\n    activeIndex: activeIndex\n  };\n}\n\nexport { Downshift as default, resetIdCounter, useCombobox, useMultipleSelection, useSelect };\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport const ChipGroup = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  & > span {\n    margin: ${({ theme }) => theme.deprecatedSpacing.component.one};\n  }\n`;\n\nconst StyledChip = styled.span<{ color?: ChipColors }>`\n  display: inline-block;\n  border-radius: ${({ theme }) => theme.deprecatedBorder.radius.normal};\n  padding: ${({ theme }) => theme.deprecatedSpacing.component.four};\n\n  background-color: ${({ theme, color }) => {\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    //@ts-ignore\n    return color ? theme.deprecatedColors.accent[color] : theme.deprecatedColors.accent.five;\n  }};\n  color: ${({ theme }) => theme.deprecatedColors.white};\n\n  .delete-icon {\n    &:hover {\n      cursor: pointer;\n    }\n  }\n`;\n\nexport enum ChipColors {\n  one = \"one\",\n  two = \"two\",\n  three = \"three\",\n  four = \"four\",\n  five = \"five\",\n  six = \"six\",\n  seven = \"seven\",\n  eight = \"eight\",\n  nine = \"nine\",\n}\n\ninterface ChipProps {\n  label: string;\n  onDelete?: (value: string) => void;\n  color?: ChipColors;\n}\n\nexport default function Chip({ label, onDelete, color = ChipColors.six }: ChipProps) {\n  return (\n    <StyledChip color={color}>\n      {label}{\" \"}\n      {onDelete && (\n        <FontAwesomeIcon\n          size=\"sm\"\n          icon=\"times\"\n          onClick={() => onDelete(label)}\n          className=\"delete-icon\"\n        />\n      )}\n    </StyledChip>\n  );\n}\n","import React, { ReactElement, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useCombobox } from \"downshift\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\nimport Input from \"../input\";\nimport Chip, { ChipColors } from \"../../layout/chip\";\nimport { ToggleTipProps } from \"../../layout/toggle_tip\";\n\nconst TagsInputWrapper = styled.span`\n  display: inline-block;\n  width: 100%;\n  margin-bottom: 12px;\n  .wrapper {\n    width: 100%;\n    position: relative;\n  }\n\n  .text-input {\n    margin-bottom: ${({ theme }) => theme.deprecatedSpacing.component.five};\n  }\n`;\n\nconst StyledTagsContainer = styled.div<{ hasError: boolean }>`\n  width: 100%;\n  min-height: ${({ theme }) => theme.deprecatedSpacing.component.nine};\n  background-color: ${({ theme }) => theme.deprecatedColors.white};\n  vertical-align: middle;\n  border: 1px solid\n    ${({ theme, hasError }) =>\n      hasError ? theme.deprecatedColors.error : theme.deprecatedColors.gray.eight};\n  border-radius: ${({ theme }) => theme.deprecatedSpacing.component.two};\n  box-sizing: border-box;\n  padding: ${({ theme }) => theme.deprecatedSpacing.component.five}\n    ${({ theme }) => theme.deprecatedSpacing.component.four}\n    ${({ theme }) => theme.deprecatedSpacing.component.three};\n  display: flex;\n  flex-wrap: wrap;\n\n  & > * {\n    margin: 0 ${({ theme }) => theme.deprecatedSpacing.component.two}\n      ${({ theme }) => theme.deprecatedSpacing.component.three};\n  }\n`;\n\nconst StyledOptions = styled.ul<{ isOpen: boolean }>`\n  overflow: hidden;\n  background-color: ${({ theme }) => theme.deprecatedColors.primary.extraLight};\n  border-radius: ${({ theme }) => theme.deprecatedBorder.radius.large};\n  box-shadow: ${({ theme }) => theme.deprecatedElevation.two};\n  padding: ${({ theme, isOpen }) => (isOpen ? theme.deprecatedSpacing.component.five : 0)};\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 90%;\n  list-style-type: none;\n  max-height: 130px;\n  overflow-y: scroll;\n  z-index: 1;\n`;\n\nconst StyledOption = styled.li<{ isHighlighted: boolean; isDisabled?: boolean }>`\n  border-radius: ${({ theme }) => theme.deprecatedBorder.radius.normal};\n  padding: ${({ theme }) => theme.deprecatedSpacing.component.four};\n  background-color: ${({ theme, isHighlighted }) =>\n    isHighlighted ? theme.deprecatedColors.accent.six : \"transparent\"};\n  color: ${({ theme, isHighlighted, isDisabled }) =>\n    isDisabled\n      ? theme.deprecatedColors.gray.seven\n      : isHighlighted\n      ? theme.deprecatedColors.white\n      : theme.deprecatedColors.text.normal};\n  cursor: ${({ isHighlighted, isDisabled }) =>\n    isDisabled ? \"not-allowed\" : isHighlighted ? \"pointer\" : \"normal\"};\n`;\n\n//The label is optional when passed down as a prop\nexport interface TagItemType {\n  value: string;\n  label?: string;\n}\n\n//The label is required for the items used to generate the dropdown options\ninterface DropdownItemType {\n  value: string;\n  label: string;\n}\n\nexport interface TagsProps {\n  label?: string;\n  helperText?: string;\n  className?: string;\n  error?: string;\n  toggleTip?: ReactElement<ToggleTipProps>;\n  adornmentIcon?: IconProp;\n  availableTags: TagItemType[];\n  createTagLabel?: string;\n  id?: string;\n  placeholder?: string;\n  value?: string[];\n  disableTagCreation?: boolean;\n  description?: string;\n  questionIsOptional?: boolean;\n  onTagSelect: (value: string) => void;\n  onTagCreate?: (value: string) => void;\n  onTagDelete: (value: string) => void;\n  disabled?: boolean;\n  tagLabelPlural?: string;\n}\n\nexport default React.memo(function Tags({\n  value = [],\n  onTagSelect,\n  onTagCreate,\n  label,\n  helperText,\n  className,\n  error,\n  toggleTip,\n  adornmentIcon,\n  placeholder,\n  id,\n  createTagLabel = \"Create:\",\n  availableTags,\n  disableTagCreation,\n  description,\n  questionIsOptional = false,\n  onTagDelete,\n  disabled = false,\n  tagLabelPlural = \"\",\n}: TagsProps) {\n  //represents the entire list of tags available for the component\n  const [formattedTags, setFormattedTags] = useState<DropdownItemType[]>([]);\n\n  //represents the list of tags displayed in the dropdown which are filtered when the user types\n  const [inputItems, setInputItems] = useState<DropdownItemType[]>([]);\n  const {\n    isOpen,\n    getMenuProps,\n    getInputProps,\n    highlightedIndex,\n    getItemProps,\n    setInputValue,\n    openMenu,\n    closeMenu,\n  } = useCombobox({\n    items: inputItems,\n    itemToString: (item) => (item ? item.label : \"\"),\n    onSelectedItemChange: ({ selectedItem }) => {\n      setInputValue(\"\");\n\n      //Checks if the selectedItemValue is not in the list of selected values\n      if (\n        selectedItem &&\n        !valueIsSelected(selectedItem.value) &&\n        !isCustomValue(selectedItem.value)\n      ) {\n        onTagSelect(selectedItem.value);\n      }\n\n      //Keeps track of the custom values entered by the user\n      if (\n        (disableTagCreation === false || disableTagCreation === undefined) &&\n        selectedItem &&\n        isCustomValue(selectedItem.value) &&\n        !valueIsSelected(selectedItem.value) &&\n        onTagCreate\n      ) {\n        onTagCreate(selectedItem.value);\n      }\n      closeMenu();\n    },\n    onInputValueChange: ({ inputValue }) => {\n      //Filters the options that are displayed in the dropdown menu\n      const itemsToSet = formattedTags.filter((option) => {\n        return option.label.toLowerCase().includes(inputValue?.toLowerCase() ?? \"\");\n      });\n\n      const customInputItem =\n        inputValue &&\n        isCustomValue(inputValue) &&\n        (disableTagCreation === false || disableTagCreation === undefined) //If value typed by the user is not in the list of options, it displays a new dropdown item to \"create\" the tag\n          ? [{ label: `${createTagLabel} \"${inputValue}\"`, value: inputValue }]\n          : [];\n\n      setInputItems([...itemsToSet, ...customInputItem]);\n    },\n  });\n\n  useEffect(() => {\n    const getFormattedTags = () =>\n      availableTags.map((availableTag) => ({\n        label: availableTag?.label ?? availableTag.value,\n        value: availableTag.value,\n      }));\n\n    setFormattedTags(getFormattedTags());\n    setInputItems(getFormattedTags());\n  }, [availableTags]);\n\n  const availableTagsValues = () => availableTags.map((availableTag) => availableTag.value);\n\n  const valueIsSelected = (valueToFind: string) => value?.some((item) => item === valueToFind);\n\n  const handleTagDelete = (deletedItem: string) => {\n    if (onTagDelete) {\n      onTagDelete(deletedItem);\n    }\n  };\n\n  const isCustomValue = (value: string) => {\n    //This is used to check if the value selected was entered by the user and is not included in the list of predefined options\n    return !availableTagsValues().includes(value);\n  };\n\n  return (\n    <TagsInputWrapper className={className}>\n      <div className=\"wrapper tags-selector\">\n        <Input\n          {...getInputProps()}\n          type={\"text\"}\n          error={error}\n          adornmentIcon={adornmentIcon}\n          toggleTip={toggleTip}\n          helperText={helperText}\n          label={label}\n          placeholder={placeholder}\n          id={id}\n          className={\"text-input\"}\n          onFocus={openMenu}\n          onClick={openMenu}\n          onMouseDown={openMenu}\n          data-test=\"tags-input\"\n          description={description}\n          disabled={disabled}\n          questionIsOptional={questionIsOptional}\n        />\n        <StyledOptions {...getMenuProps()} isOpen={isOpen}>\n          {isOpen &&\n            inputItems.map((item, index) => (\n              <StyledOption\n                {...getItemProps({ item, index })}\n                isHighlighted={highlightedIndex === index}\n                isDisabled={valueIsSelected(item.value)}\n                data-test={`tag-option-${item.value}`}\n                key={`${item}${index}`}\n              >\n                {item.label}\n              </StyledOption>\n            ))}\n        </StyledOptions>\n      </div>\n\n      <StyledTagsContainer hasError={!!error} className=\"tags-container\" data-test=\"tags-container\">\n        {value.map((selectedValue) => {\n          const optionData = formattedTags.find(\n            (option) => option.value === selectedValue,\n          ) as DropdownItemType;\n          return (\n            <Chip\n              key={selectedValue}\n              label={optionData?.label ?? selectedValue}\n              onDelete={!disabled ? () => handleTagDelete(selectedValue) : undefined}\n              color={isCustomValue(selectedValue) ? ChipColors.two : ChipColors.six}\n            />\n          );\n        })}\n        {!value.length && <p>{`You haven't selected any ${tagLabelPlural}`}</p>}\n      </StyledTagsContainer>\n    </TagsInputWrapper>\n  );\n});\n","import React, { ReactElement, useEffect, useState, FocusEvent } from \"react\";\n\nimport styled from \"styled-components\";\nimport { useCombobox } from \"downshift\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\nimport Input from \"../input\";\nimport { ToggleTipProps } from \"../../layout/toggle_tip\";\nimport usePrevious from \"../../../shared/use_previous\";\n\nconst InputAutocompleteWrapper = styled.span`\n  display: inline-block;\n  width: 100%;\n  .wrapper {\n    width: 100%;\n    position: relative;\n  }\n\n  .text-input {\n    margin-bottom: ${({ theme }) => theme.deprecatedSpacing.component.five};\n  }\n`;\n\nconst StyledOptions = styled.ul<{ isOpen: boolean; maxHeight?: number }>`\n  overflow: ${({ maxHeight }) => (maxHeight ? \"scroll\" : \"hidden\")};\n  max-height: ${({ maxHeight }) => (maxHeight ? maxHeight : \"\")};\n  background-color: ${({ theme }) => theme.deprecatedColors.primary.extraLight};\n  border-radius: ${({ theme }) => theme.deprecatedBorder.radius.large};\n  box-shadow: ${({ theme }) => theme.deprecatedElevation.two};\n  padding: ${({ theme, isOpen }) => (isOpen ? theme.deprecatedSpacing.component.five : 0)};\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 90%;\n  list-style-type: none;\n  z-index: 1;\n`;\n\nconst StyledOption = styled.li<{ isHighlighted: boolean; isDisabled?: boolean }>`\n  border-radius: ${({ theme }) => theme.deprecatedBorder.radius.normal};\n  padding: ${({ theme }) => theme.deprecatedSpacing.component.four};\n  background-color: ${({ theme, isHighlighted }) =>\n    isHighlighted ? theme.deprecatedColors.primary.normal : \"transparent\"};\n  color: ${({ theme, isHighlighted, isDisabled }) =>\n    isDisabled\n      ? theme.deprecatedColors.gray.seven\n      : isHighlighted\n      ? theme.deprecatedColors.white\n      : theme.deprecatedColors.text.normal};\n  cursor: ${({ isHighlighted, isDisabled }) =>\n    isDisabled ? \"not-allowed\" : isHighlighted ? \"pointer\" : \"normal\"};\n`;\n\n//The label is optional when passed down as a prop\nexport interface AutocompleteItemType {\n  value: string;\n  label?: string;\n  icon?: React.ReactNode;\n}\n\n//The label is required for the items used to generate the dropdown options\nexport interface DropdownItemType {\n  value: string;\n  label: string;\n  icon?: React.ReactNode;\n}\n\nexport interface InputAutocompleteProps {\n  label?: string;\n  helperText?: string;\n  className?: string;\n  error?: string;\n  description?: string;\n  toggleTip?: ReactElement<ToggleTipProps>;\n  adornmentIcon?: IconProp;\n  availableOptions: AutocompleteItemType[];\n  id?: string;\n  placeholder?: string;\n  value?: string;\n  onSelect: (value: string) => void;\n  onChange?: (value: string | undefined) => void;\n  defaultIsOpen?: boolean;\n  clearOnSelect?: boolean;\n  optional?: boolean;\n  maxHeight?: number;\n  onMenuScrollToBottom?: () => void;\n  onBlur?: (e: FocusEvent) => void;\n}\n\nexport default function InputAutocomplete({\n  onSelect,\n  label,\n  helperText,\n  className,\n  error,\n  toggleTip,\n  adornmentIcon,\n  description,\n  placeholder,\n  value,\n  id,\n  availableOptions,\n  onChange,\n  defaultIsOpen = false,\n  clearOnSelect = true,\n  optional = false,\n  maxHeight = undefined,\n  onMenuScrollToBottom = undefined,\n  onBlur,\n}: InputAutocompleteProps) {\n  const formattedOptions: DropdownItemType[] = availableOptions.map((availableOption) => ({\n    label: availableOption?.label ?? availableOption.value,\n    value: availableOption.value,\n    icon: availableOption?.icon ?? undefined,\n  }));\n  const [inputItems, setInputItems] = useState<DropdownItemType[]>(formattedOptions);\n  const {\n    isOpen,\n    getMenuProps,\n    getInputProps,\n    getLabelProps,\n    highlightedIndex,\n    getItemProps,\n    setInputValue,\n    openMenu,\n    closeMenu,\n  } = useCombobox({\n    items: inputItems,\n    itemToString: (item) => (item ? item.label : \"\"),\n    onSelectedItemChange: ({ selectedItem }) => {\n      if (clearOnSelect) setInputValue(\"\");\n\n      if (selectedItem && onSelect) {\n        onSelect(selectedItem.value);\n      }\n\n      closeMenu();\n    },\n    onInputValueChange: ({ inputValue }) => {\n      //Filters the options that are displayed in the dropdown menu\n      if (onChange) onChange(inputValue);\n      const itemsToSet = formattedOptions.filter((option) => {\n        return option.label.toLowerCase().includes(inputValue?.toLowerCase() ?? \"\");\n      });\n      setInputItems([...itemsToSet]);\n    },\n    defaultIsOpen,\n  });\n\n  const prevOptions = usePrevious(availableOptions);\n  useEffect(() => {\n    // if the options passed in via props change, reset the dropdown\n    // A simple !== will give us false positives\n    if (!optionsMatch(prevOptions, availableOptions)) {\n      setInputItems(formattedOptions);\n    }\n  }, [prevOptions, formattedOptions, availableOptions]);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const handleOptionsScroll = (event: { currentTarget: any }) => {\n    const node = event.currentTarget;\n    const isAtBottom = node?.scrollHeight - node?.scrollTop === node?.clientHeight;\n\n    if (isAtBottom && !!onMenuScrollToBottom) {\n      onMenuScrollToBottom();\n    }\n  };\n\n  useEffect(() => {\n    if (!value) {\n      // if the value is invalidated by the parent, clear the input\n      setInputValue(\"\");\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [value]);\n\n  return (\n    <InputAutocompleteWrapper className={className}>\n      <div className=\"wrapper\">\n        <Input\n          {...getInputProps()}\n          data-test=\"dropdown-options\"\n          type={\"text\"}\n          error={error}\n          adornmentIcon={adornmentIcon}\n          toggleTip={toggleTip}\n          helperText={helperText}\n          label={label}\n          labelProps={getLabelProps()}\n          placeholder={placeholder}\n          id={id}\n          className={\"text-input\"}\n          onFocus={openMenu}\n          onClick={openMenu}\n          onMouseDown={openMenu}\n          description={description}\n          questionIsOptional={optional}\n          onBlur={onBlur}\n        />\n\n        <StyledOptions\n          {...getMenuProps()}\n          onScroll={handleOptionsScroll}\n          isOpen={isOpen}\n          className=\"input-options\"\n          maxHeight={maxHeight}\n        >\n          {isOpen &&\n            inputItems.map((item, index) => (\n              <StyledOption\n                isHighlighted={highlightedIndex === index}\n                key={`${item}${index}`}\n                {...getItemProps({ item, index })}\n              >\n                {item?.icon || null}\n                {item.label}\n              </StyledOption>\n            ))}\n        </StyledOptions>\n      </div>\n    </InputAutocompleteWrapper>\n  );\n}\n\nfunction optionsMatch(\n  previous: AutocompleteItemType[] | undefined,\n  current: AutocompleteItemType[],\n): boolean {\n  if (!previous || previous.length !== current.length) return false;\n  return previous.every((option, index) => {\n    const currentOption = current[index];\n    return option.value === currentOption.value && option.label === currentOption.label;\n  });\n}\n","import React, { useEffect } from \"react\";\nimport Tags from \"../../components/data_entry/tags\";\nimport { QuestionProps } from \"../survey\";\nimport styled from \"styled-components\";\nimport QuestionLabel from \"./components/question_label\";\nimport TextArea from \"../../components/data_entry/text_area\";\nimport { Option, getOptionObjectFromText, getOptionOid, getOptionText } from \"./question_helpers\";\nimport InputAutocomplete from \"../../components/data_entry/input_autocomplete\";\nimport SelectQuestionWrapper from \"../../components/base_ui/higher_order_components/questions/select_question_wrapper\";\n\nexport interface Answer {\n  writeIn?: string;\n  followUpResponse?: string;\n  selectedOptions: (string | Option | undefined)[];\n}\n\nexport interface Customizations {\n  prompt: string;\n  options: (string | Option)[];\n  followUp?: {\n    option: string;\n    prompt: string;\n    includeOpenResponse: boolean;\n    placeholder?: string;\n  };\n  numberToChoose?: number;\n  disableTagCreation?: boolean;\n  description?: string;\n  placeholder?: string;\n  optional?: boolean;\n}\n\nconst Question = styled.div`\n  .counterpart {\n    margin-top: ${({ theme }) => theme.deprecatedSpacing.component.three};\n  }\n  .label {\n    .label-text {\n      text-transform: none;\n      display: inline-block;\n      font-weight: ${({ theme }) => theme.font.weight.light};\n      font-size: 18px;\n      white-space: pre-wrap;\n      color: ${({ theme }) => theme.deprecatedColors.gray.four};\n    }\n  }\n`;\n\nconst StyledFollowUp = styled.div`\n  padding-top: 2em;\n`;\n\nconst StyledDropdown = styled(InputAutocomplete)`\n  .label {\n    display: initial;\n  }\n\n  .inputWrapper {\n    margin-top: 24px;\n  }\n\n  .text-input .input-description {\n    display: block;\n    font-weight: 500;\n    font-size: 15px;\n    margin-top: 17px;\n    margin-bottom: 0;\n    color: ${({ theme }) => theme.deprecatedColors.accent.four};\n  }\n\n  .input-options {\n    max-height: 200px;\n    overflow: scroll;\n  }\n`;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrapDropdownStyles(Component: any) {\n  return styled(Component)``;\n}\nconst StyledDropdownTags = wrapDropdownStyles(Tags);\n\nexport default function DropdownComponent({\n  customizations,\n  currentAnswer,\n  updateAnswer,\n  setAbleToSubmit,\n  showValidation,\n  showRefreshedComponents = true,\n}: QuestionProps<Answer, Customizations>) {\n  const label = customizations.prompt;\n  const optional = typeof customizations.optional === \"undefined\" ? false : customizations.optional;\n  const disableTagCreation = customizations.disableTagCreation;\n  const secondaryText = customizations.description;\n  const placeholder = customizations.placeholder;\n  const followUp = customizations.followUp;\n  const numberToChoose = customizations.numberToChoose;\n  const options = customizations.options;\n  const answerIsValid = optional || (currentAnswer?.selectedOptions.length || 0) > 0;\n  const selectedOptions = currentAnswer?.selectedOptions || [];\n\n  useEffect(() => {\n    setAbleToSubmit(answerIsValid);\n  }, [answerIsValid, setAbleToSubmit]);\n\n  const tagItemList = options.map((option) => {\n    return { value: getOptionText(option) ?? \"\", label: getOptionText(option) };\n  });\n\n  const deprecatedDropdownComponent = (\n    <Question className=\"multi-select-dropdown\">\n      {(!numberToChoose || numberToChoose > 1) && (\n        <StyledDropdownTags\n          placeholder={placeholder ? placeholder : \"Click or search here...\"}\n          description={secondaryText}\n          adornmentIcon=\"chevron-down\"\n          label={label}\n          disableTagCreation={disableTagCreation}\n          questionIsOptional={optional}\n          availableTags={selectedOptions.length === numberToChoose ? [] : tagItemList}\n          value={selectedOptions.map((option) => getOptionText(option))}\n          onTagDelete={(deletedTag: string) => {\n            updateAnswer({\n              selectedOptions: selectedOptions.filter(\n                (option) => getOptionText(option) !== deletedTag,\n              ),\n            });\n          }}\n          onTagSelect={(selectedTagString: string) => {\n            updateAnswer({\n              selectedOptions: [\n                ...selectedOptions,\n                getOptionObjectFromText(selectedTagString, customizations.options),\n              ],\n            });\n          }}\n        />\n      )}\n      {numberToChoose === 1 && (\n        <StyledDropdown\n          placeholder={placeholder ? placeholder : \"Click or search here...\"}\n          label={label}\n          description={secondaryText}\n          optional={optional}\n          adornmentIcon=\"chevron-down\"\n          availableOptions={tagItemList}\n          clearOnSelect={false}\n          onSelect={(selectedTag: string) => {\n            updateAnswer({\n              selectedOptions: [getOptionObjectFromText(selectedTag, customizations.options)],\n            });\n          }}\n          onChange={(selectedTag) => {\n            if (!selectedTag) return updateAnswer({ selectedOptions: [] });\n\n            const option = getOptionObjectFromText(selectedTag.trim(), customizations.options);\n            const answers = option ? [option] : [];\n            updateAnswer({ selectedOptions: answers });\n          }}\n        />\n      )}\n      {followUp &&\n        selectedOptions.map((option) => getOptionText(option)).includes(followUp.option) && (\n          <StyledFollowUp>\n            <QuestionLabel\n              label={followUp.prompt}\n              className=\"question-label\"\n              questionIsOptional={true}\n            />\n            {followUp.includeOpenResponse && (\n              <TextArea\n                data-test=\"select-follow-up-input\"\n                rows={3}\n                placeholder={followUp.placeholder ? followUp.placeholder : undefined}\n                onChange={({ currentTarget: { value: updatedResponse } }) =>\n                  updateAnswer({\n                    ...currentAnswer,\n                    selectedOptions: selectedOptions,\n                    followUpResponse: updatedResponse,\n                  })\n                }\n                value={currentAnswer ? currentAnswer.followUpResponse : \"\"}\n              />\n            )}\n          </StyledFollowUp>\n        )}\n    </Question>\n  );\n  const requiredErrorMessage = \"Please complete the required field.\";\n  const multiselectComponent = (\n    <>\n      <SelectQuestionWrapper\n        supplementalQuestionPrompt={label}\n        placeholder={placeholder ? placeholder : \"Select...\"}\n        optional={optional}\n        secondaryText={secondaryText}\n        value={\n          selectedOptions.length > 0\n            ? {\n                id: getOptionOid(selectedOptions[0]) || \"\",\n                label: getOptionText(selectedOptions[0]),\n              }\n            : undefined\n        }\n        options={options.map((option) => {\n          const optionLabel = getOptionText(option);\n          return {\n            id: getOptionOid(option) || \"\",\n            label: getOptionText(option) || \"\",\n            value: selectedOptions.includes(getOptionObjectFromText(optionLabel || \"\", options)),\n          };\n        })}\n        onChange={(newAnswer) => {\n          updateAnswer({\n            selectedOptions: newAnswer\n              ? [getOptionObjectFromText(newAnswer.label as string, customizations.options)]\n              : [],\n          });\n        }}\n        setAbleToSubmit={setAbleToSubmit}\n        errorMessage={!answerIsValid && showValidation ? requiredErrorMessage : undefined}\n        followUpPrompt={followUp?.prompt}\n        followUpIsOptional={true}\n        showFollowUp={followUp && getOptionText(selectedOptions[0]) === followUp?.option}\n        dataTest=\"survey-question-multi-select\"\n      ></SelectQuestionWrapper>\n    </>\n  );\n\n  return showRefreshedComponents ? multiselectComponent : deprecatedDropdownComponent;\n}\n","import { useState, useEffect } from \"react\";\nimport { useStyletron } from \"baseui\";\n\ninterface DeviceTypes {\n  isMobile: boolean;\n  isTablet: boolean;\n  isDesktop: boolean;\n}\n\nconst useDeviceType = (): DeviceTypes => {\n  const [, theme] = useStyletron();\n  const [deviceTypes, setDeviceTypes] = useState(getDeviceTypes(theme.breakpoints));\n\n  useEffect(() => {\n    const handleResize = () => {\n      setDeviceTypes(getDeviceTypes(theme.breakpoints));\n    };\n\n    // Add event listener for window resize\n    window.addEventListener(\"resize\", handleResize);\n\n    // Remove event listener on component unmount\n    return () => {\n      window.removeEventListener(\"resize\", handleResize);\n    };\n  }, [theme.breakpoints]);\n\n  return deviceTypes;\n};\n\nconst getDeviceTypes = (breakpoints: { medium: number; large: number }): DeviceTypes => {\n  const windowWidth = window.innerWidth;\n\n  return {\n    isMobile: windowWidth < breakpoints.medium,\n    isTablet: windowWidth >= breakpoints.medium && windowWidth < breakpoints.large,\n    isDesktop: windowWidth >= breakpoints.large,\n  };\n};\n\nexport default useDeviceType;\n","import React, { useState, createContext, useEffect, Dispatch, SetStateAction } from \"react\";\nimport SurveyQuestionDatePicker from \"./questions/survey_question_date_picker\";\nimport MentorshipChatGroupStudentSelect from \"./questions/mentorship_chat_group/student_select\";\nimport MentorshipChatGroupOptionalStudentInfo from \"./questions/mentorship_chat_group/optional_student_info\";\nimport MultiSelect from \"./questions/multi_select\";\nimport { gql } from \"@urql/core\";\nimport {\n  SurveyDocument,\n  SaveSurveyResponseDocument,\n  SurveyQuery,\n  Survey as SurveyType, // not great, but there's a conflicting declaration of the Survey class in this file\n  SurveyType as SurveyTypeType, // not great, but there's a conflicting declaration of the Survey class in this file\n  SurveyAnswerInput,\n  SurveyQuestionTemplateId,\n  SurveyQuestion,\n  SaveSurveyResponseMutationVariables,\n} from \"../generated/graphql\";\nimport Conversation from \"./questions/conversation\";\nimport Flags from \"./questions/flags\";\nimport Nps from \"./questions/nps\";\nimport SurveyQuestionSelect from \"./questions/select/survey_question_select\";\nimport SurveyQuestionLikert from \"./questions/likert/survey_question_likert\";\nimport RotatingLikert from \"./questions/rotating_likert\";\nimport RotatingOpenResponse from \"./questions/rotating_open_response\";\nimport RotatingCareerOpenResponse from \"./questions/rotating_career_open_response\";\nimport SurveyQuestionSelectWithSelectFollowUp from \"./questions/survey_question_select_with_select_follow_up\";\nimport Generic from \"./questions/generic/generic\";\nimport styled from \"styled-components\";\nimport CounterpartsInfo from \"./questions/counterparts_info\";\nimport SurveyQuestionNumberInput from \"./questions/survey_question_number_input\";\nimport { useQuery, useMutation } from \"urql\";\nimport SurveyQuestionOpenResponse from \"./questions/survey_question_open_response\";\nimport SurveyQuestionTextInput from \"./questions/survey_question_text_input\";\nimport DropdownComponent from \"./questions/multi_select_dropdown\";\nimport useDeviceType from \"../shared/use_device_type\";\nimport { captureError } from \"../../utils/capture_error\";\n\nexport interface QuestionProps<Answer, Customizations> {\n  customizations: Customizations;\n  currentAnswer?: Answer;\n  updateAnswer: (newAnswer: Answer) => void;\n  setAbleToSubmit: (ableToSubmit: boolean) => void;\n  questionId?: string | number;\n  maxValue?: number;\n  showValidation: boolean;\n  showRefreshedComponents?: boolean;\n  hackToHideFeedback?: boolean;\n  dataTest?: string;\n}\n\nfunction Question({\n  answer,\n  templateId,\n  customizations,\n  updateAnswer,\n  setAbleToSubmit,\n  qid,\n  questionId,\n  showValidation,\n  showRefreshedComponents,\n}: {\n  answer?: SurveyAnswerInput[\"answerJson\"];\n  templateId: SurveyQuestionTemplateId;\n  customizations: SurveyQuestion[\"customizations\"];\n  updateAnswer: (newAnswer: SurveyAnswerInput[\"answerJson\"]) => void;\n  setAbleToSubmit: (ableToSubmit: boolean) => void;\n  qid?: string | null;\n  questionId: number | string;\n  showValidation: boolean;\n  showRefreshedComponents: boolean;\n}) {\n  switch (templateId) {\n    case SurveyQuestionTemplateId.DatePicker:\n      return (\n        <SurveyQuestionDatePicker\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    case SurveyQuestionTemplateId.OpenResponse:\n      if (qid === \"signature\" && showRefreshedComponents) {\n        return (\n          <SurveyQuestionTextInput\n            currentAnswer={answer}\n            customizations={customizations}\n            updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n            setAbleToSubmit={setAbleToSubmit}\n            questionId={questionId}\n            showValidation={showValidation}\n          />\n        );\n      }\n\n      return (\n        <SurveyQuestionOpenResponse\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n          // This hack is in place because the open-response question on the Post-Session Survey\n          // leads to some answers from participants where participants/partners expect quick action.\n          // However, there is no good process for reviewing PSS responses in a timely manner.\n          // It takes PS a lot of manual time to review these responses via exports.\n          // Removing a question from the PSS \"the right way\" is high-effort due to current survey design.\n          // Additionally, the initial ask was to include a text-only (no-input) question\n          // to redirect participants to our normal helpdesk flow.\n          // This hack is acceptable from a product perspective so that we don't have the liability of\n          // having to do something with feedback that we cannot quickly and efficiently address.\n          // Ideally the entire PSS is replaced by a different solution, since there are multiple\n          // issues with the PSS as a whole.\n          hackToHideFeedback={[29, 35, 40, 46, 82, 382, 387, 6179, 6187].includes(\n            parseInt(questionId.toString()),\n          )}\n        />\n      );\n    case SurveyQuestionTemplateId.MentorshipChatGroupStudentSelect:\n      return (\n        <MentorshipChatGroupStudentSelect\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.MentorshipChatGroupOptionalStudentInfo:\n      return (\n        <MentorshipChatGroupOptionalStudentInfo\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    // Note that even though this question template is called \"MultiSelect\", currently we don't have any survey\n    // question that requires selecting multiple options. There is a property called `numberToChoose` in the customizations json\n    // that indicates how many options can be selected, but it is always set to 1 (in other words, it's a single-select question).\n    // Probably would be a good idea to refactor/rename this to avoid confusion.\n    case SurveyQuestionTemplateId.MultiSelect:\n      return (\n        <MultiSelect\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    case SurveyQuestionTemplateId.Conversation:\n      return (\n        <Conversation\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.Flags:\n      return (\n        <Flags\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.Nps:\n      return (\n        <Nps\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.Likert:\n      return (\n        <SurveyQuestionLikert\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    case SurveyQuestionTemplateId.Select:\n      return (\n        <SurveyQuestionSelect\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    case SurveyQuestionTemplateId.RotatingLikert:\n      return (\n        <RotatingLikert\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.RotatingOpenResponse:\n      return (\n        <RotatingOpenResponse\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.RotatingCareerOpenResponse:\n      return (\n        <RotatingCareerOpenResponse\n          customizations={customizations}\n          currentAnswer={answer}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.SelectWithSelectFollowUp:\n      return (\n        <SurveyQuestionSelectWithSelectFollowUp\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    case SurveyQuestionTemplateId.CounterpartsInfo:\n      return (\n        <CounterpartsInfo\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n        />\n      );\n    case SurveyQuestionTemplateId.MultiSelectDropdown:\n      return (\n        <DropdownComponent\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    case SurveyQuestionTemplateId.Generic:\n      return (\n        <Generic\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    case SurveyQuestionTemplateId.NumberInput:\n      return (\n        <SurveyQuestionNumberInput\n          currentAnswer={answer}\n          customizations={customizations}\n          updateAnswer={(newAnswer) => updateAnswer(newAnswer)}\n          setAbleToSubmit={setAbleToSubmit}\n          questionId={questionId}\n          showValidation={showValidation}\n          showRefreshedComponents={showRefreshedComponents}\n        />\n      );\n    default:\n      throw new Error(`Couldn't find survey question template ${templateId}`);\n  }\n}\n\nexport enum SurveyDisplay {\n  page,\n  banner,\n}\n\nexport const SurveyContext = createContext<{\n  surveyId: string;\n  mentorshipChatGroupId?: string;\n  mentorshipId?: string;\n  participantId: string;\n  display: SurveyDisplay;\n  programId?: string;\n}>({ participantId: \"\", surveyId: \"\", display: SurveyDisplay.page, programId: \"\" });\n\ngql`\n  query Survey(\n    $id: ID!\n    $participantId: ID\n    $surveyCustomRenderOverride: SurveyCustomRenderOverride\n    $questionFilter: SurveyQuestionFilter\n  ) {\n    survey(id: $id) {\n      id\n      name\n      description(\n        participantId: $participantId\n        surveyCustomRenderOverride: $surveyCustomRenderOverride\n      )\n      surveyType\n      questions(filter: $questionFilter, surveyCustomRenderOverride: $surveyCustomRenderOverride) {\n        id\n        qid\n        index\n        template {\n          id\n          templateId\n        }\n        customizations\n        createdInAdminTool\n      }\n    }\n  }\n`;\n\n// in addition to the survey response, we also need to query for everything that might have changed because of\n// a side effect to update the cache. for now this just includes conversation logs and # of survey responses\ngql`\n  mutation SaveSurveyResponse($inputResponse: SurveyResponseInput!) {\n    saveSurveyResponse(response: $inputResponse) {\n      errors\n      response {\n        id\n        context {\n          participantId\n          mentorshipId\n          mentorshipChatGroupId\n        }\n      }\n      user {\n        id\n        participants {\n          id\n          mentorships {\n            id\n            studentIsDisengaged\n            mentorIsDisengaged\n            mentorConversationLogs {\n              id\n            }\n            studentConversationLogs {\n              id\n            }\n          }\n          surveyResponses {\n            id\n            survey {\n              id\n            }\n          }\n        }\n        # To properly update the urql cache, we need to re-fetch all surveyResponses for this participant.\n        # We can't just fetch by id, the cache will not update.\n        surveyResponses {\n          id\n          survey {\n            id\n          }\n        }\n      }\n    }\n  }\n`;\n\nconst StyledSurvey = styled.div`\n  width: 100%;\n\n  .showRefreshedComponents {\n    margin: 0;\n  }\n\n  .question {\n    display: flex;\n    flex-direction: column;\n    padding: ${({ theme }) => theme.sizing.scale300};\n  }\n\n  .mobile {\n    padding: ${({ theme }) => theme.sizing.scale300};\n  }\n`;\n\nconst Description = styled.p`\n  font-size: ${({ theme }) => theme.font.size.header.four};\n`;\n\ninterface CustomRenderOverride {\n  userId: string;\n  programId: string;\n}\n\nexport interface SurveyState {\n  survey: SurveyType;\n  answers: { [questionId: string]: SurveyAnswerInput[\"answerJson\"] };\n  savingResponse: boolean;\n  ableToSubmit: boolean;\n  fetching: boolean;\n  setAnswers: (args: { [questionId: string]: SurveyAnswerInput[\"answerJson\"] }) => void;\n  setSavingResponse: (args: boolean) => void;\n  saveSurveyResponse: (args: SaveSurveyResponseMutationVariables) => void;\n  setIdsOfQuestionsAbleToSubmit: Dispatch<SetStateAction<string[]>>;\n  questionsWithErrors: SurveyType[\"questions\"];\n  showValidation: boolean;\n  setShowValidation: (showValidation: boolean) => void;\n}\n\nexport function useSurveyState({\n  id,\n  userId,\n  onSubmit,\n  participantId = \"\",\n  surveyCustomRenderOverride,\n}: {\n  id: string;\n  userId: string;\n  onSubmit: () => void;\n  participantId?: string;\n  surveyCustomRenderOverride?: CustomRenderOverride;\n}): SurveyState {\n  const [answers, setAnswers] = useState<{\n    [questionId: string]: SurveyAnswerInput[\"answerJson\"];\n  }>({});\n  const [idsOfQuestionsAbleToSubmit, setIdsOfQuestionsAbleToSubmit] = useState<string[]>([]);\n  const [savingResponse, setSavingResponse] = useState<boolean>(false);\n  const [saveResponseResult, saveSurveyResponse] = useMutation(SaveSurveyResponseDocument);\n  const [showValidation, setShowValidation] = useState(false);\n\n  const [{ fetching, error, data }] = useQuery({\n    query: SurveyDocument,\n    variables: {\n      id: id,\n      participantId: participantId, // needed to transform variables in Description field\n      surveyCustomRenderOverride: surveyCustomRenderOverride,\n      questionFilter: {\n        userId: userId,\n        participantId: participantId,\n      },\n    },\n    pause: !id,\n  });\n\n  useEffect(() => {\n    if (saveResponseResult.data?.saveSurveyResponse) {\n      const response = saveResponseResult.data.saveSurveyResponse;\n      if (response.errors?.length) {\n        throw new Error(`Could not save survey: ${response.errors.join(\", \")}`);\n      } else {\n        onSubmit();\n      }\n    }\n  }, [onSubmit, saveResponseResult.data?.saveSurveyResponse]);\n\n  if (fetching || data === null || !id) {\n    return {\n      fetching: true,\n      survey: {} as SurveyType,\n      ableToSubmit: false,\n      answers,\n      setAnswers,\n      saveSurveyResponse,\n      setSavingResponse,\n      savingResponse,\n      setIdsOfQuestionsAbleToSubmit,\n      questionsWithErrors: [],\n      showValidation,\n      setShowValidation,\n    };\n  }\n\n  if (error || !data || saveResponseResult.error) {\n    if (error || !data) {\n      const graphQLErrorsForAPM = error?.graphQLErrors?.join(\"; \") ?? \"\";\n      captureError(new Error(`Error fetching useSurveyQuery: ${graphQLErrorsForAPM}`));\n    }\n\n    throw new Error(\"Uh oh\");\n  }\n\n  const survey = data.survey;\n  const questionsWithErrors = survey.questions.filter(\n    (question: SurveyQuery[\"survey\"][\"questions\"][0]) =>\n      !idsOfQuestionsAbleToSubmit.includes(question.id),\n  );\n\n  const ableToSubmit = survey.questions.reduce(\n    (ableToSubmit: boolean, question: SurveyQuery[\"survey\"][\"questions\"][0]) =>\n      idsOfQuestionsAbleToSubmit.includes(question.id) ? ableToSubmit : false,\n    true,\n  );\n\n  return {\n    fetching,\n    survey,\n    answers,\n    setAnswers,\n    saveSurveyResponse,\n    setSavingResponse,\n    savingResponse,\n    setIdsOfQuestionsAbleToSubmit,\n    ableToSubmit,\n    questionsWithErrors,\n    showValidation,\n    setShowValidation,\n  };\n}\n\nexport default function Survey({\n  survey,\n  context,\n  className,\n  savingResponse,\n  answers,\n  setAnswers,\n  setIdsOfQuestionsAbleToSubmit,\n  display = SurveyDisplay.page,\n  showValidation = false,\n}: {\n  survey: SurveyType;\n  // @TODO: might need to come back and re-think this a bit. What other contexts could a survey be used for?\n  context?: {\n    mentorshipChatGroupId?: string;\n    mentorshipId?: string;\n    participantId?: string;\n    programId?: string;\n  };\n  className?: string;\n  savingResponse: boolean;\n  answers: { [questionId: string]: SurveyAnswerInput[\"answerJson\"] };\n  setAnswers: (args: { [questionId: string]: SurveyAnswerInput[\"answerJson\"] }) => void;\n  setIdsOfQuestionsAbleToSubmit: Dispatch<SetStateAction<string[]>>;\n  display?: SurveyDisplay;\n  showValidation?: boolean;\n}) {\n  const { isMobile } = useDeviceType();\n  const QUICK_CONVERSATION_LOGGING_SURVEY_ID = \"28\";\n\n  // TA-879: due to time and resource constraints, these surveys will not have a refreshed UI\n  const showRefreshedComponents =\n    survey.surveyType !== SurveyTypeType.PostSession &&\n    survey.id !== QUICK_CONVERSATION_LOGGING_SURVEY_ID;\n\n  return (\n    <StyledSurvey\n      className={`${className} ${showRefreshedComponents ? \"showRefreshedComponents\" : \"\"}`}\n      data-test=\"survey-question-accessibility\"\n    >\n      {survey.description && (\n        <Description dangerouslySetInnerHTML={{ __html: survey.description }}></Description>\n      )}\n      {/* Hide this notice on survey banners, which are limited to one question. */}\n      {!showRefreshedComponents && display !== SurveyDisplay.banner && (\n        <p>NOTE: Fields marked with an asterisk (*) are required.</p>\n      )}\n      {!savingResponse ? (\n        <SurveyContext.Provider\n          value={{ participantId: \"\", surveyId: survey.id, display, ...context }}\n        >\n          {survey.questions\n            .sort((question1, question2) => (question1.index < question2.index ? -1 : 1))\n            .map((question) => {\n              return (\n                <div\n                  className={`question ${isMobile ? \"mobile\" : \"\"}`}\n                  key={question.id}\n                  id={question.id}\n                >\n                  <Question\n                    showRefreshedComponents={showRefreshedComponents}\n                    answer={answers[question.id]}\n                    qid={question.qid}\n                    questionId={question.id}\n                    customizations={question.customizations}\n                    templateId={question.template.templateId}\n                    showValidation={showValidation}\n                    updateAnswer={(answer: string) =>\n                      setAnswers({ ...answers, [question.id]: answer })\n                    }\n                    setAbleToSubmit={(ableToSubmit: boolean) => {\n                      // we use an updater function here since we're relying on previous state, and\n                      // there could be multiple questions updating at the same time\n                      // https://reactjs.org/docs/hooks-reference.html#functional-updates\n                      setIdsOfQuestionsAbleToSubmit((currentIds) => {\n                        if (ableToSubmit) {\n                          if (!currentIds.includes(question.id)) {\n                            return [...currentIds, question.id];\n                          }\n                        } else {\n                          if (currentIds.includes(question.id)) {\n                            return currentIds.filter((questionId) => questionId !== question.id);\n                          }\n                        }\n                        return currentIds;\n                      });\n                    }}\n                  />\n                </div>\n              );\n            })}\n        </SurveyContext.Provider>\n      ) : (\n        \"Saving...\"\n      )}\n    </StyledSurvey>\n  );\n}\n"],"names":["entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","construct","x","fun","thisValue","args","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","func","thisArg","_len","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","l","element","lcElement","cleanArray","index","clone","object","newObject","property","value","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","_forceRemove","node","_removeAttribute","name","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","data","hook","_sanitizeElements","content","_isBasicCustomElement","parentNode","childNodes","childCount","i","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","StyledQuestionPrompt","styled","StyledDescription","theme","RequiredMarker","StyledLabel","QuestionLabel","label","description","questionIsOptional","htmlFor","hideRequiredMarker","dataTest","rest","jsxs","Fragment","jsx","HiddenAccessibleSpan","exports","React","require$$0","_interopDefaultLegacy","e","React__default","globalPrefix","lastId","nextId","localPrefix","resetId","setPrefix","newPrefix","getIds","count","prefix","ids","usePrevious","ref","useId","idsListRef","prevCount","prevPrefix","StyledSupplementalQuestionPromptDiv","StyledParagraphMedium","ParagraphMedium","StyledText","StyledOptionalText","PromptWithSecondaryText","supplementalQuestionPrompt","secondaryText","optional","useConstructAriaLabel","maxCharacterLimit","supplementalQuestionPromptSubstring","secondaryTextSubstring","labelSubstring","optionalSubstring","maxCharacterLimitSubString","DATEPICKER_NAMESPACE","formControlOverrides","$theme","DatepickerQuestionWrapper","errorMessage","placeholder","datepickerProps","constructAriaLabel","datepickerId","FormControl","Datepicker","StyledDatePicker","SurveyQuestionDatePicker","customizations","currentAnswer","updateAnswer","setAbleToSubmit","showValidation","showRefreshedComponents","id","minDate","maxDate","date","answerIsValidRequired","answerIsValidDate","useEffect","datepickerErrorMessage","setDatepickerErrorMessage","useState","requiredErrorMessage","dateErrorMessage","newValue","DatePickerComponent","day","selected","gql","MentorChatGroupStudentSelect","participantId","mentorshipChatGroupId","useContext","SurveyContext","fetching","error","useQuery","MentorChatGroupsDocument","answerIsValid","graphQLErrorsForAPM","_a","captureError","mentorships","matchedMentorshipsInChatGroup","mentorship","selectedStudentIds","student","user","Checkbox","StyledStudentSelect","MentorChatGroupOptionalStudentInfo","savedStudentInfo","setSavedStudentInfo","mentorshipsInChatGroup","yesNoLabel","selectLabel","RadioGroup","RadioButton","answerIndex","answer","Input","newInfo","StyledLegend","StyledFieldset","QuestionFieldsetLegend","legend","getOptionText","option","getOptionOid","getOptionObjectFromText","optionText","optionList","selectedOptionPresent","selectedOption","StyledSecondaryText","getFormControlLabel","styledSecondaryLabel","INPUT_AREA_NAMESPACE","inputOverrides","maxCharacterCount","InputQuestionWrapper","overrides","ariaLabel","inputProps","mergeOverrides","inputId","TEXT_AREA_NAMESPACE","textareaOverrides","currentCharacterCount","TextareaQuestionWrapper","textareaProps","textAreaId","Textarea","MultiSelectFollowUpQuestionType","maxCharacters","getFollowupErrorMessage","requiredAnswerIsMissing","answerExceedsCharacterLimit","MultiSelectQuestionWrapper","questionPrompt","showErrors","options","onChange","requiredAnswerCount","answerCountStrictness","setErrorMessage","ableToSubmit","selectedOptions","_b","idx","optionIsSelected","formError","_c","_d","_e","_f","_g","_h","MultiSelect","otherOption","followUpErrorMessage","deprecatedMultiSelect","CheckboxGroup","CheckBoxDisplay","updatedWriteIn","multiSelect","optionLabel","newAnswer","optionObject","modeOfCommunicationOptions","ModeOfCommunication","conversationTopicLabel","topic","ConversationTopic","ConversationTopicsQuestion","Conversation","questionId","programId","SurveyParticipantDataDocument","fetchingProgramSegment","errorProgramSegment","programSegmentData","ProgramSegmentDocument","fetchingTopics","topicsData","ConversationTopicsDocument","modeOfCommunicationLabel","topicsLabel","answeredConversationTopicsQuestion","answeredModesOfCommunicationQuestion","TextArea","hasError","TextAreaInput","className","FlagsExtraQuestion","Flags","initialCategory","categoriesFetching","categoriesError","categoriesData","FlagCategoriesDocument","category","flagCategory","program","followUpLabel","schoolSupportLabel","schoolSupportDescriptionLabel","hideSchoolSupportQuestion","sortedCategories","a","b","updatedOptions","updatedResponse","ScaleLabel","times","fn","start","end","num","list","StyledRadioButton","LikertExtraQuestion","Likert","prompt","onChangeValue","followUpPrompt","followUpResponse","followUpLowScore","followUpLowPrompt","followUpLowResponse","followUpLowQuestion","lowScoreThreshold","onChangeLowFollowUp","followUpHighScore","followUpHighPrompt","followUpHighResponse","highScoreThreshold","onChangeHighFollowUp","max","maxLabel","min","minLabel","displayValues","followUpLowDescription","display","SurveyDisplay","RadioGroupDisplay","Nps","newResponse","ALIGN","SELECT_NAMESPACE","StyledPromptWithSecondaryTextWrapper","marginbottom","StyledFollowUpWrapper","marginTop","selectOverrides","radioFormControlOverrides","RADIO_VARIATION_CUTOFF","SelectQuestionWrapper","showFollowUp","followUpIsOptional","followUpCurrentCharacterCount","followUpMaxCharacterCount","followUpValue","followUpAriaLabel","onChangeFollowUpValue","selectProps","selectId","baseuiTheme","Select","params","Radio","isOptional","getOptionsForSelectComponent","optionsForSelectComponent","optionsIncludeOtherOption","getQuestionOptions","questionOptions","questionOptionsIncludesOtherOption","StyledFollowUp","DeprecatedSelect","withOtherOption","followUp","followUpOptionSelected","optionalFollowUp","otherOptionSelected","valueProvidedForOtherOption","valueProvidedForFollowUpOption","followUpIsValid","otherOptionIsValid","DeprecatedRadioGroup","SELECT_FOLLOW_UP_CHARACTER_LIMIT","SurveyQuestionSelect","selectComponentOptions","writeIn","followUpCharacterCount","maximumCharacterLimitExceededBy","followUpRequiredAndWithinCharacterLimit","followUpNotRequiredAndWithinCharacterLimit","noFollowUpIsAsked","followUpCharacterLimitExceeded","characterLimitErrorMessage","followUpMissingButRequired","select","LIKERT_RADIO_NAMESPACE","StyledRadioLabel","StyledTextAreaContainer","likertRadioGroupOverrides","likertRadioOverrides","likertRadioGroupOverridesMobile","likertRadioOverridesMobile","LikertQuestionWrapper","onChangeFollowUp","radioGroupProps","radioValues","followUpLow","followUpHigh","followUpQuestionPrompt","followUpQuestionResponse","mobileView","deprecatedTheme","k","v","TextAreaQuestionWrapper","useNormalizeSurveyQuestionLikertCustomizations","followUpLowDescriptionLabel","followUpLowScoreThreshold","followUpLowScoreIsOptional","followUpHighScoreThreshold","followUpHighScoreIsOptional","LIKERT_FOLLOW_UP_CHARACTER_LIMIT","LIKERT_MULTI_SELECT_OTHER_OPTION_FOLLOW_UP_CHARACTER_LIMIT","useSurveyQuestionLikertValidation","followUpState","triggeredLowScoreFollowUp","triggeredHighScoreFollowUp","followUpLowMultiSelectResponse","hasOpenResponseFollowUp","hasMultiSelectFollowUp","followUpLowResponseLength","followUpHighResponseLength","followUpLowResponseWriteInLength","deprecatedAnswerIsValid","followUpLowScoreIsValid","followUpHighScoreIsValid","SurveyQuestionLikert","valueTriggersLowScoreFollowUp","valueTriggersHighScoreFollowUp","maximumCharacterLimitToRespect","displayValuesFormattedForLikert","followUpLowQuestionOptions","getValueForMultiSelectOption","followUpLowQuestionFormattedForLikert","deprecatedLikert","withoutFollowUpHighResponse","withoutFollowUpLowResponse","likert","useRotatingQuestionIndex","numberOfQuestions","surveyAudienceContext","pause","userId","AppContext","currentSurveyContext","surveyId","ParticipantSurveyResponsesDocument","contextToUse","response","RotatingLikert","questionIndex","likertQuestion","RotatingOpenResponse","question","availableMentorQuestions","studentFirstName","studentGoal","getGeneric","questions","availableStudentQuestions","mentorFirstName","getRotatingCareerOpenResponseQuestions","participant","RotatingCareerOpenResponseInput","rotatingQuestions","genericRotatingQuestions","genericQuestion","RotatingCareerOpenResponse","props","mentorshipId","PostSessionSurveyCareerQuestionDocument","SurveyQuestionSelectWithSelectFollowUp","selectedFollowUpOption","optionIsValid","followUpOptionIsTriggered","followUpOptionIsValid","deprecatedSelectWithSelectFollowUp","selectWithSelectFollowUp","StyledDeprecatedSingleSelect","StyledSingleSelect","SingleSelect","qid","transformedOptions","deprecatedSingleSelect","singleSelect","StyledMultiSelect","StyledMultiSelectContainer","StyledDeprecatedInput","StyledInput","deprecatedInput","input","Generic","followUps","updateAndScrubAnswer","tempNewFollowUps","filterFollowUpConditions","followUpsToRemove","f","newAnswers","_","followUpsToDisplay","QuestionComponent","componentForQuestionType","type","answerArray","Question","CounterpartsInfo","CounterpartsQuestionDocument","filledOut","key","userIsMentor","counterpart","updatedAnswer","NumberErrorLabel","SurveyQuestionNumberInput","showNumberError","setShowNumberError","numericInputErrorMessage","setNumericInputErrorMessage","followUpQuestionErrorMessage","setfollowUpQuestionErrorMessage","touched","setTouched","showMaxCharactersError","setShowMaxCharactersError","currentAnswerValue","maxValue","isFollowUpQuestionAnswerValid","shouldShowFollowUp","numericInputAnswerIsValid","followUpQuestionAnswerIsValid","deprecatedNumberInput","numberIsProperFormat","numberIsWithinValidRange","numberInput","SurveyQuestionOpenResponse","hackToHideFeedback","deprecatedOpenResponse","SurveyQuestionTextInput","hasNoOptionalityError","hasNoLengthError","c","d","g","h","m","n","p","q","t","u","r","reactIs_production_min","reactIsModule","o","s","w","W","H","y","M","E","C","I","T","B","V","D","L","F","S","X","idCounter","noop","scrollIntoView","menuNode","actions","compute","_ref","el","top","left","isOrContainsNode","child","environment","result","debounce","time","timeoutId","cancel","wrapper","callAllEventHandlers","fns","event","_len3","_key3","handleRefs","_len4","refs","_key4","generateId","getState","state","prevState","isControlledProp","normalizeArrowKey","keyCode","getHighlightedIndex","offset","items","isItemDisabled","circular","itemsLastIndex","current","highlightedIndex","getNonDisabledIndex","backwards","_index","targetWithinDownshift","target","downshiftElements","checkActiveElement","contextNode","cleanupStatus","documentProp","getStatusDiv","statusDiv","setStatus","status","div","cleanupStatusDiv","dropdownDefaultStateValues","callOnChangeProps","action","newState","changes","invokeOnChangeHandler","_extends","handler","capitalizeString","stateReducer","updateA11yStatus","useIsomorphicLayoutEffect","useLayoutEffect","useElementIds","labelId","menuId","getItemId","toggleButtonId","reactId","elementIdsRef","useRef","_ref2","_ref2$id","getItemAndIndex","itemProp","indexProp","item","string","useLatestRef","val","useEnhancedReducer","reducer","createInitialState","isStateEqual","prevStateRef","actionRef","enhancedReducer","useCallback","_useReducer","useReducer","dispatch","propsRef","dispatchWithProps","shouldCallOnChangeProps","defaultProps$3","getDefaultValue$1","propKey","defaultStateValues","defaultValue","getInitialValue$1","initialValue","getInitialState$2","selectedItem","isOpen","getInitialHighlightedIndex","inputValue","getHighlightedIndexOnOpen","initialHighlightedIndex","defaultHighlightedIndex","itemToKey","useMouseAndTouchTracker","handleBlur","downshiftElementsRefs","mouseAndTouchTrackersRef","onMouseDown","onMouseUp","onTouchStart","onTouchMove","onTouchEnd","useGetterPropsCalledChecker","useA11yMessageStatus","getA11yStatusMessage","dependencyArray","isInitialMount","useIsInitialMount","useScrollIntoView","_ref3","itemRefs","getItemNodeFromIndex","menuElement","scrollIntoViewProp","shouldScrollRef","getChangesOnSelection","_props$items","shouldSelect","isDropdownsStateEqual","isInitialMountRef","getDefaultHighlightedIndex","commonPropTypes","PropTypes","commonDropdownPropTypes","downshiftCommonReducer","stateChangeTypes","__assign","InputKeyDownArrowDown","InputKeyDownArrowUp","InputKeyDownEscape","InputKeyDownHome","InputKeyDownEnd","InputKeyDownPageUp","InputKeyDownPageDown","InputKeyDownEnter","InputChange","InputBlur","InputClick","MenuMouseLeave","ItemMouseMove","ItemClick","ToggleButtonClick","FunctionToggleMenu","FunctionOpenMenu","FunctionCloseMenu","FunctionSetHighlightedIndex","FunctionSelectItem","FunctionSetInputValue","FunctionReset$1","ControlledPropUpdatedSelectedItem","stateChangeTypes$1","getInitialState$1","initialState","useControlledReducer","previousSelectedItemRef","_useEnhancedReducer","shouldCallDispatch","defaultProps$1","downshiftUseComboboxReducer","altKey","_excluded$1","_excluded2$1","_excluded3","_excluded4","useCombobox","userProps","_useControlledReducer","menuRef","inputRef","toggleButtonRef","elementIds","previousResultCountRef","latest","focusOnOpen","mouseAndTouchTrackers","useMemo","setGetterPropCallInfo","_inputRef$current","inputKeyDownHandlers","latestState","getLabelProps","labelProps","getMenuProps","_temp","_temp2","_extends2","onMouseLeave","_ref$refKey","refKey","_objectWithoutPropertiesLoose","getItemProps","_temp3","_extends3","_ref4","_ref3$refKey","onMouseMove","onClick","disabledProp","_latest$current","latestProps","_getItemAndIndex","disabled","onSelectKey","customClickHandler","itemHandleMouseMove","itemHandleClick","itemHandleMouseDown","itemNode","getToggleButtonProps","_temp4","_extends4","_ref5","_ref5$refKey","toggleButtonHandleClick","toggleButtonNode","getInputProps","_temp5","_temp6","_extends5","_ref6","onKeyDown","onInput","onBlur","_ref6$refKey","_ref7","inputHandleKeyDown","inputHandleChange","inputHandleBlur","isBlurByTabChange","inputHandleClick","onChangeKey","eventHandlers","_eventHandlers","inputNode","toggleMenu","closeMenu","openMenu","setHighlightedIndex","newHighlightedIndex","selectItem","newSelectedItem","setInputValue","newInputValue","reset","ChipGroup","StyledChip","color","ChipColors","Chip","onDelete","FontAwesomeIcon","TagsInputWrapper","StyledTagsContainer","StyledOptions","StyledOption","isHighlighted","isDisabled","TagsInput","onTagSelect","onTagCreate","helperText","toggleTip","adornmentIcon","createTagLabel","availableTags","disableTagCreation","onTagDelete","tagLabelPlural","formattedTags","setFormattedTags","inputItems","setInputItems","valueIsSelected","isCustomValue","itemsToSet","customInputItem","getFormattedTags","availableTag","availableTagsValues","valueToFind","handleTagDelete","deletedItem","createElement","selectedValue","optionData","InputAutocompleteWrapper","maxHeight","InputAutocomplete","onSelect","availableOptions","defaultIsOpen","clearOnSelect","onMenuScrollToBottom","formattedOptions","availableOption","prevOptions","optionsMatch","handleOptionsScroll","previous","currentOption","StyledDropdown","wrapDropdownStyles","Component","StyledDropdownTags","Tags","DropdownComponent","numberToChoose","tagItemList","deprecatedDropdownComponent","deletedTag","selectedTagString","selectedTag","multiselectComponent","useDeviceType","useStyletron","deviceTypes","setDeviceTypes","getDeviceTypes","handleResize","breakpoints","windowWidth","templateId","SurveyQuestionTemplateId","MentorshipChatGroupStudentSelect","MentorshipChatGroupOptionalStudentInfo","SurveyDisplay2","createContext","StyledSurvey","Description","useSurveyState","onSubmit","surveyCustomRenderOverride","answers","setAnswers","idsOfQuestionsAbleToSubmit","setIdsOfQuestionsAbleToSubmit","savingResponse","setSavingResponse","saveResponseResult","saveSurveyResponse","useMutation","SaveSurveyResponseDocument","setShowValidation","SurveyDocument","survey","questionsWithErrors","Survey","context","isMobile","SurveyTypeType","question1","question2","currentIds"],"mappings":"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","x_google_ignoreList":[0,3,22,44,45,46,47]}