@ceed/ads 1.23.2 โ 1.23.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/dist/components/data-display/Badge.md +71 -39
- package/dist/components/data-display/InfoSign.md +74 -98
- package/dist/components/data-display/Typography.md +310 -61
- package/dist/components/feedback/CircularProgress.md +257 -0
- package/dist/components/feedback/Dialog.md +8 -4
- package/dist/components/feedback/Modal.md +7 -3
- package/dist/components/feedback/Skeleton.md +280 -0
- package/dist/components/feedback/llms.txt +2 -0
- package/dist/components/inputs/ButtonGroup.md +115 -106
- package/dist/components/inputs/Calendar.md +98 -459
- package/dist/components/inputs/CurrencyInput.md +181 -8
- package/dist/components/inputs/DatePicker.md +108 -436
- package/dist/components/inputs/DateRangePicker.md +130 -496
- package/dist/components/inputs/FilterMenu.md +169 -19
- package/dist/components/inputs/FilterableCheckboxGroup.md +119 -24
- package/dist/components/inputs/FormControl.md +368 -0
- package/dist/components/inputs/IconButton.md +137 -88
- package/dist/components/inputs/MonthPicker.md +95 -427
- package/dist/components/inputs/MonthRangePicker.md +89 -471
- package/dist/components/inputs/PercentageInput.md +183 -19
- package/dist/components/inputs/RadioButton.md +163 -35
- package/dist/components/inputs/RadioList.md +241 -0
- package/dist/components/inputs/RadioTileGroup.md +146 -62
- package/dist/components/inputs/Select.md +219 -328
- package/dist/components/inputs/Slider.md +334 -0
- package/dist/components/inputs/Switch.md +136 -376
- package/dist/components/inputs/Textarea.md +209 -11
- package/dist/components/inputs/Uploader/Uploader.md +145 -66
- package/dist/components/inputs/llms.txt +3 -0
- package/dist/components/navigation/Breadcrumbs.md +80 -322
- package/dist/components/navigation/Dropdown.md +92 -221
- package/dist/components/navigation/IconMenuButton.md +40 -502
- package/dist/components/navigation/InsetDrawer.md +68 -738
- package/dist/components/navigation/Link.md +39 -298
- package/dist/components/navigation/Menu.md +92 -285
- package/dist/components/navigation/MenuButton.md +55 -448
- package/dist/components/navigation/Pagination.md +47 -338
- package/dist/components/navigation/ProfileMenu.md +45 -268
- package/dist/components/navigation/Stepper.md +160 -28
- package/dist/components/navigation/Tabs.md +57 -316
- package/dist/components/surfaces/Sheet.md +150 -333
- package/dist/guides/ThemeProvider.md +116 -0
- package/dist/guides/llms.txt +9 -0
- package/dist/llms.txt +8 -0
- package/package.json +1 -1
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Introduction
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
CurrencyInput is a specialized numeric input for entering monetary values. It automatically formats numbers with the appropriate currency symbol, thousand separators, and decimal places based on the selected currency (USD or KRW). It supports features like maximum value validation, minor unit conversion, and controlled/uncontrolled modes.
|
|
6
|
+
|
|
7
|
+
> **Tip: Use built-in form props**
|
|
6
8
|
>
|
|
7
|
-
>
|
|
8
|
-
> Form์ ๊ตฌ์ฑํ ๋ Typography๋ก ๋ณ๋์ label์ด๋ helperText๋ฅผ ๋ง๋๋ ๋์ , ์ปดํฌ๋ํธ์ ๋ด์ฅ prop์ ์ฌ์ฉํ์ธ์.
|
|
9
|
+
> This component supports `label` and `helperText` props directly. Use these instead of wrapping with FormControl + FormLabel + FormHelperText for simpler forms.
|
|
9
10
|
|
|
10
11
|
```tsx
|
|
11
12
|
<CurrencyInput
|
|
@@ -30,8 +31,42 @@
|
|
|
30
31
|
| useMinorUnit | โ | โ |
|
|
31
32
|
| onChange | โ | โ |
|
|
32
33
|
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { CurrencyInput } from '@ceed/ads';
|
|
38
|
+
|
|
39
|
+
function MyComponent() {
|
|
40
|
+
const [amount, setAmount] = React.useState(0);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<CurrencyInput
|
|
44
|
+
label="Price"
|
|
45
|
+
currency="USD"
|
|
46
|
+
value={amount}
|
|
47
|
+
onChange={(e) => setAmount(e.target.value)}
|
|
48
|
+
/>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Currency Formats
|
|
54
|
+
|
|
55
|
+
### USD (Default)
|
|
56
|
+
|
|
57
|
+
US Dollar format with `$` symbol, comma thousand separators, and 2 decimal places.
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
<CurrencyInput
|
|
61
|
+
name="currency-input"
|
|
62
|
+
defaultValue={1000}
|
|
63
|
+
/>
|
|
64
|
+
```
|
|
65
|
+
|
|
33
66
|
### KRW
|
|
34
67
|
|
|
68
|
+
Korean Won format with `โฉ` symbol, comma thousand separators, and no decimal places.
|
|
69
|
+
|
|
35
70
|
```tsx
|
|
36
71
|
<CurrencyInput
|
|
37
72
|
name="currency-input"
|
|
@@ -40,7 +75,13 @@
|
|
|
40
75
|
/>
|
|
41
76
|
```
|
|
42
77
|
|
|
43
|
-
|
|
78
|
+
```tsx
|
|
79
|
+
<CurrencyInput currency="KRW" value={50000} />
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Sizes
|
|
83
|
+
|
|
84
|
+
CurrencyInput supports three sizes: `sm`, `md` (default), and `lg`.
|
|
44
85
|
|
|
45
86
|
```tsx
|
|
46
87
|
<Stack gap={2}>
|
|
@@ -50,7 +91,9 @@
|
|
|
50
91
|
</Stack>
|
|
51
92
|
```
|
|
52
93
|
|
|
53
|
-
|
|
94
|
+
## Form Features
|
|
95
|
+
|
|
96
|
+
### With Label
|
|
54
97
|
|
|
55
98
|
```tsx
|
|
56
99
|
<CurrencyInput
|
|
@@ -60,7 +103,11 @@
|
|
|
60
103
|
/>
|
|
61
104
|
```
|
|
62
105
|
|
|
63
|
-
|
|
106
|
+
```tsx
|
|
107
|
+
<CurrencyInput label="Total Amount" />
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### With Helper Text
|
|
64
111
|
|
|
65
112
|
```tsx
|
|
66
113
|
<CurrencyInput
|
|
@@ -71,7 +118,11 @@
|
|
|
71
118
|
/>
|
|
72
119
|
```
|
|
73
120
|
|
|
74
|
-
|
|
121
|
+
```tsx
|
|
122
|
+
<CurrencyInput label="Price" helperText="Enter the item price in USD." />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Error State
|
|
75
126
|
|
|
76
127
|
```tsx
|
|
77
128
|
<CurrencyInput
|
|
@@ -83,7 +134,13 @@
|
|
|
83
134
|
/>
|
|
84
135
|
```
|
|
85
136
|
|
|
86
|
-
|
|
137
|
+
```tsx
|
|
138
|
+
<CurrencyInput label="Amount" error helperText="Amount is required." />
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Price Limit
|
|
142
|
+
|
|
143
|
+
Set the `max` prop to enforce a maximum value. When the entered value exceeds the limit, the input automatically displays an error state with a formatted limit message.
|
|
87
144
|
|
|
88
145
|
```tsx
|
|
89
146
|
<CurrencyInput
|
|
@@ -94,3 +151,119 @@
|
|
|
94
151
|
max={1000000}
|
|
95
152
|
/>
|
|
96
153
|
```
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
<CurrencyInput
|
|
157
|
+
currency="USD"
|
|
158
|
+
max={1000000}
|
|
159
|
+
value={10000000}
|
|
160
|
+
/>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Minor Unit Mode
|
|
164
|
+
|
|
165
|
+
When `useMinorUnit` is true, the component converts between display values and minor units (e.g., cents for USD). This is useful when your API stores amounts in the smallest currency unit.
|
|
166
|
+
|
|
167
|
+
```tsx
|
|
168
|
+
// Display shows "$10.00", but onChange returns 1000 (cents)
|
|
169
|
+
<CurrencyInput currency="USD" useMinorUnit value={1000} />
|
|
170
|
+
|
|
171
|
+
// Display shows "โฉ10,000", onChange returns 10000 (no conversion for KRW)
|
|
172
|
+
<CurrencyInput currency="KRW" useMinorUnit value={10000} />
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Common Use Cases
|
|
176
|
+
|
|
177
|
+
### Product Price Editor
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
function ProductPriceEditor() {
|
|
181
|
+
const [priceUSD, setPriceUSD] = React.useState(0);
|
|
182
|
+
const [priceKRW, setPriceKRW] = React.useState(0);
|
|
183
|
+
|
|
184
|
+
return (
|
|
185
|
+
<Stack gap={2}>
|
|
186
|
+
<CurrencyInput
|
|
187
|
+
label="USD Price"
|
|
188
|
+
currency="USD"
|
|
189
|
+
value={priceUSD}
|
|
190
|
+
onChange={(e) => setPriceUSD(e.target.value)}
|
|
191
|
+
max={99999.99}
|
|
192
|
+
/>
|
|
193
|
+
<CurrencyInput
|
|
194
|
+
label="KRW Price"
|
|
195
|
+
currency="KRW"
|
|
196
|
+
value={priceKRW}
|
|
197
|
+
onChange={(e) => setPriceKRW(e.target.value)}
|
|
198
|
+
max={99999999}
|
|
199
|
+
/>
|
|
200
|
+
</Stack>
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Invoice Line Item
|
|
206
|
+
|
|
207
|
+
```tsx
|
|
208
|
+
function InvoiceLineItem({ item, onChange }) {
|
|
209
|
+
return (
|
|
210
|
+
<Stack direction="row" gap={2} alignItems="flex-end">
|
|
211
|
+
<Input label="Description" value={item.description} />
|
|
212
|
+
<CurrencyInput
|
|
213
|
+
label="Unit Price"
|
|
214
|
+
currency="USD"
|
|
215
|
+
value={item.unitPrice}
|
|
216
|
+
onChange={(e) => onChange({ ...item, unitPrice: e.target.value })}
|
|
217
|
+
/>
|
|
218
|
+
<Input label="Qty" type="number" value={item.quantity} sx={{ width: 80 }} />
|
|
219
|
+
</Stack>
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Budget Limit Input
|
|
225
|
+
|
|
226
|
+
```tsx
|
|
227
|
+
function BudgetSetting() {
|
|
228
|
+
const [budget, setBudget] = React.useState(50000);
|
|
229
|
+
|
|
230
|
+
return (
|
|
231
|
+
<CurrencyInput
|
|
232
|
+
label="Monthly Budget"
|
|
233
|
+
helperText="Set the maximum monthly spending limit."
|
|
234
|
+
currency="USD"
|
|
235
|
+
value={budget}
|
|
236
|
+
onChange={(e) => setBudget(e.target.value)}
|
|
237
|
+
max={1000000}
|
|
238
|
+
/>
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Best Practices
|
|
244
|
+
|
|
245
|
+
1. **Choose the right currency**: Always set the `currency` prop explicitly. USD uses 2 decimal places while KRW uses none.
|
|
246
|
+
|
|
247
|
+
```tsx
|
|
248
|
+
// โ
Explicit currency
|
|
249
|
+
<CurrencyInput currency="USD" />
|
|
250
|
+
<CurrencyInput currency="KRW" />
|
|
251
|
+
|
|
252
|
+
// โ Relying on default โ may confuse users expecting KRW
|
|
253
|
+
<CurrencyInput />
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
2. **Set max limits**: Use `max` to prevent unreasonable values. The component displays a helpful error message when the limit is exceeded.
|
|
257
|
+
|
|
258
|
+
3. **Use `useMinorUnit` for API integration**: When your backend stores amounts in minor units (cents, etc.), enable `useMinorUnit` to avoid manual conversion.
|
|
259
|
+
|
|
260
|
+
4. **Use built-in label and helperText**: Prefer the component's own `label` and `helperText` props over wrapping with FormControl.
|
|
261
|
+
|
|
262
|
+
5. **Handle negative values carefully**: CurrencyInput supports negative values. If negatives are not valid for your use case, validate in `onChange`.
|
|
263
|
+
|
|
264
|
+
## Accessibility
|
|
265
|
+
|
|
266
|
+
- The input has `role="textbox"` with proper labeling via the `label` prop.
|
|
267
|
+
- Error states are communicated via `aria-invalid` and associated error messages.
|
|
268
|
+
- The currency symbol serves as a visual indicator; ensure labels also mention the currency for screen readers.
|
|
269
|
+
- Keyboard input is fully supported โ users can type numbers, and formatting is applied automatically.
|