{"version":3,"file":"tag-input2.mjs","sources":["../../../../../../packages/components/tag-input/src/tag-input.vue"],"sourcesContent":["<template>\n  <div :class=\"classes\">\n    <b-tag\n      v-for=\"tag in modelValue\"\n      :key=\"tag\"\n      closable\n      :disable-transitions=\"false\"\n      @close=\"handleClear(tag)\"\n      >{{ tag }}</b-tag\n    >\n    <div\n      :contenteditable=\"isFocus\"\n      :tabindex=\"tabIndex\"\n      :class=\"[ns.e('textbox'), ns.is('focus', isFocus)]\"\n      @keydown=\"handleKeydown\"\n      @keyup=\"handleKeyup\"\n      @keydown.enter.prevent\n      @blur=\"handleBlur\"\n      @focus=\"handleFocus\"\n    >\n      {{ modelValue.length === 0 && !isFocus ? placeholder : '' }}\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport BTag from '@bigin/components/tag'\nimport { useFormItem, useNamespace } from '@bigin/hooks'\nimport { tagInputEmits, tagInputProps } from './tag-input'\n\ndefineOptions({\n  name: 'BTagInput',\n})\nconst props = defineProps(tagInputProps)\nconst emit = defineEmits(tagInputEmits)\n\nconst { formItem } = useFormItem()\nconst ns = useNamespace('tag-input')\n\nconst isError = computed(() => Boolean(formItem?.error))\nconst isFocus = ref(false)\n\nconst classes = computed(() => {\n  return [\n    ns.b(),\n    ns.is('rounded', props.rounded),\n    ns.is('focus', isFocus.value),\n    ns.is('error', isError.value),\n  ]\n})\n\n// methods\nconst handleFocus = (event: Event) => {\n  const elm = event.target as HTMLDivElement\n  elm.innerText = ''\n  isFocus.value = true\n}\n\nconst handleClear = (tag: string) => {\n  emit(\n    'update:modelValue',\n    props.modelValue.filter((item) => item !== tag)\n  )\n  emit(\n    'changed',\n    props.modelValue.filter((item) => item !== tag)\n  )\n}\n\nconst handleCommit = (elm: HTMLDivElement) => {\n  const _value = elm.innerText\n  const isValid =\n    _value.length &&\n    props.validator(_value) &&\n    !props.modelValue.includes(_value)\n\n  if (isValid) {\n    emit('update:modelValue', [...props.modelValue, _value])\n    emit('changed', [...props.modelValue, _value])\n    emit('error', 'none')\n    elm.innerText = ''\n  } else if (_value.length === 0) {\n    emit('error', 'required')\n  } else if (!props.validator(_value)) {\n    emit('error', 'validation')\n  } else if (props.modelValue.includes(_value)) {\n    emit('error', 'duplicate')\n  }\n}\n\nconst handleKeydown = (e: KeyboardEvent) => {\n  const elm = e.target as HTMLDivElement\n  const keyName = e.key\n\n  if (keyName === props.commitKey) {\n    e.preventDefault()\n    handleCommit(elm)\n  }\n}\n\nconst handleKeyup = (e: KeyboardEvent) => {\n  const keyName = e.key\n\n  if (\n    ['Backspace', 'Delete'].includes(keyName) &&\n    (e.target as HTMLDivElement).innerText.length === 0\n  ) {\n    emit('update:modelValue', props.modelValue.slice(0, -1))\n    emit('changed', props.modelValue.slice(0, -1))\n  }\n}\n\nconst handleBlur = (e: Event) => {\n  const elm = e.target as HTMLDivElement\n  isFocus.value = false\n  handleCommit(e.target as HTMLDivElement)\n\n  if (elm.innerText === '' && props.modelValue.length === 0) {\n    elm.innerText = props.placeholder\n  }\n}\n</script>\n"],"names":[],"mappings":"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"}