@uniai-fe/uds-primitives 0.1.13 → 0.2.0

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 (113) hide show
  1. package/README.md +2 -2
  2. package/dist/styles.css +1112 -385
  3. package/package.json +12 -15
  4. package/src/components/button/index.scss +1 -0
  5. package/src/components/button/markup/{ButtonRounded.tsx → Rounded.tsx} +1 -1
  6. package/src/components/button/markup/{ButtonText.tsx → Text.tsx} +1 -1
  7. package/src/components/button/markup/index.ts +3 -3
  8. package/src/components/button/styles/button.scss +113 -229
  9. package/src/components/button/styles/round-button.scss +11 -14
  10. package/src/components/button/styles/text-button.scss +23 -23
  11. package/src/components/button/styles/variables.scss +145 -0
  12. package/src/components/dropdown/index.tsx +3 -3
  13. package/src/components/dropdown/markup/Template.tsx +61 -0
  14. package/src/components/dropdown/markup/foundation/Container.tsx +97 -0
  15. package/src/components/dropdown/markup/foundation/MenuItem.tsx +107 -0
  16. package/src/components/dropdown/markup/foundation/MenuList.tsx +27 -0
  17. package/src/components/dropdown/markup/foundation/Provider.tsx +46 -0
  18. package/src/components/dropdown/markup/foundation/Root.tsx +30 -0
  19. package/src/components/dropdown/markup/foundation/Trigger.tsx +34 -0
  20. package/src/components/dropdown/markup/foundation/index.tsx +25 -0
  21. package/src/components/dropdown/markup/index.tsx +8 -2
  22. package/src/components/dropdown/styles/dropdown.scss +166 -0
  23. package/src/components/dropdown/styles/index.scss +2 -0
  24. package/src/components/dropdown/styles/variables.scss +40 -0
  25. package/src/components/dropdown/types/base.ts +18 -0
  26. package/src/components/dropdown/types/index.ts +2 -4
  27. package/src/components/dropdown/types/props.ts +174 -0
  28. package/src/components/dropdown/utils/index.ts +1 -4
  29. package/src/components/dropdown/utils/refs.ts +20 -0
  30. package/src/components/form/index.scss +1 -0
  31. package/src/components/form/index.tsx +18 -2
  32. package/src/components/form/markup/form-field/Body.tsx +18 -0
  33. package/src/components/form/markup/form-field/Container.tsx +58 -0
  34. package/src/components/form/markup/form-field/Footer.tsx +21 -0
  35. package/src/components/form/markup/form-field/Header.tsx +39 -0
  36. package/src/components/form/markup/form-field/Template.tsx +56 -0
  37. package/src/components/form/markup/form-field/index.tsx +22 -0
  38. package/src/components/form/styles/form-field/layout.scss +67 -0
  39. package/src/components/form/styles/form-field/variables.scss +17 -0
  40. package/src/components/form/styles/index.scss +2 -0
  41. package/src/components/form/types/index.ts +1 -0
  42. package/src/components/form/types/props.ts +125 -0
  43. package/src/components/form/utils/form-field.ts +42 -0
  44. package/src/components/input/hooks/index.ts +1 -4
  45. package/src/components/input/hooks/useDigitField.ts +63 -0
  46. package/src/components/input/img/calendar/calendar.svg +7 -0
  47. package/src/components/input/img/calendar/chevron-down.svg +3 -0
  48. package/src/components/input/img/calendar/chevron-left.svg +3 -0
  49. package/src/components/input/img/calendar/chevron-right.svg +3 -0
  50. package/src/components/input/img/calendar/chevron-up.svg +3 -0
  51. package/src/components/input/index.tsx +2 -1
  52. package/src/components/input/markup/calendar/Base.tsx +329 -0
  53. package/src/components/input/markup/calendar/index.tsx +8 -0
  54. package/src/components/input/markup/{text/InputUtilityButton.tsx → foundation/Button.tsx} +5 -15
  55. package/src/components/input/markup/foundation/Input.tsx +245 -0
  56. package/src/components/input/markup/foundation/SideSlot.tsx +30 -0
  57. package/src/components/input/markup/foundation/StatusIcon.tsx +21 -0
  58. package/src/components/input/markup/foundation/Utility.tsx +103 -0
  59. package/src/components/input/markup/foundation/index.tsx +15 -0
  60. package/src/components/input/markup/index.tsx +11 -1
  61. package/src/components/input/markup/text/AuthCode.tsx +41 -59
  62. package/src/components/input/markup/text/Email.tsx +25 -115
  63. package/src/components/input/markup/text/Password.tsx +30 -39
  64. package/src/components/input/markup/text/Phone.tsx +35 -122
  65. package/src/components/input/markup/text/Search.tsx +17 -18
  66. package/src/components/input/markup/text/index.ts +15 -12
  67. package/src/components/input/styles/calendar.scss +110 -0
  68. package/src/components/input/styles/foundation.scss +345 -0
  69. package/src/components/input/styles/index.scss +4 -476
  70. package/src/components/input/styles/text.scss +89 -0
  71. package/src/components/input/styles/variables.scss +41 -0
  72. package/src/components/input/types/calendar.ts +208 -0
  73. package/src/components/input/types/foundation.ts +194 -0
  74. package/src/components/input/types/hooks.ts +43 -0
  75. package/src/components/input/types/index.ts +5 -87
  76. package/src/components/input/types/text.ts +203 -0
  77. package/src/components/input/types/verification.ts +23 -0
  78. package/src/components/input/utils/index.tsx +1 -0
  79. package/src/components/input/utils/verification.tsx +35 -0
  80. package/src/components/select/hooks/index.ts +43 -2
  81. package/src/components/select/img/chevron/primary/large.svg +3 -0
  82. package/src/components/select/img/chevron/primary/medium.svg +3 -0
  83. package/src/components/select/img/chevron/primary/small.svg +3 -0
  84. package/src/components/select/img/chevron/secondary/large.svg +3 -0
  85. package/src/components/select/img/chevron/secondary/medium.svg +3 -0
  86. package/src/components/select/img/chevron/secondary/small.svg +3 -0
  87. package/src/components/select/img/remove.svg +3 -0
  88. package/src/components/select/index.scss +2 -1
  89. package/src/components/select/index.tsx +5 -0
  90. package/src/components/select/markup/Default.tsx +154 -0
  91. package/src/components/select/markup/foundation/Base.tsx +90 -0
  92. package/src/components/select/markup/foundation/Container.tsx +30 -0
  93. package/src/components/select/markup/foundation/Icon.tsx +78 -0
  94. package/src/components/select/markup/foundation/Selected.tsx +34 -0
  95. package/src/components/select/markup/foundation/index.ts +2 -0
  96. package/src/components/select/markup/index.tsx +36 -2
  97. package/src/components/select/markup/multiple/Multiple.tsx +205 -0
  98. package/src/components/select/markup/multiple/SelectedChip.tsx +58 -0
  99. package/src/components/select/markup/multiple/index.ts +2 -0
  100. package/src/components/select/styles/select.scss +316 -0
  101. package/src/components/select/styles/variables.scss +91 -0
  102. package/src/components/select/types/base.ts +34 -0
  103. package/src/components/select/types/icon.ts +45 -0
  104. package/src/components/select/types/index.ts +5 -4
  105. package/src/components/select/types/multiple.ts +57 -0
  106. package/src/components/select/types/props.ts +208 -0
  107. package/src/components/select/types/trigger.ts +196 -0
  108. package/src/index.scss +3 -2
  109. package/src/components/input/markup/text/Base.tsx +0 -454
  110. package/src/components/input/utils/index.ts +0 -60
  111. package/src/components/select/styles/index.scss +0 -0
  112. /package/src/components/button/markup/{ButtonDefault.tsx → Base.tsx} +0 -0
  113. /package/src/components/form/{Provider.tsx → markup/Provider.tsx} +0 -0
