{
  "version": 3,
  "sources": ["../../../../../node_modules/fastdom/fastdom.js", "../../../../unprocessed/js/modules/util/scroll.js", "../../../../unprocessed/apps/form-explainer/js/dom-tools.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/transition/base-transition.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/event-observer.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/transition/max-height-transition.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/utilities/behavior/flyout-menu.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/components/utilities/atomic-helpers.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/utilities/utilities.scss", "../../../../../node_modules/@cfpb/cfpb-design-system/src/components/cfpb-expandables/expandable.js", "../../../../../node_modules/@cfpb/cfpb-design-system/src/components/cfpb-expandables/expandable-group.js", "../../../../unprocessed/apps/form-explainer/js/FormExplainer.js", "../../../../unprocessed/apps/form-explainer/js/index.js"],
  "sourcesContent": ["!(function(win) {\n\n/**\n * FastDom\n *\n * Eliminates layout thrashing\n * by batching DOM read/write\n * interactions.\n *\n * @author Wilson Page <wilsonpage@me.com>\n * @author Kornel Lesinski <kornel.lesinski@ft.com>\n */\n\n'use strict';\n\n/**\n * Mini logger\n *\n * @return {Function}\n */\nvar debug = 0 ? console.log.bind(console, '[fastdom]') : function() {};\n\n/**\n * Normalized rAF\n *\n * @type {Function}\n */\nvar raf = win.requestAnimationFrame\n  || win.webkitRequestAnimationFrame\n  || win.mozRequestAnimationFrame\n  || win.msRequestAnimationFrame\n  || function(cb) { return setTimeout(cb, 16); };\n\n/**\n * Initialize a `FastDom`.\n *\n * @constructor\n */\nfunction FastDom() {\n  var self = this;\n  self.reads = [];\n  self.writes = [];\n  self.raf = raf.bind(win); // test hook\n  debug('initialized', self);\n}\n\nFastDom.prototype = {\n  constructor: FastDom,\n\n  /**\n   * We run this inside a try catch\n   * so that if any jobs error, we\n   * are able to recover and continue\n   * to flush the batch until it's empty.\n   *\n   * @param {Array} tasks\n   */\n  runTasks: function(tasks) {\n    debug('run tasks');\n    var task; while (task = tasks.shift()) task();\n  },\n\n  /**\n   * Adds a job to the read batch and\n   * schedules a new frame if need be.\n   *\n   * @param  {Function} fn\n   * @param  {Object} ctx the context to be bound to `fn` (optional).\n   * @public\n   */\n  measure: function(fn, ctx) {\n    debug('measure');\n    var task = !ctx ? fn : fn.bind(ctx);\n    this.reads.push(task);\n    scheduleFlush(this);\n    return task;\n  },\n\n  /**\n   * Adds a job to the\n   * write batch and schedules\n   * a new frame if need be.\n   *\n   * @param  {Function} fn\n   * @param  {Object} ctx the context to be bound to `fn` (optional).\n   * @public\n   */\n  mutate: function(fn, ctx) {\n    debug('mutate');\n    var task = !ctx ? fn : fn.bind(ctx);\n    this.writes.push(task);\n    scheduleFlush(this);\n    return task;\n  },\n\n  /**\n   * Clears a scheduled 'read' or 'write' task.\n   *\n   * @param {Object} task\n   * @return {Boolean} success\n   * @public\n   */\n  clear: function(task) {\n    debug('clear', task);\n    return remove(this.reads, task) || remove(this.writes, task);\n  },\n\n  /**\n   * Extend this FastDom with some\n   * custom functionality.\n   *\n   * Because fastdom must *always* be a\n   * singleton, we're actually extending\n   * the fastdom instance. This means tasks\n   * scheduled by an extension still enter\n   * fastdom's global task queue.\n   *\n   * The 'super' instance can be accessed\n   * from `this.fastdom`.\n   *\n   * @example\n   *\n   * var myFastdom = fastdom.extend({\n   *   initialize: function() {\n   *     // runs on creation\n   *   },\n   *\n   *   // override a method\n   *   measure: function(fn) {\n   *     // do extra stuff ...\n   *\n   *     // then call the original\n   *     return this.fastdom.measure(fn);\n   *   },\n   *\n   *   ...\n   * });\n   *\n   * @param  {Object} props  properties to mixin\n   * @return {FastDom}\n   */\n  extend: function(props) {\n    debug('extend', props);\n    if (typeof props != 'object') throw new Error('expected object');\n\n    var child = Object.create(this);\n    mixin(child, props);\n    child.fastdom = this;\n\n    // run optional creation hook\n    if (child.initialize) child.initialize();\n\n    return child;\n  },\n\n  // override this with a function\n  // to prevent Errors in console\n  // when tasks throw\n  catch: null\n};\n\n/**\n * Schedules a new read/write\n * batch if one isn't pending.\n *\n * @private\n */\nfunction scheduleFlush(fastdom) {\n  if (!fastdom.scheduled) {\n    fastdom.scheduled = true;\n    fastdom.raf(flush.bind(null, fastdom));\n    debug('flush scheduled');\n  }\n}\n\n/**\n * Runs queued `read` and `write` tasks.\n *\n * Errors are caught and thrown by default.\n * If a `.catch` function has been defined\n * it is called instead.\n *\n * @private\n */\nfunction flush(fastdom) {\n  debug('flush');\n\n  var writes = fastdom.writes;\n  var reads = fastdom.reads;\n  var error;\n\n  try {\n    debug('flushing reads', reads.length);\n    fastdom.runTasks(reads);\n    debug('flushing writes', writes.length);\n    fastdom.runTasks(writes);\n  } catch (e) { error = e; }\n\n  fastdom.scheduled = false;\n\n  // If the batch errored we may still have tasks queued\n  if (reads.length || writes.length) scheduleFlush(fastdom);\n\n  if (error) {\n    debug('task errored', error.message);\n    if (fastdom.catch) fastdom.catch(error);\n    else throw error;\n  }\n}\n\n/**\n * Remove an item from an Array.\n *\n * @param  {Array} array\n * @param  {*} item\n * @return {Boolean}\n */\nfunction remove(array, item) {\n  var index = array.indexOf(item);\n  return !!~index && !!array.splice(index, 1);\n}\n\n/**\n * Mixin own properties of source\n * object into the target.\n *\n * @param  {Object} target\n * @param  {Object} source\n */\nfunction mixin(target, source) {\n  for (var key in source) {\n    if (source.hasOwnProperty(key)) target[key] = source[key];\n  }\n}\n\n// There should never be more than\n// one instance of `FastDom` in an app\nvar exports = win.fastdom = (win.fastdom || new FastDom()); // jshint ignore:line\n\n// Expose to CJS & AMD\nif ((typeof define) == 'function') define(function() { return exports; });\nelse if ((typeof module) == 'object') module.exports = exports;\n\n})( typeof window !== 'undefined' ? window : typeof this != 'undefined' ? this : globalThis);\n", "/**\n * Easing.\n * @param {number} currentTime - current time.\n * @param {number} startPosition - start position.\n * @param {number} distance - difference between start and end position.\n * @param {number} duration - duration.\n * @returns {number} next position.\n */\nfunction _easeInOutQuad(currentTime, startPosition, distance, duration) {\n  let distanceDelta;\n  const halfDuration = duration / 2;\n  let updatedTime = currentTime / halfDuration;\n\n  if (updatedTime < 1) {\n    distanceDelta = (distance / 2) * updatedTime * updatedTime;\n  } else {\n    updatedTime--;\n    distanceDelta = (-distance / 2) * (updatedTime * (updatedTime - 2) - 1);\n  }\n  return distanceDelta + startPosition;\n}\n\n/**\n * Calculate duration of scroll based on distance\n * @param {number} distance - The distance that will be scrolled\n * @returns {number} scroll duration\n */\nfunction _calculateDuration(distance) {\n  const duration = Math.abs(distance) / 2;\n  return Math.min(Math.max(duration, 200), 1000) || 500;\n}\n\n/**\n * Animated scroll to a location in page.\n * @param {number} to - The y-coordinate to scroll to\n * @param {object} opts - Optional parameters, including:\n *    duration: Duration of the scroll animation\n *    callback: To be called when scroll is complete\n */\nfunction scrollTo(to, opts) {\n  opts = opts && typeof opts === 'object' ? opts : {};\n  const startPosition = window.pageYOffset;\n  const distance = to - startPosition;\n  const duration = opts.duration || _calculateDuration(distance);\n  let startTime;\n\n  /**\n   * Scroll the window for the duration\n   * Trigger a callback after the duration has ended\n   * @param {number} timestamp - the current time returned by\n   *    requestAnimationFrame\n   */\n  function scroll(timestamp) {\n    startTime = startTime || timestamp;\n    const elapsed = timestamp - startTime;\n    const next = _easeInOutQuad(elapsed, startPosition, distance, duration);\n    window.scroll(0, next);\n\n    if (elapsed < duration) {\n      window.requestAnimationFrame(scroll);\n    } else if (typeof opts.callback === 'function') {\n      opts.callback();\n    }\n  }\n\n  if (Math.abs(distance) > 3) {\n    window.requestAnimationFrame(scroll);\n  } else if (typeof opts.callback === 'function') {\n    opts.callback();\n  }\n}\n\n/**\n * Checks whether element in viewport and if not,\n * scrolls it into view.\n * @param {HTMLElement} elem - The DOM element to check for.\n * @param {object} opts - Optional parameters, including:\n *  offset: Distance from top of screen of element when scroll is complete.\n *  callback: function called when scroll is complete.\n */\nfunction scrollIntoView(elem, opts) {\n  const defaults = { offset: 15 };\n  opts = Object.assign(defaults, opts);\n  if (!elementInView(elem, true)) {\n    const elementTop = elem.getBoundingClientRect().top;\n    const to = Math.max(window.pageYOffset + elementTop - opts.offset, 0);\n    scrollTo(to, opts);\n  } else if (opts.callback && typeof opts.callback === 'function') {\n    opts.callback();\n  }\n}\n\n/**\n * @param {HTMLElement} elem - The DOM element to check for.\n * @param {boolean} strict - Tests whether whole element is\n *   onscreen rather than just a part.\n * @returns {boolean} Whether the element is in the viewport.\n */\nfunction elementInView(elem, strict) {\n  const windowHeight = window.innerHeight;\n  const windowTop = window.pageYOffset;\n  const windowBottom = windowTop + windowHeight;\n  const elementHeight = elem.offsetHeight;\n  const elementTop = elem.getBoundingClientRect().top + windowTop;\n  const elementBottom = elementTop + elementHeight;\n\n  if (strict) {\n    return elementTop >= windowTop && elementBottom <= windowBottom;\n  }\n  return elementBottom >= windowTop && elementTop <= windowBottom;\n}\n\nwindow.scrollToElement = scrollTo;\n\nexport { elementInView, scrollIntoView, scrollTo };\n", "import fastDom from 'fastdom';\n\nconst NO_OP = () => {\n  // Placeholder function meant to be overridden.\n};\n\n/**\n * Apply a function to one or more elements.\n * @param {HTMLElement|NodeList} elements - An HTML element or a list of them.\n * @param {Function} applyFn - A function to apply to the elements.\n * @returns {boolean} True if function was applied, false otherwise.\n */\nfunction applyAll(elements, applyFn) {\n  let parsedElements = elements;\n  if (parsedElements instanceof HTMLElement) {\n    parsedElements = [parsedElements];\n  } else if (parsedElements instanceof NodeList) {\n    parsedElements = Array.prototype.slice.call(elements);\n  }\n\n  if (parsedElements instanceof Array) {\n    parsedElements.forEach(applyFn);\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Bind a collection of events to a collection of elements.\n * @param {Array|string} elements - Collection of elements.\n * @param {Array | object} events - Collection of events.\n * @param {Function} callback - Function to call when events fire.\n */\nfunction bindEvents(elements, events, callback = NO_OP) {\n  if (Array.isArray(events) === false) {\n    events = [events];\n  }\n\n  if (typeof elements === 'string') {\n    elements = getEls(elements);\n  }\n\n  applyAll(elements, function (element) {\n    events.forEach((event) => {\n      element.addEventListener(event, callback);\n    });\n  });\n}\n\n/**\n * Creates and returns a div HTML element containing arbitrary HTML.\n * @param {string} HTML - Arbitrary HTML to include in created div.\n * @returns {HTMLElement} First HTMLElement in the created div.\n */\nfunction createElement(HTML) {\n  const div = document.createElement('div');\n  div.innerHTML = HTML;\n\n  return div.children[0];\n}\n\n/**\n * @param {string} selector - A DOM selector.\n * @param {string} className - A CSS class name.\n */\nfunction removeClass(selector, className) {\n  className = className.split(', ');\n\n  applyAll(getEls(selector), (element) => {\n    fastDom.mutate(() => element.classList.remove(...className));\n  });\n}\n\n/**\n * @param {string} selector - A DOM selector.\n * @param {string} className - A CSS class name.\n */\nfunction addClass(selector, className) {\n  className = className.split(', ');\n\n  applyAll(getEls(selector), (element) =>\n    fastDom.mutate(() => element.classList.add(...className)),\n  );\n}\n\n/**\n * @param {string} selector - A DOM selector.\n * @param {string} className - A CSS class name.\n * @returns {boolean} True if it contains the class, false otherwise.\n */\nfunction hasClass(selector, className) {\n  return getEl(selector).classList.contains(className);\n}\n\n/**\n * @param {string} selector - A DOM selector.\n * @returns {NodeList} List of retrieved elements.\n * TODO: This should have a conistent return type if possible.\n */\nfunction getEls(selector) {\n  if (_isEl(selector)) {\n    return selector;\n  }\n\n  return document.querySelectorAll(selector);\n}\n\n/**\n * @param {string} selector - A DOM selector.\n * @returns {HTMLElement} The retrieved element.\n * TODO: This should have a conistent return type if possible.\n */\nfunction getEl(selector) {\n  if (_isEl(selector)) {\n    return selector;\n  }\n\n  return document.querySelector(selector);\n}\n\n/**\n * @param {string} element - An HTML element.\n * @param {string} filter - Selector for matching on elements.\n * @returns {Array} List of previous elements.\n * TODO: This should have a conistent return type if possible.\n */\nfunction getPreviousEls(element, filter = '*') {\n  const previousSiblings = [];\n  let prevEl = element.previousElementSibling;\n\n  /**\n   * @param {HTMLElement} el - An HTML element.\n   * @returns {Function} The browser's Element.matches() method.\n   */\n  function _getMatches(el) {\n    return (\n      el.matches ||\n      el.webkitMatchesSelector ||\n      el.mozMatchesSelector ||\n      el.msMatchesSelector\n    );\n  }\n  const _matchesMethod = _getMatches(element);\n\n  while (prevEl) {\n    if (_matchesMethod.bind(prevEl)(filter)) {\n      previousSiblings.push(prevEl);\n    }\n    prevEl = prevEl.previousElementSibling;\n  }\n  return previousSiblings;\n}\n\n/**\n * Check whether something is a NodeList, HTML element, or window.\n * @param {unknown} element - Something, possibly a list, element or window instance.\n * @returns {boolean} True if `element` meets the criteria, false otherwise.\n */\nfunction _isEl(element) {\n  return (\n    element instanceof NodeList ||\n    element instanceof HTMLElement ||\n    element instanceof Window\n  );\n}\n\n/**\n * Check whether something is a NodeList, HTML element, or window.\n * @param {unknown} selector - Something, possibly a list, element or window instance.\n */\nfunction hide(selector) {\n  applyAll(getEls(selector), (element) =>\n    fastDom.mutate(() => (element.style.display = 'none')),\n  );\n}\n\n/**\n * Check whether something is a NodeList, HTML element, or window.\n * @param {unknown} selector - Something, possibly a list, element or window instance.\n */\nfunction show(selector) {\n  applyAll(getEls(selector), (element) =>\n    fastDom.mutate(() => (element.style.display = 'block')),\n  );\n}\n\n/**\n * @param {HTMLElement} element - HTML element to adjust.\n * @param {number} time - When to call the callback.\n * @param {Function} [callback] - Function to call after delay.\n */\nfunction fadeIn(element, time, callback = NO_OP) {\n  element.style.transition = 'opacity ' + time + 'ms ease-in-out';\n  element.style.opacity = 0.05;\n  element.style.display = 'block';\n  window.setTimeout(() => (element.style.opacity = 1), 100);\n  window.setTimeout(() => callback(), time);\n}\n\n/**\n * @param {HTMLElement} element - HTML element to adjust.\n * @param {number} time - When to call the callback.\n * @param {Function} [callback] - Function to call after delay.\n */\nfunction fadeOut(element, time, callback = NO_OP) {\n  element.style.transition = 'opacity ' + time + 'ms ease-in-out';\n  element.style.opacity = 1;\n  window.setTimeout(() => (element.style.opacity = 0.05), 100);\n  window.setTimeout(() => {\n    element.style.display = 'none';\n    return callback();\n  }, time);\n}\n\nexport default {\n  applyAll,\n  bindEvents,\n  createElement,\n  removeClass,\n  addClass,\n  hasClass,\n  getEls,\n  getEl,\n  getPreviousEls,\n  hide,\n  show,\n  fadeIn,\n  fadeOut,\n  mutate: fastDom.mutate.bind(fastDom),\n  measure: fastDom.measure.bind(fastDom),\n  nextFrame: fastDom.raf,\n};\n", "import * as TransitionStyles from './transition.scss';\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 * @param {object} child - The child transition using this as a base.\n * @returns {BaseTransition} An instance.\n */\nfunction BaseTransition(element, classes, child) {\n  const _classes = classes;\n  let _dom = element;\n  if (!child) throw new Error('Child transition argument must be defined!');\n  const _child = child;\n\n  let _lastClass;\n  let _transitionEndEvent;\n  let _transitionCompleteBinded;\n\n  let _isAnimated = false;\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 the transition is not supported.\n   */\n  function _addEventListener() {\n    /*\n      If transition is supported and the animation is animated,\n      listen for transition end event, otherwise call the handler directly.\n      Some browsers (e.g. IE9/OperaMini) do not support transitionend event.\n      If \"transition-duration: 0s\" is set, transitionEnd event will not\n      fire, so we need to call the handler straight away.\n    */\n    if (_transitionEndEvent && _isAnimated) {\n      _dom.addEventListener(_transitionEndEvent, _transitionCompleteBinded);\n      _child.dispatchEvent(BaseTransition.BEGIN_EVENT, {\n        target: _child,\n        type: BaseTransition.BEGIN_EVENT,\n      });\n\n      _dom.classList.add(BaseTransition.ANIMATING_CLASS);\n      _isAnimating = true;\n    } else {\n      _child.dispatchEvent(BaseTransition.BEGIN_EVENT, {\n        target: _child,\n        type: BaseTransition.BEGIN_EVENT,\n      });\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    _child.dispatchEvent(BaseTransition.END_EVENT, {\n      target: _child,\n      type: BaseTransition.END_EVENT,\n    });\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   */\n  function remove() {\n    halt();\n    _flush();\n    _dom.classList.remove(_classes.BASE_CLASS);\n  }\n\n  /**\n   * Add a \"transition-duration: 0s\" utility CSS class.\n   */\n  function animateOn() {\n    _dom.classList.remove(BaseTransition.NO_ANIMATION_CLASS);\n    _isAnimated = true;\n  }\n\n  /**\n   * Remove a \"transition-duration: 0s\" utility CSS class.\n   */\n  function animateOff() {\n    _dom.classList.add(BaseTransition.NO_ANIMATION_CLASS);\n    _isAnimated = false;\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    // Clear the transition classes from the old element.\n    remove();\n    animateOn();\n\n    _dom = targetElement;\n    _dom.classList.add(_classes.BASE_CLASS);\n    _transitionEndEvent = _getTransitionEndEvent(_dom);\n  }\n\n  /**\n   * @param {string} initialClass - The initial CSS class to set the state for this transition.\n   * @returns {BaseTransition} An instance.\n   */\n  function init(initialClass) {\n    _isAnimated = !_dom.classList.contains(BaseTransition.NO_ANIMATION_CLASS);\n    _transitionCompleteBinded = _transitionComplete.bind(this);\n    setElement(_dom);\n    if (!initialClass) {\n      throw new Error(\n        'Transition needs to be passed an initial CSS class on initialization!',\n      );\n    }\n    _dom.classList.add(initialClass);\n\n    return this;\n  }\n\n  /**\n   * @param {string} className - A CSS class.\n   * @returns {boolean} False if the class is already applied,\n   *   otherwise true if the class was applied.\n   */\n  function applyClass(className) {\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    _addEventListener();\n    _dom.classList.add(_lastClass);\n\n    return true;\n  }\n\n  // Attach public events.\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 { BaseTransition, TransitionStyles };\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", "import { BaseTransition } from '../transition/base-transition.js';\nimport { EventObserver } from '../event-observer.js';\n\nconst DIR_EVENT = 'transitiondir';\n\n// Exported constants.\nconst CLASSES = {\n  CSS_PROPERTY: 'max-height',\n  BASE_CLASS: 'u-max-height-transition',\n  MH_DEFAULT: 'u-max-height-default',\n  MH_SUMMARY: 'u-max-height-summary',\n  MH_DYNAMIC: 'u-max-height-dynamic',\n  MH_ZERO: 'u-max-height-zero',\n};\n\n/**\n * MoveTransition\n * @class\n * @classdesc Initializes new MoveTransition behavior.\n * @param {HTMLElement} element - DOM element to apply transition to.\n * @returns {MaxHeightTransition} An instance.\n */\nfunction MaxHeightTransition(element) {\n  const that = this;\n  const eventObserver = new EventObserver();\n  const _baseTransition = new BaseTransition(element, CLASSES, this);\n  let _previousHeight = 0;\n\n  /**\n   * Refresh the max height set on the element.\n   * This may be useful if resizing the window and the content height changes.\n   */\n  function refresh() {\n    const elmHeight = element.scrollHeight;\n    const newHeight = elmHeight + 'px';\n    element.style.maxHeight = newHeight;\n\n    // Revert to default value to clear any value used in \"up\" direction.\n    element.style.bottom = 'auto';\n    element.style.top = 'auto';\n  }\n\n  /**\n   * @returns {{rect: number, distanceToBottom: number, distanceToTop: number, dir: string}}\n   *   Useful metrics for presenting a popup.\n   */\n  function calcPosition() {\n    const rect = element.getBoundingClientRect();\n    const distanceToBottom = window.innerHeight - rect.top;\n    const distanceToTop = rect.top;\n    const dir = distanceToBottom <= 140 ? 'up' : 'down';\n\n    return {\n      rect,\n      distanceToBottom,\n      distanceToTop,\n      dir,\n    };\n  }\n\n  /**\n   * The whole page has loaded,\n   * including all dependent resources such as stylesheets and images.\n   */\n  function _pageLoaded() {\n    window.removeEventListener('load', _pageLoaded);\n    refresh();\n  }\n\n  /**\n   * @param {string} initialClass - The initial CSS class to set the state for this transition.\n   * @returns {MaxHeightTransition} An instance.\n   */\n  function init(initialClass) {\n    _baseTransition.init(initialClass);\n\n    /*\n    The scrollHeight of an element may be incorrect if the page hasn't\n    fully loaded yet, so we listen for that to happen before calculating\n    the element max-height.\n    */\n    window.addEventListener('load', _pageLoaded);\n\n    /*\n    The scrollHeight of an element may change on page load.\n    */\n    window.addEventListener('resize', () => {\n      refresh();\n    });\n\n    return this;\n  }\n\n  /**\n   * Reset the max-height to the default size.\n   * @returns {MaxHeightTransition} An instance.\n   */\n  function maxHeightDefault() {\n    refresh();\n    _baseTransition.applyClass(CLASSES.MH_DEFAULT);\n\n    if (!_previousHeight || element.scrollHeight > _previousHeight) {\n      _previousHeight = element.scrollHeight;\n    }\n\n    return this;\n  }\n\n  /**\n   * Collapses the max-height to just a summary height.\n   * @returns {MaxHeightTransition} An instance.\n   */\n  function maxHeightSummary() {\n    refresh();\n    _baseTransition.applyClass(CLASSES.MH_SUMMARY);\n\n    _previousHeight = element.scrollHeight;\n\n    return this;\n  }\n\n  /**\n   * Collapses the max-height to just a summary height.\n   * @returns {MaxHeightTransition} An instance.\n   */\n  function maxHeightDynamic() {\n    refresh();\n\n    // Assume direction is down to begin.\n    element.style.top = '100%';\n\n    const position = calcPosition();\n\n    let minHeight = 30;\n    const borderWidth = 2;\n\n    let newHeight =\n      element.scrollHeight + minHeight < position.distanceToBottom\n        ? `${element.scrollHeight + borderWidth}px`\n        : `${position.distanceToBottom - minHeight}px`;\n\n    if (position.dir === 'up') {\n      const parentHeight = element.parentElement.offsetHeight;\n      minHeight += parentHeight;\n      element.style.bottom = `${parentHeight - borderWidth}px`;\n      newHeight =\n        element.scrollHeight + minHeight < position.distanceToTop\n          ? `${element.scrollHeight + borderWidth}px`\n          : `${position.distanceToTop - minHeight}px`;\n      element.style.top = 'unset';\n    }\n\n    element.style.maxHeight = newHeight;\n\n    _baseTransition.applyClass(CLASSES.MH_DYNAMIC);\n\n    that.dispatchEvent(DIR_EVENT, {\n      target: that,\n      type: DIR_EVENT,\n      dir: position.dir,\n    });\n\n    _previousHeight = element.scrollHeight;\n\n    return this;\n  }\n\n  /**\n   * Collapses thte max-height completely.\n   * @returns {MaxHeightTransition} An instance.\n   */\n  function maxHeightZero() {\n    _baseTransition.applyClass(CLASSES.MH_ZERO);\n\n    _previousHeight = element.scrollHeight;\n\n    return this;\n  }\n\n  /**\n   * Remove style attribute.\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    element.style.maxHeight = '';\n    return _baseTransition.remove();\n  }\n\n  // Attach public events.\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.refresh = refresh;\n  this.remove = remove;\n\n  this.init = init;\n  this.maxHeightDefault = maxHeightDefault;\n  this.maxHeightSummary = maxHeightSummary;\n  this.maxHeightZero = maxHeightZero;\n  this.maxHeightDynamic = maxHeightDynamic;\n\n  return this;\n}\n\n// Public static properties.\nMaxHeightTransition.CLASSES = CLASSES;\n\nexport { MaxHeightTransition };\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", "import { BaseTransition } from '../transition/base-transition.js';\nimport { EventObserver } from '../event-observer.js';\nimport { checkBehaviorDom } from '../behavior/behavior.js';\nimport { BEHAVIOR_PREFIX, JS_HOOK } from '../standard-type.js';\n\nconst BASE_CLASS = BEHAVIOR_PREFIX + 'flyout-menu';\nconst SEL_PREFIX = '[' + JS_HOOK + '=' + BASE_CLASS;\n\n/**\n * FlyoutMenu\n * @class\n * @classdesc Initializes new FlyoutMenu behavior.\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.\n * As added JS behavior, this is added through HTML data-js-hook attributes.\n *\n * Structure is:\n * behavior_flyout-menu\n *   behavior_flyout-menu_trigger\n *   behavior_flyout-menu_content\n *     behavior_flyout-menu_trigger (optional)\n *\n * The second trigger is optional and may be used for a button in the content\n * area, which may obscure the first trigger.\n * The flyout can be triggered through a click of either trigger.\n * @param {HTMLElement} element - The DOM element to attach FlyoutMenu behavior.\n * @param {boolean} autoHideContent - Whether to add `hidden` attribute to\n *   content when it is collapsed.\n * @returns {FlyoutMenu} An instance.\n */\nfunction FlyoutMenu(element, autoHideContent = true) {\n  // Verify that the expected dom attributes are present.\n  const _dom = checkBehaviorDom(element, BASE_CLASS);\n  const _triggerDoms = _findTriggers(element);\n  const _contentDom = checkBehaviorDom(element, BASE_CLASS + '_content');\n\n  // Flyouts appear in one of four states.\n  let _state = 0;\n  const COLLAPSED = 0;\n  const COLLAPSING = 1;\n  const EXPANDING = 2;\n  const EXPANDED = 3;\n\n  let _transition;\n  let _expandTransitionMethod;\n  let _collapseTransitionMethod;\n\n  // Binded events.\n  // Needed to add and remove events to transitions.\n  const _collapseEndBinded = _collapseEnd.bind(this);\n  const _expandEndBinded = _expandEnd.bind(this);\n\n  /* If this menu appears in a data source,\n     this can be used to store the source.\n     Examples include the index in an Array,\n     a key in an Hash, or a node in a Tree. */\n  let _data;\n\n  // Whether this instance's behaviors are suspended or not.\n  let _suspended = true;\n\n  /* Event immediately preceeding mouseover is touchstart,\n     if that event's present we'll want to ignore mouseover\n     to avoid a mouseover and click immediately after each other. */\n  let _touchTriggered = false;\n\n  /**\n   * Iterate over dom tree and find FlyoutMenu triggers.\n   * We need to exclude the ones that are nested FlyoutMenus, since those\n   * will be managed by their own instance of this class.\n   * @param {HTMLElement} element - The DOM element to search for triggers within.\n   * @returns {Array} List of trigger DOM references within this FlyoutMenu.\n   */\n  function _findTriggers(element) {\n    const triggersList = [];\n    const triggers = element.querySelectorAll(`${SEL_PREFIX}_trigger]`);\n\n    let trigger;\n    let triggerParent;\n    let isSubTrigger;\n    // Iterate backwards ensuring that length is an UInt32.\n    for (let i = triggers.length >>> 0; i--;) {\n      isSubTrigger = false;\n      trigger = triggers[i];\n      triggerParent = trigger.parentElement;\n      while (triggerParent !== element) {\n        if (\n          triggerParent.getAttribute(JS_HOOK) &&\n          triggerParent.getAttribute(JS_HOOK).split(' ').indexOf(BASE_CLASS) !==\n            -1\n        ) {\n          isSubTrigger = true;\n          triggerParent = element;\n        } else {\n          triggerParent = triggerParent.parentElement;\n        }\n      }\n\n      if (!isSubTrigger) {\n        triggersList.unshift(triggers[i]);\n      }\n    }\n\n    return triggersList;\n  }\n\n  /**\n   * @returns {FlyoutMenu} An instance.\n   * @param {boolean} isExpanded - Whether the flyout menu is expanded at\n   *   initialization-time or collapsed.\n   */\n  function init(isExpanded = false) {\n    _state = isExpanded ? EXPANDED : COLLAPSED;\n    _triggerDoms.forEach((triggerDom) => {\n      _setAriaAttr('expanded', triggerDom, isExpanded);\n\n      triggerDom.addEventListener('click', _handleTriggerClicked.bind(this));\n      triggerDom.addEventListener('touchstart', _handleTouchStart, {\n        passive: true,\n      });\n      triggerDom.addEventListener('mouseover', _handleTriggerOver.bind(this));\n      triggerDom.addEventListener('mouseout', _handleTriggerOut.bind(this));\n    });\n\n    _contentDom.setAttribute('data-open', isExpanded ? 'true' : 'false');\n    if (autoHideContent && !isExpanded) _contentDom.setAttribute('hidden', '');\n\n    resume();\n\n    return this;\n  }\n\n  /**\n   * Set an aria attribute on an HTML element.\n   * @param {string} type - The aria attribute to set\n   *   (without the aria- prefix).\n   * @param {HTMLElement} elem - The element to set.\n   * @param {boolean} value - The value to set on `aria-expanded`,\n   *   casts to a string.\n   * @returns {string} The cast value.\n   */\n  function _setAriaAttr(type, elem, value) {\n    const strValue = String(value);\n    elem.setAttribute('aria-' + type, strValue);\n    return strValue;\n  }\n\n  /**\n   * Event handler for when the search input trigger is touched.\n   */\n  function _handleTouchStart() {\n    _touchTriggered = true;\n  }\n\n  /**\n   * Event handler for when the trigger is hovered over.\n   * @param {MouseEvent} event - The clicked flyout trigger event object.\n   */\n  function _handleTriggerOver(event) {\n    if (_suspended) return;\n\n    if (!_touchTriggered) {\n      this.dispatchEvent('triggerover', {\n        target: this,\n        trigger: event.target,\n        type: 'triggerover',\n      });\n    }\n\n    _touchTriggered = false;\n  }\n\n  /**\n   * Event handler for when the trigger is hovered out.\n   * @param {MouseEvent} event - The clicked flyout trigger event object.\n   */\n  function _handleTriggerOut(event) {\n    if (_suspended) return;\n\n    this.dispatchEvent('triggerout', {\n      target: this,\n      trigger: event.target,\n      type: 'triggerout',\n    });\n  }\n\n  /**\n   * Event handler for when the search input trigger is clicked,\n   * which opens/closes the search input.\n   * @param {MouseEvent} event - The clicked flyout trigger event object.\n   */\n  function _handleTriggerClicked(event) {\n    if (_suspended) return;\n\n    this.dispatchEvent('triggerclick', {\n      target: this,\n      trigger: event.target,\n      type: 'triggerclick',\n    });\n\n    event.preventDefault();\n\n    switch (_state) {\n      case COLLAPSED:\n      case COLLAPSING:\n        this.expand();\n        break;\n      case EXPANDING:\n      case EXPANDED:\n        this.collapse();\n        break;\n    }\n  }\n\n  /**\n   * Open the search box.\n   * @returns {FlyoutMenu} An instance.\n   */\n  function expand() {\n    if (_state === EXPANDING || _state === EXPANDED) return this;\n\n    _transition?.halt();\n\n    _state = EXPANDING;\n    if (autoHideContent) _contentDom.removeAttribute('hidden');\n    this.dispatchEvent('expandbegin', { target: this, type: 'expandbegin' });\n\n    // Only use transitions if both expand and collapse are set.\n    if (!_expandTransitionMethod || !_collapseTransitionMethod) {\n      _expandEndBinded();\n      return this;\n    }\n\n    const hasTransition = _transition?.isAnimated();\n    if (hasTransition) {\n      _transition.addEventListener(BaseTransition.END_EVENT, _expandEndBinded);\n    }\n\n    _expandTransitionMethod();\n\n    if (!hasTransition) {\n      _expandEndBinded();\n    }\n\n    return this;\n  }\n\n  /**\n   * Close the search box.\n   * If collapse is called when expand animation is underway,\n   * save a deferred call to collapse, which is called when\n   * expand completes.\n   * @returns {FlyoutMenu} An instance.\n   */\n  function collapse() {\n    if (_state === COLLAPSING || _state === COLLAPSED) return this;\n\n    _transition?.halt();\n\n    for (let i = 0, len = _triggerDoms.length; i < len; i++) {\n      _setAriaAttr('expanded', _triggerDoms[i], false);\n    }\n\n    _contentDom.setAttribute('data-open', 'false');\n\n    _state = COLLAPSING;\n    this.dispatchEvent('collapsebegin', {\n      target: this,\n      type: 'collapsebegin',\n    });\n\n    // Only use transitions if both expand and collapse are set.\n    if (!_collapseTransitionMethod || !_expandTransitionMethod) {\n      _collapseEndBinded();\n      return this;\n    }\n\n    const hasTransition = _transition?.isAnimated();\n    if (hasTransition) {\n      _transition.addEventListener(\n        BaseTransition.END_EVENT,\n        _collapseEndBinded,\n      );\n    }\n\n    _collapseTransitionMethod();\n\n    if (!hasTransition) {\n      _collapseEndBinded();\n    }\n\n    return this;\n  }\n\n  /**\n   * Expand animation has completed.\n   * Call deferred collapse function,\n   * if set (otherwise it will call a noop function).\n   */\n  function _expandEnd() {\n    _state = EXPANDED;\n    _contentDom.setAttribute('data-open', 'true');\n    if (_transition) {\n      _transition.removeEventListener(\n        BaseTransition.END_EVENT,\n        _expandEndBinded,\n      );\n    }\n    this.dispatchEvent('expandend', { target: this, type: 'expandend' });\n\n    for (let i = 0, len = _triggerDoms.length; i < len; i++) {\n      _setAriaAttr('expanded', _triggerDoms[i], true);\n    }\n  }\n\n  /**\n   * Collapse animation has completed.\n   */\n  function _collapseEnd() {\n    _state = COLLAPSED;\n\n    if (autoHideContent) _contentDom.setAttribute('hidden', '');\n\n    if (_transition) {\n      _transition.removeEventListener(\n        BaseTransition.END_EVENT,\n        _collapseEndBinded,\n      );\n    }\n\n    this.dispatchEvent('collapseend', { target: this, type: 'collapseend' });\n  }\n\n  /**\n   * Set the transition that runs when this flyout is expanded/collapsed.\n   * @param {BaseTransition} transition - A transition object.\n   * @param {()=>void} collapseMethod - The collapse method to call on the transition.\n   * @param {()=>void} expandMethod - The expand method to call on the transition.\n   */\n  function setTransition(transition, collapseMethod, expandMethod) {\n    _transition = transition;\n\n    if (collapseMethod && collapseMethod !== _collapseTransitionMethod) {\n      _collapseTransitionMethod = collapseMethod;\n    }\n\n    if (expandMethod && expandMethod !== _expandTransitionMethod) {\n      _expandTransitionMethod = expandMethod;\n    }\n  }\n\n  /**\n   * Clear the transitions attached to this FlyoutMenu instance.\n   */\n  function clearTransition() {\n    if (_transition) {\n      _transition.remove();\n    }\n\n    _transition = undefined;\n\n    _expandTransitionMethod = undefined;\n    _collapseTransitionMethod = undefined;\n  }\n\n  /**\n   * @returns {object}\n   *   Hash of container, content DOM references, and a list of trigger DOMs.\n   */\n  function getDom() {\n    return {\n      container: _dom,\n      content: _contentDom,\n      trigger: _triggerDoms,\n    };\n  }\n\n  /**\n   * Enable broadcasting of trigger events.\n   * @returns {boolean} True if resumed, false otherwise.\n   */\n  function resume() {\n    if (_suspended) _suspended = false;\n\n    return !_suspended;\n  }\n\n  /**\n   * Suspend broadcasting of trigger events.\n   * @returns {boolean} True if suspended, false otherwise.\n   */\n  function suspend() {\n    if (!_suspended) _suspended = true;\n\n    return _suspended;\n  }\n\n  /**\n   * @param {number | string | object} data - A data identifier\n   *   such as an Array index, Hash key, or Tree node.\n   * @returns {FlyoutMenu} An instance.\n   */\n  function setData(data) {\n    _data = data;\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.init = init;\n  this.expand = expand;\n  this.collapse = collapse;\n  this.setTransition = setTransition;\n  this.clearTransition = clearTransition;\n  this.getData = () => _data;\n  this.getTransition = () => _transition;\n  this.getDom = getDom;\n  this.isAnimating = () => _state === EXPANDING || _state === COLLAPSING;\n  this.isExpanded = () => _state === EXPANDED;\n  this.resume = resume;\n  this.setData = setData;\n  this.suspend = suspend;\n\n  // Public static properties.\n  FlyoutMenu.BASE_CLASS = BASE_CLASS;\n\n  return this;\n}\n\nexport { FlyoutMenu };\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", ".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)}", "/* ==========================================================================\n   Expandable Organism\n   ========================================================================== */\n\nimport { checkDom, setInitFlag, instantiateAll } from '../utilities/';\n\nimport {\n  add as addDataHook,\n  MaxHeightTransition,\n  EventObserver,\n  FlyoutMenu,\n} from '../../utilities';\n\nimport * as ExpandableStyles from './expandable.scss';\n\nconst BASE_CLASS = 'o-expandable';\n\n/**\n * Expandable\n * @class\n * @classdesc Initializes a new Expandable molecule.\n * @param {HTMLElement} element - The DOM element within which to search\n *   for the molecule.\n * @returns {Expandable} An instance.\n */\nfunction Expandable(element) {\n  // Internal vars.\n  const _dom = checkDom(element, BASE_CLASS);\n  let _targetDom;\n  let _contentDom;\n  let _labelDom;\n\n  // Animation vars.\n  let _transition;\n  let _flyout;\n\n  /**\n   * Set up and create the multiselect.\n   * @returns {Expandable} An instance.\n   */\n  function init() {\n    if (!setInitFlag(_dom)) {\n      return this;\n    }\n\n    _targetDom = _dom.querySelector(`.${BASE_CLASS}__header`);\n    _contentDom = _dom.querySelector(`.${BASE_CLASS}__content`);\n    _labelDom = _dom.querySelector(`.${BASE_CLASS}__label`);\n\n    const isExpanded = _dom.classList.contains(`${BASE_CLASS}--onload-open`);\n\n    // Add behavior hooks.\n    addDataHook(_dom, 'behavior_flyout-menu');\n    addDataHook(_targetDom, 'behavior_flyout-menu_trigger');\n    addDataHook(_contentDom, 'behavior_flyout-menu_content');\n\n    // If it's expanded we don't set an initial height,\n    // as it will be calculated internally.\n    const initialClass = isExpanded\n      ? MaxHeightTransition.CLASSES.MH_DEFAULT\n      : MaxHeightTransition.CLASSES.MH_ZERO;\n    _transition = new MaxHeightTransition(_contentDom).init(initialClass);\n\n    // Initially hide content if expandable isn't expanded.\n    if (!isExpanded) _contentDom.classList.add('u-hidden');\n\n    // Create root menu.\n    _flyout = new FlyoutMenu(_dom);\n\n    _flyout.setTransition(\n      _transition,\n      _transition.maxHeightZero,\n      _transition.maxHeightDefault,\n    );\n\n    _flyout.init(isExpanded);\n\n    // Add events.\n    _flyout.addEventListener('expandbegin', () => {\n      _contentDom.classList.remove('u-hidden');\n      this.dispatchEvent('expandbegin', { target: this });\n    });\n    _flyout.addEventListener('collapseend', () => {\n      _contentDom.classList.add('u-hidden');\n    });\n\n    return this;\n  }\n\n  /**\n   * @returns {string} The expandable label text.\n   */\n  function getLabelText() {\n    return _labelDom.textContent.trim();\n  }\n\n  // Attach public events.\n  this.init = init;\n  this.expand = () => _flyout.expand();\n  this.collapse = () => _flyout.collapse();\n  this.isExpanded = () => _flyout.isExpanded();\n  this.refresh = () => _flyout.getTransition().refresh();\n  this.getLabelText = getLabelText;\n\n  const eventObserver = new EventObserver();\n  this.addEventListener = eventObserver.addEventListener;\n  this.removeEventListener = eventObserver.removeEventListener;\n  this.dispatchEvent = eventObserver.dispatchEvent;\n\n  return this;\n}\n\nExpandable.BASE_CLASS = BASE_CLASS;\nExpandable.init = (scope) =>\n  instantiateAll(`.${Expandable.BASE_CLASS}`, Expandable, scope);\n\nexport { Expandable, ExpandableStyles };\n", "/* ==========================================================================\n   Expandable Organism\n   ========================================================================== */\n\nimport { checkDom, setInitFlag, instantiateAll } from '../utilities';\nimport { Expandable } from './expandable.js';\n\nimport * as ExpandableGroupStyles from './expandable-group.scss';\n\nconst BASE_CLASS = 'o-expandable-group';\n\n/**\n * ExpandableGroup\n * @class\n * @classdesc Initializes a new Expandable molecule.\n * @param {HTMLElement} element - The DOM element within which to search\n *   for the molecule.\n * @returns {ExpandableGroup} An instance.\n */\nfunction ExpandableGroup(element) {\n  // Internal vars.\n  const _dom = checkDom(element, BASE_CLASS);\n  const _isAccordion = _dom.classList.contains(`${BASE_CLASS}--accordion`);\n  let _expandables;\n  let _lastExpanded;\n\n  /**\n   * @param {object} evt - The event object.\n   */\n  function _handleExpandBegin(evt) {\n    const target = evt.target;\n    if (_lastExpanded && _lastExpanded !== target) {\n      _lastExpanded.collapse();\n    }\n    _lastExpanded = target;\n  }\n\n  /**\n   * Set up and create the multiselect.\n   * @param {Array} expandables - List of expandables inside this group.\n   * @returns {ExpandableGroup} An instance.\n   */\n  function init(expandables) {\n    if (!setInitFlag(_dom)) {\n      return this;\n    }\n\n    if (_isAccordion) {\n      _expandables = expandables;\n\n      _expandables.forEach((expandable) => {\n        expandable.addEventListener('expandbegin', _handleExpandBegin);\n      });\n    }\n\n    return this;\n  }\n\n  // Attach public events.\n  this.init = init;\n\n  return this;\n}\n\nExpandableGroup.BASE_CLASS = BASE_CLASS;\nExpandableGroup.init = (scope) => {\n  const base = scope || document;\n  const expandableGroupsDom = base.querySelectorAll(`.${BASE_CLASS}`);\n  expandableGroupsDom.forEach((expandableGroupDom) => {\n    const expandables = instantiateAll(\n      `.${Expandable.BASE_CLASS}`,\n      Expandable,\n      expandableGroupDom,\n    );\n    const expandableGroup = new ExpandableGroup(expandableGroupDom);\n    expandableGroup.init(expandables);\n  });\n};\n\nexport { ExpandableGroup, ExpandableGroupStyles };\n", "import { scrollIntoView } from '../../../js/modules/util/scroll.js';\nimport DT from './dom-tools.js';\nimport { ExpandableGroup } from '@cfpb/cfpb-design-system';\n\nconst CSS = {\n  HAS_ATTENTION: 'has-attention',\n  HOVER_HAS_ATTENTION: 'hover-has-attention',\n};\n\nconst NO_OP = () => {\n  // Placeholder function meant to be overridden.\n};\n\n/**\n * FormExplainer\n * @class\n * @classdesc Initializes a new Form Explainer.\n * @param {HTMLElement} element - Base DOM element.\n * @param {object} options - Configuration options.\n * @returns {object} An Form Explainer instance.\n */\nclass FormExplainer {\n  constructor(element, options = {}) {\n    this.currentPage = options.currentPage || 1;\n    this.elements = {};\n  }\n\n  /**\n   * Initialize the FormExplainer.\n   * @returns {FormExplainer} An instance.\n   */\n  init() {\n    this.setPageCount();\n    this.setCurrentPage(this.currentPage, undefined, false);\n    this.setUIElements();\n    this.initializeUI(this.elements);\n    this.initializeEvents();\n\n    return this;\n  }\n\n  /**\n   * Initialize the UI after instatiation.\n   * @param {object} elements - Current page DOM elements.\n   */\n  initializeUI(elements) {\n    if (this.pageCount === 1) {\n      DT.hide('.form-explainer__page-buttons');\n    }\n\n    DT.applyAll(elements.pages, (value, index) => {\n      const _index = index + 1;\n      if (_index > 1) {\n        // Hide all but the first parge\n        const _page = this.getPageEl(_index);\n        DT.hide(_page);\n      }\n    });\n\n    ExpandableGroup.init();\n  }\n\n  /**\n   * Update the pagination UI.\n   */\n  updatePaginationUI() {\n    const BTN_DISABLED = 'a-btn--disabled';\n    const PAGE_BTN_CTR = '.form-explainer__page-buttons';\n\n    if (this.pageCount > 1) {\n      DT.removeClass(PAGE_BTN_CTR + ' button', BTN_DISABLED);\n      if (this.currentPage === 1) {\n        DT.addClass(PAGE_BTN_CTR + ' .prev', BTN_DISABLED);\n      } else if (this.currentPage === this.pageCount) {\n        DT.addClass(PAGE_BTN_CTR + ' .next', BTN_DISABLED);\n      }\n    }\n  }\n\n  /* Update attention classes based on the expandable or image overlay\n   that was targeted.\n   Remove the attention class from all the expandables/overlays,\n   and then apply it to the target & its associated overlay\n   or expandable.\n   * @param {HTMLElement} target - Overlay or expandable DOM node.\n   * @param {string} className - Hover class name.\n   */\n  updateAttention(target, className) {\n    let associated;\n    const targetId = target.getAttribute('id');\n\n    DT.removeClass(\n      '.o-expandable__form-explainer, .image-map__overlay',\n      className,\n    );\n\n    if (target.getAttribute('href') !== null) {\n      associated = DT.getEl(target.getAttribute('href'));\n    } else if (targetId !== null) {\n      associated = DT.getEl('[href=\"#' + targetId + '\"]');\n    }\n\n    if (associated !== null) {\n      if (className === CSS.HAS_ATTENTION) {\n        DT.removeClass(target, CSS.HOVER_HAS_ATTENTION);\n        DT.removeClass(associated, CSS.HOVER_HAS_ATTENTION);\n      }\n      DT.addClass(target, className);\n      DT.addClass(associated, className);\n    }\n  }\n\n  /**\n   * Open the expandable and scroll into the viewport.\n   * @param {HTMLElement} imageOverlay - Image overlay, which was clicked.\n   * @param {HTMLElement} targetExpandable - Target expandable.\n   * current focus.\n   */\n  openAndScrollToExpandable(imageOverlay, targetExpandable) {\n    const targetExpandableTarget = targetExpandable.querySelector(\n      '.o-expandable__header',\n    );\n\n    window.setTimeout(() => {\n      scrollIntoView(targetExpandableTarget, {\n        duration: 500,\n        callback: () => targetExpandableTarget.focus(),\n      });\n    }, 150);\n    window.setTimeout(() => targetExpandableTarget.click(), 0);\n  }\n\n  /**\n   * Set the UI elements for the page\n   * @returns {object} DOM elements for the page.\n   */\n  setUIElements() {\n    const explain = DT.getEl('.explain');\n    const explainPagination = explain.querySelector('.explain__pagination');\n    const explainPageBtns = explain.querySelectorAll(\n      '.form-explainer__page-buttons button',\n    );\n    const pages = explain.querySelectorAll('.explain__page');\n    const formExplainerLinks = explain.querySelectorAll(\n      '.form-explainer__page-link',\n    );\n\n    return Object.assign(this.elements, {\n      explain,\n      explainPageBtns,\n      explainPagination,\n      formExplainerLinks,\n      pages,\n    });\n  }\n\n  /**\n   * Return explainer page element based on page number.\n   * @param {number} pageNum - Number of explainer page.\n   * @returns {object} Page DOM element.\n   */\n  getPageEl(pageNum) {\n    return DT.getEl(`#explain__page-${pageNum}`);\n  }\n\n  /**\n   * Paginate through the various form pages.\n   * @param {string} direction - 'next' or 'prev'.\n   */\n  paginate(direction) {\n    const currentPage = this.currentPage;\n    const increment = direction === 'next' ? 1 : -1;\n    const newPage = currentPage + increment;\n\n    // Move to the next or previous page if it's not the first or last page.\n    if (\n      (direction === 'next' && newPage <= this.pageCount) ||\n      (direction === 'prev' && newPage >= 1)\n    ) {\n      this.switchPage(currentPage, newPage);\n    }\n  }\n\n  /**\n   * Paginate through the various form pages.\n   * @param {number} pageNum - Number of the current page.\n   * @param {Function} callback - Function to invode after scroll.\n   * @param {boolean} shouldScrollIntoView - Whether to scroll the page into view.\n   */\n  setCurrentPage(pageNum, callback, shouldScrollIntoView = true) {\n    const CURRENT_PAGE = 'current-page';\n    const PAGE_LINK = '.form-explainer__page-link';\n    const PAGINATION = '.explain__pagination';\n    const CURRENT_PAGE_LINK =\n      '.form-explainer__page-link[data-page=\"' + pageNum + '\"]';\n\n    this.currentPage = parseInt(pageNum, 10);\n\n    DT.removeClass(PAGE_LINK, CURRENT_PAGE);\n    DT.addClass(CURRENT_PAGE_LINK, CURRENT_PAGE);\n    this.updatePaginationUI();\n\n    if (shouldScrollIntoView) {\n      scrollIntoView(DT.getEl(PAGINATION), {\n        duration: 200,\n        callback: callback || NO_OP,\n      });\n    }\n  }\n\n  /**\n   * Paginate through the various form pages.\n   * @param {number} pageCount - Number of pages.\n   */\n  setPageCount(pageCount) {\n    const pages = DT.getEls('.explain__page');\n    this.pageCount = pageCount || pages.length;\n  }\n\n  /**\n   * Switch pages by fading pages in / out and\n   * updating the UI accordingly.\n   * @param {number} currentPage - Current page Number.\n   * @param {number} newPage - New page number.\n   */\n  switchPage(currentPage, newPage) {\n    this.setCurrentPage(newPage, () => {\n      // After scrolling the window, fade out the current page.\n      DT.fadeOut(this.getPageEl(currentPage), 600, () => {\n        DT.fadeIn(this.getPageEl(newPage), 700);\n      });\n    });\n  }\n\n  /* Initialize the DOM events for the entire explainer UI. */\n  initializeEvents() {\n    const uiElements = this.elements;\n\n    if (this.pageCount > 1) {\n      /* When a paginantion link is clicked,\n       * switch to the next / previous page.\n       */\n      DT.bindEvents(uiElements.explainPageBtns, 'click', (event) => {\n        const target = event.currentTarget;\n\n        if (!DT.hasClass(target, 'disabled')) {\n          const direction = DT.hasClass(target, 'prev') ? 'prev' : 'next';\n          this.paginate(direction);\n        }\n      });\n\n      /* When a page navigation link is clicked,\n       * switch to the appropriate page.\n       */\n      DT.bindEvents(uiElements.formExplainerLinks, 'click', (event) => {\n        const target = event.currentTarget;\n        const pageNum = target.getAttribute('data-page');\n        const currentPage = this.currentPage;\n\n        if (!DT.hasClass(target, 'disabled') && pageNum !== currentPage) {\n          this.switchPage(currentPage, pageNum);\n        }\n      });\n    }\n\n    /* When the mouse is over the image overlay or form explainer,\n     * update the hover styles.\n     */\n    DT.bindEvents(\n      '.image-map__overlay, .o-expandable__form-explainer',\n      ['mouseenter', 'mouseleave'],\n      (event) => {\n        event.preventDefault();\n        this.updateAttention(event.target, CSS.HOVER_HAS_ATTENTION);\n      },\n    );\n\n    /* When a form explainer expandable target has the focus,\n     * update the image overlay.\n     */\n    DT.bindEvents('.o-expandable__header', 'focus', (event) => {\n      const expandable = event.target.closest('.o-expandable__form-explainer');\n      this.updateAttention(expandable, CSS.HOVER_HAS_ATTENTION);\n    });\n\n    /* When an overlay is clicked, toggle the corresponding expandable\n     * and scroll the page until it is in view.\n     */\n    DT.bindEvents('.image-map__overlay', 'click', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      const imageOverlay = event.target;\n      const itemID = imageOverlay.getAttribute('href');\n      const targetExpandable = DT.getEl(itemID);\n\n      this.openAndScrollToExpandable(imageOverlay, targetExpandable);\n    });\n\n    /* When a form explainer expandable is clicked / pressed,\n     * update the image overlay position and hover styles.\n     */\n    DT.bindEvents(\n      '.o-expandable__form-explainer .o-expandable__header',\n      ['click', 'keypress'],\n      (event) => {\n        if (event.which === 13 || event.type === 'click') {\n          const closestFormExplainer = event.target.closest(\n            '.o-expandable__form-explainer',\n          );\n\n          this.updateAttention(closestFormExplainer, CSS.HAS_ATTENTION);\n        }\n      },\n    );\n  }\n}\n\nexport default FormExplainer;\n", "import FormExplainer from './FormExplainer';\nconst formExplainerElement = document.querySelector('.form-explainer');\nconst formExplainer = new FormExplainer(formExplainerElement);\nformExplainer.init();\n"],
  "mappings": "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",
  "names": ["require_fastdom", "__commonJSMin", "exports", "module", "win", "debug", "raf", "cb", "FastDom", "self", "tasks", "task", "fn", "ctx", "scheduleFlush", "remove", "props", "child", "mixin", "fastdom", "flush", "writes", "reads", "error", "e", "array", "item", "index", "target", "source", "key", "_easeInOutQuad", "currentTime", "startPosition", "distance", "duration", "distanceDelta", "halfDuration", "updatedTime", "_calculateDuration", "scrollTo", "to", "opts", "startTime", "scroll", "timestamp", "elapsed", "next", "scrollIntoView", "elem", "elementInView", "elementTop", "strict", "windowHeight", "windowTop", "windowBottom", "elementHeight", "elementBottom", "import_fastdom", "NO_OP", "applyAll", "elements", "applyFn", "parsedElements", "bindEvents", "events", "callback", "getEls", "element", "event", "createElement", "HTML", "div", "removeClass", "selector", "className", "fastDom", "addClass", "hasClass", "getEl", "_isEl", "getPreviousEls", "filter", "previousSiblings", "prevEl", "_getMatches", "el", "_matchesMethod", "hide", "show", "fadeIn", "time", "fadeOut", "dom_tools_default", "BaseTransition", "element", "classes", "child", "_classes", "_dom", "_child", "_lastClass", "_transitionEndEvent", "_transitionCompleteBinded", "_isAnimated", "_isAnimating", "_isFlushed", "_addEventListener", "_removeEventListener", "_transitionComplete", "evt", "_flush", "prop", "halt", "remove", "animateOn", "animateOff", "_getTransitionEndEvent", "elem", "msg", "transition", "transitions", "transitionEvent", "setElement", "targetElement", "init", "initialClass", "applyClass", "className", "EventObserver", "_events", "addEventListener", "event", "callback", "removeEventListener", "index", "dispatchEvent", "options", "evts", "i", "len", "DIR_EVENT", "CLASSES", "MaxHeightTransition", "element", "that", "eventObserver", "EventObserver", "_baseTransition", "BaseTransition", "_previousHeight", "refresh", "newHeight", "calcPosition", "rect", "distanceToBottom", "distanceToTop", "dir", "_pageLoaded", "init", "initialClass", "maxHeightDefault", "maxHeightSummary", "maxHeightDynamic", "position", "minHeight", "borderWidth", "parentHeight", "maxHeightZero", "remove", "JS_HOOK", "BEHAVIOR_PREFIX", "STATE_PREFIX", "contains", "element", "value", "values", "JS_HOOK", "add", "msg", "checkBehaviorDom", "element", "behaviorDataAttr", "dom", "contains", "selector", "JS_HOOK", "msg", "BASE_CLASS", "BEHAVIOR_PREFIX", "SEL_PREFIX", "JS_HOOK", "FlyoutMenu", "element", "autoHideContent", "_dom", "checkBehaviorDom", "_triggerDoms", "_findTriggers", "_contentDom", "_state", "COLLAPSED", "COLLAPSING", "EXPANDING", "EXPANDED", "_transition", "_expandTransitionMethod", "_collapseTransitionMethod", "_collapseEndBinded", "_collapseEnd", "_expandEndBinded", "_expandEnd", "_data", "_suspended", "_touchTriggered", "triggersList", "triggers", "trigger", "triggerParent", "isSubTrigger", "i", "init", "isExpanded", "triggerDom", "_setAriaAttr", "_handleTriggerClicked", "_handleTouchStart", "_handleTriggerOver", "_handleTriggerOut", "resume", "type", "elem", "value", "strValue", "event", "expand", "hasTransition", "BaseTransition", "collapse", "len", "setTransition", "transition", "collapseMethod", "expandMethod", "clearTransition", "getDom", "suspend", "setData", "data", "eventObserver", "EventObserver", "INIT_FLAG", "STATE_PREFIX", "_verifyElementExists", "element", "baseClass", "msg", "_verifyClassExists", "dom", "checkDom", "setInitFlag", "contains", "add", "instantiateAll", "selector", "Constructor", "scope", "config", "elements", "insts", "inst", "i", "len", "utilities_exports", "__export", "utilities_default", "BASE_CLASS", "Expandable", "element", "_dom", "checkDom", "_targetDom", "_contentDom", "_labelDom", "_transition", "_flyout", "init", "setInitFlag", "isExpanded", "add", "initialClass", "MaxHeightTransition", "FlyoutMenu", "getLabelText", "eventObserver", "EventObserver", "scope", "instantiateAll", "BASE_CLASS", "ExpandableGroup", "element", "_dom", "checkDom", "_isAccordion", "_expandables", "_lastExpanded", "_handleExpandBegin", "evt", "target", "init", "expandables", "setInitFlag", "expandable", "scope", "expandableGroupDom", "instantiateAll", "Expandable", "CSS", "NO_OP", "FormExplainer", "element", "options", "elements", "dom_tools_default", "value", "index", "_index", "_page", "ExpandableGroup", "BTN_DISABLED", "PAGE_BTN_CTR", "target", "className", "associated", "targetId", "imageOverlay", "targetExpandable", "targetExpandableTarget", "scrollIntoView", "explain", "explainPagination", "explainPageBtns", "pages", "formExplainerLinks", "pageNum", "direction", "currentPage", "newPage", "callback", "shouldScrollIntoView", "CURRENT_PAGE", "PAGE_LINK", "PAGINATION", "CURRENT_PAGE_LINK", "pageCount", "uiElements", "event", "expandable", "itemID", "closestFormExplainer", "FormExplainer_default", "formExplainerElement", "formExplainer", "FormExplainer_default"]
}
