{"version":3,"file":"radio-group.mjs","sources":["../src/radio-group/RadioGroupRoot.ts","../src/radio-group/RadioGroupItem.ts","../src/radio-group/RadioGroupBubbleInput.vue","../src/radio-group/RadioGroupIndicator.ts","../src/radio-group/RadioGroupIndicator.vue","../src/radio-group/RadioGroupItem.vue","../src/radio-group/RadioGroupRoot.vue"],"sourcesContent":["import type { MaybeRefOrGetter, Ref } from 'vue'\nimport { type Direction, useDirection } from '../direction/index.ts'\nimport { createContext, type MutableRefObject, useControllableStateV2, useRef } from '../hooks/index.ts'\nimport { type RovingFocusGroupRootProps, useRovingFocusGroupRoot } from '../roving-focus/index.ts'\nimport { type EmitsToHookProps, mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveReturns } from '../shared/index.ts'\n\nexport interface RadioGroupRootProps {\n  name?: string\n  required?: boolean\n  disabled?: boolean\n  dir?: RovingFocusGroupRootProps['dir']\n  orientation?: RovingFocusGroupRootProps['orientation']\n  loop?: RovingFocusGroupRootProps['loop']\n  value?: string\n  defaultValue?: string\n}\n\nexport const DEFAULT_RADIO_GROUP_ROOT_PROPS = {\n  disabled: undefined,\n  required: undefined,\n  loop: undefined,\n} satisfies PrimitiveDefaultProps<RadioGroupRootProps>\n\nexport type RadioGroupRootEmits = {\n  'update:value': [value: string]\n}\n\nexport interface RadioGroupContext {\n  name: () => string | undefined\n  required: () => boolean | undefined\n  disabled: () => boolean | undefined\n  value: Ref<string | undefined>\n  onValueChange: (value: string) => void\n}\n\nexport const [provideRadioGroupContext, useRadioGroupContext] = createContext<RadioGroupContext>('RadioGroup')\n\nexport interface UseRadioGroupRootProps extends EmitsToHookProps<RadioGroupRootEmits> {\n  elRef?: MutableRefObject<HTMLElement | undefined>\n\n  value?: () => string | undefined\n  defaultValue?: string\n\n  name?: () => string | undefined\n  required?: () => boolean | undefined\n  disabled?: () => boolean | undefined\n\n  orientation?: RovingFocusGroupRootProps['orientation']\n  loop?: boolean\n\n  dir?: MaybeRefOrGetter<Direction | undefined>\n}\n\nexport function useRadioGroupRoot(props: UseRadioGroupRootProps): RadixPrimitiveReturns {\n  const {\n    loop = true,\n    name = () => undefined,\n    disabled = () => undefined,\n    required = () => undefined,\n  } = props\n\n  const elRef = props.elRef || useRef<HTMLElement>()\n  const setElRef = props.elRef ? undefined : (value: HTMLElement | undefined) => elRef.value = value\n\n  const direction = useDirection(props.dir)\n\n  const value = useControllableStateV2(props.value, props.onUpdateValue, props.defaultValue)\n\n  provideRadioGroupContext({\n    name,\n    required,\n    disabled,\n    value,\n    onValueChange(v) {\n      value.value = v\n    },\n  })\n\n  const rovingFocusGroupRoot = useRovingFocusGroupRoot({\n    orientation: props.orientation,\n    loop,\n    dir: direction,\n  })\n\n  return {\n    attrs(extraAttrs = []) {\n      const attrs = {\n        'elRef': setElRef,\n        'role': 'radiogroup',\n        'aria-required': props.required?.(),\n        'aria-orientation': props.orientation,\n        'data-disabled': disabled() ? '' : undefined,\n      }\n\n      mergePrimitiveAttrs(attrs, [rovingFocusGroupRoot.attrs(), ...extraAttrs])\n\n      return attrs\n    },\n  }\n}\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport { computed, onBeforeUnmount, onMounted, type Ref, shallowRef } from 'vue'\nimport { createContext, type MutableRefObject, useRef } from '../hooks/index.ts'\nimport { useRovingFocusGroupItem } from '../roving-focus/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useRadioGroupContext } from './RadioGroupRoot.ts'\n\nexport interface RadioGroupItemProps {\n  as?: PrimitiveProps['as']\n  value: string\n  name?: string\n  disabled?: boolean\n}\n\nexport const DEFAULT_RADIO_GROUP_ITEM_PROPS = {\n  as: 'button',\n  disabled: undefined,\n} satisfies PrimitiveDefaultProps<RadioGroupItemProps>\n\nexport const ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\n\nexport interface RadioContext {\n  checked: Ref<boolean>\n  disabled: Ref<boolean | undefined>\n  bubbleInput: {\n    control: Ref<HTMLButtonElement | undefined>\n    bubbles: MutableRefObject<boolean>\n    isFormControl: MutableRefObject<boolean>\n\n    name: () => string | undefined\n    value: () => string\n    checked: Ref<boolean>\n    required: () => boolean | undefined\n    disabled: Ref<boolean | undefined>\n  }\n}\n\nexport const [provideRadioContext, useRadioContext] = createContext<RadioContext>('Radio')\n\nexport interface UseRadioGroupItem {\n  control?: Ref<HTMLButtonElement | undefined>\n  value: () => string\n  name?: () => string | undefined\n  disabled?: () => boolean | undefined\n}\n\nexport function useRadioGroupItem(props: UseRadioGroupItem): RadixPrimitiveReturns {\n  const control = props.control || shallowRef<HTMLButtonElement>()\n  const setElRef = props.control ? undefined : (value: HTMLElement | undefined) => control.value = value as HTMLButtonElement\n\n  const context = useRadioGroupContext('RadioGroupItem')\n\n  const disabled = computed(() => context.disabled() || props.disabled?.())\n  const checked = computed(() => context.value.value === props.value())\n\n  let isArrowKeyPressed: boolean = false\n\n  function onDocumentKeydown(event: KeyboardEvent) {\n    if (ARROW_KEYS.includes(event.key)) {\n      isArrowKeyPressed = true\n    }\n  }\n\n  function onDocumentKeyup() {\n    isArrowKeyPressed = false\n  }\n\n  onMounted(() => {\n    document.addEventListener('keydown', onDocumentKeydown)\n    document.addEventListener('keyup', onDocumentKeyup)\n  })\n\n  onBeforeUnmount(() => {\n    document.removeEventListener('keydown', onDocumentKeydown)\n    document.removeEventListener('keyup', onDocumentKeyup)\n  })\n\n  function onCheck() {\n    context.onValueChange(props.value())\n  }\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented)\n      return\n    // According to WAI ARIA, radio groups don't activate items on enter keypress\n    if (event.key === 'Enter')\n      event.preventDefault()\n  }\n\n  function onFocus(event: FocusEvent) {\n    if (event.defaultPrevented)\n      return\n    /**\n     * Our `RovingFocusGroup` will focus the radio when navigating with arrow keys\n     * and we need to \"check\" it in that case. We click it to \"check\" it (instead\n     * of updating `context.value`) so that the radio change event fires.\n     */\n    if (isArrowKeyPressed)\n      control.value?.click()\n  }\n\n  // COMP::Radio\n  const bubbles = useRef(true)\n  // We set this to true by default so that events bubble to forms without JS (SSR)\n  const isFormControl = useRef(false)\n\n  function onClick(event: MouseEvent) {\n    if (event.defaultPrevented)\n      return\n    // radios cannot be unchecked so we only communicate a checked state\n    if (!checked.value)\n      onCheck()\n\n    if (!isFormControl.value)\n      return\n\n    bubbles.value = !event.cancelBubble\n  }\n\n  provideRadioContext({\n    checked,\n    disabled,\n    bubbleInput: {\n      control,\n      bubbles,\n      isFormControl,\n\n      name: context.name,\n      value: props.value,\n      checked,\n      required: context.required,\n      disabled,\n    },\n  })\n\n  const rovingFocusGroupItem = useRovingFocusGroupItem({\n    focusable() {\n      return !disabled.value\n    },\n    active() {\n      return checked.value\n    },\n  })\n\n  return {\n    attrs(extraAttrs = []) {\n      const _disabled = disabled.value\n\n      const attrs = {\n        'elRef': setElRef,\n        'type': 'button',\n        'role': 'radio',\n        'aria-checked': checked.value,\n        'data-state': checked.value ? 'checked' : 'unchecked',\n        'data-disabled': _disabled ? '' : undefined,\n        'disabled': _disabled,\n        'value': props.value(),\n        onKeydown,\n        onFocus,\n        onClick,\n      }\n\n      mergePrimitiveAttrs(attrs, [rovingFocusGroupItem.attrs(), ...extraAttrs])\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { watch } from 'vue'\nimport { useRadioContext } from './RadioGroupItem.ts'\n\ndefineOptions({\n  name: 'RadioGroupBubbleInput',\n})\n\nconst bubbleInput = useRadioContext('RadioGroupBubbleInput').bubbleInput\nbubbleInput.isFormControl.value = true\n\nlet input: HTMLInputElement | undefined\nfunction setElRef(vNode: any) {\n  input = vNode\n}\n\n// TODO: Check if this is the correct way to create a change event\n// const initChecked = isIndeterminate(props.checked) ? false : props.checked\n\n// Bubble checked change to parents (e.g form change event)\nwatch(bubbleInput.checked, (checked) => {\n  if (!input)\n    return\n\n  const inputProto = window.HTMLInputElement.prototype\n  const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor\n  const setChecked = descriptor.set\n\n  if (checked && setChecked) {\n    // TODO: Check if this is the correct way to create a change event\n    const inputEvent = new Event('input', { bubbles: bubbleInput.bubbles.value })\n    const changeEvent = new Event('change', { bubbles: bubbleInput.bubbles.value })\n    setChecked.call(input, checked)\n    input.dispatchEvent(inputEvent)\n    input.dispatchEvent(changeEvent)\n  }\n})\n</script>\n\n<template>\n  <input\n    :ref=\"setElRef\"\n    type=\"radio\"\n    aria-hidden=\"true\"\n    tabindex=\"-1\"\n    :name=\"bubbleInput.name()\"\n    :value=\"bubbleInput.value()\"\n    :checked=\"bubbleInput.checked.value\"\n    :required=\"bubbleInput.required()\"\n    :style=\"{\n      position: 'absolute',\n      pointerEvents: 'none',\n      opacity: 0,\n      margin: 0,\n    }\"\n  >\n</template>\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport { type Ref, shallowRef } from 'vue'\nimport { usePresence } from '../presence/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveGetAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useRadioContext } from './RadioGroupItem.ts'\n\nexport interface RadioGroupIndicatorProps {\n  as?: PrimitiveProps['as']\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: boolean\n}\n\nexport const DEFAULT_RADIO_GROUP_INDICATOR_PROPS = {\n  as: 'span',\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<RadioGroupIndicatorProps>\n\nexport interface UseRadioGroupIndicatorProps {\n  el?: Ref<HTMLElement | undefined>\n  forceMount?: boolean\n}\n\nexport function useRadioGroupIndicator(\n  props: UseRadioGroupIndicatorProps = {},\n): RadixPrimitiveReturns<{\n    isPresent: Ref<boolean>\n    attrs: RadixPrimitiveGetAttrs\n  }> {\n  const el = props.el || shallowRef<HTMLElement>()\n  const setElRef = props.el ? undefined : (value: HTMLElement | undefined) => el.value = value\n\n  const context = useRadioContext('RadioGroupIndicator')\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(el, context.checked)\n\n  return {\n    isPresent,\n    attrs(extraAttrs) {\n      const attrs = {\n        'elRef': setElRef,\n        'data-state': context.checked.value ? 'checked' : 'unchecked',\n        'data-disabled': context.disabled.value ? '' : undefined,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_RADIO_GROUP_INDICATOR_PROPS, type RadioGroupIndicatorProps, useRadioGroupIndicator } from './RadioGroupIndicator.ts'\n\ndefineOptions({\n  name: 'RadioGroupIndicator',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<RadioGroupIndicatorProps>(), DEFAULT_RADIO_GROUP_INDICATOR_PROPS)\n\nconst radioGroupIndicator = useRadioGroupIndicator(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <Primitive\n    v-if=\"radioGroupIndicator.isPresent.value\"\n    v-bind=\"normalizeAttrs(radioGroupIndicator.attrs([$attrs, { as }]))\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_RADIO_GROUP_ITEM_PROPS, type RadioGroupItemProps, useRadioGroupItem } from './RadioGroupItem.ts'\n\ndefineOptions({\n  name: 'RadioGroupItem',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<RadioGroupItemProps>(), DEFAULT_RADIO_GROUP_ITEM_PROPS)\n\nconst radioGroupItem = useRadioGroupItem(convertPropsToHookProps(props, ['value', 'disabled', 'name']))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(radioGroupItem.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, type EmitsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_RADIO_GROUP_ROOT_PROPS, type RadioGroupRootEmits, type RadioGroupRootProps, useRadioGroupRoot } from './RadioGroupRoot.ts'\n\ndefineOptions({\n  name: 'RadioGroup',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<RadioGroupRootProps>(), DEFAULT_RADIO_GROUP_ROOT_PROPS)\nconst emit = defineEmits<RadioGroupRootEmits>()\n\nconst radioGroupRoot = useRadioGroupRoot(convertPropsToHookProps(\n  props,\n  ['value', 'name', 'required', 'disabled', 'dir'],\n  (): Required<EmitsToHookProps<RadioGroupRootEmits>> => ({\n    onUpdateValue(value) {\n      emit('update:value', value)\n    },\n  }),\n))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(radioGroupRoot.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":["value"],"mappings":"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"}