{"version":3,"file":"NavigationMenuRoot.cjs","sources":["../../src/NavigationMenu/NavigationMenuRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\n\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Direction, Orientation } from './utils'\nimport { createContext, useDirection, useForwardExpose, useId } from '@/shared'\nimport { useCollection } from '@/Collection'\n\nexport interface NavigationMenuRootProps extends PrimitiveProps {\n  /** The controlled value of the menu item to activate. Can be used as `v-model`. */\n  modelValue?: string\n  /**\n   * The value of the menu item that should be active when initially rendered.\n   *\n   * Use when you do not need to control the value state.\n   */\n  defaultValue?: string\n  /**\n   * The reading direction of the combobox when applicable.\n   *\n   *  If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode.\n   */\n  dir?: Direction\n  /** The orientation of the menu. */\n  orientation?: Orientation\n  /**\n   * The duration from when the pointer enters the trigger until the tooltip gets opened.\n   * @defaultValue 200\n   */\n  delayDuration?: number\n  /**\n   * How much time a user has to enter another trigger without incurring a delay again.\n   * @defaultValue 300\n   */\n  skipDelayDuration?: number\n\n  /**\n   * If `true`, menu cannot be open by click on trigger\n   * @defaultValue false\n   */\n  disableClickTrigger?: boolean\n  /**\n   * If `true`, menu cannot be open by hover on trigger\n   * @defaultValue false\n   */\n  disableHoverTrigger?: boolean\n  /**\n   * If `true`, menu will not close during pointer leave event\n   * @defaultValue false\n   */\n  disablePointerLeaveClose?: boolean\n\n  /**\n   * When `true`, the element will be unmounted on closed state.\n   *\n   * @defaultValue `true`\n   */\n  unmountOnHide?: boolean\n}\nexport type NavigationMenuRootEmits = {\n  /** Event handler called when the value changes. */\n  'update:modelValue': [value: string]\n}\n\nexport interface NavigationMenuContext {\n  isRootMenu: boolean\n  modelValue: Ref<string>\n  previousValue: Ref<string>\n  baseId: string\n  dir: Ref<Direction>\n  orientation: Orientation\n  disableClickTrigger: Ref<boolean>\n  disableHoverTrigger: Ref<boolean>\n  unmountOnHide: Ref<boolean>\n  rootNavigationMenu: Ref<HTMLElement | undefined>\n  activeTrigger: Ref<HTMLElement | undefined>\n  indicatorTrack: Ref<HTMLElement | undefined>\n  onIndicatorTrackChange: (indicatorTrack: HTMLElement | undefined) => void\n  viewport: Ref<HTMLElement | undefined>\n  onViewportChange: (viewport: HTMLElement | undefined) => void\n  onTriggerEnter: (itemValue: string) => void\n  onTriggerLeave: () => void\n  onContentEnter: (itemValue: string) => void\n  onContentLeave: () => void\n  onItemSelect: (itemValue: string) => void\n  onItemDismiss: () => void\n}\n\nexport const [injectNavigationMenuContext, provideNavigationMenuContext]\n  = createContext<NavigationMenuContext>(['NavigationMenuRoot', 'NavigationMenuSub'], 'NavigationMenuContext')\n</script>\n\n<script setup lang=\"ts\">\nimport {\n  computed,\n  ref,\n  toRefs,\n  watchEffect,\n} from 'vue'\nimport { refAutoReset, useDebounceFn, useVModel } from '@vueuse/core'\nimport {\n  Primitive,\n} from '@/Primitive'\n\nconst props = withDefaults(defineProps<NavigationMenuRootProps>(), {\n  modelValue: undefined,\n  delayDuration: 200,\n  skipDelayDuration: 300,\n  orientation: 'horizontal',\n  disableClickTrigger: false,\n  disableHoverTrigger: false,\n  unmountOnHide: true,\n  as: 'nav',\n})\nconst emits = defineEmits<NavigationMenuRootEmits>()\n\ndefineSlots<{\n  default: (props: {\n    /** Current input values */\n    modelValue: typeof modelValue.value\n  }) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n  defaultValue: props.defaultValue ?? '',\n  passive: (props.modelValue === undefined) as false,\n}) as Ref<string>\nconst previousValue = ref('')\n\nconst { forwardRef, currentElement: rootNavigationMenu } = useForwardExpose()\n\nconst indicatorTrack = ref<HTMLElement>()\nconst viewport = ref<HTMLElement>()\nconst activeTrigger = ref<HTMLElement>()\n\nconst { getItems, CollectionSlot } = useCollection({ key: 'NavigationMenu', isProvider: true })\n\nconst { delayDuration, skipDelayDuration, dir: propDir, disableClickTrigger, disableHoverTrigger, unmountOnHide } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst isDelaySkipped = refAutoReset(false, skipDelayDuration)\nconst computedDelay = computed(() => {\n  const isOpen = modelValue.value !== ''\n  if (isOpen || isDelaySkipped.value)\n    return 150 // 150ms for user to switch trigger or move into content view\n  else return delayDuration.value\n})\n\nconst debouncedFn = useDebounceFn((val?: string) => {\n  // passing `undefined` meant to reset the debounce timer\n  if (typeof val === 'string') {\n    previousValue.value = modelValue.value\n    modelValue.value = val\n  }\n}, computedDelay)\n\nwatchEffect(() => {\n  if (!modelValue.value)\n    return\n\n  const items = getItems().map(i => i.ref)\n  activeTrigger.value = items.find(item =>\n    item.id.includes(modelValue.value),\n  )\n})\n\nprovideNavigationMenuContext({\n  isRootMenu: true,\n  modelValue,\n  previousValue,\n  baseId: useId(undefined, 'reka-navigation-menu'),\n  disableClickTrigger,\n  disableHoverTrigger,\n  dir,\n  unmountOnHide,\n  orientation: props.orientation,\n  rootNavigationMenu,\n  indicatorTrack,\n  activeTrigger,\n  onIndicatorTrackChange: (val) => {\n    indicatorTrack.value = val\n  },\n  viewport,\n  onViewportChange: (val) => {\n    viewport.value = val\n  },\n  onTriggerEnter: (val) => {\n    debouncedFn(val)\n  },\n  onTriggerLeave: () => {\n    isDelaySkipped.value = true\n    debouncedFn('')\n  },\n  onContentEnter: () => {\n    debouncedFn()\n  },\n  onContentLeave: () => {\n    if (!props.disablePointerLeaveClose)\n      debouncedFn('')\n  },\n  onItemSelect: (val) => {\n    // When selecting item we trigger update immediately\n    previousValue.value = modelValue.value\n    modelValue.value = val\n  },\n  onItemDismiss: () => {\n    previousValue.value = modelValue.value\n    modelValue.value = ''\n  },\n})\n</script>\n\n<template>\n  <CollectionSlot>\n    <Primitive\n      :ref=\"forwardRef\"\n      aria-label=\"Main\"\n      :as=\"as\"\n      :as-child=\"asChild\"\n      :data-orientation=\"orientation\"\n      :dir=\"dir\"\n      data-reka-navigation-menu\n    >\n      <slot :model-value=\"modelValue\" />\n    </Primitive>\n  </CollectionSlot>\n</template>\n"],"names":["createContext","useVModel","ref","useForwardExpose","useCollection","toRefs","useDirection","refAutoReset","computed","useDebounceFn","watchEffect","useId"],"mappings":"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"}