{"version":3,"file":"vue-uswds.components.mjs","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","placement","currentlySet","autoUpdate","computedStatusMessageId","validatedItems","validatedItem","regex","statusMessage","refDebounced"],"mappings":"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","x_google_ignoreList":[31,68]}