@v-c/textarea 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,134 +7,227 @@ __v_c_resize_observer = require_rolldown_runtime.__toESM(__v_c_resize_observer);
7
7
  let __v_c_util = require("@v-c/util");
8
8
  let __v_c_util_dist_omit = require("@v-c/util/dist/omit");
9
9
  __v_c_util_dist_omit = require_rolldown_runtime.__toESM(__v_c_util_dist_omit);
10
+ let __v_c_util_dist_props_util = require("@v-c/util/dist/props-util");
10
11
  let __v_c_util_dist_raf = require("@v-c/util/dist/raf");
11
12
  __v_c_util_dist_raf = require_rolldown_runtime.__toESM(__v_c_util_dist_raf);
12
13
  var RESIZE_START = 0;
13
14
  var RESIZE_MEASURING = 1;
14
15
  var RESIZE_STABLE = 2;
15
- var ResizableTextArea_default = /* @__PURE__ */ (0, vue.defineComponent)({
16
- name: "ResizableTextArea",
17
- props: {
18
- prefixCls: String,
19
- defaultValue: [String, Number],
20
- value: [String, Number],
21
- autoSize: [Boolean, Object],
22
- onResize: Function,
23
- disabled: Boolean,
24
- onChange: Function,
25
- onInternalAutoSize: Function,
26
- onKeydown: Function,
27
- onFocus: Function,
28
- onBlur: Function,
29
- onCompositionstart: Function,
30
- onCompositionend: Function,
31
- readOnly: Boolean,
32
- maxLength: Number
33
- },
34
- emits: [
35
- "change",
36
- "internalAutoSize",
37
- "resize"
38
- ],
39
- setup(props, { expose, attrs, emit }) {
40
- const mergedValue = (0, vue.shallowRef)(props.value || props.defaultValue);
41
- (0, vue.watch)(() => props.value, (val) => {
42
- mergedValue.value = val;
43
- });
44
- const onInternalChange = (event) => {
45
- mergedValue.value = event.target.value;
46
- emit("change", event);
47
- };
48
- const textareaRef = (0, vue.ref)();
49
- expose({
50
- textArea: textareaRef,
51
- setValue: (val) => {
52
- mergedValue.value = val;
16
+ var ResizableTextArea = /* @__PURE__ */ (0, vue.defineComponent)((props, { expose, attrs }) => {
17
+ const internalValue = (0, vue.ref)(props?.value ?? props?.defaultValue ?? "");
18
+ (0, vue.watch)(() => props.value, () => {
19
+ internalValue.value = props.value;
20
+ });
21
+ const mergedValue = (0, vue.computed)(() => internalValue.value ?? "");
22
+ const onInternalChange = (e) => {
23
+ if (props.value === void 0) internalValue.value = e.target.value;
24
+ props?.onChange?.(e);
25
+ };
26
+ const textareaRef = (0, vue.shallowRef)();
27
+ expose({ textArea: textareaRef });
28
+ const autoSizeData = (0, vue.computed)(() => {
29
+ const autoSize = props.autoSize;
30
+ if (autoSize && typeof autoSize === "object") return [autoSize.minRows, autoSize.maxRows];
31
+ return [];
32
+ });
33
+ const minRows = (0, vue.computed)(() => autoSizeData?.value?.[0]);
34
+ const maxRows = (0, vue.computed)(() => autoSizeData?.value?.[1]);
35
+ const resizeState = (0, vue.ref)(RESIZE_STABLE);
36
+ const autoSizeStyle = (0, vue.shallowRef)({});
37
+ const startResize = () => {
38
+ resizeState.value = RESIZE_START;
39
+ };
40
+ const needAutoSize = (0, vue.computed)(() => !!props.autoSize);
41
+ (0, vue.watch)([
42
+ () => props.value,
43
+ minRows,
44
+ maxRows,
45
+ needAutoSize
46
+ ], async () => {
47
+ await (0, vue.nextTick)();
48
+ if (needAutoSize.value) startResize();
49
+ }, { immediate: true });
50
+ (0, vue.watch)(resizeState, () => {
51
+ if (!textareaRef.value) return;
52
+ if (resizeState.value === RESIZE_START) resizeState.value = RESIZE_MEASURING;
53
+ else if (resizeState.value === RESIZE_MEASURING) {
54
+ const textareaStyles = require_calculateNodeHeight.default(textareaRef.value, false, minRows.value, maxRows.value);
55
+ resizeState.value = RESIZE_STABLE;
56
+ autoSizeStyle.value = textareaStyles;
57
+ }
58
+ });
59
+ const resizeRafRef = (0, vue.shallowRef)();
60
+ const cleanRaf = () => {
61
+ __v_c_util_dist_raf.default.cancel(resizeRafRef.value);
62
+ };
63
+ const onInternalResize = (size) => {
64
+ if (resizeState.value === RESIZE_STABLE) {
65
+ props?.onResize?.(size);
66
+ if (props.autoSize) {
67
+ cleanRaf();
68
+ resizeRafRef.value = (0, __v_c_util_dist_raf.default)(() => {
69
+ startResize();
70
+ });
53
71
  }
54
- });
55
- const minRows = (0, vue.ref)();
56
- const maxRows = (0, vue.ref)();
57
- (0, vue.watch)(() => props.autoSize, () => {
58
- const { autoSize } = props;
59
- if (autoSize && typeof autoSize === "object") {
60
- minRows.value = autoSize.minRows;
61
- maxRows.value = autoSize.maxRows;
62
- } else {
63
- minRows.value = void 0;
64
- maxRows.value = void 0;
65
- }
66
- }, { immediate: true });
67
- const needAutoSize = (0, vue.computed)(() => !!props.autoSize);
68
- const fixFirefoxAutoScroll = () => {
69
- try {
70
- if (document.activeElement === textareaRef.value) {
71
- const { selectionStart, selectionEnd, scrollTop } = textareaRef.value;
72
- textareaRef.value.setSelectionRange(selectionStart, selectionEnd);
73
- textareaRef.value.scrollTop = scrollTop;
74
- }
75
- } catch (e) {}
76
- };
77
- const resizeState = (0, vue.ref)(RESIZE_STABLE);
78
- const autoSizeStyle = (0, vue.ref)();
79
- const startResize = () => {
80
- resizeState.value = RESIZE_START;
81
- if (process.env.NODE_ENV === "test") emit("internalAutoSize");
82
- };
83
- (0, vue.watch)([
84
- () => props.value,
85
- minRows,
86
- maxRows,
87
- needAutoSize
88
- ], () => {
89
- if (needAutoSize.value) startResize();
90
- });
91
- (0, vue.watch)(resizeState, () => {
92
- if (resizeState.value === RESIZE_START) resizeState.value = RESIZE_MEASURING;
93
- else if (resizeState.value === RESIZE_MEASURING) {
94
- const textareaStyles = require_calculateNodeHeight.default(textareaRef.value, false, minRows.value, maxRows.value);
95
- resizeState.value = RESIZE_STABLE;
96
- autoSizeStyle.value = textareaStyles;
97
- } else fixFirefoxAutoScroll();
98
- });
99
- const resizeRafRef = (0, vue.ref)();
100
- const cleanRaf = () => {
101
- __v_c_util_dist_raf.default.cancel(resizeRafRef.value);
72
+ }
73
+ };
74
+ (0, vue.onUnmounted)(() => {
75
+ cleanRaf();
76
+ });
77
+ return () => {
78
+ const { autoSize, onResize, prefixCls, disabled } = props;
79
+ const { style, restAttrs, className } = (0, __v_c_util_dist_props_util.getAttrStyleAndClass)(attrs, { omits: ["onKeydown"] });
80
+ const mergedAutoSizeStyle = needAutoSize.value ? autoSizeStyle.value : null;
81
+ const mergedStyle = {
82
+ ...style,
83
+ ...mergedAutoSizeStyle
102
84
  };
103
- const onInternalResize = (size) => {
104
- if (resizeState.value === RESIZE_STABLE) {
105
- emit("resize", size);
106
- if (props.autoSize) {
107
- cleanRaf();
108
- resizeRafRef.value = (0, __v_c_util_dist_raf.default)(() => {
109
- startResize();
110
- });
111
- }
112
- }
113
- };
114
- (0, vue.onBeforeUnmount)(() => cleanRaf());
115
- return () => {
116
- const { prefixCls, autoSize, onResize, disabled,...resetProps } = props;
117
- const mergedAutoSizeStyle = needAutoSize.value ? autoSizeStyle.value : null;
118
- const mergedStyle = {
119
- ...attrs.style,
120
- ...mergedAutoSizeStyle,
121
- overflowY: resizeState.value === RESIZE_START || resizeState.value === RESIZE_MEASURING ? "hidden" : void 0,
122
- overflowX: resizeState.value === RESIZE_START || resizeState.value === RESIZE_MEASURING ? "hidden" : void 0
123
- };
124
- const restAttrs = (0, __v_c_util_dist_omit.default)(attrs, ["class", "style"]);
125
- return (0, vue.createVNode)(__v_c_resize_observer.default, {
126
- "onResize": onInternalResize,
127
- "disabled": !(autoSize || onResize)
128
- }, { default: () => [(0, vue.createVNode)("textarea", (0, vue.mergeProps)(restAttrs, resetProps, {
129
- "ref": textareaRef,
130
- "style": mergedStyle,
131
- "class": (0, __v_c_util.classNames)(prefixCls, [attrs.class], { [`${prefixCls}-disabled`]: disabled }),
132
- "disabled": disabled,
133
- "value": mergedValue.value,
134
- "onChange": onInternalChange,
135
- "onInput": onInternalChange
136
- }), null)] });
137
- };
138
- }
85
+ if (resizeState.value === RESIZE_START || resizeState.value === RESIZE_MEASURING) {
86
+ mergedStyle.overflowY = "hidden";
87
+ mergedStyle.overflowX = "hidden";
88
+ }
89
+ return (0, vue.createVNode)(__v_c_resize_observer.default, {
90
+ "onResize": onInternalResize,
91
+ "disabled": !(autoSize || onResize)
92
+ }, { default: () => [(0, vue.createVNode)("textarea", (0, vue.mergeProps)(restAttrs, (0, __v_c_util_dist_omit.default)(props, [
93
+ "suffix",
94
+ "classNames",
95
+ "styles",
96
+ "prefixCls",
97
+ "allowClear",
98
+ "autoSize",
99
+ "showCount",
100
+ "disabled",
101
+ "hidden",
102
+ "readOnly",
103
+ "onClear",
104
+ "maxLength",
105
+ "onResize",
106
+ "onChange"
107
+ ]), {
108
+ "ref": textareaRef,
109
+ "style": mergedStyle,
110
+ "class": (0, __v_c_util.clsx)(prefixCls, className, { [`${prefixCls}-disabled`]: disabled }),
111
+ "disabled": disabled,
112
+ "value": mergedValue.value,
113
+ "onInput": onInternalChange
114
+ }), null)] });
115
+ };
116
+ }, {
117
+ props: {
118
+ value: {
119
+ type: null,
120
+ required: false,
121
+ default: void 0
122
+ },
123
+ defaultValue: {
124
+ type: null,
125
+ required: false,
126
+ default: void 0
127
+ },
128
+ prefixCls: {
129
+ type: String,
130
+ required: false,
131
+ default: void 0
132
+ },
133
+ disabled: {
134
+ type: Boolean,
135
+ required: false,
136
+ default: void 0
137
+ },
138
+ autoSize: {
139
+ type: [Boolean, Object],
140
+ required: false,
141
+ default: void 0
142
+ },
143
+ onPressEnter: {
144
+ type: Function,
145
+ required: false,
146
+ default: void 0
147
+ },
148
+ onResize: {
149
+ type: Function,
150
+ required: false,
151
+ default: void 0
152
+ },
153
+ classNames: {
154
+ type: Object,
155
+ required: false,
156
+ default: void 0
157
+ },
158
+ styles: {
159
+ type: Object,
160
+ required: false,
161
+ default: void 0
162
+ },
163
+ allowClear: {
164
+ type: [Boolean, Object],
165
+ required: false,
166
+ default: void 0
167
+ },
168
+ suffix: {
169
+ type: null,
170
+ required: false,
171
+ default: void 0
172
+ },
173
+ showCount: {
174
+ type: [Boolean, Object],
175
+ required: false,
176
+ default: void 0
177
+ },
178
+ count: {
179
+ type: null,
180
+ required: false,
181
+ default: void 0
182
+ },
183
+ onClear: {
184
+ type: Function,
185
+ required: false,
186
+ default: void 0
187
+ },
188
+ onChange: {
189
+ type: Function,
190
+ required: false,
191
+ default: void 0
192
+ },
193
+ maxLength: {
194
+ type: Number,
195
+ required: false,
196
+ default: void 0
197
+ },
198
+ minLength: {
199
+ type: Number,
200
+ required: false,
201
+ default: void 0
202
+ },
203
+ hidden: {
204
+ type: Boolean,
205
+ required: false,
206
+ default: void 0
207
+ },
208
+ readOnly: {
209
+ type: Boolean,
210
+ required: false,
211
+ default: void 0
212
+ },
213
+ placeholder: {
214
+ type: String,
215
+ required: false,
216
+ default: void 0
217
+ },
218
+ autoFocus: {
219
+ type: Boolean,
220
+ required: false,
221
+ default: void 0
222
+ },
223
+ onKeydown: {
224
+ type: Function,
225
+ required: false,
226
+ default: void 0
227
+ }
228
+ },
229
+ name: "ResizableTextArea",
230
+ inheritAttrs: false
139
231
  });
232
+ var ResizableTextArea_default = ResizableTextArea;
140
233
  exports.default = ResizableTextArea_default;
@@ -1,41 +1,3 @@
1
- declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
2
- prefixCls: StringConstructor;
3
- defaultValue: (StringConstructor | NumberConstructor)[];
4
- value: (StringConstructor | NumberConstructor)[];
5
- autoSize: (BooleanConstructor | ObjectConstructor)[];
6
- onResize: FunctionConstructor;
7
- disabled: BooleanConstructor;
8
- onChange: FunctionConstructor;
9
- onInternalAutoSize: FunctionConstructor;
10
- onKeydown: FunctionConstructor;
11
- onFocus: FunctionConstructor;
12
- onBlur: FunctionConstructor;
13
- onCompositionstart: FunctionConstructor;
14
- onCompositionend: FunctionConstructor;
15
- readOnly: BooleanConstructor;
16
- maxLength: NumberConstructor;
17
- }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("resize" | "change" | "internalAutoSize")[], "resize" | "change" | "internalAutoSize", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
18
- prefixCls: StringConstructor;
19
- defaultValue: (StringConstructor | NumberConstructor)[];
20
- value: (StringConstructor | NumberConstructor)[];
21
- autoSize: (BooleanConstructor | ObjectConstructor)[];
22
- onResize: FunctionConstructor;
23
- disabled: BooleanConstructor;
24
- onChange: FunctionConstructor;
25
- onInternalAutoSize: FunctionConstructor;
26
- onKeydown: FunctionConstructor;
27
- onFocus: FunctionConstructor;
28
- onBlur: FunctionConstructor;
29
- onCompositionstart: FunctionConstructor;
30
- onCompositionend: FunctionConstructor;
31
- readOnly: BooleanConstructor;
32
- maxLength: NumberConstructor;
33
- }>> & Readonly<{
34
- onResize?: ((...args: any[]) => any) | undefined;
35
- onChange?: ((...args: any[]) => any) | undefined;
36
- onInternalAutoSize?: ((...args: any[]) => any) | undefined;
37
- }>, {
38
- disabled: boolean;
39
- readOnly: boolean;
40
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
41
- export default _default;
1
+ import { TextAreaProps } from './interface';
2
+ declare const ResizableTextArea: import('vue').DefineSetupFnComponent<TextAreaProps, {}, {}, TextAreaProps & {}, import('vue').PublicProps>;
3
+ export default ResizableTextArea;