reka-ui
Version:
Vue port for Radix UI Primitives.
1 lines • 6.77 kB
Source Map (JSON)
{"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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"}