@tipp/ui 1.2.1 → 1.2.3
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/atoms/field-error-wrapper.js +2 -2
- package/dist/atoms/index.js +52 -52
- package/dist/atoms/pagination.js +2 -2
- package/dist/chunk-5727WFTZ.js +340 -0
- package/dist/chunk-5727WFTZ.js.map +1 -0
- package/dist/chunk-6UGS5IDT.js +313 -0
- package/dist/chunk-6UGS5IDT.js.map +1 -0
- package/dist/chunk-AT43BHDX.js +340 -0
- package/dist/chunk-AT43BHDX.js.map +1 -0
- package/dist/chunk-B4OBVVY3.js +338 -0
- package/dist/chunk-B4OBVVY3.js.map +1 -0
- package/dist/chunk-BSXB4GUN.js +313 -0
- package/dist/chunk-BSXB4GUN.js.map +1 -0
- package/dist/chunk-BVA3AK5G.js +320 -0
- package/dist/chunk-BVA3AK5G.js.map +1 -0
- package/dist/chunk-DDCFN3P4.js +169 -0
- package/dist/chunk-DDCFN3P4.js.map +1 -0
- package/dist/chunk-E6PYYPLJ.js +340 -0
- package/dist/chunk-E6PYYPLJ.js.map +1 -0
- package/dist/chunk-EJGR7XIP.js +340 -0
- package/dist/chunk-EJGR7XIP.js.map +1 -0
- package/dist/chunk-FUFW4U2M.js +123 -0
- package/dist/chunk-FUFW4U2M.js.map +1 -0
- package/dist/chunk-GN35VNXA.js +340 -0
- package/dist/chunk-GN35VNXA.js.map +1 -0
- package/dist/chunk-GQ356XUU.js +340 -0
- package/dist/chunk-GQ356XUU.js.map +1 -0
- package/dist/chunk-KDEE2GKD.js +321 -0
- package/dist/chunk-KDEE2GKD.js.map +1 -0
- package/dist/chunk-N7LPOMB6.js +169 -0
- package/dist/chunk-N7LPOMB6.js.map +1 -0
- package/dist/chunk-OGNXJEFF.js +340 -0
- package/dist/chunk-OGNXJEFF.js.map +1 -0
- package/dist/chunk-OMWKQSGG.js +301 -0
- package/dist/chunk-OMWKQSGG.js.map +1 -0
- package/dist/chunk-SGV677GX.js +313 -0
- package/dist/chunk-SGV677GX.js.map +1 -0
- package/dist/chunk-U6ZJC6YG.js +320 -0
- package/dist/chunk-U6ZJC6YG.js.map +1 -0
- package/dist/chunk-UXHC4TWB.js +169 -0
- package/dist/chunk-UXHC4TWB.js.map +1 -0
- package/dist/chunk-VA4SUB72.js +340 -0
- package/dist/chunk-VA4SUB72.js.map +1 -0
- package/dist/chunk-VLENFHWP.js +304 -0
- package/dist/chunk-VLENFHWP.js.map +1 -0
- package/dist/chunk-WL2KNN6Q.js +320 -0
- package/dist/chunk-WL2KNN6Q.js.map +1 -0
- package/dist/chunk-XFPHKGAU.js +340 -0
- package/dist/chunk-XFPHKGAU.js.map +1 -0
- package/dist/chunk-XLJ4PRKX.js +317 -0
- package/dist/chunk-XLJ4PRKX.js.map +1 -0
- package/dist/chunk-YDXUNJVV.js +320 -0
- package/dist/chunk-YDXUNJVV.js.map +1 -0
- package/dist/chunk-ZPTZUP5Q.js +304 -0
- package/dist/chunk-ZPTZUP5Q.js.map +1 -0
- package/dist/index.cjs +41 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +8 -3
- package/dist/index.css.map +1 -1
- package/dist/index.js +68 -68
- package/dist/molecules/expand-table/index.js +23 -23
- package/dist/molecules/expand-table/row.js +22 -22
- package/dist/molecules/index.cjs +41 -5
- package/dist/molecules/index.cjs.map +1 -1
- package/dist/molecules/index.js +29 -29
- package/dist/molecules/navigation.js +23 -23
- package/dist/molecules/stepper.cjs.map +1 -1
- package/dist/molecules/stepper.d.cts +1 -1
- package/dist/molecules/stepper.d.ts +1 -1
- package/dist/molecules/stepper.js +3 -3
- package/dist/molecules/tag-selector.cjs +114 -53
- package/dist/molecules/tag-selector.cjs.map +1 -1
- package/dist/molecules/tag-selector.d.cts +1 -0
- package/dist/molecules/tag-selector.d.ts +1 -0
- package/dist/molecules/tag-selector.js +23 -23
- package/package.json +1 -1
- package/src/molecules/stepper.tsx +1 -1
- package/src/molecules/tag-selector.tsx +52 -5
|
@@ -13,11 +13,13 @@ import {
|
|
|
13
13
|
import { Popover } from '../atoms/popover';
|
|
14
14
|
import { Flex } from '../atoms/flex';
|
|
15
15
|
import { Button } from '../atoms/button';
|
|
16
|
+
import type { BadgeProps } from '../atoms/badge';
|
|
16
17
|
import { Badge } from '../atoms/badge';
|
|
17
18
|
import { CheckIcon } from '../icon';
|
|
18
19
|
import { ScrollArea } from '../atoms/scroll-area';
|
|
19
20
|
import { Grid } from '../atoms/grid';
|
|
20
|
-
import {
|
|
21
|
+
import type { TypoProps } from '../atoms';
|
|
22
|
+
import { AutoSizingInput, Typo } from '../atoms';
|
|
21
23
|
|
|
22
24
|
type ID = string;
|
|
23
25
|
interface Item {
|
|
@@ -34,6 +36,7 @@ export interface TagSelectorProps<T extends Item> {
|
|
|
34
36
|
disabled?: boolean;
|
|
35
37
|
maxCount?: number;
|
|
36
38
|
style?: React.CSSProperties;
|
|
39
|
+
size?: 'large' | 'medium' | 'small';
|
|
37
40
|
|
|
38
41
|
onChange?: (selected: ID[]) => void;
|
|
39
42
|
tagRender?: (item: T) => React.ReactElement;
|
|
@@ -60,6 +63,8 @@ export function TagSelector<T extends Item>(
|
|
|
60
63
|
placeholder,
|
|
61
64
|
maxCount = 0,
|
|
62
65
|
DropdownContainer = DefaultDropdownContainer,
|
|
66
|
+
onChange,
|
|
67
|
+
size = 'medium',
|
|
63
68
|
} = props;
|
|
64
69
|
const [selected, setSelected] = useState<string[]>(props.selected || []);
|
|
65
70
|
const [value, setValue] = useState<string>('');
|
|
@@ -85,7 +90,7 @@ export function TagSelector<T extends Item>(
|
|
|
85
90
|
setTimeout(() => {
|
|
86
91
|
setValue('');
|
|
87
92
|
}, 100);
|
|
88
|
-
},
|
|
93
|
+
}, 300);
|
|
89
94
|
}, []);
|
|
90
95
|
|
|
91
96
|
const onChangeValue = useCallback<React.ChangeEventHandler<HTMLInputElement>>(
|
|
@@ -201,6 +206,23 @@ export function TagSelector<T extends Item>(
|
|
|
201
206
|
]
|
|
202
207
|
);
|
|
203
208
|
|
|
209
|
+
const placeholderVisible = useMemo(() => {
|
|
210
|
+
if (selectedItem.length) return false;
|
|
211
|
+
if (value) return false;
|
|
212
|
+
if (focus) return false;
|
|
213
|
+
return true;
|
|
214
|
+
}, [focus, selectedItem.length, value]);
|
|
215
|
+
|
|
216
|
+
useEffect(() => {
|
|
217
|
+
onChange?.(selected);
|
|
218
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- 주소값 변경 방지
|
|
219
|
+
}, [[...selected].sort().join(',')]);
|
|
220
|
+
|
|
221
|
+
useEffect(() => {
|
|
222
|
+
setSelected(props.selected || []);
|
|
223
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- 주소값 변경 방지
|
|
224
|
+
}, [[...(props.selected || [])].sort().join(',')]);
|
|
225
|
+
|
|
204
226
|
useEffect(() => {
|
|
205
227
|
setFocusIndex(null);
|
|
206
228
|
}, [open]);
|
|
@@ -209,12 +231,33 @@ export function TagSelector<T extends Item>(
|
|
|
209
231
|
setFocusIndex(0);
|
|
210
232
|
}, [filteredOptions]);
|
|
211
233
|
|
|
234
|
+
const badgeSize = useMemo<BadgeProps['size']>(() => {
|
|
235
|
+
switch (size) {
|
|
236
|
+
case 'large':
|
|
237
|
+
return 'large';
|
|
238
|
+
case 'medium':
|
|
239
|
+
case 'small':
|
|
240
|
+
default:
|
|
241
|
+
return 'small';
|
|
242
|
+
}
|
|
243
|
+
}, [size]);
|
|
244
|
+
|
|
245
|
+
const placeholderVariant = useMemo<TypoProps['variant']>(() => {
|
|
246
|
+
switch (size) {
|
|
247
|
+
case 'large':
|
|
248
|
+
return 'subtitle';
|
|
249
|
+
case 'medium':
|
|
250
|
+
default:
|
|
251
|
+
return 'body';
|
|
252
|
+
}
|
|
253
|
+
}, [size]);
|
|
254
|
+
|
|
212
255
|
return (
|
|
213
256
|
<Popover.Root open={Boolean(filteredOptions.length) && open}>
|
|
214
257
|
<Popover.Trigger>
|
|
215
258
|
<Grid
|
|
216
259
|
align="center"
|
|
217
|
-
className={`tag-selector ${focus ? 'focused' : ''}`}
|
|
260
|
+
className={`tag-selector ${focus ? 'focused' : ''} ${size}`}
|
|
218
261
|
columns="1fr auto"
|
|
219
262
|
gap="1"
|
|
220
263
|
onClick={() => fieldRef.current?.focus()}
|
|
@@ -230,7 +273,7 @@ export function TagSelector<T extends Item>(
|
|
|
230
273
|
return tagRender ? (
|
|
231
274
|
tagRender(item)
|
|
232
275
|
) : (
|
|
233
|
-
<Badge key={item.id}>
|
|
276
|
+
<Badge key={item.id} size={badgeSize}>
|
|
234
277
|
{item.name}
|
|
235
278
|
<Button
|
|
236
279
|
onClick={() => {
|
|
@@ -243,12 +286,16 @@ export function TagSelector<T extends Item>(
|
|
|
243
286
|
</Badge>
|
|
244
287
|
);
|
|
245
288
|
})}
|
|
289
|
+
{placeholderVisible ? (
|
|
290
|
+
<Typo color="gray" variant={placeholderVariant}>
|
|
291
|
+
{placeholder}
|
|
292
|
+
</Typo>
|
|
293
|
+
) : null}
|
|
246
294
|
<AutoSizingInput
|
|
247
295
|
onBlur={onBlur}
|
|
248
296
|
onChange={onChangeValue}
|
|
249
297
|
onFocus={onFocus}
|
|
250
298
|
onKeyDown={handleKeyDown}
|
|
251
|
-
placeholder={placeholder}
|
|
252
299
|
ref={fieldRef}
|
|
253
300
|
value={value}
|
|
254
301
|
/>
|