@cdx-ui/components 0.2.3 → 0.2.4
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.
- package/AGENTS.md +24 -0
- package/README.md +2 -0
- package/coverage.svg +1 -1
- package/docs/components/accordion/content.md +538 -0
- package/docs/components/alert/content.md +203 -0
- package/docs/components/alert-dialog/content.md +319 -0
- package/docs/components/avatar/content.md +368 -0
- package/docs/components/avatar/design.md +202 -0
- package/docs/components/badge/content.md +235 -0
- package/docs/components/bottom-sheet/content.md +351 -0
- package/docs/components/bottom-sheet/design.md +249 -0
- package/docs/components/breadcrumbs/content.md +169 -0
- package/docs/components/button/content.md +398 -0
- package/docs/components/button/design.md +258 -0
- package/docs/components/calendar/content.md +137 -0
- package/docs/components/card/content.md +283 -0
- package/docs/components/carousel/content.md +416 -0
- package/docs/components/checkbox/content.md +236 -0
- package/docs/components/checkbox/design.md +214 -0
- package/docs/components/chip/content.md +439 -0
- package/docs/components/chip/design.md +418 -0
- package/docs/components/color-area/content.md +86 -0
- package/docs/components/color-field/content.md +134 -0
- package/docs/components/color-picker/content.md +208 -0
- package/docs/components/color-slider/content.md +120 -0
- package/docs/components/color-swatch/content.md +64 -0
- package/docs/components/color-swatch-picker/content.md +126 -0
- package/docs/components/content.md +97 -0
- package/docs/components/currency-input/content.md +205 -0
- package/docs/components/data-grid/content.md +522 -0
- package/docs/components/date-field/content.md +147 -0
- package/docs/components/date-picker/content.md +360 -0
- package/docs/components/date-range-picker/content.md +301 -0
- package/docs/components/date-time-field/content.md +157 -0
- package/docs/components/date-time-list/content.md +105 -0
- package/docs/components/date-time-picker/content.md +272 -0
- package/docs/components/dialog/content.md +436 -0
- package/docs/components/dialog/design.md +192 -0
- package/docs/components/divider/content.md +112 -0
- package/docs/components/drawer/content.md +436 -0
- package/docs/components/field/content.md +277 -0
- package/docs/components/form/content.md +62 -0
- package/docs/components/full-screen-dialog/content.md +881 -0
- package/docs/components/heading/content.md +55 -0
- package/docs/components/icon/content.md +190 -0
- package/docs/components/icon-button/content.md +200 -0
- package/docs/components/icon-button/design.md +165 -0
- package/docs/components/image/content.md +104 -0
- package/docs/components/input/content.md +281 -0
- package/docs/components/input/design.md +389 -0
- package/docs/components/insurance-disclosure/content.md +103 -0
- package/docs/components/link/content.md +180 -0
- package/docs/components/link/design.md +160 -0
- package/docs/components/list-item/content.md +695 -0
- package/docs/components/menu/content.md +1247 -0
- package/docs/components/month-calendar/content.md +84 -0
- package/docs/components/month-picker/content.md +273 -0
- package/docs/components/otp-input/content.md +327 -0
- package/docs/components/progress-bar/content.md +87 -0
- package/docs/components/progress-circle/content.md +176 -0
- package/docs/components/progress-segmented/content.md +119 -0
- package/docs/components/quick-action-button/content.md +154 -0
- package/docs/components/quick-action-button/design.md +170 -0
- package/docs/components/radio/content.md +224 -0
- package/docs/components/range-calendar/content.md +123 -0
- package/docs/components/reorderable-list/content.md +309 -0
- package/docs/components/scoped-theme/content.md +47 -0
- package/docs/components/scroll-shadow/content.md +686 -0
- package/docs/components/select/content.md +400 -0
- package/docs/components/select/design.md +301 -0
- package/docs/components/skeleton/content.md +103 -0
- package/docs/components/slider/content.md +423 -0
- package/docs/components/stack/content.md +161 -0
- package/docs/components/switch/content.md +150 -0
- package/docs/components/switch/design.md +208 -0
- package/docs/components/table/content.md +548 -0
- package/docs/components/table-pagination/content.md +177 -0
- package/docs/components/tabs/content.md +292 -0
- package/docs/components/text/content.md +142 -0
- package/docs/components/textarea/content.md +222 -0
- package/docs/components/tile/content.md +703 -0
- package/docs/components/toast/content.md +456 -0
- package/docs/components/toggle-button/content.md +505 -0
- package/docs/components/tooltip/content.md +350 -0
- package/docs/components/virtualized-list/content.md +250 -0
- package/docs/foundations/content.md +9 -0
- package/docs/foundations/expressions/icons/content.md +19 -0
- package/docs/foundations/styles/tokens/all-tokens/content.md +192 -0
- package/docs/foundations/styles/tokens/what-are-tokens/content.md +33 -0
- package/docs/foundations/styles/tokens/what-are-tokens/design.md +33 -0
- package/docs/getting-started/content.md +4 -0
- package/docs/getting-started/designers/content.md +13 -0
- package/docs/getting-started/designers/design.md +13 -0
- package/docs/getting-started/developers/accessibility/content.md +31 -0
- package/docs/getting-started/developers/content.md +612 -0
- package/docs/getting-started/developers/styling/content.md +193 -0
- package/docs/llms.txt +193 -0
- package/docs/patterns/account-management/content.md +75 -0
- package/docs/patterns/authentication/content.md +52 -0
- package/docs/patterns/content.md +10 -0
- package/docs/patterns/dashboard/content.md +39 -0
- package/docs/patterns/empty-states/content.md +31 -0
- package/docs/patterns/forms/content.md +109 -0
- package/docs/patterns/onboarding/content.md +69 -0
- package/docs/patterns/payments/content.md +35 -0
- package/docs/patterns/settings/content.md +72 -0
- package/docs/resources/content.md +9 -0
- package/docs/resources/figma-libraries/content.md +42 -0
- package/docs/resources/release-notes/0.0.1-beta.118/content.md +27 -0
- package/docs/resources/release-notes/0.0.1-beta.122/content.md +21 -0
- package/docs/resources/release-notes/0.0.1-beta.124/content.md +16 -0
- package/docs/resources/release-notes/0.0.1-beta.126/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.127/content.md +14 -0
- package/docs/resources/release-notes/0.0.1-beta.128/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.129/content.md +18 -0
- package/docs/resources/release-notes/0.0.1-beta.130/content.md +18 -0
- package/docs/resources/release-notes/0.0.1-beta.133/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.134/content.md +17 -0
- package/docs/resources/release-notes/0.0.1-beta.136/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.137/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.138/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.139/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.140/content.md +26 -0
- package/docs/resources/release-notes/0.0.1-beta.141/content.md +63 -0
- package/docs/resources/release-notes/0.0.1-beta.142/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.143/content.md +12 -0
- package/docs/resources/release-notes/0.0.1-beta.144/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.145/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.147/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.149/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.150/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.152/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.154/content.md +15 -0
- package/docs/resources/release-notes/0.0.1-beta.156/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.158/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.159/content.md +11 -0
- package/docs/resources/release-notes/0.0.1-beta.160/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.161/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.163/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.164/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.166/content.md +17 -0
- package/docs/resources/release-notes/0.0.1-beta.167/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.168/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.169/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.171/content.md +16 -0
- package/docs/resources/release-notes/0.0.1-beta.172/content.md +24 -0
- package/docs/resources/release-notes/0.0.1-beta.173/content.md +15 -0
- package/docs/resources/release-notes/0.0.1-beta.174/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.176/content.md +32 -0
- package/docs/resources/release-notes/0.0.1-beta.179/content.md +11 -0
- package/docs/resources/release-notes/0.0.1-beta.182/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.185/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.187/content.md +27 -0
- package/docs/resources/release-notes/0.1.1/content.md +23 -0
- package/docs/resources/release-notes/0.1.2/content.md +7 -0
- package/docs/resources/release-notes/0.1.4/content.md +19 -0
- package/docs/resources/release-notes/0.1.5/content.md +7 -0
- package/docs/resources/release-notes/0.1.6/content.md +7 -0
- package/docs/resources/release-notes/0.2.0/content.md +31 -0
- package/docs/resources/release-notes/0.2.1/content.md +17 -0
- package/docs/resources/release-notes/0.2.2/content.md +11 -0
- package/docs/resources/release-notes/0.2.3/content.md +15 -0
- package/docs/resources/release-notes/content.md +64 -0
- package/lib/commonjs/components/DateTimeList/index.js +11 -26
- package/lib/commonjs/components/DateTimeList/index.js.map +1 -1
- package/lib/commonjs/components/DateTimeList/styles.js +2 -12
- package/lib/commonjs/components/DateTimeList/styles.js.map +1 -1
- package/lib/commonjs/components/ListItem/index.js.map +1 -1
- package/lib/commonjs/components/ListItem/styles.js +2 -1
- package/lib/commonjs/components/ListItem/styles.js.map +1 -1
- package/lib/commonjs/components/Menu/index.js +11 -5
- package/lib/commonjs/components/Menu/index.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/gradient.js +29 -0
- package/lib/commonjs/components/ScrollShadow/gradient.js.map +1 -0
- package/lib/commonjs/components/ScrollShadow/index.js +171 -44
- package/lib/commonjs/components/ScrollShadow/index.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/styles.js +58 -14
- package/lib/commonjs/components/ScrollShadow/styles.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js +63 -0
- package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
- package/lib/commonjs/components/ScrollShadow/useScrollShadow.js +48 -8
- package/lib/commonjs/components/ScrollShadow/useScrollShadow.js.map +1 -1
- package/lib/commonjs/components/Tabs/index.js +16 -23
- package/lib/commonjs/components/Tabs/index.js.map +1 -1
- package/lib/commonjs/components/Tabs/styles.js +1 -10
- package/lib/commonjs/components/Tabs/styles.js.map +1 -1
- package/lib/commonjs/figma/ListItem.SectionHeader.figma.js +20 -5
- package/lib/commonjs/figma/ListItem.SectionHeader.figma.js.map +1 -1
- package/lib/module/components/DateTimeList/index.js +12 -27
- package/lib/module/components/DateTimeList/index.js.map +1 -1
- package/lib/module/components/DateTimeList/styles.js +1 -11
- package/lib/module/components/DateTimeList/styles.js.map +1 -1
- package/lib/module/components/ListItem/index.js.map +1 -1
- package/lib/module/components/ListItem/styles.js +2 -1
- package/lib/module/components/ListItem/styles.js.map +1 -1
- package/lib/module/components/Menu/index.js +11 -5
- package/lib/module/components/Menu/index.js.map +1 -1
- package/lib/module/components/ScrollShadow/gradient.js +24 -0
- package/lib/module/components/ScrollShadow/gradient.js.map +1 -0
- package/lib/module/components/ScrollShadow/index.js +170 -48
- package/lib/module/components/ScrollShadow/index.js.map +1 -1
- package/lib/module/components/ScrollShadow/styles.js +57 -13
- package/lib/module/components/ScrollShadow/styles.js.map +1 -1
- package/lib/module/components/ScrollShadow/useComposedScrollHandler.js +57 -0
- package/lib/module/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
- package/lib/module/components/ScrollShadow/useScrollShadow.js +46 -8
- package/lib/module/components/ScrollShadow/useScrollShadow.js.map +1 -1
- package/lib/module/components/Tabs/index.js +17 -24
- package/lib/module/components/Tabs/index.js.map +1 -1
- package/lib/module/components/Tabs/styles.js +0 -9
- package/lib/module/components/Tabs/styles.js.map +1 -1
- package/lib/module/figma/ListItem.SectionHeader.figma.js +20 -5
- package/lib/module/figma/ListItem.SectionHeader.figma.js.map +1 -1
- package/lib/typescript/components/DateTimeList/index.d.ts.map +1 -1
- package/lib/typescript/components/DateTimeList/styles.d.ts +1 -4
- package/lib/typescript/components/DateTimeList/styles.d.ts.map +1 -1
- package/lib/typescript/components/ListItem/index.d.ts +5 -4
- package/lib/typescript/components/ListItem/index.d.ts.map +1 -1
- package/lib/typescript/components/ListItem/styles.d.ts +1 -1
- package/lib/typescript/components/ListItem/styles.d.ts.map +1 -1
- package/lib/typescript/components/Menu/index.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/gradient.d.ts +7 -0
- package/lib/typescript/components/ScrollShadow/gradient.d.ts.map +1 -0
- package/lib/typescript/components/ScrollShadow/index.d.ts +57 -15
- package/lib/typescript/components/ScrollShadow/index.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/styles.d.ts +8 -2
- package/lib/typescript/components/ScrollShadow/styles.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts +13 -0
- package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts.map +1 -0
- package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts +15 -2
- package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts.map +1 -1
- package/lib/typescript/components/Tabs/index.d.ts.map +1 -1
- package/lib/typescript/components/Tabs/styles.d.ts +0 -7
- package/lib/typescript/components/Tabs/styles.d.ts.map +1 -1
- package/lib/typescript/figma/ListItem.SectionHeader.figma.d.ts.map +1 -1
- package/package.json +8 -6
- package/src/components/DateTimeList/index.tsx +13 -26
- package/src/components/DateTimeList/styles.ts +1 -10
- package/src/components/ListItem/index.tsx +5 -4
- package/src/components/ListItem/styles.ts +1 -0
- package/src/components/Menu/index.tsx +11 -8
- package/src/components/ScrollShadow/gradient.ts +48 -0
- package/src/components/ScrollShadow/index.tsx +300 -69
- package/src/components/ScrollShadow/styles.ts +45 -28
- package/src/components/ScrollShadow/useComposedScrollHandler.ts +58 -0
- package/src/components/ScrollShadow/useScrollShadow.ts +72 -10
- package/src/components/Tabs/index.tsx +25 -35
- package/src/components/Tabs/styles.ts +0 -9
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Textarea (https://design.candescent.com/docs/components/textarea)
|
|
2
|
+
|
|
3
|
+
Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=7078-1235), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-textarea--default)
|
|
4
|
+
|
|
5
|
+
A multi-line text input for notes, messages, descriptions, and other longer content.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Textarea } from '@cdx-ui/components';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
`Textarea` enables `multiline` and top-aligns its text by default.
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { Textarea } from '@cdx-ui/components';
|
|
17
|
+
|
|
18
|
+
export default function TextareaBasicDemo() {
|
|
19
|
+
return <Textarea accessibilityLabel="Notes" placeholder="Add details…" numberOfLines={4} />;
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Sizes
|
|
24
|
+
|
|
25
|
+
Use `size="small"` for denser forms. Padding, font size, and line height scale together.
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { Box, Text, Textarea, type TextareaProps } from '@cdx-ui/components';
|
|
29
|
+
|
|
30
|
+
const sizes = ['default', 'small'] as const satisfies readonly NonNullable<TextareaProps['size']>[];
|
|
31
|
+
|
|
32
|
+
export default function TextareaSizesDemo() {
|
|
33
|
+
return (
|
|
34
|
+
<Box className="w-full gap-4">
|
|
35
|
+
{sizes.map((size) => (
|
|
36
|
+
<Box key={size} className="gap-2">
|
|
37
|
+
<Text size="sm" color="secondary">
|
|
38
|
+
{size}
|
|
39
|
+
</Text>
|
|
40
|
+
<Textarea
|
|
41
|
+
accessibilityLabel={`${size} notes`}
|
|
42
|
+
defaultValue="Multi-line content"
|
|
43
|
+
numberOfLines={3}
|
|
44
|
+
size={size}
|
|
45
|
+
/>
|
|
46
|
+
</Box>
|
|
47
|
+
))}
|
|
48
|
+
</Box>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Auto-grow
|
|
54
|
+
|
|
55
|
+
Set `autoGrow` to expand the field as content is entered. Add `maxRows` to cap its height and enable internal scrolling after the limit.
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
import { Textarea } from '@cdx-ui/components';
|
|
59
|
+
|
|
60
|
+
export default function TextareaAutoGrowDemo() {
|
|
61
|
+
return (
|
|
62
|
+
<Textarea
|
|
63
|
+
accessibilityLabel="Message"
|
|
64
|
+
autoGrow
|
|
65
|
+
maxRows={6}
|
|
66
|
+
numberOfLines={2}
|
|
67
|
+
placeholder="Type a message…"
|
|
68
|
+
/>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Resizable
|
|
74
|
+
|
|
75
|
+
On web, `resize="vertical"` displays the browser resize handle. It has no effect on native platforms.
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
import { Textarea } from '@cdx-ui/components';
|
|
79
|
+
|
|
80
|
+
export default function TextareaResizableDemo() {
|
|
81
|
+
return (
|
|
82
|
+
<Textarea
|
|
83
|
+
accessibilityLabel="Resizable notes"
|
|
84
|
+
defaultValue="Drag the bottom-right handle to resize this field."
|
|
85
|
+
numberOfLines={3}
|
|
86
|
+
resize="vertical"
|
|
87
|
+
/>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## States
|
|
93
|
+
|
|
94
|
+
The component supports disabled, read-only, required, and invalid states.
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
import { Box, Text, Textarea } from '@cdx-ui/components';
|
|
98
|
+
|
|
99
|
+
export default function TextareaStatesDemo() {
|
|
100
|
+
return (
|
|
101
|
+
<Box className="w-full gap-4">
|
|
102
|
+
<Box className="gap-2">
|
|
103
|
+
<Text size="sm" color="secondary">
|
|
104
|
+
Disabled
|
|
105
|
+
</Text>
|
|
106
|
+
<Textarea
|
|
107
|
+
accessibilityLabel="Disabled notes"
|
|
108
|
+
defaultValue="This content cannot be edited."
|
|
109
|
+
isDisabled
|
|
110
|
+
numberOfLines={3}
|
|
111
|
+
/>
|
|
112
|
+
</Box>
|
|
113
|
+
<Box className="gap-2">
|
|
114
|
+
<Text size="sm" color="secondary">
|
|
115
|
+
Read-only
|
|
116
|
+
</Text>
|
|
117
|
+
<Textarea
|
|
118
|
+
accessibilityLabel="Read-only notes"
|
|
119
|
+
defaultValue="This content is available for reference."
|
|
120
|
+
isReadOnly
|
|
121
|
+
numberOfLines={3}
|
|
122
|
+
/>
|
|
123
|
+
</Box>
|
|
124
|
+
<Box className="gap-2">
|
|
125
|
+
<Text size="sm" color="secondary">
|
|
126
|
+
Invalid
|
|
127
|
+
</Text>
|
|
128
|
+
<Textarea
|
|
129
|
+
accessibilityLabel="Invalid notes"
|
|
130
|
+
defaultValue="Too short"
|
|
131
|
+
isInvalid
|
|
132
|
+
numberOfLines={3}
|
|
133
|
+
/>
|
|
134
|
+
</Box>
|
|
135
|
+
</Box>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## With field
|
|
141
|
+
|
|
142
|
+
Compose with `Field` to provide a visible label, helper text, and required state.
|
|
143
|
+
|
|
144
|
+
```tsx
|
|
145
|
+
import { Field, Textarea } from '@cdx-ui/components';
|
|
146
|
+
|
|
147
|
+
export default function TextareaWithFieldDemo() {
|
|
148
|
+
return (
|
|
149
|
+
<Field className="w-full" isRequired>
|
|
150
|
+
<Field.Label>Transfer notes</Field.Label>
|
|
151
|
+
<Textarea isRequired numberOfLines={4} placeholder="Add details for the recipient…" />
|
|
152
|
+
<Field.Helper>Do not include account numbers or other sensitive information.</Field.Helper>
|
|
153
|
+
</Field>
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## With field and validation
|
|
159
|
+
|
|
160
|
+
Set invalid state on both `Field` and `Textarea` so the error message and textarea styling stay in sync.
|
|
161
|
+
|
|
162
|
+
```tsx
|
|
163
|
+
import { Field, Textarea } from '@cdx-ui/components';
|
|
164
|
+
|
|
165
|
+
export default function TextareaWithFieldInvalidDemo() {
|
|
166
|
+
return (
|
|
167
|
+
<Field className="w-full" isInvalid isRequired>
|
|
168
|
+
<Field.Label>Transfer notes</Field.Label>
|
|
169
|
+
<Textarea defaultValue="Gift" isInvalid isRequired numberOfLines={4} />
|
|
170
|
+
<Field.Error>Enter at least 10 characters.</Field.Error>
|
|
171
|
+
</Field>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## API
|
|
177
|
+
|
|
178
|
+
### Textarea
|
|
179
|
+
|
|
180
|
+
A flat, single-element multi-line input. Form-control state, sizing, and standard text input props are applied directly to the component.
|
|
181
|
+
|
|
182
|
+
| Prop | Type | Default | Description |
|
|
183
|
+
| --- | --- | --- | --- |
|
|
184
|
+
| `className?` | `string` | — | Additional Tailwind classes, applied to the root shell rather than the inner field. |
|
|
185
|
+
| `numberOfLines?` | `number` | — | Initial / minimum visible rows. Defaults to 2 on web and 8 on native. |
|
|
186
|
+
| `placeholderTextColorClassName?` | `string` | — | — |
|
|
187
|
+
| `style?` | `StyleProp<ViewStyle>` | — | — |
|
|
188
|
+
| `variant?` | `'outline' \| null` | — | — |
|
|
189
|
+
| `size?` | `'default' \| 'small' \| null` | — | — |
|
|
190
|
+
| `autoGrow?` | `boolean` | — | Grow the field height to fit its content. Defaults to `false`. Web uses `field-sizing: content`; native grows intrinsically (`scrollEnabled` off), using `onContentSizeChange` only to enable scrolling past `maxRows`. |
|
|
191
|
+
| `maxRows?` | `number` | — | Caps `autoGrow` at this many rows, after which the field scrolls. |
|
|
192
|
+
| `resize?` | `'none' \| 'vertical'` | — | Web-only user resize affordance. Defaults to `'none'`. `'vertical'` exposes the browser resize handle and takes precedence over `autoGrow` (they are mutually exclusive). No-op on native. |
|
|
193
|
+
| `isInvalid?` | `boolean` | — | If true, the input will indicate an error. |
|
|
194
|
+
| `isDisabled?` | `boolean` | — | If true, the input will be disabled. |
|
|
195
|
+
| `isRequired?` | `boolean` | — | Sets `aria-required="true"` on web when passed in form control. |
|
|
196
|
+
| `isReadOnly?` | `boolean` | — | If true, prevents the value of the input from being edited. |
|
|
197
|
+
| `isFullWidth?` | `boolean` | — | If true, the input element will span the full width of its parent. |
|
|
198
|
+
|
|
199
|
+
Inherits all [`TextInputProps`](https://reactnative.dev/docs/textinput#props) except `children` and `multiline`. Multi-line mode is always enabled. `style` and `className` apply to the root container, and the forwarded ref targets the underlying `TextInput`.
|
|
200
|
+
|
|
201
|
+
### Sizing behavior
|
|
202
|
+
|
|
203
|
+
`numberOfLines` sets the initial or minimum visible rows and defaults to 2 on web and 8 on native. With `autoGrow`, the textarea expands to fit its content until it reaches `maxRows`, then scrolls internally.
|
|
204
|
+
|
|
205
|
+
On web viewports below 600px, field text renders at 16px (`text-base`) for both sizes so iOS Safari
|
|
206
|
+
does not auto-zoom the page when the textarea is focused. At 600px and above, web matches native
|
|
207
|
+
sizes (14px default, 12px small).
|
|
208
|
+
|
|
209
|
+
On web, `resize="vertical"` takes precedence over `autoGrow`. Passing both logs a development warning and disables auto-grow. `resize` is a no-op on native.
|
|
210
|
+
|
|
211
|
+
| Attribute | Values | Description |
|
|
212
|
+
| ----------- | ---------- | -------------- |
|
|
213
|
+
| `data-slot` | `textarea` | Root container |
|
|
214
|
+
|
|
215
|
+
## Accessibility
|
|
216
|
+
|
|
217
|
+
| Item | Behavior |
|
|
218
|
+
| ---------------------- | ------------------------------------------------------------------------------------ |
|
|
219
|
+
| Accessible name | Compose with `Field.Label` (recommended) or pass `accessibilityLabel` directly. |
|
|
220
|
+
| Validation | Pair `isInvalid` with `Field.Error` so the error is not communicated by color alone. |
|
|
221
|
+
| Required | `isRequired` exposes the required state to assistive technology. |
|
|
222
|
+
| Disabled and read-only | `isDisabled` and `isReadOnly` prevent editing and expose the corresponding state. |
|