UNPKG

element-plus

Version:

A Component Library for Vue 3

195 lines (193 loc) 6.87 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const require_runtime = require('../../../../_virtual/_rolldown/runtime.js'); const require_aria = require('../../../../constants/aria.js'); const require_event = require('../../../../constants/event.js'); const require_browser = require('../../../../utils/browser.js'); const require_event$1 = require('../../../../utils/dom/event.js'); const require_types = require('../../../../utils/types.js'); const require_error = require('../../../../utils/error.js'); const require_index = require('../../../../hooks/use-focus-controller/index.js'); const require_index$1 = require('../../../../hooks/use-composition/index.js'); const require_use_form_common_props = require('../../../form/src/hooks/use-form-common-props.js'); let vue = require("vue"); let lodash_unified = require("lodash-unified"); //#region ../../packages/components/input-tag/src/composables/use-input-tag.ts function useInputTag({ props, emit, formItem }) { const disabled = require_use_form_common_props.useFormDisabled(); const size = require_use_form_common_props.useFormSize(); const inputRef = (0, vue.shallowRef)(); const inputValue = (0, vue.ref)(); const tagTooltipRef = (0, vue.ref)(); const tagSize = (0, vue.computed)(() => { return ["small"].includes(size.value) ? "small" : "default"; }); const placeholder = (0, vue.computed)(() => { return props.modelValue?.length ? void 0 : props.placeholder; }); const closable = (0, vue.computed)(() => !(props.readonly || disabled.value)); const inputLimit = (0, vue.computed)(() => { return require_types.isUndefined(props.max) ? false : (props.modelValue?.length ?? 0) >= props.max; }); const showTagList = (0, vue.computed)(() => { return props.collapseTags ? props.modelValue?.slice(0, props.maxCollapseTags) : props.modelValue; }); const collapseTagList = (0, vue.computed)(() => { return props.collapseTags ? props.modelValue?.slice(props.maxCollapseTags) : []; }); const addTagsEmit = (value) => { const list = [...props.modelValue ?? [], ...(0, lodash_unified.castArray)(value)]; emit(require_event.UPDATE_MODEL_EVENT, list); emit(require_event.CHANGE_EVENT, list); emit("add-tag", value); inputValue.value = void 0; }; const getDelimitedTags = (input) => { const parts = input.split(props.delimiter); const tags = parts.length > 1 ? parts.map((val) => val.trim()).filter(Boolean) : []; if (props.max) { const maxInsert = props.max - (props.modelValue?.length ?? 0); tags.splice(maxInsert); } return tags.length === 1 ? tags[0] : tags; }; const handlePaste = (event) => { const pasted = event.clipboardData?.getData("text"); if (props.readonly || inputLimit.value || !props.delimiter || !pasted) return; const { selectionStart = 0, selectionEnd = 0, value } = event.target; const nextValue = value.slice(0, selectionStart) + pasted + value.slice(selectionEnd); const tags = getDelimitedTags(nextValue); if (tags.length) { addTagsEmit(tags); emit(require_event.INPUT_EVENT, nextValue); event.preventDefault(); } }; const handleInput = (event) => { if (inputLimit.value) { inputValue.value = void 0; return; } if (isComposing.value) return; if (props.delimiter && inputValue.value) { const tags = getDelimitedTags(inputValue.value); if (tags.length) addTagsEmit(tags); } emit(require_event.INPUT_EVENT, event.target.value); }; const handleKeydown = (event) => { if (isComposing.value) return; switch (require_event$1.getEventCode(event)) { case props.trigger: event.preventDefault(); event.stopPropagation(); handleAddTag(); break; case require_aria.EVENT_CODE.numpadEnter: if (props.trigger === require_aria.EVENT_CODE.enter) { event.preventDefault(); event.stopPropagation(); handleAddTag(); } break; case require_aria.EVENT_CODE.backspace: if (!inputValue.value && props.modelValue?.length) { event.preventDefault(); event.stopPropagation(); handleRemoveTag(props.modelValue.length - 1); } break; } }; const handleKeyup = (event) => { if (isComposing.value || !require_browser.isAndroid()) return; switch (require_event$1.getEventCode(event)) { case require_aria.EVENT_CODE.space: if (props.trigger === require_aria.EVENT_CODE.space) { event.preventDefault(); event.stopPropagation(); handleAddTag(); } break; } }; const handleAddTag = () => { const value = inputValue.value?.trim(); if (!value || inputLimit.value) return; addTagsEmit(value); }; const handleRemoveTag = (index) => { const value = (props.modelValue ?? []).slice(); const [item] = value.splice(index, 1); emit(require_event.UPDATE_MODEL_EVENT, value); emit(require_event.CHANGE_EVENT, value); emit("remove-tag", item, index); }; const handleClear = () => { inputValue.value = void 0; emit(require_event.UPDATE_MODEL_EVENT, void 0); emit(require_event.CHANGE_EVENT, void 0); emit("clear"); }; const handleDragged = (draggingIndex, dropIndex, type) => { const value = (props.modelValue ?? []).slice(); const [draggedItem] = value.splice(draggingIndex, 1); const step = dropIndex > draggingIndex && type === "before" ? -1 : dropIndex < draggingIndex && type === "after" ? 1 : 0; value.splice(dropIndex + step, 0, draggedItem); emit(require_event.UPDATE_MODEL_EVENT, value); emit(require_event.CHANGE_EVENT, value); emit("drag-tag", draggingIndex, dropIndex + step, draggedItem); }; const focus = () => { inputRef.value?.focus(); }; const blur = () => { inputRef.value?.blur(); }; const { wrapperRef, isFocused } = require_index.useFocusController(inputRef, { disabled, beforeBlur(event) { return tagTooltipRef.value?.isFocusInsideContent(event); }, afterBlur() { if (props.saveOnBlur) handleAddTag(); else inputValue.value = void 0; if (props.validateEvent) formItem?.validate?.("blur").catch((err) => require_error.debugWarn(err)); } }); const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = require_index$1.useComposition({ afterComposition: handleInput }); (0, vue.watch)(() => props.modelValue, () => { if (props.validateEvent) formItem?.validate?.(require_event.CHANGE_EVENT).catch((err) => require_error.debugWarn(err)); }); return { inputRef, wrapperRef, tagTooltipRef, isFocused, isComposing, inputValue, size, tagSize, placeholder, closable, disabled, inputLimit, showTagList, collapseTagList, handleDragged, handlePaste, handleInput, handleKeydown, handleKeyup, handleAddTag, handleRemoveTag, handleClear, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd, focus, blur }; } //#endregion exports.useInputTag = useInputTag; //# sourceMappingURL=use-input-tag.js.map