{"version":3,"file":"BFormGroup-ayltvQts.mjs","names":["$attrs"],"sources":["../src/utils/props.ts","../src/components/BFormGroupContent.vue","../src/components/BFormGroupContent.vue","../src/components/BFormGroupLabel.vue","../src/components/BFormGroupLabel.vue","../src/components/BFormGroup/BFormGroup.vue","../src/components/BFormGroup/BFormGroup.vue"],"sourcesContent":["// Suffix can be a falsey value so nothing is appended to string\n// (helps when looping over props & some shouldn't change)\n\nimport {upperFirst} from './stringUtils'\n\n/**\n * Use data last parameters to allow for currying\n *\n * @param suffix\n * @param value\n * @returns\n */\nexport const suffixPropName = (suffix: string, value: string): string =>\n  value + (suffix ? upperFirst(suffix) : '')\n","<template>\n  <BFormInvalidFeedback\n    v-if=\"hasInvalidFeedbackSlot || invalidFeedback\"\n    :id=\"invalidFeedbackId\"\n    :aria-live=\"feedbackAriaLive\"\n    :state=\"state\"\n    :tooltip=\"tooltip\"\n  >\n    <slot name=\"invalid-feedback\">{{ invalidFeedback }}</slot>\n  </BFormInvalidFeedback>\n  <BFormValidFeedback\n    v-if=\"hasValidFeedbackSlot || validFeedback\"\n    :id=\"validFeedbackId\"\n    :aria-live=\"feedbackAriaLive\"\n    :state=\"state\"\n    :tooltip=\"tooltip\"\n  >\n    <slot name=\"valid-feedback\">{{ validFeedback }}</slot>\n  </BFormValidFeedback>\n  <BFormText v-if=\"hasDescriptionSlot || description\" :id=\"descriptionId\">\n    <slot name=\"description\">{{ description }}</slot>\n  </BFormText>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, useSlots} from 'vue'\nimport type {ValidationState} from '../types'\nimport BFormInvalidFeedback from './BForm/BFormInvalidFeedback.vue'\nimport BFormValidFeedback from './BForm/BFormValidFeedback.vue'\nimport BFormText from './BForm/BFormText.vue'\n\ndefineProps<{\n  invalidFeedback: string | undefined\n  validFeedback: string | undefined\n  description: string | undefined\n  feedbackAriaLive: string | undefined\n  state: ValidationState | undefined\n  tooltip: boolean | undefined\n  invalidFeedbackId: string | undefined\n  validFeedbackId: string | undefined\n  descriptionId: string | undefined\n}>()\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ndefineSlots<{\n  'invalid-feedback'?: (props: Record<string, never>) => any\n  'valid-feedback'?: (props: Record<string, never>) => any\n  'description'?: (props: Record<string, never>) => any\n}>()\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst slots = useSlots()\nconst hasInvalidFeedbackSlot = computed(() => !!slots['invalid-feedback'])\nconst hasValidFeedbackSlot = computed(() => !!slots['valid-feedback'])\nconst hasDescriptionSlot = computed(() => !!slots['description'])\n</script>\n","<template>\n  <BFormInvalidFeedback\n    v-if=\"hasInvalidFeedbackSlot || invalidFeedback\"\n    :id=\"invalidFeedbackId\"\n    :aria-live=\"feedbackAriaLive\"\n    :state=\"state\"\n    :tooltip=\"tooltip\"\n  >\n    <slot name=\"invalid-feedback\">{{ invalidFeedback }}</slot>\n  </BFormInvalidFeedback>\n  <BFormValidFeedback\n    v-if=\"hasValidFeedbackSlot || validFeedback\"\n    :id=\"validFeedbackId\"\n    :aria-live=\"feedbackAriaLive\"\n    :state=\"state\"\n    :tooltip=\"tooltip\"\n  >\n    <slot name=\"valid-feedback\">{{ validFeedback }}</slot>\n  </BFormValidFeedback>\n  <BFormText v-if=\"hasDescriptionSlot || description\" :id=\"descriptionId\">\n    <slot name=\"description\">{{ description }}</slot>\n  </BFormText>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, useSlots} from 'vue'\nimport type {ValidationState} from '../types'\nimport BFormInvalidFeedback from './BForm/BFormInvalidFeedback.vue'\nimport BFormValidFeedback from './BForm/BFormValidFeedback.vue'\nimport BFormText from './BForm/BFormText.vue'\n\ndefineProps<{\n  invalidFeedback: string | undefined\n  validFeedback: string | undefined\n  description: string | undefined\n  feedbackAriaLive: string | undefined\n  state: ValidationState | undefined\n  tooltip: boolean | undefined\n  invalidFeedbackId: string | undefined\n  validFeedbackId: string | undefined\n  descriptionId: string | undefined\n}>()\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ndefineSlots<{\n  'invalid-feedback'?: (props: Record<string, never>) => any\n  'valid-feedback'?: (props: Record<string, never>) => any\n  'description'?: (props: Record<string, never>) => any\n}>()\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst slots = useSlots()\nconst hasInvalidFeedbackSlot = computed(() => !!slots['invalid-feedback'])\nconst hasValidFeedbackSlot = computed(() => !!slots['valid-feedback'])\nconst hasDescriptionSlot = computed(() => !!slots['description'])\n</script>\n","<template>\n  <BCol\n    v-if=\"isHorizontal\"\n    v-bind=\"labelColProps\"\n    :id=\"labelId\"\n    :tag=\"labelTag\"\n    :for=\"computedLabelFor || null\"\n    :tabindex=\"isFieldset ? '-1' : null\"\n    :class=\"[labelAlignClasses, labelClasses]\"\n    @click=\"isFieldset ? (e: MouseEvent) => emit('legendClick', e) : undefined\"\n  >\n    <slot name=\"label\">{{ label }}</slot>\n  </BCol>\n  <component\n    :is=\"labelTag\"\n    v-else\n    :id=\"labelId\"\n    :for=\"computedLabelFor || null\"\n    :tabindex=\"isFieldset ? '-1' : null\"\n    :class=\"labelClasses\"\n    @click=\"isFieldset ? (e: MouseEvent) => emit('legendClick', e) : undefined\"\n  >\n    <slot name=\"label\">{{ label }}</slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {ClassValue} from '../types/AnyValuedAttributes'\nimport BCol from './BContainer/BCol.vue'\n\ndefineProps<{\n  label: string | undefined\n  labelTag: string\n  labelId: string | undefined\n  computedLabelFor: string | null\n  isFieldset: boolean\n  isHorizontal: boolean\n  labelColProps: Record<string, unknown>\n  labelAlignClasses: string[]\n  labelClasses: ClassValue\n}>()\n\nconst emit = defineEmits<{\n  legendClick: [event: MouseEvent]\n}>()\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ndefineSlots<{\n  label?: (props: Record<string, never>) => any\n}>()\n/* eslint-enable @typescript-eslint/no-explicit-any */\n</script>\n","<template>\n  <BCol\n    v-if=\"isHorizontal\"\n    v-bind=\"labelColProps\"\n    :id=\"labelId\"\n    :tag=\"labelTag\"\n    :for=\"computedLabelFor || null\"\n    :tabindex=\"isFieldset ? '-1' : null\"\n    :class=\"[labelAlignClasses, labelClasses]\"\n    @click=\"isFieldset ? (e: MouseEvent) => emit('legendClick', e) : undefined\"\n  >\n    <slot name=\"label\">{{ label }}</slot>\n  </BCol>\n  <component\n    :is=\"labelTag\"\n    v-else\n    :id=\"labelId\"\n    :for=\"computedLabelFor || null\"\n    :tabindex=\"isFieldset ? '-1' : null\"\n    :class=\"labelClasses\"\n    @click=\"isFieldset ? (e: MouseEvent) => emit('legendClick', e) : undefined\"\n  >\n    <slot name=\"label\">{{ label }}</slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {ClassValue} from '../types/AnyValuedAttributes'\nimport BCol from './BContainer/BCol.vue'\n\ndefineProps<{\n  label: string | undefined\n  labelTag: string\n  labelId: string | undefined\n  computedLabelFor: string | null\n  isFieldset: boolean\n  isHorizontal: boolean\n  labelColProps: Record<string, unknown>\n  labelAlignClasses: string[]\n  labelClasses: ClassValue\n}>()\n\nconst emit = defineEmits<{\n  legendClick: [event: MouseEvent]\n}>()\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ndefineSlots<{\n  label?: (props: Record<string, never>) => any\n}>()\n/* eslint-enable @typescript-eslint/no-explicit-any */\n</script>\n","<template>\n  <component\n    :is=\"isFieldset ? 'fieldset' : 'div'\"\n    :id=\"computedId\"\n    :disabled=\"isFieldset ? props.disabled : null\"\n    :role=\"isFieldset ? null : 'group'\"\n    :aria-invalid=\"computedAriaInvalid\"\n    :aria-labelledby=\"isFieldset && isHorizontal ? labelId : null\"\n    v-bind=\"$attrs\"\n    :class=\"[stateClass, {'was-validated': props.validated}]\"\n    class=\"b-form-group\"\n  >\n    <!-- End of definitions -->\n    <BFormRow v-if=\"isHorizontal\">\n      <BFormGroupLabel\n        v-if=\"labelShowing\"\n        v-bind=\"labelComponentProps\"\n        @legend-click=\"onLegendClick\"\n      >\n        <template v-if=\"slots.label\" #label>\n          <slot name=\"label\" />\n        </template>\n      </BFormGroupLabel>\n      <BCol v-bind=\"contentColProps\" ref=\"_content\">\n        <slot\n          :id=\"computedId\"\n          :aria-describedby=\"null\"\n          :description-id=\"descriptionId\"\n          :label-id=\"labelId\"\n        />\n        <BFormGroupContent v-bind=\"contentComponentProps\">\n          <template v-if=\"slots['invalid-feedback']\" #invalid-feedback>\n            <slot name=\"invalid-feedback\" />\n          </template>\n          <template v-if=\"slots['valid-feedback']\" #valid-feedback>\n            <slot name=\"valid-feedback\" />\n          </template>\n          <template v-if=\"slots.description\" #description>\n            <slot name=\"description\" />\n          </template>\n        </BFormGroupContent>\n      </BCol>\n    </BFormRow>\n    <template v-else>\n      <div v-if=\"props.floating && !isHorizontal\" ref=\"_content\" class=\"form-floating\">\n        <slot\n          :id=\"computedId\"\n          :aria-describedby=\"null\"\n          :description-id=\"descriptionId\"\n          :label-id=\"labelId\"\n        />\n        <BFormGroupLabel\n          v-if=\"labelShowing\"\n          v-bind=\"labelComponentProps\"\n          @legend-click=\"onLegendClick\"\n        >\n          <template v-if=\"slots.label\" #label>\n            <slot name=\"label\" />\n          </template>\n        </BFormGroupLabel>\n        <BFormGroupContent v-bind=\"contentComponentProps\">\n          <template v-if=\"slots['invalid-feedback']\" #invalid-feedback>\n            <slot name=\"invalid-feedback\" />\n          </template>\n          <template v-if=\"slots['valid-feedback']\" #valid-feedback>\n            <slot name=\"valid-feedback\" />\n          </template>\n          <template v-if=\"slots.description\" #description>\n            <slot name=\"description\" />\n          </template>\n        </BFormGroupContent>\n      </div>\n      <template v-else>\n        <BFormGroupLabel\n          v-if=\"labelShowing\"\n          v-bind=\"labelComponentProps\"\n          @legend-click=\"onLegendClick\"\n        >\n          <template v-if=\"slots.label\" #label>\n            <slot name=\"label\" />\n          </template>\n        </BFormGroupLabel>\n        <slot\n          :id=\"computedId\"\n          :aria-describedby=\"null\"\n          :description-id=\"descriptionId\"\n          :label-id=\"labelId\"\n        />\n        <BFormGroupContent v-bind=\"contentComponentProps\">\n          <template v-if=\"slots['invalid-feedback']\" #invalid-feedback>\n            <slot name=\"invalid-feedback\" />\n          </template>\n          <template v-if=\"slots['valid-feedback']\" #valid-feedback>\n            <slot name=\"valid-feedback\" />\n          </template>\n          <template v-if=\"slots.description\" #description>\n            <slot name=\"description\" />\n          </template>\n        </BFormGroupContent>\n      </template>\n    </template>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type Ref, ref, toRef, useTemplateRef} from 'vue'\nimport {useAriaInvalid} from '../../composables/useAriaInvalid'\nimport {attemptFocus, isVisible} from '../../utils/dom'\nimport BCol from '../BContainer/BCol.vue'\nimport BFormRow from '../BForm/BFormRow.vue'\nimport {suffixPropName} from '../../utils/props'\nimport {useStateClass} from '../../composables/useStateClass'\nimport {useId} from '../../composables/useId'\nimport type {BFormGroupProps, BFormGroupSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {formGroupKey} from '../../utils/keys'\nimport BFormGroupContent from '../BFormGroupContent.vue'\nimport BFormGroupLabel from '../BFormGroupLabel.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst INPUTS = ['input', 'select', 'textarea']\n\nconst _props = withDefaults(defineProps<BFormGroupProps>(), {\n  ariaInvalid: undefined,\n  contentCols: undefined,\n  contentColsLg: undefined,\n  contentColsMd: undefined,\n  contentColsSm: undefined,\n  contentColsXl: undefined,\n  description: undefined,\n  disabled: false,\n  feedbackAriaLive: 'assertive',\n  floating: false,\n  id: undefined,\n  invalidFeedback: undefined,\n  label: undefined,\n  labelAlign: undefined,\n  labelAlignLg: undefined,\n  labelAlignMd: undefined,\n  labelAlignSm: undefined,\n  labelAlignXl: undefined,\n  labelClass: undefined,\n  labelCols: undefined,\n  labelColsLg: undefined,\n  labelColsMd: undefined,\n  labelColsSm: undefined,\n  labelColsXl: undefined,\n  labelFor: undefined,\n  labelSize: undefined,\n  labelVisuallyHidden: false,\n  state: null,\n  tooltip: false,\n  validFeedback: undefined,\n  validated: false,\n})\nconst props = useDefaults(_props, 'BFormGroup')\nconst slots = defineSlots<BFormGroupSlots>()\n\nconst computedState = toRef(() => props.state)\nconst computedDisabled = toRef(() => props.disabled)\nconst childId = ref<Ref<string>[]>([])\nprovide(formGroupKey, (id) => {\n  childId.value = [id]\n\n  return {\n    state: computedState,\n    disabled: computedDisabled,\n  }\n})\nconst computedLabelFor = computed(() => {\n  if (props.labelFor !== undefined) return props.labelFor\n  if (childId.value[0] && childId.value[0].value) return childId.value[0].value\n  return null\n})\n\nconst breakPoints = ['xs', 'sm', 'md', 'lg', 'xl']\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getColProps = (props: any, prefix: string) =>\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  breakPoints.reduce((result: any, breakpoint: string) => {\n    const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Cols`)\n    let propValue = props[suffix]\n    propValue = propValue === '' ? true : propValue || false\n\n    if (!(typeof propValue === 'boolean') && propValue !== 'auto') {\n      const val = Number.parseInt(propValue)\n      propValue = Number.isNaN(val) ? 0 : val\n      propValue = propValue > 0 ? propValue : false\n    }\n\n    if (propValue) {\n      if (breakpoint === 'xs') {\n        result[typeof propValue === 'boolean' ? 'col' : 'cols'] = propValue\n      } else {\n        result[breakpoint || (typeof propValue === 'boolean' ? 'col' : 'cols')] = propValue\n      }\n    }\n    return result\n  }, {})\n\nconst content = useTemplateRef<HTMLDivElement | InstanceType<typeof BCol> | null>('_content')\n\nconst contentColProps = computed(() => getColProps(props, 'content'))\nconst labelAlignClasses = computed(() =>\n  ((props: BFormGroupProps, prefix: string) =>\n    breakPoints.reduce((result: string[], breakpoint) => {\n      const suffix = suffixPropName(\n        breakpoint === 'xs' ? '' : breakpoint,\n        `${prefix}Align`\n      ) as keyof BFormGroupProps\n      const propValue: string = props[suffix] || null\n      if (propValue) {\n        if (breakpoint === 'xs') {\n          result.push(`text-${propValue}`)\n        } else {\n          result.push(`text-${breakpoint}-${propValue}`)\n        }\n      }\n      return result\n    }, []))(props, 'label')\n)\nconst labelColProps = computed(() => getColProps(props, 'label'))\nconst isHorizontal = computed(\n  () => Object.keys(contentColProps.value).length > 0 || Object.keys(labelColProps.value).length > 0\n)\n\nconst stateClass = useStateClass(computedState)\nconst computedAriaInvalid = useAriaInvalid(() => props.ariaInvalid, computedState)\n\nconst onLegendClick = (event: Readonly<MouseEvent>) => {\n  if (computedLabelFor.value || content.value === null) return\n\n  const {target} = event\n  const tagName = target ? (target as HTMLElement).tagName : ''\n\n  if ([...INPUTS, 'a', 'button', 'label'].indexOf(tagName) !== -1) return\n\n  // In horizontal mode, content.value is a BCol component instance, not a DOM element\n  // Access the DOM element via $el property\n  const contentElement =\n    isHorizontal.value && content.value && '$el' in content.value\n      ? (content.value.$el as HTMLElement)\n      : (content.value as HTMLDivElement | null)\n  if (!contentElement) return\n\n  const inputs = [\n    ...contentElement.querySelectorAll(INPUTS.map((v) => `${v}:not([disabled])`).join()),\n  ].filter(isVisible)\n  const [inp] = inputs\n  if (inputs.length === 1 && inp instanceof HTMLElement) {\n    attemptFocus(inp)\n  }\n}\n\nconst computedId = useId(() => props.id)\nconst labelId = useId(undefined, '_BV_label_')\nconst labelTag = computed(() => (!computedLabelFor.value ? 'legend' : 'label'))\nconst labelClasses = computed(() => [\n  isHorizontal.value ? 'col-form-label' : 'form-label',\n  {\n    'bv-no-focus-ring': !computedLabelFor.value,\n    'col-form-label': isHorizontal.value || !computedLabelFor.value,\n    'pt-0': !isHorizontal.value && !computedLabelFor.value,\n    'd-block': !isHorizontal.value && computedLabelFor.value,\n    [`col-form-label-${props.labelSize}`]: !!props.labelSize,\n    'visually-hidden': props.labelVisuallyHidden,\n  },\n  isHorizontal.value ? null : labelAlignClasses.value,\n  props.labelClass,\n])\n\nconst invalidFeedbackId = useId(undefined, '_BV_feedback_invalid_')\n\nconst validFeedbackId = useId(undefined, '_BV_feedback_valid_')\nconst descriptionId = useId(undefined, '_BV_description_')\n\nconst isFieldset = computed(() => !computedLabelFor.value)\n\nconst labelShowing = computed(() => !!slots.label || !!props.label || isHorizontal.value)\n\nconst labelComponentProps = computed(() => ({\n  label: props.label,\n  labelTag: labelTag.value,\n  labelId: labelId.value,\n  computedLabelFor: computedLabelFor.value,\n  isFieldset: isFieldset.value,\n  isHorizontal: isHorizontal.value,\n  labelColProps: labelColProps.value,\n  labelAlignClasses: labelAlignClasses.value,\n  labelClasses: labelClasses.value,\n}))\n\nconst contentComponentProps = computed(() => ({\n  invalidFeedback: props.invalidFeedback,\n  validFeedback: props.validFeedback,\n  description: props.description,\n  feedbackAriaLive: props.feedbackAriaLive,\n  state: computedState.value,\n  tooltip: props.tooltip,\n  invalidFeedbackId: invalidFeedbackId.value,\n  validFeedbackId: validFeedbackId.value,\n  descriptionId: descriptionId.value,\n}))\n</script>\n","<template>\n  <component\n    :is=\"isFieldset ? 'fieldset' : 'div'\"\n    :id=\"computedId\"\n    :disabled=\"isFieldset ? props.disabled : null\"\n    :role=\"isFieldset ? null : 'group'\"\n    :aria-invalid=\"computedAriaInvalid\"\n    :aria-labelledby=\"isFieldset && isHorizontal ? labelId : null\"\n    v-bind=\"$attrs\"\n    :class=\"[stateClass, {'was-validated': props.validated}]\"\n    class=\"b-form-group\"\n  >\n    <!-- End of definitions -->\n    <BFormRow v-if=\"isHorizontal\">\n      <BFormGroupLabel\n        v-if=\"labelShowing\"\n        v-bind=\"labelComponentProps\"\n        @legend-click=\"onLegendClick\"\n      >\n        <template v-if=\"slots.label\" #label>\n          <slot name=\"label\" />\n        </template>\n      </BFormGroupLabel>\n      <BCol v-bind=\"contentColProps\" ref=\"_content\">\n        <slot\n          :id=\"computedId\"\n          :aria-describedby=\"null\"\n          :description-id=\"descriptionId\"\n          :label-id=\"labelId\"\n        />\n        <BFormGroupContent v-bind=\"contentComponentProps\">\n          <template v-if=\"slots['invalid-feedback']\" #invalid-feedback>\n            <slot name=\"invalid-feedback\" />\n          </template>\n          <template v-if=\"slots['valid-feedback']\" #valid-feedback>\n            <slot name=\"valid-feedback\" />\n          </template>\n          <template v-if=\"slots.description\" #description>\n            <slot name=\"description\" />\n          </template>\n        </BFormGroupContent>\n      </BCol>\n    </BFormRow>\n    <template v-else>\n      <div v-if=\"props.floating && !isHorizontal\" ref=\"_content\" class=\"form-floating\">\n        <slot\n          :id=\"computedId\"\n          :aria-describedby=\"null\"\n          :description-id=\"descriptionId\"\n          :label-id=\"labelId\"\n        />\n        <BFormGroupLabel\n          v-if=\"labelShowing\"\n          v-bind=\"labelComponentProps\"\n          @legend-click=\"onLegendClick\"\n        >\n          <template v-if=\"slots.label\" #label>\n            <slot name=\"label\" />\n          </template>\n        </BFormGroupLabel>\n        <BFormGroupContent v-bind=\"contentComponentProps\">\n          <template v-if=\"slots['invalid-feedback']\" #invalid-feedback>\n            <slot name=\"invalid-feedback\" />\n          </template>\n          <template v-if=\"slots['valid-feedback']\" #valid-feedback>\n            <slot name=\"valid-feedback\" />\n          </template>\n          <template v-if=\"slots.description\" #description>\n            <slot name=\"description\" />\n          </template>\n        </BFormGroupContent>\n      </div>\n      <template v-else>\n        <BFormGroupLabel\n          v-if=\"labelShowing\"\n          v-bind=\"labelComponentProps\"\n          @legend-click=\"onLegendClick\"\n        >\n          <template v-if=\"slots.label\" #label>\n            <slot name=\"label\" />\n          </template>\n        </BFormGroupLabel>\n        <slot\n          :id=\"computedId\"\n          :aria-describedby=\"null\"\n          :description-id=\"descriptionId\"\n          :label-id=\"labelId\"\n        />\n        <BFormGroupContent v-bind=\"contentComponentProps\">\n          <template v-if=\"slots['invalid-feedback']\" #invalid-feedback>\n            <slot name=\"invalid-feedback\" />\n          </template>\n          <template v-if=\"slots['valid-feedback']\" #valid-feedback>\n            <slot name=\"valid-feedback\" />\n          </template>\n          <template v-if=\"slots.description\" #description>\n            <slot name=\"description\" />\n          </template>\n        </BFormGroupContent>\n      </template>\n    </template>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type Ref, ref, toRef, useTemplateRef} from 'vue'\nimport {useAriaInvalid} from '../../composables/useAriaInvalid'\nimport {attemptFocus, isVisible} from '../../utils/dom'\nimport BCol from '../BContainer/BCol.vue'\nimport BFormRow from '../BForm/BFormRow.vue'\nimport {suffixPropName} from '../../utils/props'\nimport {useStateClass} from '../../composables/useStateClass'\nimport {useId} from '../../composables/useId'\nimport type {BFormGroupProps, BFormGroupSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {formGroupKey} from '../../utils/keys'\nimport BFormGroupContent from '../BFormGroupContent.vue'\nimport BFormGroupLabel from '../BFormGroupLabel.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst INPUTS = ['input', 'select', 'textarea']\n\nconst _props = withDefaults(defineProps<BFormGroupProps>(), {\n  ariaInvalid: undefined,\n  contentCols: undefined,\n  contentColsLg: undefined,\n  contentColsMd: undefined,\n  contentColsSm: undefined,\n  contentColsXl: undefined,\n  description: undefined,\n  disabled: false,\n  feedbackAriaLive: 'assertive',\n  floating: false,\n  id: undefined,\n  invalidFeedback: undefined,\n  label: undefined,\n  labelAlign: undefined,\n  labelAlignLg: undefined,\n  labelAlignMd: undefined,\n  labelAlignSm: undefined,\n  labelAlignXl: undefined,\n  labelClass: undefined,\n  labelCols: undefined,\n  labelColsLg: undefined,\n  labelColsMd: undefined,\n  labelColsSm: undefined,\n  labelColsXl: undefined,\n  labelFor: undefined,\n  labelSize: undefined,\n  labelVisuallyHidden: false,\n  state: null,\n  tooltip: false,\n  validFeedback: undefined,\n  validated: false,\n})\nconst props = useDefaults(_props, 'BFormGroup')\nconst slots = defineSlots<BFormGroupSlots>()\n\nconst computedState = toRef(() => props.state)\nconst computedDisabled = toRef(() => props.disabled)\nconst childId = ref<Ref<string>[]>([])\nprovide(formGroupKey, (id) => {\n  childId.value = [id]\n\n  return {\n    state: computedState,\n    disabled: computedDisabled,\n  }\n})\nconst computedLabelFor = computed(() => {\n  if (props.labelFor !== undefined) return props.labelFor\n  if (childId.value[0] && childId.value[0].value) return childId.value[0].value\n  return null\n})\n\nconst breakPoints = ['xs', 'sm', 'md', 'lg', 'xl']\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getColProps = (props: any, prefix: string) =>\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  breakPoints.reduce((result: any, breakpoint: string) => {\n    const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Cols`)\n    let propValue = props[suffix]\n    propValue = propValue === '' ? true : propValue || false\n\n    if (!(typeof propValue === 'boolean') && propValue !== 'auto') {\n      const val = Number.parseInt(propValue)\n      propValue = Number.isNaN(val) ? 0 : val\n      propValue = propValue > 0 ? propValue : false\n    }\n\n    if (propValue) {\n      if (breakpoint === 'xs') {\n        result[typeof propValue === 'boolean' ? 'col' : 'cols'] = propValue\n      } else {\n        result[breakpoint || (typeof propValue === 'boolean' ? 'col' : 'cols')] = propValue\n      }\n    }\n    return result\n  }, {})\n\nconst content = useTemplateRef<HTMLDivElement | InstanceType<typeof BCol> | null>('_content')\n\nconst contentColProps = computed(() => getColProps(props, 'content'))\nconst labelAlignClasses = computed(() =>\n  ((props: BFormGroupProps, prefix: string) =>\n    breakPoints.reduce((result: string[], breakpoint) => {\n      const suffix = suffixPropName(\n        breakpoint === 'xs' ? '' : breakpoint,\n        `${prefix}Align`\n      ) as keyof BFormGroupProps\n      const propValue: string = props[suffix] || null\n      if (propValue) {\n        if (breakpoint === 'xs') {\n          result.push(`text-${propValue}`)\n        } else {\n          result.push(`text-${breakpoint}-${propValue}`)\n        }\n      }\n      return result\n    }, []))(props, 'label')\n)\nconst labelColProps = computed(() => getColProps(props, 'label'))\nconst isHorizontal = computed(\n  () => Object.keys(contentColProps.value).length > 0 || Object.keys(labelColProps.value).length > 0\n)\n\nconst stateClass = useStateClass(computedState)\nconst computedAriaInvalid = useAriaInvalid(() => props.ariaInvalid, computedState)\n\nconst onLegendClick = (event: Readonly<MouseEvent>) => {\n  if (computedLabelFor.value || content.value === null) return\n\n  const {target} = event\n  const tagName = target ? (target as HTMLElement).tagName : ''\n\n  if ([...INPUTS, 'a', 'button', 'label'].indexOf(tagName) !== -1) return\n\n  // In horizontal mode, content.value is a BCol component instance, not a DOM element\n  // Access the DOM element via $el property\n  const contentElement =\n    isHorizontal.value && content.value && '$el' in content.value\n      ? (content.value.$el as HTMLElement)\n      : (content.value as HTMLDivElement | null)\n  if (!contentElement) return\n\n  const inputs = [\n    ...contentElement.querySelectorAll(INPUTS.map((v) => `${v}:not([disabled])`).join()),\n  ].filter(isVisible)\n  const [inp] = inputs\n  if (inputs.length === 1 && inp instanceof HTMLElement) {\n    attemptFocus(inp)\n  }\n}\n\nconst computedId = useId(() => props.id)\nconst labelId = useId(undefined, '_BV_label_')\nconst labelTag = computed(() => (!computedLabelFor.value ? 'legend' : 'label'))\nconst labelClasses = computed(() => [\n  isHorizontal.value ? 'col-form-label' : 'form-label',\n  {\n    'bv-no-focus-ring': !computedLabelFor.value,\n    'col-form-label': isHorizontal.value || !computedLabelFor.value,\n    'pt-0': !isHorizontal.value && !computedLabelFor.value,\n    'd-block': !isHorizontal.value && computedLabelFor.value,\n    [`col-form-label-${props.labelSize}`]: !!props.labelSize,\n    'visually-hidden': props.labelVisuallyHidden,\n  },\n  isHorizontal.value ? null : labelAlignClasses.value,\n  props.labelClass,\n])\n\nconst invalidFeedbackId = useId(undefined, '_BV_feedback_invalid_')\n\nconst validFeedbackId = useId(undefined, '_BV_feedback_valid_')\nconst descriptionId = useId(undefined, '_BV_description_')\n\nconst isFieldset = computed(() => !computedLabelFor.value)\n\nconst labelShowing = computed(() => !!slots.label || !!props.label || isHorizontal.value)\n\nconst labelComponentProps = computed(() => ({\n  label: props.label,\n  labelTag: labelTag.value,\n  labelId: labelId.value,\n  computedLabelFor: computedLabelFor.value,\n  isFieldset: isFieldset.value,\n  isHorizontal: isHorizontal.value,\n  labelColProps: labelColProps.value,\n  labelAlignClasses: labelAlignClasses.value,\n  labelClasses: labelClasses.value,\n}))\n\nconst contentComponentProps = computed(() => ({\n  invalidFeedback: props.invalidFeedback,\n  validFeedback: props.validFeedback,\n  description: props.description,\n  feedbackAriaLive: props.feedbackAriaLive,\n  state: computedState.value,\n  tooltip: props.tooltip,\n  invalidFeedbackId: invalidFeedbackId.value,\n  validFeedbackId: validFeedbackId.value,\n  descriptionId: descriptionId.value,\n}))\n</script>\n"],"mappings":"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"}