@ceed/ads 1.23.3 โ†’ 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.
Files changed (43) hide show
  1. package/dist/components/data-display/Badge.md +71 -39
  2. package/dist/components/data-display/InfoSign.md +74 -98
  3. package/dist/components/data-display/Typography.md +310 -61
  4. package/dist/components/feedback/CircularProgress.md +257 -0
  5. package/dist/components/feedback/Skeleton.md +280 -0
  6. package/dist/components/feedback/llms.txt +2 -0
  7. package/dist/components/inputs/ButtonGroup.md +115 -106
  8. package/dist/components/inputs/Calendar.md +98 -459
  9. package/dist/components/inputs/CurrencyInput.md +181 -8
  10. package/dist/components/inputs/DatePicker.md +108 -436
  11. package/dist/components/inputs/DateRangePicker.md +130 -496
  12. package/dist/components/inputs/FilterMenu.md +169 -19
  13. package/dist/components/inputs/FilterableCheckboxGroup.md +119 -24
  14. package/dist/components/inputs/FormControl.md +368 -0
  15. package/dist/components/inputs/IconButton.md +137 -88
  16. package/dist/components/inputs/MonthPicker.md +95 -427
  17. package/dist/components/inputs/MonthRangePicker.md +89 -471
  18. package/dist/components/inputs/PercentageInput.md +183 -19
  19. package/dist/components/inputs/RadioButton.md +163 -35
  20. package/dist/components/inputs/RadioList.md +241 -0
  21. package/dist/components/inputs/RadioTileGroup.md +146 -62
  22. package/dist/components/inputs/Select.md +219 -328
  23. package/dist/components/inputs/Slider.md +334 -0
  24. package/dist/components/inputs/Switch.md +136 -376
  25. package/dist/components/inputs/Textarea.md +209 -11
  26. package/dist/components/inputs/Uploader/Uploader.md +145 -66
  27. package/dist/components/inputs/llms.txt +3 -0
  28. package/dist/components/navigation/Breadcrumbs.md +80 -322
  29. package/dist/components/navigation/Dropdown.md +92 -221
  30. package/dist/components/navigation/IconMenuButton.md +40 -502
  31. package/dist/components/navigation/InsetDrawer.md +68 -738
  32. package/dist/components/navigation/Link.md +39 -298
  33. package/dist/components/navigation/Menu.md +92 -285
  34. package/dist/components/navigation/MenuButton.md +55 -448
  35. package/dist/components/navigation/Pagination.md +47 -338
  36. package/dist/components/navigation/ProfileMenu.md +45 -268
  37. package/dist/components/navigation/Stepper.md +160 -28
  38. package/dist/components/navigation/Tabs.md +57 -316
  39. package/dist/components/surfaces/Sheet.md +150 -333
  40. package/dist/guides/ThemeProvider.md +116 -0
  41. package/dist/guides/llms.txt +9 -0
  42. package/dist/llms.txt +8 -0
  43. package/package.json +1 -1
@@ -2,10 +2,11 @@
2
2
 
3
3
  ## Introduction
4
4
 
5
- > ๐Ÿ’ก **Form ๊ตฌ์„ฑ ์‹œ ๋‚ด์žฅ prop ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค**
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
- > ์ด ์ปดํฌ๋„ŒํŠธ๋Š” `label`, `helperText` ๋“ฑ์˜ Form ์š”์†Œ๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
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
- ### Sizes
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
- ### WithLabel
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
- ### WithHelperText
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
- ### Error
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
- ### PriceLimitError
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.