{"version":3,"file":"ListboxRoot.cjs","sources":["../../src/Listbox/ListboxRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { createContext, findValuesBetween, useDirection, useFormControl, useKbd, useTypeahead } from '@/shared'\nimport { Primitive } from '..'\nimport { type PrimitiveProps, usePrimitiveElement } from '@/Primitive'\nimport type { AcceptableValue, DataOrientation, Direction, FormFieldProps } from '@/shared/types'\nimport { getFocusIntent } from '@/RovingFocus/utils'\n\ntype ListboxRootContext<T> = {\n  modelValue: Ref<T | Array<T> | undefined>\n  onValueChange: (val: T) => void\n  multiple: Ref<boolean>\n  orientation: Ref<DataOrientation>\n  dir: Ref<Direction>\n  disabled: Ref<boolean>\n  highlightOnHover: Ref<boolean>\n  highlightedElement: Ref<HTMLElement | null>\n  isVirtual: Ref<boolean>\n  virtualFocusHook: EventHook<Event | null | undefined>\n  virtualKeydownHook: EventHook<KeyboardEvent>\n  virtualHighlightHook: EventHook<any>\n  by?: string | ((a: T, b: T) => boolean)\n  firstValue?: Ref<T | undefined>\n  selectionBehavior?: Ref<'toggle' | 'replace'>\n\n  focusable: Ref<boolean>\n\n  onLeave: (event: Event) => void\n  onEnter: (event: Event) => void\n  changeHighlight: (el: HTMLElement, scrollIntoView?: boolean) => void\n  onKeydownNavigation: (event: KeyboardEvent) => void\n  onKeydownEnter: (event: KeyboardEvent) => void\n  onKeydownTypeAhead: (event: KeyboardEvent) => void\n  onCompositionStart: () => void\n  onCompositionEnd: () => void\n  highlightFirstItem: (event: InputEvent) => void\n}\n\nexport const [injectListboxRootContext, provideListboxRootContext]\n  = createContext<ListboxRootContext<AcceptableValue>>('ListboxRoot')\n\nexport interface ListboxRootProps<T = AcceptableValue> extends PrimitiveProps, FormFieldProps {\n  /** The controlled value of the listbox. Can be binded with with `v-model`. */\n  modelValue?: T | Array<T>\n  /** The value of the listbox when initially rendered. Use when you do not need to control the state of the Listbox */\n  defaultValue?: T | Array<T>\n  /** Whether multiple options can be selected or not. */\n  multiple?: boolean\n  /** The orientation of the listbox. <br>Mainly so arrow navigation is done accordingly (left & right vs. up & down) */\n  orientation?: DataOrientation\n  /** The reading direction of the listbox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n  dir?: Direction\n  /** When `true`, prevents the user from interacting with listbox */\n  disabled?: boolean\n  /**\n   * How multiple selection should behave in the collection.\n   * @defaultValue 'toggle'\n   */\n  selectionBehavior?: 'toggle' | 'replace'\n  /** When `true`, hover over item will trigger highlight */\n  highlightOnHover?: boolean\n  /** Use this to compare objects by a particular field, or pass your own comparison function for complete control over how objects are compared. */\n  by?: string | ((a: T, b: T) => boolean)\n}\n\nexport type ListboxRootEmits<T = AcceptableValue> = {\n  /** Event handler called when the value changes. */\n  'update:modelValue': [value: T]\n  /** Event handler when highlighted element changes. */\n  'highlight': [payload: { ref: HTMLElement, value: T } | undefined]\n  /** Event handler called when container is being focused. Can be prevented. */\n  'entryFocus': [event: CustomEvent]\n  /** Event handler called when the mouse leave the container */\n  'leave': [event: Event]\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport { type EventHook, createEventHook, useVModel } from '@vueuse/core'\nimport { type Ref, nextTick, ref, toRefs, watch } from 'vue'\nimport { compare } from './utils'\nimport { useCollection } from '@/Collection'\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\n\nconst props = withDefaults(defineProps<ListboxRootProps>(), {\n  selectionBehavior: 'toggle',\n  orientation: 'vertical',\n})\nconst emits = defineEmits<ListboxRootEmits>()\n\ndefineSlots<{\n  default: (props: {\n    /** Current active value */\n    modelValue: typeof modelValue.value\n  }) => any\n}>()\n\nconst { multiple, highlightOnHover, orientation, disabled, selectionBehavior, dir: propDir } = toRefs(props)\nconst { getItems } = useCollection<{ value: T }>({ isProvider: true })\nconst { handleTypeaheadSearch } = useTypeahead()\nconst { primitiveElement, currentElement } = usePrimitiveElement()\nconst kbd = useKbd()\nconst dir = useDirection(propDir)\n\nconst isFormControl = useFormControl(currentElement)\n\nconst firstValue = ref<T>()\nconst isUserAction = ref(false)\nconst focusable = ref(true)\nconst modelValue = useVModel(props, 'modelValue', emits, {\n  defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n  passive: (props.modelValue === undefined) as false,\n  deep: true,\n}) as Ref<T | T[] | undefined>\n\nfunction onValueChange(val: T) {\n  isUserAction.value = true\n  if (props.multiple) {\n    const modelArray = Array.isArray(modelValue.value) ? [...modelValue.value] : []\n    const index = modelArray.findIndex(i => compare(i, val, props.by))\n    if (props.selectionBehavior === 'toggle') {\n      index === -1 ? modelArray.push(val) : modelArray.splice(index, 1)\n      modelValue.value = modelArray\n    }\n    else {\n      modelValue.value = [val]\n      firstValue.value = val\n    }\n  }\n  else {\n    if (props.selectionBehavior === 'toggle') {\n      if (compare(modelValue.value, val, props.by))\n        modelValue.value = undefined\n      else\n        modelValue.value = val\n    }\n    else {\n      modelValue.value = val\n    }\n  }\n  setTimeout(() => {\n    isUserAction.value = false\n  }, 1)\n}\n\nconst highlightedElement = ref<HTMLElement | null>(null)\nconst previousElement = ref<HTMLElement | null>(null)\nconst isVirtual = ref(false)\nconst isComposing = ref(false)\nconst virtualFocusHook = createEventHook<Event | null | undefined>()\nconst virtualKeydownHook = createEventHook<KeyboardEvent>()\nconst virtualHighlightHook = createEventHook<T>()\n\nfunction getCollectionItem() {\n  return getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n}\n\nfunction changeHighlight(el: HTMLElement, scrollIntoView = true) {\n  if (!el)\n    return\n\n  highlightedElement.value = el\n  if (focusable.value)\n    highlightedElement.value.focus()\n  if (scrollIntoView)\n    highlightedElement.value.scrollIntoView({ block: 'nearest' })\n\n  const highlightedItem = getItems().find(i => i.ref === el)\n  emits('highlight', highlightedItem)\n}\n\nfunction highlightItem(value: T) {\n  if (isVirtual.value) {\n    virtualHighlightHook.trigger(value)\n  }\n  else {\n    const item = getItems().find(i => compare(i.value, value, props.by))\n    if (item) {\n      highlightedElement.value = item.ref\n      changeHighlight(item.ref)\n    }\n  }\n}\n\nfunction onKeydownEnter(event: KeyboardEvent) {\n  if (highlightedElement.value && highlightedElement.value.isConnected) {\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (!isComposing.value) {\n      highlightedElement.value.click()\n    }\n  }\n}\n\nfunction onKeydownTypeAhead(event: KeyboardEvent) {\n  if (!focusable.value)\n    return\n  isUserAction.value = true\n  if (isVirtual.value) {\n    virtualKeydownHook.trigger(event)\n  }\n  else {\n    const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n\n    if (isMetaKey && event.key === 'a' && multiple.value) {\n      const collection = getItems()\n      const values = collection.map(i => i.value)\n      modelValue.value = [...values]\n      event.preventDefault()\n      changeHighlight(collection[collection.length - 1].ref)\n    }\n    else if (!isMetaKey) {\n      const el = handleTypeaheadSearch(event.key, getItems())\n      if (el)\n        changeHighlight(el)\n    }\n  }\n  setTimeout(() => {\n    isUserAction.value = false\n  }, 1)\n}\n\nfunction onCompositionStart() {\n  isComposing.value = true\n}\nfunction onCompositionEnd() {\n  requestAnimationFrame(() => {\n    isComposing.value = false\n  })\n}\n\nfunction highlightFirstItem() {\n  nextTick(() => {\n    const event = new KeyboardEvent('keydown', { key: 'PageUp' })\n    onKeydownNavigation(event)\n  })\n}\n\nfunction onLeave(event: Event) {\n  const el = highlightedElement.value\n\n  if ((el as Node)?.isConnected) {\n    previousElement.value = el\n  }\n\n  highlightedElement.value = null\n  emits('leave', event)\n}\n\nfunction onEnter(event: Event) {\n  const entryFocusEvent = new CustomEvent('listbox.entryFocus', { bubbles: false, cancelable: true })\n  event.currentTarget?.dispatchEvent(entryFocusEvent)\n  emits('entryFocus', entryFocusEvent)\n\n  if (entryFocusEvent.defaultPrevented)\n    return\n\n  if (previousElement.value) {\n    changeHighlight(previousElement.value)\n  }\n  else {\n    const el = getCollectionItem()?.[0]\n    changeHighlight(el)\n  }\n}\n\nfunction onKeydownNavigation(event: KeyboardEvent) {\n  const intent = getFocusIntent(event, orientation.value, dir.value)\n  if (!intent)\n    return\n\n  let collection = getCollectionItem()\n  if (highlightedElement.value) {\n    if (intent === 'last') {\n      collection.reverse()\n    }\n    else if (intent === 'prev' || intent === 'next') {\n      if (intent === 'prev')\n        collection.reverse()\n\n      const currentIndex = collection.indexOf(highlightedElement.value)\n      collection = collection.slice(currentIndex + 1)\n    }\n    handleMultipleReplace(event, collection[0])\n  }\n\n  if (collection.length) {\n    const index = !highlightedElement.value && intent === 'prev' ? collection.length - 1 : 0\n    changeHighlight(collection[index])\n  }\n\n  if (isVirtual.value)\n    return virtualKeydownHook.trigger(event)\n}\n\nfunction handleMultipleReplace(event: KeyboardEvent, targetEl: HTMLElement) {\n  if (isVirtual.value || props.selectionBehavior !== 'replace' || !multiple.value || !Array.isArray(modelValue.value))\n    return\n  const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n  if (isMetaKey && !event.shiftKey)\n    return\n\n  if (event.shiftKey) {\n    const collection = getItems().filter(i => i.ref.dataset.disabled !== '')\n    let lastValue = collection.find(i => i.ref === targetEl)?.value\n\n    if (event.key === kbd.END)\n      lastValue = collection[collection.length - 1].value\n    else if (event.key === kbd.HOME)\n      lastValue = collection[0].value\n\n    if (!lastValue || !firstValue.value)\n      return\n\n    const values = findValuesBetween(collection.map(i => i.value), firstValue.value, lastValue)\n    modelValue.value = values\n  }\n}\n\nasync function highlightSelected(event?: Event) {\n  await nextTick()\n  if (isVirtual.value) {\n    // Trigger on nextTick for Virtualizer to be mounted\n    virtualFocusHook.trigger(event)\n  }\n  else {\n    const collection = getCollectionItem()\n    const item = collection.find(i => i.dataset.state === 'checked')\n    if (item)\n      changeHighlight(item)\n    else if (collection.length)\n      changeHighlight(collection[0])\n  }\n}\n\n// watch for only programmatic changes\nwatch(modelValue, () => {\n  if (!isUserAction.value) {\n    nextTick(() => {\n      highlightSelected()\n    })\n  }\n}, { immediate: true, deep: true })\n\ndefineExpose({\n  highlightedElement,\n  highlightItem,\n  highlightFirstItem,\n  highlightSelected,\n  getItems,\n})\n\nprovideListboxRootContext({\n  modelValue,\n  // @ts-expect-error ignoring\n  onValueChange,\n  multiple,\n  orientation,\n  dir,\n  disabled,\n  highlightOnHover,\n  highlightedElement,\n  isVirtual,\n  virtualFocusHook,\n  virtualKeydownHook,\n  virtualHighlightHook,\n  by: props.by,\n  firstValue,\n  selectionBehavior,\n\n  focusable,\n  onLeave,\n  onEnter,\n  changeHighlight,\n  onKeydownEnter,\n  onKeydownNavigation,\n  onKeydownTypeAhead,\n  onCompositionStart,\n  onCompositionEnd,\n  highlightFirstItem,\n})\n</script>\n\n<template>\n  <Primitive\n    ref=\"primitiveElement\"\n    :as=\"as\"\n    :as-child=\"asChild\"\n    :dir=\"dir\"\n    :data-disabled=\"disabled ? '' : undefined\"\n    @pointerleave=\"onLeave\"\n    @focusout=\"async (event: FocusEvent) => {\n      const target = (event.relatedTarget || event.target) as HTMLElement | null\n      await nextTick()\n      if (highlightedElement && currentElement && !currentElement.contains(target)) {\n        onLeave(event)\n      }\n    }\"\n  >\n    <slot :model-value=\"modelValue\" />\n\n    <VisuallyHiddenInput\n      v-if=\"isFormControl && name\"\n      :name=\"name\"\n      :value=\"modelValue\"\n      :disabled=\"disabled\"\n      :required=\"required\"\n    />\n  </Primitive>\n</template>\n"],"names":["createContext","toRefs","useCollection","useTypeahead","usePrimitiveElement","useKbd","useDirection","useFormControl","ref","useVModel","compare","createEventHook","nextTick","getFocusIntent","findValuesBetween","watch"],"mappings":"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"}