{"version":3,"file":"tabs.mjs","sources":["../src/tabs/TabsRoot.ts","../src/tabs/utils.ts","../src/tabs/TabsContent.ts","../src/tabs/TabsContent.vue","../src/tabs/TabsList.ts","../src/tabs/TabsList.vue","../src/tabs/TabsRoot.vue","../src/tabs/TabsTrigger.ts","../src/tabs/TabsTrigger.vue"],"sourcesContent":["import type { MaybeRefOrGetter, Ref } from 'vue'\nimport type { RovingFocusGroupRootProps } from '../roving-focus/index.ts'\nimport { type Direction, useDirection } from '../direction/index.ts'\nimport { createContext, useControllableStateV2, useId } from '../hooks/index.ts'\nimport { type EmitsToHookProps, mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveReturns } from '../shared/index.ts'\n\nexport interface TabsRootProps {\n  /** The value for the selected tab, if controlled */\n  value?: string\n  /** The value of the tab to select by default, if uncontrolled */\n  defaultValue?: string\n  /**\n   * The orientation the tabs are layed out.\n   * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n   * @defaultValue horizontal\n   */\n  orientation?: RovingFocusGroupRootProps['orientation']\n  /**\n   * The direction of navigation between toolbar items.\n   */\n  dir?: RovingFocusGroupRootProps['dir']\n  /**\n   * Whether a tab is activated automatically or manually.\n   * @defaultValue automatic\n   */\n  activationMode?: 'automatic' | 'manual'\n}\n\nexport const DEFAULT_TABS_ROOT_PROPS = {} satisfies PrimitiveDefaultProps<TabsRootProps>\n\nexport type TabsRootEmits = {\n  /** A function called when a new tab is selected */\n  'update:value': [value: string]\n}\n\nexport interface TabsContext {\n  baseId: string\n  value: Ref<string | undefined>\n  onValueChange: (value: string) => void\n  orientation: Exclude<TabsRootProps['orientation'], undefined>\n  dir: Ref<Direction>\n  activationMode: Exclude<TabsRootProps['activationMode'], undefined>\n}\n\nexport const [provideTabsContext, useTabsContext] = createContext<TabsContext>('Tabs')\n\nexport interface UseTabsRootProps extends EmitsToHookProps<TabsRootEmits> {\n  value?: () => string | undefined\n  defaultValue?: string\n  orientation?: TabsRootProps['orientation']\n  dir?: MaybeRefOrGetter<Direction | undefined>\n  activationMode?: TabsRootProps['activationMode']\n}\n\nexport function useTabsRoot(props: UseTabsRootProps): RadixPrimitiveReturns {\n  const {\n    orientation = 'horizontal',\n    activationMode = 'automatic',\n  } = props\n  const direction = useDirection(props.dir)\n\n  const value = useControllableStateV2(props.value, props.onUpdateValue, props.defaultValue)\n\n  provideTabsContext({\n    baseId: useId(),\n    value,\n    onValueChange(newValue) {\n      value.value = newValue\n    },\n    orientation,\n    dir: direction,\n    activationMode,\n  })\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        'dir': direction.value,\n        'data-orientation': orientation,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","export function makeTriggerId(baseId: string, value: string) {\n  return `${baseId}-trigger-${value}`\n}\n\nexport function makeContentId(baseId: string, value: string) {\n  return `${baseId}-content-${value}`\n}\n","import { computed, onBeforeUnmount, onMounted, type Ref, shallowRef } from 'vue'\nimport { usePresence } from '../presence/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveGetAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useTabsContext } from './TabsRoot.ts'\nimport { makeContentId, makeTriggerId } from './utils.ts'\n\nexport interface TabsContentProps {\n  value: string\n\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_TABS_CONTENT_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<TabsContentProps>\n\nexport interface UseTabsContentProps {\n  el?: Ref<HTMLElement | undefined>\n  value: () => string\n  forceMount?: boolean\n}\n\nexport function useTabsContent(props: UseTabsContentProps): 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 = useTabsContext('TabsContent')\n  const triggerId = computed(() => makeTriggerId(context.baseId, props.value()))\n  const contentId = computed(() => makeContentId(context.baseId, props.value()))\n  const isSelected = computed(() => context.value.value === props.value())\n\n  const isMountAnimationPrevented = shallowRef(isSelected.value)\n\n  let rAf: number\n\n  onMounted(() => {\n    rAf = requestAnimationFrame(() => {\n      isMountAnimationPrevented.value = false\n    })\n  })\n\n  onBeforeUnmount(() => {\n    cancelAnimationFrame(rAf)\n  })\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(el, isSelected)\n\n  return {\n    isPresent,\n    attrs(extraAttrs) {\n      const attrs = {\n        'elRef': setElRef,\n        'id': contentId.value,\n        'data-state': isSelected.value ? 'active' : 'inactive',\n        'data-orientation': context.orientation,\n        'rele': 'tabpanel',\n        'aria-labelledby': triggerId.value,\n        'hidden': !isPresent.value,\n        'tabindex': 0,\n        'style': {\n          animationDuration: isMountAnimationPrevented.value ? '0s' : undefined,\n        },\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_TABS_CONTENT_PROPS, type TabsContentProps, useTabsContent } from './TabsContent.ts'\n\ndefineOptions({\n  name: 'TabsContent',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TabsContentProps>(), DEFAULT_TABS_CONTENT_PROPS)\n\nconst tabsContent = useTabsContent(convertPropsToHookProps(props, ['value']))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(tabsContent.attrs([$attrs]))\">\n    <slot v-if=\"tabsContent.isPresent.value\" />\n  </Primitive>\n</template>\n","import type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { type MutableRefObject, useRef } from '../hooks/index.ts'\nimport { type RovingFocusGroupRootProps, useRovingFocusGroupRoot } from '../roving-focus/index.ts'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { useTabsContext } from './TabsRoot.ts'\n\nexport interface TabsListProps {\n  loop?: RovingFocusGroupRootProps['loop']\n}\n\nexport const DEFAULT_TABS_LIST_PROPS = {\n  loop: undefined,\n} satisfies PrimitiveDefaultProps<TabsListProps>\n\nexport interface UseTabsListProps {\n  elRef?: MutableRefObject<HTMLElement | undefined>\n  loop?: RovingFocusGroupRootProps['loop']\n}\n\nexport function useTabsList(props: UseTabsListProps): RadixPrimitiveReturns {\n  const {\n    loop = true,\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 context = useTabsContext('TabsList')\n\n  const rovingFocusGroupRoot = useRovingFocusGroupRoot({\n    elRef,\n    currentTabStopId: undefined,\n    orientation: context.orientation,\n    loop,\n    dir: context.dir,\n  })\n\n  return {\n    attrs(extraAttrs = []) {\n      const attrs = {\n        'elRef': setElRef,\n        'role': 'tablist',\n        'aria-orientation': context.orientation,\n      }\n\n      mergePrimitiveAttrs(attrs, [rovingFocusGroupRoot.attrs(), ...extraAttrs])\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_TABS_LIST_PROPS, type TabsListProps, useTabsList } from './TabsList.ts'\n\ndefineOptions({\n  name: 'TabsList',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TabsListProps>(), DEFAULT_TABS_LIST_PROPS)\n\nconst tabsList = useTabsList(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(tabsList.attrs([$attrs]))\">\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_TABS_ROOT_PROPS, type TabsRootEmits, type TabsRootProps, useTabsRoot } from './TabsRoot.ts'\n\ndefineOptions({\n  name: 'TabsRoot',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TabsRootProps>(), DEFAULT_TABS_ROOT_PROPS)\n\nconst emit = defineEmits<TabsRootEmits>()\n\nconst tabsRoot = useTabsRoot(convertPropsToHookProps(\n  props,\n  ['value', 'dir'],\n  (): Required<EmitsToHookProps<TabsRootEmits>> => ({\n    onUpdateValue(value) {\n      emit('update:value', value)\n    },\n  }),\n))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(tabsRoot.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { computed } from 'vue'\nimport { useRovingFocusGroupItem } from '../roving-focus/index.ts'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { useTabsContext } from './TabsRoot.ts'\nimport { makeContentId, makeTriggerId } from './utils.ts'\n\nexport interface TabsTriggerProps {\n  as?: PrimitiveProps['as']\n  value: string\n  disabled?: boolean\n}\n\nexport const DEFAULT_TABS_TRIGGER_PROPS = {\n  as: 'button',\n  disabled: undefined,\n} satisfies PrimitiveDefaultProps<TabsTriggerProps>\n\nexport interface UseTabsTriggerProps {\n  value: () => string\n  disabled?: () => boolean | undefined\n}\n\nexport function useTabsTrigger(props: UseTabsTriggerProps): RadixPrimitiveReturns {\n  const { disabled = () => undefined } = props\n\n  const context = useTabsContext('TabsTrigger')\n  const triggerId = computed(() => makeTriggerId(context.baseId, props.value()))\n  const contentId = computed(() => makeContentId(context.baseId, props.value()))\n  const isSelected = computed(() => context.value.value === props.value())\n\n  function onMousedown(event: MouseEvent) {\n    if (event.defaultPrevented)\n      return\n    // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n    // but not when the control key is pressed (avoiding MacOS right click)\n    if (event.button === 0 && event.ctrlKey === false) {\n      context.onValueChange(props.value())\n    }\n    else {\n      // prevent focus to avoid accidental activation\n      event.preventDefault()\n    }\n  }\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented)\n      return\n    if ([' ', 'Enter'].includes(event.key))\n      context.onValueChange(props.value())\n  }\n\n  function onFocus(event: FocusEvent) {\n    if (event.defaultPrevented)\n      return\n    // handle \"automatic\" activation if necessary\n    // ie. activate tab following focus\n    const isAutomaticActivation = context.activationMode !== 'manual'\n    if (!isSelected.value && isAutomaticActivation) {\n      context.onValueChange(props.value())\n    }\n  }\n\n  const rovingFocusGroupItem = useRovingFocusGroupItem({\n    focusable() {\n      return !disabled()\n    },\n    active() {\n      return isSelected.value\n    },\n  })\n\n  return {\n    attrs(extraAttrs = []) {\n      const _disabled = disabled()\n      const _isSelected = isSelected.value\n\n      const attrs = {\n        'id': triggerId.value,\n        'type': 'button',\n        'role': 'tab',\n        'aria-selected': _isSelected,\n        'aria-controls': contentId.value,\n        'data-state': _isSelected ? 'active' : 'inactive',\n        'data-disabled': _disabled ? '' : undefined,\n        'disabled': _disabled,\n        onMousedown,\n        onKeydown,\n        onFocus,\n      }\n\n      mergePrimitiveAttrs(attrs, [rovingFocusGroupItem.attrs(), ...extraAttrs])\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_TABS_TRIGGER_PROPS, type TabsTriggerProps, useTabsTrigger } from './TabsTrigger.ts'\n\ndefineOptions({\n  name: 'TabsTrigger',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TabsTriggerProps>(), DEFAULT_TABS_TRIGGER_PROPS)\n\nconst tabsTrigger = useTabsTrigger(convertPropsToHookProps(props, ['value', 'disabled']))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(tabsTrigger.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":[],"mappings":"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"}