{
  "version": 3,
  "sources": ["../../../../../node_modules/ftdomdelegate/lib/delegate.js", "../../../../../node_modules/ftdomdelegate/lib/index.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/event-observer.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/standard-type.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/data-hook.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/behavior/behavior.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/components/utilities/atomic-helpers.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/components/utilities/type-checkers.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/utilities.scss", "../../../../unprocessed/apps/teachers-digital-platform/js/AtomicComponent.js", "../../../../unprocessed/apps/teachers-digital-platform/js/BaseTransition.js", "../../../../unprocessed/apps/teachers-digital-platform/js/ExpandableTransition.js", "../../../../unprocessed/apps/teachers-digital-platform/js/Expandable.js", "../../../../unprocessed/apps/teachers-digital-platform/js/ExpandableFacetTransition.js", "../../../../unprocessed/apps/teachers-digital-platform/js/expandable-facets.js", "../../../../unprocessed/apps/teachers-digital-platform/js/expandable-mobile.js", "../../../../unprocessed/apps/teachers-digital-platform/js/search-utils.js", "../../../../../node_modules/@cfpb/cfpb-analytics/src/cfpb-analytics.js", "../../../../unprocessed/apps/teachers-digital-platform/js/tdp-analytics.js", "../../../../unprocessed/apps/teachers-digital-platform/js/search.js", "../../../../unprocessed/apps/teachers-digital-platform/js/index.js"],
  "sourcesContent": ["/*jshint browser:true, node:true*/\n/* global HTMLDocument */\n\n'use strict';\n\nmodule.exports = Delegate;\n\n/**\n * DOM event delegator\n *\n * The delegator will listen\n * for events that bubble up\n * to the root node.\n *\n * @constructor\n * @param {Node|string} [root] The root node or a selector string matching the root node\n */\nfunction Delegate(root) {\n\n  /**\n   * Maintain a map of listener\n   * lists, keyed by event name.\n   *\n   * @type Object\n   */\n  this.listenerMap = [{}, {}];\n  if (root) {\n    this.root(root);\n  }\n\n  /** @type function() */\n  this.handle = Delegate.prototype.handle.bind(this);\n\n  // Cache of event listeners removed during an event cycle\n  this._removedListeners = [];\n}\n\n/**\n * Start listening for events\n * on the provided DOM element\n *\n * @param  {Node|string} [root] The root node or a selector string matching the root node\n * @returns {Delegate} This method is chainable\n */\nDelegate.prototype.root = function(root) {\n  var listenerMap = this.listenerMap;\n  var eventType;\n\n  // Remove master event listeners\n  if (this.rootElement) {\n    for (eventType in listenerMap[1]) {\n      if (listenerMap[1].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, true);\n      }\n    }\n    for (eventType in listenerMap[0]) {\n      if (listenerMap[0].hasOwnProperty(eventType)) {\n        this.rootElement.removeEventListener(eventType, this.handle, false);\n      }\n    }\n  }\n\n  // If no root or root is not\n  // a dom node, then remove internal\n  // root reference and exit here\n  if (!root || !root.addEventListener) {\n    if (this.rootElement) {\n      delete this.rootElement;\n    }\n    return this;\n  }\n\n  /**\n   * The root node at which\n   * listeners are attached.\n   *\n   * @type Node\n   */\n  this.rootElement = root;\n\n  // Set up master event listeners\n  for (eventType in listenerMap[1]) {\n    if (listenerMap[1].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, true);\n    }\n  }\n  for (eventType in listenerMap[0]) {\n    if (listenerMap[0].hasOwnProperty(eventType)) {\n      this.rootElement.addEventListener(eventType, this.handle, false);\n    }\n  }\n\n  return this;\n};\n\n/**\n * @param {string} eventType\n * @returns boolean\n */\nDelegate.prototype.captureForType = function(eventType) {\n  return ['blur', 'error', 'focus', 'load', 'resize', 'scroll'].indexOf(eventType) !== -1;\n};\n\n/**\n * Attach a handler to one\n * event for all elements\n * that match the selector,\n * now or in the future\n *\n * The handler function receives\n * three arguments: the DOM event\n * object, the node that matched\n * the selector while the event\n * was bubbling and a reference\n * to itself. Within the handler,\n * 'this' is equal to the second\n * argument.\n *\n * The node that actually received\n * the event can be accessed via\n * 'event.target'.\n *\n * @param {string} eventType Listen for these events\n * @param {string|undefined} selector Only handle events on elements matching this selector, if undefined match root element\n * @param {function()} handler Handler function - event data passed here will be in event.data\n * @param {boolean} [useCapture] see 'useCapture' in <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener>\n * @returns {Delegate} This method is chainable\n */\nDelegate.prototype.on = function(eventType, selector, handler, useCapture) {\n  var root, listenerMap, matcher, matcherParam;\n\n  if (!eventType) {\n    throw new TypeError('Invalid event type: ' + eventType);\n  }\n\n  // handler can be passed as\n  // the second or third argument\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  }\n\n  // Fallback to sensible defaults\n  // if useCapture not set\n  if (useCapture === undefined) {\n    useCapture = this.captureForType(eventType);\n  }\n\n  if (typeof handler !== 'function') {\n    throw new TypeError('Handler must be a type of Function');\n  }\n\n  root = this.rootElement;\n  listenerMap = this.listenerMap[useCapture ? 1 : 0];\n\n  // Add master handler for type if not created yet\n  if (!listenerMap[eventType]) {\n    if (root) {\n      root.addEventListener(eventType, this.handle, useCapture);\n    }\n    listenerMap[eventType] = [];\n  }\n\n  if (!selector) {\n    matcherParam = null;\n\n    // COMPLEX - matchesRoot needs to have access to\n    // this.rootElement, so bind the function to this.\n    matcher = matchesRoot.bind(this);\n\n  // Compile a matcher for the given selector\n  } else if (/^[a-z]+$/i.test(selector)) {\n    matcherParam = selector;\n    matcher = matchesTag;\n  } else if (/^#[a-z0-9\\-_]+$/i.test(selector)) {\n    matcherParam = selector.slice(1);\n    matcher = matchesId;\n  } else {\n    matcherParam = selector;\n    matcher = matches;\n  }\n\n  // Add to the list of listeners\n  listenerMap[eventType].push({\n    selector: selector,\n    handler: handler,\n    matcher: matcher,\n    matcherParam: matcherParam\n  });\n\n  return this;\n};\n\n/**\n * Remove an event handler\n * for elements that match\n * the selector, forever\n *\n * @param {string} [eventType] Remove handlers for events matching this type, considering the other parameters\n * @param {string} [selector] If this parameter is omitted, only handlers which match the other two will be removed\n * @param {function()} [handler] If this parameter is omitted, only handlers which match the previous two will be removed\n * @returns {Delegate} This method is chainable\n */\nDelegate.prototype.off = function(eventType, selector, handler, useCapture) {\n  var i, listener, listenerMap, listenerList, singleEventType;\n\n  // Handler can be passed as\n  // the second or third argument\n  if (typeof selector === 'function') {\n    useCapture = handler;\n    handler = selector;\n    selector = null;\n  }\n\n  // If useCapture not set, remove\n  // all event listeners\n  if (useCapture === undefined) {\n    this.off(eventType, selector, handler, true);\n    this.off(eventType, selector, handler, false);\n    return this;\n  }\n\n  listenerMap = this.listenerMap[useCapture ? 1 : 0];\n  if (!eventType) {\n    for (singleEventType in listenerMap) {\n      if (listenerMap.hasOwnProperty(singleEventType)) {\n        this.off(singleEventType, selector, handler);\n      }\n    }\n\n    return this;\n  }\n\n  listenerList = listenerMap[eventType];\n  if (!listenerList || !listenerList.length) {\n    return this;\n  }\n\n  // Remove only parameter matches\n  // if specified\n  for (i = listenerList.length - 1; i >= 0; i--) {\n    listener = listenerList[i];\n\n    if ((!selector || selector === listener.selector) && (!handler || handler === listener.handler)) {\n      this._removedListeners.push(listener);\n      listenerList.splice(i, 1);\n    }\n  }\n\n  // All listeners removed\n  if (!listenerList.length) {\n    delete listenerMap[eventType];\n\n    // Remove the main handler\n    if (this.rootElement) {\n      this.rootElement.removeEventListener(eventType, this.handle, useCapture);\n    }\n  }\n\n  return this;\n};\n\n\n/**\n * Handle an arbitrary event.\n *\n * @param {Event} event\n */\nDelegate.prototype.handle = function(event) {\n  var i, l, type = event.type, root, phase, listener, returned, listenerList = [], target, /** @const */ EVENTIGNORE = 'ftLabsDelegateIgnore';\n\n  if (event[EVENTIGNORE] === true) {\n    return;\n  }\n\n  target = event.target;\n\n  // Hardcode value of Node.TEXT_NODE\n  // as not defined in IE8\n  if (target.nodeType === 3) {\n    target = target.parentNode;\n  }\n\n  // Handle SVG <use> elements in IE\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  }\n\n  root = this.rootElement;\n\n  phase = event.eventPhase || ( event.target !== event.currentTarget ? 3 : 2 );\n  \n  switch (phase) {\n    case 1: //Event.CAPTURING_PHASE:\n      listenerList = this.listenerMap[1][type];\n    break;\n    case 2: //Event.AT_TARGET:\n      if (this.listenerMap[0] && this.listenerMap[0][type]) listenerList = listenerList.concat(this.listenerMap[0][type]);\n      if (this.listenerMap[1] && this.listenerMap[1][type]) listenerList = listenerList.concat(this.listenerMap[1][type]);\n    break;\n    case 3: //Event.BUBBLING_PHASE:\n      listenerList = this.listenerMap[0][type];\n    break;\n  }\n\n  var toFire = [];\n\n  // Need to continuously check\n  // that the specific list is\n  // still populated in case one\n  // of the callbacks actually\n  // causes the list to be destroyed.\n  l = listenerList.length;\n  while (target && l) {\n    for (i = 0; i < l; i++) {\n      listener = listenerList[i];\n\n      // Bail from this loop if\n      // the length changed and\n      // no more listeners are\n      // defined between i and l.\n      if (!listener) {\n        break;\n      }\n\n      if(\n        target.tagName &&\n        [\"button\", \"input\", \"select\", \"textarea\"].indexOf(target.tagName.toLowerCase()) > -1 &&\n        target.hasAttribute(\"disabled\")\n      ) {\n        // Remove things that have previously fired\n        toFire = [];\n      }\n      // Check for match and fire\n      // the event if there's one\n      //\n      // TODO:MCG:20120117: Need a way\n      // to check if event#stopImmediatePropagation\n      // was called. If so, break both loops.\n      else if (listener.matcher.call(target, listener.matcherParam, target)) {\n        toFire.push([event, target, listener]);\n      }\n    }\n\n    // TODO:MCG:20120117: Need a way to\n    // check if event#stopPropagation\n    // was called. If so, break looping\n    // through the DOM. Stop if the\n    // delegation root has been reached\n    if (target === root) {\n      break;\n    }\n\n    l = listenerList.length;\n\n    // Fall back to parentNode since SVG children have no parentElement in IE\n    target = target.parentElement || target.parentNode;\n\n    // Do not traverse up to document root when using parentNode, though\n    if (target instanceof HTMLDocument) {\n      break;\n    }\n  }\n\n  var ret;\n\n  for(i=0; i<toFire.length; i++) {\n    // Has it been removed during while the event function was fired\n    if(this._removedListeners.indexOf(toFire[i][2]) > -1) {\n      continue;\n    }\n    returned = this.fire.apply(this, toFire[i]);\n\n    // Stop propagation to subsequent\n    // callbacks if the callback returned\n    // false\n    if (returned === false) {\n      toFire[i][0][EVENTIGNORE] = true;\n      toFire[i][0].preventDefault();\n      ret = false;\n      break;\n    }\n  }\n\n  return ret;\n};\n\n/**\n * Fire a listener on a target.\n *\n * @param {Event} event\n * @param {Node} target\n * @param {Object} listener\n * @returns {boolean}\n */\nDelegate.prototype.fire = function(event, target, listener) {\n  return listener.handler.call(target, event, target);\n};\n\n/**\n * Check whether an element\n * matches a generic selector.\n *\n * @type function()\n * @param {string} selector A CSS selector\n */\nvar matches = (function(el) {\n  if (!el) return;\n  var p = el.prototype;\n  return (p.matches || p.matchesSelector || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || p.oMatchesSelector);\n}(Element));\n\n/**\n * Check whether an element\n * matches a tag selector.\n *\n * Tags are NOT case-sensitive,\n * except in XML (and XML-based\n * languages such as XHTML).\n *\n * @param {string} tagName The tag name to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\nfunction matchesTag(tagName, element) {\n  return tagName.toLowerCase() === element.tagName.toLowerCase();\n}\n\n/**\n * Check whether an element\n * matches the root.\n *\n * @param {?String} selector In this case this is always passed through as null and not used\n * @param {Element} element The element to test with\n * @returns boolean\n */\nfunction matchesRoot(selector, element) {\n  /*jshint validthis:true*/\n  if (this.rootElement === window) {\n    return (\n      // Match the outer document (dispatched from document)\n      element === document ||\n      // The <html> element (dispatched from document.body or document.documentElement)\n      element === document.documentElement ||\n      // Or the window itself (dispatched from window)\n      element === window\n    );\n  }\n  return this.rootElement === element;\n}\n\n/**\n * Check whether the ID of\n * the element in 'this'\n * matches the given ID.\n *\n * IDs are case-sensitive.\n *\n * @param {string} id The ID to test against\n * @param {Element} element The element to test with\n * @returns boolean\n */\nfunction matchesId(id, element) {\n  return id === element.id;\n}\n\n/**\n * Short hand for off()\n * and root(), ie both\n * with no parameters\n *\n * @return void\n */\nDelegate.prototype.destroy = function() {\n  this.off();\n  this.root();\n};\n", "/*jshint browser:true, node:true*/\n\n'use strict';\n\n/**\n * @preserve Create and manage a DOM event delegator.\n *\n * @codingstandard ftlabs-jsv2\n * @copyright The Financial Times Limited [All Rights Reserved]\n * @license MIT License (see LICENSE.txt)\n */\nvar Delegate = require('./delegate');\n\nmodule.exports = function(root) {\n  return new Delegate(root);\n};\n\nmodule.exports.Delegate = Delegate;\n", "/**\n * @typedef {(options: unknown) => void} EventCallback\n */\n\n/**\n * EventObserver\n * @class\n * @classdesc Used to create an object\n *   that can dispatch and listen to custom events.\n * @returns {object} An EventObserver instance.\n */\nfunction EventObserver() {\n  // The events registered on this instance.\n  const _events = {};\n\n  /**\n   * Register an event listener.\n   * @param {string} event - The event name to listen for.\n   * @param {EventCallback} callback - The function called when the event has fired.\n   * @returns {object} The instance this EventObserver instance is decorating.\n   */\n  function addEventListener(event, callback) {\n    if ({}.hasOwnProperty.call(_events, event)) {\n      _events[event].push(callback);\n    } else {\n      _events[event] = [callback];\n    }\n\n    return this;\n  }\n\n  /**\n   * Remove an added event listener.\n   * Must match a call made to addEventListener.\n   * @param {string} event - The event name to remove.\n   * @param {EventCallback} callback - The function attached to the event.\n   * @returns {object} The instance this EventObserver instance is decorating.\n   */\n  function removeEventListener(event, callback) {\n    if (!{}.hasOwnProperty.call(_events, event)) {\n      return this;\n    }\n\n    const index = _events[event].indexOf(callback);\n    // Check if there are any callbacks associated with a particular event.\n    if (index !== -1) {\n      _events[event].splice(index, 1);\n    }\n\n    return this;\n  }\n\n  /**\n   * Broadcast an event.\n   * @param {string} event - The type of event to broadcast.\n   * @param {object} [options] - The event object to pass to the event handler.\n   * @returns {object} The instance this EventObserver instance is decorating.\n   */\n  function dispatchEvent(event, options) {\n    if (!{}.hasOwnProperty.call(_events, event)) {\n      return this;\n    }\n\n    options = options || {};\n\n    const evts = _events[event];\n    for (let i = 0, len = evts.length; i < len; i++) {\n      evts[i].call(this, options);\n    }\n\n    return this;\n  }\n\n  this.addEventListener = addEventListener;\n  this.removeEventListener = removeEventListener;\n  this.dispatchEvent = dispatchEvent;\n  this.getRegisteredEvents = () => _events;\n\n  return this;\n}\n\nexport { EventObserver };\n", "/**\n * @constant\n * @type {string}\n * @description\n * Constant for the name of the data-* attribute set on\n * HTML DOM elements for access by JavaScript.\n */\nconst JS_HOOK = 'data-js-hook';\n\n/**\n * @constant\n * @type {string}\n * @description\n * Flag prefix for settings that describe what JavaScript\n * behaviors should be attached to a component.\n * This would be set in the markup and initialized when\n * the JavaScript loads.\n * @example\n * A component may flag that it has certain JavaScript behaviors attached,\n * such as:\n * `data-js-hook=\"behavior_flyout-menu behavior_clearable-input\"`,\n * which defines that two scripts (FlyoutMenu) and (ClearableInput)\n * should access this DOM element and initialize its behaviors.\n */\nconst BEHAVIOR_PREFIX = 'behavior_';\n\n/**\n * @constant\n * @type {string}\n * @description\n * Flag prefix for settings related to changes in a components\n * state set in the data-* JavaScript hook.\n * @example\n * A component may flag that it has been initialized by setting\n * `data-js-hook=\"state_atomic_init\"` after page load.\n * Which specifies that the init method of a atomic constructor\n * has been called, such as\n * `var globalSearch = new GlobalSearch( 'm-global-search' ).init()`.\n */\nconst STATE_PREFIX = 'state_';\n\nexport { JS_HOOK, BEHAVIOR_PREFIX, STATE_PREFIX };\n", "import { JS_HOOK } from './standard-type.js';\n\n/**\n * @param {HTMLElement} element - DOM element.\n * @param {string} value - Value to check as existing as a JS data-* hook value.\n * @returns {boolean} True if the data-* hook value exists, false otherwise.\n */\nfunction contains(element, value) {\n  if (!element) {\n    return false;\n  }\n  let values = element.getAttribute(JS_HOOK);\n  // If JS data-* hook is not set return immediately.\n  if (!values) {\n    return false;\n  }\n  values = values.split(' ');\n\n  return values.indexOf(value) > -1 ? true : false;\n}\n\n/**\n * @param {HTMLElement} element - DOM element.\n * @param {string} value - Value to add to the element's JS data-* hook.\n * @returns {string} The value that was added.\n * @throws {Error} If supplied value contains a space,\n *   meaning it would be two values, which is likely a typo.\n */\nfunction add(element, value) {\n  if (contains(element, value)) return value;\n\n  if (value.indexOf(' ') !== -1) {\n    const msg = JS_HOOK + ' values cannot contain spaces!';\n    throw new Error(msg);\n  }\n\n  const values = element.getAttribute(JS_HOOK);\n  if (values !== null) {\n    value = values + ' ' + value;\n  }\n  element.setAttribute(JS_HOOK, value);\n\n  return value;\n}\n\nexport { add, contains };\n", "/**\n * @typedef {(options: unknown) => void} EventCallback\n */\n\n/* ==========================================================================\n   Dom Behaviors\n   Behaviors are functionality that can be shared between different pieces\n   of markup. They are not strictly atomic, though they likely are used\n   on atomic components. An example of shared behavior may be a menu that\n   expands and collapses and sets the aria-expanded attribute on the HTML.\n   Or an input field that can be cleared by clicking an (x) button in the\n   input. These are both behaviors that may appear in different parts of\n   the codebase, but could share the same functionality.\n   Behaviors are added through the `data-js-hook` attribute on the HTML\n   and have a prefix of `behavior_`\n   (both those designators are set in modules/util/standard-type.js).\n   For example, `behaviors/FlyoutMenu.js` defines the behavior of\n   expanding and collapsing an expandable menu. At a minimum, three things\n   need to be defined: (A) The containing scope of the menu, (B) the trigger\n   to activate the menu, and (C) the content to show/hide when the trigger\n   is clicked. So the markup looks something like:\n   <div data-js-hook=\"behavior_flyout-menu\">\n     <button data-js-hook=\"behavior_flyout-menu_trigger\">\n     <div data-js-hook=\"behavior_flyout-menu_content\">\u2026</div>\n   </div>\n   ========================================================================== */\n\nimport { BEHAVIOR_PREFIX, JS_HOOK } from '../standard-type.js';\nimport { contains } from '../data-hook.js';\n\n/**\n * @param {string} behaviorSelector - Behavior type used to find the element\n *   within the dom.\n * @param {HTMLElement} baseElement - Containing element for the behavior element.\n * @returns {Array|NodeList} behaviorElements if it exists in the dom,\n *   null otherwise.\n */\nfunction _findElements(behaviorSelector, baseElement) {\n  baseElement = baseElement || document;\n  // eslint-disable-next-line no-useless-assignment\n  let behaviorElements = [];\n\n  try {\n    behaviorElements = baseElement.querySelectorAll(behaviorSelector);\n  } catch (error) {\n    const msg = `${behaviorSelector} not found in DOM! ${error}`;\n    throw new Error(msg, {\n      cause: error,\n    });\n  }\n\n  if (\n    behaviorElements.length === 0 &&\n    behaviorSelector.indexOf(BEHAVIOR_PREFIX) === -1\n  ) {\n    behaviorElements = behaviorFind(behaviorSelector, baseElement);\n  }\n\n  return behaviorElements;\n}\n\n/**\n * @param {( string|HTMLElement|Array|NodeList )} behaviorElement - Used to\n *   query dom for elements.\n * @param {string} event - Event type to add to element.\n * @param {EventCallback} eventHandler - Callback for event.\n * @param {HTMLElement} baseElement - Containing element\n *   for the behavior element.\n * @returns {Array|NodeList} if it exists in the dom, null otherwise.\n */\nfunction behaviorAttach(behaviorElement, event, eventHandler, baseElement) {\n  let behaviorElements = [];\n\n  if (behaviorElement instanceof NodeList === true) {\n    behaviorElements = behaviorElement;\n  } else if (behaviorElement instanceof Node === true) {\n    behaviorElements = [behaviorElement];\n  } else if (typeof behaviorElement === 'string') {\n    behaviorElements = _findElements(behaviorElement, baseElement);\n  }\n\n  for (let i = 0, len = behaviorElements.length; i < len; i++) {\n    behaviorElements[i].addEventListener(event, eventHandler, false);\n  }\n\n  return behaviorElements;\n}\n\n/**\n * @param {HTMLElement} element - The DOM element within which to search\n *   for the behavior in the data-js-hook attribute.\n * @param {string} behaviorDataAttr - The value in the data-js-hook.\n *   This is the name of the behavior.\n *   E.g. `behavior_flyout-menu`, `behavior_flyout-menu_content`.\n * @returns {HTMLElement} The DOM element that has an attached behavior.\n * @throws {Error} If data-js-hook attribute value was not found on DOM element.\n */\nfunction checkBehaviorDom(element, behaviorDataAttr) {\n  // Check that the behavior is found on the passed DOM node.\n  let dom;\n\n  if (contains(element, behaviorDataAttr)) {\n    dom = element;\n    return dom;\n  }\n\n  /* If the passed DOM node isn't null,\n     query the node to see if it's in the children. */\n  if (element) {\n    const selector = '[' + JS_HOOK + '=' + behaviorDataAttr + ']';\n    dom = element.querySelector(selector);\n  }\n\n  if (!dom) {\n    const msg = behaviorDataAttr + ' behavior not found on passed DOM node!';\n    throw new Error(msg);\n  }\n\n  return dom;\n}\n\n/**\n * @param {string} behaviorSelector - Behavior type used to find\n *   the element within the dom.\n * @param {HTMLElement} baseElement - Containing element\n *   for the behavior element.\n * @returns {NodeList} if it exists in the dom, null otherwise.\n */\nfunction behaviorFind(behaviorSelector, baseElement) {\n  behaviorSelector = JS_HOOK + '*=' + BEHAVIOR_PREFIX + behaviorSelector;\n  behaviorSelector = '[' + behaviorSelector + ']';\n\n  return _findElements(behaviorSelector, baseElement);\n}\n\n// Expose public methods.\nexport { behaviorAttach, checkBehaviorDom, behaviorFind };\n", "/* ==========================================================================\n   Atomic Helpers.\n   Utilities for helping validate atomic design element architecture.\n   In descending order of scope, atomic components are:\n   - Page\n   - Template\n   - Organism\n   - Molecule\n   - Atom\n   ========================================================================= */\n\nimport { add, contains } from '../../utilities/data-hook.js';\nimport { STATE_PREFIX } from '../../utilities/standard-type.js';\n\n/**\n * @constant\n * @type {string}\n * @description\n * Flag that gets set on an atomic component after its .init()\n * method has been called. This is used so that an atomic\n * component won't get initialized a second time after it\n * has already been initialized.\n */\nconst INIT_FLAG = STATE_PREFIX + 'atomic_init';\n\n/**\n * @param {HTMLElement} element - The DOM element within which to search for\n *   the atomic element class.\n * @param {string} baseClass - The CSS class name for the atomic element.\n * @returns {HTMLElement} The DOM element for the atomic element.\n * @throws {Error} If DOM element passed into the atomic element is not valid.\n */\nfunction _verifyElementExists(element, baseClass) {\n  if (!element || !element.classList) {\n    const msg =\n      element +\n      ' is not valid. ' +\n      'Check that element is a DOM node with class \"' +\n      baseClass +\n      '\"';\n    throw new Error(msg);\n  }\n\n  return element;\n}\n\n/**\n * @param {HTMLElement} element - The DOM element within which to search\n *   for the atomic element class.\n * @param {string} baseClass - The CSS class name for the atomic element.\n * @returns {HTMLElement} The DOM element for the atomic element.\n * @throws {Error} If baseClass was not found on the element.\n */\nfunction _verifyClassExists(element, baseClass) {\n  const dom = element.classList.contains(baseClass)\n    ? element\n    : element.querySelector('.' + baseClass);\n  if (!dom) {\n    const msg = baseClass + ' not found on or in passed DOM node.';\n    throw new Error(msg);\n  }\n\n  return dom;\n}\n\n/**\n * Check that a particular element passed into the constructor of\n * an atomic component exists and that the correct atomic class\n * is present on the element.\n * @param {HTMLElement} element - The DOM element within which to search\n *   for the atomic element class.\n * @param {string} baseClass - The CSS class name for the atomic element.\n * @returns {HTMLElement} The DOM element for the atomic element.\n * @throws {Error} If DOM element passed into the atomic element is not valid.\n */\nfunction checkDom(element, baseClass) {\n  _verifyElementExists(element, baseClass);\n  const dom = _verifyClassExists(element, baseClass);\n\n  return dom;\n}\n\n/**\n * Set a flag on an atomic component when it is initialized.\n * Use the returned boolean to handle cases where an atomic component\n * is initializing when it has already been initialized elsewhere.\n * @param {HTMLElement} element - The DOM element for the atomic component.\n * @returns {boolean} True if the init data-js-* hook attribute was set,\n *   false otherwise.\n */\nfunction setInitFlag(element) {\n  if (contains(element, INIT_FLAG)) {\n    return false;\n  }\n\n  add(element, INIT_FLAG);\n\n  return true;\n}\n\n/**\n * @param {string} selector - Selector to search for in the document.\n * @param {new (...args: unknown[]) => object} Constructor - A constructor function.\n * @param {HTMLElement} [scope] - A dom node in which to query the selector.\n *   If not supplied, it defaults to the `document`.\n * @param {object} config - Configuration will be provided to the Constructor's init()\n * @returns {Array<object>} List of instances that were instantiated.\n */\nfunction instantiateAll(selector, Constructor, scope, config = {}) {\n  const base = scope || document;\n  const elements = base.querySelectorAll(selector);\n  const insts = [];\n  let inst;\n  let element;\n  for (let i = 0, len = elements.length; i < len; i++) {\n    element = elements[i];\n    if (contains(element, INIT_FLAG) === false) {\n      inst = new Constructor(element);\n      inst.init(config);\n      insts.push(inst);\n    }\n  }\n  return insts;\n}\n\n// Expose public methods.\nexport { checkDom, instantiateAll, setInitFlag };\n", "/* ==========================================================================\n   Javascript Type Checkers\n\n   Various utility functions to check Javascript types and primitives.\n\n   Contains code copied from with moderate modifications:\n\n   https://github.com/angular/angular.js/blob/master/src/Angular.js.\n   Copyright (c) 2010-2015 Google, Inc. http://angularjs.org\n\n   ========================================================================== */\n\nconst _toString = Object.prototype.toString;\n\n/**\n * @name isUndefined\n * @kind function\n * @description\n * Determines if a reference is undefined.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is undefined.\n */\nfunction isUndefined(value) {\n  return typeof value === 'undefined';\n}\n\n/**\n * @name isDefined\n * @kind function\n * @description\n * Determines if a reference is defined.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is defined.\n */\nfunction isDefined(value) {\n  return typeof value !== 'undefined';\n}\n\n/**\n * @name isObject\n * @kind function\n * @description\n * Determines if a reference is an `Object`.\n * Unlike `typeof` in JavaScript, `null`s are not\n * considered to be objects. Note that JavaScript arrays are objects.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is an `Object` but not `null`.\n */\nfunction isObject(value) {\n  // http://jsperf.com/isobject4\n  return value !== null && typeof value === 'object';\n}\n\n/**\n * @name isString\n * @kind function\n * @description\n * Determines if a reference is a `String`.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is a `String`.\n */\nfunction isString(value) {\n  return _toString.call(value) === '[object String]';\n}\n\n/**\n * @name isNumber\n * @kind function\n * @description\n * Determines if a reference is a `Number`.\n *\n * This includes the \"special\" numbers `NaN`, `+Infinity` and `-Infinity`.\n *\n * If you wish to exclude these then you can use the native\n * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/\n *                      Reference/Global_Objects/isFinite)\n * method.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is a `Number`.\n */\nfunction isNumber(value) {\n  return _toString.call(value) === '[object Number]';\n}\n\n/**\n * @name isDate\n * @kind function\n * @description\n * Determines if a value is a date.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is a `Date`.\n */\nfunction isDate(value) {\n  return _toString.call(value) === '[object Date]';\n}\n\n/**\n * @name isArray\n * @kind function\n * @description\n * Determines if a reference is an `Array`.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is an `Array`.\n */\nconst isArray =\n  Array.isArray ||\n  function isArray(value) {\n    return _toString.call(value) === '[object Array]';\n  };\n\n/**\n * @name isFunction\n * @kind function\n * @description\n * Determines if a reference is a `Function`.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is a `Function`.\n */\nfunction isFunction(value) {\n  return _toString.call(value) === '[object Function]';\n}\n\n// TODO Fix complexity issue\n\n/**\n * @name isEmpty\n * @kind function\n * @description\n * Determines if a reference is empty.\n * @param {unknown} value - Reference to check.\n * @returns {boolean} True if `value` is empty.\n */\nfunction isEmpty(value) {\n  return (\n    isUndefined(value) ||\n    value === null ||\n    (isString(value) && value.length <= 0) ||\n    /^\\s*$/.test(value)\n  );\n}\n\n// Expose public methods.\nexport {\n  isUndefined,\n  isDefined,\n  isObject,\n  isString,\n  isNumber,\n  isDate,\n  isArray,\n  isFunction,\n  isEmpty,\n};\n", ".no-js .u-js-only,.u-hide-if-js{display:none!important}.no-js .u-hide-if-js{display:block!important}@media screen{.u-print-only{display:none}}@media print{.u-screen-only{display:none}}.u-clearfix:after{content:\"\";display:table;clear:both}.u-visually-hidden{position:absolute;width:1px;height:1px;border:0;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0)}@media only screen and (max-width:37.5em){.u-hide-on-mobile{display:none}}@media only screen and (min-width:37.5625em){.u-show-on-mobile{display:none}}.u-hidden{display:none!important}.u-invisible{visibility:hidden}.u-right{float:right}.u-nowrap{white-space:nowrap}.u-flexible-container{position:relative;padding-bottom:56.25%;height:0}.u-flexible-container__inner{position:absolute;top:0;left:0;width:100%;height:100%}.u-flexible-container--4-3{position:relative;padding-bottom:75%;height:0}.u-mt0{margin-top:0!important}.u-mb0{margin-bottom:0!important}.u-mt5{margin-top:5px!important}.u-mb5{margin-bottom:5px!important}.u-mt10{margin-top:10px!important}.u-mb10{margin-bottom:10px!important}.u-mt15{margin-top:15px!important}.u-mb15{margin-bottom:15px!important}.u-mt20{margin-top:20px!important}.u-mb20{margin-bottom:20px!important}.u-mt30{margin-top:30px!important}.u-mb30{margin-bottom:30px!important}.u-mt45{margin-top:45px!important}.u-mb45{margin-bottom:45px!important}.u-mt60{margin-top:60px!important}.u-mb60{margin-bottom:60px!important}.u-w100pct{width:100%}.u-w90pct{width:90%}.u-w80pct{width:80%}.u-w70pct{width:70%}.u-w60pct{width:60%}.u-w50pct{width:50%}.u-w40pct{width:40%}.u-w30pct{width:30%}.u-w20pct{width:20%}.u-w10pct{width:10%}.u-w75pct{width:75%}.u-w65pct{width:65%}.u-w25pct{width:25%}.u-w15pct{width:15%}.u-w66pct{width:66.6666666667%}.u-w33pct{width:33.3333333333%}.u-small-text,small{font-size:.875em}.u-small-text--subtle,small--subtle{color:var(--gray)}", "// TODO: Note that this is an older copy of AtomicComponent from the\n// design-system to isolate TDP expandable customizations.\n\n/* ==========================================================================\n   AtomicComponent\n   Base Atomic Component\n   Contains code copied from the following with major modifications :\n   - Backbone.js ( http://backbonejs.org/docs/backbone.html ).\n   - Marionette ( http://marionettejs.com ).\n   ========================================================================== */\n\nimport {\n  isFunction,\n  EventObserver,\n  instantiateAll,\n  setInitFlag,\n} from '@cfpb/cfpb-design-system';\nimport Delegate from 'ftdomdelegate';\n\nconst TAG_NAME = 'div';\n\n/**\n * Function as the constrcutor for the AtomicComponent.\n * Sets up initial instance properties and calls\n * necessary methods to properly instantiatie component.\n * @param {HTMLElement} element - The element to set as the base element.\n * @param {object} attributes - Hash of attributes to set on base element.\n */\nfunction AtomicComponent(element, attributes) {\n  this.element = element;\n  this.initializers = [];\n  this.uId = this.uniqueId('ac');\n  Object.assign(this, attributes);\n  this.processModifiers();\n  this.ensureElement();\n  this.setCachedElements();\n  this.initializers.push(this.initialize);\n}\n\n// Public instance Methods and properties.\nObject.assign(AtomicComponent.prototype, new EventObserver(), {\n  /**\n   * Run through and call the component's initializers.\n   * @returns {AtomicComponent} An instance.\n   */\n  init: function () {\n    this.initializers.forEach(function (func) {\n      if (isFunction(func)) {\n        func.apply(this, arguments);\n      }\n    }, this);\n    this.dispatchEvent('component:initialized');\n\n    return this;\n  },\n\n  /**\n   * Function used to process class modifiers. These should\n   * correspond with BEM modifiers.\n   */\n  processModifiers: function () {\n    if (!this.modifiers) {\n      return;\n    }\n\n    this.modifiers.forEach(function (modifier) {\n      const modifierClass = modifier.ui.base.substring(1);\n      if (this.element.classList.contains(modifierClass)) {\n        if (modifier.initialize) {\n          this.initializers.push(modifier.initialize);\n        }\n        Object.assign(this, modifier);\n      }\n    }, this);\n  },\n\n  /**\n   * Function used to render a template in Single Page Applications.\n   * @returns {AtomicComponent} An instance.\n   */\n  render: function () {\n    return this;\n  },\n\n  /**\n   * Function used to ensure and set / create the base DOM element.\n   */\n  ensureElement: function () {\n    if (!this.element) {\n      const attrs = Object.assign({}, this.attributes);\n      attrs.id = this.id || this.u_id;\n      if (this.className) attrs.class = this.className;\n      this.setElement(document.createElement(TAG_NAME));\n      this.setElementAttributes(attrs);\n    } else {\n      this.setElement(this.element);\n    }\n    setInitFlag(this.element);\n  },\n\n  /**\n   * Function used to set the base DOM element.\n   * @param {HTMLElement} element - The element to set as the base element.\n   * @returns {AtomicComponent} An instance.\n   */\n  setElement: function (element) {\n    if (this.element) {\n      this.undelegateEvents();\n    }\n    this.element = element;\n    this.delegateEvents();\n\n    return this;\n  },\n\n  // TODO Fix complexity issue\n\n  /**\n   * Function used to set the cached DOM elements.\n   * @returns {object} Hash of event names and cached elements.\n   */\n  setCachedElements: function () {\n    const ui = Object.assign({}, this.ui);\n    let key;\n    let element;\n\n    for (key in ui) {\n      if ({}.hasOwnProperty.call(ui, key)) {\n        element = this.element.querySelectorAll(ui[key]);\n        if (element.length === 1) {\n          ui[key] = element[0];\n        } else if (element.length > 1) {\n          ui[key] = element;\n        } else {\n          ui[key] = null;\n        }\n      }\n    }\n    this.ui = ui;\n\n    return ui;\n  },\n\n  /**\n   * Function used to remove the base element from the DOM\n   * and unbind events.\n   * @returns {boolean} True if successful in tearing down component.\n   */\n  destroy: function () {\n    if (this.element) {\n      this.element.parentNode.removeChild(this.element);\n      if (this.element.view) delete this.element.view;\n      delete this.element;\n    }\n    this.undelegateEvents();\n    this.dispatchEvent('component:destroyed');\n\n    return true;\n  },\n\n  /**\n   * Function used to set the attributes on an element.\n   * @param {object} attributes - Hash of attributes to set on base element.\n   */\n  setElementAttributes: function (attributes) {\n    let property;\n\n    for (property in attributes) {\n      if ({}.hasOwnProperty.call(attributes, property)) {\n        this.element.setAttribute(property, attributes[property]);\n      }\n    }\n  },\n\n  // TODO Fix complexity issue\n\n  /**\n   * Function used to up event delegation on the base element.\n   * Using Dom-delegate library to enable this functionality.\n   * @param {object} events - Hash of events to bind to the dom element.\n   * @returns {AtomicComponent} An instance.\n   */\n  delegateEvents: function (events) {\n    const delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n    let key;\n    let method;\n    let match;\n\n    // eslint-disable-next-line no-useless-assignment\n    events = events || (events = this.events);\n    if (!events) {\n      return this;\n    }\n\n    this.undelegateEvents();\n    this._delegate = new Delegate(this.element);\n    for (key in events) {\n      if ({}.hasOwnProperty.call(events, key)) {\n        method = events[key];\n        if (isFunction(this[method])) {\n          method = this[method];\n        }\n        if (method) {\n          match = key.match(delegateEventSplitter);\n          this.delegate(match[1], match[2], method.bind(this));\n        }\n      }\n    }\n    this.dispatchEvent('component:bound');\n\n    return this;\n  },\n\n  /**\n   * Function used to set the attributes on an element.\n   * @param {string} eventName - Event in which to listen for.\n   * @param {string} selector - CSS selector.\n   * @param {Function} listener - Callback for event.\n   * @returns {AtomicComponent} An instance.\n   */\n  delegate: function (eventName, selector, listener) {\n    this._delegate.on(eventName, selector, listener);\n\n    return this;\n  },\n\n  /**\n   * Function used to remove events from the base element.\n   * @returns {AtomicComponent} An instance.\n   */\n  undelegateEvents: function () {\n    if (this._delegate) {\n      this._delegate.destroy();\n    }\n    this.element.removeAttribute('data-js-hook');\n\n    return this;\n  },\n\n  /**\n   * Function used to set the attributes on an element.\n   * @param {string} prefix - String to use a prefix.\n   * @returns {string} Prefixed unique id string.\n   */\n  uniqueId: function (prefix) {\n    return prefix + '_' + Math.random().toString(36).slice(2);\n  },\n});\n\n// Static Methods\n\n/**\n * Function used to set the attributes on an element.\n * and unbind events.\n * @param {object} attributes - Hash of attributes to set on base element.\n * @returns {Function} Extended child constructor function.\n */\nfunction extend(attributes) {\n  /**\n   * Function used as constructor in order to establish inheritance chain.\n   * @returns {AtomicComponent} An instance.\n   */\n  function child() {\n    this._super = AtomicComponent.prototype;\n    return AtomicComponent.apply(this, arguments);\n  }\n\n  child.prototype = Object.create(AtomicComponent.prototype);\n  Object.assign(child.prototype, attributes);\n  Object.assign(child, AtomicComponent);\n\n  if (\n    {}.hasOwnProperty.call(attributes, 'ui') &&\n    {}.hasOwnProperty.call(attributes.ui, 'base')\n  ) {\n    child.selector = attributes.ui.base;\n  }\n\n  child.constants = {};\n\n  return child;\n}\n\n/**\n * Function used to instantiate all instances of the particular\n * atomic component on a page.\n * @param {HTMLElement} scope - Where to search for components within.\n * @returns {Array} List of AtomicComponent instances.\n */\nfunction init(scope) {\n  const components = instantiateAll(this.selector, this, scope);\n  return components;\n}\n\n// Set public static methods.\nAtomicComponent.init = init;\nAtomicComponent.extend = extend;\n\nexport default AtomicComponent;\n", "// TODO: Note that this is an older copy of BaseTransition from the\n// design-system to isolate TDP expandable customizations.\n\n// Required modules.\nimport { EventObserver } from '@cfpb/cfpb-design-system';\n\n/**\n * BaseTransition\n * @class\n * @classdesc Initializes new BaseTransition behavior.\n *   This shouldn't be used directly, but instead should be\n *   the base class used through composition by a specific transition.\n * @param {HTMLElement} element - DOM element to apply transition to.\n * @param {object} classes - The classes to apply to this transition.\n * @returns {BaseTransition} An instance.\n */\nfunction BaseTransition(element, classes) {\n  const _classes = classes;\n  let _dom;\n\n  let _lastClass;\n  let _transitionEndEvent;\n  let _transitionCompleteBinded;\n  let _addEventListenerBinded;\n  let _isAnimating = false;\n  let _isFlushed = false;\n\n  // Make sure required attributes are passed in.\n  if (\n    typeof _classes.CSS_PROPERTY === 'undefined' ||\n    typeof _classes.BASE_CLASS === 'undefined'\n  ) {\n    throw new Error(\n      'Transitions require CSS_PROPERTY and BASE_CLASS ' +\n        'to be passed into BaseTransition.',\n    );\n  }\n\n  /**\n   * Add an event listener to the transition, or call the transition\n   * complete handler immediately if transition not supported.\n   */\n  function _addEventListener() {\n    _dom.classList.add(BaseTransition.ANIMATING_CLASS);\n    _isAnimating = true;\n\n    /*\n      If transition is not supported, call handler directly (IE9/OperaMini).\n      Also, if \"transition-duration: 0s\" is set, transitionEnd event will not\n      fire, so we need to call the handler straight away.\n    */\n    if (\n      _transitionEndEvent &&\n      !_dom.classList.contains(BaseTransition.NO_ANIMATION_CLASS)\n    ) {\n      _dom.addEventListener(_transitionEndEvent, _transitionCompleteBinded);\n      this.dispatchEvent(BaseTransition.BEGIN_EVENT, { target: this });\n    } else {\n      this.dispatchEvent(BaseTransition.BEGIN_EVENT, { target: this });\n      _transitionCompleteBinded();\n    }\n  }\n\n  /**\n   * Remove an event listener to the transition.\n   */\n  function _removeEventListener() {\n    _dom.removeEventListener(_transitionEndEvent, _transitionCompleteBinded);\n  }\n\n  /**\n   * Handle the end of a transition.\n   * @param {TransitionEvent} evt - Transition event object.\n   * @returns {boolean} True if transition was cleaned up,\n   *   false if an outside transitioning property triggered this event handler.\n   */\n  function _transitionComplete(evt) {\n    if (evt && evt.propertyName !== _classes.CSS_PROPERTY) {\n      return false;\n    }\n\n    _removeEventListener();\n    _dom.classList.remove(BaseTransition.ANIMATING_CLASS);\n    this.dispatchEvent(BaseTransition.END_EVENT, { target: this });\n    _isAnimating = false;\n    return true;\n  }\n\n  /**\n   * Search for and remove initial BaseTransition classes that have\n   * already been applied to this BaseTransition's target element.\n   */\n  function _flush() {\n    let prop;\n    for (prop in _classes) {\n      if (\n        {}.hasOwnProperty.call(_classes, prop) &&\n        _classes[prop] !== _classes.BASE_CLASS &&\n        _dom.classList.contains(_classes[prop])\n      ) {\n        _dom.classList.remove(_classes[prop]);\n      }\n    }\n  }\n\n  /**\n   * Halt an in-progress animation and call the complete event immediately.\n   */\n  function halt() {\n    if (!_isAnimating) {\n      return;\n    }\n    _dom.style.webkitTransitionDuration = '0';\n    _dom.style.mozTransitionDuration = '0';\n    _dom.style.oTransitionDuration = '0';\n    _dom.style.transitionDuration = '0';\n    _dom.removeEventListener(_transitionEndEvent, _transitionCompleteBinded);\n    _transitionCompleteBinded();\n    _dom.style.webkitTransitionDuration = '';\n    _dom.style.mozTransitionDuration = '';\n    _dom.style.oTransitionDuration = '';\n    _dom.style.transitionDuration = '';\n  }\n\n  /**\n   * Remove all transition classes, if transition is initialized.\n   * @returns {boolean}\n   *   True, if the element's CSS classes were touched, false otherwise.\n   */\n  function remove() {\n    if (_dom) {\n      halt();\n      _dom.classList.remove(_classes.BASE_CLASS);\n      _flush();\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Add a \"transition-duration: 0s\" utility CSS class.\n   * @returns {BaseTransition} An instance.\n   */\n  function animateOn() {\n    if (!_dom) {\n      return this;\n    }\n    _dom.classList.remove(BaseTransition.NO_ANIMATION_CLASS);\n\n    return this;\n  }\n\n  /**\n   * Remove a \"transition-duration: 0s\" utility CSS class.\n   * @returns {BaseTransition} An instance.\n   */\n  function animateOff() {\n    if (!_dom) {\n      return this;\n    }\n    _dom.classList.add(BaseTransition.NO_ANIMATION_CLASS);\n\n    return this;\n  }\n\n  /**\n   * @param {HTMLElement} elem - The element to check\n   *   for support of transition end event.\n   * @returns {string} The browser-prefixed transition end event.\n   */\n  function _getTransitionEndEvent(elem) {\n    if (!elem) {\n      const msg = 'Element does not have TransitionEnd event. It may be null!';\n      throw new Error(msg);\n    }\n\n    let transition;\n    const transitions = {\n      WebkitTransition: 'webkitTransitionEnd',\n      MozTransition: 'transitionend',\n      OTransition: 'oTransitionEnd otransitionend',\n      transition: 'transitionend',\n    };\n\n    let transitionEvent;\n    for (transitionEvent in transitions) {\n      if (\n        {}.hasOwnProperty.call(transitions, transitionEvent) &&\n        typeof elem.style[transitionEvent] !== 'undefined'\n      ) {\n        transition = transitions[transitionEvent];\n        break;\n      }\n    }\n    return transition;\n  }\n\n  /**\n   * Set the HTML element target of this transition.\n   * @param {HTMLElement} targetElement - The target of the transition.\n   */\n  function setElement(targetElement) {\n    /*\n      If the element has already been set,\n      clear the transition classes from the old element.\n    */\n    if (_dom) {\n      remove();\n      animateOn();\n    }\n    _dom = targetElement;\n    _dom.classList.add(_classes.BASE_CLASS);\n    _transitionEndEvent = _getTransitionEndEvent(_dom);\n  }\n\n  /**\n   * @returns {BaseTransition} An instance.\n   */\n  function init() {\n    _transitionCompleteBinded = _transitionComplete.bind(this);\n    _addEventListenerBinded = _addEventListener.bind(this);\n    setElement(element);\n\n    return this;\n  }\n\n  /**\n   * @returns {boolean} Whether the transition has a duration or not.\n   *   Returns false if this transition has not been initialized.\n   */\n  function isAnimated() {\n    if (!_dom) {\n      return false;\n    }\n    return !_dom.classList.contains(BaseTransition.NO_ANIMATION_CLASS);\n  }\n\n  /**\n   * @param {string} className - A CSS class.\n   * @returns {boolean} False if the class is already applied\n   *   or the transition is not initialized,\n   *   otherwise true if the class was applied.\n   */\n  function applyClass(className) {\n    if (!_dom) {\n      return false;\n    }\n    if (!_isFlushed) {\n      _flush();\n      _isFlushed = true;\n    }\n\n    if (_dom.classList.contains(className)) {\n      return false;\n    }\n\n    _removeEventListener();\n    _dom.classList.remove(_lastClass);\n    _lastClass = className;\n    _addEventListenerBinded();\n    _dom.classList.add(_lastClass);\n\n    return true;\n  }\n\n  // Attach public events.\n  const eventObserver = new EventObserver();\n  this.addEventListener = eventObserver.addEventListener;\n  this.dispatchEvent = eventObserver.dispatchEvent;\n  this.removeEventListener = eventObserver.removeEventListener;\n\n  this.animateOff = animateOff;\n  this.animateOn = animateOn;\n  this.applyClass = applyClass;\n  this.halt = halt;\n  this.init = init;\n  this.isAnimated = isAnimated;\n  this.remove = remove;\n  this.setElement = setElement;\n\n  return this;\n}\n\n// Public static constants.\nBaseTransition.BEGIN_EVENT = 'transitionBegin';\nBaseTransition.END_EVENT = 'transitionEnd';\nBaseTransition.NO_ANIMATION_CLASS = 'u-no-animation';\nBaseTransition.ANIMATING_CLASS = 'u-is-animating';\n\nexport default BaseTransition;\n", "// Required modules.\nimport BaseTransition from './BaseTransition.js';\nimport { EventObserver } from '@cfpb/cfpb-design-system';\n\n// Exported constants.\nconst CLASSES = {\n  CSS_PROPERTY: 'max-height',\n  BASE_CLASS: 'o-expandable__content--transition',\n  EXPANDED: 'o-expandable__content--expanded',\n  COLLAPSED: 'o-expandable__content--collapsed',\n  OPEN_DEFAULT: 'o-expandable__content--onload-open',\n};\n\n/**\n * ExpandableTransition\n * @class\n * @classdesc Initializes new ExpandableTransition behavior.\n * @param {HTMLElement} element - DOM element to apply move transition to.\n * @returns {ExpandableTransition} An instance.\n */\nfunction ExpandableTransition(element) {\n  const _baseTransition = new BaseTransition(element, CLASSES);\n  let previousHeight;\n\n  /**\n   * Handle the end of a transition.\n   */\n  function _transitionComplete() {\n    if (element.classList.contains(CLASSES.EXPANDED)) {\n      this.dispatchEvent('expandEnd', { target: this });\n\n      if (element.scrollHeight > previousHeight) {\n        element.style.maxHeight = element.scrollHeight + 'px';\n      }\n    } else if (element.classList.contains(CLASSES.COLLAPSED)) {\n      this.dispatchEvent('collapseEnd', { target: this });\n    }\n  }\n\n  /**\n   * @returns {ExpandableTransition} An instance.\n   */\n  function init() {\n    _baseTransition.init();\n    _baseTransition.addEventListener(\n      BaseTransition.END_EVENT,\n      _transitionComplete.bind(this),\n    );\n\n    if (element.classList.contains(CLASSES.OPEN_DEFAULT)) {\n      this.expand();\n    } else {\n      this.collapse();\n    }\n\n    return this;\n  }\n\n  /**\n   * Toggle the expandable\n   * @returns {ExpandableTransition} An instance.\n   */\n  function toggleExpandable() {\n    if (element.classList.contains(CLASSES.COLLAPSED)) {\n      this.expand();\n    } else {\n      this.collapse();\n    }\n\n    return this;\n  }\n\n  /**\n   * Collapses the expandable content\n   * @returns {ExpandableTransition} An instance.\n   */\n  function collapse() {\n    this.dispatchEvent('collapseBegin', { target: this });\n\n    previousHeight = element.scrollHeight;\n    element.style.maxHeight = '0';\n    _baseTransition.applyClass(CLASSES.COLLAPSED);\n\n    return this;\n  }\n\n  /**\n   * Expands the expandable content\n   * @returns {ExpandableTransition} An instance.\n   */\n  function expand() {\n    this.dispatchEvent('expandBegin', { target: this });\n\n    if (!previousHeight || element.scrollHeight > previousHeight) {\n      previousHeight = element.scrollHeight;\n    }\n\n    element.style.maxHeight = previousHeight + 'px';\n    _baseTransition.applyClass(CLASSES.EXPANDED);\n\n    return this;\n  }\n\n  // Attach public events.\n  const eventObserver = new EventObserver();\n  this.addEventListener = eventObserver.addEventListener;\n  this.dispatchEvent = eventObserver.dispatchEvent;\n  this.removeEventListener = eventObserver.removeEventListener;\n\n  this.animateOff = _baseTransition.animateOff;\n  this.animateOn = _baseTransition.animateOn;\n  this.halt = _baseTransition.halt;\n  this.isAnimated = _baseTransition.isAnimated;\n  this.setElement = _baseTransition.setElement;\n  this.remove = _baseTransition.remove;\n\n  this.init = init;\n  this.toggleExpandable = toggleExpandable;\n  this.collapse = collapse;\n  this.expand = expand;\n\n  return this;\n}\n\n// Public static properties.\nExpandableTransition.CLASSES = CLASSES;\n\nexport default ExpandableTransition;\n", "// TODO: Note that this is an older copy of Expandable from the\n// design-system to isolate TDP expandable customizations.\n\n/* ==========================================================================\n   Expandable Organism\n   ========================================================================== */\n\nimport AtomicComponent from './AtomicComponent.js';\nimport { EventObserver } from '@cfpb/cfpb-design-system';\nimport ExpandableTransition from './ExpandableTransition.js';\n\nconst eventObserver = new EventObserver();\n\n/**\n * Event handler for when an expandable begins expanding.\n */\nfunction expandBeginHandler() {\n  this.ui.content.classList.remove('u-hidden');\n}\n\n/**\n * Event handler for when an expandable is finished collapsing.\n */\nfunction collapseEndHandler() {\n  this.ui.content.classList.add('u-hidden');\n}\n\n/**\n * Event handler for when an accordion is activated\n */\nfunction _accordionActivatedHandler() {\n  if (this.activeAccordion) {\n    this.transition.toggleExpandable();\n    this.toggleTargetState(this.ui.target);\n    this.activeAccordion = false;\n  }\n}\n\n/**\n * Initialize a new expandable.\n */\nfunction initialize() {\n  const transition = new ExpandableTransition(this.ui.content);\n  this.transition = transition.init();\n  this.transition.addEventListener(\n    'expandBegin',\n    expandBeginHandler.bind(this),\n  );\n  this.transition.addEventListener(\n    'collapseEnd',\n    collapseEndHandler.bind(this),\n  );\n\n  if (\n    this.ui.content.classList.contains(ExpandableTransition.CLASSES.EXPANDED)\n  ) {\n    this.ui.target.classList.add(this.classes.targetExpanded);\n  } else {\n    this.ui.target.classList.add(this.classes.targetCollapsed);\n    this.ui.content.classList.add('u-hidden');\n  }\n\n  const expandableGroup = this.ui.target.closest('.' + this.classes.group);\n\n  this.isAccordionGroup =\n    expandableGroup !== null &&\n    expandableGroup.classList.contains(this.classes.groupAccordion);\n\n  if (this.isAccordionGroup) {\n    eventObserver.addEventListener(\n      'accordionActivated',\n      _accordionActivatedHandler.bind(this),\n    );\n  }\n}\n\n/**\n * Event handler for when an expandable is clicked.\n */\nfunction expandableClickHandler() {\n  this.transition.toggleExpandable();\n  this.toggleTargetState(this.ui.target);\n\n  if (this.isAccordionGroup) {\n    if (this.activeAccordion) {\n      this.activeAccordion = false;\n    } else {\n      eventObserver.dispatchEvent('accordionActivated', { target: this });\n      this.activeAccordion = true;\n    }\n  }\n}\n\n/**\n * Toggle an expandable to open or closed.\n * @param {HTMLElement} element - The expandable target HTML DOM element.\n */\nfunction toggleTargetState(element) {\n  if (element.classList.contains(this.classes.targetExpanded)) {\n    this.ui.target.classList.add(this.classes.targetCollapsed);\n    this.ui.target.classList.remove(this.classes.targetExpanded);\n  } else {\n    this.ui.target.classList.add(this.classes.targetExpanded);\n    this.ui.target.classList.remove(this.classes.targetCollapsed);\n  }\n}\n\n/**\n * Retrieve the label text of the expandable header.\n * @returns {string} The text of the expandable's label.\n */\nfunction getLabelText() {\n  return this.ui.label.textContent.trim();\n}\n\nconst Expandable = AtomicComponent.extend({\n  ui: {\n    base: '.o-expandable',\n    target: '.o-expandable__header',\n    content: '.o-expandable__content',\n    header: '.o-expandable__header',\n    label: '.o-expandable__label',\n  },\n\n  classes: {\n    targetExpanded: 'o-expandable__target--expanded',\n    targetCollapsed: 'o-expandable__target--collapsed',\n    group: 'o-expandable-group',\n    groupAccordion: 'o-expandable-group--accordion',\n  },\n\n  events: {\n    'click .o-expandable__header': 'expandableClickHandler',\n  },\n\n  transition: null,\n  isAccordionGroup: false,\n  activeAccordion: false,\n\n  initialize: initialize,\n  expandableClickHandler: expandableClickHandler,\n  toggleTargetState: toggleTargetState,\n  getLabelText: getLabelText,\n});\n\nexport default Expandable;\n", "import BaseTransition from './BaseTransition.js';\nimport { EventObserver } from '@cfpb/cfpb-design-system';\n\n// Exported constants.\nconst CLASSES = {\n  CSS_PROPERTY: 'max-height',\n  BASE_CLASS: 'o-expandable-facets__content--transition',\n  EXPANDED: 'o-expandable-facets__content--expanded',\n  COLLAPSED: 'o-expandable-facets__content--collapsed',\n  OPEN_DEFAULT: 'o-expandable-facets__content--onload-open',\n};\n\n/**\n * ExpandableFacetTransition\n * @class\n * @classdesc Initializes new ExpandableFacetTransition behavior.\n * @param {HTMLElement} element - DOM element to apply move transition to.\n * @returns {ExpandableFacetTransition} An instance.\n */\nfunction ExpandableFacetTransition(element) {\n  const _baseTransition = new BaseTransition(element, CLASSES, this);\n  let previousHeight;\n\n  /**\n   * @param {Function} initialClass - The initial state for this transition.\n   * @returns {ExpandableFacetTransition} An instance.\n   */\n  function init(initialClass) {\n    _baseTransition.init(initialClass);\n    this.addEventListener(\n      BaseTransition.END_EVENT,\n      _transitionComplete.bind(this),\n    );\n\n    if (element.classList.contains(CLASSES.OPEN_DEFAULT)) {\n      this.expand();\n    } else {\n      this.collapse();\n    }\n\n    return this;\n  }\n\n  /**\n   * Handle the end of a transition.\n   */\n  function _transitionComplete() {\n    if (element.classList.contains(CLASSES.EXPANDED)) {\n      this.dispatchEvent('expandend', { target: this });\n\n      if (element.scrollHeight > previousHeight) {\n        element.style.maxHeight = element.scrollHeight + 'px';\n      }\n    } else if (element.classList.contains(CLASSES.COLLAPSED)) {\n      this.dispatchEvent('collapseend', { target: this });\n    }\n  }\n\n  /**\n   * Toggle the expandable\n   * @returns {ExpandableFacetTransition} An instance.\n   */\n  function toggleExpandable() {\n    if (element.classList.contains(CLASSES.COLLAPSED)) {\n      this.expand();\n    } else {\n      this.collapse();\n    }\n\n    return this;\n  }\n\n  /**\n   * Collapses the expandable content\n   * @returns {ExpandableFacetTransition} An instance.\n   */\n  function collapse() {\n    this.dispatchEvent('collapsebegin', { target: this });\n\n    previousHeight = element.scrollHeight;\n    element.style.maxHeight = '0';\n    _baseTransition.applyClass(CLASSES.COLLAPSED);\n\n    return this;\n  }\n\n  /**\n   * Expands the expandable content\n   * @returns {ExpandableFacetTransition} An instance.\n   */\n  function expand() {\n    this.dispatchEvent('expandbegin', { target: this });\n\n    if (!previousHeight || element.scrollHeight > previousHeight) {\n      previousHeight = element.scrollHeight;\n    }\n\n    element.style.maxHeight = previousHeight + 'px';\n    _baseTransition.applyClass(CLASSES.EXPANDED);\n\n    return this;\n  }\n\n  // Attach public events.\n  const eventObserver = new EventObserver();\n  this.addEventListener = eventObserver.addEventListener;\n  this.removeEventListener = eventObserver.removeEventListener;\n  this.dispatchEvent = eventObserver.dispatchEvent;\n\n  this.animateOff = _baseTransition.animateOff;\n  this.animateOn = _baseTransition.animateOn;\n  this.halt = _baseTransition.halt;\n  this.isAnimated = _baseTransition.isAnimated;\n  this.setElement = _baseTransition.setElement;\n  this.remove = _baseTransition.remove;\n\n  this.init = init;\n  this.toggleExpandable = toggleExpandable;\n  this.collapse = collapse;\n  this.expand = expand;\n\n  return this;\n}\n\n// Public static properties.\nExpandableFacetTransition.CLASSES = CLASSES;\n\nexport default ExpandableFacetTransition;\n", "/* ==========================================================================\n   Expandable Facets Organism\n   ========================================================================== */\n\nimport AtomicComponent from './AtomicComponent.js';\nimport ExpandableFacetTransition from './ExpandableFacetTransition.js';\n\nconst ExpandableFacets = AtomicComponent.extend({\n  ui: {\n    base: '.o-expandable-facets',\n    target: '.o-expandable-facets__target',\n    content: '.o-expandable-facets__content',\n    header: '.o-expandable__header',\n    facetCheckbox: '.o-expandable-facets__checkbox',\n    facetLabel: '.o-expandable-facets__checkbox ~ .a-label',\n  },\n\n  classes: {\n    targetExpanded: 'is-open',\n    targetCollapsed: 'is-closed',\n    group: 'o-expandable-group',\n  },\n\n  events: {\n    'click .o-expandable-facets__target': 'expandableClickHandler',\n  },\n\n  transition: null,\n\n  initialize: initialize,\n  expandableClickHandler: expandableClickHandler,\n  toggleTargetState: toggleTargetState,\n});\n\n/**\n * Initialize a new expandable.\n */\nfunction initialize() {\n  const customClasses = {\n    BASE_CLASS: 'o-expandable-facets__content--transition',\n    EXPANDED: 'o-expandable-facets__content--expanded',\n    COLLAPSED: 'o-expandable-facets__content--collapsed',\n    OPEN_DEFAULT: 'o-expandable-facets__content--onload-open',\n  };\n\n  const transition = new ExpandableFacetTransition(\n    this.ui.content,\n    customClasses,\n  );\n  this.transition = transition.init(\n    ExpandableFacetTransition.CLASSES.COLLAPSED,\n  );\n\n  if (this.ui.content.classList.contains(customClasses.OPEN_DEFAULT)) {\n    this.ui.target.classList.add(this.classes.targetExpanded);\n  } else {\n    this.ui.target.classList.add(this.classes.targetCollapsed);\n  }\n\n  if (\n    this.ui.facetCheckbox.hasAttribute('checked') ||\n    this.ui.facetLabel.classList.contains('indeterminate')\n  ) {\n    this.transition.toggleExpandable();\n    this.toggleTargetState(this.ui.target);\n  }\n}\n\n/**\n * Event handler for when an expandable is clicked.\n */\nfunction expandableClickHandler() {\n  this.transition.toggleExpandable();\n  this.toggleTargetState(this.ui.target);\n}\n\n/**\n * Toggle an expandable to open or closed.\n * @param {HTMLElement} element - The expandable target HTML DOM element.\n */\nfunction toggleTargetState(element) {\n  if (element.classList.contains(this.classes.targetExpanded)) {\n    this.ui.target.classList.add(this.classes.targetCollapsed);\n    this.ui.target.classList.remove(this.classes.targetExpanded);\n  } else {\n    this.ui.target.classList.add(this.classes.targetExpanded);\n    this.ui.target.classList.remove(this.classes.targetCollapsed);\n  }\n}\n\nexport default ExpandableFacets;\n\n/**\n * Find .o-expandable-facets, add `is-open` class.\n * Find .o-expandable-facets__target and add a click handler to toggle classes on .o-expandable-facets between `is-open` and `is-closed`.\n */\n", "const OPEN_DEFAULT = 'o-expandable__content--onload-open';\nconst MOBILE_COLLAPSED_CLASS = 'o-expandable--mobile-collapsed';\nconst MOBILE_WIDTH = 900;\n\nlet innerWidth;\n\n/**\n * Get the viewport width\n * @returns {number} The viewport width\n */\nfunction getInnerWidth() {\n  return innerWidth || window.innerWidth;\n}\n\n/**\n * Fix the output of getInnerWidth() for test purposes.\n * @param {number} width - Width.\n */\nfunction setInnerWidth(width) {\n  innerWidth = width;\n}\n\n/**\n * Alter DOM as necessary before cfpb-expandables ExpandableTransition.init()\n * so some elements won't be expanded by default.\n */\nfunction beforeExpandableTransitionInit() {\n  const nodeList = document.querySelectorAll('.' + MOBILE_COLLAPSED_CLASS);\n\n  // IE11 lacks NodeList.forEach\n  [].forEach.call(nodeList, (el) => {\n    if (getInnerWidth() <= MOBILE_WIDTH) {\n      el.classList.remove(OPEN_DEFAULT);\n    }\n\n    // Always clean up this class, just used at init time\n    el.classList.remove(MOBILE_COLLAPSED_CLASS);\n  });\n}\n\nexport { setInnerWidth, MOBILE_COLLAPSED_CLASS };\n\nexport default beforeExpandableTransitionInit;\n", "/**\n * Get the search form field's values.\n * @param {HTMLElement} searchEl - HTML input of the search field.\n * @param {HTMLElement} filterEls - HTML inputs of the search filters.\n * @returns {Array} Array of objects of form field names and values.\n */\nfunction getSearchValues(searchEl, filterEls) {\n  const fields = [];\n  if (searchEl.value) {\n    const field = {};\n    field[searchEl.name] = searchEl.value;\n    fields.push(field);\n  }\n  filterEls.forEach((input) => {\n    const field = {};\n    field[input.name] = input.value;\n    fields.push(field);\n  });\n  return fields;\n}\n\n/**\n * Serializes form fields into GET-friendly string.\n * @param {Array} fields - Array of objects of form field key-value pairs.\n * @returns {string} Serialized form fields.\n */\nfunction serializeFormFields(fields) {\n  fields = fields.map((field) => {\n    for (const key in field) {\n      field = `${key}=${field[key]}`;\n    }\n    return field;\n  });\n  return fields.join('&');\n}\n\n/**\n * Creates search results URL to be fetched.\n * @param {string} base - URL's base.\n * @param {string} params - URL's GET parameters.\n * @returns {string} Encoded URL.\n */\nfunction buildSearchResultsURL(base, params) {\n  return `${base}?${params}${params ? '&' : ''}partial=True`;\n}\n\n/**\n * Modifies element to indicate it's loading.\n * @param {HTMLElement} el - Element to show loading.\n * @returns {HTMLElement} Above element.\n */\nfunction showLoading(el) {\n  el.style.opacity = 0.5;\n  return el;\n}\n\n/**\n * Modifies element to indicate it's not loading.\n * @param {HTMLElement} el - Element to stop loading.\n * @returns {HTMLElement} Above element.\n */\nfunction hideLoading(el) {\n  el.style.opacity = 1;\n  return el;\n}\n\n/**\n * Update the page's URL via replaceState\n * @param {string} base - URL's base.\n * @param {string} params - URL's GET parameters.\n * @returns {string} New URL.\n */\nfunction updateUrl(base, params) {\n  const url = params ? `${base}?${params}` : base;\n  window.history.replaceState(null, null, url);\n  return url;\n}\n\n/**\n * Check error and do something with it\n * @param {string} code - Error code\n * @returns {object} Error object to be handled by DOM.\n */\nfunction handleError(code) {\n  const error = {\n    message: null,\n    code: code || 0,\n  };\n  switch (code) {\n    case 'no-results':\n      error.msg = 'Your query returned zero results.';\n      break;\n    case 0:\n      error.msg = 'Search request was cancelled.';\n      break;\n    default:\n      error.msg = 'Sorry, our search engine is temporarily down.';\n      break;\n  }\n  return error;\n}\n\nexport {\n  getSearchValues,\n  serializeFormFields,\n  buildSearchResultsURL,\n  showLoading,\n  hideLoading,\n  handleError,\n  updateUrl,\n};\n", "/**\n * Log a message to the console if the `debug-gtm` URL parameter is set.\n * @param {string} msg - Message to load to the console.\n */\nfunction analyticsLog(...msg) {\n  // Check if URLSearchParams is supported (Chrome > 48; Edge > 16).\n  if (typeof window.URLSearchParams === 'function') {\n    // Get query params.\n    const queryParams = new URLSearchParams(window.location.search);\n    if (queryParams.get('debug-gtm') === 'true') {\n      // eslint-disable-next-line no-console\n      console.log(`ANALYTICS DEBUG MODE: ${msg}`);\n    }\n  }\n}\n\nlet loadTryCount = 0;\n\n/**\n * @returns {boolean} Whether GTM has been loaded or not.\n */\nfunction _isGtmLoaded() {\n  window.dataLayer = window.dataLayer || [];\n  const gtmStartedEvent = window.dataLayer.find(\n    (element) => element['gtm.start'],\n  );\n\n  if (!gtmStartedEvent) {\n    // Not even the GTM inline config has executed.\n    return false;\n  } else if (!gtmStartedEvent['gtm.uniqueEventId']) {\n    // GTM inline config has run, but the main GTM JS has not loaded.\n    return false;\n  }\n\n  // GTM is fully loaded and working.\n  return true;\n}\n\n/**\n * Poll every 0.5 seconds for 10 seconds for if Google Tag Manager has loaded.\n * @returns {Promise} Resolves if Google Tag Manager has loaded.\n *   Rejects if polling has completed.\n */\nfunction ensureGoogleTagManagerLoaded() {\n  return new Promise(function (resolve, reject) {\n    (function waitForGoogleTagManager() {\n      if (_isGtmLoaded()) return resolve();\n      if (++loadTryCount > 9) return reject();\n      setTimeout(waitForGoogleTagManager, 500);\n    })();\n  });\n}\n\n/**\n * @name analyticsSendEvent\n * @kind function\n * @description\n *   Pushes an event to the GTM dataLayer.\n *   This can accept arbitrary values, but traditionally (pre-GA4) would accept\n *   event, action, and label. Th eventCallback and eventTimeout values can also\n *   be sent, which are called if there's an issue loading GTM.\n * @param {object} payload - A list or a single event.\n * @param {string} payload.event - Type of event.\n * @param {string} payload.action - Name of event.\n * @param {string} payload.label - DOM element label.\n * @param {Function} [payload.eventCallback] - Function to call on GTM submission.\n * @param {number} [payload.eventTimeout] - Callback invocation fallback time.\n * @returns {Promise} Resolves if the event is sent,\n *   otherwise calls the callback if provided.\n */\nfunction analyticsSendEvent(payload) {\n  return ensureGoogleTagManagerLoaded()\n    .then(() => {\n      // GTM should be loaded at this point.\n      const printPayload = [];\n      Object.entries(payload).forEach(([key, value]) => {\n        printPayload.push(`(${key}: ${value})`);\n      });\n\n      analyticsLog(`Sending \"${printPayload.join(', ')}\"`);\n      window.dataLayer.push(payload);\n    })\n    .catch(() => {\n      if (\n        payload.eventCallback &&\n        typeof payload.eventCallback === 'function'\n      ) {\n        // eslint-disable-next-line callback-return\n        payload.eventCallback();\n      }\n    });\n}\n\nexport { analyticsSendEvent, analyticsLog };\n", "import { analyticsSendEvent } from '@cfpb/cfpb-analytics';\n\nlet searchContent;\n\n/**\n * Sends the user interaction to Analytics\n * @param {object} payload - Payload of arbitrary key/value analytics data.\n * @returns {object} Event data\n */\nlet sendEvent = (payload) => {\n  analyticsSendEvent(payload);\n  return payload;\n};\n\n/**\n * getExpandable - Find the expandable the user clicked.\n * @param {event} event - Click event\n * @returns {HTMLElement|null} The expandable or null if it's not an expandable\n */\nconst getExpandable = (event) => {\n  let el = event.target.closest('.o-expandable__header');\n  el = el ? el : event.target.closest('.o-expandable-facets__target');\n  el = el ? el : event.target;\n\n  if (\n    el.classList.contains('o-expandable__header') ||\n    el.classList.contains('o-expandable-facets__target')\n  ) {\n    return el;\n  }\n  return null;\n};\n\n/**\n * getExpandableState - Description\n * @param {HTMLElement} expandable - Expandable's HTML element\n * @returns {string} Expandable's state, either `open` or `close`\n */\nconst getExpandableState = (expandable) => {\n  let state = 'collapse';\n  if (\n    expandable.classList.contains('o-expandable__target--expanded') ||\n    expandable.classList.contains('is-open')\n  ) {\n    state = 'expand';\n  }\n  return state;\n};\n\n/**\n * Old analytics (UA). TODO: Remove when completely on GA4.\n *\n * handleExpandableClick - Listen for clicks within a search page's content\n * and report to GA if they opened or closed an expandable.\n * @param {event} event - Click event.\n * @returns {object|undefined} Event data.\n */\nconst handleExpandableClick = (event) => {\n  const expandable = getExpandable(event);\n  if (!expandable) {\n    return;\n  }\n  const action = `${getExpandableState(expandable)} filter`;\n  let label = expandable.querySelector('span.o-expandable__label');\n  label = label ? label : expandable.querySelector('span[aria-hidden=true]');\n  if (!label) {\n    return;\n  }\n  label = label.textContent.trim();\n\n  return sendEvent({\n    event: 'TDP Search Tool',\n    action: action,\n    label: label,\n  });\n};\n\n/**\n * handleFilterClick - Listen for filter clicks and report to GA.\n * @param {event} event - Click event.\n * @returns {object|undefined} Event data.\n */\nconst handleFilterClick = (event) => {\n  const filters = event.currentTarget.querySelector('.filters');\n  if (!filters) return;\n  const checkbox = filters.closest('.a-checkbox') || event.target;\n  if (!checkbox.classList.contains('a-checkbox')) {\n    return;\n  }\n  const action = checkbox.checked ? 'filter' : 'remove filter';\n  const label = checkbox.getAttribute('aria-label');\n\n  // Old analytics. TODO: Remove when completely on GA4.\n  sendEvent({\n    event: 'TDP Search Tool',\n    action: action,\n    label: label,\n  });\n\n  // GA4.\n  return sendEvent({\n    event: 'filter',\n    action,\n    label,\n  });\n};\n\n/**\n * handleClearFilterClick - Listen for clear filter clicks and report to GA.\n * @param {event} event - Click event.\n * @returns {object|undefined} Event data.\n */\nconst handleClearFilterClick = (event) => {\n  const tags = event.currentTarget.querySelector('.results__filters-tags');\n  if (!tags) return;\n  const tag = tags.closest('.a-tag-filter') || event.target;\n  if (!tag.classList.contains('a-tag-filter')) {\n    return;\n  }\n\n  const action = 'remove filter';\n  const label = tag.textContent.trim();\n\n  // Old analytics. TODO: Remove when completely on GA4.\n  sendEvent({\n    event: 'TDP Search Tool',\n    action: action,\n    label: label,\n  });\n\n  // GA4.\n  return sendEvent({\n    event: 'filter',\n    action,\n    label,\n  });\n};\n\n/**\n * handlePaginationClick - Listen for pagination clicks and report to GA.\n * @param {event} event - Click event.\n * @returns {object|undefined} Event data.\n */\nconst handlePaginationClick = (event) => {\n  const paginator = event.target.closest('.a-btn') || event.target;\n  if (!paginator.classList.contains('a-btn')) {\n    return;\n  }\n\n  const isNextButton = paginator.classList.contains('m-pagination__btn-next');\n  const isPrevButton = paginator.classList.contains('m-pagination__btn-prev');\n  const isGoButton = paginator.classList.contains('m-pagination__btn-submit');\n  const isDisabled = paginator.classList.contains('a-btn--disabled');\n\n  if (isDisabled || (!isNextButton && !isPrevButton && !isGoButton)) {\n    return;\n  }\n\n  const currPageDom = searchContent.querySelector(\n    '.m-pagination__current-page',\n  );\n\n  // This is the actual page number we're on.\n  const currPage = parseInt(currPageDom.getAttribute('value'), 10);\n  // This is the page that's set in the page counter.\n  const selPage = parseInt(currPageDom.value, 10);\n  const ofTotalPagesTxt = searchContent.querySelectorAll(\n    '.m-pagination__label',\n  )[1].textContent;\n  let usePage = currPage;\n\n  let action;\n  if (isNextButton) {\n    action = 'next page';\n  } else if (isPrevButton) {\n    action = 'previous page';\n  } else if (isGoButton) {\n    action = 'goto page';\n    usePage = selPage;\n  }\n\n  const label = `page ${usePage}${ofTotalPagesTxt}`;\n\n  // Old analytics. TODO: Remove when completely on GA4.\n  sendEvent({\n    event: 'TDP Search Tool',\n    action: action,\n    label: label,\n  });\n\n  // GA4.\n  return sendEvent({\n    event: 'pagination',\n    action,\n    label,\n  });\n};\n\n/**\n * handleClearAllClick - Listen for clear all filters clicks and report to GA.\n * @param {event} event - Click event.\n * @returns {object|undefined} Event data.\n */\nconst handleClearAllClick = (event) => {\n  const clearBtn = event.currentTarget;\n  const tagsWrapper = clearBtn.parentElement;\n  const tags = tagsWrapper.querySelectorAll('.a-tag-filter');\n  if (!tags || tags.length === 0) {\n    return;\n  }\n\n  const tagNames = [];\n  for (let i = 0; i < tags.length; i++) {\n    if (tagsWrapper.contains(tags[i])) {\n      tagNames.push(tags[i].textContent.trim());\n    }\n  }\n  if (tagNames.length === 0) {\n    return;\n  }\n\n  // Old analytics. TODO: Remove when completely on GA4.\n  sendEvent({\n    event: 'TDP Search Tool',\n    action: 'clear all filters',\n    label: tagNames.join(' | '),\n  });\n\n  // GA4.\n  return sendEvent({\n    event: 'clear_all_filters',\n    label: tagNames.join(' | '),\n  });\n};\n\n/**\n * handleFetchSearchResults - Listen for AJAX fetchSearchResults\n * and report to GA.\n * @param {string} searchTerm - string.\n */\nconst handleFetchSearchResults = (searchTerm) => {\n  if (searchTerm.length === 0) {\n    return;\n  }\n\n  // Send the keywords that return 0 results to Analytics.\n  const resultsCountBlock = searchContent.querySelector('.results__count');\n  if (resultsCountBlock) {\n    const resultsCount = resultsCountBlock.getAttribute('data-results-count');\n\n    // Check if result count is 0\n    if (resultsCount === '0') {\n      // Old analytics. TODO: Remove when completely on GA4.\n      sendEvent({\n        event: 'TDP Search Tool',\n        action: 'noSearchResults',\n        label: searchTerm.toLowerCase() + ':0',\n      });\n\n      // GA4.\n      sendEvent({\n        event: 'search',\n        search_term: searchTerm.toLowerCase(),\n        results_count: 0,\n        no_search_results: true,\n      });\n    } else {\n      // Old analytics. TODO: Remove when completely on GA4.\n      sendEvent({\n        event: 'TDP Search Tool',\n        action: 'search',\n        label: searchTerm.toLowerCase(),\n      });\n\n      // GA4.\n      sendEvent({\n        event: 'search',\n        search_term: searchTerm.toLowerCase(),\n        results_count: resultsCount,\n        no_search_results: false,\n      });\n    }\n  }\n};\n\n/**\n * bindAnalytics - Set up analytics reporting.\n * @param {Function} spyMethod - optional spy method.\n */\nconst bindAnalytics = (spyMethod) => {\n  if (spyMethod) {\n    // TODO: sendEvent exists so it can be mocked in the unit tests.\n    //       Look into rewriting the tests to mock analyticsSendEvent.\n    sendEvent = spyMethod;\n  }\n\n  searchContent = document.querySelector('#tdp-search-facets-and-results');\n\n  if (searchContent) {\n    searchContent.addEventListener('click', (event) => {\n      handleExpandableClick(event);\n      handleFilterClick(event);\n      handleClearFilterClick(event);\n      handlePaginationClick(event);\n    });\n  }\n};\n\nexport { handleClearAllClick, handleFetchSearchResults, bindAnalytics };\n", "import { behaviorAttach } from '@cfpb/cfpb-design-system';\nimport {\n  getSearchValues,\n  serializeFormFields,\n  buildSearchResultsURL,\n  showLoading,\n  hideLoading,\n  handleError,\n  updateUrl,\n} from './search-utils.js';\nimport expandableFacets from './expandable-facets.js';\nimport cfExpandables from './Expandable.js';\nimport {\n  handleClearAllClick,\n  handleFetchSearchResults,\n} from './tdp-analytics.js';\n\n// Keep track of the most recent XHR request so that we can cancel it if need be\nconst searchRequest = new AbortController();\nconst { signal } = searchRequest.signal;\n\n/**\n * Initialize search functionality.\n */\nfunction init() {\n  if ('replaceState' in window.history) {\n    // Override search form submission\n    attachHandlers();\n  } else {\n    // This case already handled inline at the bottom\n  }\n}\n\n/**\n * Attach search results handlers\n */\nfunction attachHandlers() {\n  addDataGtmIgnore();\n  behaviorAttach('submit-search', 'submit', handleSubmit);\n  behaviorAttach('change-filter', 'change', handleFilter);\n  behaviorAttach('clear-filter', 'click', clearFilter);\n  behaviorAttach('clear-all', 'click', clearFilters);\n  cfExpandables.init();\n  expandableFacets.init();\n}\n\n/**\n * Ignore analytics for previous and next pagination buttons\n */\nfunction addDataGtmIgnore() {\n  const ignoreBtns = ['a.m-pagination__btn-next', 'a.m-pagination__btn-prev'];\n\n  for (let i = 0; i < ignoreBtns.length; i++) {\n    const btn = document.querySelector(ignoreBtns[i]);\n    if (btn) {\n      btn.setAttribute('data-gtm_ignore', 'true');\n    }\n  }\n}\n\n/**\n * Remove a filter from the search results page.\n * @param {Event} event - Click event\n */\nfunction clearFilter(event) {\n  const target = event.currentTarget;\n  const checkbox = document.querySelector(target.getAttribute('data-value'));\n  // Remove the filter tag\n  removeTag(target);\n  // Uncheck the filter checkbox\n  checkbox.checked = false;\n  if (event instanceof Event) {\n    handleFilter(event, checkbox);\n  }\n}\n\n/**\n * Remove a filter tag from the search results page.\n * node.remove() isn't supported by IE so we have to removeChild();\n * @param {Node} tag - Filter tag HTML element\n */\nfunction removeTag(tag) {\n  if (tag.parentNode !== null) {\n    tag.parentNode.removeChild(tag);\n  }\n}\n\n/**\n * Remove all filters from the search results page.\n * @param {Event} event - Click event\n */\nfunction clearFilters(event) {\n  // Handle Analytics here before tags vanish.\n  handleClearAllClick(event);\n\n  const filterTags = document.querySelectorAll('.a-tag-filter');\n  filterTags.forEach((filterTag) => {\n    clearFilter({\n      currentTarget: filterTag,\n    });\n  });\n  clearSearch();\n}\n\n/**\n * Trigger a form submit after Clear Search is clicked.\n */\nfunction clearSearch() {\n  document.getElementById('search-text').value = '';\n  handleSubmit(event);\n}\n\n/**\n * Handle keyword search form submission.\n * @param {Event} event - Click event\n * @returns {string} New page URL with search terms\n */\nfunction handleSubmit(event) {\n  if (event instanceof Event) {\n    event.preventDefault();\n  }\n  const filters = document.querySelectorAll('input:checked');\n  // fetch search results without applying filters when searching\n  const searchUrl = fetchSearchResults(filters);\n  return searchUrl;\n}\n\n/**\n * fetch search results based on filters and keywords.\n * @param {NodeList} filters - List of filter checkboxes\n * @returns {string} New page URL with search terms\n */\nfunction fetchSearchResults(filters = []) {\n  const searchContainer = document.querySelector(\n    '#tdp-search-facets-and-results',\n  );\n  const baseUrl = window.location.href.split('?')[0];\n  const searchField = document.getElementById('search-text');\n  const searchTerms = getSearchValues(searchField, filters);\n  const searchParams = serializeFormFields(searchTerms);\n\n  const searchUrl = buildSearchResultsURL(baseUrl, searchParams);\n\n  updateUrl(baseUrl, searchParams);\n  showLoading(searchContainer);\n\n  fetch(searchUrl, { signal })\n    .then((response) => response.text())\n    .then((data) => {\n      hideLoading(searchContainer);\n      searchContainer.innerHTML = data;\n\n      // Update the query params in the URL\n      updateUrl(baseUrl, searchParams);\n\n      // Reattach event handlers after tags are reloaded\n      attachHandlers();\n\n      // Send search query to Analytics.\n      handleFetchSearchResults(searchField.value);\n    })\n    .catch((err) => {\n      // TODO: Add message banner above search results\n      console.error(handleError(err).msg);\n    });\n\n  return searchUrl;\n}\n\n/**\n * Handle filter change events.\n * @param {Event} event - Click event\n * @param {HTMLElement} target - DOM element\n * @returns {string} New page URL with search terms\n */\nfunction handleFilter(event, target = null) {\n  if (event instanceof Event) {\n    event.preventDefault();\n  }\n  // Abort the previous search request if it's still active\n  /* eslint no-empty: [\"error\", { \"allowEmptyCatch\": true }] */\n  try {\n    searchRequest.abort();\n  } catch {}\n  target = target ? target : event.target;\n  const wrapperLI = target.parentElement.parentElement;\n  if (wrapperLI && wrapperLI.tagName.toLowerCase() === 'li') {\n    // Check all children if parent is checked.\n    const checkboxes = wrapperLI.querySelectorAll('ul>li input[type=checkbox]');\n    for (let i = 0; i < checkboxes.length; i++) {\n      if (\n        wrapperLI.contains(checkboxes[i]) === true &&\n        checkboxes[i] !== target\n      ) {\n        checkboxes[i].checked = target.checked;\n      }\n    }\n    // If this is a child checkbox, update the parent checkbox.\n    const parentLI = wrapperLI.parentElement.parentElement;\n    const parentUL = wrapperLI.parentElement.parentElement.parentElement;\n    if (parentUL && parentUL.tagName.toLowerCase() === 'ul') {\n      const parentCheckbox = parentLI.querySelector('div>input[type=checkbox]');\n      if (\n        parentCheckbox &&\n        parentCheckbox.parentElement.parentElement === parentLI\n      ) {\n        _updateParentFilter(parentCheckbox);\n      }\n    }\n  }\n\n  const filters = document.querySelectorAll('input:checked');\n  const searchUrl = fetchSearchResults(filters);\n  return searchUrl;\n}\n\n/**\n * Traverse parents and update their checkbox values.\n * @param {HTMLElement} element - DOM element\n */\nfunction _updateParentFilter(element) {\n  const wrapper = element.parentElement.parentElement;\n  const checkboxes = wrapper.querySelectorAll('ul>li input[type=checkbox]');\n\n  const children = [];\n  const checkedChildren = [];\n  for (let i = 0; i < checkboxes.length; i++) {\n    if (wrapper.contains(checkboxes[i]) === true) {\n      children.push(checkboxes[i]);\n      if (checkboxes[i].checked === true) {\n        checkedChildren.push(checkboxes[i]);\n      }\n    }\n  }\n\n  if (children) {\n    if (children.length !== checkedChildren.length) {\n      element.checked = false;\n    }\n  }\n  // Loop through ancestors and make sure they are checked or unchecked\n  const parentWrapper = wrapper.parentElement.parentElement;\n  const parentCheckbox = parentWrapper.querySelector(\n    'div>input[type=checkbox]',\n  );\n  if (parentCheckbox && parentCheckbox.parentElement === parentWrapper) {\n    _updateParentFilter(parentCheckbox);\n  }\n}\n\n// Provide the no-JS experience to browsers without `replaceState`\nif ('replaceState' in window.history) {\n  // This case handled in init() above\n} else {\n  document.getElementById('main').className += ' no-js';\n}\n\nexport { init };\n", "// External modules\nimport cfExpandables from './Expandable.js';\nimport expandableFacets from './expandable-facets.js';\nimport beforeExpandableTransitionInit from './expandable-mobile.js';\n\n// Internal modules\nimport { init as searchInit } from './search.js';\nimport { bindAnalytics } from './tdp-analytics.js';\n\nconst app = {\n  init: () => {\n    /**\n     * This must come before searchInit() because it will also initialize\n     * cfExpandables.\n     */\n    beforeExpandableTransitionInit();\n\n    searchInit();\n    cfExpandables.init();\n    expandableFacets.init();\n\n    bindAnalytics();\n  },\n};\n\nwindow.addEventListener('load', app.init);\n"],
  "mappings": "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",
  "names": ["require_delegate", "__commonJSMin", "exports", "module", "Delegate", "root", "listenerMap", "eventType", "selector", "handler", "useCapture", "matcher", "matcherParam", "matchesTag", "matchesId", "matches", "matchesRoot", "i", "listener", "listenerList", "singleEventType", "event", "l", "type", "phase", "returned", "target", "EVENTIGNORE", "toFire", "ret", "el", "p", "tagName", "element", "id", "require_lib", "__commonJSMin", "exports", "module", "Delegate", "root", "EventObserver", "_events", "addEventListener", "event", "callback", "removeEventListener", "index", "dispatchEvent", "options", "evts", "i", "len", "JS_HOOK", "BEHAVIOR_PREFIX", "STATE_PREFIX", "contains", "element", "value", "values", "JS_HOOK", "add", "msg", "_findElements", "behaviorSelector", "baseElement", "behaviorElements", "error", "msg", "BEHAVIOR_PREFIX", "behaviorFind", "behaviorAttach", "behaviorElement", "event", "eventHandler", "i", "len", "behaviorFind", "behaviorSelector", "baseElement", "JS_HOOK", "BEHAVIOR_PREFIX", "_findElements", "INIT_FLAG", "STATE_PREFIX", "setInitFlag", "element", "contains", "INIT_FLAG", "add", "instantiateAll", "selector", "Constructor", "scope", "config", "elements", "insts", "inst", "i", "len", "_toString", "isFunction", "value", "_toString", "utilities_exports", "__export", "utilities_default", "import_ftdomdelegate", "TAG_NAME", "AtomicComponent", "element", "attributes", "EventObserver", "func", "isFunction", "modifier", "modifierClass", "attrs", "setInitFlag", "ui", "key", "property", "events", "delegateEventSplitter", "method", "match", "Delegate", "eventName", "selector", "listener", "prefix", "extend", "child", "init", "scope", "instantiateAll", "AtomicComponent_default", "BaseTransition", "element", "classes", "_classes", "_dom", "_lastClass", "_transitionEndEvent", "_transitionCompleteBinded", "_addEventListenerBinded", "_isAnimating", "_isFlushed", "_addEventListener", "_removeEventListener", "_transitionComplete", "evt", "_flush", "prop", "halt", "remove", "animateOn", "animateOff", "_getTransitionEndEvent", "elem", "msg", "transition", "transitions", "transitionEvent", "setElement", "targetElement", "init", "isAnimated", "applyClass", "className", "eventObserver", "EventObserver", "BaseTransition_default", "CLASSES", "ExpandableTransition", "element", "_baseTransition", "BaseTransition_default", "previousHeight", "_transitionComplete", "init", "toggleExpandable", "collapse", "expand", "eventObserver", "EventObserver", "ExpandableTransition_default", "eventObserver", "EventObserver", "expandBeginHandler", "collapseEndHandler", "_accordionActivatedHandler", "initialize", "transition", "ExpandableTransition_default", "expandableGroup", "expandableClickHandler", "toggleTargetState", "element", "getLabelText", "Expandable", "AtomicComponent_default", "Expandable_default", "CLASSES", "ExpandableFacetTransition", "element", "_baseTransition", "BaseTransition_default", "previousHeight", "init", "initialClass", "_transitionComplete", "toggleExpandable", "collapse", "expand", "eventObserver", "EventObserver", "ExpandableFacetTransition_default", "ExpandableFacets", "AtomicComponent_default", "initialize", "expandableClickHandler", "toggleTargetState", "customClasses", "transition", "ExpandableFacetTransition_default", "element", "expandable_facets_default", "OPEN_DEFAULT", "MOBILE_COLLAPSED_CLASS", "innerWidth", "getInnerWidth", "beforeExpandableTransitionInit", "nodeList", "MOBILE_COLLAPSED_CLASS", "el", "getInnerWidth", "OPEN_DEFAULT", "expandable_mobile_default", "beforeExpandableTransitionInit", "getSearchValues", "searchEl", "filterEls", "fields", "field", "input", "serializeFormFields", "key", "buildSearchResultsURL", "base", "params", "showLoading", "el", "hideLoading", "updateUrl", "url", "handleError", "code", "error", "analyticsLog", "msg", "loadTryCount", "_isGtmLoaded", "gtmStartedEvent", "element", "ensureGoogleTagManagerLoaded", "resolve", "reject", "waitForGoogleTagManager", "analyticsSendEvent", "payload", "printPayload", "key", "value", "searchContent", "sendEvent", "payload", "analyticsSendEvent", "getExpandable", "event", "el", "getExpandableState", "expandable", "state", "handleExpandableClick", "action", "label", "handleFilterClick", "filters", "checkbox", "handleClearFilterClick", "tags", "tag", "handlePaginationClick", "paginator", "isNextButton", "isPrevButton", "isGoButton", "currPageDom", "currPage", "selPage", "ofTotalPagesTxt", "usePage", "handleClearAllClick", "tagsWrapper", "tagNames", "i", "handleFetchSearchResults", "searchTerm", "resultsCountBlock", "resultsCount", "bindAnalytics", "spyMethod", "searchRequest", "signal", "init", "attachHandlers", "addDataGtmIgnore", "behaviorAttach", "handleSubmit", "handleFilter", "clearFilter", "clearFilters", "Expandable_default", "expandable_facets_default", "ignoreBtns", "i", "btn", "event", "target", "checkbox", "removeTag", "tag", "handleClearAllClick", "filterTag", "clearSearch", "filters", "fetchSearchResults", "searchContainer", "baseUrl", "searchField", "searchTerms", "getSearchValues", "searchParams", "serializeFormFields", "searchUrl", "buildSearchResultsURL", "updateUrl", "showLoading", "response", "data", "hideLoading", "handleFetchSearchResults", "err", "handleError", "e", "wrapperLI", "checkboxes", "parentLI", "parentUL", "parentCheckbox", "_updateParentFilter", "element", "wrapper", "children", "checkedChildren", "parentWrapper", "app", "expandable_mobile_default", "init", "Expandable_default", "expandable_facets_default", "bindAnalytics"]
}
