@uipath/apollo-wind 2.28.0 → 2.29.0
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.
|
@@ -15,7 +15,7 @@ var __webpack_modules__ = {
|
|
|
15
15
|
"./avatar" (module) {
|
|
16
16
|
module.exports = require("./avatar.cjs");
|
|
17
17
|
},
|
|
18
|
-
"
|
|
18
|
+
"./badge" (module) {
|
|
19
19
|
module.exports = require("./badge.cjs");
|
|
20
20
|
},
|
|
21
21
|
"./breadcrumb" (module) {
|
|
@@ -30,13 +30,13 @@ var __webpack_modules__ = {
|
|
|
30
30
|
"./calendar" (module) {
|
|
31
31
|
module.exports = require("./calendar.cjs");
|
|
32
32
|
},
|
|
33
|
-
"
|
|
33
|
+
"./card" (module) {
|
|
34
34
|
module.exports = require("./card.cjs");
|
|
35
35
|
},
|
|
36
|
-
"
|
|
36
|
+
"./checkbox" (module) {
|
|
37
37
|
module.exports = require("./checkbox.cjs");
|
|
38
38
|
},
|
|
39
|
-
"
|
|
39
|
+
"./collapsible" (module) {
|
|
40
40
|
module.exports = require("./collapsible.cjs");
|
|
41
41
|
},
|
|
42
42
|
"./combobox" (module) {
|
|
@@ -45,7 +45,7 @@ var __webpack_modules__ = {
|
|
|
45
45
|
"@/components/ui/command" (module) {
|
|
46
46
|
module.exports = require("./command.cjs");
|
|
47
47
|
},
|
|
48
|
-
"
|
|
48
|
+
"./context-menu" (module) {
|
|
49
49
|
module.exports = require("./context-menu.cjs");
|
|
50
50
|
},
|
|
51
51
|
"./data-table" (module) {
|
|
@@ -60,10 +60,10 @@ var __webpack_modules__ = {
|
|
|
60
60
|
"./dialog" (module) {
|
|
61
61
|
module.exports = require("./dialog.cjs");
|
|
62
62
|
},
|
|
63
|
-
"
|
|
63
|
+
"./dropdown-menu" (module) {
|
|
64
64
|
module.exports = require("./dropdown-menu.cjs");
|
|
65
65
|
},
|
|
66
|
-
"
|
|
66
|
+
"./editable-cell" (module) {
|
|
67
67
|
module.exports = require("./editable-cell.cjs");
|
|
68
68
|
},
|
|
69
69
|
"./empty-state" (module) {
|
|
@@ -72,16 +72,16 @@ var __webpack_modules__ = {
|
|
|
72
72
|
"./file-upload" (module) {
|
|
73
73
|
module.exports = require("./file-upload.cjs");
|
|
74
74
|
},
|
|
75
|
-
"
|
|
75
|
+
"./hover-card" (module) {
|
|
76
76
|
module.exports = require("./hover-card.cjs");
|
|
77
77
|
},
|
|
78
78
|
"@/components/ui/input-group" (module) {
|
|
79
79
|
module.exports = require("./input-group.cjs");
|
|
80
80
|
},
|
|
81
|
-
"
|
|
81
|
+
"./input" (module) {
|
|
82
82
|
module.exports = require("./input.cjs");
|
|
83
83
|
},
|
|
84
|
-
"
|
|
84
|
+
"./label" (module) {
|
|
85
85
|
module.exports = require("./label.cjs");
|
|
86
86
|
},
|
|
87
87
|
"./layout" (module) {
|
|
@@ -150,13 +150,13 @@ var __webpack_modules__ = {
|
|
|
150
150
|
"./tabs" (module) {
|
|
151
151
|
module.exports = require("./tabs.cjs");
|
|
152
152
|
},
|
|
153
|
-
"
|
|
153
|
+
"@/components/ui/textarea" (module) {
|
|
154
154
|
module.exports = require("./textarea.cjs");
|
|
155
155
|
},
|
|
156
156
|
"./toggle-group" (module) {
|
|
157
157
|
module.exports = require("./toggle-group.cjs");
|
|
158
158
|
},
|
|
159
|
-
"
|
|
159
|
+
"@/components/ui/toggle" (module) {
|
|
160
160
|
module.exports = require("./toggle.cjs");
|
|
161
161
|
},
|
|
162
162
|
"./tooltip" (module) {
|
|
@@ -247,7 +247,7 @@ var __webpack_exports__ = {};
|
|
|
247
247
|
"default"
|
|
248
248
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_avatar__rspack_import_4[__rspack_import_key];
|
|
249
249
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
250
|
-
var _badge__rspack_import_5 = __webpack_require__("
|
|
250
|
+
var _badge__rspack_import_5 = __webpack_require__("./badge");
|
|
251
251
|
var __rspack_reexport = {};
|
|
252
252
|
for(const __rspack_import_key in _badge__rspack_import_5)if ([
|
|
253
253
|
"TreeView",
|
|
@@ -282,21 +282,21 @@ var __webpack_exports__ = {};
|
|
|
282
282
|
"default"
|
|
283
283
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_calendar__rspack_import_9[__rspack_import_key];
|
|
284
284
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
285
|
-
var _card__rspack_import_10 = __webpack_require__("
|
|
285
|
+
var _card__rspack_import_10 = __webpack_require__("./card");
|
|
286
286
|
var __rspack_reexport = {};
|
|
287
287
|
for(const __rspack_import_key in _card__rspack_import_10)if ([
|
|
288
288
|
"TreeView",
|
|
289
289
|
"default"
|
|
290
290
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_card__rspack_import_10[__rspack_import_key];
|
|
291
291
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
292
|
-
var _checkbox__rspack_import_11 = __webpack_require__("
|
|
292
|
+
var _checkbox__rspack_import_11 = __webpack_require__("./checkbox");
|
|
293
293
|
var __rspack_reexport = {};
|
|
294
294
|
for(const __rspack_import_key in _checkbox__rspack_import_11)if ([
|
|
295
295
|
"TreeView",
|
|
296
296
|
"default"
|
|
297
297
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_checkbox__rspack_import_11[__rspack_import_key];
|
|
298
298
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
299
|
-
var _collapsible__rspack_import_12 = __webpack_require__("
|
|
299
|
+
var _collapsible__rspack_import_12 = __webpack_require__("./collapsible");
|
|
300
300
|
var __rspack_reexport = {};
|
|
301
301
|
for(const __rspack_import_key in _collapsible__rspack_import_12)if ([
|
|
302
302
|
"TreeView",
|
|
@@ -317,7 +317,7 @@ var __webpack_exports__ = {};
|
|
|
317
317
|
"default"
|
|
318
318
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_command__rspack_import_14[__rspack_import_key];
|
|
319
319
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
320
|
-
var _context_menu__rspack_import_15 = __webpack_require__("
|
|
320
|
+
var _context_menu__rspack_import_15 = __webpack_require__("./context-menu");
|
|
321
321
|
var __rspack_reexport = {};
|
|
322
322
|
for(const __rspack_import_key in _context_menu__rspack_import_15)if ([
|
|
323
323
|
"TreeView",
|
|
@@ -352,14 +352,14 @@ var __webpack_exports__ = {};
|
|
|
352
352
|
"default"
|
|
353
353
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_dialog__rspack_import_19[__rspack_import_key];
|
|
354
354
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
355
|
-
var _dropdown_menu__rspack_import_20 = __webpack_require__("
|
|
355
|
+
var _dropdown_menu__rspack_import_20 = __webpack_require__("./dropdown-menu");
|
|
356
356
|
var __rspack_reexport = {};
|
|
357
357
|
for(const __rspack_import_key in _dropdown_menu__rspack_import_20)if ([
|
|
358
358
|
"TreeView",
|
|
359
359
|
"default"
|
|
360
360
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_dropdown_menu__rspack_import_20[__rspack_import_key];
|
|
361
361
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
362
|
-
var _editable_cell__rspack_import_21 = __webpack_require__("
|
|
362
|
+
var _editable_cell__rspack_import_21 = __webpack_require__("./editable-cell");
|
|
363
363
|
var __rspack_reexport = {};
|
|
364
364
|
for(const __rspack_import_key in _editable_cell__rspack_import_21)if ([
|
|
365
365
|
"TreeView",
|
|
@@ -380,14 +380,14 @@ var __webpack_exports__ = {};
|
|
|
380
380
|
"default"
|
|
381
381
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_file_upload__rspack_import_23[__rspack_import_key];
|
|
382
382
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
383
|
-
var _hover_card__rspack_import_24 = __webpack_require__("
|
|
383
|
+
var _hover_card__rspack_import_24 = __webpack_require__("./hover-card");
|
|
384
384
|
var __rspack_reexport = {};
|
|
385
385
|
for(const __rspack_import_key in _hover_card__rspack_import_24)if ([
|
|
386
386
|
"TreeView",
|
|
387
387
|
"default"
|
|
388
388
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_hover_card__rspack_import_24[__rspack_import_key];
|
|
389
389
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
390
|
-
var _input__rspack_import_25 = __webpack_require__("
|
|
390
|
+
var _input__rspack_import_25 = __webpack_require__("./input");
|
|
391
391
|
var __rspack_reexport = {};
|
|
392
392
|
for(const __rspack_import_key in _input__rspack_import_25)if ([
|
|
393
393
|
"TreeView",
|
|
@@ -401,7 +401,7 @@ var __webpack_exports__ = {};
|
|
|
401
401
|
"default"
|
|
402
402
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_input_group__rspack_import_26[__rspack_import_key];
|
|
403
403
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
404
|
-
var _label__rspack_import_27 = __webpack_require__("
|
|
404
|
+
var _label__rspack_import_27 = __webpack_require__("./label");
|
|
405
405
|
var __rspack_reexport = {};
|
|
406
406
|
for(const __rspack_import_key in _label__rspack_import_27)if ([
|
|
407
407
|
"TreeView",
|
|
@@ -562,14 +562,14 @@ var __webpack_exports__ = {};
|
|
|
562
562
|
"default"
|
|
563
563
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_tabs__rspack_import_49[__rspack_import_key];
|
|
564
564
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
565
|
-
var _textarea__rspack_import_50 = __webpack_require__("
|
|
565
|
+
var _textarea__rspack_import_50 = __webpack_require__("@/components/ui/textarea");
|
|
566
566
|
var __rspack_reexport = {};
|
|
567
567
|
for(const __rspack_import_key in _textarea__rspack_import_50)if ([
|
|
568
568
|
"TreeView",
|
|
569
569
|
"default"
|
|
570
570
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_textarea__rspack_import_50[__rspack_import_key];
|
|
571
571
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
572
|
-
var _toggle__rspack_import_51 = __webpack_require__("
|
|
572
|
+
var _toggle__rspack_import_51 = __webpack_require__("@/components/ui/toggle");
|
|
573
573
|
var __rspack_reexport = {};
|
|
574
574
|
for(const __rspack_import_key in _toggle__rspack_import_51)if ([
|
|
575
575
|
"TreeView",
|
|
@@ -29,11 +29,135 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
29
|
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
30
30
|
const external_react_namespaceObject = require("react");
|
|
31
31
|
const index_cjs_namespaceObject = require("../../lib/index.cjs");
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
function normalizeRows(value) {
|
|
33
|
+
if (void 0 === value || !Number.isFinite(value)) return;
|
|
34
|
+
return Math.max(1, Math.floor(value));
|
|
35
|
+
}
|
|
36
|
+
function measureRowMetrics(el) {
|
|
37
|
+
const styles = window.getComputedStyle(el);
|
|
38
|
+
const lineHeight = parseFloat(styles.lineHeight) || 1.2 * parseFloat(styles.fontSize) || 20;
|
|
39
|
+
const padding = parseFloat(styles.paddingTop) + parseFloat(styles.paddingBottom) || 0;
|
|
40
|
+
const border = parseFloat(styles.borderTopWidth) + parseFloat(styles.borderBottomWidth) || 0;
|
|
41
|
+
return {
|
|
42
|
+
lineHeight,
|
|
43
|
+
padding,
|
|
44
|
+
border,
|
|
45
|
+
borderBox: 'border-box' === styles.boxSizing
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function cssLength(value) {
|
|
49
|
+
if (null == value) return '';
|
|
50
|
+
return 'number' == typeof value ? `${value}px` : String(value);
|
|
51
|
+
}
|
|
52
|
+
const Textarea = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ className, minRows, maxRows, onChange, style, ...props }, ref)=>{
|
|
53
|
+
const { effMinRows, effMaxRows } = external_react_namespaceObject.useMemo(()=>{
|
|
54
|
+
const nMin = normalizeRows(minRows);
|
|
55
|
+
const nMax = normalizeRows(maxRows);
|
|
56
|
+
return {
|
|
57
|
+
effMinRows: void 0 !== nMin && void 0 !== nMax ? Math.min(nMin, nMax) : nMin,
|
|
58
|
+
effMaxRows: nMax
|
|
59
|
+
};
|
|
60
|
+
}, [
|
|
61
|
+
minRows,
|
|
62
|
+
maxRows
|
|
63
|
+
]);
|
|
64
|
+
const managed = void 0 !== effMinRows || void 0 !== effMaxRows;
|
|
65
|
+
const innerRef = external_react_namespaceObject.useRef(null);
|
|
66
|
+
const manuallyResized = external_react_namespaceObject.useRef(false);
|
|
67
|
+
const styleRef = external_react_namespaceObject.useRef(style);
|
|
68
|
+
styleRef.current = style;
|
|
69
|
+
const setRef = external_react_namespaceObject.useCallback((node)=>{
|
|
70
|
+
innerRef.current = node;
|
|
71
|
+
if ('function' == typeof ref) ref(node);
|
|
72
|
+
else if (ref) ref.current = node;
|
|
73
|
+
}, [
|
|
74
|
+
ref
|
|
75
|
+
]);
|
|
76
|
+
const restoreOwnedStyles = external_react_namespaceObject.useCallback((el)=>{
|
|
77
|
+
const consumer = styleRef.current;
|
|
78
|
+
el.style.height = cssLength(consumer?.height);
|
|
79
|
+
el.style.minHeight = cssLength(consumer?.minHeight);
|
|
80
|
+
el.style.overflowY = cssLength(consumer?.overflowY);
|
|
81
|
+
}, []);
|
|
82
|
+
const resize = external_react_namespaceObject.useCallback(()=>{
|
|
83
|
+
const el = innerRef.current;
|
|
84
|
+
if (!el || !managed) return;
|
|
85
|
+
const { lineHeight, padding, border, borderBox } = measureRowMetrics(el);
|
|
86
|
+
const extra = borderBox ? padding + border : 0;
|
|
87
|
+
const minHeight = void 0 !== effMinRows ? effMinRows * lineHeight + extra : 0;
|
|
88
|
+
el.style.minHeight = void 0 !== effMinRows ? `${minHeight}px` : cssLength(styleRef.current?.minHeight);
|
|
89
|
+
if (void 0 === effMaxRows || manuallyResized.current) return;
|
|
90
|
+
const maxHeight = effMaxRows * lineHeight + extra;
|
|
91
|
+
el.style.height = 'auto';
|
|
92
|
+
const contentNeeded = borderBox ? el.scrollHeight + border : Math.max(0, el.scrollHeight - padding);
|
|
93
|
+
const target = Math.min(Math.max(contentNeeded, minHeight), maxHeight);
|
|
94
|
+
el.style.height = `${target}px`;
|
|
95
|
+
el.style.overflowY = contentNeeded > maxHeight ? 'auto' : 'hidden';
|
|
96
|
+
}, [
|
|
97
|
+
managed,
|
|
98
|
+
effMinRows,
|
|
99
|
+
effMaxRows
|
|
100
|
+
]);
|
|
101
|
+
external_react_namespaceObject.useLayoutEffect(()=>{
|
|
102
|
+
resize();
|
|
103
|
+
}, [
|
|
104
|
+
resize,
|
|
105
|
+
props.value,
|
|
106
|
+
props.defaultValue
|
|
107
|
+
]);
|
|
108
|
+
external_react_namespaceObject.useLayoutEffect(()=>{
|
|
109
|
+
manuallyResized.current = false;
|
|
110
|
+
const el = innerRef.current;
|
|
111
|
+
if (!el) return;
|
|
112
|
+
if (!managed) return void restoreOwnedStyles(el);
|
|
113
|
+
if (void 0 === effMaxRows) {
|
|
114
|
+
el.style.height = cssLength(styleRef.current?.height);
|
|
115
|
+
el.style.overflowY = cssLength(styleRef.current?.overflowY);
|
|
116
|
+
}
|
|
117
|
+
resize();
|
|
118
|
+
}, [
|
|
119
|
+
managed,
|
|
120
|
+
effMaxRows,
|
|
121
|
+
resize,
|
|
122
|
+
restoreOwnedStyles
|
|
123
|
+
]);
|
|
124
|
+
external_react_namespaceObject.useLayoutEffect(()=>{
|
|
125
|
+
const el = innerRef.current;
|
|
126
|
+
if (!el || !managed || "u" < typeof ResizeObserver) return;
|
|
127
|
+
let lastWidth = el.clientWidth;
|
|
128
|
+
const observer = new ResizeObserver(()=>{
|
|
129
|
+
const width = el.clientWidth;
|
|
130
|
+
if (width !== lastWidth) {
|
|
131
|
+
lastWidth = width;
|
|
132
|
+
resize();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (void 0 === effMaxRows || manuallyResized.current) return;
|
|
136
|
+
const { lineHeight, padding, border, borderBox } = measureRowMetrics(el);
|
|
137
|
+
const maxHeight = effMaxRows * lineHeight + (borderBox ? padding + border : 0);
|
|
138
|
+
if (el.offsetHeight > maxHeight + 1) {
|
|
139
|
+
manuallyResized.current = true;
|
|
140
|
+
el.style.overflowY = cssLength(styleRef.current?.overflowY) || 'auto';
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
observer.observe(el);
|
|
144
|
+
return ()=>observer.disconnect();
|
|
145
|
+
}, [
|
|
146
|
+
managed,
|
|
147
|
+
effMaxRows,
|
|
148
|
+
resize
|
|
149
|
+
]);
|
|
150
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("textarea", {
|
|
151
|
+
className: (0, index_cjs_namespaceObject.cn)('flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-base transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', 'future:rounded-xl future:border-0 future:bg-surface-overlay future:text-sm future:placeholder:text-foreground-muted future:placeholder:font-normal future:focus-visible:ring-offset-2 future:focus-visible:ring-offset-background', !managed && 'min-h-[80px]', managed && 'resize-y', className),
|
|
152
|
+
ref: setRef,
|
|
153
|
+
style: style,
|
|
154
|
+
onChange: (event)=>{
|
|
155
|
+
onChange?.(event);
|
|
156
|
+
resize();
|
|
157
|
+
},
|
|
35
158
|
...props
|
|
36
|
-
})
|
|
159
|
+
});
|
|
160
|
+
});
|
|
37
161
|
Textarea.displayName = 'Textarea';
|
|
38
162
|
exports.Textarea = __webpack_exports__.Textarea;
|
|
39
163
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export type TextareaProps = React.ComponentProps<'textarea'
|
|
3
|
-
|
|
2
|
+
export type TextareaProps = React.ComponentProps<'textarea'> & {
|
|
3
|
+
/**
|
|
4
|
+
* Minimum number of visible rows.
|
|
5
|
+
*/
|
|
6
|
+
minRows?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Enables auto-grow and sets the ceiling, in rows. The field grows with its content
|
|
9
|
+
* up to `maxRows`, then scrolls.
|
|
10
|
+
*/
|
|
11
|
+
maxRows?: number;
|
|
12
|
+
};
|
|
13
|
+
declare const Textarea: React.ForwardRefExoticComponent<Omit<TextareaProps, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
|
|
4
14
|
export { Textarea };
|
|
@@ -1,10 +1,134 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef } from "react";
|
|
2
|
+
import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef } from "react";
|
|
3
3
|
import { cn } from "../../lib/index.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
function normalizeRows(value) {
|
|
5
|
+
if (void 0 === value || !Number.isFinite(value)) return;
|
|
6
|
+
return Math.max(1, Math.floor(value));
|
|
7
|
+
}
|
|
8
|
+
function measureRowMetrics(el) {
|
|
9
|
+
const styles = window.getComputedStyle(el);
|
|
10
|
+
const lineHeight = parseFloat(styles.lineHeight) || 1.2 * parseFloat(styles.fontSize) || 20;
|
|
11
|
+
const padding = parseFloat(styles.paddingTop) + parseFloat(styles.paddingBottom) || 0;
|
|
12
|
+
const border = parseFloat(styles.borderTopWidth) + parseFloat(styles.borderBottomWidth) || 0;
|
|
13
|
+
return {
|
|
14
|
+
lineHeight,
|
|
15
|
+
padding,
|
|
16
|
+
border,
|
|
17
|
+
borderBox: 'border-box' === styles.boxSizing
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function cssLength(value) {
|
|
21
|
+
if (null == value) return '';
|
|
22
|
+
return 'number' == typeof value ? `${value}px` : String(value);
|
|
23
|
+
}
|
|
24
|
+
const Textarea = /*#__PURE__*/ forwardRef(({ className, minRows, maxRows, onChange, style, ...props }, ref)=>{
|
|
25
|
+
const { effMinRows, effMaxRows } = useMemo(()=>{
|
|
26
|
+
const nMin = normalizeRows(minRows);
|
|
27
|
+
const nMax = normalizeRows(maxRows);
|
|
28
|
+
return {
|
|
29
|
+
effMinRows: void 0 !== nMin && void 0 !== nMax ? Math.min(nMin, nMax) : nMin,
|
|
30
|
+
effMaxRows: nMax
|
|
31
|
+
};
|
|
32
|
+
}, [
|
|
33
|
+
minRows,
|
|
34
|
+
maxRows
|
|
35
|
+
]);
|
|
36
|
+
const managed = void 0 !== effMinRows || void 0 !== effMaxRows;
|
|
37
|
+
const innerRef = useRef(null);
|
|
38
|
+
const manuallyResized = useRef(false);
|
|
39
|
+
const styleRef = useRef(style);
|
|
40
|
+
styleRef.current = style;
|
|
41
|
+
const setRef = useCallback((node)=>{
|
|
42
|
+
innerRef.current = node;
|
|
43
|
+
if ('function' == typeof ref) ref(node);
|
|
44
|
+
else if (ref) ref.current = node;
|
|
45
|
+
}, [
|
|
46
|
+
ref
|
|
47
|
+
]);
|
|
48
|
+
const restoreOwnedStyles = useCallback((el)=>{
|
|
49
|
+
const consumer = styleRef.current;
|
|
50
|
+
el.style.height = cssLength(consumer?.height);
|
|
51
|
+
el.style.minHeight = cssLength(consumer?.minHeight);
|
|
52
|
+
el.style.overflowY = cssLength(consumer?.overflowY);
|
|
53
|
+
}, []);
|
|
54
|
+
const resize = useCallback(()=>{
|
|
55
|
+
const el = innerRef.current;
|
|
56
|
+
if (!el || !managed) return;
|
|
57
|
+
const { lineHeight, padding, border, borderBox } = measureRowMetrics(el);
|
|
58
|
+
const extra = borderBox ? padding + border : 0;
|
|
59
|
+
const minHeight = void 0 !== effMinRows ? effMinRows * lineHeight + extra : 0;
|
|
60
|
+
el.style.minHeight = void 0 !== effMinRows ? `${minHeight}px` : cssLength(styleRef.current?.minHeight);
|
|
61
|
+
if (void 0 === effMaxRows || manuallyResized.current) return;
|
|
62
|
+
const maxHeight = effMaxRows * lineHeight + extra;
|
|
63
|
+
el.style.height = 'auto';
|
|
64
|
+
const contentNeeded = borderBox ? el.scrollHeight + border : Math.max(0, el.scrollHeight - padding);
|
|
65
|
+
const target = Math.min(Math.max(contentNeeded, minHeight), maxHeight);
|
|
66
|
+
el.style.height = `${target}px`;
|
|
67
|
+
el.style.overflowY = contentNeeded > maxHeight ? 'auto' : 'hidden';
|
|
68
|
+
}, [
|
|
69
|
+
managed,
|
|
70
|
+
effMinRows,
|
|
71
|
+
effMaxRows
|
|
72
|
+
]);
|
|
73
|
+
useLayoutEffect(()=>{
|
|
74
|
+
resize();
|
|
75
|
+
}, [
|
|
76
|
+
resize,
|
|
77
|
+
props.value,
|
|
78
|
+
props.defaultValue
|
|
79
|
+
]);
|
|
80
|
+
useLayoutEffect(()=>{
|
|
81
|
+
manuallyResized.current = false;
|
|
82
|
+
const el = innerRef.current;
|
|
83
|
+
if (!el) return;
|
|
84
|
+
if (!managed) return void restoreOwnedStyles(el);
|
|
85
|
+
if (void 0 === effMaxRows) {
|
|
86
|
+
el.style.height = cssLength(styleRef.current?.height);
|
|
87
|
+
el.style.overflowY = cssLength(styleRef.current?.overflowY);
|
|
88
|
+
}
|
|
89
|
+
resize();
|
|
90
|
+
}, [
|
|
91
|
+
managed,
|
|
92
|
+
effMaxRows,
|
|
93
|
+
resize,
|
|
94
|
+
restoreOwnedStyles
|
|
95
|
+
]);
|
|
96
|
+
useLayoutEffect(()=>{
|
|
97
|
+
const el = innerRef.current;
|
|
98
|
+
if (!el || !managed || "u" < typeof ResizeObserver) return;
|
|
99
|
+
let lastWidth = el.clientWidth;
|
|
100
|
+
const observer = new ResizeObserver(()=>{
|
|
101
|
+
const width = el.clientWidth;
|
|
102
|
+
if (width !== lastWidth) {
|
|
103
|
+
lastWidth = width;
|
|
104
|
+
resize();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (void 0 === effMaxRows || manuallyResized.current) return;
|
|
108
|
+
const { lineHeight, padding, border, borderBox } = measureRowMetrics(el);
|
|
109
|
+
const maxHeight = effMaxRows * lineHeight + (borderBox ? padding + border : 0);
|
|
110
|
+
if (el.offsetHeight > maxHeight + 1) {
|
|
111
|
+
manuallyResized.current = true;
|
|
112
|
+
el.style.overflowY = cssLength(styleRef.current?.overflowY) || 'auto';
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
observer.observe(el);
|
|
116
|
+
return ()=>observer.disconnect();
|
|
117
|
+
}, [
|
|
118
|
+
managed,
|
|
119
|
+
effMaxRows,
|
|
120
|
+
resize
|
|
121
|
+
]);
|
|
122
|
+
return /*#__PURE__*/ jsx("textarea", {
|
|
123
|
+
className: cn('flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-base transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', 'future:rounded-xl future:border-0 future:bg-surface-overlay future:text-sm future:placeholder:text-foreground-muted future:placeholder:font-normal future:focus-visible:ring-offset-2 future:focus-visible:ring-offset-background', !managed && 'min-h-[80px]', managed && 'resize-y', className),
|
|
124
|
+
ref: setRef,
|
|
125
|
+
style: style,
|
|
126
|
+
onChange: (event)=>{
|
|
127
|
+
onChange?.(event);
|
|
128
|
+
resize();
|
|
129
|
+
},
|
|
7
130
|
...props
|
|
8
|
-
})
|
|
131
|
+
});
|
|
132
|
+
});
|
|
9
133
|
Textarea.displayName = 'Textarea';
|
|
10
134
|
export { Textarea };
|
package/dist/styles.css
CHANGED