@uniai-fe/uds-primitives 0.3.43 → 0.3.44

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-primitives",
3
- "version": "0.3.43",
3
+ "version": "0.3.44",
4
4
  "description": "UNIAI Design System; Primitives Components Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -43,6 +43,7 @@ const SELECT_CUSTOM_OPTION_VALUE = "CUSTOM";
43
43
  * @param {FormFieldWidth} [props.width] container width
44
44
  * @param {boolean} [props.disabled] disabled 여부
45
45
  * @param {boolean} [props.readOnly] readOnly 여부
46
+ * @param {boolean} [props.icon] chevron 아이콘 비활성화 여부
46
47
  * @param {"button" | "submit" | "reset"} [props.buttonType] trigger button type
47
48
  * @param {SelectDropdownOption[]} props.items dropdown 아이템 목록
48
49
  * @param {SelectCallbackParams} [props.onSelectOption] option interaction 콜백
@@ -51,7 +52,7 @@ const SELECT_CUSTOM_OPTION_VALUE = "CUSTOM";
51
52
  * @param {boolean} [props.open] controlled open 값
52
53
  * @param {boolean} [props.defaultOpen] uncontrolled 초기 open 값
53
54
  * @param {(open: boolean) => void} [props.onOpen] open 변경 콜백
54
- * @param {HTMLAttributes<HTMLElement>} [props.triggerProps] trigger native props
55
+ * @param {Omit<HTMLAttributes<HTMLElement>, "children">} [props.triggerProps] trigger native props
55
56
  * @param {UseFormRegisterReturn} [props.register] value field register
56
57
  * @param {UseFormRegisterReturn} [props.customRegister] custom label register
57
58
  * @param {SelectCustomOptions} [props.customOptions] 직접입력 옵션 구성
@@ -19,6 +19,7 @@ import type { SelectTriggerBaseProps } from "../../types/trigger";
19
19
  * @param {boolean} [props.multiple=false] multi select 여부
20
20
  * @param {boolean} [props.disabled=false] disabled 여부
21
21
  * @param {boolean} [props.readOnly=false] readOnly 여부
22
+ * @param {boolean} [props.icon] chevron 아이콘 비활성화 여부
22
23
  * @param {ElementType} [props.as="button"] polymorphic 태그
23
24
  * @param {"button" | "submit" | "reset"} [props.buttonType="button"] native button type
24
25
  * @param {string} [props.className] trigger className
