element-plus
Version:
A Component Library for Vue 3
1 lines • 14.3 kB
Source Map (JSON)
{"version":3,"file":"use-input-tag.mjs","sources":["../../../../../../../packages/components/input-tag/src/composables/use-input-tag.ts"],"sourcesContent":["import { computed, ref, shallowRef, watch } from 'vue'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport {\n debugWarn,\n ensureArray,\n getEventCode,\n isAndroid,\n isUndefined,\n} from '@element-plus/utils'\nimport { useComposition, useFocusController } from '@element-plus/hooks'\nimport { useFormDisabled, useFormSize } from '@element-plus/components/form'\n\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { EmitFn } from '@element-plus/utils'\nimport type { FormItemContext } from '@element-plus/components/form'\nimport type { InputTagEmits, InputTagProps } from '../input-tag'\n\ninterface UseInputTagOptions {\n props: InputTagProps\n emit: EmitFn<InputTagEmits>\n formItem?: FormItemContext\n}\n\nexport function useInputTag({ props, emit, formItem }: UseInputTagOptions) {\n const disabled = useFormDisabled()\n const size = useFormSize()\n\n const inputRef = shallowRef<HTMLInputElement>()\n const inputValue = ref<string>()\n const tagTooltipRef = ref<TooltipInstance>()\n\n const tagSize = computed(() => {\n return ['small'].includes(size.value) ? 'small' : 'default'\n })\n const placeholder = computed(() => {\n return props.modelValue?.length ? undefined : props.placeholder\n })\n const closable = computed(() => !(props.readonly || disabled.value))\n const inputLimit = computed(() => {\n return isUndefined(props.max)\n ? false\n : (props.modelValue?.length ?? 0) >= props.max\n })\n const showTagList = computed(() => {\n return props.collapseTags\n ? props.modelValue?.slice(0, props.maxCollapseTags)\n : props.modelValue\n })\n const collapseTagList = computed(() => {\n return props.collapseTags\n ? props.modelValue?.slice(props.maxCollapseTags)\n : []\n })\n\n const addTagsEmit = (value: string | string[]) => {\n const list = [...(props.modelValue ?? []), ...ensureArray(value)]\n\n emit(UPDATE_MODEL_EVENT, list)\n emit(CHANGE_EVENT, list)\n emit('add-tag', value)\n inputValue.value = undefined\n }\n\n const getDelimitedTags = (input: string) => {\n const tags = input\n .split(props.delimiter)\n .filter((val) => val && val !== input)\n if (props.max) {\n const maxInsert = props.max - (props.modelValue?.length ?? 0)\n tags.splice(maxInsert)\n }\n return tags.length === 1 ? tags[0] : tags\n }\n\n const handleInput = (event: Event) => {\n if (inputLimit.value) {\n inputValue.value = undefined\n return\n }\n\n if (isComposing.value) return\n if (props.delimiter && inputValue.value) {\n const tags = getDelimitedTags(inputValue.value)\n if (tags.length) {\n addTagsEmit(tags)\n }\n }\n emit(INPUT_EVENT, (event.target as HTMLInputElement).value)\n }\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (isComposing.value) return\n const code = getEventCode(event)\n\n switch (code) {\n case props.trigger:\n event.preventDefault()\n event.stopPropagation()\n handleAddTag()\n break\n case EVENT_CODE.numpadEnter:\n if (props.trigger === EVENT_CODE.enter) {\n event.preventDefault()\n event.stopPropagation()\n handleAddTag()\n }\n break\n case EVENT_CODE.backspace:\n if (!inputValue.value && props.modelValue?.length) {\n event.preventDefault()\n event.stopPropagation()\n handleRemoveTag(props.modelValue.length - 1)\n }\n break\n }\n }\n\n const handleKeyup = (event: KeyboardEvent) => {\n if (isComposing.value || !isAndroid()) return\n const code = getEventCode(event)\n\n switch (code) {\n case EVENT_CODE.space:\n if (props.trigger === EVENT_CODE.space) {\n event.preventDefault()\n event.stopPropagation()\n handleAddTag()\n }\n break\n }\n }\n\n const handleAddTag = () => {\n const value = inputValue.value?.trim()\n if (!value || inputLimit.value) return\n addTagsEmit(value)\n }\n\n const handleRemoveTag = (index: number) => {\n const value = (props.modelValue ?? []).slice()\n const [item] = value.splice(index, 1)\n\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n emit('remove-tag', item, index)\n }\n\n const handleClear = () => {\n inputValue.value = undefined\n emit(UPDATE_MODEL_EVENT, undefined)\n emit(CHANGE_EVENT, undefined)\n emit('clear')\n }\n\n const handleDragged = (\n draggingIndex: number,\n dropIndex: number,\n type: 'before' | 'after'\n ) => {\n const value = (props.modelValue ?? []).slice()\n const [draggedItem] = value.splice(draggingIndex, 1)\n const step =\n dropIndex > draggingIndex && type === 'before'\n ? -1\n : dropIndex < draggingIndex && type === 'after'\n ? 1\n : 0\n\n value.splice(dropIndex + step, 0, draggedItem)\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n emit('drag-tag', draggingIndex, dropIndex + step, draggedItem)\n }\n\n const focus = () => {\n inputRef.value?.focus()\n }\n\n const blur = () => {\n inputRef.value?.blur()\n }\n\n const { wrapperRef, isFocused } = useFocusController(inputRef, {\n disabled,\n beforeBlur(event) {\n return tagTooltipRef.value?.isFocusInsideContent(event)\n },\n afterBlur() {\n if (props.saveOnBlur) {\n handleAddTag()\n } else {\n inputValue.value = undefined\n }\n\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n },\n })\n\n const {\n isComposing,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n } = useComposition({ afterComposition: handleInput })\n\n watch(\n () => props.modelValue,\n () => {\n if (props.validateEvent) {\n formItem?.validate?.(CHANGE_EVENT).catch((err) => debugWarn(err))\n }\n }\n )\n\n return {\n inputRef,\n wrapperRef,\n tagTooltipRef,\n isFocused,\n isComposing,\n inputValue,\n size,\n tagSize,\n placeholder,\n closable,\n disabled,\n inputLimit,\n showTagList,\n collapseTagList,\n handleDragged,\n handleInput,\n handleKeydown,\n handleKeyup,\n handleAddTag,\n handleRemoveTag,\n handleClear,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n focus,\n blur,\n }\n}\n"],"names":["ensureArray"],"mappings":"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"}