element-plus
Version:
A Component Library for Vue 3
172 lines (167 loc) • 5.49 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var useFormCommonProps = require('../../../form/src/hooks/use-form-common-props.js');
var types = require('../../../../utils/types.js');
var event = require('../../../../constants/event.js');
var aria = require('../../../../constants/aria.js');
var index = require('../../../../hooks/use-focus-controller/index.js');
var error = require('../../../../utils/error.js');
var index$1 = require('../../../../hooks/use-composition/index.js');
function useInputTag({ props, emit, formItem }) {
const disabled = useFormCommonProps.useFormDisabled();
const size = useFormCommonProps.useFormSize();
const inputRef = vue.shallowRef();
const inputValue = vue.ref();
const tagSize = vue.computed(() => {
return ["small"].includes(size.value) ? "small" : "default";
});
const placeholder = vue.computed(() => {
var _a;
return ((_a = props.modelValue) == null ? void 0 : _a.length) ? void 0 : props.placeholder;
});
const closable = vue.computed(() => !(props.readonly || disabled.value));
const inputLimit = vue.computed(() => {
var _a, _b;
return types.isUndefined(props.max) ? false : ((_b = (_a = props.modelValue) == null ? void 0 : _a.length) != null ? _b : 0) >= props.max;
});
const handleInput = (event$1) => {
var _a, _b;
if (inputLimit.value) {
inputValue.value = void 0;
return;
}
if (isComposing.value)
return;
if (props.delimiter) {
const replacement = (_a = inputValue.value) == null ? void 0 : _a.replace(props.delimiter, "");
if ((replacement == null ? void 0 : replacement.length) !== ((_b = inputValue.value) == null ? void 0 : _b.length)) {
inputValue.value = replacement;
handleAddTag();
}
}
emit(event.INPUT_EVENT, event$1.target.value);
};
const handleKeydown = (event) => {
var _a;
if (isComposing.value)
return;
switch (event.code) {
case props.trigger:
event.preventDefault();
event.stopPropagation();
handleAddTag();
break;
case aria.EVENT_CODE.numpadEnter:
if (props.trigger === aria.EVENT_CODE.enter) {
event.preventDefault();
event.stopPropagation();
handleAddTag();
}
break;
case aria.EVENT_CODE.backspace:
if (!inputValue.value && ((_a = props.modelValue) == null ? void 0 : _a.length)) {
event.preventDefault();
event.stopPropagation();
handleRemoveTag(props.modelValue.length - 1);
}
break;
}
};
const handleAddTag = () => {
var _a, _b;
const value = (_a = inputValue.value) == null ? void 0 : _a.trim();
if (!value || inputLimit.value)
return;
const list = [...(_b = props.modelValue) != null ? _b : [], value];
emit(event.UPDATE_MODEL_EVENT, list);
emit(event.CHANGE_EVENT, list);
emit("add-tag", value);
inputValue.value = void 0;
};
const handleRemoveTag = (index) => {
var _a;
const value = ((_a = props.modelValue) != null ? _a : []).slice();
const [item] = value.splice(index, 1);
emit(event.UPDATE_MODEL_EVENT, value);
emit(event.CHANGE_EVENT, value);
emit("remove-tag", item);
};
const handleClear = () => {
inputValue.value = void 0;
emit(event.UPDATE_MODEL_EVENT, void 0);
emit(event.CHANGE_EVENT, void 0);
emit("clear");
};
const handleDragged = (draggingIndex, dropIndex, type) => {
var _a;
const value = ((_a = props.modelValue) != null ? _a : []).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(event.UPDATE_MODEL_EVENT, value);
emit(event.CHANGE_EVENT, value);
};
const focus = () => {
var _a;
(_a = inputRef.value) == null ? void 0 : _a.focus();
};
const blur = () => {
var _a;
(_a = inputRef.value) == null ? void 0 : _a.blur();
};
const { wrapperRef, isFocused } = index.useFocusController(inputRef, {
beforeFocus() {
return disabled.value;
},
afterBlur() {
var _a;
if (props.saveOnBlur) {
handleAddTag();
} else {
inputValue.value = void 0;
}
if (props.validateEvent) {
(_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "blur").catch((err) => error.debugWarn(err));
}
}
});
const {
isComposing,
handleCompositionStart,
handleCompositionUpdate,
handleCompositionEnd
} = index$1.useComposition({ afterComposition: handleInput });
vue.watch(() => props.modelValue, () => {
var _a;
if (props.validateEvent) {
(_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, event.CHANGE_EVENT).catch((err) => error.debugWarn(err));
}
});
return {
inputRef,
wrapperRef,
isFocused,
isComposing,
inputValue,
size,
tagSize,
placeholder,
closable,
disabled,
inputLimit,
handleDragged,
handleInput,
handleKeydown,
handleAddTag,
handleRemoveTag,
handleClear,
handleCompositionStart,
handleCompositionUpdate,
handleCompositionEnd,
focus,
blur
};
}
exports.useInputTag = useInputTag;
//# sourceMappingURL=use-input-tag.js.map
;