{"version":3,"file":"vue-uswds.components.cjs","sources":["../src/utils/constants.js","../src/components/BaseLink/BaseLink.vue","../src/composables/useAccordion.js","../src/components/UsaAccordion/UsaAccordion.vue","../src/utils/common.js","../src/utils/unique-id.js","../src/components/UsaAccordionItem/UsaAccordionItem.vue","../src/components/UsaAlert/UsaAlert.vue","../src/composables/useToggle.js","../src/components/UsaBannerContent/UsaBannerContent.vue","../src/components/UsaBanner/UsaBanner.vue","../src/components/UsaBreadcrumbItem/UsaBreadcrumbItem.vue","../src/components/UsaBreadcrumb/UsaBreadcrumb.vue","../src/components/UsaButton/UsaButton.vue","../src/components/UsaButtonGroup/UsaButtonGroup.vue","../src/components/UsaButtonGroupItem/UsaButtonGroupItem.vue","../src/components/UsaCard/UsaCard.vue","../src/components/UsaCharacterCount/UsaCharacterCount.vue","../src/components/UsaCheckbox/UsaCheckbox.vue","../src/components/UsaChecklistItem/UsaChecklistItem.vue","../src/components/UsaCollection/UsaCollection.vue","../src/components/UsaCollectionCalendar/UsaCollectionCalendar.vue","../src/components/UsaCollectionMetaItem/UsaCollectionMetaItem.vue","../src/composables/useComboBox.js","../src/components/UsaFormGroup/UsaFormGroup.vue","../src/components/UsaLabel/UsaLabel.vue","../src/components/UsaComboBox/UsaComboBox.vue","../src/components/UsaTextInput/UsaTextInput.vue","../src/components/UsaSelect/UsaSelect.vue","../src/components/UsaDateInput/UsaDateInput.vue","../src/utils/dates.js","../node_modules/@vueuse/integrations/useFocusTrap/component.mjs","../src/components/UsaDatePickerCalendarDay/useDayPicker.js","../src/components/UsaDatePickerCalendarDay/UsaDatePickerCalendarDay.vue","../src/components/UsaDatePickerCalendarMonth/useMonthPicker.js","../src/components/UsaDatePickerCalendarMonth/UsaDatePickerCalendarMonth.vue","../src/components/UsaDatePickerCalendarYear/useYearPicker.js","../src/components/UsaDatePickerCalendarYear/UsaDatePickerCalendarYear.vue","../src/components/UsaDatePickerCalendar/UsaDatePickerCalendar.vue","../src/components/UsaDatePicker/UsaDatePicker.vue","../src/components/UsaDateRangePicker/UsaDateRangePicker.vue","../src/composables/useFileInput.js","../src/components/UsaFileInput/UsaFileInput.vue","../src/components/UsaFooter/UsaFooter.vue","../src/components/UsaFooterAddress/UsaFooterAddress.vue","../src/components/UsaFooterCollapsibleMenuSection/UsaFooterCollapsibleMenuSection.vue","../src/components/UsaFooterCollapsibleMenu/UsaFooterCollapsibleMenu.vue","../src/components/UsaFooterLogo/UsaFooterLogo.vue","../src/components/UsaFooterMenu/UsaFooterMenu.vue","../src/components/UsaFooterNav/UsaFooterNav.vue","../src/components/UsaFooterPrimarySection/UsaFooterPrimarySection.vue","../src/components/UsaFooterSecondarySection/UsaFooterSecondarySection.vue","../src/components/UsaFooterSocialLinks/UsaFooterSocialLinks.vue","../src/components/UsaGraphicList/UsaGraphicList.vue","../src/components/UsaGraphicListRow/UsaGraphicListRow.vue","../src/composables/useMobileMenu.js","../src/components/UsaHeader/UsaHeader.vue","../src/components/UsaHero/UsaHero.vue","../src/components/UsaHeroCallout/UsaHeroCallout.vue","../src/components/UsaIcon/UsaIcon.vue","../src/components/UsaIconList/UsaIconList.vue","../src/components/UsaIdentifier/UsaIdentifier.vue","../src/components/UsaInPageNav/useInPageNavigation.js","../src/components/UsaInPageNav/UsaInPageNav.vue","../src/components/UsaLanguageSelector/UsaLanguageSelector.vue","../src/components/UsaLink/UsaLink.vue","../src/components/UsaModalCloseButton/UsaModalCloseButton.vue","../src/components/UsaModal/UsaModal.vue","../node_modules/@vueuse/integrations/useFocusTrap.mjs","../src/components/UsaOverlay/UsaOverlay.vue","../src/components/UsaNav/UsaNav.vue","../src/components/UsaNavDropdown/UsaNavDropdown.vue","../src/components/UsaNavDropdownButton/UsaNavDropdownButton.vue","../src/components/UsaNavPrimaryItem/UsaNavPrimaryItem.vue","../src/components/UsaNavSubmenu/UsaNavSubmenu.vue","../src/components/UsaNavSubmenuItem/UsaNavSubmenuItem.vue","../src/components/UsaNavPrimary/UsaNavPrimary.vue","../src/components/UsaNavSecondary/UsaNavSecondary.vue","../src/components/UsaNavbar/UsaNavbar.vue","../src/composables/usePagination.js","../src/components/UsaPaginationArrow/UsaPaginationArrow.vue","../src/components/UsaPaginationItem/UsaPaginationItem.vue","../src/components/UsaPagination/UsaPagination.vue","../src/components/UsaPasswordMask/UsaPasswordMask.vue","../src/components/UsaProcessList/UsaProcessList.vue","../src/components/UsaProcessListItem/UsaProcessListItem.vue","../src/components/UsaRadio/UsaRadio.vue","../src/components/UsaRange/UsaRange.vue","../src/components/UsaSearch/UsaSearch.vue","../src/components/UsaSiteAlert/UsaSiteAlert.vue","../src/components/UsaStepIndicatorSegment/UsaStepIndicatorSegment.vue","../src/components/UsaStepIndicatorHeader/UsaStepIndicatorHeader.vue","../src/components/UsaStepIndicator/UsaStepIndicator.vue","../src/components/UsaSummaryBox/UsaSummaryBox.vue","../src/utils/sorting.js","../src/composables/useTableSort.js","../src/components/UsaTableSortButton/UsaTableSortButton.vue","../src/components/UsaTableHeaderCell/UsaTableHeaderCell.vue","../src/components/UsaTable/UsaTable.vue","../src/components/UsaTag/UsaTag.vue","../src/components/UsaTextarea/UsaTextarea.vue","../src/components/UsaTimePicker/UsaTimePicker.vue","../src/components/UsaTooltip/UsaTooltip.vue","../src/components/UsaValidation/UsaValidation.vue"],"sourcesContent":["export const PREFIX_SEPARATOR = ':'\nexport const GRID_NAMESPACE = 'grid-'\nexport const UTILITY_NAMESPACE = 'u-'\nexport const IMAGE_PATH = '/assets/img'\nexport const SVG_SPRITE_PATH = '/assets/img/sprite.svg'\nexport const ROUTER_COMPONENT_NAME = null\nexport const MOBILE_MENU_BREAKPOINT = '64em'\nexport const FOOTER_NAV_COLLAPSIBLE_BREAKPOINT = '30em'\nexport const MIN_DATE = '0000-01-01'\nexport const MAX_DATE = '9999-12-31'\nexport const USA_DATE_REGEX_PATTERN =\n  /^(0[1-9]|1[0-2])\\/(0[1-9]|[12][0-9]|3[01])\\/\\d{4}$/\nexport const ISO_DATE_REGEX_PATTERN =\n  /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/\nexport const MONTH_LABELS = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n]\nexport const DAY_OF_WEEK_LABELS = [\n  'Sunday',\n  'Monday',\n  'Tuesday',\n  'Wednesday',\n  'Thursday',\n  'Friday',\n  'Saturday',\n]\nexport const DAY_OF_WEEK_ABBREVIATION_LABELS = [\n  'S',\n  'M',\n  'T',\n  'W',\n  'Th',\n  'Fr',\n  'S',\n]\nexport const YEAR_GROUP = 12\nexport const ID_PREFIX = 'vuswds-id-'\n","<script>\nimport { ROUTER_COMPONENT_NAME } from '@/utils/constants.js'\n\nexport default {\n  name: 'BaseLink',\n  inject: {\n    globalRouterComponentName: {\n      from: 'vueUswds.routerComponentName',\n      default: ROUTER_COMPONENT_NAME,\n    },\n  },\n  inheritAttrs: false,\n  props: {\n    href: {\n      type: String,\n      default: '',\n    },\n    to: {\n      type: [String, Object],\n      default: '',\n    },\n    routerComponentName: {\n      type: [String, Object],\n      default: '',\n    },\n  },\n  data() {\n    return {\n      // Router link checks here instead of computed to avoid Vue warning\n      // about $nuxt and $router not being defined on the instance when they\n      // are not installed.\n      isNuxt: this?.$nuxt,\n      isVueRouter: this?.$router,\n    }\n  },\n  computed: {\n    isHrefLink() {\n      return (\n        !!this.href ||\n        (typeof this.to === 'string' && this.to.startsWith('http'))\n      )\n    },\n    linkComponent() {\n      if (this.routerComponentName) {\n        return this.routerComponentName\n      }\n\n      if (this.globalRouterComponentName) {\n        return this.globalRouterComponentName\n      }\n\n      if (this.isNuxt) {\n        return 'nuxt-link'\n      }\n\n      if (this.isVueRouter) {\n        return 'router-link'\n      }\n\n      return 'a'\n    },\n  },\n  methods: {\n    handleSpaceKeydown(event) {\n      if (this.$attrs?.class?.includes('usa-button')) {\n        event.target.click()\n      }\n    },\n  },\n}\n</script>\n\n<template>\n  <a\n    v-if=\"isHrefLink\"\n    v-bind=\"$attrs\"\n    :href=\"href || to\"\n    @keydown.prevent.space=\"handleSpaceKeydown\"\n    ><slot></slot\n  ></a>\n  <component\n    :is=\"linkComponent\"\n    v-else\n    v-bind=\"$attrs\"\n    :to=\"to\"\n    @keydown.prevent.space=\"handleSpaceKeydown\"\n    ><slot></slot\n  ></component>\n</template>\n","import { ref, reactive } from 'vue'\n\nexport function useAccordion(_accordionItems, _multiselectable = false) {\n  const multiselectable = ref(_multiselectable)\n  const accordionItems = reactive(_accordionItems)\n\n  const registerAccordionItem = (id, isOpen) => {\n    if (accordionItems[id] === undefined) {\n      accordionItems[id] = isOpen\n    }\n\n    if (multiselectable.value) {\n      return\n    }\n\n    for (const accordionId in accordionItems) {\n      if (accordionId !== id && isOpen) {\n        accordionItems[accordionId] = false\n      }\n    }\n  }\n\n  const unregisterAccordionItem = id => {\n    delete accordionItems[id]\n  }\n\n  const closeItem = id => {\n    accordionItems[id] = false\n  }\n\n  const openItem = id => {\n    accordionItems[id] = true\n\n    if (multiselectable.value) {\n      return\n    }\n\n    for (const accordionId in accordionItems) {\n      if (accordionId !== id) {\n        closeItem(accordionId)\n      }\n    }\n  }\n\n  const toggleItem = id => {\n    if (accordionItems[id]) {\n      closeItem(id)\n    } else {\n      openItem(id)\n    }\n  }\n\n  const closeAllItems = () => {\n    for (const accordionId in accordionItems) {\n      closeItem(accordionId)\n    }\n  }\n\n  return {\n    registerAccordionItem,\n    unregisterAccordionItem,\n    openItem,\n    closeItem,\n    toggleItem,\n    closeAllItems,\n  }\n}\n","<script setup>\nimport { computed, provide, reactive, watch, toRef } from 'vue'\nimport { useAccordion } from '@/composables/useAccordion.js'\n\nconst emit = defineEmits(['update:accordionItems'])\n\nconst props = defineProps({\n  bordered: {\n    type: Boolean,\n    default: false,\n  },\n  multiselectable: {\n    type: Boolean,\n    default: false,\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n})\n\nconst accordionItems = reactive({})\nconst isMultiSelectable = toRef(props, 'multiselectable')\n\nconst {\n  registerAccordionItem,\n  unregisterAccordionItem,\n  openItem,\n  closeItem,\n  toggleItem,\n} = useAccordion(accordionItems, isMultiSelectable)\n\nwatch(accordionItems, () => {\n  emit('update:accordionItems', accordionItems)\n})\n\nprovide(\n  'accordionHeadingTag',\n  computed(() => props.headingTag),\n)\nprovide('registerAccordionItem', registerAccordionItem)\nprovide('unregisterAccordionItem', unregisterAccordionItem)\nprovide('toggleItem', toggleItem)\nprovide('accordionItems', accordionItems)\n\nconst classes = computed(() => [{ 'usa-accordion--bordered': props.bordered }])\n\ndefineExpose({\n  openItem,\n  closeItem,\n  toggleItem,\n})\n</script>\n\n<template>\n  <div\n    class=\"usa-accordion\"\n    :class=\"classes\"\n    :aria-multiselectable=\"isMultiSelectable || null\"\n    ><slot></slot\n  ></div>\n</template>\n","import justKebabCase from 'just-kebab-case'\nimport split from 'just-split'\n\nexport const objectHasKey = (object, key) =>\n  Object.prototype.hasOwnProperty.call(object, key)\n\nexport const kebabCase = value => justKebabCase(value)\n\nexport const escapeRegExp = string =>\n  string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\nexport const splitArray = (array, splitAt) => split(array, splitAt)\n","import { getCurrentInstance } from 'vue'\nimport { kebabCase } from '@/utils/common.js'\nimport { ID_PREFIX } from '@/utils/constants.js'\n\nconst idRegistry = {}\n\n// Adapted from:\n// https://github.com/wearebraid/vue-formulate/blob/master/src/Formulate.js\nexport function nextId(componentName = '') {\n  const vm = getCurrentInstance()\n  const route = vm?.appContext?.config?.globalProperties?.$route\n\n  const pathPrefix =\n    route?.path && kebabCase(route.path) ? kebabCase(route.path) : 'global'\n\n  if (!idRegistry[pathPrefix]) {\n    idRegistry[pathPrefix] = 0\n  }\n\n  return `${ID_PREFIX}${pathPrefix}-${kebabCase(componentName)}-${++idRegistry[\n    pathPrefix\n  ]}`\n}\n","<script setup>\nimport { computed, inject, toRef, onBeforeUnmount } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst accordionHeadingTag = inject('accordionHeadingTag')\nconst registerAccordionItem = inject('registerAccordionItem')\nconst unregisterAccordionItem = inject('unregisterAccordionItem')\nconst toggleItem = inject('toggleItem')\nconst accordionItems = inject('accordionItems')\n\nconst props = defineProps({\n  id: {\n    type: String,\n    default: '',\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  open: {\n    type: Boolean,\n    default: false,\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        heading: [],\n        button: [],\n        content: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-accordion-item'))\nconst isOpen = toRef(accordionItems, computedId.value)\n\nregisterAccordionItem(computedId.value, props.open)\n\nonBeforeUnmount(() => {\n  unregisterAccordionItem(computedId.value)\n})\n</script>\n\n<template>\n  <BaseHeading\n    v-bind=\"$attrs\"\n    class=\"usa-accordion__heading\"\n    :class=\"customClasses?.heading\"\n    :tag=\"accordionHeadingTag\"\n    ><button\n      type=\"button\"\n      class=\"usa-accordion__button\"\n      :class=\"customClasses?.button\"\n      :aria-expanded=\"isOpen\"\n      :aria-controls=\"computedId\"\n      @click=\"toggleItem(computedId)\"\n      ><slot name=\"label\">{{ label }}</slot></button\n    ></BaseHeading\n  >\n  <div\n    :id=\"computedId\"\n    class=\"usa-accordion__content\"\n    :class=\"customClasses?.content\"\n    :hidden=\"!isOpen\"\n    ><slot></slot\n  ></div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst props = defineProps({\n  variant: {\n    type: String,\n    default: '',\n    validator(variant) {\n      const isValidVariant = [\n        '',\n        'info',\n        'warning',\n        'error',\n        'success',\n        'emergency',\n        'validation',\n      ].includes(variant)\n\n      if (!isValidVariant) {\n        console.warn(`'${variant}' is not a valid alert variant`)\n      }\n\n      return isValidVariant\n    },\n  },\n  slim: {\n    type: Boolean,\n    default: false,\n  },\n  noIcon: {\n    type: Boolean,\n    default: false,\n  },\n  role: {\n    type: String,\n    default: '',\n  },\n  heading: {\n    type: String,\n    default: '',\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        body: [],\n        heading: [],\n      }\n    },\n  },\n})\n\nconst classes = computed(() => {\n  return {\n    'usa-alert--no-icon': props.noIcon,\n    'usa-alert--slim': props.slim,\n    'usa-alert--info':\n      props.variant === 'info' || props.variant === 'validation',\n    'usa-alert--warning': props.variant === 'warning',\n    'usa-alert--error': props.variant === 'error',\n    'usa-alert--success': props.variant === 'success',\n    'usa-alert--emergency': props.variant === 'emergency',\n    'usa-alert--validation': props.variant === 'validation',\n  }\n})\n\nconst ariaRole = computed(() => {\n  if (props.role) {\n    return props.role\n  }\n\n  if (!props.role && props.variant === 'error') {\n    return 'alert'\n  }\n\n  return null\n})\n</script>\n\n<template>\n  <div class=\"usa-alert\" :class=\"classes\" :role=\"ariaRole\">\n    <div class=\"usa-alert__body\" :class=\"customClasses?.body\">\n      <BaseHeading\n        v-if=\"heading || $slots.heading\"\n        :tag=\"headingTag\"\n        class=\"usa-alert__heading\"\n        :class=\"[{ 'usa-sr-only': slim }, customClasses?.heading]\"\n        ><slot name=\"heading\">{{ heading }}</slot></BaseHeading\n      >\n      <slot name=\"message\">\n        <p class=\"usa-alert__text\"><slot></slot></p>\n      </slot>\n    </div>\n  </div>\n</template>\n","import { ref, computed, readonly, watch } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\n\nexport function useToggle(_id, idPrefix = '', defaultOpen = false, emit) {\n  const isOpen = ref(defaultOpen)\n\n  const toggleId = computed(() => _id || nextId(idPrefix))\n\n  const closeContent = () => {\n    isOpen.value = false\n\n    if (emit) {\n      emit('update:open', isOpen.value)\n    }\n  }\n\n  const openContent = () => {\n    isOpen.value = true\n\n    if (emit) {\n      emit('update:open', isOpen.value)\n    }\n  }\n\n  const toggleContent = () => {\n    if (isOpen.value) {\n      closeContent()\n    } else {\n      openContent()\n    }\n  }\n\n  watch(isOpen, newValue => {\n    if (isOpen.value !== newValue) {\n      toggleContent()\n    }\n  })\n\n  return {\n    isOpen: readonly(isOpen),\n    toggleId: readonly(toggleId),\n    closeContent,\n    openContent,\n    toggleContent,\n  }\n}\n","<script setup>\nimport { inject, useSlots } from 'vue'\nimport {\n  PREFIX_SEPARATOR,\n  GRID_NAMESPACE,\n  IMAGE_PATH,\n} from '@/utils/constants.js'\n\nconst slots = useSlots()\n\nif (slots?.tldIcon) {\n  console.warn(`The 'tldIcon' slot is deprecated, use 'tld-icon' instead.`)\n}\n\nif (slots?.tldDescription) {\n  console.warn(\n    `The 'tldDescription' slot is deprecated, use 'tld-description' instead.`,\n  )\n}\n\nif (slots?.httpsIcon) {\n  console.warn(`The 'httpsIcon' slot is deprecated, use 'https-icon' instead.`)\n}\n\nif (slots?.httpsDescription) {\n  console.warn(\n    `The 'httpsDescription' slot is deprecated, use 'https-description' instead.`,\n  )\n}\n\nconst prefixSeparator = inject('vueUswds.prefixSeparator', PREFIX_SEPARATOR)\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\nconst imagePath = inject('vueUswds.imagePath', IMAGE_PATH)\n</script>\n\n<template>\n  <div :class=\"`${gridNamespace}row ${gridNamespace}gap-lg`\">\n    <div\n      :class=\"`usa-banner__guidance tablet${prefixSeparator}${gridNamespace}col-6`\"\n    >\n      <slot v-if=\"$slots['tld-icon']\" name=\"tld-icon\"></slot>\n      <!--\n      \t@slot tldIcon\n    \t\t@deprecated Use the `tld-icon` slot instead.\n    \t-->\n      <slot v-else-if=\"$slots.tldIcon\" name=\"tldIcon\"></slot>\n      <template v-else>\n        <img\n          class=\"usa-banner__icon usa-media-block__img\"\n          :src=\"`${imagePath}/icon-dot-gov.svg`\"\n          role=\"img\"\n          alt=\"\"\n          aria-hidden=\"true\"\n        />\n      </template>\n      <div class=\"usa-media-block__body\">\n        <slot v-if=\"$slots['tld-description']\" name=\"tld-description\"></slot>\n        <!--\n        \t@slot tldDescription\n      \t\t@deprecated Use the `tld-description` slot instead.\n      \t-->\n        <slot v-else-if=\"$slots.tldDescription\" name=\"tldDescription\"></slot>\n        <template v-else>\n          <p>\n            <strong>Official websites use .gov</strong>\n            <br />\n            A <strong>.gov</strong> website belongs to an official government\n            organization in the United States.\n          </p>\n        </template>\n      </div>\n    </div>\n    <div\n      :class=\"`usa-banner__guidance tablet${prefixSeparator}${gridNamespace}col-6`\"\n    >\n      <slot v-if=\"$slots['https-icon']\" name=\"https-icon\"></slot>\n      <!--\n      \t@slot httpsIcon\n    \t\t@deprecated Use the `https-icon` slot instead.\n    \t-->\n      <slot v-else-if=\"$slots.httpsIcon\" name=\"httpsIcon\"></slot>\n      <template v-else>\n        <img\n          class=\"usa-banner__icon usa-media-block__img\"\n          :src=\"`${imagePath}/icon-https.svg`\"\n          role=\"img\"\n          alt=\"\"\n          aria-hidden=\"true\"\n        />\n      </template>\n      <div class=\"usa-media-block__body\">\n        <slot\n          v-if=\"$slots['https-description']\"\n          name=\"https-description\"\n        ></slot>\n        <!--\n        \t@slot httpsDescription\n      \t\t@deprecated Use the `https-description` slot instead.\n      \t-->\n        <slot\n          v-else-if=\"$slots.httpsDescription\"\n          name=\"httpsDescription\"\n        ></slot>\n        <template v-else>\n          <p>\n            <strong>Secure .gov websites use HTTPS</strong>\n            <br />\n            A <strong>lock</strong> (\n            <span class=\"icon-lock\"\n              ><svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"52\"\n                height=\"64\"\n                viewBox=\"0 0 52 64\"\n                class=\"usa-banner__lock-image\"\n                role=\"img\"\n                aria-labelledby=\"banner-lock-description\"\n                focusable=\"false\"\n              >\n                <title id=\"banner-lock-title\">Lock</title>\n                <desc id=\"banner-lock-description\">Locked padlock icon</desc>\n                <path\n                  fill=\"#000000\"\n                  fill-rule=\"evenodd\"\n                  d=\"M26 0c10.493 0 19 8.507 19 19v9h3a4 4 0 0 1 4 4v28a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V32a4 4 0 0 1 4-4h3v-9C7 8.507 15.507 0 26 0zm0 8c-5.979 0-10.843 4.77-10.996 10.712L15 19v9h22v-9c0-6.075-4.925-11-11-11z\"\n                ></path></svg\n            ></span>\n            ) or <strong>https://</strong> means you've safely connected to the\n            .gov website. Share sensitive information only on official, secure\n            websites.\n          </p>\n        </template>\n      </div>\n    </div>\n  </div>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport {\n  PREFIX_SEPARATOR,\n  GRID_NAMESPACE,\n  IMAGE_PATH,\n} from '@/utils/constants.js'\nimport { useToggle } from '@/composables/useToggle.js'\nimport UsaBannerContent from '@/components/UsaBannerContent'\n\nconst prefixSeparator = inject('vueUswds.prefixSeparator', PREFIX_SEPARATOR)\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\nconst imagePath = inject('vueUswds.imagePath', IMAGE_PATH)\n\nconst emit = defineEmits(['update:open'])\n\nconst props = defineProps({\n  open: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  ariaLabel: {\n    type: String,\n    default: 'Official website of the United States government',\n  },\n  headerText: {\n    type: String,\n    default: 'An official website of the United States government',\n  },\n  actionText: {\n    type: String,\n    default: \"Here's how you know\",\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        accordion: [],\n        bannerHeader: [],\n        bannerInner: [],\n        button: [],\n        bannerContent: [],\n      }\n    },\n  },\n})\n\nconst { isOpen, toggleId, openContent, closeContent, toggleContent } =\n  useToggle(props.id, 'usa-banner', props.open, emit)\n\nconst headerClasses = computed(() => [\n  { 'usa-banner__header--expanded': isOpen.value },\n  ...(props.customClasses?.bannerHeader || []),\n])\n\ndefineExpose({\n  openContent,\n  closeContent,\n  toggleContent,\n})\n</script>\n\n<template>\n  <section class=\"usa-banner\" :aria-label=\"ariaLabel\">\n    <div class=\"usa-accordion\" :class=\"customClasses?.accordion\">\n      <header class=\"usa-banner__header\" :class=\"headerClasses\">\n        <div class=\"usa-banner__inner\" :class=\"customClasses?.bannerInner\">\n          <div :class=\"`${gridNamespace}col-auto`\">\n            <slot name=\"flag\">\n              <img\n                aria-hidden=\"true\"\n                class=\"usa-banner__header-flag\"\n                :src=\"`${imagePath}/us_flag_small.png`\"\n                alt=\"\"\n              />\n            </slot>\n          </div>\n          <div\n            aria-hidden=\"true\"\n            :class=\"`${gridNamespace}col-fill tablet${prefixSeparator}${gridNamespace}col-auto`\"\n          >\n            <p class=\"usa-banner__header-text\">{{ headerText }}</p>\n            <p class=\"usa-banner__header-action\">{{ actionText }}</p>\n          </div>\n          <button\n            type=\"button\"\n            class=\"usa-accordion__button usa-banner__button\"\n            :class=\"customClasses?.button\"\n            :aria-expanded=\"isOpen\"\n            :aria-controls=\"toggleId\"\n            @click=\"toggleContent()\"\n          >\n            <slot name=\"button\" :is-open=\"isOpen\" :action-text=\"actionText\">\n              <span class=\"usa-banner__button-text\">{{ actionText }}</span>\n            </slot>\n          </button>\n        </div>\n      </header>\n      <div\n        :id=\"toggleId\"\n        :hidden=\"!isOpen\"\n        class=\"usa-banner__content usa-accordion__content\"\n        :class=\"customClasses?.bannerContent\"\n      >\n        <slot><UsaBannerContent /></slot>\n      </div>\n    </div>\n  </section>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BaseLink from '@/components/BaseLink'\n\nconst props = defineProps({\n  href: {\n    type: String,\n    default: '',\n  },\n  to: {\n    type: [String, Object],\n    default: '',\n  },\n  routerComponentName: {\n    type: [String, Object],\n    default: '',\n  },\n  current: {\n    type: Boolean,\n    default: false,\n  },\n  customClasses: {\n    type: Object,\n    default: () => ({\n      link: [],\n      span: [],\n    }),\n  },\n})\n\nconst ariaCurrent = computed(() => (props.current ? 'page' : null))\n</script>\n\n<template>\n  <li class=\"usa-breadcrumb__list-item\" :aria-current=\"ariaCurrent\">\n    <span v-if=\"current\" :class=\"customClasses?.span\"><slot></slot></span>\n    <BaseLink\n      v-else\n      :href=\"href\"\n      :to=\"to\"\n      :router-component-name=\"routerComponentName\"\n      class=\"usa-breadcrumb__link\"\n      :class=\"customClasses?.link\"\n    >\n      <span :class=\"customClasses?.span\"><slot></slot></span>\n    </BaseLink>\n  </li>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport UsaBreadcrumbItem from '@/components/UsaBreadcrumbItem'\n\nconst props = defineProps({\n  items: {\n    type: Array,\n    default: () => [],\n  },\n  wrap: {\n    type: Boolean,\n    default: false,\n  },\n  ariaLabel: {\n    type: String,\n    default: 'Breadcrumbs',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        list: [],\n        item: [],\n        link: [],\n        span: [],\n      }\n    },\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-breadcrumb--wrap': props.wrap,\n  },\n])\n\nconst hasCurrent = computed(() => props.items.some(item => item?.current))\n\nconst breadcrumbItems = computed(() => {\n  if (!props.items.length) {\n    return []\n  }\n\n  if (hasCurrent.value) {\n    return props.items\n  }\n\n  const items = [...props.items]\n\n  // If no breadcrumb item has the `current` prop set, automatically set the\n  // last item to `current: true`.\n  items[items.length - 1].current = true\n\n  return items\n})\n</script>\n\n<template>\n  <nav class=\"usa-breadcrumb\" :class=\"classes\" :aria-label=\"ariaLabel\">\n    <ol class=\"usa-breadcrumb__list\" :class=\"customClasses?.list\">\n      <slot :items=\"breadcrumbItems\">\n        <UsaBreadcrumbItem\n          v-for=\"item in breadcrumbItems\"\n          :key=\"item?.id || item.text\"\n          :class=\"customClasses?.item\"\n          :to=\"item.to\"\n          :href=\"item.href\"\n          :router-component-name=\"item.routerComponentName\"\n          :current=\"item.current\"\n          :custom-classes=\"{\n            link: customClasses?.link,\n            span: customClasses?.span,\n          }\"\n          >{{ item.text }}</UsaBreadcrumbItem\n        >\n      </slot>\n    </ol>\n  </nav>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  variant: {\n    type: String,\n    default: '',\n    validator(variant) {\n      return [\n        '',\n        'secondary',\n        'accent-cool',\n        'accent-warm',\n        'base',\n        'outline',\n        'inverse',\n        'unstyled',\n      ].includes(variant)\n    },\n  },\n  size: {\n    type: String,\n    default: '',\n    validator(size) {\n      return ['', 'big'].includes(size)\n    },\n  },\n  type: {\n    type: String,\n    default: 'button',\n    validator(type) {\n      return ['button', 'submit', 'reset'].includes(type)\n    },\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-button--secondary': props.variant === 'secondary',\n    'usa-button--accent-cool': props.variant === 'accent-cool',\n    'usa-button--accent-warm': props.variant === 'accent-warm',\n    'usa-button--base': props.variant === 'base',\n    'usa-button--outline':\n      props.variant === 'outline' || props.variant === 'inverse',\n    'usa-button--inverse': props.variant === 'inverse',\n    'usa-button--unstyled': props.variant === 'unstyled',\n    'usa-button--big': props.size === 'big',\n  },\n])\n</script>\n\n<template>\n  <button\n    v-bind=\"$attrs\"\n    class=\"usa-button\"\n    :class=\"classes\"\n    :type=\"type\"\n    :disabled=\"disabled\"\n  >\n    <slot name=\"before\"></slot>\n    <slot></slot>\n    <slot name=\"after\"></slot>\n  </button>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  segmented: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [\n  { 'usa-button-group--segmented': props.segmented },\n])\n</script>\n\n<template>\n  <ul class=\"usa-button-group\" :class=\"classes\">\n    <slot></slot>\n  </ul>\n</template>\n","<script setup></script>\n\n<template>\n  <li class=\"usa-button-group__item\"><slot></slot></li>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst props = defineProps({\n  cardTag: {\n    type: String,\n    default: 'div',\n  },\n  heading: {\n    type: String,\n    default: '',\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  flag: {\n    type: Boolean,\n    default: false,\n  },\n  headerFirst: {\n    type: Boolean,\n    default: false,\n  },\n  insetMedia: {\n    type: Boolean,\n    default: false,\n  },\n  mediaPosition: {\n    type: String,\n    default: 'left',\n    validator(mediaPosition) {\n      return ['left', 'right'].includes(mediaPosition)\n    },\n  },\n  headerExdent: {\n    type: Boolean,\n    default: false,\n  },\n  mediaExdent: {\n    type: Boolean,\n    default: false,\n  },\n  bodyExdent: {\n    type: Boolean,\n    default: false,\n  },\n  footerExdent: {\n    type: Boolean,\n    default: false,\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        container: [],\n        header: [],\n        heading: [],\n        media: [],\n        img: [],\n        body: [],\n        footer: [],\n      }\n    },\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-card--header-first': props.headerFirst,\n    'usa-card--flag': props.flag,\n    'usa-card--media-right': props.mediaPosition === 'right',\n  },\n])\n\nconst headerClasses = computed(() => [\n  { 'usa-card__header--exdent': props.headerExdent },\n  ...(props.customClasses?.header || []),\n])\n\nconst mediaClasses = computed(() => [\n  {\n    'usa-card__media--inset': props.insetMedia,\n    'usa-card__media--exdent': props.mediaExdent,\n  },\n  ...(props.customClasses?.media || []),\n])\n\nconst bodyClasses = computed(() => [\n  { 'usa-card__body--exdent': props.bodyExdent },\n  ...(props.customClasses?.body || []),\n])\n\nconst footerClasses = computed(() => [\n  { 'usa-card__footer--exdent': props.footerExdent },\n  ...(props.customClasses?.footer || []),\n])\n</script>\n\n<template>\n  <component :is=\"cardTag\" class=\"usa-card\" :class=\"classes\">\n    <div class=\"usa-card__container\" :class=\"customClasses?.container\">\n      <header\n        v-if=\"heading || $slots.heading\"\n        class=\"usa-card__header\"\n        :class=\"headerClasses\"\n      >\n        <BaseHeading\n          :tag=\"headingTag\"\n          class=\"usa-card__heading\"\n          :class=\"customClasses?.heading\"\n          ><slot name=\"heading\">{{ heading }}</slot></BaseHeading\n        >\n      </header>\n      <div v-if=\"$slots.media\" class=\"usa-card__media\" :class=\"mediaClasses\">\n        <div class=\"usa-card__img\" :class=\"customClasses?.img\"\n          ><slot name=\"media\"></slot\n        ></div>\n      </div>\n      <div v-if=\"$slots.default\" class=\"usa-card__body\" :class=\"bodyClasses\"\n        ><slot></slot\n      ></div>\n      <div v-if=\"$slots.footer\" class=\"usa-card__footer\" :class=\"footerClasses\"\n        ><slot name=\"footer\"></slot\n      ></div>\n    </div>\n  </component>\n</template>\n","<script setup>\nimport { computed, ref, provide } from 'vue'\nimport { watchDebounced } from '@vueuse/core'\nimport { nextId } from '@/utils/unique-id.js'\n\nconst props = defineProps({\n  maxlength: {\n    type: Number,\n    required: true,\n    validator(maxLength) {\n      const isValidMaxLength = maxLength > 0\n\n      if (!isValidMaxLength) {\n        console.warn(`${maxLength} is not a valid maxlength`)\n      }\n\n      return isValidMaxLength\n    },\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n})\n\nconst statusMessageRef = ref('')\nconst srOnlyStatusMessage = ref('')\n\nconst charactersRemaining = ref(props.maxlength)\nconst charactersOver = computed(() =>\n  charactersRemaining.value < 0 ? charactersRemaining.value * -1 : 0,\n)\nconst countStatus = computed(() => {\n  if (charactersRemaining.value === props.maxlength) {\n    return 'equal'\n  } else if (charactersOver.value > 0) {\n    return 'over'\n  }\n\n  return 'under'\n})\n\nconst computedId = computed(() => props.id || nextId('usa-character-count'))\n\nconst messageClasses = computed(() => [\n  { 'usa-character-count__message--invalid': countStatus.value === 'over' },\n])\n\nconst updateCharacterCount = inputValue =>\n  (charactersRemaining.value = props.maxlength - `${inputValue}`.length)\n\nwatchDebounced(\n  charactersRemaining,\n  () => {\n    srOnlyStatusMessage.value = statusMessageRef.value?.textContent\n  },\n  { debounce: 1000, immediate: true },\n)\n\nprovide('updateCharacterCount', updateCharacterCount)\nprovide(\n  'characterCountMaxlength',\n  computed(() => props.maxlength),\n)\nprovide(\n  'characterCountMessageId',\n  computed(() => computedId.value),\n)\n</script>\n\n<template>\n  <div class=\"usa-character-count\">\n    <slot></slot>\n    <span :id=\"computedId\" class=\"usa-character-count__message usa-sr-only\">\n      <slot name=\"default-message\"\n        >You can enter up to {{ maxlength }} characters</slot\n      >\n    </span>\n    <div\n      ref=\"statusMessageRef\"\n      class=\"usa-character-count__status usa-hint\"\n      :class=\"messageClasses\"\n      aria-hidden=\"true\"\n    >\n      <slot\n        v-if=\"countStatus === 'equal'\"\n        name=\"equal-message\"\n        :maxlength=\"maxlength\"\n        >{{ maxlength }} character<template v-if=\"maxlength !== 1\">s</template>\n        allowed</slot\n      >\n      <slot\n        v-else-if=\"countStatus === 'under'\"\n        name=\"remaining-message\"\n        :characters-remaining=\"charactersRemaining\"\n        :maxlength=\"maxlength\"\n        >{{ charactersRemaining }} character<template\n          v-if=\"charactersRemaining !== 1\"\n          >s</template\n        >\n        left</slot\n      >\n      <slot\n        v-else-if=\"countStatus === 'over'\"\n        name=\"over-message\"\n        :characters-over=\"charactersOver\"\n        :maxlength=\"maxlength\"\n        >{{ charactersOver }} character<template v-if=\"charactersOver !== 1\"\n          >s</template\n        >\n        over limit</slot\n      >\n    </div>\n    <div\n      class=\"usa-character-count__sr-status usa-sr-only\"\n      aria-live=\"polite\"\n      >{{ srOnlyStatusMessage }}</div\n    >\n  </div>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  tile: {\n    type: Boolean,\n    default: false,\n  },\n  modelValue: {\n    type: Boolean,\n    default: false,\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  description: {\n    type: String,\n    default: '',\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        component: [],\n        label: [],\n        description: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-checkbox'))\n\nconst checkboxValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(checked) {\n    emit('update:modelValue', checked)\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-checkbox__input--tile': props.tile,\n  },\n])\n</script>\n\n<template>\n  <div class=\"usa-checkbox\" :class=\"customClasses?.component\">\n    <input\n      v-bind=\"$attrs\"\n      :id=\"computedId\"\n      v-model=\"checkboxValue\"\n      class=\"usa-checkbox__input\"\n      type=\"checkbox\"\n      :class=\"classes\"\n    />\n    <label\n      class=\"usa-checkbox__label\"\n      :class=\"customClasses?.label\"\n      :htmlFor=\"computedId\"\n      ><slot>{{ label }}</slot>\n      <span\n        v-if=\"description || $slots.description\"\n        class=\"usa-checkbox__label-description\"\n        :class=\"customClasses?.description\"\n        ><slot name=\"description\">{{ description }}</slot></span\n      >\n    </label>\n  </div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  checked: {\n    type: Boolean,\n    default: false,\n  },\n  ariaLabel: {\n    type: String,\n    default: '',\n  },\n})\n\nconst classes = computed(() => [\n  { 'usa-checklist__item--checked': props.checked },\n])\n</script>\n\n<template>\n  <li class=\"usa-checklist__item\" :aria-label=\"ariaLabel\" :class=\"classes\"\n    ><slot></slot\n  ></li>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  condensed: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [\n  { 'usa-collection--condensed': props.condensed },\n])\n</script>\n\n<template>\n  <ul class=\"usa-collection\" :class=\"classes\"\n    ><slot></slot\n  ></ul>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  month: {\n    type: String,\n    required: true,\n  },\n  day: {\n    type: [String, Number],\n    required: true,\n  },\n  datetime: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        datetime: [],\n        month: [],\n        day: [],\n      }\n    },\n  },\n})\n\nconst timeElement = computed(() => (props.datetime ? 'time' : 'div'))\n</script>\n\n<template>\n  <div class=\"usa-collection__calendar-date\">\n    <component\n      :is=\"timeElement\"\n      :datetime=\"datetime || null\"\n      :class=\"customClasses?.datetime\"\n    >\n      <span\n        class=\"usa-collection__calendar-date-month\"\n        :class=\"customClasses?.month\"\n        >{{ month }}</span\n      >\n      <span\n        class=\"usa-collection__calendar-date-day\"\n        :class=\"customClasses?.day\"\n        >{{ day }}</span\n      >\n    </component>\n  </div>\n</template>\n","<script setup></script>\n\n<template>\n  <li class=\"usa-collection__meta-item\"><slot></slot></li>\n</template>\n","import { ref, computed, readonly, watch, nextTick } from 'vue'\nimport { onKeyStroke, onClickOutside, useActiveElement } from '@vueuse/core'\nimport { nextId } from '@/utils/unique-id.js'\nimport { escapeRegExp } from '@/utils/common.js'\n\nexport function useComboBox(\n  _id,\n  _selectedOption,\n  _options,\n  _disabled,\n  _readonly,\n  emit,\n) {\n  const id = ref(_id)\n  const options = ref(_options)\n  const isDisabled = ref(_disabled)\n  const isReadonly = ref(_readonly)\n  const selectedOption = computed({\n    get() {\n      return _selectedOption.value\n    },\n    set(newSelectedValue) {\n      emit('update:modelValue', newSelectedValue)\n    },\n  })\n\n  const activeElement = useActiveElement()\n  const isDirty = ref(false)\n  const searchTerm = ref('')\n  const highlightedOption = ref('')\n\n  const isOpen = ref(false)\n\n  const selectedLabel = computed(() => {\n    if (selectedOption.value === '') {\n      return ''\n    }\n\n    const foundOption = options.value.find(\n      option => option.value === selectedOption.value,\n    )\n\n    return foundOption?.label || ''\n  })\n\n  watch(selectedLabel, currentLabel => {\n    if (currentLabel !== '') {\n      searchTerm.value = currentLabel\n    }\n  })\n\n  watch(searchTerm, currentTerm => {\n    if (isOpen.value && currentTerm !== '') {\n      isDirty.value = true\n    }\n  })\n\n  // Set the default value.\n  if (selectedLabel.value) {\n    searchTerm.value = selectedLabel.value\n  }\n\n  const filteredOptions = computed(() => {\n    if (\n      searchTerm.value === '' ||\n      (!isDirty.value && searchTerm.value === selectedLabel.value)\n    ) {\n      return options.value\n    }\n\n    return options.value.filter(option => {\n      const regex = new RegExp(escapeRegExp(searchTerm.value), 'gi')\n      return regex.test(option.label)\n    })\n  })\n\n  const totalFilteredOptions = computed(() => filteredOptions.value?.length)\n\n  const computedId = computed(() => id.value || nextId('usa-combo-box'))\n  const computedLabelId = computed(() => `${computedId.value}-label`)\n  const computedErrorMessageId = computed(\n    () => `${computedId.value}-error-message`,\n  )\n  const computedHintId = computed(() => `${computedId.value}-hint`)\n  const computedAssistiveHintId = computed(\n    () => `${computedId.value}-assistive-hint`,\n  )\n  const computedListId = computed(() => `${computedId.value}-list`)\n\n  const getListItemIdByIndex = index =>\n    `${computedListId.value}-option-${index}`\n\n  const componentElement = ref(null)\n  const inputElement = ref(null)\n  const listElement = ref(null)\n  const listItemElements = ref([])\n\n  const getItemRefById = id => {\n    return listItemElements.value.find(item => item.id === id)\n  }\n\n  const getItemRefByValue = value => {\n    return listItemElements.value.find(item => item.dataset.value === value)\n  }\n\n  const firstOptionValue = computed(() => {\n    return totalFilteredOptions.value ? filteredOptions.value[0].value : ''\n  })\n\n  const firstOptionRef = computed(() => {\n    const firstItemId = totalFilteredOptions.value\n      ? listItemElements.value[0].id\n      : null\n\n    return firstItemId ? getItemRefById(firstItemId) : null\n  })\n\n  const selectedOptionRef = computed(() => {\n    if (selectedOption.value === '') {\n      return null\n    }\n\n    const foundItemRef = listItemElements.value.find(\n      itemRef => itemRef.dataset.value === selectedOption.value,\n    )\n\n    return foundItemRef ? foundItemRef : null\n  })\n\n  const highlightedOptionRef = computed(() => {\n    if (highlightedOption.value === '') {\n      return null\n    }\n\n    const foundItemRef = listItemElements.value.find(itemRef => {\n      return itemRef.dataset.value === highlightedOption.value\n    })\n\n    return foundItemRef ? foundItemRef : null\n  })\n\n  const isFirstOption = computed(() => {\n    const optionIndex = filteredOptions.value.findIndex(\n      item => item.value === highlightedOption.value,\n    )\n\n    return optionIndex === 0\n  })\n\n  const isLastOption = computed(() => {\n    const optionIndex = filteredOptions.value.findIndex(\n      item => item.value === highlightedOption.value,\n    )\n\n    return optionIndex === totalFilteredOptions.value - 1\n  })\n\n  const activeDescendent = computed(() => {\n    const activeOptionId = activeElement.value.id\n\n    if (activeOptionId === highlightedOptionId.value) {\n      return highlightedOptionId.value\n    }\n\n    if (\n      totalFilteredOptions.value &&\n      selectedOption.value !== '' &&\n      isOpen.value &&\n      activeOptionId === computedId.value\n    ) {\n      return highlightedOptionId.value\n    }\n\n    return null\n  })\n\n  const scrollList = elementRef => {\n    if (!elementRef || !listElement?.value) {\n      return\n    }\n\n    const optionBottom = elementRef.offsetTop + elementRef.offsetHeight\n    const currentBottom =\n      listElement.value.scrollTop + listElement.value.offsetHeight\n\n    if (optionBottom > currentBottom) {\n      listElement.value.scrollTop =\n        optionBottom - listElement.value.offsetHeight\n    }\n\n    if (elementRef.offsetTop < listElement.value.scrollTop) {\n      listElement.value.scrollTop = elementRef.offsetTop\n    }\n  }\n\n  const focusInput = () => {\n    inputElement.value.focus()\n  }\n\n  const selectOption = optionValue => {\n    selectedOption.value = optionValue\n\n    const option = options.value.find(option => option.value === optionValue)\n\n    searchTerm.value = option?.label || ''\n\n    isDirty.value = false\n  }\n\n  const clearSelectedOption = () => {\n    selectOption('')\n  }\n\n  const highlightOption = optionValue => {\n    highlightedOption.value = optionValue\n  }\n\n  const clearHighlightedOption = () => {\n    highlightedOption.value = ''\n  }\n\n  const openList = () => {\n    if (!isDisabled.value && !isReadonly.value) {\n      isOpen.value = true\n    }\n  }\n\n  const closeList = () => {\n    isOpen.value = false\n    isDirty.value = false\n    clearHighlightedOption()\n    listElement.value.scrollTop = 0\n  }\n\n  const listItemTabIndex = optionValue => {\n    return highlightedOption.value === optionValue ||\n      selectedOption.value === optionValue\n      ? 0\n      : -1\n  }\n\n  const highlightedOptionId = computed(() => {\n    if (!highlightedOption.value) {\n      return null\n    }\n\n    const highlightedOptionIndex = filteredOptions.value.findIndex(\n      option => option.value === highlightedOption.value,\n    )\n\n    return getListItemIdByIndex(highlightedOptionIndex)\n  })\n\n  const clearButtonIsVisible = computed(\n    () =>\n      selectedOption.value !== '' &&\n      searchTerm.value === selectedLabel.value &&\n      !isDisabled.value &&\n      !isReadonly.value,\n  )\n\n  const handleFilterOnInput = () => {\n    if (!isOpen.value) {\n      openList()\n    }\n\n    if (selectedOption.value !== '') {\n      highlightOption(selectedOption.value)\n    } else {\n      highlightOption(firstOptionValue.value)\n    }\n  }\n\n  const handleEnterOnInput = () => {\n    const foundItem = filteredOptions.value.find(\n      item => item.label === searchTerm.value,\n    )\n\n    if (searchTerm.value !== '' && foundItem.value) {\n      selectOption(foundItem.value)\n    }\n\n    closeList()\n  }\n\n  const handleListToggle = () => {\n    if (isOpen.value) {\n      closeList()\n      clearHighlightedOption()\n    } else {\n      openList()\n\n      if (selectedOption.value !== '') {\n        highlightOption(selectedOption.value)\n\n        nextTick(() => {\n          scrollList(selectedOptionRef.value)\n        })\n      } else {\n        highlightOption(firstOptionValue.value)\n      }\n    }\n\n    focusInput()\n  }\n\n  const handleClearInput = () => {\n    clearSelectedOption()\n    clearHighlightedOption()\n    focusInput()\n  }\n\n  const handleHoverOnListOption = value => {\n    highlightOption(value)\n\n    if (highlightedOptionRef.value) {\n      highlightedOptionRef.value.focus({ preventScroll: true })\n    }\n  }\n\n  const handleSpaceOnListOption = value => {\n    selectOption(value)\n    closeList()\n    focusInput()\n  }\n\n  const handleEnterOnListOption = value => {\n    selectOption(value)\n    closeList()\n    focusInput()\n  }\n\n  const handleDownOnListOption = index => {\n    if (!isLastOption.value) {\n      highlightOption(filteredOptions.value[index + 1].value)\n\n      const itemRef = getItemRefByValue(highlightedOption.value)\n\n      scrollList(itemRef.value)\n\n      if (highlightedOptionRef.value) {\n        highlightedOptionRef.value.focus()\n      }\n    }\n  }\n\n  const handleUpOnListOption = index => {\n    if (isFirstOption.value) {\n      closeList()\n      clearHighlightedOption()\n      focusInput()\n    } else {\n      highlightOption(filteredOptions.value[index - 1].value)\n\n      const itemRef = getItemRefByValue(highlightedOption.value)\n\n      scrollList(itemRef.value)\n\n      if (highlightedOptionRef.value) {\n        highlightedOptionRef.value.focus()\n      }\n    }\n  }\n\n  const handleClickOutside = () => {\n    if (isOpen.value) {\n      selectOption(selectedOption.value)\n      closeList()\n      clearHighlightedOption()\n    }\n  }\n\n  const handleClickOnListOption = value => {\n    selectOption(value)\n    closeList()\n    focusInput()\n  }\n\n  const handleEscape = () => {\n    selectOption(selectedOption.value)\n    closeList()\n    clearHighlightedOption()\n    focusInput()\n  }\n\n  const handleDownOnInput = () => {\n    if (!isOpen.value) {\n      openList()\n    }\n\n    if (!totalFilteredOptions.value) {\n      return\n    }\n\n    if (selectedOption.value) {\n      highlightOption(selectedOption.value)\n\n      nextTick(() => {\n        selectedOptionRef.value.focus()\n\n        scrollList(selectedOptionRef.value)\n      })\n    } else {\n      highlightOption(firstOptionValue.value)\n\n      nextTick(() => {\n        highlightedOptionRef.value.focus()\n\n        scrollList(highlightedOptionRef.value)\n      })\n    }\n  }\n\n  const handleClickOnInput = () => {\n    if (!isOpen.value) {\n      openList()\n    }\n\n    if (selectedOption.value) {\n      highlightOption(selectedOption.value)\n\n      nextTick(() => {\n        scrollList(selectedOptionRef.value)\n      })\n    } else if (highlightedOption.value === '') {\n      highlightOption(firstOptionValue.value)\n\n      nextTick(() => {\n        scrollList(firstOptionRef.value)\n      })\n    }\n  }\n\n  onClickOutside(componentElement, () => handleClickOutside())\n\n  onKeyStroke('Escape', () => {\n    handleEscape()\n  })\n\n  return {\n    activeDescendent,\n    clearButtonIsVisible,\n    componentElement,\n    computedAssistiveHintId,\n    computedErrorMessageId,\n    computedHintId,\n    computedId,\n    computedLabelId,\n    computedListId,\n    filteredOptions,\n    getListItemIdByIndex,\n    handleClearInput,\n    handleClickOnInput,\n    handleClickOnListOption,\n    handleDownOnInput,\n    handleDownOnListOption,\n    handleEnterOnInput,\n    handleEnterOnListOption,\n    handleFilterOnInput,\n    handleHoverOnListOption,\n    handleListToggle,\n    handleSpaceOnListOption,\n    handleUpOnListOption,\n    highlightedOption: readonly(highlightedOption),\n    inputElement,\n    isDisabled: readonly(isDisabled),\n    isOpen: readonly(isOpen),\n    isReadonly: readonly(isReadonly),\n    listElement,\n    listItemElements,\n    listItemTabIndex,\n    searchTerm,\n    selectedOption,\n    totalFilteredOptions,\n  }\n}\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  group: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [{ 'usa-form-group--error': props.error }])\n</script>\n\n<template>\n  <div v-if=\"group\" v-bind=\"$attrs\" class=\"usa-form-group\" :class=\"classes\">\n    <slot></slot>\n  </div>\n  <template v-else>\n    <slot></slot>\n  </template>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  for: {\n    type: String,\n    required: true,\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [{ 'usa-label--error': props.error }])\n</script>\n\n<template>\n  <label :htmlFor=\"props.for\" class=\"usa-label\" :class=\"classes\">\n    <slot></slot>\n    <template v-if=\"required\"\n      >&nbsp;<slot name=\"required\"\n        ><abbr title=\"required\" class=\"usa-hint usa-hint--required\">*</abbr>\n      </slot>\n    </template>\n  </label>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, useSlots, toRef } from 'vue'\nimport { useComboBox } from '@/composables/useComboBox'\nimport UsaFormGroup from '@/components/UsaFormGroup'\nimport UsaLabel from '@/components/UsaLabel'\n\nconst slots = useSlots()\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  options: {\n    type: Array,\n    default: () => [],\n  },\n  modelValue: {\n    type: [String, Number],\n    default: '',\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  readonly: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  clearButtonAriaLabel: {\n    type: String,\n    default: 'Clear the select contents',\n  },\n  toggleButtonAriaLabel: {\n    type: String,\n    default: 'Toggle the dropdown list',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        formGroup: [],\n        component: [],\n        label: [],\n        input: [],\n        list: [],\n      }\n    },\n  },\n})\n\nconst {\n  activeDescendent,\n  clearButtonIsVisible,\n  componentElement,\n  computedAssistiveHintId,\n  computedErrorMessageId,\n  computedHintId,\n  computedId,\n  computedLabelId,\n  computedListId,\n  filteredOptions,\n  getListItemIdByIndex,\n  handleClearInput,\n  handleClickOnInput,\n  handleClickOnListOption,\n  handleDownOnInput,\n  handleDownOnListOption,\n  handleEnterOnInput,\n  handleEnterOnListOption,\n  handleFilterOnInput,\n  handleHoverOnListOption,\n  handleListToggle,\n  handleSpaceOnListOption,\n  handleUpOnListOption,\n  highlightedOption,\n  inputElement,\n  isOpen,\n  isDisabled,\n  isReadonly,\n  listElement,\n  listItemElements,\n  listItemTabIndex,\n  searchTerm,\n  selectedOption,\n  totalFilteredOptions,\n} = useComboBox(\n  toRef(props, 'id'),\n  toRef(props, 'modelValue'),\n  toRef(props, 'options'),\n  toRef(props, 'disabled'),\n  toRef(props, 'readonly'),\n  emit,\n)\n\nconst ariaDescribedby = computed(() => {\n  const ids = [computedAssistiveHintId.value]\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.join(' ')\n})\n\nconst classes = computed(() => [\n  { 'usa-combo-box--pristine': selectedOption.value !== '' },\n  ...(props.customClasses?.component || []),\n])\n</script>\n\n<template>\n  <UsaFormGroup\n    :group=\"!!$slots.hint || (error && !!$slots['error-message'])\"\n    :error=\"error\"\n    :class=\"props.customClasses?.formGroup\"\n  >\n    <UsaLabel\n      v-if=\"label || $slots.label\"\n      :id=\"computedLabelId\"\n      :for=\"computedId\"\n      :required=\"required\"\n      :error=\"error\"\n      :class=\"customClasses?.label\"\n      ><slot name=\"label\">{{ label }}</slot></UsaLabel\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n\n    <div\n      ref=\"componentElement\"\n      class=\"usa-combo-box\"\n      :class=\"classes\"\n      data-enhanced=\"true\"\n    >\n      <input\n        v-bind=\"$attrs\"\n        :id=\"computedId\"\n        ref=\"inputElement\"\n        v-model=\"searchTerm\"\n        :required=\"required\"\n        :disabled=\"isDisabled\"\n        :readonly=\"isReadonly\"\n        :aria-owns=\"computedListId\"\n        :aria-controls=\"computedListId\"\n        :aria-describedby=\"ariaDescribedby\"\n        :aria-expanded=\"isOpen\"\n        :aria-activedescendant=\"activeDescendent\"\n        aria-autocomplete=\"list\"\n        autocapitalize=\"off\"\n        autocomplete=\"off\"\n        class=\"usa-combo-box__input\"\n        :class=\"props.customClasses?.input\"\n        type=\"text\"\n        role=\"combobox\"\n        @click=\"handleClickOnInput\"\n        @input=\"handleFilterOnInput\"\n        @keydown.prevent.enter=\"handleEnterOnInput\"\n        @keydown.prevent.down=\"handleDownOnInput\"\n      />\n      <span class=\"usa-combo-box__clear-input__wrapper\" tabindex=\"-1\">\n        <button\n          v-show=\"clearButtonIsVisible\"\n          type=\"button\"\n          class=\"usa-combo-box__clear-input\"\n          :aria-label=\"clearButtonAriaLabel\"\n          :disabled=\"isDisabled || isReadonly\"\n          @click=\"handleClearInput\"\n          >&nbsp;</button\n        >\n      </span>\n      <span class=\"usa-combo-box__input-button-separator\">&nbsp;</span>\n      <span class=\"usa-combo-box__toggle-list__wrapper\" tabindex=\"-1\">\n        <button\n          type=\"button\"\n          tabindex=\"-1\"\n          class=\"usa-combo-box__toggle-list\"\n          :aria-label=\"toggleButtonAriaLabel\"\n          :disabled=\"isDisabled || isReadonly\"\n          @click=\"handleListToggle\"\n          >&nbsp;</button\n        >\n      </span>\n      <ul\n        :id=\"computedListId\"\n        ref=\"listElement\"\n        tabindex=\"-1\"\n        class=\"usa-combo-box__list\"\n        :class=\"props.customClasses?.list\"\n        role=\"listbox\"\n        :aria-labelledby=\"computedLabelId\"\n        :hidden=\"!isOpen\"\n      >\n        <template v-if=\"filteredOptions.length\">\n          <li\n            v-for=\"(option, index) in filteredOptions\"\n            :id=\"getListItemIdByIndex(index)\"\n            ref=\"listItemElements\"\n            :key=\"option.value\"\n            :aria-setsize=\"totalFilteredOptions\"\n            :aria-posinset=\"index + 1\"\n            :aria-selected=\"selectedOption === option.value\"\n            class=\"usa-combo-box__list-option\"\n            :class=\"[\n              {\n                'usa-combo-box__list-option--selected':\n                  selectedOption === option.value,\n                'usa-combo-box__list-option--focused':\n                  highlightedOption === option.value,\n              },\n            ]\"\n            :tabindex=\"listItemTabIndex(option.value)\"\n            role=\"option\"\n            :data-value=\"option.value\"\n            @click=\"handleClickOnListOption(option.value)\"\n            @keydown.prevent.up=\"handleUpOnListOption(index)\"\n            @keydown.prevent.down=\"handleDownOnListOption(index)\"\n            @keydown.prevent.enter=\"handleEnterOnListOption(option.value)\"\n            @keydown.prevent.space=\"handleSpaceOnListOption(option.value)\"\n            @mouseover=\"handleHoverOnListOption(option.value)\"\n            >{{ option.label }}</li\n          >\n        </template>\n        <li v-else class=\"usa-combo-box__list-option--no-results\"\n          ><slot name=\"no-results\">No results found</slot></li\n        >\n      </ul>\n      <div class=\"usa-combo-box__status usa-sr-only\" role=\"status\">\n        <slot v-if=\"isOpen\" name=\"status\" :filtered-options=\"filteredOptions\">\n          <template v-if=\"filteredOptions.length\"\n            >{{ filteredOptions.length }}\n            {{ filteredOptions.length > 1 ? 'results' : 'result' }}\n            available.</template\n          >\n          <template v-else>No results.</template>\n        </slot>\n      </div>\n      <span :id=\"computedAssistiveHintId\" class=\"usa-sr-only\"\n        ><slot name=\"assistive-hint\"\n          >When autocomplete results are available use up and down arrows to\n          review and enter to select. Touch device users, explore by touch or\n          with swipe gestures.</slot\n        >\n      </span>\n    </div>\n  </UsaFormGroup>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport {\n  computed,\n  ref,\n  inject,\n  useSlots,\n  useAttrs,\n  onMounted,\n  onBeforeUnmount,\n} from 'vue'\nimport { useFocus } from '@vueuse/core'\nimport { nextId } from '@/utils/unique-id.js'\nimport UsaFormGroup from '@/components/UsaFormGroup'\nimport UsaLabel from '@/components/UsaLabel'\n\nconst inputElement = ref(null)\nconst { focused } = useFocus(inputElement)\nconst slots = useSlots()\nconst attrs = useAttrs()\n\nconst updateCharacterCount = inject('updateCharacterCount', null)\nconst characterCountMaxlength = inject('characterCountMaxlength', null)\nconst characterCountMessageId = inject('characterCountMessageId', null)\nconst registerInput = inject('registerInput', null)\nconst unregisterInput = inject('unregisterInput', null)\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  type: {\n    type: String,\n    default: 'text',\n  },\n  width: {\n    type: String,\n    default: '',\n    validator(width) {\n      const isValidWidth = [\n        '',\n        '2xs',\n        'xs',\n        'sm',\n        'small',\n        'md',\n        'medium',\n        'lg',\n        'xl',\n        '2xl',\n      ].includes(width)\n\n      if (!isValidWidth) {\n        console.warn(`'${width}' is not a valid text input width`)\n      }\n\n      return isValidWidth\n    },\n  },\n  modelValue: {\n    type: [String, Number],\n    default: '',\n  },\n  group: {\n    type: Boolean,\n    default: false,\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        component: [],\n        label: [],\n        inputGroup: [],\n        inputPrefix: [],\n        inputSuffix: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-text-input'))\nconst computedErrorMessageId = computed(\n  () => `${computedId.value}-error-message`,\n)\nconst computedHintId = computed(() => `${computedId.value}-hint`)\n\nconst textInputValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n\n    if (updateCharacterCount) {\n      updateCharacterCount(value)\n    }\n  },\n})\n\n// Trigger any character counts for default input values.\nonMounted(() => {\n  if (updateCharacterCount) {\n    updateCharacterCount(props.modelValue)\n  }\n\n  if (registerInput) {\n    registerInput(computedId.value)\n  }\n})\n\nonBeforeUnmount(() => {\n  if (unregisterInput) {\n    unregisterInput(computedId.value)\n  }\n})\n\nconst classes = computed(() => {\n  if (slots['input-prefix'] || slots['input-suffix']) {\n    return []\n  }\n\n  return [\n    {\n      'usa-input--error': props.error,\n      'usa-input--2xs': props.width === '2xs',\n      'usa-input--xs': props.width === 'xs',\n      'usa-input--sm': props.width === 'sm',\n      'usa-input--small': props.width === 'small',\n      'usa-input--md': props.width === 'md',\n      'usa-input--medium': props.width === 'medium',\n      'usa-input--lg': props.width === 'lg',\n      'usa-input--xl': props.width === 'xl',\n      'usa-input--2xl': props.width === '2xl',\n      'usa-character-count__field': updateCharacterCount,\n    },\n  ]\n})\n\nconst inputGroupClasses = computed(() => {\n  // istanbul ignore next\n  if (!slots['input-prefix'] && !slots['input-suffix']) {\n    return []\n  }\n\n  return [\n    {\n      'usa-input-group--error': props.error,\n      'usa-input-group--2xs': props.width === '2xs',\n      'usa-input-group--xs': props.width === 'xs',\n      'usa-input-group--sm': props.width === 'sm',\n      'usa-input-group--small': props.width === 'small',\n      'usa-input-group--md': props.width === 'md',\n      'usa-input-group--medium': props.width === 'medium',\n      'usa-input-group--lg': props.width === 'lg',\n      'usa-input-group--xl': props.width === 'xl',\n      'usa-input-group--2xl': props.width === '2xl',\n      'is-focused': focused.value === true,\n    },\n    ...(props.customClasses?.inputGroup || []),\n  ]\n})\n\nconst ariaDescribedby = computed(() => {\n  const ids = []\n\n  if (attrs['aria-describedby']) {\n    ids.push(attrs['aria-describedby'])\n  }\n\n  if (characterCountMessageId) {\n    ids.push(characterCountMessageId.value)\n  }\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.length ? ids.join(' ') : null\n})\n\nconst groupElements = computed(\n  () =>\n    props.group || !!slots.hint || (props.error && !!slots['error-message']),\n)\n</script>\n\n<template>\n  <UsaFormGroup\n    :group=\"groupElements\"\n    :error=\"error\"\n    :class=\"customClasses?.component\"\n  >\n    <UsaLabel\n      v-if=\"label || $slots.label\"\n      :for=\"computedId\"\n      :required=\"required\"\n      :error=\"error\"\n      :class=\"customClasses?.label\"\n      ><slot name=\"label\">{{ label }}</slot></UsaLabel\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n\n    <div\n      v-if=\"$slots['input-prefix'] || $slots['input-suffix']\"\n      class=\"usa-input-group\"\n      :class=\"inputGroupClasses\"\n    >\n      <div\n        v-if=\"$slots['input-prefix']\"\n        class=\"usa-input-prefix\"\n        :class=\"customClasses?.inputPrefix\"\n        aria-hidden=\"true\"\n        @click=\"inputElement.focus()\"\n        ><slot name=\"input-prefix\"></slot\n      ></div>\n      <input\n        v-bind=\"$attrs\"\n        :id=\"computedId\"\n        ref=\"inputElement\"\n        v-model=\"textInputValue\"\n        :type=\"type\"\n        class=\"usa-input\"\n        :class=\"classes\"\n        :required=\"required\"\n        :maxlength=\"characterCountMaxlength || $attrs.maxlength\"\n        :aria-describedby=\"ariaDescribedby\"\n      />\n      <div\n        v-if=\"$slots['input-suffix']\"\n        class=\"usa-input-suffix\"\n        :class=\"customClasses?.inputSuffix\"\n        aria-hidden=\"true\"\n        @click=\"inputElement.focus()\"\n        ><slot name=\"input-suffix\"></slot\n      ></div>\n    </div>\n    <input\n      v-else\n      v-bind=\"$attrs\"\n      :id=\"computedId\"\n      ref=\"inputElement\"\n      v-model=\"textInputValue\"\n      :type=\"type\"\n      class=\"usa-input\"\n      :class=\"classes\"\n      :required=\"required\"\n      :maxlength=\"characterCountMaxlength || $attrs.maxlength\"\n      :aria-describedby=\"ariaDescribedby\"\n    />\n  </UsaFormGroup>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, useSlots, useAttrs } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport UsaFormGroup from '@/components/UsaFormGroup'\nimport UsaLabel from '@/components/UsaLabel'\n\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  options: {\n    type: Array,\n    default: () => [],\n  },\n  emptyLabel: {\n    type: String,\n    default: '- Select -',\n  },\n  modelValue: {\n    type: [String, Number],\n    default: '',\n  },\n  group: {\n    type: Boolean,\n    default: false,\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        component: [],\n        label: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-dropdown'))\nconst computedErrorMessageId = computed(\n  () => `${computedId.value}-error-message`,\n)\nconst computedHintId = computed(() => `${computedId.value}-hint`)\n\nconst selectedValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n  },\n})\n\nconst classes = computed(() => [{ 'usa-input--error': props.error }])\n\nconst ariaDescribedby = computed(() => {\n  const ids = []\n\n  if (attrs['aria-describedby']) {\n    ids.push(attrs['aria-describedby'])\n  }\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.length ? ids.join(' ') : null\n})\n\nconst groupElements = computed(\n  () =>\n    props.group || !!slots.hint || (props.error && !!slots['error-message']),\n)\n</script>\n\n<template>\n  <UsaFormGroup\n    :group=\"groupElements\"\n    :error=\"error\"\n    :class=\"props.customClasses?.component\"\n  >\n    <UsaLabel\n      v-if=\"label || $slots.label\"\n      :for=\"computedId\"\n      :required=\"required\"\n      :error=\"error\"\n      :class=\"customClasses?.label\"\n      ><slot name=\"label\">{{ label }}</slot></UsaLabel\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n\n    <select\n      v-bind=\"$attrs\"\n      :id=\"computedId\"\n      v-model=\"selectedValue\"\n      class=\"usa-select\"\n      :class=\"classes\"\n      :required=\"required\"\n      :aria-describedby=\"ariaDescribedby\"\n    >\n      <option v-if=\"options.length\" value=\"\">{{ emptyLabel }}</option>\n      <slot :options=\"options\">\n        <template v-for=\"option in options\" :key=\"option.value || option.group\">\n          <option\n            v-if=\"!option.group\"\n            :value=\"option.value\"\n            :selected=\"option.value === selectedValue\"\n            :disabled=\"option.disabled\"\n            >{{ option.text || option.value }}</option\n          >\n          <optgroup\n            v-else-if=\"option.group && option.options.length\"\n            :label=\"option.group\"\n            :disabled=\"option.disabled\"\n          >\n            <option\n              v-for=\"groupedOption in option.options\"\n              :key=\"groupedOption.value\"\n              :value=\"groupedOption.value\"\n              :selected=\"groupedOption.value === selectedValue\"\n              :disabled=\"groupedOption.disabled\"\n              >{{ groupedOption.text || groupedOption.value }}</option\n            >\n          </optgroup>\n        </template>\n      </slot>\n    </select>\n  </UsaFormGroup>\n</template>\n","<script setup>\nimport { computed, useSlots } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport UsaTextInput from '@/components/UsaTextInput'\nimport UsaSelect from '@/components/UsaSelect'\n\nconst slots = useSlots()\nconst emit = defineEmits(['update:month', 'update:day', 'update:year'])\n\nconst props = defineProps({\n  label: {\n    type: String,\n    default: '',\n  },\n  day: {\n    type: [String, Number],\n    default: '',\n  },\n  month: {\n    type: [String, Number],\n    default: '',\n  },\n  year: {\n    type: [String, Number],\n    default: '',\n  },\n  dateOrder: {\n    type: Array,\n    default: () => ['month', 'day', 'year'],\n  },\n  dateLabels: {\n    type: Object,\n    default: () => ({ month: 'Month', day: 'Day', year: 'Year' }),\n  },\n  /**\n   * @deprecated\n   */\n  monthAsSelect: {\n    type: Boolean,\n    default: false,\n  },\n  monthEmptyLabel: {\n    type: String,\n    default: undefined,\n  },\n  monthOptions: {\n    type: Array,\n    default: () => [\n      {\n        value: 1,\n        text: '01 - January',\n      },\n      {\n        value: 2,\n        text: '02 - February',\n      },\n      {\n        value: 3,\n        text: '03 - March',\n      },\n      {\n        value: 4,\n        text: '04 - April',\n      },\n      {\n        value: 5,\n        text: '05 - May',\n      },\n      {\n        value: 6,\n        text: '06 - June',\n      },\n      {\n        value: 7,\n        text: '07 - July',\n      },\n      {\n        value: 8,\n        text: '08 - August',\n      },\n      {\n        value: 9,\n        text: '09 - September',\n      },\n      {\n        value: 10,\n        text: '10 - October',\n      },\n      {\n        value: 11,\n        text: '11 - November',\n      },\n      {\n        value: 12,\n        text: '12 - December',\n      },\n    ],\n  },\n  name: {\n    type: String,\n    default: 'date',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n})\n\nif (!props.monthAsSelect) {\n  console.warn(\n    `The 'monthAsSelect' prop is deprecated. Starting with vue-uswds 2.0 the month will always use a select form element. You can set the 'monthAsSelect' prop value to true to minimize changes.`,\n  )\n}\n\nconst computedId = computed(() => props.id || nextId('usa-date-input'))\nconst computedErrorMessageId = computed(\n  () => `${computedId.value}-error-message`,\n)\nconst computedHintId = computed(() => `${computedId.value}-hint`)\n\nconst monthValue = computed({\n  get: () => props.month,\n  set: month => emit('update:month', month),\n})\nconst dayValue = computed({\n  get: () => props.day,\n  set: day => emit('update:day', day),\n})\nconst yearValue = computed({\n  get: () => props.year,\n  set: year => emit('update:year', year),\n})\n\nconst ariaDescribedby = computed(() => {\n  const ids = []\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.length ? ids.join(' ') : null\n})\n</script>\n\n<template>\n  <fieldset class=\"usa-fieldset\">\n    <legend v-if=\"label || $slots.label\" class=\"usa-legend\"\n      ><slot name=\"label\">{{ label }}</slot></legend\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n\n    <div class=\"usa-memorable-date\">\n      <template v-for=\"date in dateOrder\" :key=\"date\">\n        <template v-if=\"date === 'month'\">\n          <UsaSelect\n            v-if=\"monthAsSelect\"\n            :id=\"`${computedId}-${name}-month`\"\n            v-model=\"monthValue\"\n            :options=\"monthOptions\"\n            :empty-label=\"monthEmptyLabel\"\n            :label=\"dateLabels[date]\"\n            :group=\"true\"\n            :name=\"`${name}_month`\"\n            :required=\"required\"\n            :aria-describedby=\"ariaDescribedby\"\n            :custom-classes=\"{ component: ['usa-form-group--month'] }\"\n          />\n          <UsaTextInput\n            v-else\n            :id=\"`${computedId}-${name}-month`\"\n            v-model=\"monthValue\"\n            :label=\"dateLabels[date]\"\n            :group=\"true\"\n            :name=\"`${name}_month`\"\n            :maxlength=\"2\"\n            :required=\"required\"\n            pattern=\"[0-9]*\"\n            inputmode=\"numeric\"\n            :aria-describedby=\"ariaDescribedby\"\n            :custom-classes=\"{ component: ['usa-form-group--month'] }\"\n          />\n        </template>\n        <UsaTextInput\n          v-else-if=\"date === 'day'\"\n          :id=\"`${computedId}-${name}-day`\"\n          v-model=\"dayValue\"\n          :label=\"dateLabels[date]\"\n          :group=\"true\"\n          :name=\"`${name}_day`\"\n          :maxlength=\"2\"\n          :required=\"required\"\n          pattern=\"[0-9]*\"\n          inputmode=\"numeric\"\n          :aria-describedby=\"ariaDescribedby\"\n          :custom-classes=\"{ component: ['usa-form-group--day'] }\"\n        />\n        <UsaTextInput\n          v-else-if=\"date === 'year'\"\n          :id=\"`${computedId}-${name}-year`\"\n          v-model=\"yearValue\"\n          :label=\"dateLabels[date]\"\n          :group=\"true\"\n          :name=\"`${name}_year`\"\n          :minlength=\"4\"\n          :maxlength=\"4\"\n          :required=\"required\"\n          pattern=\"[0-9]*\"\n          inputmode=\"numeric\"\n          :aria-describedby=\"ariaDescribedby\"\n          :custom-classes=\"{ component: ['usa-form-group--year'] }\"\n        />\n      </template>\n    </div>\n  </fieldset>\n</template>\n","import {\n  USA_DATE_REGEX_PATTERN,\n  ISO_DATE_REGEX_PATTERN,\n} from '@/utils/constants.js'\n\nexport const validateTimeString = time => {\n  let isValidTimeString = false\n\n  const [hours, minutes] = time.split(':').map(segment => parseInt(segment, 10))\n\n  if (\n    !Number.isNaN(hours) &&\n    !Number.isNaN(minutes) &&\n    hours >= 0 &&\n    hours < 24 &&\n    minutes >= 0 &&\n    minutes < 60\n  ) {\n    isValidTimeString = true\n  }\n\n  return isValidTimeString\n}\n\nexport const formatYearString = year => `${year}`.padStart(4, '0')\nexport const formatMonthString = month => `${month}`.padStart(2, '0')\nexport const formatDayString = day => `${day}`.padStart(2, '0')\n\nexport const getMonthIndex = dateObject => dateObject.getMonth()\nexport const getMonth = dateObject => getMonthIndex(dateObject) + 1\nexport const getYear = dateObject => dateObject.getFullYear()\nexport const getDay = dateObject => dateObject.getDate()\n\n/**\n * Parses a ISO-8601 formatted string into a native Date object.\n *\n * @param {string} dateIsoString\n * A ISO-8601 formatted string representing a date.\n * @returns {object}\n */\nexport const parseIsoDate = dateString => {\n  const [year, month, day] = dateString.split('-')\n\n  const newDate = new Date(\n    parseInt(year, 10),\n    parseInt(month, 10) - 1,\n    parseInt(day, 10),\n    0,\n    0,\n    0,\n    0,\n  ).setFullYear(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10))\n\n  return new Date(newDate)\n}\n\nexport const today = () => {\n  const now = new Date()\n  return new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, 0)\n}\n\nexport const parseUsaDate = date => {\n  const [month, day, year] = date.split('/')\n\n  const newDate = new Date(\n    parseInt(year, 10),\n    parseInt(month, 10) - 1,\n    parseInt(day, 10),\n    0,\n    0,\n    0,\n    0,\n  ).setFullYear(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10))\n\n  return new Date(newDate)\n}\n\nexport const formatIsoDate = dateObject => {\n  const year = formatYearString(getYear(dateObject))\n  const month = formatMonthString(getMonth(dateObject))\n  const day = formatDayString(getDay(dateObject))\n\n  return `${year}-${month}-${day}`\n}\n\nexport const formatUsaDate = dateObject => {\n  const year = formatYearString(getYear(dateObject))\n  const month = formatMonthString(getMonth(dateObject))\n  const day = formatDayString(getDay(dateObject))\n\n  return `${month}/${day}/${year}`\n}\n\nexport const isDateBefore = (date, dateToCompare) =>\n  date.getTime() < dateToCompare.getTime()\n\nexport const isDateAfter = (date, dateToCompare) =>\n  date.getTime() > dateToCompare.getTime()\n\nexport const isDateInRange = (date, minDate, maxDate) =>\n  !isDateBefore(date, minDate) && !isDateAfter(date, maxDate)\n\nexport const setYear = (dateObject, newYear) => {\n  const year = formatYearString(newYear)\n  const month = formatMonthString(getMonth(dateObject))\n  const day = formatDayString(getDay(dateObject))\n  const newDateString = `${year}-${month}-${day}`\n\n  return parseIsoDate(newDateString)\n}\nexport const setMonth = (dateObject, newMonth) => {\n  const year = formatYearString(getYear(dateObject))\n  const month = formatMonthString(newMonth)\n  const day = formatDayString(getDay(dateObject))\n  const newDateString = `${year}-${month}-${day}`\n\n  return parseIsoDate(newDateString)\n}\n\nexport const isValidDate = dateObject => {\n  return !Number.isNaN(dateObject?.getTime())\n}\n\nexport const isValidIsoDate = isoDateString =>\n  ISO_DATE_REGEX_PATTERN.test(isoDateString)\n\nexport const isValidUsaDate = usaDateString =>\n  USA_DATE_REGEX_PATTERN.test(usaDateString)\n\nexport const minDate = dates => {\n  const timestamps = dates.map(date => date.getTime())\n  const min = Math.min(...timestamps)\n\n  return new Date(min)\n}\n\nexport const maxDate = dates => {\n  const timestamps = dates.map(date => date.getTime())\n  const max = Math.max(...timestamps)\n\n  return new Date(max)\n}\n\nexport const startOfYear = dateObject => {\n  const year = getYear(dateObject)\n\n  const date = new Date(formatIsoDate(dateObject))\n  date.setFullYear(year, 0, 1)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\nexport const endOfYear = dateObject => {\n  const year = getYear(dateObject)\n\n  const date = new Date(formatIsoDate(dateObject))\n  date.setFullYear(year + 1, 0, 0)\n  date.setHours(23, 59, 59, 999)\n\n  return date\n}\n","import { defineComponent, ref, watch, onScopeDispose, h } from 'vue-demi';\nimport { createFocusTrap } from 'focus-trap';\nimport { unrefElement } from '@vueuse/core';\n\nconst UseFocusTrap = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseFocusTrap\",\n  props: [\"as\", \"options\"],\n  setup(props, { slots }) {\n    let trap;\n    const target = ref();\n    const activate = () => trap && trap.activate();\n    const deactivate = () => trap && trap.deactivate();\n    watch(\n      () => unrefElement(target),\n      (el) => {\n        if (!el)\n          return;\n        trap = createFocusTrap(el, props.options || {});\n        activate();\n      },\n      { flush: \"post\" }\n    );\n    onScopeDispose(() => deactivate());\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default());\n    };\n  }\n});\n\nexport { UseFocusTrap };\n","import { computed, shallowRef, watch } from 'vue'\nimport {\n  isBefore,\n  isAfter,\n  isSameMonth,\n  isSameDay,\n  startOfMonth,\n  startOfWeek,\n  startOfDay,\n  endOfMonth,\n  endOfWeek,\n  addDays,\n  subDays,\n  addMonths,\n  subMonths,\n  addYears,\n  subYears,\n  setDate,\n  differenceInCalendarDays,\n} from 'date-fns'\nimport { splitArray } from '@/utils/common.js'\nimport {\n  today,\n  formatIsoDate,\n  parseIsoDate,\n  isValidDate,\n} from '@/utils/dates.js'\n\nexport const useDayPicker = ({\n  activeDate,\n  minDate,\n  maxDate,\n  dayOfWeekLabels,\n  monthLabels,\n  isDateRange,\n  dateRangeStart,\n  dateRangeEnd,\n}) => {\n  const minDateObject = shallowRef(parseIsoDate(minDate.value))\n  watch(minDate, newMinDate => (minDateObject.value = parseIsoDate(newMinDate)))\n\n  const maxDateObject = shallowRef(parseIsoDate(maxDate.value))\n  watch(maxDate, newMaxDate => (maxDateObject.value = parseIsoDate(newMaxDate)))\n\n  const activeDateObject = shallowRef(parseIsoDate(activeDate.value))\n\n  watch(\n    activeDate,\n    newActiveDate => (activeDateObject.value = parseIsoDate(newActiveDate)),\n  )\n\n  const activeDateStart = computed(() =>\n    startOfWeek(startOfMonth(activeDateObject.value)),\n  )\n  const activeDateEnd = computed(() =>\n    endOfWeek(endOfMonth(activeDateObject.value)),\n  )\n\n  const activeMonthIndex = computed(() => activeDateObject.value.getMonth())\n\n  const isPreviousMonth = (currentMonth, monthToCompare) => {\n    if (currentMonth === 0) {\n      return monthToCompare === 11\n    }\n\n    return currentMonth + 1 === monthToCompare\n  }\n\n  const isCurrentMonth = (currentMonth, monthToCompare) =>\n    currentMonth === monthToCompare\n\n  const isNextMonth = (currentMonth, monthToCompare) => {\n    if (currentMonth === 11) {\n      return monthToCompare === 0\n    }\n\n    return currentMonth - 1 === monthToCompare\n  }\n\n  const isDateInRange = date => {\n    return (\n      !isBefore(date, parseIsoDate(minDate.value)) &&\n      !isAfter(date, parseIsoDate(maxDate.value))\n    )\n  }\n\n  const isDateInCurrentRange = date => {\n    return (\n      isDateRange.value &&\n      dateRangeStart.value &&\n      dateRangeEnd.value &&\n      isDateInRange(date) &&\n      !isBefore(subDays(date, 1), parseIsoDate(dateRangeStart.value)) &&\n      !isAfter(addDays(date, 1), parseIsoDate(dateRangeEnd.value))\n    )\n  }\n\n  const formatAriaLabelDate = date => {\n    const year = `${date.getFullYear()}`.padStart(4, '0')\n    const day = date.getDate()\n    const dayOfWeekIndex = date.getDay()\n    const dayOfWeekLabel = dayOfWeekLabels.value[dayOfWeekIndex]\n    const monthIndex = date.getMonth()\n    const monthLabel = monthLabels.value[monthIndex]\n\n    return `${day} ${monthLabel} ${year} ${dayOfWeekLabel}`\n  }\n\n  const findClosestPastDate = (start, stop) => {\n    let index = start\n\n    while (!isAfter(index, stop)) {\n      if (isDateInRange(index)) {\n        return formatIsoDate(index)\n      }\n\n      index = addDays(index, 1)\n    }\n\n    return formatIsoDate(start)\n  }\n\n  const findClosestFutureDate = (start, stop) => {\n    let index = start\n\n    while (!isBefore(startOfDay(index), stop)) {\n      if (isDateInRange(index)) {\n        return formatIsoDate(index)\n      }\n\n      index = subDays(index, 1)\n    }\n\n    return formatIsoDate(start)\n  }\n\n  const findPreviousMonth = currentDateObject => {\n    return isDateInRange(subMonths(currentDateObject, 1), currentDateObject)\n      ? formatIsoDate(subMonths(currentDateObject, 1))\n      : findClosestPastDate(subMonths(currentDateObject, 1), currentDateObject)\n  }\n\n  const findNextMonth = currentDateObject => {\n    return isDateInRange(addMonths(currentDateObject, 1), currentDateObject)\n      ? formatIsoDate(addMonths(currentDateObject, 1))\n      : findClosestFutureDate(\n          addMonths(currentDateObject, 1),\n          currentDateObject,\n        )\n  }\n\n  const findPreviousYear = currentDateObject => {\n    const currentDay = currentDateObject.getDate()\n    const previousYearDateObject = subYears(currentDateObject, 1)\n\n    if (isDateInRange(previousYearDateObject)) {\n      return formatIsoDate(previousYearDateObject)\n    }\n    const nextAvailableDate = parseIsoDate(\n      findClosestPastDate(previousYearDateObject, currentDateObject),\n    )\n\n    const nextDateOnSameDay = setDate(nextAvailableDate, currentDay)\n\n    if (\n      !isValidDate(nextDateOnSameDay) ||\n      !isDateInRange(nextDateOnSameDay) ||\n      isSameDay(currentDateObject, nextDateOnSameDay)\n    ) {\n      return formatIsoDate(nextAvailableDate)\n    }\n\n    return formatIsoDate(nextDateOnSameDay)\n  }\n\n  const findNextYear = currentDateObject => {\n    const currentDay = currentDateObject.getDate()\n    const nextYearDateObject = addYears(currentDateObject, 1)\n\n    if (isDateInRange(nextYearDateObject)) {\n      return formatIsoDate(nextYearDateObject)\n    }\n\n    const nextAvailableDate = parseIsoDate(\n      findClosestFutureDate(nextYearDateObject, currentDateObject),\n    )\n\n    const nextDateOnSameDay = setDate(nextAvailableDate, currentDay)\n\n    if (\n      !isValidDate(nextDateOnSameDay) ||\n      !isDateInRange(nextDateOnSameDay) ||\n      isSameDay(currentDateObject, nextDateOnSameDay)\n    ) {\n      return formatIsoDate(nextAvailableDate)\n    }\n\n    return formatIsoDate(nextDateOnSameDay)\n  }\n\n  const hasPastYear = computed(\n    () => !isSameMonth(activeDateObject.value, minDateObject.value),\n  )\n  const hasFutureYear = computed(\n    () => !isSameMonth(activeDateObject.value, maxDateObject.value),\n  )\n  const hasPastMonth = computed(\n    () => !isSameMonth(activeDateObject.value, minDateObject.value),\n  )\n  const hasFutureMonth = computed(\n    () => !isSameMonth(activeDateObject.value, maxDateObject.value),\n  )\n\n  const todaysDate = formatIsoDate(today())\n\n  const visibleDateRange = computed(() => {\n    const dates = []\n    const totalDays = differenceInCalendarDays(\n      activeDateEnd.value,\n      activeDateStart.value,\n    )\n\n    let index = 0\n\n    while (index <= totalDays) {\n      const currentDate = addDays(activeDateStart.value, index)\n\n      const monthIndex = currentDate.getMonth()\n      const month = monthIndex + 1\n\n      dates.push({\n        date: formatIsoDate(currentDate),\n        label: formatAriaLabelDate(currentDate),\n        day: currentDate.getDate(),\n        month: month,\n        year: currentDate.getFullYear(),\n        isPreviousMonth: isPreviousMonth(monthIndex, activeMonthIndex.value),\n        isCurrentMonth: isCurrentMonth(monthIndex, activeMonthIndex.value),\n        isNextMonth: isNextMonth(monthIndex, activeMonthIndex.value),\n        isInCurrentRange: isDateInCurrentRange(currentDate),\n        previousMonth: findPreviousMonth(currentDate),\n        nextMonth: findNextMonth(currentDate),\n        previousYear: findPreviousYear(currentDate),\n        nextYear: findNextYear(currentDate),\n        disabled: !isDateInRange(currentDate),\n        left: isDateInRange(subDays(currentDate, 1))\n          ? formatIsoDate(subDays(currentDate, 1))\n          : null,\n        right: isDateInRange(addDays(currentDate, 1))\n          ? formatIsoDate(addDays(currentDate, 1))\n          : null,\n        up: isDateInRange(subDays(currentDate, 7))\n          ? formatIsoDate(subDays(currentDate, 7))\n          : findClosestPastDate(parseIsoDate(minDate.value), currentDate),\n        down: isDateInRange(addDays(currentDate, 7))\n          ? formatIsoDate(addDays(currentDate, 7))\n          : findClosestFutureDate(parseIsoDate(maxDate.value), currentDate),\n        home: findClosestPastDate(startOfWeek(currentDate), currentDate),\n        end: findClosestFutureDate(endOfWeek(currentDate), currentDate),\n        pageUp: findPreviousMonth(currentDate),\n        pageDown: findNextMonth(currentDate),\n        shiftPageUp: findPreviousYear(currentDate),\n        shiftPageDown: findNextYear(currentDate),\n      })\n\n      index += 1\n    }\n\n    return dates\n  })\n\n  const groupedVisibleDateRange = computed(() =>\n    splitArray(visibleDateRange.value, 7),\n  )\n\n  const dates = computed(() => {\n    return groupedVisibleDateRange.value.map(row => {\n      return row.map((item, index) => {\n        return {\n          ...item,\n          id: `${item.date}-${index}`,\n        }\n      })\n    })\n  })\n\n  return {\n    dates,\n    todaysDate,\n    hasPastYear,\n    hasFutureYear,\n    hasPastMonth,\n    hasFutureMonth,\n  }\n}\n","<script setup>\nimport {\n  computed,\n  ref,\n  toRef,\n  watch,\n  nextTick,\n  toRaw,\n  onBeforeUnmount,\n  shallowRef,\n  inject,\n} from 'vue'\nimport { UseFocusTrap } from '@vueuse/integrations/useFocusTrap/component'\nimport { isSameMonth, addMonths, subMonths, addYears, subYears } from 'date-fns'\nimport {\n  getMonthIndex,\n  getYear,\n  formatIsoDate,\n  isDateInRange,\n  parseIsoDate,\n} from '@/utils/dates.js'\nimport { useDayPicker } from './useDayPicker.js'\n\nconst inputHighlightedDate = inject('inputHighlightedDate')\nconst isDateRange = inject('isDateRange', false)\nconst dateRangeStart = inject('dateRangeStart', '')\nconst dateRangeEnd = inject('dateRangeEnd', '')\nconst rangeType = inject('rangeType', '')\n\nconst emit = defineEmits([\n  'update:open',\n  'update:selectedDate',\n  'update:activeDate',\n  'update:selectorMode',\n  'update:highlightedDate',\n  'update:isPristine',\n])\n\nconst props = defineProps({\n  selectedDate: {\n    type: String,\n    default: '',\n  },\n  activeDate: {\n    type: String,\n    required: true,\n  },\n  minDate: {\n    type: String,\n    required: true,\n  },\n  maxDate: {\n    type: String,\n    required: true,\n  },\n  monthLabels: {\n    type: Array,\n    required: true,\n  },\n  dayOfWeekLabels: {\n    type: Array,\n    required: true,\n  },\n  dayOfWeekAbbreviationLabels: {\n    type: Array,\n    required: true,\n  },\n  previousYearButtonLabel: {\n    type: String,\n    required: true,\n  },\n  nextYearButtonLabel: {\n    type: String,\n    required: true,\n  },\n  previousMonthButtonLabel: {\n    type: String,\n    required: true,\n  },\n  nextMonthButtonLabel: {\n    type: String,\n    required: true,\n  },\n  monthSelectionButtonLabel: {\n    type: String,\n    required: true,\n  },\n  yearSelectionButtonLabel: {\n    type: String,\n    required: true,\n  },\n  previousYearsButtonLabel: {\n    type: String,\n    required: true,\n  },\n  nextYearsButtonLabel: {\n    type: String,\n    required: true,\n  },\n})\n\nconst focusTrapOptions = {\n  immediate: true,\n  clickOutsideDeactivates: true,\n  initialFocus: '.usa-date-picker__calendar__date--focused',\n  fallbackFocus: '.usa-date-picker__calendar__date-picker',\n}\n\nconst dateButtonRefs = ref([])\n\nconst selectedDate = computed({\n  get() {\n    return props.selectedDate\n  },\n  set(newSelectedDate) {\n    emit('update:selectedDate', newSelectedDate)\n  },\n})\n\nconst activeDate = computed({\n  get() {\n    return props.activeDate\n  },\n  set(newActiveDate) {\n    emit('update:activeDate', newActiveDate)\n  },\n})\n\nconst activeDateObject = shallowRef(parseIsoDate(activeDate.value))\n\nwatch(activeDate, newActiveDate => {\n  activeDateObject.value = parseIsoDate(newActiveDate)\n})\n\nconst activeMonthIndex = computed(() => getMonthIndex(activeDateObject.value))\nconst activeMonthLabel = computed(\n  () => props.monthLabels[activeMonthIndex.value],\n)\nconst activeYear = computed(() => getYear(activeDateObject.value))\n\nconst {\n  dates,\n  hasPastMonth,\n  hasFutureMonth,\n  hasPastYear,\n  hasFutureYear,\n  todaysDate,\n} = useDayPicker({\n  activeDate: activeDate,\n  minDate: toRef(props, 'minDate'),\n  maxDate: toRef(props, 'maxDate'),\n  dayOfWeekLabels: toRef(props, 'dayOfWeekLabels'),\n  monthLabels: toRef(props, 'monthLabels'),\n  isDateRange: isDateRange,\n  dateRangeStart: dateRangeStart,\n  dateRangeEnd: dateRangeEnd,\n})\n\nconst highlightedDate = ref(activeDate.value)\nconst highlightedRowIndex = ref(null)\nconst highlightedButtonIndex = ref(null)\n\nwatch(selectedDate, newSelectedDate => {\n  if (newSelectedDate) {\n    highlightedDate.value = newSelectedDate\n    activeDate.value = newSelectedDate\n  }\n})\n\nconst monthSelectionButtonLabel = computed(() => {\n  return props.monthSelectionButtonLabel.replace('%s', activeMonthLabel.value)\n})\n\nconst yearSelectionButtonLabel = computed(() => {\n  return props.yearSelectionButtonLabel.replace('%s', activeYear.value)\n})\n\nconst visibleDateRange = computed(() => toRaw(dates.value).flat())\n\nconst tabIndex = (date, rowIndex, buttonIndex) => {\n  if (\n    date === highlightedDate.value ||\n    date === selectedDate.value ||\n    (highlightedRowIndex.value === rowIndex &&\n      highlightedButtonIndex.value === buttonIndex)\n  ) {\n    return 0\n  }\n\n  return -1\n}\n\nconst getButtonByDate = date =>\n  dateButtonRefs.value.find(button => button.dataset.value === date)\n\nconst setButtonFocusByDate = date => {\n  const foundButton = getButtonByDate(date)\n\n  if (foundButton) {\n    foundButton.focus()\n  }\n}\n\nconst toPreviousMonth = () => {\n  const previousMonth = isDateInRange(\n    subMonths(activeDateObject.value, 1),\n    parseIsoDate(props.minDate),\n    parseIsoDate(props.maxDate),\n  )\n    ? subMonths(activeDateObject.value, 1)\n    : parseIsoDate(props.minDate)\n\n  activeDate.value = formatIsoDate(previousMonth)\n}\n\nconst toNextMonth = () => {\n  const nextMonth = isDateInRange(\n    addMonths(activeDateObject.value, 1),\n    parseIsoDate(props.minDate),\n    parseIsoDate(props.maxDate),\n  )\n    ? addMonths(activeDateObject.value, 1)\n    : parseIsoDate(props.maxDate)\n\n  activeDate.value = formatIsoDate(nextMonth)\n}\n\nconst toPreviousYear = () => {\n  const previousYear = isDateInRange(\n    subYears(activeDateObject.value, 1),\n    parseIsoDate(props.minDate),\n    parseIsoDate(props.maxDate),\n  )\n    ? subYears(activeDateObject.value, 1)\n    : parseIsoDate(props.minDate)\n\n  activeDate.value = formatIsoDate(previousYear)\n}\n\nconst toNextYear = () => {\n  const nextYear = isDateInRange(\n    addYears(activeDateObject.value, 1),\n    parseIsoDate(props.minDate),\n    parseIsoDate(props.maxDate),\n  )\n    ? addYears(activeDateObject.value, 1)\n    : parseIsoDate(props.maxDate)\n\n  activeDate.value = formatIsoDate(nextYear)\n}\n\nconst handlePreviousMonth = () => {\n  const newDate =\n    dates.value[highlightedRowIndex.value][highlightedButtonIndex.value]\n      .previousMonth\n\n  toPreviousMonth()\n\n  highlightedDate.value = newDate\n}\n\nconst handleNextMonth = () => {\n  const newDate =\n    dates.value[highlightedRowIndex.value][highlightedButtonIndex.value]\n      .nextMonth\n\n  toNextMonth()\n\n  highlightedDate.value = newDate\n}\n\nconst handlePreviousYear = () => {\n  const previousYear =\n    dates.value[highlightedRowIndex.value][highlightedButtonIndex.value]\n      .previousYear\n  toPreviousYear()\n\n  highlightedDate.value = previousYear\n\n  nextTick(() => {\n    if (\n      isSameMonth(\n        parseIsoDate(highlightedDate.value),\n        parseIsoDate(props.minDate),\n      )\n    ) {\n      setButtonFocusByDate(highlightedDate.value)\n    }\n  })\n}\n\nconst handleNextYear = () => {\n  const nextYear =\n    dates.value[highlightedRowIndex.value][highlightedButtonIndex.value]\n      .nextYear\n\n  toNextYear()\n\n  highlightedDate.value = nextYear\n\n  nextTick(() => {\n    if (\n      isSameMonth(\n        parseIsoDate(highlightedDate.value),\n        parseIsoDate(props.maxDate),\n      )\n    ) {\n      setButtonFocusByDate(highlightedDate.value)\n    }\n  })\n}\n\nconst handleClickOnDate = date => {\n  selectedDate.value = date\n  highlightedDate.value = date\n  emit('update:open', false)\n}\n\nconst handleHoverOnDate = date => {\n  highlightedDate.value = date\n\n  const foundDate = visibleDateRange.value.find(item => item.date === date)\n\n  nextTick(() => {\n    if (foundDate.isCurrentMonth) {\n      setButtonFocusByDate(highlightedDate.value)\n    }\n  })\n}\n\nconst handlePreviousDate = (date, to = null) => {\n  if (!date) {\n    return\n  }\n\n  const foundDate = visibleDateRange.value.find(item => item.date === date)\n\n  if (!foundDate || !foundDate.isCurrentMonth) {\n    if (!to || to === 'month') {\n      toPreviousMonth()\n    } else if (to === 'year') {\n      toPreviousYear()\n    }\n  }\n\n  highlightedDate.value = date\n\n  nextTick(() => {\n    setButtonFocusByDate(date)\n  })\n}\n\nconst handleNextDate = (date, to = null) => {\n  if (!date) {\n    return\n  }\n\n  const foundDate = visibleDateRange.value.find(item => item.date === date)\n  if (!foundDate || !foundDate.isCurrentMonth) {\n    if (!to || to === 'month') {\n      toNextMonth()\n    } else if (to === 'year') {\n      toNextYear()\n    }\n  }\n\n  highlightedDate.value = date\n\n  nextTick(() => {\n    setButtonFocusByDate(date)\n  })\n}\n\nwatch(\n  highlightedDate,\n  newHighlightedDate => {\n    emit('update:highlightedDate', newHighlightedDate)\n\n    nextTick(() => {\n      if (\n        visibleDateRange.value.some(\n          item => item.date === newHighlightedDate && item.isCurrentMonth,\n        ) &&\n        isDateInRange(\n          parseIsoDate(newHighlightedDate),\n          parseIsoDate(props.minDate),\n          parseIsoDate(props.maxDate),\n        )\n      ) {\n        const newRowIndex = dates.value.findIndex(row =>\n          row.find(({ date }) => date === newHighlightedDate),\n        )\n\n        const newButtonIndex = dates.value[newRowIndex].findIndex(\n          ({ date }) => date === newHighlightedDate,\n        )\n\n        highlightedRowIndex.value = newRowIndex\n        highlightedButtonIndex.value = newButtonIndex\n      }\n    })\n  },\n  { immediate: true },\n)\n\nwatch(inputHighlightedDate, newHighlightedDate => {\n  highlightedDate.value = newHighlightedDate\n})\n\nconst stopWatchingHighlightedDate = watch(highlightedDate, () => {\n  emit('update:isPristine', false)\n  stopWatchingHighlightedDate()\n})\n\nonBeforeUnmount(() => {\n  emit('update:isPristine', true)\n})\n</script>\n\n<template>\n  <UseFocusTrap :options=\"focusTrapOptions\">\n    <div tabindex=\"-1\" class=\"usa-date-picker__calendar__date-picker\">\n      <div class=\"usa-date-picker__calendar__row\">\n        <div\n          class=\"usa-date-picker__calendar__cell usa-date-picker__calendar__cell--center-items\"\n        >\n          <button\n            type=\"button\"\n            class=\"usa-date-picker__calendar__previous-year\"\n            :aria-label=\"previousYearButtonLabel\"\n            :disabled=\"!hasPastYear\"\n            @click=\"handlePreviousYear\"\n          ></button>\n        </div>\n        <div\n          class=\"usa-date-picker__calendar__cell usa-date-picker__calendar__cell--center-items\"\n        >\n          <button\n            type=\"button\"\n            class=\"usa-date-picker__calendar__previous-month\"\n            :aria-label=\"previousMonthButtonLabel\"\n            :disabled=\"!hasPastMonth\"\n            @click=\"handlePreviousMonth\"\n          ></button>\n        </div>\n        <div\n          class=\"usa-date-picker__calendar__cell usa-date-picker__calendar__month-label\"\n        >\n          <button\n            type=\"button\"\n            class=\"usa-date-picker__calendar__month-selection\"\n            :aria-label=\"monthSelectionButtonLabel\"\n            @click=\"emit('update:selectorMode', 'month')\"\n            >{{ activeMonthLabel }}</button\n          >\n          <button\n            type=\"button\"\n            class=\"usa-date-picker__calendar__year-selection\"\n            :aria-label=\"yearSelectionButtonLabel\"\n            @click=\"emit('update:selectorMode', 'year')\"\n            >{{ activeYear }}</button\n          >\n        </div>\n        <div\n          class=\"usa-date-picker__calendar__cell usa-date-picker__calendar__cell--center-items\"\n        >\n          <button\n            type=\"button\"\n            class=\"usa-date-picker__calendar__next-month\"\n            :aria-label=\"nextMonthButtonLabel\"\n            :disabled=\"!hasFutureMonth\"\n            @click=\"handleNextMonth\"\n          ></button>\n        </div>\n        <div\n          class=\"usa-date-picker__calendar__cell usa-date-picker__calendar__cell--center-items\"\n        >\n          <button\n            type=\"button\"\n            class=\"usa-date-picker__calendar__next-year\"\n            :aria-label=\"nextYearButtonLabel\"\n            :disabled=\"!hasFutureYear\"\n            @click=\"handleNextYear\"\n          ></button>\n        </div>\n      </div>\n\n      <table class=\"usa-date-picker__calendar__table\">\n        <thead>\n          <tr>\n            <th\n              v-for=\"(dayLabel, index) in dayOfWeekLabels\"\n              :key=\"dayLabel\"\n              class=\"usa-date-picker__calendar__day-of-week\"\n              scope=\"col\"\n              :aria-label=\"dayLabel\"\n              >{{ dayOfWeekAbbreviationLabels[index] }}\n            </th>\n          </tr>\n        </thead>\n\n        <tbody>\n          <tr\n            v-for=\"(row, rowIndex) in dates\"\n            :key=\"`${rowIndex}-${row.map(({ date }) => date).join('-')}`\"\n          >\n            <td v-for=\"(item, buttonIndex) in row\" :key=\"item.id\">\n              <button\n                ref=\"dateButtonRefs\"\n                type=\"button\"\n                :disabled=\"item.disabled\"\n                :tabindex=\"tabIndex(item.date, rowIndex, buttonIndex)\"\n                class=\"usa-date-picker__calendar__date\"\n                :class=\"{\n                  'usa-date-picker__calendar__date--previous-month':\n                    item.isPreviousMonth,\n                  'usa-date-picker__calendar__date--current-month':\n                    item.isCurrentMonth,\n                  'usa-date-picker__calendar__date--next-month':\n                    item.isNextMonth,\n                  'usa-date-picker__calendar__date--today':\n                    item.date === todaysDate,\n                  'usa-date-picker__calendar__date--selected':\n                    selectedDate === item.date,\n                  'usa-date-picker__calendar__date--focused':\n                    highlightedRowIndex === rowIndex &&\n                    highlightedButtonIndex === buttonIndex &&\n                    item.isCurrentMonth,\n                  'usa-date-picker__calendar__date--range-date':\n                    (isDateRange &&\n                      dateRangeEnd &&\n                      rangeType === 'start' &&\n                      item.date === dateRangeEnd) ||\n                    (isDateRange &&\n                      dateRangeStart &&\n                      rangeType === 'end' &&\n                      item.date === dateRangeStart),\n                  'usa-date-picker__calendar__date--within-range':\n                    (isDateRange &&\n                      dateRangeStart &&\n                      dateRangeEnd &&\n                      item.isInCurrentRange) ||\n                    (isDateRange &&\n                      dateRangeStart &&\n                      !dateRangeEnd &&\n                      item.date > dateRangeStart &&\n                      item.date < highlightedDate) ||\n                    (isDateRange &&\n                      dateRangeEnd &&\n                      !dateRangeStart &&\n                      item.date < dateRangeEnd &&\n                      item.date > highlightedDate),\n                  'usa-date-picker__calendar__date--range-date-start':\n                    (isDateRange &&\n                      dateRangeStart &&\n                      item.date === dateRangeStart) ||\n                    (isDateRange &&\n                      dateRangeEnd &&\n                      item.date !== dateRangeEnd &&\n                      rangeType === 'start' &&\n                      !dateRangeStart &&\n                      highlightedRowIndex === rowIndex &&\n                      highlightedButtonIndex === buttonIndex &&\n                      item.isCurrentMonth),\n                  'usa-date-picker__calendar__date--range-date-end':\n                    (isDateRange &&\n                      dateRangeEnd &&\n                      item.date === dateRangeEnd) ||\n                    (isDateRange &&\n                      dateRangeStart &&\n                      item.date !== dateRangeStart &&\n                      rangeType === 'end' &&\n                      !dateRangeEnd &&\n                      highlightedRowIndex === rowIndex &&\n                      highlightedButtonIndex === buttonIndex &&\n                      item.isCurrentMonth),\n                }\"\n                :data-day=\"item.day\"\n                :data-month=\"item.month\"\n                :data-year=\"item.year\"\n                :data-value=\"item.date\"\n                :aria-label=\"item.label\"\n                :aria-selected=\"selectedDate === item.date\"\n                @click=\"handleClickOnDate(item.date)\"\n                @mouseover=\"handleHoverOnDate(item.date)\"\n                @keydown.prevent.up=\"handlePreviousDate(item.up)\"\n                @keydown.prevent.down=\"handleNextDate(item.down)\"\n                @keydown.prevent.left=\"handlePreviousDate(item.left)\"\n                @keydown.prevent.right=\"handleNextDate(item.right)\"\n                @keydown.prevent.home=\"handlePreviousDate(item.home)\"\n                @keydown.prevent.end=\"handleNextDate(item.end)\"\n                @keydown.prevent.page-up.exact=\"\n                  handlePreviousDate(item.pageUp, 'month')\n                \"\n                @keydown.prevent.page-down.exact=\"\n                  handleNextDate(item.pageDown, 'month')\n                \"\n                @keydown.prevent.shift.page-up=\"\n                  handlePreviousDate(item.shiftPageUp, 'year')\n                \"\n                @keydown.prevent.shift.page-down=\"\n                  handleNextDate(item.shiftPageDown, 'year')\n                \"\n                >{{ item.day }}</button\n              >\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </UseFocusTrap>\n</template>\n","import { computed, shallowRef, watch } from 'vue'\nimport { splitArray } from '@/utils/common.js'\nimport {\n  minDate as min,\n  maxDate as max,\n  parseIsoDate,\n  startOfYear,\n  endOfYear,\n} from '@/utils/dates.js'\n\nexport const useMonthPicker = ({\n  activeYear,\n  monthLabels,\n  minDate,\n  maxDate,\n}) => {\n  const minDateObject = shallowRef(parseIsoDate(minDate.value))\n  const maxDateObject = shallowRef(parseIsoDate(maxDate.value))\n\n  watch(minDate, newMinDate => (minDateObject.value = parseIsoDate(newMinDate)))\n  watch(maxDate, newMaxDate => (maxDateObject.value = parseIsoDate(newMaxDate)))\n\n  const minMonthOfActiveYear = computed(() => {\n    const activeDateObject = parseIsoDate(`${activeYear.value}-01-01`)\n\n    const startOfActiveYear = startOfYear(activeDateObject)\n\n    const minDateOfActiveYear = max([startOfActiveYear, minDateObject.value])\n\n    return minDateOfActiveYear.getMonth()\n  })\n\n  const maxMonthOfActiveYear = computed(() => {\n    const activeDateObject = parseIsoDate(`${activeYear.value}-01-01`)\n\n    const startOfActiveYear = startOfYear(activeDateObject)\n\n    const endOfActiveYear = endOfYear(startOfActiveYear)\n\n    const maxDateOfActiveYear = min([endOfActiveYear, maxDateObject.value])\n\n    return maxDateOfActiveYear.getMonth()\n  })\n\n  const validMonthRangeOfActiveYear = computed(() => {\n    const validMonthRange = []\n\n    for (\n      let i = minMonthOfActiveYear.value;\n      i <= maxMonthOfActiveYear.value;\n      i++\n    ) {\n      validMonthRange.push(i + 1)\n    }\n\n    return validMonthRange\n  })\n\n  const isMonthInRange = month =>\n    validMonthRangeOfActiveYear.value.includes(month)\n\n  const findClosestPastMonth = (start, stop) => {\n    for (let index = start; index <= stop; index++) {\n      if (isMonthInRange(index)) {\n        return index\n      }\n    }\n    return null\n  }\n\n  const findClosestFutureMonth = (start, stop) => {\n    for (let index = start; index >= stop; index--) {\n      if (isMonthInRange(index)) {\n        return index\n      }\n    }\n    return null\n  }\n\n  const monthsOfYear = computed(() =>\n    Object.keys(monthLabels.value).map(index => parseInt(index, 10) + 1),\n  )\n\n  const groupedMonthRange = computed(() => splitArray(monthsOfYear.value, 3))\n\n  const months = computed(() =>\n    groupedMonthRange.value.map(row =>\n      row.map((monthValue, index) => {\n        return {\n          month: monthValue,\n          label: monthLabels.value[monthValue - 1],\n          id: `${monthValue}-${index}`,\n          disabled: !isMonthInRange(monthValue),\n          left: isMonthInRange(monthValue - 1) ? monthValue - 1 : null,\n          right: isMonthInRange(monthValue + 1) ? monthValue + 1 : null,\n          up: isMonthInRange(monthValue - 3)\n            ? monthValue - 3\n            : isMonthInRange(monthValue - 1)\n              ? monthValue - 1\n              : null,\n          down: isMonthInRange(monthValue + 3)\n            ? monthValue + 3\n            : isMonthInRange(monthValue + 1)\n              ? monthValue + 1\n              : null,\n          home: row.find(monthValue => isMonthInRange(monthValue)) || null,\n          end:\n            [...row].reverse().find(monthValue => isMonthInRange(monthValue)) ||\n            null,\n          pageUp: findClosestPastMonth(1, monthValue),\n          pageDown: findClosestFutureMonth(12, monthValue),\n        }\n      }),\n    ),\n  )\n\n  const findRowIndexByMonth = (months, monthToFind) => {\n    const rowIndex = months.value.findIndex(row =>\n      row.find(({ month }) => month === monthToFind),\n    )\n\n    return rowIndex\n  }\n\n  const findButtonIndexByMonth = (months, rowIndex, monthToFind) => {\n    const buttonIndex = months.value[rowIndex].findIndex(\n      ({ month }) => month === monthToFind,\n    )\n\n    return buttonIndex\n  }\n\n  return {\n    months,\n    findRowIndexByMonth,\n    findButtonIndexByMonth,\n  }\n}\n","<script setup>\nimport { ref, computed, watch, toRef, shallowRef } from 'vue'\nimport { UseFocusTrap } from '@vueuse/integrations/useFocusTrap/component'\nimport { getMonth, getYear, parseIsoDate } from '@/utils/dates.js'\nimport { useMonthPicker } from './useMonthPicker.js'\n\nconst emit = defineEmits(['update:activeMonth', 'update:selectorMode'])\n\nconst props = defineProps({\n  activeDate: {\n    type: String,\n    required: true,\n  },\n  monthLabels: {\n    type: Array,\n    required: true,\n  },\n  minDate: {\n    type: String,\n    required: true,\n  },\n  maxDate: {\n    type: String,\n    required: true,\n  },\n})\n\nconst focusTrapOptions = {\n  immediate: true,\n  clickOutsideDeactivates: true,\n  initialFocus: '.usa-date-picker__calendar__month--focused',\n  fallbackFocus: '.usa-date-picker__calendar__date-picker',\n}\n\nconst monthButtonRefs = ref([])\n\nconst activeDateObject = shallowRef(parseIsoDate(props.activeDate))\n\nwatch(\n  toRef(props, 'activeDate'),\n  newActiveDate => (activeDateObject.value = parseIsoDate(newActiveDate)),\n)\n\nconst activeMonth = computed(() => getMonth(activeDateObject.value))\nconst activeYear = computed(() => getYear(activeDateObject.value))\n\nconst { months, findRowIndexByMonth, findButtonIndexByMonth } = useMonthPicker({\n  activeYear,\n  monthLabels: toRef(props, 'monthLabels'),\n  minDate: toRef(props, 'minDate'),\n  maxDate: toRef(props, 'maxDate'),\n})\n\nconst highlightedMonth = ref(activeMonth.value)\nconst highlightedRowIndex = ref(null)\nconst highlightedButtonIndex = ref(null)\n\nconst tabIndex = (month, rowIndex, buttonIndex) => {\n  if (\n    month === highlightedMonth.value ||\n    month === activeMonth.value ||\n    (highlightedRowIndex.value === rowIndex &&\n      highlightedButtonIndex.value === buttonIndex)\n  ) {\n    return 0\n  }\n\n  return -1\n}\n\nconst getButtonByMonth = month =>\n  monthButtonRefs.value.find(\n    button => parseInt(button.dataset.value, 10) === month,\n  )\n\nconst setButtonFocusByMonth = month => {\n  const foundButton = getButtonByMonth(month)\n\n  if (foundButton) {\n    foundButton.focus()\n  }\n}\n\nconst handleClickOnMonth = month => {\n  emit('update:activeMonth', month)\n  emit('update:selectorMode', 'day')\n}\n\nconst handleHoverOnMonth = month => {\n  highlightedMonth.value = month\n  setButtonFocusByMonth(highlightedMonth.value)\n}\n\nconst handlePreviousMonth = month => {\n  if (!month) {\n    return\n  }\n\n  highlightedMonth.value = month\n  setButtonFocusByMonth(month)\n}\n\nconst handleNextMonth = month => {\n  if (!month) {\n    return\n  }\n\n  highlightedMonth.value = month\n  setButtonFocusByMonth(month)\n}\n\nwatch(\n  highlightedMonth,\n  newHighlightedMonth => {\n    const newRowIndex = findRowIndexByMonth(months, newHighlightedMonth)\n\n    const newButtonIndex = findButtonIndexByMonth(\n      months,\n      newRowIndex,\n      newHighlightedMonth,\n    )\n\n    highlightedRowIndex.value = newRowIndex\n    highlightedButtonIndex.value = newButtonIndex\n  },\n  { immediate: true },\n)\n</script>\n\n<template>\n  <UseFocusTrap :options=\"focusTrapOptions\">\n    <div tabindex=\"-1\" class=\"usa-date-picker__calendar__month-picker\">\n      <table class=\"usa-date-picker__calendar__table\" role=\"presentation\">\n        <tbody>\n          <tr\n            v-for=\"(row, rowIndex) in months\"\n            :key=\"`${rowIndex}-${row.map(({ month }) => month).join('-')}`\"\n          >\n            <td v-for=\"(item, buttonIndex) in row\" :key=\"item.id\">\n              <button\n                ref=\"monthButtonRefs\"\n                type=\"button\"\n                :disabled=\"item.disabled\"\n                :tabindex=\"tabIndex(item.month, rowIndex, buttonIndex)\"\n                class=\"usa-date-picker__calendar__month\"\n                :class=\"{\n                  'usa-date-picker__calendar__month--selected':\n                    activeMonth === item.month,\n                  'usa-date-picker__calendar__month--focused':\n                    highlightedRowIndex === rowIndex &&\n                    highlightedButtonIndex === buttonIndex,\n                }\"\n                :data-value=\"item.month\"\n                :data-label=\"item.label\"\n                :aria-selected=\"activeMonth === item.month\"\n                @click=\"handleClickOnMonth(item.month)\"\n                @mouseover=\"handleHoverOnMonth(item.month)\"\n                @keydown.prevent.up=\"handlePreviousMonth(item.up)\"\n                @keydown.prevent.down=\"handleNextMonth(item.down)\"\n                @keydown.prevent.left=\"handlePreviousMonth(item.left)\"\n                @keydown.prevent.right=\"handleNextMonth(item.right)\"\n                @keydown.prevent.home=\"handlePreviousMonth(item.home)\"\n                @keydown.prevent.end=\"handleNextMonth(item.end)\"\n                @keydown.prevent.page-up=\"handlePreviousMonth(item.pageUp)\"\n                @keydown.prevent.page-down=\"handleNextMonth(item.pageDown)\"\n                >{{ item.label }}</button\n              >\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </UseFocusTrap>\n</template>\n","import { computed } from 'vue'\nimport { splitArray } from '@/utils/common.js'\nimport { YEAR_GROUP } from '@/utils/constants.js'\nimport { getYear, parseIsoDate } from '@/utils/dates.js'\n\nexport default ({ minDate, maxDate, activeYear }) => {\n  const minYear = computed(() => getYear(parseIsoDate(minDate.value)))\n  const maxYear = computed(() => getYear(parseIsoDate(maxDate.value)))\n\n  const isYearInRange = year => year >= minYear.value && year <= maxYear.value\n\n  const findClosestPastYear = (start, stop) => {\n    for (let index = start; index <= stop; index++) {\n      if (isYearInRange(index)) {\n        return index\n      }\n    }\n\n    return null\n  }\n\n  const findClosestFutureYear = (start, stop) => {\n    for (let index = start; index >= stop; index--) {\n      if (isYearInRange(index)) {\n        return index\n      }\n    }\n\n    return null\n  }\n\n  const yearToGroup = computed(() =>\n    Math.max(0, activeYear.value - (activeYear.value % YEAR_GROUP)),\n  )\n\n  const visibleYearRange = computed(() => {\n    const years = []\n\n    let yearIndex = yearToGroup.value\n\n    while (years.length < YEAR_GROUP) {\n      years.push(yearIndex)\n      yearIndex += 1\n    }\n\n    return years\n  })\n\n  const groupedVisibleYearRange = computed(() =>\n    splitArray(visibleYearRange.value, 3),\n  )\n\n  const years = computed(() =>\n    groupedVisibleYearRange.value.map(row =>\n      row.map((year, index) => {\n        return {\n          year: year,\n          id: `${year}-${index}`,\n          disabled: !isYearInRange(year),\n          left: isYearInRange(year - 1) ? year - 1 : null,\n          right: isYearInRange(year + 1) ? year + 1 : null,\n          up: isYearInRange(year - 3) ? year - 3 : null,\n          down: isYearInRange(year + 3) ? year + 3 : null,\n          home: row.find(year => isYearInRange(year)) || null,\n          end: [...row].reverse().find(year => isYearInRange(year)) || null,\n          pageUp: findClosestPastYear(year - YEAR_GROUP, year),\n          pageDown: findClosestFutureYear(year + YEAR_GROUP, year),\n        }\n      }),\n    ),\n  )\n\n  const firstVisibleYear = computed(() => visibleYearRange.value[0])\n  const lastVisibleYear = computed(\n    () => visibleYearRange.value[visibleYearRange.value.length - 1],\n  )\n\n  const hasPastYear = computed(() => isYearInRange(firstVisibleYear.value - 1))\n  const hasFutureYear = computed(() => isYearInRange(lastVisibleYear.value + 1))\n\n  const firstAvailableVisibleYear = computed(() =>\n    findClosestPastYear(firstVisibleYear.value, lastVisibleYear.value),\n  )\n\n  const lastAvailableVisibleYear = computed(() =>\n    findClosestFutureYear(lastVisibleYear.value, firstVisibleYear.value),\n  )\n\n  const isYearAvailable = year => {\n    return (\n      year >= firstAvailableVisibleYear.value &&\n      year <= lastAvailableVisibleYear.value\n    )\n  }\n\n  const findRowIndexByYear = (years, yearToFind) => {\n    const rowIndex = years.value.findIndex(row =>\n      row.find(({ year }) => year === yearToFind),\n    )\n\n    return rowIndex\n  }\n\n  const findButtonIndexByYear = (years, rowIndex, yearToFind) => {\n    const buttonIndex = years.value[rowIndex].findIndex(\n      ({ year }) => year === yearToFind,\n    )\n\n    return buttonIndex\n  }\n\n  return {\n    years,\n    visibleYearRange,\n    firstAvailableVisibleYear,\n    lastAvailableVisibleYear,\n    isYearAvailable,\n    hasPastYear,\n    hasFutureYear,\n    findRowIndexByYear,\n    findButtonIndexByYear,\n  }\n}\n","<script setup>\nimport {\n  ref,\n  computed,\n  watch,\n  nextTick,\n  onBeforeUnmount,\n  shallowRef,\n  toRef,\n} from 'vue'\nimport { UseFocusTrap } from '@vueuse/integrations/useFocusTrap/component'\nimport { YEAR_GROUP } from '@/utils/constants.js'\nimport { getYear, setYear, parseIsoDate } from '@/utils/dates.js'\nimport useYearPicker from './useYearPicker.js'\n\nconst emit = defineEmits([\n  'update:selectedYear',\n  'update:selectorMode',\n  'update:activeYearStart',\n  'update:activeYearEnd',\n])\n\nconst props = defineProps({\n  selectedYear: {\n    type: Number,\n    required: true,\n  },\n  activeDate: {\n    type: String,\n    required: true,\n  },\n  minDate: {\n    type: String,\n    required: true,\n  },\n  maxDate: {\n    type: String,\n    required: true,\n  },\n  previousYearsButtonLabel: {\n    type: String,\n    required: true,\n  },\n  nextYearsButtonLabel: {\n    type: String,\n    required: true,\n  },\n})\n\nconst focusTrapOptions = {\n  immediate: true,\n  clickOutsideDeactivates: true,\n  initialFocus: '.usa-date-picker__calendar__year--focused',\n  fallbackFocus: '.usa-date-picker__calendar__date-picker',\n}\nconst yearButtonRefs = ref([])\n\nconst activeDateObject = shallowRef(parseIsoDate(props.activeDate))\n\nwatch(\n  toRef(props, 'activeDate'),\n  newActiveDate => (activeDateObject.value = parseIsoDate(newActiveDate)),\n)\n\nconst activeYear = computed({\n  get() {\n    return getYear(activeDateObject.value)\n  },\n  set(newYear) {\n    activeDateObject.value = setYear(activeDateObject.value, newYear)\n  },\n})\n\nconst {\n  years,\n  visibleYearRange,\n  firstAvailableVisibleYear,\n  lastAvailableVisibleYear,\n  isYearAvailable,\n  hasPastYear,\n  hasFutureYear,\n  findRowIndexByYear,\n  findButtonIndexByYear,\n} = useYearPicker({\n  minDate: toRef(props, 'minDate'),\n  maxDate: toRef(props, 'maxDate'),\n  activeYear,\n})\n\nwatch(\n  firstAvailableVisibleYear,\n  () => emit('update:activeYearStart', firstAvailableVisibleYear.value),\n  {\n    immediate: true,\n  },\n)\nwatch(\n  lastAvailableVisibleYear,\n  () => emit('update:activeYearEnd', lastAvailableVisibleYear.value),\n  {\n    immediate: true,\n  },\n)\n\nconst currentSelectedYear = computed({\n  get() {\n    return props.selectedYear\n  },\n  set(newSelectedYear) {\n    emit('update:selectedYear', newSelectedYear)\n  },\n})\n\nconst highlightedYear = ref(activeYear.value)\nconst highlightedRowIndex = ref(null)\nconst highlightedButtonIndex = ref(null)\n\nconst tabIndex = (year, rowIndex, buttonIndex) => {\n  if (\n    year === highlightedYear.value ||\n    year === currentSelectedYear.value ||\n    (highlightedRowIndex.value === rowIndex &&\n      highlightedButtonIndex.value === buttonIndex)\n  ) {\n    return 0\n  }\n\n  return -1\n}\n\nconst getButtonByYear = year =>\n  yearButtonRefs.value.find(\n    button => parseInt(button.dataset.value, 10) === year,\n  )\n\nconst setButtonFocusByYear = year => {\n  const foundButton = getButtonByYear(year)\n\n  if (foundButton) {\n    foundButton.focus()\n  }\n}\n\nconst toPreviousYears = () => {\n  activeYear.value = activeYear.value - YEAR_GROUP\n}\n\nconst toNextYears = () => {\n  activeYear.value = activeYear.value + YEAR_GROUP\n}\n\nconst handleClickOnYear = year => {\n  currentSelectedYear.value = year\n  emit('update:selectorMode', 'day')\n}\n\nconst handleHoverOnYear = year => {\n  highlightedYear.value = year\n  setButtonFocusByYear(highlightedYear.value)\n}\n\nconst handlePreviousYear = year => {\n  if (!year) {\n    return\n  }\n\n  if (!visibleYearRange.value.includes(year)) {\n    toPreviousYears()\n  }\n\n  nextTick(() => {\n    highlightedYear.value = year\n    setButtonFocusByYear(year)\n  })\n}\n\nconst handleNextYear = year => {\n  if (!year) {\n    return\n  }\n\n  if (!visibleYearRange.value.includes(year)) {\n    toNextYears()\n  }\n\n  nextTick(() => {\n    highlightedYear.value = year\n    setButtonFocusByYear(year)\n  })\n}\n\nwatch(\n  highlightedYear,\n  newHighlightedYear => {\n    if (\n      visibleYearRange.value.includes(newHighlightedYear) &&\n      isYearAvailable(newHighlightedYear)\n    ) {\n      const newRowIndex = findRowIndexByYear(years, newHighlightedYear)\n\n      const newButtonIndex = findButtonIndexByYear(\n        years,\n        newRowIndex,\n        newHighlightedYear,\n      )\n\n      highlightedRowIndex.value = newRowIndex\n      highlightedButtonIndex.value = newButtonIndex\n    }\n  },\n  { immediate: true },\n)\n\nwatch(years, (newVisibleYears, oldVisibleYear) => {\n  if (\n    newVisibleYears[highlightedRowIndex.value][highlightedButtonIndex.value]\n      .disabled\n  ) {\n    const wantedYear =\n      newVisibleYears[0][0].year < oldVisibleYear[0][0].year\n        ? firstAvailableVisibleYear.value\n        : lastAvailableVisibleYear.value\n\n    const newRowIndex = findRowIndexByYear(years, wantedYear)\n\n    if (newRowIndex === -1) {\n      return\n    }\n\n    const newButtonIndex = findButtonIndexByYear(years, newRowIndex, wantedYear)\n\n    highlightedYear.value = newVisibleYears[newRowIndex][newButtonIndex].year\n  }\n})\n\nonBeforeUnmount(() => {\n  emit('update:activeYearStart', '')\n  emit('update:activeYearEnd', '')\n})\n</script>\n\n<template>\n  <UseFocusTrap :options=\"focusTrapOptions\">\n    <div tabindex=\"-1\" class=\"usa-date-picker__calendar__year-picker\">\n      <table class=\"usa-date-picker__calendar__table\">\n        <tbody>\n          <tr>\n            <td>\n              <button\n                type=\"button\"\n                class=\"usa-date-picker__calendar__previous-year-chunk\"\n                :aria-label=\"previousYearsButtonLabel\"\n                :disabled=\"!hasPastYear\"\n                @click=\"toPreviousYears\"\n                >&nbsp;</button\n              >\n            </td>\n\n            <td colspan=\"3\">\n              <table\n                class=\"usa-date-picker__calendar__table\"\n                role=\"presentation\"\n              >\n                <tbody>\n                  <tr\n                    v-for=\"(row, rowIndex) in years\"\n                    :key=\"`${rowIndex}-${row.map(({ year }) => year).join('-')}`\"\n                  >\n                    <td v-for=\"(item, buttonIndex) in row\" :key=\"item.id\">\n                      <button\n                        ref=\"yearButtonRefs\"\n                        type=\"button\"\n                        :disabled=\"item.disabled\"\n                        :tabindex=\"tabIndex(item.year, rowIndex, buttonIndex)\"\n                        class=\"usa-date-picker__calendar__year\"\n                        :class=\"{\n                          'usa-date-picker__calendar__year--selected':\n                            currentSelectedYear === item.year,\n                          'usa-date-picker__calendar__year--focused':\n                            highlightedRowIndex === rowIndex &&\n                            highlightedButtonIndex === buttonIndex,\n                        }\"\n                        :data-value=\"item.year\"\n                        :aria-selected=\"currentSelectedYear === item.year\"\n                        @click=\"handleClickOnYear(item.year)\"\n                        @mouseover=\"handleHoverOnYear(item.year)\"\n                        @keydown.prevent.up=\"handlePreviousYear(item.up)\"\n                        @keydown.prevent.down=\"handleNextYear(item.down)\"\n                        @keydown.prevent.left=\"handlePreviousYear(item.left)\"\n                        @keydown.prevent.right=\"handleNextYear(item.right)\"\n                        @keydown.prevent.home=\"handlePreviousYear(item.home)\"\n                        @keydown.prevent.end=\"handleNextYear(item.end)\"\n                        @keydown.prevent.page-up=\"\n                          handlePreviousYear(item.pageUp)\n                        \"\n                        @keydown.prevent.page-down=\"\n                          handleNextYear(item.pageDown)\n                        \"\n                        >{{ item.year }}</button\n                      >\n                    </td>\n                  </tr>\n                </tbody>\n              </table>\n            </td>\n\n            <td>\n              <button\n                type=\"button\"\n                class=\"usa-date-picker__calendar__next-year-chunk\"\n                :aria-label=\"nextYearsButtonLabel\"\n                :disabled=\"!hasFutureYear\"\n                @click=\"toNextYears\"\n                >&nbsp;</button\n              >\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </UseFocusTrap>\n</template>\n","<script setup>\nimport { ref, computed, watch, shallowRef, onMounted } from 'vue'\nimport {\n  getYear,\n  formatIsoDate,\n  isDateAfter,\n  isDateInRange,\n  parseIsoDate,\n  setYear,\n  setMonth,\n} from '@/utils/dates.js'\nimport UsaDatePickerCalendarDay from '@/components/UsaDatePickerCalendarDay'\nimport UsaDatePickerCalendarMonth from '@/components/UsaDatePickerCalendarMonth'\nimport UsaDatePickerCalendarYear from '@/components/UsaDatePickerCalendarYear'\n\nconst emit = defineEmits([\n  'update:open',\n  'update:selectedDate',\n  'update:activeDate',\n  'update:selectorMode',\n  'update:highlightedDate',\n  'update:activeYearStart',\n  'update:activeYearEnd',\n  'update:isPristine',\n])\n\nconst props = defineProps({\n  open: {\n    type: Boolean,\n    default: false,\n  },\n  selectedDate: {\n    type: String,\n    default: '',\n  },\n  activeDate: {\n    type: String,\n    required: true,\n  },\n  highlightedDate: {\n    type: String,\n    default: '',\n  },\n  minDate: {\n    type: String,\n    required: true,\n  },\n  maxDate: {\n    type: String,\n    required: true,\n  },\n  selectorMode: {\n    type: String,\n    required: true,\n  },\n  monthLabels: {\n    type: Array,\n    required: true,\n  },\n  dayOfWeekLabels: {\n    type: Array,\n    required: true,\n  },\n  dayOfWeekAbbreviationLabels: {\n    type: Array,\n    required: true,\n  },\n  previousYearButtonLabel: {\n    type: String,\n    required: true,\n  },\n  nextYearButtonLabel: {\n    type: String,\n    required: true,\n  },\n  previousMonthButtonLabel: {\n    type: String,\n    required: true,\n  },\n  nextMonthButtonLabel: {\n    type: String,\n    required: true,\n  },\n  monthSelectionButtonLabel: {\n    type: String,\n    required: true,\n  },\n  yearSelectionButtonLabel: {\n    type: String,\n    required: true,\n  },\n  previousYearsButtonLabel: {\n    type: String,\n    required: true,\n  },\n  nextYearsButtonLabel: {\n    type: String,\n    required: true,\n  },\n})\n\nconst calendarPickerRef = ref(null)\n\nconst open = computed({\n  get() {\n    return props.open\n  },\n  set(isOpen) {\n    emit('update:open', isOpen)\n  },\n})\n\nconst selectorMode = computed({\n  get() {\n    return props.selectorMode\n  },\n  set(newMode) {\n    emit('update:selectorMode', newMode)\n  },\n})\n\nconst activeDate = computed({\n  get() {\n    return props.activeDate\n  },\n  set(newActiveDate) {\n    emit('update:activeDate', newActiveDate)\n  },\n})\n\nconst activeDateObject = shallowRef(parseIsoDate(activeDate.value))\n\nwatch(activeDate, newActiveDate => {\n  activeDateObject.value = parseIsoDate(newActiveDate)\n})\n\nconst activeYear = computed({\n  get() {\n    return getYear(activeDateObject.value)\n  },\n  set(newYear) {\n    const newDate = setYear(activeDateObject.value, newYear)\n\n    const minimumDate = parseIsoDate(props.minDate)\n    const maximumDate = parseIsoDate(props.maxDate)\n\n    if (isDateInRange(newDate, minimumDate, maximumDate)) {\n      activeDate.value = formatIsoDate(newDate)\n    } else {\n      const isAfter = isDateAfter(activeDateObject.value, newDate)\n\n      activeDate.value = isAfter\n        ? formatIsoDate(minimumDate)\n        : formatIsoDate(maximumDate)\n    }\n  },\n})\n\nconst highlightedDate = computed({\n  get() {\n    return props.highlightedDate\n  },\n  set(newHighlightedDate) {\n    emit('update:highlightedDate', newHighlightedDate)\n  },\n})\n\nconst selectMonth = newMonth => {\n  activeDate.value = formatIsoDate(\n    setMonth(parseIsoDate(highlightedDate.value), newMonth),\n  )\n}\n\nconst selectedDate = computed({\n  get() {\n    return props.selectedDate\n  },\n  set(newDate) {\n    emit('update:selectedDate', newDate)\n  },\n})\n\nwatch(selectedDate, newSelectedDate => {\n  if (!newSelectedDate) {\n    return\n  }\n  const newDate = parseIsoDate(newSelectedDate)\n  const minimumDate = parseIsoDate(props.minDate)\n  const maximumDate = parseIsoDate(props.maxDate)\n\n  if (isDateInRange(newDate, minimumDate, maximumDate)) {\n    const newFormattedDate = formatIsoDate(newDate)\n\n    activeDate.value = newFormattedDate\n    highlightedDate.value = newFormattedDate\n  }\n})\n\nonMounted(() => {\n  emit('update:activeDate', activeDate.value)\n})\n</script>\n\n<template>\n  <div\n    ref=\"calendarPickerRef\"\n    class=\"usa-date-picker__calendar\"\n    role=\"application\"\n    :data-value=\"highlightedDate\"\n    :hidden=\"!open\"\n  >\n    <template v-if=\"open\">\n      <UsaDatePickerCalendarDay\n        v-if=\"selectorMode === 'day'\"\n        v-model:selected-date=\"selectedDate\"\n        v-model:active-date=\"activeDate\"\n        :min-date=\"minDate\"\n        :max-date=\"maxDate\"\n        :month-labels=\"monthLabels\"\n        :day-of-week-labels=\"dayOfWeekLabels\"\n        :day-of-week-abbreviation-labels=\"dayOfWeekAbbreviationLabels\"\n        :previous-year-button-label=\"previousYearButtonLabel\"\n        :next-year-button-label=\"nextYearButtonLabel\"\n        :previous-month-button-label=\"previousMonthButtonLabel\"\n        :next-month-button-label=\"nextMonthButtonLabel\"\n        :month-selection-button-label=\"monthSelectionButtonLabel\"\n        :year-selection-button-label=\"yearSelectionButtonLabel\"\n        :previous-years-button-label=\"previousYearsButtonLabel\"\n        :next-years-button-label=\"nextYearsButtonLabel\"\n        @update:open=\"isOpen => (open = isOpen)\"\n        @update:selector-mode=\"newMode => (selectorMode = newMode)\"\n        @update:highlighted-date=\"newDate => (highlightedDate = newDate)\"\n        @update:is-pristine=\"\n          currentlyPristine => $emit('update:isPristine', currentlyPristine)\n        \"\n      ></UsaDatePickerCalendarDay>\n      <UsaDatePickerCalendarMonth\n        v-if=\"selectorMode === 'month'\"\n        :active-date=\"activeDate\"\n        :month-labels=\"monthLabels\"\n        :min-date=\"minDate\"\n        :max-date=\"maxDate\"\n        @update:selector-mode=\"newMode => (selectorMode = newMode)\"\n        @update:active-month=\"selectMonth\"\n      ></UsaDatePickerCalendarMonth>\n      <UsaDatePickerCalendarYear\n        v-if=\"selectorMode === 'year'\"\n        v-model:selected-year=\"activeYear\"\n        :active-date=\"activeDate\"\n        :min-date=\"minDate\"\n        :max-date=\"maxDate\"\n        :previous-years-button-label=\"previousYearsButtonLabel\"\n        :next-years-button-label=\"nextYearsButtonLabel\"\n        @update:selector-mode=\"newMode => (selectorMode = newMode)\"\n        @update:active-year-start=\"\n          newStartYear => $emit('update:activeYearStart', newStartYear)\n        \"\n        @update:active-year-end=\"\n          newEndYear => $emit('update:activeYearEnd', newEndYear)\n        \"\n      ></UsaDatePickerCalendarYear>\n    </template>\n  </div>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport {\n  ref,\n  computed,\n  useSlots,\n  shallowRef,\n  watch,\n  provide,\n  inject,\n  toRef,\n  onMounted,\n} from 'vue'\nimport { onKeyStroke, onClickOutside } from '@vueuse/core'\nimport { nextId } from '@/utils/unique-id.js'\n\nimport {\n  MIN_DATE,\n  MAX_DATE,\n  DAY_OF_WEEK_LABELS,\n  DAY_OF_WEEK_ABBREVIATION_LABELS,\n  MONTH_LABELS,\n} from '@/utils/constants.js'\n\nimport {\n  parseIsoDate,\n  parseUsaDate,\n  formatIsoDate,\n  formatUsaDate,\n  getMonthIndex,\n  getYear,\n  isValidDate,\n  isDateInRange,\n  isDateAfter,\n  today,\n  isValidIsoDate,\n  isValidUsaDate,\n} from '@/utils/dates.js'\n\nimport UsaFormGroup from '@/components/UsaFormGroup'\nimport UsaLabel from '@/components/UsaLabel'\nimport UsaDatePickerCalendar from '@/components/UsaDatePickerCalendar'\n\nconst slots = useSlots()\n\nconst isDateRange = inject('isDateRange', false)\nconst dateRangeStart = inject('dateRangeStart', '')\nconst dateRangeEnd = inject('dateRangeEnd', '')\nconst updateDateRangeStart = inject('updateDateRangeStart', null)\nconst updateDateRangeEnd = inject('updateDateRangeEnd', null)\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  minDate: {\n    type: String,\n    default: MIN_DATE,\n  },\n  maxDate: {\n    type: String,\n    default: MAX_DATE,\n  },\n  modelValue: {\n    type: String,\n    default: '',\n  },\n  rangeType: {\n    type: String,\n    default: '',\n    validator(rangeType) {\n      const isValidRangeType =\n        rangeType === '' || rangeType === 'start' || rangeType === 'end'\n\n      if (!isValidRangeType) {\n        console.warn(\n          `'${rangeType}' is an invalid range type. Range must be empty, 'start', or 'end'.`,\n        )\n      }\n\n      return isValidRangeType\n    },\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  readonly: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  dayOfWeekLabels: {\n    type: Array,\n    default: () => DAY_OF_WEEK_LABELS,\n    validator(dayLabels) {\n      const totalLabels = dayLabels.length\n      const isValidDayLabelsLength = dayLabels.length === 7\n\n      if (!isValidDayLabelsLength) {\n        console.warn(\n          `Missing labels, there must be a label for each day of the week. 7 total are needed but only ${totalLabels} were given.`,\n        )\n      }\n\n      return isValidDayLabelsLength\n    },\n  },\n  dayOfWeekAbbreviationLabels: {\n    type: Array,\n    default: () => DAY_OF_WEEK_ABBREVIATION_LABELS,\n    validator(dayLabels) {\n      const totalLabels = dayLabels.length\n      const isValidDayLabelsLength = dayLabels.length === 7\n\n      if (!isValidDayLabelsLength) {\n        console.warn(\n          `Missing labels, there must be a label for each day of the week. 7 total are needed but only ${totalLabels} were given.`,\n        )\n      }\n\n      return isValidDayLabelsLength\n    },\n  },\n  monthLabels: {\n    type: Array,\n    default: () => MONTH_LABELS,\n    validator(monthLabels) {\n      const totalLabels = monthLabels.length\n      const isValidMonthLength = monthLabels.length === 12\n\n      if (!isValidMonthLength) {\n        console.warn(\n          `Missing labels, there must be a label for each month of the year. 12 total are needed but only ${totalLabels} were given.`,\n        )\n      }\n\n      return isValidMonthLength\n    },\n  },\n  toggleButtonAriaLabel: {\n    type: String,\n    default: 'Toggle calendar',\n  },\n  previousYearButtonLabel: {\n    type: String,\n    default: 'Navigate back one year',\n  },\n  nextYearButtonLabel: {\n    type: String,\n    default: 'Navigate forward one year',\n  },\n  previousMonthButtonLabel: {\n    type: String,\n    default: 'Navigate back one month',\n  },\n  nextMonthButtonLabel: {\n    type: String,\n    default: 'Navigate forward one month',\n  },\n  yearSelectionButtonLabel: {\n    type: String,\n    default: '%s. Select year',\n  },\n  monthSelectionButtonLabel: {\n    type: String,\n    default: '%s. Select month',\n  },\n  previousYearsButtonLabel: {\n    type: String,\n    default: 'Navigate back 12 years',\n  },\n  nextYearsButtonLabel: {\n    type: String,\n    default: 'Navigate forward 12 years',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        formGroup: [],\n        component: [],\n        label: [],\n        input: [],\n      }\n    },\n  },\n})\n\nconst minDate = computed(() => {\n  if (isDateRange.value && props.rangeType === 'end' && dateRangeStart.value) {\n    return dateRangeStart.value\n  }\n\n  return props.minDate\n})\n\nconst maxDate = computed(() => {\n  if (isDateRange.value && props.rangeType === 'start' && dateRangeEnd.value) {\n    return dateRangeEnd.value\n  }\n\n  return props.maxDate\n})\n\nconst selectedDate = computed({\n  get() {\n    return props.modelValue\n  },\n  set(newDate) {\n    emit('update:modelValue', newDate)\n\n    if (!isDateRange.value) {\n      return\n    }\n\n    if (props.rangeType === 'start' && updateDateRangeStart) {\n      updateDateRangeStart(newDate)\n    } else if (props.rangeType === 'end' && updateDateRangeEnd) {\n      updateDateRangeEnd(newDate)\n    }\n  },\n})\n\nconst initialDate = () => {\n  if (\n    selectedDate.value &&\n    isDateInRange(\n      parseIsoDate(selectedDate.value),\n      parseIsoDate(minDate.value),\n      parseIsoDate(maxDate.value),\n    )\n  ) {\n    return selectedDate.value\n  }\n\n  if (\n    isDateRange.value &&\n    props.rangeType === 'end' &&\n    dateRangeStart.value &&\n    !dateRangeEnd.value\n  ) {\n    return dateRangeStart.value\n  }\n\n  if (\n    isDateRange.value &&\n    props.rangeType === 'start' &&\n    dateRangeEnd.value &&\n    !dateRangeStart.value\n  ) {\n    return dateRangeEnd.value\n  }\n\n  if (\n    isDateInRange(\n      today(),\n      parseIsoDate(minDate.value),\n      parseIsoDate(maxDate.value),\n    )\n  ) {\n    return formatIsoDate(today())\n  }\n\n  return minDate.value\n}\n\nconst datePickerWrapperRef = ref(null)\n\nconst textInputValue = ref(\n  selectedDate.value ? formatUsaDate(parseIsoDate(selectedDate.value)) : '',\n)\n\nconst open = ref(false)\nconst isPristine = ref(true)\nconst selectorMode = ref('day')\nconst yearRangeStart = ref('')\nconst yearRangeStop = ref('')\nconst highlightedDate = ref('')\nconst activeDate = ref(initialDate())\nconst activeDateObject = shallowRef(parseIsoDate(activeDate.value))\n\nwatch(activeDate, newActiveDate => {\n  activeDateObject.value = parseIsoDate(newActiveDate)\n})\n\nconst activeMonthLabel = computed(() =>\n  activeDate.value\n    ? props.monthLabels[getMonthIndex(activeDateObject.value)]\n    : '',\n)\n\nconst activeYear = computed(() =>\n  activeDate.value ? getYear(activeDateObject.value) : '',\n)\n\nconst closeCalendar = () => {\n  open.value = false\n  selectorMode.value = 'day'\n}\n\nconst openCalendar = () => {\n  activeDate.value = initialDate()\n  open.value = true\n}\n\nconst toggleCalendar = () => {\n  if (open.value) {\n    closeCalendar()\n  } else {\n    openCalendar()\n  }\n}\n\nconst computedId = computed(() => props.id || nextId('usa-date-picker'))\nconst computedLabelId = computed(() => `${computedId.value}-label`)\nconst computedErrorMessageId = computed(\n  () => `${computedId.value}-error-message`,\n)\nconst computedHintId = computed(() => `${computedId.value}-hint`)\n\nconst ariaDescribedby = computed(() => {\n  const ids = []\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.length ? ids.join(' ') : null\n})\n\nconst classes = computed(() => [\n  { 'usa-date-picker--active': open.value },\n  {\n    'usa-date-range-picker__range-start':\n      isDateRange.value && props.rangeType === 'start',\n  },\n  {\n    'usa-date-range-picker__range-end':\n      isDateRange.value && props.rangeType === 'end',\n  },\n  ...(props.customClasses?.component || []),\n])\n\nonKeyStroke('Escape', () => {\n  if (open.value) {\n    closeCalendar()\n  }\n})\n\nonClickOutside(datePickerWrapperRef, () => {\n  if (open.value) {\n    closeCalendar()\n  }\n})\n\nwatch(textInputValue, newInputValue => {\n  if (newInputValue === '') {\n    selectedDate.value = ''\n    return\n  }\n\n  const dateObject = parseUsaDate(newInputValue)\n  const minimumDate = parseIsoDate(minDate.value)\n  const maximumDate = parseIsoDate(maxDate.value)\n  const inputValueIsoDate = formatIsoDate(dateObject)\n\n  if (\n    isValidIsoDate(inputValueIsoDate) &&\n    isValidUsaDate(newInputValue) &&\n    isValidDate(dateObject)\n  ) {\n    if (isDateInRange(dateObject, minimumDate, maximumDate)) {\n      selectedDate.value = inputValueIsoDate\n      activeDate.value = selectedDate.value\n      highlightedDate.value = activeDate.value\n      return\n    }\n\n    const isAfter = isDateAfter(activeDateObject.value, dateObject)\n\n    if (isAfter) {\n      activeDate.value = formatIsoDate(minimumDate)\n      highlightedDate.value = activeDate.value\n    } else {\n      activeDate.value = formatIsoDate(maximumDate)\n      highlightedDate.value = activeDate.value\n    }\n  }\n})\n\nwatch(selectedDate, newSelectedDate => {\n  if (textInputValue.value === formatUsaDate(parseIsoDate(newSelectedDate))) {\n    return\n  }\n\n  textInputValue.value = newSelectedDate\n    ? formatUsaDate(parseIsoDate(newSelectedDate))\n    : ''\n})\n\nprovide(\n  'inputHighlightedDate',\n  computed(() => highlightedDate.value),\n)\n\nprovide('rangeType', toRef(props, 'rangeType'))\n\nonMounted(() => {\n  if (\n    isDateRange.value &&\n    props.rangeType === 'start' &&\n    updateDateRangeStart\n  ) {\n    updateDateRangeStart(selectedDate.value)\n  } else if (\n    isDateRange.value &&\n    props.rangeType === 'end' &&\n    updateDateRangeEnd\n  ) {\n    updateDateRangeEnd(selectedDate.value)\n  }\n})\n</script>\n\n<template>\n  <UsaFormGroup\n    :group=\"!!$slots.hint || (error && !!$slots['error-message'])\"\n    :error=\"error\"\n    :class=\"props.customClasses?.formGroup\"\n  >\n    <UsaLabel\n      v-if=\"label || $slots.label\"\n      :id=\"computedLabelId\"\n      :for=\"computedId\"\n      :required=\"required\"\n      :error=\"error\"\n      :class=\"customClasses?.label\"\n      ><slot name=\"label\">{{ label }}</slot></UsaLabel\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n    <div class=\"usa-date-picker usa-date-picker--initialized\" :class=\"classes\">\n      <div ref=\"datePickerWrapperRef\" class=\"usa-date-picker__wrapper\">\n        <input\n          v-bind=\"$attrs\"\n          :id=\"computedId\"\n          v-model=\"textInputValue\"\n          :required=\"required\"\n          :disabled=\"disabled\"\n          :readonly=\"readonly\"\n          :aria-labelledby=\"label || $slots.label ? computedLabelId : null\"\n          :aria-describedby=\"ariaDescribedby\"\n          :class=\"props.customClasses?.input\"\n          class=\"usa-input usa-date-picker__external-input\"\n          type=\"text\"\n        />\n        <button\n          type=\"button\"\n          class=\"usa-date-picker__button\"\n          aria-haspopup=\"true\"\n          :aria-label=\"toggleButtonAriaLabel\"\n          :disabled=\"disabled\"\n          @click=\"toggleCalendar\"\n        ></button>\n\n        <UsaDatePickerCalendar\n          v-model:selected-date=\"selectedDate\"\n          v-model:selector-mode=\"selectorMode\"\n          v-model:open=\"open\"\n          v-model:active-date=\"activeDate\"\n          v-model:highlighted-date=\"highlightedDate\"\n          :style=\"`top: ${datePickerWrapperRef?.offsetHeight}px`\"\n          :min-date=\"minDate\"\n          :max-date=\"maxDate\"\n          :month-labels=\"monthLabels\"\n          :day-of-week-labels=\"dayOfWeekLabels\"\n          :day-of-week-abbreviation-labels=\"dayOfWeekAbbreviationLabels\"\n          :previous-year-button-label=\"previousYearButtonLabel\"\n          :next-year-button-label=\"nextYearButtonLabel\"\n          :previous-month-button-label=\"previousMonthButtonLabel\"\n          :next-month-button-label=\"nextMonthButtonLabel\"\n          :month-selection-button-label=\"monthSelectionButtonLabel\"\n          :year-selection-button-label=\"yearSelectionButtonLabel\"\n          :previous-years-button-label=\"previousYearsButtonLabel\"\n          :next-years-button-label=\"nextYearsButtonLabel\"\n          @update:is-pristine=\"\n            currentlyPristine => (isPristine = currentlyPristine)\n          \"\n          @update:active-year-start=\"\n            newStartYear => (yearRangeStart = newStartYear)\n          \"\n          @update:active-year-end=\"newEndYear => (yearRangeStop = newEndYear)\"\n        ></UsaDatePickerCalendar>\n\n        <div\n          class=\"usa-date-picker__status usa-sr-only\"\n          role=\"status\"\n          aria-live=\"polite\"\n        >\n          <slot\n            name=\"status\"\n            :open=\"open\"\n            :is-pristine=\"isPristine\"\n            :selector-mode=\"selectorMode\"\n            :selected-date=\"selectedDate\"\n            :highlighted-date=\"highlightedDate\"\n            :active-month-label=\"activeMonthLabel\"\n            :active-year=\"activeYear\"\n            :year-range-start=\"yearRangeStart\"\n            :year-range-stop=\"yearRangeStop\"\n          >\n            <template v-if=\"open\">\n              <template v-if=\"selectorMode === 'day'\">\n                <template\n                  v-if=\"selectedDate && selectedDate === highlightedDate\"\n                  >Selected date.</template\n                >\n                <template v-if=\"isPristine\">\n                  You can navigate by day using left and right arrows. Weeks by\n                  using up and down arrows. Months by using page up and page\n                  down keys. Years by using shift plus page up and shift plus\n                  page down. Home and end keys navigate to the beginning and end\n                  of a week.\n                </template>\n                <template v-else>\n                  {{ activeMonthLabel }} {{ activeYear }}\n                </template>\n              </template>\n              <template v-else-if=\"selectorMode === 'month'\"\n                >Select a month.</template\n              >\n              <template v-else-if=\"selectorMode === 'year'\"\n                >Showing years {{ yearRangeStart }} to {{ yearRangeStop }}.\n                Select a year.</template\n              >\n            </template>\n          </slot>\n        </div>\n      </div>\n    </div>\n  </UsaFormGroup>\n</template>\n","<script setup>\nimport { ref, provide } from 'vue'\n\nconst rangeStart = ref('')\nconst rangeEnd = ref('')\n\nconst updateDateRangeStart = newRangeStart => {\n  rangeStart.value = newRangeStart\n}\nconst updateDateRangeEnd = newRangeEnd => {\n  rangeEnd.value = newRangeEnd\n}\n\nprovide('isDateRange', ref(true))\nprovide('dateRangeStart', rangeStart)\nprovide('dateRangeEnd', rangeEnd)\nprovide('updateDateRangeStart', updateDateRangeStart)\nprovide('updateDateRangeEnd', updateDateRangeEnd)\n</script>\n\n<template>\n  <div class=\"usa-date-range-picker\">\n    <slot></slot>\n  </div>\n</template>\n","import { ref, computed, readonly } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport { escapeRegExp } from '@/utils/common.js'\n\nexport function useFileInput(\n  _id,\n  _loadedFiles,\n  _acceptedFileFormats,\n  _multiple,\n  _disabled,\n  emit,\n) {\n  const id = ref(_id)\n  const allowMultiple = ref(_multiple)\n  const isDisabled = ref(_disabled)\n  const loadedFiles = ref(_loadedFiles)\n  const acceptedFileFormats = ref(_acceptedFileFormats)\n\n  const spacerGif =\n    'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n\n  const computedId = computed(() => id.value || nextId('usa-file-input'))\n  const computedErrorMessageId = computed(\n    () => `${computedId.value}-error-message`,\n  )\n  const computedHintId = computed(() => `${computedId.value}-hint`)\n\n  const validFileFormats = computed(() => {\n    const formats = acceptedFileFormats.value\n      .split(',')\n      .map(fileType => fileType.trim().toLowerCase())\n\n    const validFileFormats = {\n      types: [],\n      extensions: [],\n    }\n\n    formats.forEach(format => {\n      if (format.includes('/') && !validFileFormats.types.includes(format)) {\n        if (format.endsWith('/*')) {\n          validFileFormats.types.push(format.substring(0, format.length - 1))\n        } else {\n          validFileFormats.types.push(format)\n        }\n      } else if (\n        format.includes('.') &&\n        !validFileFormats.extensions.includes(format)\n      ) {\n        validFileFormats.extensions.push(format)\n      }\n    })\n\n    return validFileFormats\n  })\n\n  const getFileExtension = filename => {\n    const extensionPattern = /(?:.+)\\.(.+)$/\n    const match = filename.match(extensionPattern)\n\n    return `.${match?.[1]?.toLowerCase()}`\n  }\n\n  const getFileIconClass = extension => {\n    switch (extension) {\n      case '.pdf':\n        return 'usa-file-input__preview-image--pdf'\n\n      case '.doc':\n      case '.docx':\n      case '.pages':\n        return 'usa-file-input__preview-image--word'\n\n      case '.xls':\n      case '.xlsx':\n      case '.numbers':\n        return 'usa-file-input__preview-image--excel'\n\n      case '.mov':\n      case '.mp4':\n        return 'usa-file-input__preview-image--video'\n\n      default:\n        return 'usa-file-input__preview-image--generic'\n    }\n  }\n\n  const isImage = fileType => {\n    const pattern = new RegExp(/^image\\//gi)\n    return pattern.test(fileType)\n  }\n\n  const hasFiles = computed(() => loadedFiles.value?.length > 0)\n\n  const hasInvalidFiles = computed(() => {\n    if (!acceptedFileFormats.value || !hasFiles.value) {\n      return false\n    }\n\n    const validTypes = validFileFormats.value.types\n    const validExtensions = validFileFormats.value.extensions\n\n    const someValidFiles = loadedFiles.value.every(file => {\n      const someValidTypes = validTypes.some(type => {\n        const typePattern = new RegExp(escapeRegExp(type), 'gi')\n\n        return typePattern.test(file.type)\n      })\n\n      const someValidExtensions = validExtensions.some(extension => {\n        const extensionPattern = new RegExp(escapeRegExp(extension), 'gi')\n\n        return extensionPattern.test(file.extension)\n      })\n\n      return someValidTypes || someValidExtensions\n    })\n\n    return !someValidFiles\n  })\n\n  const loadedFileNames = computed(() =>\n    loadedFiles.value.map(file => file.name).join(', '),\n  )\n\n  const generatePreviews = (event, index) => {\n    const file = loadedFiles.value[index]\n\n    if (isImage(file?.type) && event?.target?.result) {\n      file.iconClasses = null\n      file.src = event.target.result\n    } else {\n      file.iconClasses = [getFileIconClass(file.extension)]\n    }\n  }\n\n  async function loadFiles(fileList) {\n    if (!fileList?.length || isDisabled.value) {\n      loadedFiles.value = []\n\n      return\n    }\n\n    let files = []\n\n    // If multiple files aren't allow, only process the first.\n    if (allowMultiple.value) {\n      for (let i = 0; i < fileList.length; i++) {\n        files.push(fileList.item(i))\n      }\n    } else {\n      files.push(fileList.item(0))\n    }\n\n    emit('filesLoaded', files)\n\n    loadedFiles.value = files.reduce((acc, file, index) => {\n      const fileExtension = getFileExtension(file.name)\n\n      const metadata = {\n        name: file.name,\n        type: file.type,\n        extension: fileExtension,\n        src: spacerGif,\n        iconClasses: [getFileIconClass(fileExtension), 'is-loading'],\n      }\n\n      const reader = new FileReader()\n\n      reader.addEventListener(\n        'loadend',\n        event => generatePreviews(event, index),\n        false,\n      )\n\n      reader.readAsDataURL(file)\n\n      acc.push(metadata)\n\n      return acc\n    }, [])\n  }\n\n  return {\n    computedErrorMessageId,\n    computedHintId,\n    computedId,\n    hasFiles,\n    hasInvalidFiles,\n    isDisabled,\n    loadFiles,\n    loadedFileNames,\n    loadedFiles: readonly(loadedFiles),\n  }\n}\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, ref, toRef, useSlots, watch } from 'vue'\nimport { useFileInput } from '@/composables/useFileInput.js'\nimport UsaFormGroup from '@/components/UsaFormGroup'\nimport UsaLabel from '@/components/UsaLabel'\n\nconst slots = useSlots()\nconst emit = defineEmits(['filesLoaded'])\n\nconst props = defineProps({\n  accept: {\n    type: String,\n    default: '',\n  },\n  multiple: {\n    type: Boolean,\n    default: false,\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        formGroup: [],\n        component: [],\n        label: [],\n        input: [],\n      }\n    },\n  },\n})\n\nconst fileInputRef = ref(null)\nconst isOverDropzone = ref(false)\n\nconst {\n  computedErrorMessageId,\n  computedHintId,\n  computedId,\n  hasFiles,\n  hasInvalidFiles,\n  isDisabled,\n  loadFiles,\n  loadedFileNames,\n  loadedFiles,\n} = useFileInput(\n  toRef(props, 'id'),\n  ref([]),\n  toRef(props, 'accept'),\n  toRef(props, 'multiple'),\n  toRef(props, 'disabled'),\n  emit,\n)\n\nwatch(hasInvalidFiles, invalid => {\n  if (invalid) {\n    fileInputRef.value.value = ''\n  }\n})\n\nconst ariaDescribedby = computed(() => {\n  const ids = []\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.length ? ids.join(' ') : null\n})\n\nconst classes = computed(() => [\n  {\n    'usa-file-input--disabled': isDisabled.value,\n    'has-invalid-file': hasInvalidFiles.value,\n  },\n  ...(props.customClasses?.component || []),\n])\n\nconst dropZoneClasses = computed(() => [\n  { 'usa-file-input--drag': isOverDropzone.value },\n])\n\n// TODO: Support custom text for other languages.\nconst ariaLabel = computed(() => {\n  const fileLabel = props.multiple ? 'files' : 'file'\n\n  if (!hasFiles.value) {\n    return `Drag ${fileLabel} here or choose from folder`\n  }\n\n  return `Change ${fileLabel}`\n})\n// TODO: Debounce screen reader only text updates.\n</script>\n\n<template>\n  <UsaFormGroup\n    :group=\"!!$slots.hint || (error && !!$slots['error-message'])\"\n    :error=\"error\"\n    :class=\"props.customClasses?.formGroup\"\n  >\n    <UsaLabel\n      v-if=\"label || $slots.label\"\n      :for=\"computedId\"\n      :required=\"required\"\n      :error=\"error\"\n      :class=\"customClasses?.label\"\n      ><slot name=\"label\">{{ label }}</slot></UsaLabel\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n\n    <div\n      class=\"usa-file-input\"\n      :aria-disabled=\"isDisabled || null\"\n      :class=\"classes\"\n    >\n      <div class=\"usa-sr-only\" aria-live=\"polite\">\n        <slot\n          name=\"status\"\n          :multiple=\"multiple\"\n          :loaded-files=\"loadedFiles\"\n          :has-invalid-files=\"hasInvalidFiles\"\n        >\n          <template v-if=\"!loadedFiles.length || hasInvalidFiles\">\n            <template v-if=\"multiple\">No files selected</template>\n            <template v-else>No file selected</template>\n          </template>\n          <template v-else-if=\"loadedFiles.length === 1 && !hasInvalidFiles\">\n            You have selected the file: {{ loadedFiles[0].name }}\n          </template>\n          <template v-else-if=\"loadedFiles.length > 1 && !hasInvalidFiles\">\n            test You have selected {{ loadedFiles.length }} files:\n            {{ loadedFileNames }}\n          </template>\n        </slot>\n      </div>\n      <div class=\"usa-file-input__target\" :class=\"dropZoneClasses\">\n        <div class=\"usa-file-input__box\"></div>\n        <div\n          v-show=\"hasInvalidFiles || !hasFiles\"\n          class=\"usa-file-input__instructions\"\n          aria-hidden=\"true\"\n          :hidden=\"!hasInvalidFiles && hasFiles\"\n          ><slot name=\"instructions\" :multiple=\"multiple\"\n            ><span class=\"usa-file-input__drag-text\"\n              >Drag file<template v-if=\"multiple\">s</template> here or </span\n            ><span class=\"usa-file-input__choose\"\n              >choose from folder</span\n            ></slot\n          >\n        </div>\n        <template v-if=\"!hasInvalidFiles && hasFiles\">\n          <div class=\"usa-file-input__preview-heading\">\n            <slot name=\"preview-heading\" :loaded-files=\"loadedFiles\">\n              <template v-if=\"loadedFiles.length === 1\">Selected file</template>\n              <template v-else\n                >{{ loadedFiles.length }} files selected</template\n              >\n              <span class=\"usa-file-input__choose\">Change file</span>\n            </slot>\n          </div>\n          <div\n            v-for=\"(file, index) in loadedFiles\"\n            :key=\"file.name + index\"\n            class=\"usa-file-input__preview\"\n            aria-hidden=\"true\"\n          >\n            <img\n              :src=\"file.src\"\n              alt=\"\"\n              class=\"usa-file-input__preview-image\"\n              :class=\"file?.iconClasses\"\n            />\n            {{ file.name }}\n          </div>\n        </template>\n\n        <div\n          v-if=\"hasInvalidFiles\"\n          class=\"usa-file-input__accepted-files-message\"\n          ><slot name=\"invalid-files-message\"\n            >This is not a valid file type.</slot\n          ></div\n        >\n        <input\n          v-bind=\"$attrs\"\n          :id=\"computedId\"\n          ref=\"fileInputRef\"\n          type=\"file\"\n          :required=\"required\"\n          :disabled=\"isDisabled\"\n          :accept=\"accept || null\"\n          :multiple=\"multiple || null\"\n          class=\"usa-file-input__input\"\n          :class=\"customClasses?.input\"\n          :aria-label=\"ariaLabel\"\n          :aria-describedby=\"ariaDescribedby\"\n          @change=\"loadFiles($event.target.files)\"\n          @dragenter=\"isOverDropzone = true\"\n          @dragover=\"isOverDropzone = true\"\n          @dragleave=\"isOverDropzone = false\"\n          @drop=\"isOverDropzone = false\"\n        />\n      </div>\n    </div>\n  </UsaFormGroup>\n</template>\n","<script setup>\nimport { computed, inject, provide } from 'vue'\nimport { GRID_NAMESPACE } from '@/utils/constants.js'\n\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\n\nconst props = defineProps({\n  variant: {\n    type: String,\n    default: 'medium',\n    validator(variant) {\n      const isValidVariant = ['big', 'medium', 'slim'].includes(variant)\n\n      if (!isValidVariant) {\n        console.warn(`'${variant}' is not a valid footer variant`)\n      }\n\n      return isValidVariant\n    },\n  },\n  jumpLinkText: {\n    type: String,\n    default: 'Return to top',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        container: [],\n      }\n    },\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-footer--big': props.variant === 'big',\n    'usa-footer--medium': props.variant === 'medium',\n    'usa-footer--slim': props.variant === 'slim',\n  },\n])\n\nconst containerClasses = computed(() =>\n  props.customClasses?.container?.length\n    ? props.customClasses.container\n    : [`${gridNamespace}container`],\n)\n\nprovide(\n  'footerVariant',\n  computed(() => props.variant),\n)\n</script>\n\n<template>\n  <footer class=\"usa-footer\" :class=\"classes\">\n    <div class=\"usa-footer__return-to-top\" :class=\"containerClasses\">\n      <slot name=\"jump-link\"\n        ><a href=\"#\">{{ jumpLinkText }}</a></slot\n      >\n    </div>\n    <slot></slot>\n  </footer>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, inject } from 'vue'\nimport { PREFIX_SEPARATOR, GRID_NAMESPACE } from '@/utils/constants.js'\n\nconst prefixSeparator = inject('vueUswds.prefixSeparator', PREFIX_SEPARATOR)\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\nconst footerVariant = inject('footerVariant', 'medium')\n\nconst props = defineProps({\n  heading: {\n    type: String,\n    default: '',\n  },\n  email: {\n    type: String,\n    default: '',\n  },\n  phone: {\n    type: String,\n    default: '',\n  },\n  phoneUrl: {\n    type: String,\n    default: '',\n  },\n})\n\nconst emailHref = computed(() => {\n  if (props.email) {\n    return `mailto:${props.email.trim().toLowerCase()}`\n  }\n\n  return ''\n})\n\nconst phoneHref = computed(() => {\n  if (props.phoneUrl) {\n    return `tel:${props.phoneUrl.trim()}`\n  }\n\n  return ''\n})\n</script>\n\n<template>\n  <p\n    v-if=\"heading && footerVariant !== 'slim'\"\n    class=\"usa-footer__contact-heading\"\n    >{{ heading }}</p\n  >\n  <address v-bind=\"$attrs\" class=\"usa-footer__address\">\n    <slot>\n      <div\n        v-if=\"footerVariant === 'slim'\"\n        :class=\"`${gridNamespace}row ${gridNamespace}gap`\"\n      >\n        <div\n          v-if=\"phoneHref\"\n          :class=\"`${gridNamespace}col-auto mobile-lg${prefixSeparator}${gridNamespace}col-12 desktop${prefixSeparator}${gridNamespace}col-auto`\"\n        >\n          <div class=\"usa-footer__contact-info\">\n            <a :href=\"phoneHref\">{{ phone }}</a>\n          </div>\n        </div>\n        <div\n          v-if=\"emailHref\"\n          :class=\"`${gridNamespace}col-auto mobile-lg${prefixSeparator}${gridNamespace}col-12 desktop${prefixSeparator}${gridNamespace}col-auto`\"\n        >\n          <div class=\"usa-footer__contact-info\">\n            <a :href=\"emailHref\">{{ email }}</a>\n          </div>\n        </div>\n      </div>\n      <div\n        v-else\n        :class=\"`usa-footer__contact-info ${gridNamespace}row ${gridNamespace}gap`\"\n      >\n        <div v-if=\"phoneHref\" :class=\"`${gridNamespace}col-auto`\">\n          <a :href=\"phoneHref\">{{ phone }}</a>\n        </div>\n        <div v-if=\"emailHref\" :class=\"`${gridNamespace}col-auto`\">\n          <a :href=\"emailHref\">{{ email }}</a>\n        </div>\n      </div>\n    </slot>\n  </address>\n</template>\n","<script setup>\nimport { computed, inject, toRef, onBeforeUnmount } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport BaseLink from '@/components/BaseLink'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst isCollapsible = inject('footerMenuIsCollapsible')\nconst menuSections = inject('menuSections')\nconst registerMenuSection = inject('registerMenuSection')\nconst unregisterMenuSection = inject('unregisterMenuSection')\nconst toggleMenuSection = inject('toggleMenuSection')\n\nconst props = defineProps({\n  item: {\n    type: Object,\n    default: () => {},\n  },\n  headingTag: {\n    type: String,\n    default: 'h4',\n  },\n})\n\nconst menuSectionId = computed(\n  () => props.item?.id || nextId('usa-footer-collapsible-menu-section'),\n)\n\nregisterMenuSection(menuSectionId.value, false)\n\nonBeforeUnmount(() => {\n  unregisterMenuSection(menuSectionId.value)\n})\n\nconst isOpen = toRef(menuSections, menuSectionId.value)\n</script>\n\n<template>\n  <section\n    :key=\"item?.id || item.text\"\n    class=\"usa-footer__primary-content usa-footer__primary-content--collapsible\"\n  >\n    <button\n      v-if=\"isCollapsible\"\n      type=\"button\"\n      class=\"usa-footer__primary-link usa-footer__primary-link--button\"\n      :aria-expanded=\"isOpen\"\n      :aria-controls=\"menuSectionId\"\n      @click=\"toggleMenuSection(menuSectionId)\"\n      >{{ item.text }}</button\n    >\n    <BaseHeading v-else :tag=\"headingTag\" class=\"usa-footer__primary-link\">{{\n      item.text\n    }}</BaseHeading>\n    <ul\n      v-if=\"item?.children?.length\"\n      v-show=\"isOpen || !isCollapsible\"\n      :id=\"menuSectionId\"\n      class=\"usa-list usa-list--unstyled\"\n    >\n      <li\n        v-for=\"subItem in item.children\"\n        :key=\"subItem?.id || subItem.text\"\n        class=\"usa-footer__secondary-link\"\n      >\n        <BaseLink\n          :to=\"subItem.to\"\n          :href=\"subItem.href\"\n          :router-component-name=\"subItem.routerComponentName\"\n          >{{ subItem.text }}</BaseLink\n        >\n      </li>\n    </ul>\n  </section>\n</template>\n","<script setup>\nimport { ref, computed, inject, reactive, watch, provide, onMounted } from 'vue'\nimport { useMediaQuery } from '@vueuse/core'\nimport {\n  PREFIX_SEPARATOR,\n  GRID_NAMESPACE,\n  FOOTER_NAV_COLLAPSIBLE_BREAKPOINT,\n} from '@/utils/constants.js'\nimport { useAccordion } from '@/composables/useAccordion.js'\nimport UsaFooterCollapsibleMenuSection from '@/components/UsaFooterCollapsibleMenuSection'\n\nconst prefixSeparator = inject('vueUswds.prefixSeparator', PREFIX_SEPARATOR)\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\nconst footerNavBigBreakpoint = inject(\n  'vueUswds.footerNavBigBreakpoint',\n  FOOTER_NAV_COLLAPSIBLE_BREAKPOINT,\n)\n\nconst props = defineProps({\n  items: {\n    type: Array,\n    default: () => [],\n  },\n  headingTag: {\n    type: String,\n    default: 'h4',\n  },\n  customClasses: {\n    type: Object,\n    default: () => ({\n      gridRow: [],\n      gridCol: [],\n    }),\n  },\n})\n\nconst isMounted = ref(false)\nconst menuSections = reactive({})\nconst isCollapsibleMediaQuery = useMediaQuery(\n  `(max-width: ${footerNavBigBreakpoint})`,\n)\nconst isCollapsible = computed(() =>\n  isMounted.value ? isCollapsibleMediaQuery.value : false,\n)\n\nconst {\n  registerAccordionItem,\n  unregisterAccordionItem,\n  closeItem,\n  toggleItem,\n  closeAllItems,\n} = useAccordion(menuSections)\n\nwatch(isCollapsible, closeAllItems)\n\nonMounted(() => {\n  isMounted.value = true\n})\n\nconst gridRowClasses = computed(() => {\n  if (props.customClasses?.gridRow?.length) {\n    return props.customClasses.gridRow\n  }\n\n  return [`${gridNamespace}row`, `${gridNamespace}gap-4`]\n})\n\nconst gridColClasses = computed(() => {\n  if (props.customClasses?.gridCol?.length) {\n    return props.customClasses.gridCol\n  }\n\n  return [\n    `mobile-lg${prefixSeparator}${gridNamespace}col-6`,\n    `desktop${prefixSeparator}${gridNamespace}col-3`,\n  ]\n})\n\nprovide('registerMenuSection', registerAccordionItem)\nprovide('unregisterMenuSection', unregisterAccordionItem)\nprovide('toggleMenuSection', toggleItem)\nprovide('closeMenuSection', closeItem)\nprovide('closeAllMenuSections', closeAllItems)\nprovide('menuSections', menuSections)\nprovide('footerMenuIsCollapsible', isCollapsible)\n</script>\n\n<template>\n  <div :class=\"gridRowClasses\">\n    <div :class=\"gridColClasses\">\n      <UsaFooterCollapsibleMenuSection\n        v-for=\"item in items\"\n        :key=\"item?.id || item.text\"\n        :item=\"item\"\n        :heading-tag=\"headingTag\"\n      />\n    </div>\n  </div>\n</template>\n","<script setup>\nimport { inject, computed } from 'vue'\nimport { PREFIX_SEPARATOR, GRID_NAMESPACE } from '@/utils/constants.js'\n\nconst prefixSeparator = inject('vueUswds.prefixSeparator', PREFIX_SEPARATOR)\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\n\nconst props = defineProps({\n  src: {\n    type: String,\n    default: '',\n  },\n  alt: {\n    type: String,\n    default: '',\n  },\n  heading: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        logoGridCol: [],\n        headingGridCol: [],\n      }\n    },\n  },\n})\n\nconst logoGridClasses = computed(() =>\n  props.customClasses?.logoGridCol?.length\n    ? props.customClasses.logoGridCol\n    : [`mobile-lg${prefixSeparator}${gridNamespace}col-auto`],\n)\nconst headingGridClasses = computed(() =>\n  props.customClasses?.headingGridCol?.length\n    ? props.customClasses.headingGridCol\n    : [`mobile-lg${prefixSeparator}${gridNamespace}col-auto`],\n)\n</script>\n\n<template>\n  <div class=\"usa-footer__logo\">\n    <div :class=\"logoGridClasses\">\n      <slot name=\"logo\">\n        <img v-if=\"src\" class=\"usa-footer__logo-img\" :src=\"src\" :alt=\"alt\" />\n      </slot>\n    </div>\n    <div :class=\"headingGridClasses\">\n      <p class=\"usa-footer__logo-heading\">\n        <slot name=\"heading\">{{ heading }}</slot>\n      </p>\n    </div>\n  </div>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { PREFIX_SEPARATOR, GRID_NAMESPACE } from '@/utils/constants.js'\nimport BaseLink from '@/components/BaseLink'\n\nconst prefixSeparator = inject('vueUswds.prefixSeparator', PREFIX_SEPARATOR)\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\n\nconst props = defineProps({\n  items: {\n    type: Array,\n    default: () => [],\n  },\n  customClasses: {\n    type: Object,\n    default: () => ({\n      gridRow: [],\n      gridCol: [],\n    }),\n  },\n})\n\nconst gridRowClasses = computed(() => {\n  if (props.customClasses?.gridRow?.length) {\n    return props.customClasses.gridRow\n  }\n\n  return [`${gridNamespace}row`, `${gridNamespace}gap`]\n})\n\nconst griColClasses = computed(() => {\n  if (props.customClasses?.gridCol?.length) {\n    return props.customClasses.gridCol\n  }\n\n  return [\n    `mobile-lg${prefixSeparator}${gridNamespace}col-6`,\n    `desktop${prefixSeparator}${gridNamespace}col-auto`,\n  ]\n})\n</script>\n\n<template>\n  <ul :class=\"gridRowClasses\">\n    <li\n      v-for=\"item in items\"\n      :key=\"item?.id || item.text\"\n      class=\"usa-footer__primary-content\"\n      :class=\"griColClasses\"\n    >\n      <BaseLink\n        :to=\"item.to\"\n        :href=\"item.href\"\n        class=\"usa-footer__primary-link\"\n        :router-component-name=\"item.routerComponentName\"\n        >{{ item.text }}</BaseLink\n      >\n    </li>\n  </ul>\n</template>\n","<script setup>\nimport { inject } from 'vue'\nimport UsaFooterMenu from '@/components/UsaFooterMenu'\nimport UsaFooterCollapsibleMenu from '@/components/UsaFooterCollapsibleMenu'\n\nconst footerVariant = inject('footerVariant', 'medium')\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  ariaLabel: {\n    type: String,\n    default: 'Footer navigation',\n  },\n  items: {\n    type: Array,\n    default: () => [],\n  },\n  collapsibleHeadingTag: {\n    type: String,\n    default: 'h4',\n  },\n  customClasses: {\n    type: Object,\n    default: () => ({\n      gridRow: [],\n      gridCol: [],\n    }),\n  },\n})\n</script>\n\n<template>\n  <nav class=\"usa-footer__nav\" :aria-label=\"ariaLabel\">\n    <slot :items=\"items\">\n      <template v-if=\"items.length\">\n        <UsaFooterCollapsibleMenu\n          v-if=\"footerVariant === 'big'\"\n          :items=\"items\"\n          :heading-tag=\"collapsibleHeadingTag\"\n          :custom-classes=\"customClasses\"\n        />\n        <UsaFooterMenu\n          v-else-if=\"footerVariant === 'medium' || footerVariant === 'slim'\"\n          :items=\"items\"\n          :custom-classes=\"customClasses\"\n        />\n      </template>\n    </slot>\n  </nav>\n</template>\n","<script setup></script>\n\n<template>\n  <div class=\"usa-footer__primary-section\"><slot></slot></div>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { GRID_NAMESPACE } from '@/utils/constants.js'\n\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\n\nconst props = defineProps({\n  customClasses: {\n    type: Object,\n    default: () => ({\n      container: [],\n    }),\n  },\n})\n\nconst containerClasses = computed(() =>\n  props.customClasses?.container?.length\n    ? props.customClasses.container\n    : [`${gridNamespace}container`],\n)\n</script>\n\n<template>\n  <div class=\"usa-footer__secondary-section\">\n    <div :class=\"containerClasses\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { GRID_NAMESPACE } from '@/utils/constants.js'\nimport BaseLink from '@/components/BaseLink'\n\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\n\nconst props = defineProps({\n  items: {\n    type: Array,\n    default: () => [],\n  },\n  customClasses: {\n    type: Object,\n    default: () => ({\n      gridCol: [],\n      link: [],\n      icon: [],\n    }),\n  },\n})\n\nconst gridColClasses = computed(() =>\n  props.customClasses?.gridCol?.length\n    ? props.customClasses.gridCol\n    : [`${gridNamespace}col-auto`],\n)\n</script>\n\n<template>\n  <div class=\"usa-footer__social-links\">\n    <div\n      v-for=\"item in items\"\n      :key=\"item?.id || item.name\"\n      :class=\"gridColClasses\"\n    >\n      <BaseLink\n        :to=\"item.to\"\n        :href=\"item.href\"\n        class=\"usa-social-link\"\n        :class=\"customClasses?.link\"\n        :router-component-name=\"item.routerComponentName\"\n      >\n        <slot :name=\"item?.id || item.name.toLowerCase()\" :item=\"item\">\n          <img\n            class=\"usa-social-link__icon\"\n            :class=\"customClasses?.icon\"\n            :src=\"item.icon\"\n            :alt=\"item.name\"\n          />\n        </slot>\n      </BaseLink>\n    </div>\n  </div>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { GRID_NAMESPACE } from '@/utils/constants.js'\n\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\n\nconst props = defineProps({\n  variant: {\n    type: String,\n    default: 'dark',\n    validator(variant) {\n      const isValidVariant = ['light', 'dark'].includes(variant)\n\n      if (!isValidVariant) {\n        console.warn(`'${variant}' is not a valid graphic list variant`)\n      }\n\n      return isValidVariant\n    },\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        container: [],\n      }\n    },\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-section--dark': props.variant === 'dark',\n    'usa-section--light': props.variant === 'light',\n  },\n])\n\nconst containerClasses = computed(() =>\n  props.customClasses?.container?.length\n    ? props.customClasses.container\n    : [`${gridNamespace}container`],\n)\n</script>\n\n<template>\n  <section class=\"usa-graphic-list usa-section\" :class=\"classes\">\n    <div :class=\"containerClasses\">\n      <slot :variant=\"variant\"></slot>\n    </div>\n  </section>\n</template>\n","<script setup></script>\n\n<template>\n  <div class=\"usa-graphic-list__row\">\n    <slot></slot>\n  </div>\n</template>\n","import { ref, readonly } from 'vue'\nimport { ID_PREFIX } from '@/utils/constants.js'\n\nexport const isMobileMenuOpen = /*#__PURE__*/ ref(false)\n\nexport function useMobileMenu(emit) {\n  const menuId = ref(`${ID_PREFIX}global-mobile-header-menu`)\n  const mobileMenuOpenClass = 'usa-js-mobile-nav--active'\n\n  const closeMobileMenu = () => {\n    isMobileMenuOpen.value = false\n\n    if (emit) {\n      emit('mobileMenuOpen', isMobileMenuOpen.value)\n    }\n\n    document.body.classList.remove(mobileMenuOpenClass)\n    document\n      .querySelectorAll('body > :not(.usa-nav)')\n      .forEach(element => element.removeAttribute('aria-hidden', true))\n  }\n\n  const openMobileMenu = () => {\n    isMobileMenuOpen.value = true\n\n    if (emit) {\n      emit('mobileMenuOpen', isMobileMenuOpen.value)\n    }\n\n    document.body.classList.add(mobileMenuOpenClass)\n    document\n      .querySelectorAll('body > :not(.usa-nav)')\n      .forEach(element => element.setAttribute('aria-hidden', true))\n  }\n\n  const toggleMobileMenu = () => {\n    if (isMobileMenuOpen.value) {\n      closeMobileMenu()\n    } else {\n      openMobileMenu()\n    }\n  }\n\n  return {\n    isMobileMenuOpen: readonly(isMobileMenuOpen),\n    mobileMenuId: readonly(menuId),\n    closeMobileMenu: closeMobileMenu,\n    openMobileMenu: openMobileMenu,\n    toggleMobileMenu: toggleMobileMenu,\n  }\n}\n","<script setup>\nimport { computed, provide } from 'vue'\nimport { useMobileMenu } from '@/composables/useMobileMenu.js'\n\nconst emit = defineEmits(['mobileMenuOpen'])\n\nconst props = defineProps({\n  variant: {\n    type: String,\n    default: 'basic',\n    validator(variant) {\n      const isValidVariant = ['basic', 'extended'].includes(variant)\n\n      if (!isValidVariant) {\n        console.warn(`'${variant}' is not a valid header variant`)\n      }\n\n      return isValidVariant\n    },\n  },\n  megamenu: {\n    type: Boolean,\n    default: false,\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        navContainer: [],\n      }\n    },\n  },\n})\n\nconst {\n  isMobileMenuOpen,\n  mobileMenuId,\n  closeMobileMenu,\n  openMobileMenu,\n  toggleMobileMenu,\n} = useMobileMenu(emit)\n\nconst classes = computed(() => [\n  {\n    'usa-header--basic': props.variant === 'basic',\n    'usa-header--extended': props.variant === 'extended',\n    'usa-header--megamenu': props.megamenu,\n  },\n])\n\nprovide(\n  'isExtendedHeader',\n  computed(() => props.variant === 'extended'),\n)\nprovide(\n  'isMegamenu',\n  computed(() => props.megamenu),\n)\nprovide('isMobileMenuOpen', isMobileMenuOpen)\nprovide('mobileMenuId', mobileMenuId)\nprovide('closeMobileMenu', closeMobileMenu)\nprovide('openMobileMenu', openMobileMenu)\nprovide('toggleMobileMenu', toggleMobileMenu)\n</script>\n\n<template>\n  <header class=\"usa-header\" :class=\"classes\">\n    <div\n      v-if=\"variant === 'basic'\"\n      class=\"usa-nav-container\"\n      :class=\"customClasses?.navContainer\"\n    >\n      <slot></slot>\n    </div>\n\n    <template v-else>\n      <slot></slot>\n    </template>\n  </header>\n</template>\n","<script setup>\nimport { inject, computed } from 'vue'\nimport { GRID_NAMESPACE } from '@/utils/constants.js'\n\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\n\nconst props = defineProps({\n  backgroundImage: {\n    type: String,\n    default: '',\n  },\n  ariaLabel: {\n    type: String,\n    required: true,\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        gridContainer: [],\n      }\n    },\n  },\n})\n\nconst gridContainerClasses = computed(() => {\n  return [\n    `${gridNamespace}container`,\n    ...(props.customClasses?.gridContainer || []),\n  ]\n})\n\nconst backgroundImageStyle = computed(() => {\n  return {\n    backgroundImage: props.backgroundImage\n      ? `url(${props.backgroundImage})`\n      : null,\n  }\n})\n</script>\n\n<template>\n  <section\n    class=\"usa-hero\"\n    :aria-label=\"ariaLabel\"\n    :style=\"backgroundImageStyle\"\n  >\n    <div :class=\"gridContainerClasses\"><slot></slot></div>\n  </section>\n</template>\n","<script setup>\nimport { useSlots } from 'vue'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst slots = useSlots()\n\nif (slots?.headingAlt) {\n  console.warn(\n    `The 'headingAlt' slot is deprecated, use 'heading-alt' instead.`,\n  )\n}\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  headingAlt: {\n    type: String,\n    default: '',\n  },\n  heading: {\n    type: String,\n    default: '',\n  },\n  headingTag: {\n    type: String,\n    default: 'h1',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        heading: [],\n        headingAlt: [],\n      }\n    },\n  },\n})\n</script>\n\n<template>\n  <div class=\"usa-hero__callout\">\n    <BaseHeading\n      v-if=\"\n        heading ||\n        headingAlt ||\n        $slots.heading ||\n        $slots.headingAlt ||\n        $slots['heading-alt']\n      \"\n      :tag=\"headingTag\"\n      class=\"usa-hero__heading\"\n      :class=\"customClasses?.heading\"\n    >\n      <span\n        v-if=\"headingAlt || $slots.headingAlt || $slots['heading-alt']\"\n        class=\"usa-hero__heading--alt\"\n        :class=\"customClasses?.headingAlt\"\n      >\n        <slot v-if=\"$slots['heading-alt']\" name=\"heading-alt\"></slot>\n        <!--\n        \t@slot headingAlt\n      \t\t@deprecated Use the `heading-alt` slot instead.\n      \t-->\n        <slot v-else-if=\"$slots.headingAlt\" name=\"headingAlt\"></slot>\n        <template v-else>{{ headingAlt }}</template>\n      </span>\n      <slot name=\"heading\">{{ heading }}</slot>\n    </BaseHeading>\n    <slot></slot>\n  </div>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { SVG_SPRITE_PATH } from '@/utils/constants.js'\n\nconst svgSpritePath = inject('vueUswds.svgSpritePath', SVG_SPRITE_PATH)\n\nconst props = defineProps({\n  name: {\n    type: String,\n    required: true,\n  },\n  size: {\n    type: [String, Number],\n    default: '',\n    validator(size) {\n      const isValidSize = ['', '3', '4', '5', '6', '7', '8', '9'].includes(\n        `${size}`,\n      )\n\n      if (!isValidSize) {\n        console.warn(`'${size}' is not a valid icon size`)\n      }\n\n      return isValidSize\n    },\n  },\n  ariaHidden: {\n    type: Boolean,\n    default: true,\n  },\n  role: {\n    type: String,\n    default: 'img',\n  },\n  focusable: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-icon--size-3': `${props.size}` === '3',\n    'usa-icon--size-4': `${props.size}` === '4',\n    'usa-icon--size-5': `${props.size}` === '5',\n    'usa-icon--size-6': `${props.size}` === '6',\n    'usa-icon--size-7': `${props.size}` === '7',\n    'usa-icon--size-8': `${props.size}` === '8',\n    'usa-icon--size-9': `${props.size}` === '9',\n  },\n])\n\nconst iconHref = computed(() => `${svgSpritePath}#${props.name}`)\n</script>\n\n<template>\n  <svg\n    class=\"usa-icon\"\n    :class=\"classes\"\n    :aria-hidden=\"ariaHidden\"\n    :role=\"role\"\n    :focusable=\"focusable\"\n  >\n    <slot name=\"title\"></slot>\n    <use :href=\"iconHref\"></use>\n  </svg>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { PREFIX_SEPARATOR } from '@/utils/constants.js'\n\nconst prefixSeparator = inject('vueUswds.prefixSeparator', PREFIX_SEPARATOR)\n\nconst props = defineProps({\n  color: {\n    type: String,\n    default: '',\n  },\n  size: {\n    type: [String, Object],\n    default: '',\n    validator(size) {\n      let isValidSize = false\n      const validSizes = ['', '2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl']\n\n      if (typeof size === 'string') {\n        isValidSize = validSizes.includes(size)\n      }\n\n      if (typeof size === 'object') {\n        isValidSize = Object.values(size).some(breakpointSize =>\n          validSizes.includes(breakpointSize),\n        )\n      }\n\n      if (!isValidSize) {\n        console.warn(`'${size}' is not a valid icon list size`)\n      }\n\n      return isValidSize\n    },\n  },\n})\n\nconst sizeClasses = computed(() => {\n  if (!!props.size && typeof props.size === 'string') {\n    return [`usa-icon-list--size-${props.size}`]\n  }\n\n  if (typeof props.size === 'object' && Object.keys(props.size).length) {\n    return Object.keys(props.size).reduce((acc, breakpoint) => {\n      acc.push(\n        `${breakpoint}${prefixSeparator}usa-icon-list--size-${props.size[breakpoint]}`,\n      )\n\n      return acc\n    }, [])\n  }\n\n  return []\n})\n\nconst classes = computed(() => [\n  { [`usa-icon-list--${props.color}`]: props.color },\n  ...sizeClasses.value,\n])\n</script>\n\n<template>\n  <ul class=\"usa-icon-list\" :class=\"classes\"\n    ><slot></slot\n  ></ul>\n</template>\n","<script setup></script>\n\n<template>\n  <div class=\"usa-identifier\">\n    <slot></slot>\n  </div>\n</template>\n","import {\n  ref,\n  shallowRef,\n  computed,\n  watch,\n  onMounted,\n  onBeforeUnmount,\n} from 'vue'\nimport { useMutationObserver, useIntersectionObserver } from '@vueuse/core'\nimport { kebabCase } from '@/utils/common.js'\n\nexport const useInPageNavigation = (\n  _mainContentSelector,\n  _headingElements,\n  _rootMargin,\n  _threshold,\n  _minimumHeadingCount,\n  emit,\n) => {\n  const mainContentSelector = ref(_mainContentSelector)\n  const headingElements = ref(\n    _headingElements.value.map(heading => heading.toLowerCase()).toSorted(),\n  )\n  const rootMargin = ref(_rootMargin)\n  const threshold = ref(_threshold)\n  const minimumHeadingCount = ref(_minimumHeadingCount)\n  const mainElement = shallowRef(null)\n  const headings = ref(new Map())\n\n  const activeHeading = computed(() => {\n    let currentActiveHeading\n    const currentHeadings = Array.from(headings.value.values())\n\n    for (const heading of currentHeadings) {\n      if (heading.isActive) {\n        currentActiveHeading = heading.id\n        break\n      }\n    }\n\n    return currentActiveHeading\n  })\n\n  watch(\n    activeHeading,\n    newActiveHeading => {\n      if (newActiveHeading) {\n        emit('activeHeading', newActiveHeading)\n      }\n    },\n    {\n      immediate: true,\n    },\n  )\n\n  const topLevelHeading = computed(() => headingElements.value[0])\n\n  const headingSelector = computed(\n    () =>\n      `.usa-in-page-nav-container ${mainContentSelector.value} :is(${headingElements.value.join(',')})`,\n  )\n\n  const domHeadingExists = id => {\n    const foundHeading = document.getElementById(id)\n\n    return (\n      foundHeading &&\n      (!foundHeading.classList.contains('usa-anchor') || headings.value.has(id))\n    )\n  }\n\n  const getHeadingId = heading => {\n    let headingId = CSS.escape(kebabCase(heading.textContent))\n\n    let id\n    let suffix = 0\n    do {\n      id = headingId\n\n      // To avoid conflicts with existing IDs on the page, loop and append an\n      // incremented suffix until a unique ID is found.\n      suffix += 1\n      if (suffix > 1) {\n        id += `-${suffix}`\n      }\n    } while (domHeadingExists(id))\n\n    return id\n  }\n\n  const addHeadingAnchor = (heading, headingId) => {\n    const hasAnchor = heading.querySelector('* > a.usa-anchor')\n\n    if (!hasAnchor) {\n      const anchor = document.createElement('a')\n      anchor.setAttribute('id', headingId)\n      anchor.classList.add('usa-anchor')\n      heading.insertAdjacentElement('afterbegin', anchor)\n    }\n  }\n\n  const removeHeadingAnchor = headingId => {\n    document.getElementById(headingId)?.remove()\n  }\n\n  const isVisibleHeading = heading => {\n    if (!heading.textContent.trim()) {\n      return false\n    }\n\n    const headingStyle = window.getComputedStyle(heading)\n\n    return (\n      headingStyle.getPropertyValue('display') !== 'none' &&\n      headingStyle.getPropertyValue('visibility') !== 'hidden'\n    )\n  }\n\n  const findDomHeadings = () => {\n    return Array.from(document.querySelectorAll(headingSelector.value)).filter(\n      isVisibleHeading,\n    )\n  }\n\n  const buildMenu = () => {\n    const domHeadings = findDomHeadings()\n\n    if (headings.value.size) {\n      headings.value.forEach(heading => heading?.stop())\n      headings.value.clear()\n    }\n\n    if (domHeadings.length < minimumHeadingCount.value) {\n      return\n    }\n\n    domHeadings.forEach(heading => {\n      const headingId = getHeadingId(heading)\n      const headingTag = heading.tagName.toLowerCase()\n\n      addHeadingAnchor(heading, headingId)\n\n      const { stop } = useIntersectionObserver(heading, setActiveLink, {\n        rootMargin: rootMargin.value,\n        threshold: threshold.value,\n      })\n\n      headings.value.set(headingId, {\n        id: headingId,\n        text: heading.textContent,\n        isPrimary: headingTag === topLevelHeading.value,\n        isActive: false,\n        stop,\n      })\n    })\n  }\n\n  function setActiveLink(entries) {\n    entries.forEach(({ isIntersecting, target, intersectionRatio }) => {\n      if (isIntersecting && intersectionRatio === 1) {\n        const anchor = target.querySelector('a.usa-anchor')\n        const headingId = anchor.id\n\n        if (headings.value.has(headingId)) {\n          headings.value.forEach(heading => {\n            const isActive = heading.id === headingId\n\n            headings.value.set(heading.id, {\n              ...heading,\n              isActive: isActive,\n            })\n          })\n        }\n      }\n    })\n  }\n\n  const { stop: stopMutationObserver } = useMutationObserver(\n    mainElement,\n    mutations => {\n      const headingsHaveChanges = mutations.reduce((acc, mutation) => {\n        const addedHeadings = Array.from(mutation.addedNodes).filter(node =>\n          headingElements.value.includes(node?.tagName?.toLowerCase()),\n        )\n\n        const removedHeadings = Array.from(mutation.removedNodes).filter(node =>\n          headingElements.value.includes(node?.tagName?.toLowerCase()),\n        )\n\n        const targetHeadings = headingElements.value.includes(\n          mutation.target?.tagName?.toLowerCase(),\n        )\n          ? [mutation.target]\n          : []\n\n        const totalChanges =\n          addedHeadings.length + removedHeadings.length + targetHeadings.length\n\n        acc += totalChanges\n\n        return acc\n      }, 0)\n\n      if (headingsHaveChanges) {\n        buildMenu()\n      }\n    },\n    { subtree: true, childList: true, characterData: true },\n  )\n\n  onMounted(() => {\n    mainElement.value = document.querySelector(mainContentSelector.value)\n\n    buildMenu()\n  })\n\n  onBeforeUnmount(() => {\n    stopMutationObserver()\n    headings.value.forEach(heading => {\n      heading.stop()\n      removeHeadingAnchor(heading.id)\n    })\n  })\n\n  return {\n    headings,\n  }\n}\n","<script setup>\nimport { toRef } from 'vue'\nimport BaseHeading from '@/components/BaseHeading'\nimport { useInPageNavigation } from './useInPageNavigation.js'\n\nconst emit = defineEmits(['activeHeading'])\n\nconst props = defineProps({\n  title: {\n    type: String,\n    default: 'On this page',\n  },\n  mainContentSelector: {\n    type: String,\n    default: 'main',\n  },\n  headingLevel: {\n    type: String,\n    default: 'h4',\n    validator(tag) {\n      const isValidTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)\n\n      if (!isValidTag) {\n        console.warn(`'${tag}' is not a valid HTML heading element`)\n      }\n\n      return isValidTag\n    },\n  },\n  headingElements: {\n    type: Array,\n    default: () => ['h2', 'h3'],\n    validator(headingElements) {\n      const isValid = headingElements.every(tag =>\n        ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag),\n      )\n\n      if (!isValid) {\n        console.warn(\n          `'headingElements' contains an invalid HTML heading element`,\n        )\n      }\n\n      return isValid\n    },\n  },\n  minimumHeadingCount: {\n    type: Number,\n    default: 2,\n  },\n  scrollOffset: {\n    type: Number,\n    default: 0,\n  },\n  rootMargin: {\n    type: String,\n    default: '0px 0px 0px 0px',\n  },\n  threshold: {\n    type: [Number, Array],\n    default: 1,\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        aside: [],\n        nav: [],\n        heading: [],\n        list: [],\n        item: [],\n        link: [],\n      }\n    },\n  },\n})\n\nconst { headings } = useInPageNavigation(\n  toRef(props, 'mainContentSelector'),\n  toRef(props, 'headingElements'),\n  toRef(props, 'rootMargin'),\n  toRef(props, 'threshold'),\n  toRef(props, 'minimumHeadingCount'),\n  emit,\n)\n\nconst scrollToAnchor = id => {\n  const heading = document.getElementById(id)\n\n  const calculateOffset = heading => {\n    if (!heading.offsetParent) {\n      return heading.offsetTop\n    }\n\n    return heading.offsetTop + calculateOffset(heading.offsetParent)\n  }\n\n  const offsetTop = calculateOffset(heading)\n\n  const { matches: prefersReducedMotion } = window.matchMedia(\n    '(prefers-reduced-motion: reduce)',\n  )\n\n  /* istanbul ignore next */\n  window.scroll({\n    behavior: prefersReducedMotion ? 'auto' : 'smooth',\n    top: offsetTop - props.scrollOffset,\n  })\n\n  if (window.location.hash.slice(1) !== id) {\n    window.history.pushState(null, '', `#${id}`)\n  }\n}\n</script>\n\n<template>\n  <div class=\"usa-in-page-nav-container\">\n    <aside\n      v-if=\"headings && headings.size >= minimumHeadingCount\"\n      class=\"usa-in-page-nav\"\n      :class=\"customClasses?.aside\"\n    >\n      <nav\n        :aria-label=\"title\"\n        class=\"usa-in-page-nav__nav\"\n        :class=\"customClasses?.nav\"\n      >\n        <BaseHeading\n          :tag=\"headingLevel\"\n          class=\"usa-in-page-nav__heading\"\n          :class=\"customClasses?.heading\"\n          >{{ title }}</BaseHeading\n        >\n        <ul class=\"usa-in-page-nav__list\" :class=\"customClasses?.list\">\n          <li\n            v-for=\"heading in headings.values()\"\n            :key=\"heading.id\"\n            class=\"usa-in-page-nav__item\"\n            :class=\"[\n              customClasses?.item,\n              { 'usa-in-page-nav__item--primary': heading.isPrimary },\n            ]\"\n          >\n            <a\n              :href=\"`#${heading.id}`\"\n              class=\"usa-in-page-nav__link\"\n              :class=\"[\n                customClasses?.link,\n                {\n                  'usa-current': heading.isActive,\n                },\n              ]\"\n              @click.prevent=\"scrollToAnchor(heading.id)\"\n              @keydown.prevent.enter=\"scrollToAnchor(heading.id)\"\n              >{{ heading.text }}</a\n            >\n          </li>\n        </ul>\n      </nav>\n    </aside>\n    <slot></slot>\n  </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue'\nimport { onKeyStroke, onClickOutside } from '@vueuse/core'\nimport { useToggle } from '@/composables/useToggle.js'\nimport BaseLink from '@/components/BaseLink'\nimport UsaButton from '@/components/UsaButton'\n\nconst emit = defineEmits(['update:modelValue', 'update:open'])\n\nconst props = defineProps({\n  modelValue: {\n    type: String,\n    required: true,\n  },\n  open: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  languages: {\n    type: Array,\n    required: true,\n    validator(languages) {\n      let isValid = true\n\n      if (languages.length === 1) {\n        isValid = false\n        console.warn('A least two languages must be provided')\n      }\n\n      if (languages.some(language => !language.langCode)) {\n        isValid = false\n        console.warn('A `lang` property is required for each language')\n      }\n\n      if (!languages.every(language => language.text || language.nativeText)) {\n        isValid = false\n        console.warn(\n          'A `text` and/or `nativeText` property is required for each language',\n        )\n      }\n\n      return isValid\n    },\n  },\n  variant: {\n    type: String,\n    default: '',\n    validator(variant) {\n      let isValidVariant = ['', 'unstyled'].includes(variant)\n\n      if (!isValidVariant) {\n        console.warn(`'${variant}' is not a valid language selector variant`)\n      }\n\n      return isValidVariant\n    },\n  },\n  size: {\n    type: String,\n    default: '',\n    validator(size) {\n      let isValidSize = ['', 'small'].includes(size)\n\n      if (!isValidSize) {\n        console.warn(`'${size}' is not a valid language selector size`)\n      }\n\n      return isValidSize\n    },\n  },\n  customClasses: {\n    type: Object,\n    default: () => ({\n      primary: [],\n      primaryItem: [],\n      button: [],\n      submenu: [],\n      submenuItem: [],\n      link: [],\n    }),\n  },\n})\n\nconst languageSelectorRef = ref(null)\n\nconst { isOpen, toggleId, openContent, closeContent, toggleContent } =\n  useToggle(props.id, 'usa-language-selector', props.open, emit)\n\nconst useDropdown = computed(() => props.languages.length > 2)\n\nconst currentLangCode = computed({\n  get() {\n    return props.modelValue\n  },\n  set(newLangCode) {\n    emit('update:modelValue', newLangCode)\n\n    if (useDropdown.value) {\n      closeContent()\n    }\n  },\n})\n\nconst currentLanguage = computed(() => {\n  return props.languages.find(\n    ({ langCode }) => langCode === currentLangCode.value,\n  )\n})\n\nconst toggleLanguage = () => {\n  const { langCode } = props.languages.find(\n    ({ langCode }) => langCode !== currentLangCode.value,\n  )\n\n  currentLangCode.value = langCode\n}\n\nonKeyStroke('Escape', () => {\n  if (useDropdown.value) {\n    closeContent()\n  }\n})\n\nonClickOutside(languageSelectorRef, () => {\n  if (useDropdown.value) {\n    closeContent()\n  }\n})\n\ndefineExpose({\n  openContent,\n  closeContent,\n  toggleContent,\n})\n</script>\n\n<template>\n  <div\n    ref=\"languageSelectorRef\"\n    class=\"usa-language-container\"\n    :class=\"[\n      {\n        'usa-language--small': size === 'small',\n      },\n    ]\"\n  >\n    <template v-if=\"languages.length > 2\">\n      <ul\n        class=\"usa-language__primary usa-accordion\"\n        :class=\"customClasses?.primary\"\n      >\n        <li\n          class=\"usa-language__primary-item\"\n          :class=\"customClasses?.primaryItem\"\n        >\n          <UsaButton\n            class=\"usa-language__link\"\n            :aria-expanded=\"isOpen\"\n            :aria-controls=\"toggleId\"\n            :class=\"customClasses?.button\"\n            :variant=\"variant === 'unstyled' ? 'unstyled' : ''\"\n            @click=\"toggleContent\"\n            ><slot>Languages</slot></UsaButton\n          >\n          <ul\n            :id=\"toggleId\"\n            :hidden=\"!isOpen\"\n            class=\"usa-language__submenu\"\n            :class=\"customClasses?.submenu\"\n          >\n            <li\n              v-for=\"{\n                langCode,\n                to,\n                href,\n                nativeText,\n                text,\n                routerComponentName,\n              } in languages\"\n              :key=\"langCode\"\n              class=\"usa-language__submenu-item\"\n              :class=\"customClasses?.submenuItem\"\n            >\n              <BaseLink\n                v-if=\"to || href\"\n                :to=\"to\"\n                :href=\"href\"\n                :class=\"customClasses?.link\"\n                :router-component-name=\"routerComponentName\"\n                @click=\"currentLangCode = langCode\"\n                ><span :lang=\"langCode\"\n                  ><strong>{{ nativeText || text }}</strong\n                  ><template v-if=\"text && nativeText\">\n                    ({{ text }})</template\n                  ></span\n                ></BaseLink\n              >\n              <UsaButton\n                v-else\n                variant=\"unstyled\"\n                :class=\"customClasses?.link\"\n                @click=\"currentLangCode = langCode\"\n              >\n                <span :lang=\"langCode\"\n                  ><strong>{{ nativeText || text }}</strong\n                  ><template v-if=\"text && nativeText\">\n                    ({{ text }})</template\n                  ></span\n                >\n              </UsaButton>\n            </li>\n          </ul>\n        </li>\n      </ul>\n    </template>\n    <template v-else-if=\"currentLanguage\">\n      <UsaButton :class=\"customClasses?.button\" @click=\"toggleLanguage()\"\n        ><span :lang=\"currentLanguage.langCode\">{{\n          currentLanguage.nativeText || currentLanguage.text\n        }}</span></UsaButton\n      >\n    </template>\n  </div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BaseLink from '@/components/BaseLink'\n\nconst props = defineProps({\n  alt: {\n    type: Boolean,\n    default: false,\n  },\n  external: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-link--alt': props.alt,\n    'usa-link--external': props.external,\n  },\n])\n</script>\n\n<template>\n  <BaseLink class=\"usa-link\" :class=\"classes\"><slot></slot></BaseLink>\n</template>\n","<script setup>\nimport { inject } from 'vue'\nimport { SVG_SPRITE_PATH } from '@/utils/constants.js'\n\nconst svgSpritePath = inject('vueUswds.svgSpritePath', SVG_SPRITE_PATH)\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  ariaLabel: {\n    type: String,\n    required: true,\n  },\n})\n</script>\n\n<template>\n  <button\n    type=\"button\"\n    class=\"usa-button usa-modal__close\"\n    :aria-label=\"ariaLabel\"\n  >\n    <slot :svg-sprite-path=\"svgSpritePath\">\n      <svg\n        v-if=\"svgSpritePath\"\n        class=\"usa-icon\"\n        aria-hidden=\"true\"\n        focusable=\"false\"\n        role=\"img\"\n      >\n        <use :href=\"`${svgSpritePath}#close`\"></use>\n      </svg>\n    </slot>\n  </button>\n</template>\n","<script setup>\nimport { computed, watch, ref, useSlots, onMounted, onBeforeUnmount } from 'vue'\nimport { onKeyStroke, onClickOutside } from '@vueuse/core'\nimport { UseFocusTrap } from '@vueuse/integrations/useFocusTrap/component'\nimport { nextId } from '@/utils/unique-id.js'\nimport BaseHeading from '@/components/BaseHeading'\nimport UsaModalCloseButton from '@/components/UsaModalCloseButton'\n\nconst slots = useSlots()\n\nif (slots?.closeButton) {\n  console.warn(\n    `The 'closeButton' slot is deprecated, use 'close-button' instead.`,\n  )\n}\n\nconst emit = defineEmits(['update:visible'])\n\nconst props = defineProps({\n  size: {\n    type: String,\n    default: '',\n    validator(size) {\n      const isValidSize = ['', 'lg'].includes(size)\n\n      if (!isValidSize) {\n        console.warn(`'${size}' is not a valid modal size`)\n      }\n\n      return isValidSize\n    },\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  visible: {\n    type: Boolean,\n    default: false,\n  },\n  forceAction: {\n    type: Boolean,\n    default: false,\n  },\n  closeButtonLabel: {\n    type: String,\n    default: 'Close this window',\n  },\n  heading: {\n    type: String,\n    default: '',\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        focusTrap: [],\n        modal: [],\n        overlay: [],\n        content: [],\n        main: [],\n        heading: [],\n        description: [],\n        footer: [],\n      }\n    },\n  },\n})\n\nconst modal = ref(null)\nconst isMounted = ref(false)\n\nconst isVisible = computed({\n  get: () => isMounted.value && props.visible,\n  set: currentlyVisibility => emit('update:visible', currentlyVisibility),\n})\nconst classes = computed(() => {\n  return [{ 'is-visible': isVisible.value }]\n})\nconst modalClasses = computed(() => {\n  return [{ 'usa-modal--lg': props.size === 'lg' }, props.customClasses?.modal]\n})\nconst computedId = computed(() => props.id || nextId('usa-modal'))\nconst headingId = `${computedId.value}-heading`\nconst descriptionId = `${computedId.value}-description`\n\nconst modalBodyClass = 'usa-js-modal--active'\nconst noClickBodyClass = 'usa-js-no-click'\nconst focusTrapClass = 'js-focus-trap-wrapper'\n\nwatch(\n  () => isVisible,\n  currentlyVisible => {\n    if (!isMounted.value) {\n      return\n    }\n\n    if (currentlyVisible.value) {\n      document.body.classList.add(modalBodyClass)\n\n      document\n        .querySelectorAll(`body > :not(.${focusTrapClass})`)\n        .forEach(element => element.setAttribute('aria-hidden', true))\n\n      if (props.forceAction) {\n        document.body.classList.add(noClickBodyClass)\n      }\n    } else {\n      document.body.classList.remove(modalBodyClass)\n\n      document\n        .querySelectorAll(`body > :not(${focusTrapClass})`)\n        .forEach(element => element.removeAttribute('aria-hidden', true))\n\n      if (props.forceAction) {\n        document.body.classList.remove(noClickBodyClass)\n      }\n    }\n  },\n  {\n    immediate: true,\n    deep: true,\n  },\n)\n\nonMounted(() => {\n  isMounted.value = true\n})\n\nonBeforeUnmount(() => {\n  document.body.classList.remove(modalBodyClass)\n\n  document\n    .querySelectorAll(`body > :not(.${focusTrapClass})`)\n    .forEach(element => element.removeAttribute('aria-hidden', true))\n\n  if (props.forceAction) {\n    document.body.classList.remove(noClickBodyClass)\n  }\n})\n\nonKeyStroke('Escape', () => {\n  if (isVisible.value && !props.forceAction) {\n    isVisible.value = false\n  }\n})\n\nonClickOutside(modal, () => {\n  if (isVisible.value && !props.forceAction) {\n    isVisible.value = false\n  }\n})\n</script>\n\n<template>\n  <Teleport to=\"body\" :disabled=\"!isVisible\">\n    <UseFocusTrap\n      v-if=\"isVisible\"\n      :class=\"[`${focusTrapClass}`, customClasses?.focusTrap]\"\n    >\n      <div\n        v-bind=\"$attrs\"\n        :id=\"`${computedId}-modal`\"\n        class=\"usa-modal-wrapper\"\n        :class=\"classes\"\n        role=\"dialog\"\n        :aria-labelledby=\"$slots.heading || heading ? headingId : null\"\n        :aria-describedby=\"$slots.default ? descriptionId : null\"\n      >\n        <div class=\"usa-modal-overlay\" :class=\"customClasses?.overlay\">\n          <div\n            ref=\"modal\"\n            class=\"usa-modal\"\n            :class=\"modalClasses\"\n            tabindex=\"-1\"\n          >\n            <div class=\"usa-modal__content\" :class=\"customClasses?.content\">\n              <div class=\"usa-modal__main\" :class=\"customClasses?.main\">\n                <BaseHeading\n                  v-if=\"$slots.heading || heading\"\n                  :id=\"headingId\"\n                  :tag=\"headingTag\"\n                  class=\"usa-modal__heading\"\n                  :class=\"customClasses?.heading\"\n                >\n                  <slot name=\"heading\">{{ heading }}</slot>\n                </BaseHeading>\n                <div\n                  v-if=\"$slots.default\"\n                  :id=\"descriptionId\"\n                  :class=\"customClasses?.description\"\n                  ><slot></slot\n                ></div>\n                <div\n                  v-if=\"$slots.footer\"\n                  class=\"usa-modal__footer\"\n                  :class=\"customClasses?.footer\"\n                >\n                  <slot name=\"footer\"></slot>\n                </div>\n              </div>\n              <slot v-if=\"$slots['close-button']\" name=\"close-button\"></slot>\n              <!--\n              \t@slot closeButton\n            \t\t@deprecated Use the `close-button` slot instead.\n            \t-->\n              <slot v-else-if=\"$slots.closeButton\" name=\"closeButton\"></slot>\n              <template v-else>\n                <UsaModalCloseButton\n                  v-if=\"!forceAction\"\n                  :aria-label=\"closeButtonLabel\"\n                  @click=\"isVisible = false\"\n                />\n              </template>\n            </div>\n          </div>\n        </div>\n      </div>\n    </UseFocusTrap>\n  </Teleport>\n</template>\n","import { unrefElement, tryOnScopeDispose } from '@vueuse/core';\nimport { ref, watch } from 'vue-demi';\nimport { createFocusTrap } from 'focus-trap';\n\nfunction useFocusTrap(target, options = {}) {\n  let trap;\n  const { immediate, ...focusTrapOptions } = options;\n  const hasFocus = ref(false);\n  const isPaused = ref(false);\n  const activate = (opts) => trap && trap.activate(opts);\n  const deactivate = (opts) => trap && trap.deactivate(opts);\n  const pause = () => {\n    if (trap) {\n      trap.pause();\n      isPaused.value = true;\n    }\n  };\n  const unpause = () => {\n    if (trap) {\n      trap.unpause();\n      isPaused.value = false;\n    }\n  };\n  watch(\n    () => unrefElement(target),\n    (el) => {\n      if (!el)\n        return;\n      trap = createFocusTrap(el, {\n        ...focusTrapOptions,\n        onActivate() {\n          hasFocus.value = true;\n          if (options.onActivate)\n            options.onActivate();\n        },\n        onDeactivate() {\n          hasFocus.value = false;\n          if (options.onDeactivate)\n            options.onDeactivate();\n        }\n      });\n      if (immediate)\n        activate();\n    },\n    { flush: \"post\" }\n  );\n  tryOnScopeDispose(() => deactivate());\n  return {\n    hasFocus,\n    isPaused,\n    activate,\n    deactivate,\n    pause,\n    unpause\n  };\n}\n\nexport { useFocusTrap };\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  visible: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst classes = computed(() => [{ 'is-visible': props.visible }])\n</script>\n\n<template>\n  <div class=\"usa-overlay\" :class=\"classes\"></div>\n</template>\n","<script setup>\nimport {\n  computed,\n  ref,\n  watch,\n  onMounted,\n  onBeforeUnmount,\n  nextTick,\n  inject,\n  h,\n} from 'vue'\nimport { IMAGE_PATH, MOBILE_MENU_BREAKPOINT } from '@/utils/constants.js'\nimport { onKeyStroke, onClickOutside, useMediaQuery } from '@vueuse/core'\nimport { useFocusTrap } from '@vueuse/integrations/useFocusTrap'\nimport UsaOverlay from '@/components/UsaOverlay'\n\nconst imagePath = inject('vueUswds.imagePath', IMAGE_PATH)\nconst mobileMenuBreakpoint = inject(\n  'vueUswds.mobileMenuBreakpoint',\n  MOBILE_MENU_BREAKPOINT,\n)\nconst isExtendedHeader = inject('isExtendedHeader', ref(false))\nconst isMobileMenuOpen = inject('isMobileMenuOpen', ref(false))\nconst mobileMenuId = inject('mobileMenuId')\nconst closeMobileMenu = inject('closeMobileMenu')\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  ariaLabel: {\n    type: String,\n    default: 'Primary navigation',\n  },\n  closeButtonLabel: {\n    type: String,\n    default: 'Close',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        button: [],\n      }\n    },\n  },\n})\n\nconst nav = ref(null)\nconst { activate, deactivate } = useFocusTrap(nav)\nconst isMounted = ref(false)\nconst largeScreenMediaQuery = useMediaQuery(\n  `(min-width: ${mobileMenuBreakpoint})`,\n)\nconst largeScreen = computed(() =>\n  isMounted.value ? largeScreenMediaQuery.value : true,\n)\n\nwatch(isMobileMenuOpen, async isMenuOpen => {\n  if (isMenuOpen) {\n    await nextTick\n    activate()\n  } else {\n    await nextTick\n    deactivate()\n  }\n})\n\nwatch(largeScreen, isLargeScreen => {\n  if (isLargeScreen) {\n    closeMobileMenu()\n  }\n})\n\nonMounted(() => {\n  isMounted.value = true\n})\n\nonBeforeUnmount(() => {\n  if (isMobileMenuOpen.value) {\n    closeMobileMenu()\n  }\n})\n\nonKeyStroke('Escape', () => {\n  if (isMobileMenuOpen.value) {\n    closeMobileMenu()\n  }\n})\n\nonClickOutside(nav, () => {\n  if (isMobileMenuOpen.value) {\n    closeMobileMenu()\n  }\n})\n\nconst classes = computed(() => [\n  {\n    'is-visible': isMobileMenuOpen.value,\n  },\n])\n\nconst UsaNavInnerComponent = {\n  name: 'UsaNavInner',\n  props: {\n    wrap: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup({ wrap }, { slots }) {\n    return () =>\n      wrap\n        ? h('div', { class: 'usa-nav__inner' }, slots.default())\n        : slots.default()\n  },\n}\n</script>\n\n<template>\n  <Teleport to=\"body\" :disabled=\"!isMobileMenuOpen\">\n    <UsaOverlay :visible=\"isMobileMenuOpen\" />\n    <nav\n      :id=\"mobileMenuId\"\n      ref=\"nav\"\n      :aria-label=\"ariaLabel\"\n      class=\"usa-nav\"\n      :class=\"classes\"\n    >\n      <UsaNavInnerComponent :wrap=\"isExtendedHeader\">\n        <button\n          type=\"button\"\n          class=\"usa-nav__close\"\n          :class=\"customClasses?.button\"\n          @click=\"closeMobileMenu\"\n        >\n          <slot name=\"close-button\" :close-button-label=\"closeButtonLabel\"\n            ><img\n              :src=\"`${imagePath}/usa-icons/close.svg`\"\n              role=\"img\"\n              :alt=\"closeButtonLabel\"\n          /></slot>\n        </button>\n        <template v-if=\"largeScreen\">\n          <slot name=\"primary\"></slot>\n          <slot name=\"secondary\"></slot>\n        </template>\n        <template v-else>\n          <slot name=\"secondary\"></slot>\n          <slot name=\"primary\"></slot>\n        </template>\n      </UsaNavInnerComponent>\n    </nav>\n  </Teleport>\n</template>\n","<script setup>\nimport { computed, inject, provide, onBeforeUnmount } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\n\nconst registerDropdown = inject('registerDropdown')\nconst unregisterDropdown = inject('unregisterDropdown')\n\nconst props = defineProps({\n  id: {\n    type: String,\n    default: '',\n  },\n  open: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst dropdownId = computed(() => props.id || nextId('usa-nav-dropdown'))\n\nregisterDropdown(dropdownId.value, props.open)\n\nprovide('dropdownId', dropdownId)\n\nonBeforeUnmount(() => {\n  unregisterDropdown(dropdownId.value)\n})\n</script>\n\n<template>\n  <li class=\"usa-nav__primary-item\">\n    <slot></slot>\n  </li>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, inject, toRef } from 'vue'\nimport { ROUTER_COMPONENT_NAME } from '@/utils/constants.js'\n\nconst globalRouterComponentName = inject(\n  'vueUswds.routerComponentName',\n  ROUTER_COMPONENT_NAME,\n)\nconst dropdownId = inject('dropdownId')\nconst toggleDropdown = inject('toggleDropdown')\nconst dropdownItems = inject('dropdownItems')\n\nconst props = defineProps({\n  href: {\n    type: String,\n    default: '',\n  },\n  to: {\n    type: [String, Object],\n    default: '',\n  },\n  routerComponentName: {\n    type: [String, Object],\n    default: '',\n  },\n})\n\nconst isOpen = toRef(dropdownItems, dropdownId.value)\n\nconst localRouterComponentName = computed(\n  () => props.routerComponentName || globalRouterComponentName,\n)\n\nconst routeLocation = computed(() => props.to || props.href)\n</script>\n\n<template>\n  <component\n    :is=\"localRouterComponentName\"\n    v-if=\"localRouterComponentName\"\n    v-slot=\"slotProps\"\n    :to=\"routeLocation\"\n    custom\n  >\n    <button\n      v-bind=\"$attrs\"\n      type=\"button\"\n      class=\"usa-accordion__button usa-nav__link\"\n      :class=\"[\n        { 'usa-current': slotProps?.isActive || slotProps?.isExactActive },\n      ]\"\n      :aria-expanded=\"isOpen\"\n      :aria-controls=\"dropdownId\"\n      @click=\"toggleDropdown(dropdownId)\"\n    >\n      <span><slot></slot></span>\n    </button>\n  </component>\n  <button\n    v-else\n    v-bind=\"$attrs\"\n    type=\"button\"\n    class=\"usa-accordion__button usa-nav__link\"\n    :aria-expanded=\"isOpen\"\n    :aria-controls=\"dropdownId\"\n    @click=\"toggleDropdown(dropdownId)\"\n  >\n    <span><slot></slot></span>\n  </button>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { inject } from 'vue'\nimport BaseLink from '@/components/BaseLink'\n\nconst closeAllDropdowns = inject('closeAllDropdowns')\nconst closeMobileMenu = inject('closeMobileMenu')\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  href: {\n    type: String,\n    default: '',\n  },\n  to: {\n    type: [String, Object],\n    default: '',\n  },\n  routerComponentName: {\n    type: [String, Object],\n    default: '',\n  },\n})\n</script>\n\n<template>\n  <li class=\"usa-nav__primary-item\">\n    <BaseLink\n      v-bind=\"$attrs\"\n      class=\"usa-nav__link\"\n      :href=\"href\"\n      :to=\"to\"\n      :router-component-name=\"routerComponentName\"\n      @click=\"(closeAllDropdowns(), closeMobileMenu())\"\n    >\n      <span><slot></slot></span>\n    </BaseLink>\n  </li>\n</template>\n","<script setup>\nimport { computed, ref, inject, toRef } from 'vue'\nimport { GRID_NAMESPACE } from '@/utils/constants.js'\n\nconst gridNamespace = inject('vueUswds.gridNamespace', GRID_NAMESPACE)\nconst isMegamenu = inject('isMegamenu', ref(false))\nconst dropdownId = inject('dropdownId')\nconst dropdownItems = inject('dropdownItems')\n\nconst props = defineProps({\n  cols: {\n    type: Number,\n    default: 1,\n    validator(columnCount) {\n      const isValidColumnCount = columnCount >= 1\n\n      if (!isValidColumnCount) {\n        console.warn('Column count must be greater than or equal to 1')\n      }\n\n      return isValidColumnCount\n    },\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        gridRow: [],\n        gridCol: [],\n      }\n    },\n  },\n})\n\nconst classes = computed(() => [{ 'usa-megamenu': isMegamenu.value }])\n\nconst gridClasses = computed(() => [\n  `${gridNamespace}row`,\n  `${gridNamespace}gap-4`,\n  ...(props.customClasses?.gridRow || []),\n])\n\nconst isOpen = toRef(dropdownItems, dropdownId.value)\n</script>\n\n<template>\n  <div\n    v-if=\"isMegamenu\"\n    :id=\"dropdownId\"\n    class=\"usa-nav__submenu\"\n    :class=\"classes\"\n    :hidden=\"!isOpen\"\n  >\n    <div :class=\"gridClasses\">\n      <template v-if=\"cols > 1\">\n        <div\n          v-for=\"col in cols\"\n          :key=\"col\"\n          class=\"usa-col\"\n          :class=\"customClasses?.gridCol\"\n        >\n          <ul class=\"usa-nav__submenu-list\">\n            <slot :name=\"`col-${col}`\"></slot>\n          </ul>\n        </div>\n      </template>\n      <div v-else class=\"usa-col\" :class=\"customClasses?.gridCol\">\n        <ul class=\"usa-nav__submenu-list\">\n          <slot></slot>\n        </ul>\n      </div>\n    </div>\n  </div>\n  <ul\n    v-else\n    :id=\"dropdownId\"\n    class=\"usa-nav__submenu\"\n    :class=\"classes\"\n    :hidden=\"!isOpen\"\n  >\n    <slot></slot>\n  </ul>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { inject } from 'vue'\nimport BaseLink from '@/components/BaseLink'\n\nconst dropdownId = inject('dropdownId')\nconst closeDropdown = inject('closeDropdown')\nconst closeMobileMenu = inject('closeMobileMenu')\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  href: {\n    type: String,\n    default: '',\n  },\n  to: {\n    type: [String, Object],\n    default: '',\n  },\n  routerComponentName: {\n    type: [String, Object],\n    default: '',\n  },\n})\n</script>\n\n<template>\n  <li class=\"usa-nav__submenu-item\">\n    <BaseLink\n      v-bind=\"$attrs\"\n      :href=\"href\"\n      :to=\"to\"\n      :router-component-name=\"routerComponentName\"\n      @click=\"(closeDropdown(dropdownId), closeMobileMenu())\"\n      ><slot></slot\n    ></BaseLink>\n  </li>\n</template>\n","<script setup>\nimport { ref, computed, reactive, watch, provide, inject } from 'vue'\nimport { MOBILE_MENU_BREAKPOINT } from '@/utils/constants.js'\nimport { onKeyStroke, useMediaQuery, onClickOutside } from '@vueuse/core'\nimport { useAccordion } from '@/composables/useAccordion.js'\nimport UsaNavPrimaryItem from '@/components/UsaNavPrimaryItem'\nimport UsaNavDropdown from '@/components/UsaNavDropdown'\nimport UsaNavDropdownButton from '@/components/UsaNavDropdownButton'\nimport UsaNavSubmenu from '@/components/UsaNavSubmenu'\nimport UsaNavSubmenuItem from '@/components/UsaNavSubmenuItem'\n\nconst mobileMenuBreakpoint = inject(\n  'vueUswds.mobileMenuBreakpoint',\n  MOBILE_MENU_BREAKPOINT,\n)\nconst isMegamenu = inject('isMegamenu', ref(false))\n\nconst emit = defineEmits(['update:items'])\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  items: {\n    type: Array,\n    default: () => [],\n  },\n})\n\nconst nav = ref(null)\nconst largeScreen = useMediaQuery(`(min-width: ${mobileMenuBreakpoint})`)\nconst isMultiSelectable = computed(() => !largeScreen.value)\nconst dropdownItems = reactive({})\n\nconst {\n  registerAccordionItem,\n  unregisterAccordionItem,\n  closeItem,\n  toggleItem,\n  closeAllItems,\n} = useAccordion(dropdownItems, isMultiSelectable)\n\nwatch(dropdownItems, () => {\n  emit('update:items', dropdownItems)\n})\n\nwatch(largeScreen, closeAllItems)\n\nprovide('registerDropdown', registerAccordionItem)\nprovide('unregisterDropdown', unregisterAccordionItem)\nprovide('toggleDropdown', toggleItem)\nprovide('closeDropdown', closeItem)\nprovide('closeAllDropdowns', closeAllItems)\nprovide('dropdownItems', dropdownItems)\n\nonKeyStroke('Escape', closeAllItems)\n\nonClickOutside(nav, closeAllItems)\n</script>\n\n<template>\n  <ul ref=\"nav\" class=\"usa-nav__primary usa-accordion\">\n    <slot :items=\"items\">\n      <template v-for=\"item in items\">\n        <UsaNavDropdown\n          v-if=\"item?.children?.length\"\n          :id=\"item?.id\"\n          :key=\"item?.id || item.text\"\n        >\n          <UsaNavDropdownButton\n            v-bind=\"item?.attrs\"\n            :href=\"item?.href\"\n            :to=\"item?.to\"\n            :router-component-name=\"item?.routerComponentName\"\n            >{{ item.text }}</UsaNavDropdownButton\n          >\n          <UsaNavSubmenu\n            v-if=\"item?.cols > 1 && isMegamenu\"\n            :key=\"item.children.map(item => item?.id || item.text).join('-')\"\n            :cols=\"item.cols\"\n          >\n            <template v-for=\"n in item.cols\" :key=\"n\" #[`col-${n}`]>\n              <template v-for=\"submenuItem in item.children\">\n                <UsaNavSubmenuItem\n                  v-if=\"submenuItem?.col === n\"\n                  v-bind=\"submenuItem?.attrs\"\n                  :key=\"submenuItem?.id || submenuItem.text\"\n                  :href=\"submenuItem?.href\"\n                  :to=\"submenuItem?.to\"\n                  :router-component-name=\"submenuItem?.routerComponentName\"\n                  >{{ submenuItem.text }}</UsaNavSubmenuItem\n                >\n              </template>\n            </template>\n          </UsaNavSubmenu>\n          <template v-else>\n            <UsaNavSubmenu\n              :key=\"item.children.map(item => item?.id || item.text).join('-')\"\n            >\n              <UsaNavSubmenuItem\n                v-for=\"submenuItem in item.children\"\n                v-bind=\"submenuItem?.attrs\"\n                :key=\"submenuItem?.id || submenuItem.text\"\n                :href=\"submenuItem?.href\"\n                :to=\"submenuItem?.to\"\n                :router-component-name=\"submenuItem?.routerComponentName\"\n                >{{ submenuItem.text }}</UsaNavSubmenuItem\n              >\n            </UsaNavSubmenu>\n          </template>\n        </UsaNavDropdown>\n        <template v-else>\n          <UsaNavPrimaryItem\n            :key=\"item?.id || item.text\"\n            v-bind=\"item?.attrs\"\n            :href=\"item?.href\"\n            :to=\"item?.to\"\n            :router-component-name=\"item?.routerComponentName\"\n            >{{ item.text }}</UsaNavPrimaryItem\n          >\n        </template>\n      </template>\n    </slot>\n  </ul>\n</template>\n","<script setup>\nimport { inject } from 'vue'\nimport BaseLink from '@/components/BaseLink'\n\nconst isExtendedHeader = inject('isExtendedHeader', false)\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  items: {\n    type: Array,\n    default: () => [],\n  },\n})\n</script>\n\n<template>\n  <div v-if=\"isExtendedHeader\" class=\"usa-nav__secondary\">\n    <ul class=\"usa-nav__secondary-links\">\n      <slot :items=\"items\">\n        <li\n          v-for=\"item in items\"\n          :key=\"item?.id || item.text\"\n          class=\"usa-nav__secondary-item\"\n        >\n          <BaseLink\n            :to=\"item.to\"\n            :href=\"item.href\"\n            :router-component-name=\"item.routerComponentName\"\n            >{{ item.text }}</BaseLink\n          >\n        </li>\n      </slot>\n    </ul>\n    <slot name=\"search\"></slot>\n  </div>\n  <slot v-else name=\"search\"></slot>\n</template>\n","<script setup>\nimport { watch, inject } from 'vue'\n\nconst mobileMenuId = inject('mobileMenuId')\nconst isMobileMenuOpen = inject('isMobileMenuOpen')\nconst toggleMobileMenu = inject('toggleMobileMenu')\n\nconst emit = defineEmits(['mobileMenuOpen'])\n\n// Un-used `props` variable needed for code coverage to be instrumented.\n// eslint-disable-next-line no-unused-vars\nconst props = defineProps({\n  menuButtonLabel: {\n    type: String,\n    default: 'Menu',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        button: [],\n      }\n    },\n  },\n})\n\nwatch(isMobileMenuOpen, isOpen => {\n  emit('mobileMenuOpen', isOpen)\n})\n</script>\n\n<template>\n  <div class=\"usa-navbar\">\n    <slot></slot>\n    <button\n      type=\"button\"\n      class=\"usa-menu-btn\"\n      :class=\"customClasses?.button\"\n      :aria-controls=\"mobileMenuId\"\n      @click=\"toggleMobileMenu\"\n      ><slot name=\"menu-button\" :menu-button-label=\"menuButtonLabel\">{{\n        menuButtonLabel\n      }}</slot></button\n    >\n  </div>\n</template>\n","import { ref, computed, readonly } from 'vue'\n\nexport function usePagination(_currentPage, totalPages, _unbounded, emit) {\n  const currentPage = ref(_currentPage)\n  const unbounded = ref(_unbounded)\n\n  const pageRange = computed(() => {\n    const range = []\n\n    for (let i = 1; i <= totalPages.value; i++) {\n      range.push(i)\n    }\n\n    return range\n  })\n\n  const visiblePageRange = computed(() => {\n    // If there are less that seven pages we can just show all of them.\n    if (totalPages.value <= 7) {\n      return pageRange.value\n    }\n\n    // If the current page is <= 5, show all the starting pages.\n    if (currentPage.value - 3 <= 1) {\n      const range = pageRange.value.slice(0, 7)\n\n      // Always set the last slot to show the last page.\n      range[range.length - 1] = totalPages.value\n\n      return range\n    }\n\n    // If the current page is <= (totalPages - 3), show all the ending pages.\n    if (currentPage.value + 3 >= totalPages.value) {\n      const range = pageRange.value.slice(\n        totalPages.value - 7,\n        totalPages.value,\n      )\n\n      // Always set the first slot to show the first page.\n      range[0] = 1\n\n      return range\n    }\n\n    // If we aren't at the start or end, show the pages surrounding\n    // the current page.\n    const range = pageRange.value.slice(\n      currentPage.value - 4,\n      currentPage.value + 3,\n    )\n\n    // If in bounded mode, always set the last slot to show the last page.\n    if (!unbounded.value) {\n      range[range.length - 1] = totalPages.value\n    }\n\n    // Always set the first slot to show the first page.\n    range[0] = 1\n\n    return range\n  })\n\n  const isFirstPage = computed(() => {\n    return currentPage.value === 1\n  })\n\n  const isLastPage = computed(() => {\n    return currentPage.value === totalPages.value\n  })\n\n  const isOverflowSlot = index => {\n    if (totalPages.value <= 7) {\n      return false\n    }\n\n    if (\n      (index === 1 && currentPage.value > 4) ||\n      (!unbounded.value &&\n        index === 5 &&\n        totalPages.value - currentPage.value > 3) ||\n      (unbounded.value && index === 6 && currentPage.value !== totalPages.value)\n    ) {\n      return true\n    }\n  }\n\n  const updateCurrentPage = number => {\n    emit('update:currentPage', number)\n  }\n\n  const toFirstPage = () => {\n    updateCurrentPage(1)\n  }\n\n  const toPreviousPage = () => {\n    updateCurrentPage(currentPage.value - 1)\n  }\n\n  const toNextPage = () => {\n    updateCurrentPage(currentPage.value + 1)\n  }\n\n  const toLastPage = () => {\n    updateCurrentPage(totalPages.value)\n  }\n\n  return {\n    currentPage: readonly(currentPage),\n    unbounded: readonly(unbounded),\n    totalPages,\n    isFirstPage,\n    isLastPage,\n    isOverflowSlot,\n    toFirstPage,\n    toLastPage,\n    toNextPage,\n    toPreviousPage,\n    updateCurrentPage,\n    visiblePageRange,\n  }\n}\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { SVG_SPRITE_PATH } from '@/utils/constants.js'\nimport BaseLink from '@/components/BaseLink'\n\nconst svgSpritePath = inject('vueUswds.svgSpritePath', SVG_SPRITE_PATH)\n\nconst props = defineProps({\n  direction: {\n    type: String,\n    default: 'previous',\n    validator(direction) {\n      return ['previous', 'next'].includes(direction)\n    },\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  ariaLabel: {\n    type: String,\n    required: true,\n  },\n  href: {\n    type: String,\n    default: undefined,\n  },\n  to: {\n    type: [String, Object],\n    default: undefined,\n  },\n  routerComponentName: {\n    type: [String, Object],\n    default: undefined,\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        link: [],\n        text: [],\n      }\n    },\n  },\n})\n\nconst componentTag = computed(() =>\n  props.routerComponentName || props.to || props.href ? BaseLink : 'button',\n)\n\nconst classes = computed(() => [\n  {\n    'usa-pagination__previous-page': props.direction === 'previous',\n    'usa-pagination__next-page': props.direction === 'next',\n    'usa-button--unstyled': componentTag.value === 'button',\n  },\n  props.customClasses.link,\n])\n</script>\n\n<template>\n  <li class=\"usa-pagination__item usa-pagination__arrow\">\n    <component\n      :is=\"componentTag\"\n      :href=\"href\"\n      :to=\"to\"\n      :router-component-name=\"routerComponentName\"\n      :aria-label=\"ariaLabel\"\n      :class=\"classes\"\n      class=\"usa-pagination__link\"\n    >\n      <slot\n        v-if=\"direction === 'previous'\"\n        name=\"before\"\n        :svg-sprite-path=\"svgSpritePath\"\n      >\n        <svg\n          v-if=\"svgSpritePath\"\n          class=\"usa-icon\"\n          aria-hidden=\"true\"\n          role=\"img\"\n        >\n          <use :href=\"`${svgSpritePath}#navigate_before`\"></use>\n        </svg>\n      </slot>\n      <span class=\"usa-pagination__link-text\" :class=\"customClasses?.text\"\n        ><slot>{{ label }}</slot></span\n      >\n      <slot\n        v-if=\"direction === 'next'\"\n        name=\"after\"\n        :svg-sprite-path=\"svgSpritePath\"\n      >\n        <svg\n          v-if=\"svgSpritePath\"\n          class=\"usa-icon\"\n          aria-hidden=\"true\"\n          role=\"img\"\n        >\n          <use :href=\"`${svgSpritePath}#navigate_next`\"></use>\n        </svg>\n      </slot>\n    </component>\n  </li>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BaseLink from '@/components/BaseLink'\n\nconst props = defineProps({\n  pageNumber: {\n    type: Number,\n    required: true,\n    validator(pageNumber) {\n      return pageNumber > 0\n    },\n  },\n  isCurrentPage: {\n    type: Boolean,\n    default: false,\n  },\n  ariaLabel: {\n    type: String,\n    required: true,\n  },\n  href: {\n    type: String,\n    default: undefined,\n  },\n  to: {\n    type: [String, Object],\n    default: undefined,\n  },\n  routerComponentName: {\n    type: [String, Object],\n    default: undefined,\n  },\n})\n\nconst componentTag = computed(() =>\n  props.routerComponentName || props.to || props.href ? BaseLink : 'button',\n)\n\nconst ariaCurrent = computed(() => (props.isCurrentPage ? 'page' : null))\n\nconst classes = computed(() => [\n  {\n    'usa-current': props.isCurrentPage,\n    'usa-button--unstyled': componentTag.value === 'button',\n  },\n])\n</script>\n\n<template>\n  <li class=\"usa-pagination__item usa-pagination__page-no\">\n    <component\n      :is=\"componentTag\"\n      :href=\"href\"\n      :to=\"to\"\n      :router-component-name=\"routerComponentName\"\n      :aria-label=\"ariaLabel\"\n      :aria-current=\"ariaCurrent\"\n      :class=\"classes\"\n      class=\"usa-pagination__button\"\n      ><slot>{{ pageNumber }}</slot></component\n    >\n  </li>\n</template>\n","<script setup>\nimport { computed, toRef, useSlots } from 'vue'\nimport { usePagination } from '@/composables/usePagination.js'\nimport UsaPaginationArrow from '@/components/UsaPaginationArrow'\nimport UsaPaginationItem from '@/components/UsaPaginationItem'\n\nconst slots = useSlots()\n\nif (slots?.previousIcon) {\n  console.warn(\n    `The 'previousIcon' slot is deprecated, use 'previous-icon' instead.`,\n  )\n}\n\nif (slots?.previousLabel) {\n  console.warn(\n    `The 'previousLabel' slot is deprecated, use 'previous-label' instead.`,\n  )\n}\n\nif (slots?.nextIcon) {\n  console.warn(`The 'nextIcon' slot is deprecated, use 'next-icon' instead.`)\n}\n\nif (slots?.nextLabel) {\n  console.warn(`The 'nextLabel' slot is deprecated, use 'next-label' instead.`)\n}\n\nconst emit = defineEmits(['update:currentPage'])\n\nconst props = defineProps({\n  items: {\n    type: Array,\n    default: () => [],\n  },\n  unbounded: {\n    type: Boolean,\n    default: false,\n  },\n  // @TODO: v2 switch to `modelValue`.\n  currentPage: {\n    type: Number,\n    default: 1,\n    validator(currentPage) {\n      return currentPage > 0\n    },\n  },\n  ariaLabel: {\n    type: String,\n    default: 'Pagination',\n  },\n  previousLinkText: {\n    type: String,\n    default: 'Previous',\n  },\n  nextLinkText: {\n    type: String,\n    default: 'Next',\n  },\n  firstPageAriaLabel: {\n    type: String,\n    default: 'First page, page %s',\n  },\n  previousPageAriaLabel: {\n    type: String,\n    default: 'Previous page',\n  },\n  numberPageAriaLabel: {\n    type: String,\n    default: 'Page %s',\n  },\n  nextPageAriaLabel: {\n    type: String,\n    default: 'Next page',\n  },\n  lastPageAriaLabel: {\n    type: String,\n    default: 'Last page, page %s',\n  },\n  overflowAriaLabel: {\n    type: String,\n    default: 'ellipsis indicating non-visible pages',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        list: [],\n      }\n    },\n  },\n})\n\nconst totalItems = computed(() => {\n  return props.items.length\n})\n\nconst {\n  currentPage,\n  totalPages,\n  isFirstPage,\n  isLastPage,\n  isOverflowSlot,\n  visiblePageRange,\n  toPreviousPage,\n  toNextPage,\n  updateCurrentPage,\n} = usePagination(\n  toRef(props, 'currentPage'),\n  totalItems,\n  toRef(props, 'unbounded'),\n  emit,\n)\n\nfunction getAriaLabel(pageNumber) {\n  if (pageNumber === 1) {\n    if (props.firstPageAriaLabel.includes('#')) {\n      console.warn(`The '#' placeholder is deprecated, use '%s' instead.`)\n      return props.firstPageAriaLabel.replaceAll('#', pageNumber)\n    }\n    return props.firstPageAriaLabel.replaceAll('%s', pageNumber)\n  }\n\n  if (pageNumber === totalPages.value) {\n    if (props.lastPageAriaLabel.includes('#')) {\n      console.warn(`The '#' placeholder is deprecated, use '%s' instead.`)\n      return props.lastPageAriaLabel.replaceAll('#', pageNumber)\n    }\n    return props.lastPageAriaLabel.replaceAll('%s', pageNumber)\n  }\n\n  if (props.numberPageAriaLabel.includes('#')) {\n    console.warn(`The '#' placeholder is deprecated, use '%s' instead.`)\n    return props.numberPageAriaLabel.replaceAll('#', pageNumber)\n  }\n  return props.numberPageAriaLabel.replaceAll('%s', pageNumber)\n}\n</script>\n\n<template>\n  <nav :aria-label=\"ariaLabel\" class=\"usa-pagination\">\n    <ul class=\"usa-pagination__list\" :class=\"customClasses?.list\">\n      <slot\n        name=\"previous\"\n        :is-first-page=\"isFirstPage\"\n        :to-previous-page=\"toPreviousPage\"\n      >\n        <UsaPaginationArrow\n          v-show=\"!isFirstPage\"\n          direction=\"previous\"\n          :class=\"{ 'usa-pagination__item--hidden': isFirstPage }\"\n          :aria-label=\"previousPageAriaLabel\"\n          :href=\"items?.[currentPage - 2]?.href || null\"\n          :to=\"items?.[currentPage - 2]?.to || null\"\n          :router-component-name=\"\n            items?.[currentPage - 2]?.routerComponentName || null\n          \"\n          @click=\"toPreviousPage()\"\n        >\n          <template #before=\"{ svgSpritePath }\">\n            <slot v-if=\"$slots['previous-icon']\" name=\"previous-icon\"></slot>\n            <!--\n            \t@slot previousIcon\n          \t\t@deprecated Use the `previous-icon` slot instead.\n          \t-->\n            <slot v-else-if=\"$slots.previousIcon\" name=\"previousIcon\"></slot>\n            <template v-else>\n              <svg\n                v-if=\"svgSpritePath\"\n                class=\"usa-icon\"\n                aria-hidden=\"true\"\n                role=\"img\"\n              >\n                <use :href=\"`${svgSpritePath}#navigate_before`\"></use>\n              </svg>\n            </template>\n          </template>\n          <template #default>\n            <slot v-if=\"$slots['previous-label']\" name=\"previous-label\"></slot>\n            <!--\n            \t@slot previousLabel\n          \t\t@deprecated Use the `previous-label` slot instead.\n          \t-->\n            <slot v-else-if=\"$slots.previousLabel\" name=\"previousLabel\"></slot>\n            <template v-else>{{ previousLinkText }}</template>\n          </template>\n        </UsaPaginationArrow>\n      </slot>\n\n      <template\n        v-for=\"(pageNumber, index) in visiblePageRange\"\n        :key=\"pageNumber\"\n      >\n        <li\n          v-if=\"isOverflowSlot(index)\"\n          class=\"usa-pagination__item usa-pagination__overflow\"\n          :aria-label=\"overflowAriaLabel\"\n        >\n          <span>&hellip;</span>\n        </li>\n\n        <UsaPaginationItem\n          v-else\n          :page-number=\"pageNumber\"\n          :is-current-page=\"pageNumber === currentPage\"\n          :aria-label=\"getAriaLabel(pageNumber)\"\n          :href=\"items?.[index]?.href || null\"\n          :to=\"items?.[index]?.to || null\"\n          :router-component-name=\"items?.[index]?.routerComponentName || null\"\n          @click=\"updateCurrentPage(pageNumber)\"\n          >{{ pageNumber }}</UsaPaginationItem\n        >\n      </template>\n\n      <slot name=\"next\" :is-last-page=\"isLastPage\" :to-next-page=\"toNextPage\">\n        <UsaPaginationArrow\n          v-show=\"!isLastPage\"\n          direction=\"next\"\n          :class=\"{ 'usa-pagination__item--hidden': isLastPage }\"\n          :aria-label=\"nextPageAriaLabel\"\n          :href=\"items?.[currentPage]?.href || null\"\n          :to=\"items?.[currentPage]?.to || null\"\n          :router-component-name=\"\n            items?.[currentPage]?.routerComponentName || null\n          \"\n          @click=\"toNextPage()\"\n        >\n          <template #after=\"{ svgSpritePath }\">\n            <slot v-if=\"$slots['next-icon']\" name=\"next-icon\"></slot>\n            <!--\n            \t@slot nextIcon\n          \t\t@deprecated Use the `next-icon` slot instead.\n          \t-->\n            <slot v-else-if=\"$slots.nextIcon\" name=\"nextIcon\"></slot>\n            <template v-else>\n              <svg\n                v-if=\"svgSpritePath\"\n                class=\"usa-icon\"\n                aria-hidden=\"true\"\n                role=\"img\"\n              >\n                <use :href=\"`${svgSpritePath}#navigate_next`\"></use>\n              </svg>\n            </template>\n          </template>\n          <template #default>\n            <slot v-if=\"$slots['next-label']\" name=\"next-label\"></slot>\n            <!--\n            \t@slot nextLabel\n          \t\t@deprecated Use the `next-label` slot instead.\n          \t-->\n            <slot v-else-if=\"$slots.nextLabel\" name=\"nextLabel\"></slot>\n            <template v-else>{{ nextLinkText }}</template>\n          </template>\n        </UsaPaginationArrow>\n      </slot>\n    </ul>\n  </nav>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, ref, provide } from 'vue'\n\nconst props = defineProps({\n  showText: {\n    type: String,\n    default: 'Show password',\n  },\n  hideText: {\n    type: String,\n    default: 'Hide password',\n  },\n})\n\nconst isVisible = ref(false)\nconst inputIds = ref({})\n\nconst currentInputType = computed(() => {\n  return isVisible.value ? 'text' : 'password'\n})\n\nconst currentLabel = computed(() => {\n  return isVisible.value ? props.hideText : props.showText\n})\n\nconst ariaControls = computed(() => {\n  if (Object.keys(inputIds.value).length) {\n    return Object.keys(inputIds.value).join(' ')\n  }\n\n  return ''\n})\n\nconst registerInput = id => {\n  if (!inputIds.value[id]) {\n    inputIds.value[id] = true\n  }\n}\n\nconst unregisterInput = id => {\n  if (inputIds.value[id]) {\n    delete inputIds.value[id]\n  }\n}\n\nprovide('registerInput', registerInput)\nprovide('unregisterInput', unregisterInput)\n</script>\n\n<template>\n  <slot :type=\"currentInputType\"></slot>\n  <button\n    v-bind=\"$attrs\"\n    type=\"button\"\n    class=\"usa-show-password usa-button usa-button--unstyled\"\n    :aria-controls=\"ariaControls\"\n    :aria-pressed=\"isVisible\"\n    @click=\"isVisible = !isVisible\"\n    >{{ currentLabel }}</button\n  >\n</template>\n","<script setup>\nimport { provide, computed } from 'vue'\n\nconst props = defineProps({\n  headingTag: {\n    type: String,\n    default: '',\n  },\n})\n\nprovide(\n  'listHeadingTag',\n  computed(() => props.headingTag),\n)\n</script>\n\n<template>\n  <ol class=\"usa-process-list\">\n    <slot></slot>\n  </ol>\n</template>\n","<script setup>\nimport { inject, computed } from 'vue'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst listHeadingTag = inject('listHeadingTag')\n\nconst props = defineProps({\n  heading: {\n    type: String,\n    default: '',\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        heading: [],\n      }\n    },\n  },\n})\n\nconst computedHeadingTag = computed(\n  () => listHeadingTag.value || props.headingTag,\n)\n</script>\n\n<template>\n  <li class=\"usa-process-list__item\">\n    <BaseHeading\n      v-if=\"heading || $slots.heading\"\n      class=\"usa-process-list__heading\"\n      :class=\"customClasses?.heading\"\n      :tag=\"computedHeadingTag\"\n      ><slot name=\"heading\">{{ heading }}</slot></BaseHeading\n    >\n    <slot></slot>\n  </li>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  tile: {\n    type: Boolean,\n    default: false,\n  },\n  modelValue: {\n    type: undefined,\n    default: '',\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  description: {\n    type: String,\n    default: '',\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        component: [],\n        label: [],\n        description: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-radio'))\n\nconst radioValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-radio__input--tile': props.tile,\n  },\n])\n</script>\n\n<template>\n  <div class=\"usa-radio\" :class=\"customClasses?.component\">\n    <input\n      v-bind=\"$attrs\"\n      :id=\"computedId\"\n      v-model=\"radioValue\"\n      class=\"usa-radio__input\"\n      type=\"radio\"\n      :class=\"classes\"\n    />\n    <label\n      :htmlFor=\"computedId\"\n      class=\"usa-radio__label\"\n      :class=\"customClasses?.label\"\n      ><slot>{{ label }}</slot>\n      <span\n        v-if=\"description || $slots.description\"\n        class=\"usa-radio__label-description\"\n        :class=\"customClasses?.description\"\n        ><slot name=\"description\">{{ description }}</slot></span\n      >\n    </label>\n  </div>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, useSlots } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport UsaFormGroup from '@/components/UsaFormGroup'\nimport UsaLabel from '@/components/UsaLabel'\n\nconst slots = useSlots()\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  min: {\n    type: Number,\n    default: 0,\n  },\n  max: {\n    type: Number,\n    default: 100,\n  },\n  unit: {\n    type: String,\n    default: '',\n  },\n  preposition: {\n    type: String,\n    default: 'of',\n  },\n  modelValue: {\n    type: [String, Number],\n    default: '',\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        component: [],\n        label: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-range'))\nconst computedErrorMessageId = computed(\n  () => `${computedId.value}-error-message`,\n)\nconst computedHintId = computed(() => `${computedId.value}-hint`)\n\nconst rangeValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n  },\n})\n\nconst classes = computed(() => [{ 'usa-input--error': props.error }])\n\nconst ariaDescribedby = computed(() => {\n  const ids = []\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.length ? ids.join(' ') : null\n})\n\nconst callout = computed(() => {\n  if (!rangeValue.value && rangeValue.value !== 0) {\n    return null\n  }\n\n  if (props.unit) {\n    return `${rangeValue.value} ${props.unit} ${props.preposition} ${props.max}`\n  }\n\n  return `${rangeValue.value} ${props.preposition} ${props.max}`\n})\n</script>\n\n<template>\n  <UsaFormGroup\n    :group=\"!!$slots.hint || (error && !!$slots['error-message'])\"\n    :error=\"error\"\n    :class=\"props.customClasses?.component\"\n  >\n    <UsaLabel\n      v-if=\"label || $slots.label\"\n      :for=\"computedId\"\n      :required=\"required\"\n      :error=\"error\"\n      :class=\"customClasses?.label\"\n      ><slot name=\"label\">{{ label }}</slot></UsaLabel\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n\n    <input\n      v-bind=\"$attrs\"\n      :id=\"computedId\"\n      v-model=\"rangeValue\"\n      class=\"usa-range\"\n      :class=\"classes\"\n      type=\"range\"\n      :min=\"min\"\n      :max=\"max\"\n      :aria-valuetext=\"callout\"\n      :required=\"required\"\n      :aria-describedby=\"ariaDescribedby\"\n    />\n  </UsaFormGroup>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport { IMAGE_PATH } from '@/utils/constants.js'\nimport { nextId } from '@/utils/unique-id.js'\nimport UsaButton from '@/components/UsaButton'\nimport UsaTextInput from '@/components/UsaTextInput'\n\nconst imagePath = inject('vueUswds.imagePath', IMAGE_PATH)\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  variant: {\n    type: String,\n    default: 'medium',\n    validator(variant) {\n      const isValidVariantSize = ['small', 'medium', 'big'].includes(variant)\n\n      if (!isValidVariantSize) {\n        console.warn(`'${variant}' is not a valid search variant`)\n      }\n\n      return isValidVariantSize\n    },\n  },\n  modelValue: {\n    type: String,\n    default: '',\n  },\n  modelModifiers: {\n    type: Object,\n    default: () => {},\n  },\n  label: {\n    type: String,\n    default: 'Search',\n  },\n  buttonLabel: {\n    type: String,\n    default: 'Search',\n  },\n  inputAttrs: {\n    type: Object,\n    default: () => {},\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  name: {\n    type: String,\n    default: 'search',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        label: ['usa-sr-only'],\n        input: [],\n        button: [],\n        icon: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-search'))\n\nconst classes = computed(() => [\n  {\n    'usa-search--small': props.variant === 'small',\n    'usa-search--medium': props.variant === 'medium',\n    'usa-search--big': props.variant === 'big',\n  },\n])\n\nconst searchValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n  },\n})\n</script>\n\n<template>\n  <form class=\"usa-search\" role=\"search\" :class=\"classes\">\n    <UsaTextInput\n      v-bind=\"inputAttrs\"\n      :id=\"computedId\"\n      v-model=\"searchValue\"\n      :model-modifiers=\"modelModifiers\"\n      type=\"search\"\n      :name=\"name\"\n      :label=\"label\"\n      :class=\"customClasses?.input\"\n      :custom-classes=\"customClasses\"\n    />\n    <UsaButton type=\"submit\" :class=\"customClasses?.button\">\n      <span\n        v-if=\"variant === 'medium' || variant === 'big'\"\n        class=\"usa-search__submit-text\"\n        >{{ buttonLabel }}</span\n      >\n      <slot name=\"icon\">\n        <img\n          :src=\"`${imagePath}/usa-icons-bg/search--white.svg`\"\n          class=\"usa-search__submit-icon\"\n          :class=\"customClasses?.icon\"\n          :alt=\"buttonLabel\"\n        />\n      </slot>\n    </UsaButton>\n  </form>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport UsaAlert from '@/components/UsaAlert'\n\nconst props = defineProps({\n  variant: {\n    type: String,\n    default: 'emergency',\n    validator(variant) {\n      const isValidVariant = ['info', 'emergency'].includes(variant)\n\n      if (!isValidVariant) {\n        console.warn(`'${variant}' is not a valid site alert variant`)\n      }\n\n      return isValidVariant\n    },\n  },\n  slim: {\n    type: Boolean,\n    default: false,\n  },\n  noIcon: {\n    type: Boolean,\n    default: false,\n  },\n  role: {\n    type: String,\n    default: '',\n  },\n  heading: {\n    type: String,\n    default: '',\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        root: [],\n        body: [],\n        heading: [],\n      }\n    },\n  },\n  ariaLabel: {\n    type: String,\n    default: 'Site alert',\n  },\n})\n\nconst classes = computed(() => [\n  {\n    'usa-site-alert--slim': props.slim,\n    'usa-site-alert--no-icon': props.noIcon,\n    'usa-site-alert--info': props.variant === 'info',\n    'usa-site-alert--emergency': props.variant === 'emergency',\n  },\n])\n</script>\n\n<template>\n  <section class=\"usa-site-alert\" :class=\"classes\" :aria-label=\"ariaLabel\">\n    <UsaAlert\n      :class=\"customClasses?.root\"\n      :slim=\"slim\"\n      :role=\"role\"\n      :heading=\"heading\"\n      :heading-tag=\"headingTag\"\n      :custom-classes=\"customClasses\"\n    >\n      <template v-if=\"$slots.heading\" #heading\n        ><slot name=\"heading\">{{ heading }}</slot></template\n      >\n      <template v-if=\"$slots.message\" #message>\n        <slot name=\"message\"></slot>\n      </template>\n      <template v-else #default><slot></slot></template>\n    </UsaAlert>\n  </section>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  status: {\n    type: String,\n    default: '',\n    validator(status) {\n      return ['current', 'completed', ''].includes(status)\n    },\n  },\n  label: {\n    type: String,\n    required: true,\n  },\n})\n\nconst statusLabel = computed(() => {\n  if (props.status === 'current') {\n    return null\n  }\n\n  return props.status === 'completed' ? props.status : 'not completed'\n})\n\nconst classes = computed(() => [\n  {\n    'usa-step-indicator__segment--complete': props.status === 'completed',\n    'usa-step-indicator__segment--current': props.status === 'current',\n  },\n])\n</script>\n\n<template>\n  <li\n    class=\"usa-step-indicator__segment\"\n    :class=\"classes\"\n    :aria-current=\"status === 'current' || null\"\n  >\n    <span class=\"usa-step-indicator__segment-label\"\n      >{{ label }}\n      <span v-if=\"statusLabel\" class=\"usa-sr-only\">{{\n        statusLabel\n      }}</span></span\n    >\n  </li>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst props = defineProps({\n  currentStepNumber: {\n    type: Number,\n    required: true,\n    validator(currentStepNumber) {\n      return currentStepNumber > 0\n    },\n  },\n  currentStepLabel: {\n    type: String,\n    required: true,\n  },\n  totalSteps: {\n    type: Number,\n    required: true,\n    validator(currentStepNumber) {\n      return currentStepNumber > 0\n    },\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        heading: [],\n        counter: [],\n        label: [],\n      }\n    },\n  },\n})\n\nconst calculatedStepNumber = computed(() =>\n  props.currentStepNumber > 0\n    ? Math.min(props.currentStepNumber, props.totalSteps)\n    : 1,\n)\n</script>\n\n<template>\n  <div class=\"usa-step-indicator__header\">\n    <BaseHeading\n      class=\"usa-step-indicator__heading\"\n      :class=\"customClasses?.heading\"\n      :tag=\"headingTag\"\n    >\n      <span\n        class=\"usa-step-indicator__heading-counter\"\n        :class=\"customClasses?.counter\"\n      >\n        <span class=\"usa-sr-only\">Step</span>\n        <span class=\"usa-step-indicator__current-step\">{{\n          calculatedStepNumber\n        }}</span>\n        <span class=\"usa-step-indicator__total-steps\">\n          of {{ totalSteps }}\n        </span>\n      </span>\n      <span\n        class=\"usa-step-indicator__heading-text\"\n        :class=\"customClasses?.label\"\n        ><slot>{{ currentStepLabel }}</slot></span\n      >\n    </BaseHeading>\n  </div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport UsaStepIndicatorSegment from '@/components/UsaStepIndicatorSegment'\nimport UsaStepIndicatorHeader from '@/components/UsaStepIndicatorHeader'\n\nconst props = defineProps({\n  steps: {\n    type: Array,\n    default: () => [],\n  },\n  currentStepNumber: {\n    type: Number,\n    default: 1,\n    validator(currentStepNumber) {\n      return currentStepNumber > 0\n    },\n  },\n  counters: {\n    type: Boolean,\n    default: false,\n  },\n  smallCounters: {\n    type: Boolean,\n    default: false,\n  },\n  center: {\n    type: Boolean,\n    default: false,\n  },\n  noLabels: {\n    type: Boolean,\n    default: false,\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        list: [],\n        segment: [],\n        header: [],\n      }\n    },\n  },\n})\n\nconst totalSteps = computed(() => props.steps.length)\n\nconst currentStepLabel = computed(() => {\n  if (props.currentStepNumber > totalSteps.value) {\n    return props.steps[totalSteps.value - 1]\n  }\n\n  if (props.steps[props.currentStepNumber - 1]) {\n    return props.steps[props.currentStepNumber - 1]\n  }\n\n  return ''\n})\n\nconst classes = computed(() => [\n  {\n    'usa-step-indicator--counters': props.counters,\n    'usa-step-indicator--counters-sm': props.smallCounters,\n    'usa-step-indicator--center': props.center,\n    'usa-step-indicator--no-labels': props.noLabels,\n  },\n])\n\nfunction stepStatus(label) {\n  const stepNumber = props.steps.indexOf(label) + 1\n\n  if (stepNumber < props.currentStepNumber) {\n    return 'completed'\n  }\n\n  if (stepNumber === props.currentStepNumber) {\n    return 'current'\n  }\n\n  return ''\n}\n</script>\n\n<template>\n  <div class=\"usa-step-indicator\" :class=\"classes\" aria-label=\"progress\">\n    <ol\n      class=\"usa-step-indicator__segments\"\n      :class=\"customClasses?.list\"\n      :aria-hidden=\"noLabels || null\"\n    >\n      <slot>\n        <UsaStepIndicatorSegment\n          v-for=\"label in steps\"\n          :key=\"label\"\n          :class=\"customClasses?.segment\"\n          :status=\"stepStatus(label)\"\n          :label=\"label\"\n        />\n      </slot>\n    </ol>\n    <slot name=\"header\">\n      <UsaStepIndicatorHeader\n        :class=\"customClasses?.header\"\n        :heading-tag=\"headingTag\"\n        :current-step-number=\"currentStepNumber\"\n        :current-step-label=\"currentStepLabel\"\n        :total-steps=\"totalSteps\"\n      />\n    </slot>\n  </div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport BaseHeading from '@/components/BaseHeading'\n\nconst props = defineProps({\n  id: {\n    type: String,\n    default: '',\n  },\n  heading: {\n    type: String,\n    default: 'Key information',\n    validator(heading) {\n      return heading !== ''\n    },\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        body: [],\n        heading: [],\n        text: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-summary-box'))\n</script>\n\n<template>\n  <div class=\"usa-summary-box\" role=\"region\" :aria-labelledby=\"computedId\">\n    <div class=\"usa-summary-box__body\" :class=\"[customClasses?.body]\">\n      <BaseHeading\n        :id=\"computedId\"\n        class=\"usa-summary-box__heading\"\n        :class=\"customClasses?.heading\"\n        :tag=\"headingTag\"\n        ><slot name=\"heading\">{{ heading }}</slot></BaseHeading\n      >\n      <div class=\"usa-summary-box__text\" :class=\"customClasses?.text\">\n        <slot></slot>\n      </div>\n    </div>\n  </div>\n</template>\n","import { createNewSortInstance } from 'fast-sort'\n\nexport function createNaturalSort() {\n  const naturalSort = createNewSortInstance({\n    comparer: new Intl.Collator(undefined, {\n      numeric: true,\n      sensitivity: 'base',\n    }).compare,\n    inPlaceSorting: false,\n  })\n\n  return naturalSort\n}\n","import { ref, computed, readonly } from 'vue'\nimport { createNaturalSort } from '@/utils/sorting.js'\nimport { objectHasKey, kebabCase } from '@/utils/common.js'\n\nexport function useTableSort(\n  _headers = [],\n  _rows = [],\n  _defaultSortHeader = '',\n  _defaultSortDirection = '',\n) {\n  const currentSortedHeader = ref(_defaultSortHeader)\n  const currentSortDirection = ref(_defaultSortDirection)\n  const naturalSort = createNaturalSort()\n\n  const headers = computed(() => {\n    return _headers.value.map(header => {\n      if (typeof header === 'string') {\n        return {\n          id: kebabCase(header),\n          label: header,\n          sortable: false,\n          headerRow: false,\n        }\n      }\n\n      const headerCell = { ...header }\n\n      if (!header?.id) {\n        headerCell.id = kebabCase(header.label)\n      }\n\n      if (!objectHasKey(header, 'sortable')) {\n        headerCell.sortable = false\n      } else {\n        headerCell.sortable = header.sortable\n      }\n\n      if (!objectHasKey(header, 'headerRow')) {\n        headerCell.headerRow = false\n      } else {\n        headerCell.headerRow = header.headerRow\n      }\n\n      return headerCell\n    })\n  })\n\n  const currentSortedHeaderLabel = computed(() => {\n    if (!currentSortedHeader.value) {\n      return null\n    }\n\n    const [sortedHeader] = headers.value.filter(\n      header => header.id === currentSortedHeader.value,\n    )\n\n    return sortedHeader.label\n  })\n\n  const hasSortableHeaders = computed(() => {\n    return headers.value.some(header => header.sortable)\n  })\n\n  const normalizedRows = computed(() => {\n    const rows = _rows.value.map(row => {\n      return Object.entries(row).reduce((acc, [columnName, columnValue]) => {\n        if (typeof columnValue !== 'object') {\n          acc[columnName] = {\n            displayValue: columnValue,\n            sortValue: columnValue,\n          }\n\n          return acc\n        }\n\n        // Merge existing row object into new.\n        acc[columnName] = { ...row[columnName] }\n\n        if (!objectHasKey(columnValue, 'sortValue')) {\n          acc[columnName].sortValue = columnValue.displayValue\n        }\n\n        return acc\n      }, {})\n    })\n\n    return rows\n  })\n\n  const rows = computed(() => {\n    if (currentSortDirection.value === 'ascending') {\n      return naturalSort(normalizedRows.value).asc(\n        row => row[currentSortedHeader.value].sortValue,\n      )\n    } else if (currentSortDirection.value === 'descending') {\n      return naturalSort(normalizedRows.value).desc(\n        row => row[currentSortedHeader.value].sortValue,\n      )\n    }\n\n    return normalizedRows.value\n  })\n\n  const toggleSortDirection = () => {\n    if (\n      !currentSortDirection.value ||\n      currentSortDirection.value === 'unsorted'\n    ) {\n      currentSortDirection.value = 'ascending'\n    } else {\n      currentSortDirection.value =\n        currentSortDirection.value === 'ascending' ? 'descending' : 'ascending'\n    }\n  }\n\n  const updateCurrentSortedHeader = headerId =>\n    (currentSortedHeader.value = headerId)\n\n  return {\n    headers,\n    rows: rows,\n    hasSortableHeaders: readonly(hasSortableHeaders),\n    currentSortedHeader: readonly(currentSortedHeader),\n    currentSortedHeaderLabel: readonly(currentSortedHeaderLabel),\n    currentSortDirection: readonly(currentSortDirection),\n    toggleSortDirection,\n    updateCurrentSortedHeader,\n  }\n}\n","<script setup>\nimport { computed } from 'vue'\n\nconst emit = defineEmits(['update:tableSort'])\n\nconst props = defineProps({\n  headerId: {\n    type: [String, Number],\n    required: true,\n  },\n  headerLabel: {\n    type: String,\n    required: true,\n  },\n  currentSortDirection: {\n    type: String,\n    default: '',\n  },\n})\n\nconst reverseSortDirection = computed(() => {\n  const reverseDirections = {\n    ascending: 'descending',\n    descending: 'ascending',\n  }\n\n  return reverseDirections[props.currentSortDirection] || 'ascending'\n})\n\nconst title = computed(\n  () =>\n    `Click to sort by ${props.headerLabel} in ${reverseSortDirection.value} order.`,\n)\n</script>\n\n<template>\n  <button\n    type=\"button\"\n    tabindex=\"0\"\n    class=\"usa-table__header__button\"\n    :title=\"title\"\n    @click=\"emit('update:tableSort', headerId)\"\n  >\n    <slot>\n      <svg\n        class=\"usa-icon\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 24 24\"\n      >\n        <g class=\"descending\" fill=\"transparent\">\n          <path\n            d=\"M17 17L15.59 15.59L12.9999 18.17V2H10.9999V18.17L8.41 15.58L7 17L11.9999 22L17 17Z\"\n          ></path>\n        </g>\n        <g class=\"ascending\" fill=\"transparent\">\n          <path\n            transform=\"rotate(180, 12, 12)\"\n            d=\"M17 17L15.59 15.59L12.9999 18.17V2H10.9999V18.17L8.41 15.58L7 17L11.9999 22L17 17Z\"\n          ></path>\n        </g>\n        <g class=\"unsorted\" fill=\"transparent\">\n          <polygon\n            points=\"15.17 15 13 17.17 13 6.83 15.17 9 16.58 7.59 12 3 7.41 7.59 8.83 9 11 6.83 11 17.17 8.83 15 7.42 16.41 12 21 16.59 16.41 15.17 15\"\n          ></polygon>\n        </g>\n      </svg>\n    </slot>\n  </button>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue'\nimport UsaTableSortButton from '@/components/UsaTableSortButton'\n\nconst updateCurrentSortedHeader = inject('updateCurrentSortedHeader')\nconst toggleSortDirection = inject('toggleSortDirection')\n\nconst props = defineProps({\n  id: {\n    type: [String, Number],\n    required: true,\n  },\n  label: {\n    type: String,\n    required: true,\n  },\n  sortable: {\n    type: Boolean,\n    default: false,\n  },\n  currentSortedHeader: {\n    type: String,\n    default: '',\n  },\n  currentSortDirection: {\n    type: String,\n    default: '',\n  },\n})\n\nconst ariaLabel = computed(() =>\n  !props.sortable\n    ? null\n    : `${props.label}, sortable column, currently ${\n        props.currentSortDirection\n          ? `sorted ${props.currentSortDirection}`\n          : 'unsorted'\n      }`,\n)\n\nconst ariaSort = computed(() => {\n  if (props.currentSortedHeader !== props.id) {\n    return null\n  }\n\n  if (\n    props.currentSortDirection === 'ascending' ||\n    props.currentSortDirection === 'descending'\n  ) {\n    return props.currentSortDirection\n  }\n\n  return null\n})\n\nconst toggleTableSort = headerId => {\n  updateCurrentSortedHeader(headerId)\n  toggleSortDirection()\n}\n</script>\n\n<template>\n  <th\n    scope=\"col\"\n    :data-sortable=\"sortable ? true : null\"\n    :role=\"sortable ? 'columnheader' : null\"\n    :aria-label=\"ariaLabel\"\n    :aria-sort=\"ariaSort\"\n  >\n    <slot>{{ label }}</slot>\n    <UsaTableSortButton\n      v-if=\"sortable\"\n      :current-sort-direction=\"currentSortDirection\"\n      :header-id=\"id\"\n      :header-label=\"label\"\n      @update:table-sort=\"toggleTableSort\"\n    />\n  </th>\n</template>\n","<script>\nexport default {\n  name: 'UsaTable',\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, ref, h, toRef, useSlots, provide } from 'vue'\nimport { useTableSort } from '@/composables/useTableSort'\nimport UsaTableHeaderCell from '@/components/UsaTableHeaderCell'\n\nconst slots = useSlots()\nconst captionRef = ref(null)\n\nconst props = defineProps({\n  caption: {\n    type: String,\n    default: '',\n  },\n  borderless: {\n    type: Boolean,\n    default: false,\n  },\n  striped: {\n    type: Boolean,\n    default: false,\n  },\n  compact: {\n    type: Boolean,\n    default: false,\n  },\n  scrollable: {\n    type: Boolean,\n    default: false,\n  },\n  stacked: {\n    type: Boolean,\n    default: false,\n  },\n  stackedHeader: {\n    type: Boolean,\n    default: false,\n  },\n  headers: {\n    type: Array,\n    default: () => [],\n  },\n  rows: {\n    type: Array,\n    default: () => [],\n  },\n  defaultSortDirection: {\n    type: String,\n    default: '',\n  },\n  defaultSortHeader: {\n    type: String,\n    default: '',\n  },\n})\n\nconst {\n  headers,\n  rows,\n  hasSortableHeaders,\n  currentSortedHeader,\n  currentSortedHeaderLabel,\n  currentSortDirection,\n  toggleSortDirection,\n  updateCurrentSortedHeader,\n} = useTableSort(\n  toRef(props, 'headers'),\n  toRef(props, 'rows'),\n  props.defaultSortHeader,\n  props.defaultSortDirection,\n)\n\nconst classes = computed(() => [\n  {\n    'usa-table--borderless': props.borderless,\n    'usa-table--striped': props.striped,\n    'usa-table--compact': props.compact,\n    'usa-table--stacked': props.stacked,\n    'usa-table--stacked-header': props.stackedHeader,\n  },\n])\n\nconst tableIsSortable = computed(\n  () => hasSortableHeaders.value && !slots?.default && !slots?.headers,\n)\n\nconst tableCaption = computed(() => {\n  if (props.caption) {\n    return props.caption\n  }\n\n  if (captionRef.value) {\n    return captionRef.value.textContent\n  }\n\n  return null\n})\n\nconst UsaTableContainerComponent = {\n  name: 'UsaTableContainer',\n  props: {\n    isScrollable: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup({ isScrollable }, { slots }) {\n    return () =>\n      isScrollable\n        ? h(\n            'div',\n            { class: 'usa-table-container--scrollable', tabindex: 0 },\n            slots.default(),\n          )\n        : slots.default()\n  },\n}\n\nprovide('toggleSortDirection', toggleSortDirection)\nprovide('updateCurrentSortedHeader', updateCurrentSortedHeader)\n</script>\n\n<template>\n  <UsaTableContainerComponent :is-scrollable=\"scrollable\">\n    <table v-bind=\"$attrs\" class=\"usa-table\" :class=\"classes\">\n      <caption v-if=\"caption || $slots.caption\" ref=\"captionRef\"\n        ><slot name=\"caption\">{{ caption }}</slot></caption\n      >\n      <thead>\n        <slot v-if=\"$slots.headers\" name=\"headers\"></slot>\n        <slot v-else-if=\"headers.length\" name=\"headers\" :headers=\"headers\">\n          <tr>\n            <UsaTableHeaderCell\n              v-for=\"header in headers\"\n              :id=\"header.id\"\n              :key=\"header.id\"\n              :label=\"header.label\"\n              :sortable=\"tableIsSortable && header.sortable\"\n              :current-sorted-header=\"currentSortedHeader\"\n              :current-sort-direction=\"\n                currentSortedHeader === header.id ? currentSortDirection : ''\n              \"\n              ><slot :name=\"`header-${header.id}`\" :header=\"header\"\n                >{{ header.label }}\n              </slot></UsaTableHeaderCell\n            >\n          </tr>\n        </slot>\n      </thead>\n      <tbody>\n        <slot v-if=\"$slots.default\"></slot>\n        <slot v-else-if=\"rows.length\" :rows=\"rows\">\n          <tr v-for=\"(row, index) in rows\" :key=\"index\">\n            <component\n              :is=\"header.headerRow ? 'th' : 'td'\"\n              v-for=\"header in headers\"\n              :key=\"`${header.id}-${index}`\"\n              :scope=\"header.headerRow ? 'row' : null\"\n              :role=\"header.headerRow ? 'rowheader' : null\"\n              :data-label=\"header.label\"\n              :data-sort-active=\"\n                currentSortedHeader === header.id ? true : null\n              \"\n              :data-sort-value=\"row[header.id].sortValue\"\n            >\n              <slot\n                :name=\"`cell-${header.id}`\"\n                :header=\"header\"\n                :row=\"row\"\n                :cell=\"row[header.id]\"\n                >{{ row[header.id].displayValue }}\n              </slot></component\n            >\n          </tr>\n        </slot>\n      </tbody>\n    </table>\n    <div\n      v-if=\"tableIsSortable\"\n      class=\"usa-sr-only usa-table__announcement-region\"\n      aria-live=\"polite\"\n      ><slot\n        name=\"table-announcement\"\n        :current-sorted-header=\"currentSortedHeader\"\n        :current-sort-direction=\"currentSortDirection\"\n        :current-sorted-header-label=\"currentSortedHeaderLabel\"\n        :table-caption=\"tableCaption\"\n        ><template v-if=\"currentSortedHeader\"\n          >The table\n          <template v-if=\"tableCaption\">named \"{{ tableCaption }}\"</template> is\n          now sorted by \"{{ currentSortedHeaderLabel }}\" in\n          {{ currentSortDirection }} order.</template\n        ></slot\n      ></div\n    >\n  </UsaTableContainerComponent>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n  size: {\n    type: String,\n    default: '',\n    validator(size) {\n      const isValidSize = size === '' || size === 'big'\n\n      if (!isValidSize) {\n        console.warn(`'${size}' is not a valid tag size`)\n      }\n\n      return isValidSize\n    },\n  },\n  tag: {\n    type: String,\n    default: 'span',\n  },\n})\n\nconst classes = computed(() => [{ 'usa-tag--big': props.size === 'big' }])\n</script>\n\n<template>\n  <component :is=\"tag\" class=\"usa-tag\" :class=\"classes\"\n    ><slot></slot\n  ></component>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, inject, useSlots, onMounted } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport UsaFormGroup from '@/components/UsaFormGroup'\nimport UsaLabel from '@/components/UsaLabel'\n\nconst slots = useSlots()\n\nconst updateCharacterCount = inject('updateCharacterCount', null)\nconst characterCountMaxlength = inject('characterCountMaxlength', null)\nconst characterCountMessageId = inject('characterCountMessageId', null)\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  width: {\n    type: String,\n    default: '',\n    validator(width) {\n      const isValidWidth = [\n        '',\n        '2xs',\n        'xs',\n        'sm',\n        'small',\n        'md',\n        'medium',\n        'lg',\n        'xl',\n        '2xl',\n      ].includes(width)\n\n      if (!isValidWidth) {\n        console.warn(`'${width}' is not a valid textarea width`)\n      }\n\n      return isValidWidth\n    },\n  },\n  modelValue: {\n    type: [String, Number],\n    default: '',\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        component: [],\n        label: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-textarea'))\nconst computedErrorMessageId = computed(\n  () => `${computedId.value}-error-message`,\n)\nconst computedHintId = computed(() => `${computedId.value}-hint`)\n\nconst textareaValue = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n\n    if (updateCharacterCount) {\n      updateCharacterCount(value)\n    }\n  },\n})\n\n// Trigger any character counts for default textarea values.\nonMounted(() => {\n  if (updateCharacterCount) {\n    updateCharacterCount(props.modelValue)\n  }\n})\n\nconst classes = computed(() => [\n  {\n    'usa-input--error': props.error,\n    'usa-input--2xs': props.width === '2xs',\n    'usa-input--xs': props.width === 'xs',\n    'usa-input--sm': props.width === 'sm',\n    'usa-input--small': props.width === 'small',\n    'usa-input--md': props.width === 'md',\n    'usa-input--medium': props.width === 'medium',\n    'usa-input--lg': props.width === 'lg',\n    'usa-input--xl': props.width === 'xl',\n    'usa-input--2xl': props.width === '2xl',\n    'usa-character-count__field': updateCharacterCount,\n  },\n])\n\nconst ariaDescribedby = computed(() => {\n  const ids = []\n\n  if (characterCountMessageId) {\n    ids.push(characterCountMessageId.value)\n  }\n\n  if (slots.hint) {\n    ids.push(computedHintId.value)\n  }\n\n  if (props.error && slots['error-message']) {\n    ids.push(computedErrorMessageId.value)\n  }\n\n  return ids.length ? ids.join(' ') : null\n})\n</script>\n\n<template>\n  <UsaFormGroup\n    :group=\"!!$slots.hint || (error && !!$slots['error-message'])\"\n    :error=\"error\"\n    :class=\"props.customClasses?.component\"\n  >\n    <UsaLabel\n      v-if=\"label || $slots.label\"\n      :for=\"computedId\"\n      :required=\"required\"\n      :error=\"error\"\n      :class=\"customClasses?.label\"\n      ><slot name=\"label\">{{ label }}</slot></UsaLabel\n    >\n\n    <span v-if=\"$slots.hint\" :id=\"computedHintId\" class=\"usa-hint\"\n      ><slot name=\"hint\"></slot\n    ></span>\n\n    <span\n      v-if=\"error && $slots['error-message']\"\n      :id=\"computedErrorMessageId\"\n      class=\"usa-error-message\"\n      ><slot name=\"error-message\"></slot\n    ></span>\n\n    <textarea\n      v-bind=\"$attrs\"\n      :id=\"computedId\"\n      v-model=\"textareaValue\"\n      class=\"usa-textarea\"\n      :class=\"classes\"\n      :required=\"required\"\n      :maxlength=\"characterCountMaxlength || $attrs.maxlength\"\n      :aria-describedby=\"ariaDescribedby\"\n    />\n  </UsaFormGroup>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { nextId } from '@/utils/unique-id.js'\nimport { validateTimeString } from '@/utils/dates.js'\nimport UsaComboBox from '@/components/UsaComboBox'\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst props = defineProps({\n  minTime: {\n    type: String,\n    default: '00:00',\n    validator(minTime) {\n      let isValidTime = validateTimeString(minTime)\n\n      if (!isValidTime) {\n        console.warn(\n          `'${minTime}' is not a valid minimum time. It must be a string in the HH:MM 24 hour format.`,\n        )\n      }\n\n      return isValidTime\n    },\n  },\n  maxTime: {\n    type: String,\n    default: '23:59',\n    validator(maxTime) {\n      let isValidTime = validateTimeString(maxTime)\n\n      if (!isValidTime) {\n        console.warn(\n          `'${maxTime}' is not a valid maximum time. It must be a string in the HH:MM 24 hour format.`,\n        )\n      }\n\n      return isValidTime\n    },\n  },\n  step: {\n    type: [String, Number],\n    default: 30,\n    validator(step) {\n      const isValidStep = parseInt(step, 10) > 0\n\n      if (!isValidStep) {\n        console.warn(`'${step}' is not a valid time step increment.`)\n      }\n\n      return isValidStep\n    },\n  },\n  modelValue: {\n    type: String,\n    default: '',\n  },\n  label: {\n    type: String,\n    default: '',\n  },\n  required: {\n    type: Boolean,\n    default: false,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  readonly: {\n    type: Boolean,\n    default: false,\n  },\n  error: {\n    type: Boolean,\n    default: false,\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  clearButtonAriaLabel: {\n    type: String,\n    default: 'Clear the select contents',\n  },\n  toggleButtonAriaLabel: {\n    type: String,\n    default: 'Toggle the dropdown list',\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        formGroup: [],\n        component: [],\n        label: [],\n        input: [],\n        list: [],\n      }\n    },\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-time-picker'))\n\nconst selectedOption = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n  },\n})\n\nconst timeStringToMinutes = timeString => {\n  const [hours, minutes] = timeString\n    .split(':')\n    .map(segment => parseInt(segment, 10))\n\n  return hours * 60 + minutes\n}\n\nconst timeRangeOptions = computed(() => {\n  const timeRange = []\n  const minTime = timeStringToMinutes(props.minTime)\n  const maxTime = timeStringToMinutes(props.maxTime)\n  const step = parseInt(props.step, 10)\n\n  if (minTime === maxTime) {\n    return timeRange\n  }\n\n  for (let time = minTime; time <= maxTime; time += step) {\n    const minute = time % 60\n    const hour24 = Math.floor(time / 60)\n    const hour12 = hour24 % 12 || 12\n    const ampm = hour24 < 12 ? 'am' : 'pm'\n\n    const formattedMinute = `${minute}`.padStart(2, '0')\n    const formattedHour24 = `${hour24}`.padStart(2, '0')\n\n    timeRange.push({\n      value: `${formattedHour24}:${formattedMinute}`,\n      label: `${hour12}:${formattedMinute}${ampm}`,\n    })\n  }\n\n  return timeRange\n})\n\nconst classes = computed(() => {\n  const customClasses = props.customClasses\n\n  if (!customClasses?.component?.length) {\n    customClasses.component = ['usa-time-picker']\n  } else if (!customClasses.component.includes('usa-time-picker')) {\n    customClasses.component.push('usa-time-picker')\n  }\n\n  return customClasses\n})\n</script>\n\n<template>\n  <UsaComboBox\n    :id=\"computedId\"\n    v-model=\"selectedOption\"\n    :options=\"timeRangeOptions\"\n    :label=\"label\"\n    :required=\"required\"\n    :disabled=\"disabled\"\n    :readonly=\"readonly\"\n    :error=\"error\"\n    :clear-button-aria-label=\"clearButtonAriaLabel\"\n    :toggle-button-aria-label=\"toggleButtonAriaLabel\"\n    :custom-classes=\"classes\"\n  >\n    <template v-if=\"$slots.label\" #label><slot name=\"label\"></slot></template>\n    <template v-if=\"$slots.hint\" #hint><slot name=\"hint\"></slot></template>\n    <template v-if=\"$slots['error-message']\" #error-message\n      ><slot name=\"error-message\"></slot\n    ></template>\n    <template v-if=\"$slots['no-results']\" #no-results\n      ><slot name=\"no-results\"></slot\n    ></template>\n    <template v-if=\"$slots.status\" #status=\"{ filteredOptions }\"\n      ><slot name=\"status\" :filtered-options=\"filteredOptions\"></slot\n    ></template>\n    <template v-if=\"$slots['assistive-hint']\" #assistive-hint\n      ><slot name=\"assistive-hint\"></slot\n    ></template>\n  </UsaComboBox>\n</template>\n","<script>\nexport default {\n  inheritAttrs: false,\n}\n</script>\n\n<script setup>\nimport { computed, ref, onMounted, onBeforeUnmount, watch, nextTick } from 'vue'\nimport {\n  computePosition,\n  autoUpdate,\n  offset,\n  flip,\n  inline,\n} from '@floating-ui/dom'\nimport { onKeyStroke } from '@vueuse/core'\nimport { nextId } from '@/utils/unique-id.js'\n\nconst props = defineProps({\n  label: {\n    type: String,\n    default: '',\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  wrapperTag: {\n    type: String,\n    default: 'span',\n  },\n  tag: {\n    type: String,\n    default: 'span',\n  },\n  position: {\n    type: String,\n    default: 'top',\n    validator(position) {\n      const isValidPosition = ['top', 'bottom', 'left', 'right'].includes(\n        position,\n      )\n\n      if (!isValidPosition) {\n        console.warn(`'${position}' is not a valid tooltip position`)\n      }\n\n      return isValidPosition\n    },\n  },\n  customClasses: {\n    type: Object,\n    default: () => {\n      return {\n        component: [],\n        label: [],\n      }\n    },\n  },\n})\n\nconst wrapperElement = ref(null)\nconst referenceElement = ref(null)\nconst floatingElement = ref(null)\nconst isSet = ref(false)\nconst isVisible = ref(isSet.value)\nconst currentPosition = ref(props.position)\nconst currentCoordinates = ref({ left: 0, top: 0, opacity: 0 })\nconst computedId = computed(() => props.id || nextId('usa-tooltip'))\n\nconst labelClasses = computed(() => [\n  {\n    'usa-tooltip__body--top': currentPosition.value === 'top',\n    'usa-tooltip__body--bottom': currentPosition.value === 'bottom',\n    'usa-tooltip__body--left': currentPosition.value === 'left',\n    'usa-tooltip__body--right': currentPosition.value === 'right',\n    'is-set': isSet.value,\n    'is-visible': isVisible.value,\n  },\n  ...(props.customClasses?.label || []),\n])\n\nonKeyStroke('Escape', () => {\n  isSet.value = false\n})\n\nlet cleanupFloatingUi\n\nconst updatePosition = () => {\n  computePosition(referenceElement.value, floatingElement.value, {\n    placement: props.position,\n    middleware: [\n      offset(5),\n      inline(),\n      flip({\n        flipAlignment: false,\n        fallbackPlacements: ['top', 'bottom', 'left', 'right'],\n      }),\n    ],\n  }).then(({ x, y, placement }) => {\n    currentPosition.value = placement\n    currentCoordinates.value.left = `${x}px`\n    currentCoordinates.value.top = `${y}px`\n  })\n}\n\nwatch(isSet, currentlySet => {\n  nextTick(() => {\n    requestAnimationFrame(() => {\n      isVisible.value = currentlySet\n      // May be able to be removed once:\n      // https://github.com/uswds/uswds/issues/4458 is fixed.\n      // @deprecated if issue is fixed.\n      currentCoordinates.value.opacity = currentlySet ? 1 : 0\n    })\n  })\n})\n\nonMounted(() => {\n  // `isSet` needs to be `true` until floating UI has initialized and has\n  // calculated it's initial position.\n  // May be able to be removed once:\n  // https://github.com/uswds/uswds/issues/4458 is fixed.\n  // @deprecated if issue is fixed.\n  isSet.value = true\n\n  cleanupFloatingUi = autoUpdate(\n    referenceElement.value,\n    floatingElement.value,\n    updatePosition,\n  )\n\n  nextTick(() => {\n    requestAnimationFrame(() => {\n      isSet.value = false\n    })\n  })\n})\n\nonBeforeUnmount(() => {\n  cleanupFloatingUi()\n})\n</script>\n\n<template>\n  <component\n    :is=\"wrapperTag\"\n    ref=\"wrapperElement\"\n    class=\"usa-tooltip\"\n    :class=\"customClasses?.component\"\n    @mouseenter=\"isSet = true\"\n    @mouseover=\"isSet = true\"\n    @mouseout=\"isSet = false\"\n  >\n    <component\n      :is=\"tag\"\n      ref=\"referenceElement\"\n      v-bind=\"$attrs\"\n      class=\"usa-tooltip__trigger\"\n      tabindex=\"0\"\n      :aria-describedby=\"computedId\"\n      @focus=\"isSet = true\"\n      @blur=\"isSet = false\"\n      ><slot></slot\n    ></component>\n    <span\n      :id=\"computedId\"\n      ref=\"floatingElement\"\n      role=\"tooltip\"\n      class=\"usa-tooltip__body\"\n      :class=\"labelClasses\"\n      :aria-hidden=\"!isVisible\"\n      :style=\"currentCoordinates\"\n      ><slot name=\"label\">{{ label }}</slot></span\n    >\n  </component>\n</template>\n","<script setup>\nimport { computed, watch } from 'vue'\nimport { refDebounced } from '@vueuse/core'\nimport { objectHasKey } from '@/utils/common.js'\nimport { nextId } from '@/utils/unique-id.js'\nimport UsaAlert from '@/components/UsaAlert'\nimport UsaChecklist from '@/components/UsaChecklist'\n\nconst emit = defineEmits(['update:validationId', 'update:statusMessageId'])\n\nconst props = defineProps({\n  validations: {\n    type: Array,\n    default: () => [],\n  },\n  validationValue: {\n    type: [String, Number],\n    default: '',\n  },\n  heading: {\n    type: String,\n    default: '',\n  },\n  headingTag: {\n    type: String,\n    default: 'h2',\n  },\n  validLabel: {\n    type: String,\n    default: '%s status complete',\n  },\n  invalidLabel: {\n    type: String,\n    default: '%s status incomplete',\n  },\n  id: {\n    type: String,\n    default: '',\n  },\n  customClasses: {\n    type: Object,\n    default: () => ({\n      body: [],\n      heading: [],\n      checklist: [],\n    }),\n  },\n})\n\nconst computedId = computed(() => props.id || nextId('usa-validation'))\nconst computedStatusMessageId = computed(\n  () => `${computedId.value}-status-message`,\n)\n\nconst validatedItems = computed(() =>\n  props.validations.reduce((acc, item) => {\n    const validatedItem = {\n      id: item?.id && !!`${item.id}` ? item.id : item.text,\n      text: item.text,\n    }\n\n    if (objectHasKey(item, 'checked')) {\n      validatedItem.checked = item.checked\n    } else if (typeof item?.validator === 'string') {\n      const regex = new RegExp(item.validator, 'g')\n\n      validatedItem.checked = regex.test(`${props.validationValue}`)\n    } else if (\n      typeof item?.validator === 'object' &&\n      item.validator instanceof RegExp\n    ) {\n      validatedItem.checked = item.validator.test(`${props.validationValue}`)\n    } else if (typeof item?.validator === 'function') {\n      validatedItem.checked = item.validator(props.validationValue) === true\n    } else {\n      validatedItem.checked = false\n    }\n\n    validatedItem.ariaLabel =\n      validatedItem.checked === true\n        ? props.validLabel.replaceAll('%s', validatedItem.text)\n        : props.invalidLabel.replaceAll('%s', validatedItem.text)\n\n    acc.push(validatedItem)\n\n    return acc\n  }, []),\n)\n\nconst statusMessage = refDebounced(\n  computed(() =>\n    validatedItems.value.map(item => `${item.ariaLabel}.`).join(' '),\n  ),\n  1000,\n)\n\nwatch(computedId, () => emit('update:validationId', computedId), {\n  immediate: true,\n})\nwatch(\n  computedStatusMessageId,\n  () => emit('update:statusMessageId', computedStatusMessageId),\n  { immediate: true },\n)\n</script>\n\n<template>\n  <UsaAlert\n    v-bind=\"$attrs\"\n    variant=\"validation\"\n    :heading=\"heading\"\n    :heading-tag=\"headingTag\"\n    :custom-classes=\"customClasses\"\n  >\n    <template #message>\n      <UsaChecklist\n        v-if=\"validatedItems?.length\"\n        :id=\"computedId\"\n        :items=\"validatedItems\"\n        :class=\"customClasses?.checklist\"\n      />\n    </template>\n  </UsaAlert>\n  <span\n    :id=\"computedStatusMessageId\"\n    data-validation-status\n    class=\"usa-sr-only\"\n    aria-live=\"polite\"\n    aria-atomic=\"true\"\n    >{{ statusMessage }}</span\n  >\n</template>\n"],"names":["PREFIX_SEPARATOR","GRID_NAMESPACE","IMAGE_PATH","SVG_SPRITE_PATH","ROUTER_COMPONENT_NAME","MOBILE_MENU_BREAKPOINT","FOOTER_NAV_COLLAPSIBLE_BREAKPOINT","MIN_DATE","MAX_DATE","USA_DATE_REGEX_PATTERN","ISO_DATE_REGEX_PATTERN","MONTH_LABELS","DAY_OF_WEEK_LABELS","DAY_OF_WEEK_ABBREVIATION_LABELS","YEAR_GROUP","ID_PREFIX","_sfc_main","event","_b","_a","_hoisted_1","$options","_openBlock","_createElementBlock","_mergeProps","_ctx","$props","_cache","_withKeys","_withModifiers","args","_renderSlot","_createBlock","_resolveDynamicComponent","_withCtx","useAccordion","_accordionItems","_multiselectable","multiselectable","ref","accordionItems","reactive","registerAccordionItem","id","isOpen","accordionId","unregisterAccordionItem","closeItem","openItem","emit","__emit","props","__props","isMultiSelectable","toRef","toggleItem","watch","provide","computed","classes","__expose","objectHasKey","object","key","kebabCase","value","justKebabCase","escapeRegExp","string","splitArray","array","splitAt","split","idRegistry","nextId","componentName","vm","getCurrentInstance","route","_c","pathPrefix","accordionHeadingTag","inject","computedId","onBeforeUnmount","ariaRole","useToggle","_id","idPrefix","defaultOpen","toggleId","closeContent","openContent","toggleContent","newValue","readonly","slots","useSlots","prefixSeparator","gridNamespace","imagePath","headerClasses","ariaCurrent","hasCurrent","item","breadcrumbItems","items","_sfc_render","mediaClasses","bodyClasses","footerClasses","statusMessageRef","srOnlyStatusMessage","charactersRemaining","charactersOver","countStatus","messageClasses","updateCharacterCount","inputValue","watchDebounced","__default__","checkboxValue","checked","timeElement","useComboBox","_selectedOption","_options","_disabled","_readonly","options","isDisabled","isReadonly","selectedOption","newSelectedValue","activeElement","useActiveElement","isDirty","searchTerm","highlightedOption","selectedLabel","foundOption","option","currentLabel","currentTerm","filteredOptions","totalFilteredOptions","computedLabelId","computedErrorMessageId","computedHintId","computedAssistiveHintId","computedListId","getListItemIdByIndex","index","componentElement","inputElement","listElement","listItemElements","getItemRefById","getItemRefByValue","firstOptionValue","firstOptionRef","firstItemId","selectedOptionRef","foundItemRef","itemRef","highlightedOptionRef","isFirstOption","isLastOption","activeDescendent","activeOptionId","highlightedOptionId","scrollList","elementRef","optionBottom","currentBottom","focusInput","selectOption","optionValue","clearSelectedOption","highlightOption","clearHighlightedOption","openList","closeList","listItemTabIndex","highlightedOptionIndex","clearButtonIsVisible","handleFilterOnInput","handleEnterOnInput","foundItem","handleListToggle","nextTick","handleClearInput","handleHoverOnListOption","handleSpaceOnListOption","handleEnterOnListOption","handleDownOnListOption","handleUpOnListOption","handleClickOutside","handleClickOnListOption","handleEscape","handleDownOnInput","handleClickOnInput","onClickOutside","onKeyStroke","ariaDescribedby","ids","focused","useFocus","attrs","useAttrs","characterCountMaxlength","characterCountMessageId","registerInput","unregisterInput","textInputValue","onMounted","inputGroupClasses","groupElements","selectedValue","monthValue","month","dayValue","day","yearValue","year","validateTimeString","time","isValidTimeString","hours","minutes","segment","formatYearString","formatMonthString","formatDayString","getMonthIndex","dateObject","getMonth","getYear","getDay","parseIsoDate","dateString","newDate","today","now","parseUsaDate","date","formatIsoDate","formatUsaDate","isDateBefore","dateToCompare","isDateAfter","isDateInRange","minDate","maxDate","setYear","newYear","newDateString","setMonth","newMonth","isValidDate","isValidIsoDate","isoDateString","isValidUsaDate","usaDateString","dates","timestamps","min","max","startOfYear","endOfYear","UseFocusTrap","defineComponent","trap","target","activate","deactivate","unrefElement","el","createFocusTrap","onScopeDispose","h","useDayPicker","activeDate","dayOfWeekLabels","monthLabels","isDateRange","dateRangeStart","dateRangeEnd","minDateObject","shallowRef","newMinDate","maxDateObject","newMaxDate","activeDateObject","newActiveDate","activeDateStart","startOfWeek","startOfMonth","activeDateEnd","endOfWeek","endOfMonth","activeMonthIndex","isPreviousMonth","currentMonth","monthToCompare","isCurrentMonth","isNextMonth","isBefore","isAfter","isDateInCurrentRange","subDays","addDays","formatAriaLabelDate","dayOfWeekIndex","dayOfWeekLabel","monthIndex","monthLabel","findClosestPastDate","start","stop","findClosestFutureDate","startOfDay","findPreviousMonth","currentDateObject","subMonths","findNextMonth","addMonths","findPreviousYear","currentDay","previousYearDateObject","subYears","nextAvailableDate","nextDateOnSameDay","setDate","isSameDay","findNextYear","nextYearDateObject","addYears","hasPastYear","isSameMonth","hasFutureYear","hasPastMonth","hasFutureMonth","todaysDate","visibleDateRange","totalDays","differenceInCalendarDays","currentDate","groupedVisibleDateRange","row","inputHighlightedDate","rangeType","focusTrapOptions","dateButtonRefs","selectedDate","newSelectedDate","activeMonthLabel","activeYear","highlightedDate","highlightedRowIndex","highlightedButtonIndex","monthSelectionButtonLabel","yearSelectionButtonLabel","toRaw","tabIndex","rowIndex","buttonIndex","getButtonByDate","button","setButtonFocusByDate","foundButton","toPreviousMonth","previousMonth","toNextMonth","nextMonth","toPreviousYear","previousYear","toNextYear","nextYear","handlePreviousMonth","handleNextMonth","handlePreviousYear","handleNextYear","handleClickOnDate","handleHoverOnDate","foundDate","handlePreviousDate","to","handleNextDate","newHighlightedDate","newRowIndex","newButtonIndex","stopWatchingHighlightedDate","useMonthPicker","minMonthOfActiveYear","startOfActiveYear","maxMonthOfActiveYear","endOfActiveYear","validMonthRangeOfActiveYear","validMonthRange","i","isMonthInRange","findClosestPastMonth","findClosestFutureMonth","monthsOfYear","groupedMonthRange","months","monthToFind","monthButtonRefs","activeMonth","findRowIndexByMonth","findButtonIndexByMonth","highlightedMonth","getButtonByMonth","setButtonFocusByMonth","handleClickOnMonth","handleHoverOnMonth","newHighlightedMonth","useYearPicker","minYear","maxYear","isYearInRange","findClosestPastYear","findClosestFutureYear","yearToGroup","visibleYearRange","years","yearIndex","groupedVisibleYearRange","firstVisibleYear","lastVisibleYear","firstAvailableVisibleYear","lastAvailableVisibleYear","yearToFind","yearButtonRefs","isYearAvailable","findRowIndexByYear","findButtonIndexByYear","currentSelectedYear","newSelectedYear","highlightedYear","getButtonByYear","setButtonFocusByYear","toPreviousYears","toNextYears","handleClickOnYear","handleHoverOnYear","newHighlightedYear","newVisibleYears","oldVisibleYear","wantedYear","calendarPickerRef","open","selectorMode","newMode","minimumDate","maximumDate","selectMonth","newFormattedDate","updateDateRangeStart","updateDateRangeEnd","initialDate","datePickerWrapperRef","isPristine","yearRangeStart","yearRangeStop","closeCalendar","openCalendar","toggleCalendar","newInputValue","inputValueIsoDate","rangeStart","rangeEnd","newRangeStart","newRangeEnd","useFileInput","_loadedFiles","_acceptedFileFormats","_multiple","allowMultiple","loadedFiles","acceptedFileFormats","spacerGif","validFileFormats","formats","fileType","format","getFileExtension","filename","extensionPattern","match","getFileIconClass","extension","isImage","hasFiles","hasInvalidFiles","validTypes","validExtensions","file","someValidTypes","type","someValidExtensions","loadedFileNames","generatePreviews","loadFiles","fileList","files","acc","fileExtension","metadata","reader","fileInputRef","isOverDropzone","invalid","dropZoneClasses","ariaLabel","fileLabel","containerClasses","footerVariant","emailHref","phoneHref","isCollapsible","menuSections","registerMenuSection","unregisterMenuSection","toggleMenuSection","menuSectionId","footerNavBigBreakpoint","isMounted","isCollapsibleMediaQuery","useMediaQuery","closeAllItems","gridRowClasses","gridColClasses","logoGridClasses","headingGridClasses","griColClasses","isMobileMenuOpen","useMobileMenu","menuId","mobileMenuOpenClass","closeMobileMenu","element","openMobileMenu","toggleMobileMenu","mobileMenuId","gridContainerClasses","backgroundImageStyle","svgSpritePath","iconHref","sizeClasses","breakpoint","useInPageNavigation","_mainContentSelector","_headingElements","_rootMargin","_threshold","_minimumHeadingCount","mainContentSelector","headingElements","heading","rootMargin","threshold","minimumHeadingCount","mainElement","headings","activeHeading","currentActiveHeading","currentHeadings","newActiveHeading","topLevelHeading","headingSelector","domHeadingExists","foundHeading","getHeadingId","headingId","suffix","addHeadingAnchor","anchor","removeHeadingAnchor","isVisibleHeading","headingStyle","findDomHeadings","buildMenu","domHeadings","headingTag","useIntersectionObserver","setActiveLink","entries","isIntersecting","intersectionRatio","isActive","stopMutationObserver","useMutationObserver","mutations","mutation","addedHeadings","node","removedHeadings","targetHeadings","totalChanges","scrollToAnchor","calculateOffset","offsetTop","prefersReducedMotion","languageSelectorRef","useDropdown","currentLangCode","newLangCode","currentLanguage","langCode","toggleLanguage","modalBodyClass","noClickBodyClass","focusTrapClass","modal","isVisible","currentlyVisibility","modalClasses","descriptionId","currentlyVisible","useFocusTrap","immediate","hasFocus","isPaused","opts","pause","unpause","tryOnScopeDispose","mobileMenuBreakpoint","isExtendedHeader","nav","largeScreenMediaQuery","largeScreen","isMenuOpen","isLargeScreen","UsaNavInnerComponent","wrap","registerDropdown","unregisterDropdown","dropdownId","globalRouterComponentName","toggleDropdown","dropdownItems","localRouterComponentName","routeLocation","closeAllDropdowns","isMegamenu","gridClasses","closeDropdown","usePagination","_currentPage","totalPages","_unbounded","currentPage","unbounded","pageRange","range","visiblePageRange","isFirstPage","isLastPage","isOverflowSlot","updateCurrentPage","number","toFirstPage","toPreviousPage","toNextPage","toLastPage","componentTag","BaseLink","totalItems","getAriaLabel","pageNumber","inputIds","currentInputType","ariaControls","listHeadingTag","computedHeadingTag","radioValue","rangeValue","callout","searchValue","statusLabel","calculatedStepNumber","totalSteps","currentStepLabel","stepStatus","label","stepNumber","createNaturalSort","createNewSortInstance","useTableSort","_headers","_rows","_defaultSortHeader","_defaultSortDirection","currentSortedHeader","currentSortDirection","naturalSort","headers","header","headerCell","currentSortedHeaderLabel","sortedHeader","hasSortableHeaders","normalizedRows","columnName","columnValue","rows","toggleSortDirection","updateCurrentSortedHeader","headerId","reverseSortDirection","title","ariaSort","toggleTableSort","captionRef","tableIsSortable","tableCaption","UsaTableContainerComponent","isScrollable","textareaValue","timeStringToMinutes","timeString","timeRangeOptions","timeRange","minTime","maxTime","step","minute","hour24","hour12","ampm","formattedMinute","formattedHour24","customClasses","wrapperElement","referenceElement","floatingElement","isSet","currentPosition","currentCoordinates","labelClasses","cleanupFloatingUi","updatePosition","computePosition","offset","inline","flip","x","y","placement","currentlySet","autoUpdate","computedStatusMessageId","validatedItems","validatedItem","regex","statusMessage","refDebounced"],"mappings":"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","x_google_ignoreList":[31,68]}