@v-c/textarea 0.0.6 → 0.0.7

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.
@@ -5,136 +5,202 @@ let vue = require("vue");
5
5
  let __v_c_resize_observer = require("@v-c/resize-observer");
6
6
  __v_c_resize_observer = require_rolldown_runtime.__toESM(__v_c_resize_observer);
7
7
  let __v_c_util = require("@v-c/util");
8
- let __v_c_util_dist_omit = require("@v-c/util/dist/omit");
9
- __v_c_util_dist_omit = require_rolldown_runtime.__toESM(__v_c_util_dist_omit);
8
+ let __v_c_util_dist_props_util = require("@v-c/util/dist/props-util");
10
9
  let __v_c_util_dist_raf = require("@v-c/util/dist/raf");
11
10
  __v_c_util_dist_raf = require_rolldown_runtime.__toESM(__v_c_util_dist_raf);
12
11
  var RESIZE_START = 0;
13
12
  var RESIZE_MEASURING = 1;
14
13
  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;
14
+ var ResizableTextArea = /* @__PURE__ */ (0, vue.defineComponent)((props, { expose, attrs }) => {
15
+ const internalValue = (0, vue.ref)(props?.value ?? props?.defaultValue ?? "");
16
+ (0, vue.watch)(() => props.value, () => {
17
+ internalValue.value = props.value;
18
+ });
19
+ const mergedValue = (0, vue.computed)(() => internalValue.value ?? "");
20
+ const onInternalChange = (e) => {
21
+ internalValue.value = e.target.value;
22
+ props?.onChange?.(e);
23
+ };
24
+ const textareaRef = (0, vue.shallowRef)();
25
+ expose({ textArea: textareaRef });
26
+ const autoSizeData = (0, vue.computed)(() => {
27
+ const autoSize = props.autoSize;
28
+ if (autoSize && typeof autoSize === "object") return [autoSize.minRows, autoSize.maxRows];
29
+ return [];
30
+ });
31
+ const minRows = (0, vue.computed)(() => autoSizeData?.value?.[0]);
32
+ const maxRows = (0, vue.computed)(() => autoSizeData?.value?.[1]);
33
+ const resizeState = (0, vue.ref)(RESIZE_STABLE);
34
+ const autoSizeStyle = (0, vue.shallowRef)({});
35
+ const startResize = () => {
36
+ resizeState.value = RESIZE_START;
37
+ };
38
+ const needAutoSize = (0, vue.computed)(() => !!props.autoSize);
39
+ (0, vue.watch)([
40
+ () => props.value,
41
+ minRows,
42
+ maxRows,
43
+ needAutoSize
44
+ ], async () => {
45
+ await (0, vue.nextTick)();
46
+ if (needAutoSize.value) startResize();
47
+ }, { immediate: true });
48
+ (0, vue.watch)(resizeState, async () => {
49
+ await (0, vue.nextTick)();
50
+ if (resizeState.value === RESIZE_START) resizeState.value = RESIZE_MEASURING;
51
+ else if (resizeState.value === RESIZE_MEASURING) {
52
+ const textareaStyles = require_calculateNodeHeight.default(textareaRef.value, false, minRows.value, maxRows.value);
53
+ resizeState.value = RESIZE_STABLE;
54
+ autoSizeStyle.value = textareaStyles;
55
+ }
56
+ }, { immediate: true });
57
+ const resizeRafRef = (0, vue.shallowRef)();
58
+ const cleanRaf = () => {
59
+ __v_c_util_dist_raf.default.cancel(resizeRafRef.value);
60
+ };
61
+ const onInternalResize = (size) => {
62
+ if (resizeState.value === RESIZE_STABLE) {
63
+ props?.onResize?.(size);
64
+ if (props.autoSize) {
65
+ cleanRaf();
66
+ resizeRafRef.value = (0, __v_c_util_dist_raf.default)(() => {
67
+ startResize();
68
+ });
53
69
  }
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);
70
+ }
71
+ };
72
+ (0, vue.onUnmounted)(() => {
73
+ cleanRaf();
74
+ });
75
+ return () => {
76
+ const { autoSize, onResize, prefixCls, disabled, className } = props;
77
+ const { style, restAttrs } = (0, __v_c_util_dist_props_util.getAttrStyleAndClass)(attrs, { omits: ["onKeydown"] });
78
+ const mergedAutoSizeStyle = needAutoSize.value ? autoSizeStyle.value : null;
79
+ const mergedStyle = {
80
+ ...style,
81
+ ...mergedAutoSizeStyle
102
82
  };
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
- }
83
+ if (resizeState.value === RESIZE_START || resizeState.value === RESIZE_MEASURING) {
84
+ mergedStyle.overflowY = "hidden";
85
+ mergedStyle.overflowX = "hidden";
86
+ }
87
+ return (0, vue.createVNode)(__v_c_resize_observer.default, {
88
+ "onResize": onInternalResize,
89
+ "disabled": !(autoSize || onResize)
90
+ }, { default: () => [(0, vue.createVNode)("textarea", (0, vue.mergeProps)(restAttrs, {
91
+ "ref": textareaRef,
92
+ "style": mergedStyle,
93
+ "class": (0, __v_c_util.clsx)(prefixCls, className, { [`${prefixCls}-disabled`]: disabled }),
94
+ "disabled": disabled,
95
+ "value": mergedValue.value,
96
+ "onChange": onInternalChange
97
+ }), null)] });
98
+ };
99
+ }, {
100
+ props: {
101
+ value: {
102
+ type: null,
103
+ required: false,
104
+ default: void 0
105
+ },
106
+ defaultValue: {
107
+ type: null,
108
+ required: false,
109
+ default: void 0
110
+ },
111
+ prefixCls: {
112
+ type: String,
113
+ required: false,
114
+ default: void 0
115
+ },
116
+ disabled: {
117
+ type: Boolean,
118
+ required: false,
119
+ default: void 0
120
+ },
121
+ className: {
122
+ type: String,
123
+ required: false,
124
+ default: void 0
125
+ },
126
+ autoSize: {
127
+ type: [Boolean, Object],
128
+ required: false,
129
+ default: void 0
130
+ },
131
+ onPressEnter: {
132
+ type: Function,
133
+ required: false,
134
+ default: void 0
135
+ },
136
+ onResize: {
137
+ type: Function,
138
+ required: false,
139
+ default: void 0
140
+ },
141
+ classNames: {
142
+ type: Object,
143
+ required: false,
144
+ default: void 0
145
+ },
146
+ styles: {
147
+ type: Object,
148
+ required: false,
149
+ default: void 0
150
+ },
151
+ allowClear: {
152
+ type: [Boolean, Object],
153
+ required: false,
154
+ default: void 0
155
+ },
156
+ suffix: {
157
+ type: null,
158
+ required: false,
159
+ default: void 0
160
+ },
161
+ showCount: {
162
+ type: [Boolean, Object],
163
+ required: false,
164
+ default: void 0
165
+ },
166
+ count: {
167
+ type: null,
168
+ required: false,
169
+ default: void 0
170
+ },
171
+ onClear: {
172
+ type: Function,
173
+ required: false,
174
+ default: void 0
175
+ },
176
+ onChange: {
177
+ type: Function,
178
+ required: false,
179
+ default: void 0
180
+ },
181
+ maxLength: {
182
+ type: Number,
183
+ required: false,
184
+ default: void 0
185
+ },
186
+ minLength: {
187
+ type: Number,
188
+ required: false,
189
+ default: void 0
190
+ },
191
+ hidden: {
192
+ type: Boolean,
193
+ required: false,
194
+ default: void 0
195
+ },
196
+ readOnly: {
197
+ type: Boolean,
198
+ required: false,
199
+ default: void 0
200
+ }
201
+ },
202
+ name: "ResizableTextArea",
203
+ inheritAttrs: false
139
204
  });
205
+ var ResizableTextArea_default = ResizableTextArea;
140
206
  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;