@@ -28,6 +28,9 @@ const toInputText = (value?: ReactNode): string => {
28
28
  * @param {SelectOptionValue | ""} [props.valueFieldValue=""] hidden value input 값
29
29
  * @param {boolean} [props.shouldFocusInput=false] custom mode 진입 시 label input focus 여부
30
30
  * @param {(value: string) => void} [props.onLabelChange] label 입력 변경 콜백
31
+ * @desc
32
+ * - readOnly + label이 ReactNode(string/number 제외)면 input 대신 노드를 직접 렌더링한다.
33
+ * - 편집 가능 상태에서는 pointer/click 이벤트 전파를 차단해 trigger 토글과 입력 포커스 충돌을 방지한다.
31
34
  * @example
32
35
  * <SelectTriggerSelected
33
36
  * label="사과"
@@ -22,6 +22,7 @@ const SELECT_MULTIPLE_ALL_OPTION_BASE_ID = "__select_multiple_all__";
22
22
  * Select trigger for multi select; 선택된 tag들을 chip 형태로 렌더링한다.
23
23
  * @component
24
24
  * @param {SelectMultipleComponentProps} props multi trigger props
25
+ * @param {string} [props.className] container className
25
26
  * @param {SelectMultipleTag[]} [props.tags] 선택된 tag 리스트
26
27
  * @param {SelectDropdownOption[]} [props.items] dropdown item 목록
27
28
  * @param {SelectCallbackParams} [props.onSelectOption] option 선택 액션 콜백
@@ -35,7 +36,9 @@ const SELECT_MULTIPLE_ALL_OPTION_BASE_ID = "__select_multiple_all__";
35
36
  * @param {FormFieldWidth} [props.width] container width preset
36
37
  * @param {boolean} [props.disabled] disabled 여부
37
38
  * @param {boolean} [props.readOnly] readOnly 여부
38
- * @param {SelectDropdownExtension} [props.dropdown] dropdown 확장 옵션
39
+ * @param {boolean} [props.icon] chevron 아이콘 비활성화 여부
40
+ * @param {Omit<HTMLAttributes<HTMLElement>, "children">} [props.triggerProps] trigger native props
41
+ * @param {SelectDropdownExtension} [props.dropdownOptions] dropdown 확장 옵션
39
42
  * @param {boolean} [props.open] controlled open 상태
40
43
  * @param {boolean} [props.defaultOpen] uncontrolled 초기 open 상태
41
44
  * @param {(open: boolean) => void} [props.onOpen] open 상태 변경 콜백
@@ -17,11 +17,13 @@ import type {
17
17
  SelectPriority,
18
18
  SelectSize,
19
19
  SelectState,
20
+ SelectTriggerButtonType,
20
21
  } from "./base";
22
+ import type { SelectMultipleTag } from "./multiple";
21
23
  import type { SelectDropdownOption } from "./option";
22
24
  import type {
23
- SelectTriggerDefaultProps,
24
- SelectTriggerMultipleProps,
25
+ SelectTriggerBaseFoundationProps,
26
+ SelectTriggerNativeProps,
25
27
  } from "./trigger";
26
28
 
27
29
  /**
@@ -276,14 +278,57 @@ export interface SelectDropdownBehaviorProps {
276
278
  }
277
279
 
278
280
  /**
279
- * Select trigger native event props
280
- * @property {HTMLAttributes<HTMLElement>} [triggerProps] trigger native 속성/이벤트
281
+ * Select trigger template props
282
+ * @property {string} [className] 사용자 정의 className
283
+ * @property {ReactNode} [displayLabel] 선택된 라벨
284
+ * @property {ReactNode} [placeholder] placeholder 텍스트
285
+ * @property {SelectTriggerNativeProps} [triggerProps] trigger native 속성/이벤트
281
286
  */
282
- export interface SelectTriggerEventProps {
287
+ export interface SelectTriggerTemplateProps {
288
+ /**
289
+ * 사용자 정의 className
290
+ */
291
+ className?: string;
292
+ /**
293
+ * 선택된 라벨
294
+ */
295
+ displayLabel?: ReactNode;
296
+ /**
297
+ * placeholder 텍스트
298
+ */
299
+ placeholder?: ReactNode;
283
300
  /**
284
301
  * trigger native 속성/이벤트
285
302
  */
286
- triggerProps?: HTMLAttributes<HTMLElement>;
303
+ triggerProps?: SelectTriggerNativeProps;
304
+ }
305
+
306
+ /**
307
+ * Select default trigger view props
308
+ * @property {ReactNode} [displayLabel] 선택된 라벨
309
+ * @property {ReactNode} [placeholder] placeholder 텍스트
310
+ * @property {SelectTriggerNativeProps} [triggerProps] trigger native 속성/이벤트
311
+ * @property {SelectTriggerButtonType} [buttonType] button type
312
+ */
313
+ export interface SelectDefaultTriggerViewProps extends SelectTriggerTemplateProps {
314
+ /**
315
+ * button type
316
+ */
317
+ buttonType?: SelectTriggerButtonType;
318
+ }
319
+
320
+ /**
321
+ * Select multiple trigger view props
322
+ * @property {ReactNode} [displayLabel] 선택된 라벨
323
+ * @property {ReactNode} [placeholder] placeholder 텍스트
324
+ * @property {SelectTriggerNativeProps} [triggerProps] trigger native 속성/이벤트
325
+ * @property {SelectMultipleTag[]} [tags] multi select tag 리스트
326
+ */
327
+ export interface SelectMultipleTriggerViewProps extends SelectTriggerTemplateProps {
328
+ /**
329
+ * multi select tag 리스트
330
+ */
331
+ tags?: SelectMultipleTag[];
287
332
  }
288
333
 
289
334
  /**
@@ -322,6 +367,7 @@ export type SelectProps = SelectStyleOptions &
322
367
 
323
368
  /**
324
369
  * Select.Default 컴포넌트 props
370
+ * @property {string} [className] 사용자 정의 className
325
371
  * @property {ReactNode} [displayLabel] 선택된 라벨
326
372
  * @property {ReactNode} [placeholder] placeholder 텍스트
327
373
  * @property {SelectPriority} [priority] priority scale
@@ -331,16 +377,17 @@ export type SelectProps = SelectStyleOptions &
331
377
  * @property {boolean} [open] dropdown open 여부
332
378
  * @property {boolean} [disabled] disabled 여부
333
379
  * @property {boolean} [readOnly] readOnly 여부
380
+ * @property {boolean} [icon] chevron 아이콘 비활성화
334
381
  * @property {SelectTriggerButtonType} [buttonType] button type
382
+ * @property {SelectTriggerNativeProps} [triggerProps] trigger native 속성/이벤트
335
383
  * @property {FormFieldWidth} [width] width preset 옵션
336
384
  * @property {SelectDropdownOption<OptionData>[]} [items] dropdown item 리스트
337
385
  * @property {SelectCallbackParams<OptionData>} [onSelectOption] option 선택 액션 콜백
338
386
  * @property {SelectCallbackParams<OptionData>} [onSelectChange] 선택값 변경 콜백
339
- * @property {SelectDropdownExtension} [dropdown] dropdown 확장 옵션
387
+ * @property {SelectDropdownExtension} [dropdownOptions] dropdown 확장 옵션
340
388
  * @property {boolean} [open] dropdown open 상태
341
389
  * @property {boolean} [defaultOpen] uncontrolled 초기 open 상태
342
390
  * @property {(open: boolean) => void} [onOpen] open state change 콜백
343
- * @property {HTMLAttributes<HTMLElement>} [triggerProps] trigger native 속성/이벤트
344
391
  * @property {SelectCustomOptions} [customOptions] 직접 입력 옵션 구성
345
392
  * @property {SelectCustomInputProps} [inputProps] 직접 입력 input 구성
346
393
  * @property {UseFormRegisterReturn} [register] source field register
@@ -351,11 +398,11 @@ export type SelectProps = SelectStyleOptions &
351
398
  * // optionality 제어는 콜백/옵션 타입에서 필요할 때만 명시적으로 사용한다.
352
399
  */
353
400
  export type SelectDefaultComponentProps<OptionData = unknown> =
354
- SelectTriggerDefaultProps &
401
+ SelectTriggerBaseFoundationProps &
402
+ SelectDefaultTriggerViewProps &
355
403
  SelectDropdownConfigProps<OptionData> &
356
404
  SelectDropdownBehaviorProps &
357
405
  SelectWidthOption &
358
- SelectTriggerEventProps &
359
406
  SelectCustomOptionExtension &
360
407
  SelectFormRegisterExtension;
361
408
 
@@ -377,6 +424,7 @@ export interface SelectMultipleAllOptionProps {
377
424
 
378
425
  /**
379
426
  * Select.Multiple 컴포넌트 props
427
+ * @property {string} [className] 사용자 정의 className
380
428
  * @property {ReactNode} [displayLabel] 선택된 라벨
381
429
  * @property {ReactNode} [placeholder] placeholder 텍스트
382
430
  * @property {SelectMultipleTag[]} [tags] multi select tag 리스트
@@ -387,15 +435,16 @@ export interface SelectMultipleAllOptionProps {
387
435
  * @property {boolean} [open] dropdown open 여부
388
436
  * @property {boolean} [disabled] disabled 여부
389
437
  * @property {boolean} [readOnly] readOnly 여부
438
+ * @property {boolean} [icon] chevron 아이콘 비활성화
439
+ * @property {SelectTriggerNativeProps} [triggerProps] trigger native 속성/이벤트
390
440
  * @property {FormFieldWidth} [width] width preset 옵션
391
441
  * @property {SelectDropdownOption<OptionData>[]} [items] dropdown item 리스트
392
442
  * @property {SelectCallbackParams<OptionData>} [onSelectOption] option 선택 액션 콜백
393
443
  * @property {SelectCallbackParams<OptionData>} [onSelectChange] 선택값 변경 콜백
394
- * @property {SelectDropdownExtension} [dropdown] dropdown 확장 옵션
444
+ * @property {SelectDropdownExtension} [dropdownOptions] dropdown 확장 옵션
395
445
  * @property {boolean} [open] dropdown open 상태
396
446
  * @property {boolean} [defaultOpen] uncontrolled 초기 open 상태
397
447
  * @property {(open: boolean) => void} [onOpen] open state change 콜백
398
- * @property {HTMLAttributes<HTMLElement>} [triggerProps] trigger native 속성/이벤트
399
448
  * @property {boolean} [showSelectAllOption] dropdown 첫 행에 "전체" 옵션 노출 여부
400
449
  * @property {ReactNode} [selectAllLabel] "전체" 옵션 라벨 커스터마이징
401
450
  * @example
@@ -404,9 +453,9 @@ export interface SelectMultipleAllOptionProps {
404
453
  * // optionality 제어는 콜백/옵션 타입에서 필요할 때만 명시적으로 사용한다.
405
454
  */
406
455
  export type SelectMultipleComponentProps<OptionData = unknown> =
407
- SelectTriggerMultipleProps &
456
+ SelectTriggerBaseFoundationProps &
457
+ SelectMultipleTriggerViewProps &
408
458
  SelectDropdownConfigProps<OptionData> &
409
459
  SelectDropdownBehaviorProps &
410
460
  SelectWidthOption &
411
- SelectMultipleAllOptionProps &
412
- SelectTriggerEventProps;
461
+ SelectMultipleAllOptionProps;
@@ -16,20 +16,17 @@ import type {
16
16
  import type { SelectMultipleTag } from "./multiple";
17
17
 
18
18
  /**
19
- * Select trigger layout props
19
+ * Select trigger foundation props
20
20
  * @property {SelectPriority} [priority] priority scale
21
21
  * @property {SelectSize} [size] size scale
22
22
  * @property {SelectState} [state] visual state
23
23
  * @property {boolean} [open] dropdown open 여부
24
24
  * @property {boolean} [block] block 여부
25
- * @property {boolean} [multiple] multi select 여부
26
25
  * @property {boolean} [disabled] disabled 여부
27
26
  * @property {boolean} [readOnly] readOnly 여부
28
- * @property {ElementType} [as] polymorphic element
29
- * @property {SelectTriggerButtonType} [buttonType] button type
30
- * @property {ReactNode} children 콘텐츠
27
+ * @property {boolean} [icon] chevron 아이콘 비활성화
31
28
  */
32
- export interface SelectTriggerBaseProps extends HTMLAttributes<HTMLElement> {
29
+ export interface SelectTriggerBaseFoundationProps {
33
30
  /**
34
31
  * priority scale
35
32
  * - primary
@@ -60,10 +57,6 @@ export interface SelectTriggerBaseProps extends HTMLAttributes<HTMLElement> {
60
57
  * block 여부
61
58
  */
62
59
  block?: boolean;
63
- /**
64
- * multi select 여부
65
- */
66
- multiple?: boolean;
67
60
  /**
68
61
  * disabled 여부
69
62
  */
@@ -72,6 +65,31 @@ export interface SelectTriggerBaseProps extends HTMLAttributes<HTMLElement> {
72
65
  * readOnly 여부
73
66
  */
74
67
  readOnly?: boolean;
68
+ /**
69
+ * chevron 아이콘 비활성화
70
+ */
71
+ icon?: boolean;
72
+ }
73
+
74
+ /**
75
+ * Select trigger native props
76
+ * @typedef {Omit<HTMLAttributes<HTMLElement>, "children">}
77
+ * trigger native 속성 집합 (children 제외)
78
+ */
79
+ export type SelectTriggerNativeProps = Omit<
80
+ HTMLAttributes<HTMLElement>,
81
+ "children"
82
+ >;
83
+
84
+ /**
85
+ * Select trigger component props
86
+ * @property {boolean} [multiple] multi select 여부
87
+ * @property {ElementType} [as] polymorphic element
88
+ * @property {SelectTriggerButtonType} [buttonType] button type
89
+ * @property {ReactNode} children 콘텐츠
90
+ */
91
+ export interface SelectTriggerBaseComponentProps {
92
+ multiple?: boolean;
75
93
  /**
76
94
  * polymorphic element
77
95
  */
@@ -84,18 +102,19 @@ export interface SelectTriggerBaseProps extends HTMLAttributes<HTMLElement> {
84
102
  * 콘텐츠
85
103
  */
86
104
  children: ReactNode;
87
- /**
88
- * chevron 아이콘 비활성화
89
- */
90
- icon?: boolean;
91
105
  }
92
106
 
107
+ // 변경 설명: Trigger Base는 Foundation(스타일/상태) + Component(렌더 계약) + Native(HTML attrs/event) 조합으로 역할을 분리한다.
108
+ export type SelectTriggerBaseProps = SelectTriggerBaseFoundationProps &
109
+ SelectTriggerBaseComponentProps &
110
+ SelectTriggerNativeProps;
111
+
93
112
  /**
94
113
  * Select trigger default props
95
114
  * @property {ReactNode} [displayLabel] 선택된 라벨
96
115
  * @property {ReactNode} [placeholder] placeholder 텍스트
97
116
  */
98
- export interface SelectTriggerDefaultProps extends HTMLAttributes<HTMLElement> {
117
+ export interface SelectTriggerDefaultProps extends SelectTriggerBaseFoundationProps {
99
118
  /**
100
119
  * 선택된 라벨
101
120
  */
@@ -104,44 +123,6 @@ export interface SelectTriggerDefaultProps extends HTMLAttributes<HTMLElement> {
104
123
  * placeholder 텍스트
105
124
  */
106
125
  placeholder?: ReactNode;
107
- /**
108
- * priority scale
109
- * - primary
110
- * - secondary
111
- * - table
112
- */
113
- priority?: SelectPriority;
114
- /**
115
- * size scale
116
- * - xsmall (primary 전용)
117
- * - small
118
- * - medium
119
- * - large
120
- */
121
- size?: SelectSize;
122
- /**
123
- * visual state
124
- * - default
125
- * - focused
126
- * - disabled
127
- */
128
- state?: SelectState;
129
- /**
130
- * block 여부
131
- */
132
- block?: boolean;
133
- /**
134
- * dropdown open 여부
135
- */
136
- open?: boolean;
137
- /**
138
- * disabled 여부
139
- */
140
- disabled?: boolean;
141
- /**
142
- * readOnly 여부
143
- */
144
- readOnly?: boolean;
145
126
  /**
146
127
  * button type
147
128
  */
@@ -152,7 +133,7 @@ export interface SelectTriggerDefaultProps extends HTMLAttributes<HTMLElement> {
152
133
  * Select trigger multiple props
153
134
  * @property {ReactNode[]} [tags] multi select tag 리스트
154
135
  */
155
- export interface SelectTriggerMultipleProps extends HTMLAttributes<HTMLElement> {
136
+ export interface SelectTriggerMultipleProps extends SelectTriggerBaseFoundationProps {
156
137
  /**
157
138
  * 선택된 라벨
158
139
  */
@@ -165,44 +146,6 @@ export interface SelectTriggerMultipleProps extends HTMLAttributes<HTMLElement>
165
146
  * multi select tag 리스트
166
147
  */
167
148
  tags?: SelectMultipleTag[];
168
- /**
169
- * priority scale
170
- * - primary
171
- * - secondary
172
- * - table
173
- */
174
- priority?: SelectPriority;
175
- /**
176
- * size scale
177
- * - xsmall (primary 전용)
178
- * - small
179
- * - medium
180
- * - large
181
- */
182
- size?: SelectSize;
183
- /**
184
- * visual state
185
- * - default
186
- * - focused
187
- * - disabled
188
- */
189
- state?: SelectState;
190
- /**
191
- * block 여부
192
- */
193
- block?: boolean;
194
- /**
195
- * dropdown open 여부
196
- */
197
- open?: boolean;
198
- /**
199
- * disabled 여부
200
- */
201
- disabled?: boolean;
202
- /**
203
- * readOnly 여부
204
- */
205
- readOnly?: boolean;
206
149
  }
207
150
 
208
151
  /**