UNPKG

@opensig/opendesign

Version:

205 lines (204 loc) 7.29 kB
"use strict"; const vue = require("vue"); const types = require("./types.js"); const icons = require("../../_utils/icons.js"); const useInput = require("../../_headless/use-input.js"); const index = require("../../locale/index.js"); require("../../scrollbar/index.js"); const vScrollbar = require("../../scrollbar/vScrollbar.js"); const _hoisted_1 = ["for"]; const _hoisted_2 = ["date-value"]; const _hoisted_3 = ["id", "value", "placeholder", "readonly", "disabled", "rows", "cols"]; const _hoisted_4 = ["innerHTML"]; const _hoisted_5 = { key: 1 }; const _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "InTextarea", props: types.inTextareaProps, emits: ["update:modelValue", "change", "input", "focus", "blur", "clear", "pressEnter"], setup(__props, { expose: __expose, emit: __emit }) { const props = __props; const emits = __emit; const slots = vue.useSlots(); const { t } = index.useI18n(); const { modelValue, inputOnOutlimit, maxLength, minLength, showLength } = vue.toRefs(props); const { displayValue, clearValue: clear, isValid, inputValueLength, isShowLength, isOutLengthLimit, handleBlur, handleInput, handleFocus, handleClear, inputEl } = useInput.useInput({ emits, maxLength, minLength, showLength, inputOnOutlimit, modelValue, defaultValue: props.defaultValue ?? "", emitUpdate: (value) => { emits("update:modelValue", value); }, format: props.format, validate: props.validate, valueOnInvalidChange: props.valueOnInvalidChange }); const resizeValue = vue.computed(() => { if (props.autoSize || props.disabled) { return "none"; } else { if (props.resize === "h") { return "horizontal"; } else if (props.resize === "v") { return "vertical"; } return props.resize; } }); const isClearable = vue.computed(() => props.clearable && !props.disabled && !props.readonly); const focus = () => { var _a; (_a = inputEl.value) == null ? void 0 : _a.focus(); }; const blur = () => { var _a; (_a = inputEl.value) == null ? void 0 : _a.blur(); }; const mirrorValue = vue.computed(() => { return displayValue.value; }); const scrollbarProps = vue.computed(() => { if (props.scrollbar === true) { return { showType: "hover", size: "small" }; } return props.scrollbar; }); __expose({ inputEl, focus, blur, clear }); return (_ctx, _cache) => { var _a, _b; return vue.openBlock(), vue.createElementBlock("label", { class: vue.normalizeClass(["o_textarea", { "o_textarea-clearable": isClearable.value && vue.unref(displayValue) !== "", "o_textarea-disabled": props.disabled, "o_textarea-readonly": props.readonly, "o_textarea-invalid": !vue.unref(isValid), "o_textarea-auto-size": props.autoSize, "o_textarea-limit": props.maxLength }]), for: props.textareaId }, [ ((_a = slots.prefix) == null ? void 0 : _a.call(slots)) ? (vue.openBlock(), vue.createElementBlock( "div", { key: 0, class: "o_textarea-prefix", onMousedown: _cache[0] || (_cache[0] = vue.withModifiers(() => { }, ["prevent"])) }, [ vue.renderSlot(_ctx.$slots, "prefix") ], 32 /* NEED_HYDRATION */ )) : vue.createCommentVNode("v-if", true), vue.createElementVNode("div", { class: vue.normalizeClass(["o_textarea-wrap", { "o_textarea-wrap-auto-size": props.autoSize }]), "date-value": mirrorValue.value }, [ vue.withDirectives(vue.createElementVNode("textarea", { id: props.textareaId, ref_key: "inputEl", ref: inputEl, value: vue.unref(displayValue), class: "o_textarea-textarea", placeholder: props.placeholder, readonly: props.readonly, disabled: props.disabled, rows: props.rows, cols: props.cols, style: vue.normalizeStyle({ resize: resizeValue.value }), onFocus: _cache[1] || (_cache[1] = //@ts-ignore (...args) => vue.unref(handleFocus) && vue.unref(handleFocus)(...args)), onBlur: _cache[2] || (_cache[2] = //@ts-ignore (...args) => vue.unref(handleBlur) && vue.unref(handleBlur)(...args)), onInput: _cache[3] || (_cache[3] = //@ts-ignore (...args) => vue.unref(handleInput) && vue.unref(handleInput)(...args)) }, null, 44, _hoisted_3), [ [vue.unref(vScrollbar.vScrollbar), scrollbarProps.value] ]), isClearable.value ? (vue.openBlock(), vue.createElementBlock( "div", { key: 0, class: "o_textarea-icon o_textarea-clear", onClick: _cache[4] || (_cache[4] = //@ts-ignore (...args) => vue.unref(handleClear) && vue.unref(handleClear)(...args)), onMousedown: _cache[5] || (_cache[5] = vue.withModifiers(() => { }, ["prevent"])) }, [ vue.createVNode(vue.unref(icons.IconClose), { class: "o_textarea-clear-icon" }) ], 32 /* NEED_HYDRATION */ )) : vue.createCommentVNode("v-if", true), vue.unref(isShowLength) ? (vue.openBlock(), vue.createElementBlock( "div", { key: 1, class: vue.normalizeClass(["o_textarea-icon o_textarea-count", { "o_textarea-count-error": vue.unref(isOutLengthLimit) }]) }, [ vue.renderSlot(_ctx.$slots, "length", { length: vue.unref(inputValueLength) }, () => [ props.maxLength ?? props.minLength ? (vue.openBlock(), vue.createElementBlock("span", { key: 0, innerHTML: vue.unref(t)("input.limit", vue.unref(inputValueLength), props.maxLength ?? props.minLength) }, null, 8, _hoisted_4)) : (vue.openBlock(), vue.createElementBlock( "span", _hoisted_5, vue.toDisplayString(vue.unref(inputValueLength)), 1 /* TEXT */ )) ]) ], 2 /* CLASS */ )) : vue.createCommentVNode("v-if", true) ], 10, _hoisted_2), ((_b = slots.suffix) == null ? void 0 : _b.call(slots)) ? (vue.openBlock(), vue.createElementBlock( "div", { key: 1, class: "o_textarea-suffix", onMousedown: _cache[6] || (_cache[6] = vue.withModifiers(() => { }, ["prevent"])) }, [ vue.renderSlot(_ctx.$slots, "suffix") ], 32 /* NEED_HYDRATION */ )) : vue.createCommentVNode("v-if", true) ], 10, _hoisted_1); }; } }); module.exports = _sfc_main;