@@ -0,0 +1,208 @@
1
+ import type { ReactNode } from "react";
2
+
3
+ import type {
4
+ DropdownContainerProps,
5
+ DropdownMenuListProps,
6
+ DropdownRootProps,
7
+ DropdownTemplateItem,
8
+ } from "../../dropdown/types";
9
+ import type { SelectPriority, SelectSize, SelectState } from "./base";
10
+ import type {
11
+ SelectTriggerDefaultProps,
12
+ SelectTriggerMultipleProps,
13
+ } from "./trigger";
14
+
15
+ /**
16
+ * Select; 스타일 옵션
17
+ * @property {SelectPriority} [priority] priority scale
18
+ * @property {SelectSize} [size] size scale
19
+ * @property {SelectState} [state] visual state
20
+ * @property {boolean} [block] block 여부
21
+ */
22
+ export interface SelectStyleOptions {
23
+ /**
24
+ * priority scale
25
+ */
26
+ priority?: SelectPriority;
27
+ /**
28
+ * size scale
29
+ */
30
+ size?: SelectSize;
31
+ /**
32
+ * visual state
33
+ */
34
+ state?: SelectState;
35
+ /**
36
+ * block 여부
37
+ */
38
+ block?: boolean;
39
+ }
40
+
41
+ /**
42
+ * Select; 값 옵션
43
+ * @property {ReactNode} [displayLabel] 선택된 라벨
44
+ * @property {ReactNode} [placeholder] placeholder 텍스트
45
+ * @property {ReactNode[]} [tags] multi select 태그 리스트
46
+ * @property {boolean} [multiple] multi select 여부
47
+ */
48
+ export interface SelectValueOptions {
49
+ /**
50
+ * 선택된 라벨
51
+ */
52
+ displayLabel?: ReactNode;
53
+ /**
54
+ * placeholder 텍스트
55
+ */
56
+ placeholder?: ReactNode;
57
+ /**
58
+ * multi select 태그 리스트
59
+ */
60
+ tags?: ReactNode[];
61
+ /**
62
+ * multi select 여부
63
+ */
64
+ multiple?: boolean;
65
+ }
66
+
67
+ /**
68
+ * Select; 상태 옵션
69
+ * @property {boolean} [isOpen] dropdown open 여부
70
+ */
71
+ export interface SelectComponentState {
72
+ /**
73
+ * dropdown open 여부
74
+ */
75
+ isOpen?: boolean;
76
+ }
77
+
78
+ /**
79
+ * Select container props
80
+ * @property {string} [className] 사용자 정의 className
81
+ * @property {ReactNode} children trigger/Dropdown 등 내부 콘텐츠
82
+ * @property {boolean} [block] block 여부
83
+ */
84
+ export interface SelectContainerProps {
85
+ /**
86
+ * 사용자 정의 className
87
+ */
88
+ className?: string;
89
+ /**
90
+ * trigger/Dropdown 등 내부 콘텐츠
91
+ */
92
+ children: ReactNode;
93
+ /**
94
+ * block 여부
95
+ */
96
+ block?: boolean;
97
+ }
98
+
99
+ /**
100
+ * Select root props
101
+ * @typedef {SelectStyleOptions & SelectValueOptions & SelectComponentState} SelectProps
102
+ */
103
+ export type SelectProps = SelectStyleOptions &
104
+ SelectValueOptions &
105
+ SelectComponentState;
106
+
107
+ /**
108
+ * Select dropdown option; Dropdown.Template item 계약을 그대로 따른다.
109
+ * @extends DropdownTemplateItem
110
+ */
111
+ export interface SelectDropdownOption extends DropdownTemplateItem {}
112
+
113
+ /**
114
+ * Select dropdown 옵션 구성 props
115
+ * @property {SelectDropdownOption[]} [options] dropdown option 리스트
116
+ * @property {string[]} [selectedOptionIds] 선택된 option id 리스트
117
+ * @property {(option: SelectDropdownOption) => void} [onOptionSelect] option 선택 콜백
118
+ * @property {SelectSize} [dropdownSize] dropdown surface size 스케일
119
+ * @property {boolean} [dropdownMatchTriggerWidth] trigger width 동기화 여부
120
+ * @property {DropdownRootProps} [dropdownRootProps] Dropdown.Root 전달 props(제어 props 제외)
121
+ * @property {DropdownContainerProps} [dropdownContainerProps] Dropdown.Container 전달 props(children/size 제외)
122
+ * @property {DropdownMenuListProps} [dropdownMenuListProps] Dropdown.Menu.List 전달 props
123
+ */
124
+ export interface SelectDropdownConfigProps {
125
+ /**
126
+ * dropdown option 리스트
127
+ */
128
+ options?: SelectDropdownOption[];
129
+ /**
130
+ * 선택된 option id 리스트
131
+ */
132
+ selectedOptionIds?: string[];
133
+ /**
134
+ * option 선택 콜백
135
+ */
136
+ onOptionSelect?: (option: SelectDropdownOption) => void;
137
+ /**
138
+ * dropdown surface size 스케일
139
+ */
140
+ dropdownSize?: SelectSize;
141
+ /**
142
+ * trigger width 동기화 여부
143
+ */
144
+ dropdownMatchTriggerWidth?: boolean;
145
+ /**
146
+ * Dropdown.Root 전달 props(제어 props 제외)
147
+ */
148
+ dropdownRootProps?: Omit<
149
+ DropdownRootProps,
150
+ "open" | "defaultOpen" | "onOpenChange"
151
+ >;
152
+ /**
153
+ * Dropdown.Container 전달 props(children/size 제외)
154
+ */
155
+ dropdownContainerProps?: Omit<
156
+ DropdownContainerProps,
157
+ "children" | "size" | "matchTriggerWidth"
158
+ >;
159
+ /**
160
+ * Dropdown.Menu.List 전달 props
161
+ */
162
+ dropdownMenuListProps?: DropdownMenuListProps;
163
+ }
164
+
165
+ /**
166
+ * Select dropdown 개방 제어 props
167
+ * @property {boolean} [open] dropdown open 상태
168
+ * @property {boolean} [defaultOpen] uncontrolled 초기 open 상태
169
+ * @property {(open: boolean) => void} [onOpenChange] open state change 콜백
170
+ */
171
+ export interface SelectDropdownBehaviorProps {
172
+ /**
173
+ * dropdown open 상태
174
+ */
175
+ open?: boolean;
176
+ /**
177
+ * uncontrolled 초기 open 상태
178
+ */
179
+ defaultOpen?: boolean;
180
+ /**
181
+ * open state change 콜백
182
+ */
183
+ onOpenChange?: (open: boolean) => void;
184
+ }
185
+
186
+ /**
187
+ * Select.Default 컴포넌트 props
188
+ * @extends SelectTriggerDefaultProps
189
+ * @extends SelectDropdownConfigProps
190
+ * @extends SelectDropdownBehaviorProps
191
+ */
192
+ export interface SelectDefaultComponentProps
193
+ extends
194
+ SelectTriggerDefaultProps,
195
+ SelectDropdownConfigProps,
196
+ SelectDropdownBehaviorProps {}
197
+
198
+ /**
199
+ * Select.Multiple 컴포넌트 props
200
+ * @extends SelectTriggerMultipleProps
201
+ * @extends SelectDropdownConfigProps
202
+ * @extends SelectDropdownBehaviorProps
203
+ */
204
+ export interface SelectMultipleComponentProps
205
+ extends
206
+ SelectTriggerMultipleProps,
207
+ SelectDropdownConfigProps,
208
+ SelectDropdownBehaviorProps {}
@@ -0,0 +1,196 @@
1
+ import type { ElementType, HTMLAttributes, ReactNode } from "react";
2
+
3
+ import type {
4
+ SelectPriority,
5
+ SelectSize,
6
+ SelectState,
7
+ SelectTriggerButtonType,
8
+ } from "./base";
9
+ import type { SelectMultipleTag } from "./multiple";
10
+
11
+ /**
12
+ * Select trigger layout props
13
+ * @property {SelectPriority} [priority] priority scale
14
+ * @property {SelectSize} [size] size scale
15
+ * @property {SelectState} [state] visual state
16
+ * @property {boolean} [open] dropdown open 여부
17
+ * @property {boolean} [block] block 여부
18
+ * @property {boolean} [multiple] multi select 여부
19
+ * @property {boolean} [disabled] disabled 여부
20
+ * @property {ElementType} [as] polymorphic element
21
+ * @property {SelectTriggerButtonType} [buttonType] button type
22
+ * @property {ReactNode} children 콘텐츠
23
+ */
24
+ export interface SelectTriggerBaseProps extends HTMLAttributes<HTMLElement> {
25
+ /**
26
+ * priority scale
27
+ * - primary
28
+ * - secondary
29
+ */
30
+ priority?: SelectPriority;
31
+ /**
32
+ * size scale
33
+ * - small
34
+ * - medium
35
+ * - large
36
+ */
37
+ size?: SelectSize;
38
+ /**
39
+ * visual state
40
+ * - default
41
+ * - focused
42
+ * - disabled
43
+ */
44
+ state?: SelectState;
45
+ /**
46
+ * dropdown open 여부
47
+ */
48
+ open?: boolean;
49
+ /**
50
+ * block 여부
51
+ */
52
+ block?: boolean;
53
+ /**
54
+ * multi select 여부
55
+ */
56
+ multiple?: boolean;
57
+ /**
58
+ * disabled 여부
59
+ */
60
+ disabled?: boolean;
61
+ /**
62
+ * polymorphic element
63
+ */
64
+ as?: ElementType;
65
+ /**
66
+ * button type
67
+ */
68
+ buttonType?: SelectTriggerButtonType;
69
+ /**
70
+ * 콘텐츠
71
+ */
72
+ children: ReactNode;
73
+ }
74
+
75
+ /**
76
+ * Select trigger default props
77
+ * @property {ReactNode} [displayLabel] 선택된 라벨
78
+ * @property {ReactNode} [placeholder] placeholder 텍스트
79
+ */
80
+ export interface SelectTriggerDefaultProps extends HTMLAttributes<HTMLElement> {
81
+ /**
82
+ * 선택된 라벨
83
+ */
84
+ displayLabel?: ReactNode;
85
+ /**
86
+ * placeholder 텍스트
87
+ */
88
+ placeholder?: ReactNode;
89
+ /**
90
+ * priority scale
91
+ * - primary
92
+ * - secondary
93
+ */
94
+ priority?: SelectPriority;
95
+ /**
96
+ * size scale
97
+ * - small
98
+ * - medium
99
+ * - large
100
+ */
101
+ size?: SelectSize;
102
+ /**
103
+ * visual state
104
+ * - default
105
+ * - focused
106
+ * - disabled
107
+ */
108
+ state?: SelectState;
109
+ /**
110
+ * block 여부
111
+ */
112
+ block?: boolean;
113
+ /**
114
+ * dropdown open 여부
115
+ */
116
+ isOpen?: boolean;
117
+ /**
118
+ * disabled 여부
119
+ */
120
+ disabled?: boolean;
121
+ /**
122
+ * button type
123
+ */
124
+ buttonType?: SelectTriggerButtonType;
125
+ }
126
+
127
+ /**
128
+ * Select trigger multiple props
129
+ * @property {ReactNode[]} [tags] multi select tag 리스트
130
+ */
131
+ export interface SelectTriggerMultipleProps extends HTMLAttributes<HTMLElement> {
132
+ /**
133
+ * 선택된 라벨
134
+ */
135
+ displayLabel?: ReactNode;
136
+ /**
137
+ * placeholder 텍스트
138
+ */
139
+ placeholder?: ReactNode;
140
+ /**
141
+ * multi select tag 리스트
142
+ */
143
+ tags?: SelectMultipleTag[];
144
+ /**
145
+ * priority scale
146
+ * - primary
147
+ */
148
+ priority?: SelectPriority;
149
+ /**
150
+ * size scale
151
+ * - small
152
+ * - medium
153
+ * - large
154
+ */
155
+ size?: SelectSize;
156
+ /**
157
+ * visual state
158
+ * - default
159
+ * - focused
160
+ * - disabled
161
+ */
162
+ state?: SelectState;
163
+ /**
164
+ * block 여부
165
+ */
166
+ block?: boolean;
167
+ /**
168
+ * dropdown open 여부
169
+ */
170
+ isOpen?: boolean;
171
+ /**
172
+ * disabled 여부
173
+ */
174
+ disabled?: boolean;
175
+ }
176
+
177
+ /**
178
+ * Select selected view props
179
+ * @property {ReactNode} [label] 표시할 라벨
180
+ * @property {ReactNode} [placeholder] placeholder 텍스트
181
+ * @property {boolean} [isPlaceholder] placeholder 상태 여부
182
+ */
183
+ export interface SelectSelectedProps {
184
+ /**
185
+ * 표시할 라벨
186
+ */
187
+ label?: ReactNode;
188
+ /**
189
+ * placeholder 텍스트
190
+ */
191
+ placeholder?: ReactNode;
192
+ /**
193
+ * placeholder 상태 여부
194
+ */
195
+ isPlaceholder?: boolean;
196
+ }
package/src/index.scss CHANGED
@@ -6,14 +6,15 @@
6
6
  @use "./components/chip";
7
7
  @use "./components/drawer";
8
8
  @use "./components/dropdown";
9
- @use "./components/input";
10
9
  @use "./components/label";
10
+ @use "./components/input";
11
+ @use "./components/select";
12
+ @use "./components/form";
11
13
  @use "./components/navigation";
12
14
  @use "./components/pagination";
13
15
  @use "./components/radio";
14
16
  @use "./components/scrollbar";
15
17
  @use "./components/segmented-control";
16
- @use "./components/select";
17
18
  @use "./components/spinner";
18
19
  @use "./components/tab";
19
20
  @use "./components/table";