{"version":3,"file":"TagsInputInput.cjs","sources":["../../src/TagsInput/TagsInputInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport interface TagsInputInputProps extends PrimitiveProps {\n  /** The placeholder character to use for empty tags input. */\n  placeholder?: string\n  /** Focus on element when mounted. */\n  autoFocus?: boolean\n  /** Maximum number of character allowed. */\n  maxLength?: number\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref } from 'vue'\nimport { injectTagsInputRootContext } from './TagsInputRoot.vue'\nimport { Primitive } from '@/Primitive'\n\nconst props = withDefaults(defineProps<TagsInputInputProps>(), {\n  as: 'input',\n})\n\nconst context = injectTagsInputRootContext()\nconst { forwardRef, currentElement } = useForwardExpose()\n\nfunction handleBlur(event: Event) {\n  if (!context.addOnBlur.value)\n    return\n\n  const target = event.target as HTMLInputElement\n  if (!target.value)\n    return\n\n  const isAdded = context.onAddValue(target.value)\n  if (isAdded)\n    target.value = ''\n}\n\nfunction handleTab(event: Event) {\n  if (!context.addOnTab.value)\n    return\n\n  handleCustomKeydown(event)\n}\n\nconst isComposing = ref(false)\nfunction onCompositionStart() {\n  isComposing.value = true\n}\nfunction onCompositionEnd() {\n  requestAnimationFrame(() => {\n    isComposing.value = false\n  })\n}\nasync function handleCustomKeydown(event: Event) {\n  if (isComposing.value)\n    return\n  await nextTick()\n  // if keydown 'Enter' or `Tab` was prevented, we let user handle updating the value themselves\n  if (event.defaultPrevented)\n    return\n\n  const target = event.target as HTMLInputElement\n  if (!target.value)\n    return\n\n  const isAdded = context.onAddValue(target.value)\n  if (isAdded)\n    target.value = ''\n\n  // prevent reloading when using inside of form\n  event.preventDefault()\n}\n\nfunction handleInput(event: InputEvent) {\n  context.isInvalidInput.value = false\n  if (event.data === null)\n    return\n\n  const delimiter = context.delimiter.value\n  const matchesDelimiter = delimiter === event.data || (delimiter instanceof RegExp && delimiter.test(event.data))\n  if (matchesDelimiter) {\n    const target = event.target as HTMLInputElement\n    target.value = target.value.replace(delimiter, '')\n\n    const isAdded = context.onAddValue(target.value)\n    if (isAdded)\n      target.value = ''\n  }\n}\n\nfunction handlePaste(event: ClipboardEvent) {\n  if (context.addOnPaste.value) {\n    event.preventDefault()\n    const clipboardData = event.clipboardData\n    if (!clipboardData)\n      return\n\n    const value = clipboardData.getData('text')\n    if (context.delimiter.value) {\n      const splitValue = value.split(context.delimiter.value)\n      splitValue.forEach((v) => {\n        context.onAddValue(v)\n      })\n    }\n    else {\n      context.onAddValue(value)\n    }\n  }\n}\n\nonMounted(() => {\n  const inputEl = currentElement.value.nodeName === 'INPUT'\n    ? currentElement.value\n    : currentElement.value.querySelector('input')\n\n  if (!inputEl)\n    return\n\n  setTimeout(() => {\n    // make sure all DOM was flush then only capture the focus\n    if (props.autoFocus)\n      inputEl?.focus()\n  }, 1)\n})\n</script>\n\n<template>\n  <Primitive\n    :id=\"context.id?.value\"\n    :ref=\"forwardRef\"\n    type=\"text\"\n    autocomplete=\"off\"\n    autocorrect=\"off\"\n    autocapitalize=\"off\"\n    :as=\"as\"\n    :as-child=\"asChild\"\n    :maxlength=\"maxLength\"\n    :placeholder=\"placeholder\"\n    :disabled=\"context.disabled.value\"\n    :data-invalid=\"context.isInvalidInput.value ? '' : undefined\"\n    @input=\"handleInput\"\n    @keydown.enter=\"handleCustomKeydown\"\n    @keydown.tab=\"handleTab\"\n    @blur=\"handleBlur\"\n    @keydown=\"context.onInputKeydown\"\n    @compositionstart=\"onCompositionStart\"\n    @compositionend=\"onCompositionEnd\"\n    @paste=\"handlePaste\"\n  >\n    <slot />\n  </Primitive>\n</template>\n"],"names":["injectTagsInputRootContext","useForwardExpose","ref","nextTick","onMounted"],"mappings":"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"}