@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,345 @@
1
+ .input {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--spacing-gap-3);
5
+ width: 100%;
6
+
7
+ &[data-block="true"],
8
+ &--block {
9
+ width: 100%;
10
+ }
11
+ }
12
+
13
+ .input-label {
14
+ color: var(--input-label-color);
15
+ font-size: var(--font-label-small-size);
16
+ line-height: var(--font-label-small-line-height);
17
+ font-weight: var(--font-label-small-weight);
18
+ }
19
+
20
+ .input-label--visually-hidden {
21
+ position: absolute;
22
+ width: 1px;
23
+ height: 1px;
24
+ padding: 0;
25
+ margin: -1px;
26
+ overflow: hidden;
27
+ clip: rect(0 0 0 0);
28
+ clip-path: inset(50%);
29
+ white-space: nowrap;
30
+ border: 0;
31
+ }
32
+
33
+ .input-box {
34
+ width: 100%;
35
+ }
36
+
37
+ .input-field {
38
+ display: flex;
39
+ align-items: center;
40
+ width: 100%;
41
+ gap: var(--input-default-gap);
42
+ border-radius: var(--input-default-radius-base);
43
+ border: var(--input-border-width-default) solid var(--input-border-color);
44
+ background-color: var(--input-surface-color);
45
+ padding: var(--input-default-padding-block)
46
+ var(--input-default-padding-inline);
47
+ min-height: var(--input-default-height-medium);
48
+ transition:
49
+ border-color 0.15s ease,
50
+ background-color 0.15s ease;
51
+ box-sizing: border-box;
52
+ outline: none;
53
+ box-shadow: none;
54
+
55
+ &[data-size="small"] {
56
+ min-height: var(--input-default-height-small);
57
+ }
58
+
59
+ &[data-size="large"] {
60
+ min-height: var(--input-default-height-large);
61
+ }
62
+
63
+ &[data-priority="secondary"] {
64
+ border: none;
65
+ border-bottom: var(--input-border-width-default) solid
66
+ var(--input-border-color);
67
+ border-radius: 0;
68
+ padding-inline: 0;
69
+ padding-block: var(--spacing-padding-4);
70
+ background-color: transparent;
71
+
72
+ &[data-state="active"],
73
+ &[data-state="focused"] {
74
+ border-bottom-color: var(--input-border-active-color);
75
+ border-bottom-width: var(--input-border-width-emphasis);
76
+ }
77
+
78
+ &[data-state="success"] {
79
+ border-bottom-color: var(--input-border-success-color);
80
+ border-bottom-width: var(--input-border-width-emphasis);
81
+ }
82
+
83
+ &[data-state="error"] {
84
+ border-bottom-color: var(--input-border-error-color);
85
+ border-bottom-width: var(--input-border-width-emphasis);
86
+ }
87
+
88
+ &[data-state="disabled"] {
89
+ border-bottom-color: var(--input-border-underline-disabled-color);
90
+ border-bottom-width: var(--input-border-width-default);
91
+ }
92
+ }
93
+
94
+ &[data-priority="tertiary"] {
95
+ border-radius: var(--input-tertiary-radius-base);
96
+ background-color: var(--input-surface-color);
97
+ min-height: var(--input-tertiary-height-base);
98
+ row-gap: var(--spacing-gap-1);
99
+ column-gap: var(--input-default-gap);
100
+ flex-wrap: wrap;
101
+ align-items: center;
102
+
103
+ .input-field-control {
104
+ display: grid;
105
+ grid-template-columns: auto minmax(0, 1fr);
106
+ column-gap: var(--input-default-gap);
107
+ row-gap: var(--spacing-gap-1);
108
+ align-items: center;
109
+ flex: 1 1 auto;
110
+ min-width: 0;
111
+ }
112
+
113
+ .input-inline-label {
114
+ grid-column: 1 / -1;
115
+ margin: 0;
116
+ align-self: flex-start;
117
+ }
118
+
119
+ .input-element {
120
+ min-height: var(--theme-size-medium-2);
121
+ width: auto;
122
+ flex: 1 1 auto;
123
+ }
124
+
125
+ .input-field-utilities {
126
+ align-self: center;
127
+ margin-left: 0;
128
+ }
129
+ }
130
+
131
+ &:not([data-priority="secondary"]) {
132
+ &[data-state="active"],
133
+ &[data-state="focused"] {
134
+ border-color: var(--input-border-active-color);
135
+ border-width: var(--input-border-width-emphasis);
136
+ }
137
+
138
+ &[data-state="success"] {
139
+ border-color: var(--input-border-success-color);
140
+ border-width: var(--input-border-width-emphasis);
141
+ }
142
+
143
+ &[data-state="error"] {
144
+ border-color: var(--input-border-error-color);
145
+ border-width: var(--input-border-width-emphasis);
146
+ }
147
+
148
+ &[data-state="disabled"] {
149
+ border-color: var(--input-border-disabled-color);
150
+ border-width: var(--input-border-width-default);
151
+ background-color: var(
152
+ --input-surface-disabled-color
153
+ ); /* disabled 배경 토큰 */
154
+ }
155
+ }
156
+ }
157
+
158
+ .input-element {
159
+ flex: 1 1 auto;
160
+ width: 100%;
161
+ border: none;
162
+ background: transparent;
163
+ color: var(--input-text-color);
164
+ caret-color: var(--input-text-color);
165
+ font-size: var(--font-body-medium-size);
166
+ line-height: var(--font-body-medium-line-height);
167
+ font-weight: 400;
168
+ letter-spacing: 0px;
169
+ outline: none;
170
+ box-shadow: none;
171
+ min-width: 0;
172
+
173
+ &::placeholder {
174
+ color: var(--input-placeholder-color);
175
+ }
176
+
177
+ &:disabled {
178
+ color: var(--color-label-disabled);
179
+
180
+ &::placeholder {
181
+ color: var(--color-label-disabled);
182
+ }
183
+ }
184
+
185
+ &:focus,
186
+ &:focus-visible,
187
+ &:focus-within {
188
+ outline: none;
189
+ box-shadow: none;
190
+ }
191
+ }
192
+
193
+ .input-field-control {
194
+ display: flex;
195
+ align-items: center;
196
+ gap: var(--input-default-gap);
197
+ flex: 1 1 auto;
198
+ min-width: 0;
199
+ }
200
+
201
+ .input-field-utilities {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: var(--spacing-gap-2, 8px);
205
+ flex-shrink: 0;
206
+ margin-left: var(--spacing-gap-3, 12px);
207
+
208
+ .input-affix {
209
+ margin-left: 0;
210
+ }
211
+ }
212
+
213
+ .input-inline-label {
214
+ order: -2;
215
+ flex-basis: 100%;
216
+ font-size: var(--font-label-small-size);
217
+ line-height: var(--font-label-small-line-height);
218
+ color: var(--input-label-color);
219
+ }
220
+
221
+ .input-field[data-priority="secondary"] .input-element {
222
+ padding-inline: 0;
223
+ }
224
+
225
+ .input-field[data-priority="tertiary"] .input-element {
226
+ min-height: var(--theme-size-medium-2);
227
+ }
228
+
229
+ .input-helper-text {
230
+ color: var(--input-helper-color);
231
+ font-size: var(--font-label-small-size);
232
+ line-height: var(--font-label-small-line-height);
233
+
234
+ [data-state="error"] & {
235
+ color: var(--input-border-error-color);
236
+ }
237
+
238
+ // [data-state="success"] & {
239
+ // color: var(--input-helper-success-color);
240
+ // }
241
+
242
+ [data-state="disabled"] & {
243
+ color: var(--input-helper-disabled-color);
244
+ }
245
+ }
246
+
247
+ .input-affix {
248
+ display: flex;
249
+ align-items: center;
250
+ justify-content: center;
251
+ min-width: 20px;
252
+ color: var(--input-helper-color);
253
+
254
+ &-left {
255
+ order: -1;
256
+ margin-right: var(--spacing-gap-3);
257
+ }
258
+
259
+ &-right,
260
+ &-clear,
261
+ &-status {
262
+ margin-left: var(--spacing-gap-3);
263
+ }
264
+
265
+ &-clear,
266
+ &-status {
267
+ color: var(--input-text-color);
268
+ }
269
+
270
+ // 상태별 아이콘 컬러는 디자인 토큰으로 직접 지정한다.
271
+ &-status[data-state="error"] {
272
+ color: var(--color-error);
273
+ }
274
+
275
+ &-status[data-state="success"] {
276
+ color: var(--color-primary-default);
277
+ }
278
+ }
279
+ .input-field[data-priority="secondary"] {
280
+ border-bottom-width: var(--input-border-width-default);
281
+
282
+ &[data-state="active"],
283
+ &[data-state="focused"] {
284
+ border-bottom-color: var(--input-border-active-color);
285
+ border-bottom-width: var(--input-border-width-emphasis);
286
+ }
287
+
288
+ &[data-state="success"] {
289
+ border-bottom-color: var(--input-border-success-color);
290
+ border-bottom-width: var(--input-border-width-emphasis);
291
+ }
292
+
293
+ &[data-state="error"] {
294
+ border-bottom-color: var(--input-border-error-color);
295
+ border-bottom-width: var(--input-border-width-emphasis);
296
+ }
297
+
298
+ &[data-state="disabled"] {
299
+ border-bottom-color: var(--input-border-underline-disabled-color);
300
+ border-bottom-width: var(--input-border-width-default);
301
+ }
302
+ }
303
+
304
+ .input[data-state="active"],
305
+ .input[data-state="focused"],
306
+ .input[data-state="success"] {
307
+ .input-label,
308
+ .input-inline-label {
309
+ color: var(--input-label-accent-color);
310
+ }
311
+ }
312
+
313
+ .input[data-state="error"] {
314
+ .input-label,
315
+ .input-inline-label {
316
+ color: var(--input-label-error-color);
317
+ }
318
+
319
+ .input-helper-text {
320
+ color: var(--input-label-error-color);
321
+ }
322
+ }
323
+
324
+ .input[data-state="disabled"] {
325
+ .input-label,
326
+ .input-inline-label,
327
+ .input-helper-text,
328
+ .input-affix {
329
+ color: var(--input-helper-disabled-color);
330
+ }
331
+
332
+ .input-field {
333
+ border-color: var(--input-border-color);
334
+ background-color: var(--input-surface-disabled-color);
335
+
336
+ &[data-priority="secondary"] {
337
+ background-color: transparent;
338
+ }
339
+ }
340
+ }
341
+
342
+ .input-side {
343
+ display: flex;
344
+ align-items: center;
345
+ }