{"version":3,"file":"BFormRadio-B7fL16AZ.mjs","names":["$attrs"],"sources":["../src/components/BFormRadio/BFormRadio.vue","../src/components/BFormRadio/BFormRadio.vue","../src/components/BFormRadio/BFormRadioGroupBase.vue","../src/components/BFormRadio/BFormRadioGroupBase.vue","../src/components/BFormRadio/BFormRadioGroup.vue","../src/components/BFormRadio/BFormRadioGroup.vue"],"sourcesContent":["<template>\n  <ConditionalWrapper :skip=\"isButtonGroup\" :class=\"computedClasses\">\n    <input\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"_input\"\n      v-model=\"localValue\"\n      :class=\"inputClasses\"\n      type=\"radio\"\n      :disabled=\"props.disabled || parentData?.disabled.value || formGroupData?.disabled.value\"\n      :required=\"computedRequired || undefined\"\n      :name=\"props.name || parentData?.name.value\"\n      :form=\"props.form || parentData?.form.value\"\n      :aria-label=\"props.ariaLabel\"\n      :aria-labelledby=\"props.ariaLabelledby\"\n      :value=\"props.value\"\n      :aria-required=\"computedRequired || undefined\"\n    />\n    <label v-if=\"hasDefaultSlot || !resolvedPlain\" :for=\"computedId\" :class=\"labelClasses\">\n      <slot />\n    </label>\n  </ConditionalWrapper>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, useTemplateRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses} from '../../composables/useFormCheck'\nimport type {BFormRadioProps} from '../../types/ComponentProps'\nimport {isEmptySlot} from '../../utils/dom'\nimport ConditionalWrapper from '../ConditionalWrapper.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {RadioValue} from '../../types/RadioTypes'\nimport {useId} from '../../composables/useId'\nimport {formGroupKey, radioGroupKey} from '../../utils/keys'\nimport type {BFormRadioSlots} from '../../types'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BFormRadioProps, 'modelValue'>>(), {\n  ariaLabel: undefined,\n  ariaLabelledby: undefined,\n  autofocus: false,\n  button: undefined,\n  buttonGroup: false,\n  buttonVariant: undefined,\n  disabled: false,\n  form: undefined,\n  id: undefined,\n  inline: undefined,\n  name: undefined,\n  plain: undefined,\n  required: false,\n  reverse: undefined,\n  size: undefined,\n  state: undefined,\n  value: true,\n})\nconst props = useDefaults(_props, 'BFormRadio')\nconst slots = defineSlots<BFormRadioSlots>()\n\nconst modelValue = defineModel<BFormRadioProps['modelValue']>({\n  default: undefined,\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(radioGroupKey, null)\nconst formGroupData = inject(formGroupKey, null)?.(computedId)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n  initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\n\n// True default values for props that are undefined to support inheritance\nconst propDefaults = {\n  plain: false,\n  button: false,\n  inline: false,\n  reverse: false,\n  size: 'md' as const,\n  buttonVariant: 'secondary' as const,\n  state: null,\n}\n\n// Single source of truth for resolved prop values with parent inheritance and defaults\nconst resolvedProps = computed(() => ({\n  plain: props.plain ?? parentData?.plain.value ?? propDefaults.plain,\n  button: props.button ?? parentData?.buttons.value ?? propDefaults.button,\n  inline: props.inline ?? parentData?.inline.value ?? propDefaults.inline,\n  reverse: props.reverse ?? parentData?.reverse.value ?? propDefaults.reverse,\n  state: props.state ?? parentData?.state.value ?? propDefaults.state,\n  size: props.size ?? parentData?.size.value ?? propDefaults.size,\n  buttonVariant:\n    props.buttonVariant ?? parentData?.buttonVariant.value ?? propDefaults.buttonVariant,\n}))\n\n// Shorthand for template usage\nconst resolvedPlain = computed(() => resolvedProps.value.plain)\n\nconst localValue = computed({\n  get: () => (parentData ? parentData.modelValue.value : modelValue.value),\n  set: (newValue) => {\n    if (newValue === undefined) return\n    if (parentData !== null) {\n      parentData.modelValue.value = newValue as RadioValue\n      return\n    }\n    modelValue.value = newValue as RadioValue\n  },\n})\n\nconst computedRequired = computed(\n  () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = computed(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n  ...resolvedProps.value,\n  hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst computedClasses = getClasses(classesObject)\nconst inputClasses = getInputClasses(classesObject)\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <ConditionalWrapper :skip=\"isButtonGroup\" :class=\"computedClasses\">\n    <input\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"_input\"\n      v-model=\"localValue\"\n      :class=\"inputClasses\"\n      type=\"radio\"\n      :disabled=\"props.disabled || parentData?.disabled.value || formGroupData?.disabled.value\"\n      :required=\"computedRequired || undefined\"\n      :name=\"props.name || parentData?.name.value\"\n      :form=\"props.form || parentData?.form.value\"\n      :aria-label=\"props.ariaLabel\"\n      :aria-labelledby=\"props.ariaLabelledby\"\n      :value=\"props.value\"\n      :aria-required=\"computedRequired || undefined\"\n    />\n    <label v-if=\"hasDefaultSlot || !resolvedPlain\" :for=\"computedId\" :class=\"labelClasses\">\n      <slot />\n    </label>\n  </ConditionalWrapper>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, useTemplateRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses} from '../../composables/useFormCheck'\nimport type {BFormRadioProps} from '../../types/ComponentProps'\nimport {isEmptySlot} from '../../utils/dom'\nimport ConditionalWrapper from '../ConditionalWrapper.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {RadioValue} from '../../types/RadioTypes'\nimport {useId} from '../../composables/useId'\nimport {formGroupKey, radioGroupKey} from '../../utils/keys'\nimport type {BFormRadioSlots} from '../../types'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BFormRadioProps, 'modelValue'>>(), {\n  ariaLabel: undefined,\n  ariaLabelledby: undefined,\n  autofocus: false,\n  button: undefined,\n  buttonGroup: false,\n  buttonVariant: undefined,\n  disabled: false,\n  form: undefined,\n  id: undefined,\n  inline: undefined,\n  name: undefined,\n  plain: undefined,\n  required: false,\n  reverse: undefined,\n  size: undefined,\n  state: undefined,\n  value: true,\n})\nconst props = useDefaults(_props, 'BFormRadio')\nconst slots = defineSlots<BFormRadioSlots>()\n\nconst modelValue = defineModel<BFormRadioProps['modelValue']>({\n  default: undefined,\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(radioGroupKey, null)\nconst formGroupData = inject(formGroupKey, null)?.(computedId)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n  initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\n\n// True default values for props that are undefined to support inheritance\nconst propDefaults = {\n  plain: false,\n  button: false,\n  inline: false,\n  reverse: false,\n  size: 'md' as const,\n  buttonVariant: 'secondary' as const,\n  state: null,\n}\n\n// Single source of truth for resolved prop values with parent inheritance and defaults\nconst resolvedProps = computed(() => ({\n  plain: props.plain ?? parentData?.plain.value ?? propDefaults.plain,\n  button: props.button ?? parentData?.buttons.value ?? propDefaults.button,\n  inline: props.inline ?? parentData?.inline.value ?? propDefaults.inline,\n  reverse: props.reverse ?? parentData?.reverse.value ?? propDefaults.reverse,\n  state: props.state ?? parentData?.state.value ?? propDefaults.state,\n  size: props.size ?? parentData?.size.value ?? propDefaults.size,\n  buttonVariant:\n    props.buttonVariant ?? parentData?.buttonVariant.value ?? propDefaults.buttonVariant,\n}))\n\n// Shorthand for template usage\nconst resolvedPlain = computed(() => resolvedProps.value.plain)\n\nconst localValue = computed({\n  get: () => (parentData ? parentData.modelValue.value : modelValue.value),\n  set: (newValue) => {\n    if (newValue === undefined) return\n    if (parentData !== null) {\n      parentData.modelValue.value = newValue as RadioValue\n      return\n    }\n    modelValue.value = newValue as RadioValue\n  },\n})\n\nconst computedRequired = computed(\n  () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = computed(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n  ...resolvedProps.value,\n  hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst computedClasses = getClasses(classesObject)\nconst inputClasses = getInputClasses(classesObject)\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <div\n    v-bind=\"computedAttrs\"\n    :id=\"computedId\"\n    ref=\"_element\"\n    role=\"radiogroup\"\n    :class=\"computedClasses\"\n    class=\"bv-no-focus-ring\"\n    tabindex=\"-1\"\n  >\n    <slot name=\"first\" />\n    <BFormRadio v-for=\"(item, index) in normalizedOptions\" :key=\"index\" v-bind=\"item\">\n      <slot name=\"option\" v-bind=\"item\">\n        {{ item.text }}\n      </slot>\n    </BFormRadio>\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRadioGroupBaseProps} from '../../types/ComponentProps'\nimport {computed, provide, toRef, useTemplateRef} from 'vue'\nimport {radioGroupKey} from '../../utils/keys'\nimport BFormRadio from './BFormRadio.vue'\nimport {getGroupAttr, getGroupClasses} from '../../composables/useFormCheck'\nimport {useFocus} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormRadioGroupSlots} from '../../types/ComponentSlots'\n\n/**\n * Internal base component for BFormRadioGroup.\n * This component is non-generic and uses useDefaults for complete default support.\n * Users should use BFormRadioGroup (the type-safe wrapper) instead.\n * @internal\n */\nconst _props = withDefaults(defineProps<Omit<BFormRadioGroupBaseProps, 'modelValue'>>(), {\n  ariaInvalid: undefined,\n  autofocus: false,\n  buttonVariant: 'secondary',\n  buttons: false,\n  disabled: false,\n  form: undefined,\n  id: undefined,\n  name: undefined,\n  options: () => [],\n  plain: false,\n  required: false,\n  reverse: false,\n  size: 'md',\n  stacked: false,\n  state: null,\n  validated: false,\n})\nconst props = useDefaults(_props, 'BFormRadioGroup')\ndefineSlots<BFormRadioGroupSlots>()\n\nconst modelValue = defineModel<unknown>({\n  default: null,\n})\n\nconst computedId = useId(() => props.id, 'radio')\nconst computedName = useId(() => props.name, 'radio')\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element, {\n  initialValue: props.autofocus,\n})\n\n// Normalize options to always be objects with text/value fields\nconst normalizedOptions = computed(() =>\n  props.options.map((option) => {\n    if (typeof option === 'object' && option !== null) {\n      // Ensure disabled respects group-level disabled taking precedence\n      return {\n        ...option,\n        disabled: props.disabled ? true : (option.disabled ?? false),\n      }\n    }\n    // Primitive value - normalize to {text, value}, with group disabled taking precedence\n    return {\n      text: String(option),\n      value: option,\n      disabled: props.disabled ? true : false,\n    }\n  })\n)\n\nprovide(radioGroupKey, {\n  modelValue: modelValue as import('vue').Ref<import('../../types/RadioTypes').RadioValue>,\n  buttonVariant: toRef(() => props.buttonVariant),\n  form: toRef(() => props.form),\n  name: computedName,\n  buttons: toRef(() => props.buttons),\n  state: toRef(() => props.state),\n  plain: toRef(() => props.plain),\n  size: toRef(() => props.size),\n  inline: toRef(() => !props.stacked),\n  reverse: toRef(() => props.reverse),\n  required: toRef(() => props.required),\n  disabled: toRef(() => props.disabled),\n})\n\nconst classesObject = computed(() => ({\n  required: props.required,\n  ariaInvalid: props.ariaInvalid,\n  state: props.state,\n  validated: props.validated,\n  buttons: props.buttons,\n  stacked: props.stacked,\n  size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <div\n    v-bind=\"computedAttrs\"\n    :id=\"computedId\"\n    ref=\"_element\"\n    role=\"radiogroup\"\n    :class=\"computedClasses\"\n    class=\"bv-no-focus-ring\"\n    tabindex=\"-1\"\n  >\n    <slot name=\"first\" />\n    <BFormRadio v-for=\"(item, index) in normalizedOptions\" :key=\"index\" v-bind=\"item\">\n      <slot name=\"option\" v-bind=\"item\">\n        {{ item.text }}\n      </slot>\n    </BFormRadio>\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRadioGroupBaseProps} from '../../types/ComponentProps'\nimport {computed, provide, toRef, useTemplateRef} from 'vue'\nimport {radioGroupKey} from '../../utils/keys'\nimport BFormRadio from './BFormRadio.vue'\nimport {getGroupAttr, getGroupClasses} from '../../composables/useFormCheck'\nimport {useFocus} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormRadioGroupSlots} from '../../types/ComponentSlots'\n\n/**\n * Internal base component for BFormRadioGroup.\n * This component is non-generic and uses useDefaults for complete default support.\n * Users should use BFormRadioGroup (the type-safe wrapper) instead.\n * @internal\n */\nconst _props = withDefaults(defineProps<Omit<BFormRadioGroupBaseProps, 'modelValue'>>(), {\n  ariaInvalid: undefined,\n  autofocus: false,\n  buttonVariant: 'secondary',\n  buttons: false,\n  disabled: false,\n  form: undefined,\n  id: undefined,\n  name: undefined,\n  options: () => [],\n  plain: false,\n  required: false,\n  reverse: false,\n  size: 'md',\n  stacked: false,\n  state: null,\n  validated: false,\n})\nconst props = useDefaults(_props, 'BFormRadioGroup')\ndefineSlots<BFormRadioGroupSlots>()\n\nconst modelValue = defineModel<unknown>({\n  default: null,\n})\n\nconst computedId = useId(() => props.id, 'radio')\nconst computedName = useId(() => props.name, 'radio')\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element, {\n  initialValue: props.autofocus,\n})\n\n// Normalize options to always be objects with text/value fields\nconst normalizedOptions = computed(() =>\n  props.options.map((option) => {\n    if (typeof option === 'object' && option !== null) {\n      // Ensure disabled respects group-level disabled taking precedence\n      return {\n        ...option,\n        disabled: props.disabled ? true : (option.disabled ?? false),\n      }\n    }\n    // Primitive value - normalize to {text, value}, with group disabled taking precedence\n    return {\n      text: String(option),\n      value: option,\n      disabled: props.disabled ? true : false,\n    }\n  })\n)\n\nprovide(radioGroupKey, {\n  modelValue: modelValue as import('vue').Ref<import('../../types/RadioTypes').RadioValue>,\n  buttonVariant: toRef(() => props.buttonVariant),\n  form: toRef(() => props.form),\n  name: computedName,\n  buttons: toRef(() => props.buttons),\n  state: toRef(() => props.state),\n  plain: toRef(() => props.plain),\n  size: toRef(() => props.size),\n  inline: toRef(() => !props.stacked),\n  reverse: toRef(() => props.reverse),\n  required: toRef(() => props.required),\n  disabled: toRef(() => props.disabled),\n})\n\nconst classesObject = computed(() => ({\n  required: props.required,\n  ariaInvalid: props.ariaInvalid,\n  state: props.state,\n  validated: props.validated,\n  buttons: props.buttons,\n  stacked: props.stacked,\n  size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <BFormRadioGroupBase v-bind=\"forwardedProps\" v-model=\"modelValue\" :options=\"normalizedOptions\">\n    <!-- Forward all slots -->\n    <template #first>\n      <slot name=\"first\" />\n    </template>\n\n    <template #option=\"slotProps\">\n      <slot name=\"option\" v-bind=\"slotProps\" />\n    </template>\n\n    <slot />\n  </BFormRadioGroupBase>\n</template>\n\n<script\n  setup\n  lang=\"ts\"\n  generic=\"\n    Options extends readonly (object | string | number | boolean)[] = readonly (\n      | object\n      | string\n      | number\n      | boolean\n    )[]\n  \"\n>\nimport type {BFormRadioGroupProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport BFormRadioGroupBase from './BFormRadioGroupBase.vue'\nimport type {RadioOption} from '../../types/RadioTypes'\nimport type {OptionsValues} from '../../types/OptionsTypes'\n\n/**\n * Type-safe wrapper component for BFormRadioGroup.\n * Provides generic type safety for options array and strongly-typed modelValue.\n * Uses Options array generic to extract union of all possible values.\n * Normalizes typed options and forwards to BFormRadioGroupBase for rendering.\n * Supports both complex objects and simple scalar types (string, number, boolean).\n *\n * For strongly-typed modelValue:\n * - Primitive arrays: modelValue is union of those values\n * - Object arrays with 'value' field: modelValue is union of value field types\n * - Use 'as const' on options for literal type inference\n */\nconst props = withDefaults(defineProps<Omit<BFormRadioGroupProps<Options>, 'modelValue'>>(), {\n  ariaInvalid: undefined,\n  autofocus: false,\n  buttonVariant: 'secondary',\n  buttons: false,\n  disabled: false,\n  disabledField: 'disabled',\n  form: undefined,\n  id: undefined,\n  name: undefined,\n  options: () => [] as unknown as Options,\n  plain: false,\n  required: false,\n  reverse: false,\n  size: 'md',\n  stacked: false,\n  state: null,\n  textField: 'text',\n  validated: false,\n  valueField: 'value',\n})\n\n// Type-safe model value - extracts union from options.\n// NOTE: OptionsValues assumes a static \"value\" key; custom valueField is not\n// reflected in the type — modelValue falls back to unknown in that case.\nconst modelValue = defineModel<OptionsValues<Options> | undefined>({\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default: undefined as any,\n})\n\n// Type-safe normalization of options\nconst normalizedOptions = computed(\n  () =>\n    (props.options ?? []).map((el) =>\n      typeof el === 'string' || typeof el === 'number' || typeof el === 'boolean'\n        ? {\n            value: el,\n            disabled: props.disabled,\n            text: el.toString(),\n          }\n        : {\n            value: (el as Record<string, unknown>)[props.valueField as string],\n            disabled:\n              props.disabled ||\n              (((el as Record<string, unknown>)[props.disabledField as string] as\n                | boolean\n                | undefined) ??\n                false),\n            text:\n              ((el as Record<string, unknown>)[props.textField as string] as string | undefined) ??\n              '',\n          }\n    ) as RadioOption[]\n)\n\n// Forward all non-option-related props to base component\nconst forwardedProps = computed(() => ({\n  id: props.id,\n  name: props.name,\n  size: props.size,\n  state: props.state,\n  buttonVariant: props.buttonVariant,\n  buttons: props.buttons,\n  stacked: props.stacked,\n  disabled: props.disabled,\n  required: props.required,\n  validated: props.validated,\n  autofocus: props.autofocus,\n  form: props.form,\n  ariaInvalid: props.ariaInvalid,\n  plain: props.plain,\n  reverse: props.reverse,\n}))\n</script>\n","<template>\n  <BFormRadioGroupBase v-bind=\"forwardedProps\" v-model=\"modelValue\" :options=\"normalizedOptions\">\n    <!-- Forward all slots -->\n    <template #first>\n      <slot name=\"first\" />\n    </template>\n\n    <template #option=\"slotProps\">\n      <slot name=\"option\" v-bind=\"slotProps\" />\n    </template>\n\n    <slot />\n  </BFormRadioGroupBase>\n</template>\n\n<script\n  setup\n  lang=\"ts\"\n  generic=\"\n    Options extends readonly (object | string | number | boolean)[] = readonly (\n      | object\n      | string\n      | number\n      | boolean\n    )[]\n  \"\n>\nimport type {BFormRadioGroupProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport BFormRadioGroupBase from './BFormRadioGroupBase.vue'\nimport type {RadioOption} from '../../types/RadioTypes'\nimport type {OptionsValues} from '../../types/OptionsTypes'\n\n/**\n * Type-safe wrapper component for BFormRadioGroup.\n * Provides generic type safety for options array and strongly-typed modelValue.\n * Uses Options array generic to extract union of all possible values.\n * Normalizes typed options and forwards to BFormRadioGroupBase for rendering.\n * Supports both complex objects and simple scalar types (string, number, boolean).\n *\n * For strongly-typed modelValue:\n * - Primitive arrays: modelValue is union of those values\n * - Object arrays with 'value' field: modelValue is union of value field types\n * - Use 'as const' on options for literal type inference\n */\nconst props = withDefaults(defineProps<Omit<BFormRadioGroupProps<Options>, 'modelValue'>>(), {\n  ariaInvalid: undefined,\n  autofocus: false,\n  buttonVariant: 'secondary',\n  buttons: false,\n  disabled: false,\n  disabledField: 'disabled',\n  form: undefined,\n  id: undefined,\n  name: undefined,\n  options: () => [] as unknown as Options,\n  plain: false,\n  required: false,\n  reverse: false,\n  size: 'md',\n  stacked: false,\n  state: null,\n  textField: 'text',\n  validated: false,\n  valueField: 'value',\n})\n\n// Type-safe model value - extracts union from options.\n// NOTE: OptionsValues assumes a static \"value\" key; custom valueField is not\n// reflected in the type — modelValue falls back to unknown in that case.\nconst modelValue = defineModel<OptionsValues<Options> | undefined>({\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default: undefined as any,\n})\n\n// Type-safe normalization of options\nconst normalizedOptions = computed(\n  () =>\n    (props.options ?? []).map((el) =>\n      typeof el === 'string' || typeof el === 'number' || typeof el === 'boolean'\n        ? {\n            value: el,\n            disabled: props.disabled,\n            text: el.toString(),\n          }\n        : {\n            value: (el as Record<string, unknown>)[props.valueField as string],\n            disabled:\n              props.disabled ||\n              (((el as Record<string, unknown>)[props.disabledField as string] as\n                | boolean\n                | undefined) ??\n                false),\n            text:\n              ((el as Record<string, unknown>)[props.textField as string] as string | undefined) ??\n              '',\n          }\n    ) as RadioOption[]\n)\n\n// Forward all non-option-related props to base component\nconst forwardedProps = computed(() => ({\n  id: props.id,\n  name: props.name,\n  size: props.size,\n  state: props.state,\n  buttonVariant: props.buttonVariant,\n  buttons: props.buttons,\n  stacked: props.stacked,\n  disabled: props.disabled,\n  required: props.required,\n  validated: props.validated,\n  autofocus: props.autofocus,\n  form: props.form,\n  ariaInvalid: props.ariaInvalid,\n  plain: props.plain,\n  reverse: props.reverse,\n}))\n</script>\n"],"mappings":"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"}