@uniai-fe/uds-primitives 0.1.13 → 0.2.1

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 (114) 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 +57 -0
  14. package/src/components/dropdown/markup/foundation/Container.tsx +125 -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 +31 -0
  26. package/src/components/dropdown/types/index.ts +2 -4
  27. package/src/components/dropdown/types/props.ts +170 -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 +6 -4
  105. package/src/components/select/types/multiple.ts +57 -0
  106. package/src/components/select/types/option.ts +43 -0
  107. package/src/components/select/types/props.ts +209 -0
  108. package/src/components/select/types/trigger.ts +196 -0
  109. package/src/index.scss +3 -2
  110. package/src/components/input/markup/text/Base.tsx +0 -454
  111. package/src/components/input/utils/index.ts +0 -60
  112. package/src/components/select/styles/index.scss +0 -0
  113. /package/src/components/button/markup/{ButtonDefault.tsx → Base.tsx} +0 -0
  114. /package/src/components/form/{Provider.tsx → markup/Provider.tsx} +0 -0
@@ -1,476 +1,4 @@
1
- :root {
2
- --theme-input-height-small: var(--theme-size-medium-1);
3
- --theme-input-height-medium: var(--theme-size-medium-2);
4
- --theme-input-height-large: var(--theme-size-medium-3);
5
- --theme-input-height-tertiary: calc(var(--theme-size-medium-2) + 24px);
6
- --theme-input-padding-x: var(--spacing-padding-6);
7
- --theme-input-padding-y: var(--spacing-padding-4);
8
- --theme-input-gap: var(--spacing-gap-4);
9
- --theme-input-radius-default: var(--theme-radius-large-1);
10
- --theme-input-radius-tertiary: var(--theme-radius-large-2);
11
- --theme-input-label-color: var(--color-label-standard);
12
- --theme-input-helper-color: var(--color-label-neutral);
13
- --theme-input-helper-success-color: var(--color-success);
14
- --theme-input-helper-error-color: var(--color-error);
15
- --theme-input-helper-disabled-color: var(--color-label-disabled);
16
- --theme-input-label-accent-color: var(--color-primary-default);
17
- --theme-input-label-error-color: var(--color-error);
18
- --theme-input-placeholder-color: var(--color-label-alternative);
19
- --theme-input-text-color: var(--color-label-strong);
20
- --theme-input-border-color: var(--color-border-standard-cool-gray);
21
- --theme-input-border-width-default: 1px;
22
- --theme-input-border-width-emphasis: 1.4px;
23
- --theme-input-border-active: #99bdff;
24
- // success 상태는 파란색 보더(blue-80) 사용
25
- --theme-input-border-success: #99bdff;
26
- // error 상태는 Figma 기준 44% alpha 레드 보더 사용
27
- --theme-input-border-error: rgba(218, 29, 11, 0.44);
28
- --theme-input-border-disabled: var(--color-border-standard-cool-gray);
29
- --theme-input-border-underline-disabled: var(--color-border-assistive);
30
- --theme-input-surface: var(--color-common-100);
31
- --theme-input-surface-muted: var(--color-neutral-99);
32
- --theme-input-surface-disabled: var(--color-neutral-95);
33
- }
34
-
35
- .input {
36
- display: flex;
37
- flex-direction: column;
38
- gap: var(--spacing-gap-3);
39
- width: 100%;
40
-
41
- &[data-block="true"],
42
- &--block {
43
- width: 100%;
44
- }
45
- }
46
-
47
- .input-label {
48
- color: var(--theme-input-label-color);
49
- font-size: var(--font-label-small-size);
50
- line-height: var(--font-label-small-line-height);
51
- font-weight: var(--font-label-small-weight);
52
- }
53
-
54
- .input-label--visually-hidden {
55
- position: absolute;
56
- width: 1px;
57
- height: 1px;
58
- padding: 0;
59
- margin: -1px;
60
- overflow: hidden;
61
- clip: rect(0 0 0 0);
62
- clip-path: inset(50%);
63
- white-space: nowrap;
64
- border: 0;
65
- }
66
-
67
- .input-box {
68
- width: 100%;
69
- }
70
-
71
- .input-field {
72
- display: flex;
73
- align-items: center;
74
- width: 100%;
75
- gap: var(--theme-input-gap);
76
- border-radius: var(--theme-input-radius-default);
77
- border: var(--theme-input-border-width-default) solid
78
- var(--theme-input-border-color);
79
- background-color: var(--theme-input-surface);
80
- padding: var(--theme-input-padding-y) var(--theme-input-padding-x);
81
- min-height: var(--theme-input-height-medium);
82
- transition:
83
- border-color 0.15s ease,
84
- background-color 0.15s ease;
85
- box-sizing: border-box;
86
- outline: none;
87
- box-shadow: none;
88
-
89
- &[data-size="small"] {
90
- min-height: var(--theme-input-height-small);
91
- }
92
-
93
- &[data-size="large"] {
94
- min-height: var(--theme-input-height-large);
95
- }
96
-
97
- &[data-priority="secondary"] {
98
- border: none;
99
- border-bottom: var(--theme-input-border-width-default) solid
100
- var(--theme-input-border-color);
101
- border-radius: 0;
102
- padding-inline: 0;
103
- padding-block: var(--spacing-padding-4);
104
- background-color: transparent;
105
-
106
- &[data-state="active"],
107
- &[data-state="focused"] {
108
- border-bottom-color: var(--theme-input-border-active);
109
- border-bottom-width: var(--theme-input-border-width-emphasis);
110
- }
111
-
112
- &[data-state="success"] {
113
- border-bottom-color: var(--theme-input-border-success);
114
- border-bottom-width: var(--theme-input-border-width-emphasis);
115
- }
116
-
117
- &[data-state="error"] {
118
- border-bottom-color: var(--theme-input-border-error);
119
- border-bottom-width: var(--theme-input-border-width-emphasis);
120
- }
121
-
122
- &[data-state="disabled"] {
123
- border-bottom-color: var(--theme-input-border-underline-disabled);
124
- border-bottom-width: var(--theme-input-border-width-default);
125
- }
126
- }
127
-
128
- &[data-priority="tertiary"] {
129
- border-radius: var(--theme-input-radius-tertiary);
130
- background-color: var(--theme-input-surface);
131
- min-height: var(--theme-input-height-tertiary);
132
- row-gap: var(--spacing-gap-1);
133
- column-gap: var(--theme-input-gap);
134
- flex-wrap: wrap;
135
- align-items: center;
136
-
137
- .input-field__control {
138
- display: grid;
139
- grid-template-columns: auto minmax(0, 1fr);
140
- column-gap: var(--theme-input-gap);
141
- row-gap: var(--spacing-gap-1);
142
- align-items: center;
143
- flex: 1 1 auto;
144
- min-width: 0;
145
- }
146
-
147
- .input-inline-label {
148
- grid-column: 1 / -1;
149
- margin: 0;
150
- align-self: flex-start;
151
- }
152
-
153
- .input-element {
154
- min-height: var(--theme-size-medium-2);
155
- width: auto;
156
- flex: 1 1 auto;
157
- }
158
-
159
- .input-field__utilities {
160
- align-self: center;
161
- margin-left: 0;
162
- }
163
- }
164
-
165
- &:not([data-priority="secondary"]) {
166
- &[data-state="active"],
167
- &[data-state="focused"] {
168
- border-color: var(--theme-input-border-active);
169
- border-width: var(--theme-input-border-width-emphasis);
170
- }
171
-
172
- &[data-state="success"] {
173
- border-color: var(--theme-input-border-success);
174
- border-width: var(--theme-input-border-width-emphasis);
175
- }
176
-
177
- &[data-state="error"] {
178
- border-color: var(--theme-input-border-error);
179
- border-width: var(--theme-input-border-width-emphasis);
180
- }
181
-
182
- &[data-state="disabled"] {
183
- border-color: var(--theme-input-border-disabled);
184
- border-width: var(--theme-input-border-width-default);
185
- background-color: var(--theme-input-surface-disabled);
186
- }
187
- }
188
- }
189
-
190
- .input-element {
191
- flex: 1 1 auto;
192
- width: 100%;
193
- border: none;
194
- background: transparent;
195
- color: var(--theme-input-text-color);
196
- caret-color: var(--theme-input-text-color);
197
- font-size: var(--font-body-medium-size);
198
- line-height: var(--font-body-medium-line-height);
199
- font-weight: var(--font-body-medium-weight);
200
- letter-spacing: 0px;
201
- outline: none;
202
- box-shadow: none;
203
- min-width: 0;
204
-
205
- &::placeholder {
206
- color: var(--theme-input-placeholder-color);
207
- }
208
-
209
- &:disabled {
210
- color: var(--color-label-disabled);
211
-
212
- &::placeholder {
213
- color: var(--color-label-disabled);
214
- }
215
- }
216
-
217
- &:focus,
218
- &:focus-visible,
219
- &:focus-within {
220
- outline: none;
221
- box-shadow: none;
222
- }
223
- }
224
-
225
- .input-field__control {
226
- display: flex;
227
- align-items: center;
228
- gap: var(--theme-input-gap);
229
- flex: 1 1 auto;
230
- min-width: 0;
231
- }
232
-
233
- .input-field__utilities {
234
- display: flex;
235
- align-items: center;
236
- gap: var(--spacing-gap-2, 8px);
237
- flex-shrink: 0;
238
- margin-left: var(--spacing-gap-3, 12px);
239
-
240
- .input-affix {
241
- margin-left: 0;
242
- }
243
- }
244
-
245
- .input-inline-label {
246
- order: -2;
247
- flex-basis: 100%;
248
- font-size: var(--font-label-small-size);
249
- line-height: var(--font-label-small-line-height);
250
- color: var(--theme-input-label-color);
251
- }
252
-
253
- .input-field[data-priority="secondary"] .input-element {
254
- padding-inline: 0;
255
- }
256
-
257
- .input-field[data-priority="tertiary"] .input-element {
258
- min-height: var(--theme-size-medium-2);
259
- }
260
-
261
- .input-helper-text {
262
- color: var(--theme-input-helper-color);
263
- font-size: var(--font-label-small-size);
264
- line-height: var(--font-label-small-line-height);
265
-
266
- [data-state="error"] & {
267
- color: var(--theme-input-border-error);
268
- }
269
-
270
- // [data-state="success"] & {
271
- // color: var(--theme-input-helper-success-color);
272
- // }
273
-
274
- [data-state="disabled"] & {
275
- color: var(--theme-input-helper-disabled-color);
276
- }
277
- }
278
-
279
- .input-affix {
280
- display: flex;
281
- align-items: center;
282
- justify-content: center;
283
- min-width: 20px;
284
- color: var(--theme-input-helper-color);
285
-
286
- &--left {
287
- order: -1;
288
- margin-right: var(--spacing-gap-3);
289
- }
290
-
291
- &--right,
292
- &--clear,
293
- &--status {
294
- margin-left: var(--spacing-gap-3);
295
- }
296
-
297
- &--clear,
298
- &--status {
299
- color: var(--theme-input-text-color);
300
- }
301
-
302
- // 상태별 아이콘 컬러는 디자인 토큰으로 직접 지정한다.
303
- &--status[data-state="error"] {
304
- color: var(--color-error);
305
- }
306
-
307
- &--status[data-state="success"] {
308
- color: var(--color-primary-default);
309
- }
310
- }
311
- .input-field[data-priority="secondary"] {
312
- border-bottom-width: var(--theme-input-border-width-default);
313
-
314
- &[data-state="active"],
315
- &[data-state="focused"] {
316
- border-bottom-color: var(--theme-input-border-active);
317
- border-bottom-width: var(--theme-input-border-width-emphasis);
318
- }
319
-
320
- &[data-state="success"] {
321
- border-bottom-color: var(--theme-input-border-success);
322
- border-bottom-width: var(--theme-input-border-width-emphasis);
323
- }
324
-
325
- &[data-state="error"] {
326
- border-bottom-color: var(--theme-input-border-error);
327
- border-bottom-width: var(--theme-input-border-width-emphasis);
328
- }
329
-
330
- &[data-state="disabled"] {
331
- border-bottom-color: var(--theme-input-border-underline-disabled);
332
- border-bottom-width: var(--theme-input-border-width-default);
333
- }
334
- }
335
-
336
- .input[data-state="active"],
337
- .input[data-state="focused"],
338
- .input[data-state="success"] {
339
- .input-label,
340
- .input-inline-label {
341
- color: var(--theme-input-label-accent-color);
342
- }
343
- }
344
-
345
- .input[data-state="error"] {
346
- .input-label,
347
- .input-inline-label {
348
- color: var(--theme-input-label-error-color);
349
- }
350
-
351
- .input-helper-text {
352
- color: var(--theme-input-label-error-color);
353
- }
354
- }
355
-
356
- .input[data-state="disabled"] {
357
- .input-label,
358
- .input-inline-label,
359
- .input-helper-text,
360
- .input-affix {
361
- color: var(--theme-input-helper-disabled-color);
362
- }
363
-
364
- .input-field {
365
- border-color: var(--theme-input-border-color);
366
- background-color: var(--theme-input-surface-disabled);
367
-
368
- &[data-priority="secondary"] {
369
- background-color: transparent;
370
- }
371
- }
372
- }
373
-
374
- .input-password-toggle {
375
- border: none;
376
- background: transparent;
377
- color: var(--theme-input-label-accent-color);
378
- font-size: var(--font-label-small-size);
379
- line-height: var(--font-label-small-line-height);
380
- font-weight: var(--font-label-small-weight);
381
- padding: 0;
382
- cursor: pointer;
383
-
384
- &:disabled {
385
- color: var(--theme-input-helper-disabled-color);
386
- cursor: not-allowed;
387
- }
388
- }
389
-
390
- .input-search-icon {
391
- font-size: var(--font-label-large-size);
392
- line-height: 1;
393
- }
394
-
395
- .one-time-code {
396
- display: flex;
397
- flex-direction: column;
398
- gap: var(--spacing-gap-2);
399
- }
400
-
401
- .one-time-code__label {
402
- font-size: var(--font-label-small-size);
403
- color: var(--theme-input-label-color);
404
- }
405
-
406
- .one-time-code__fields {
407
- display: flex;
408
- gap: var(--spacing-gap-3);
409
- }
410
-
411
- .one-time-code__input {
412
- width: 44px;
413
- height: 56px;
414
- border-radius: var(--theme-input-radius-default);
415
- border: var(--theme-input-border-width-default) solid
416
- var(--theme-input-border-color);
417
- text-align: center;
418
- font-size: var(--font-heading-medium-size);
419
- font-weight: var(--font-heading-medium-weight);
420
- color: var(--theme-input-text-color);
421
-
422
- &:focus {
423
- outline: none;
424
- border-color: var(--theme-input-border-active);
425
- border-width: var(--theme-input-border-width-emphasis);
426
- }
427
- }
428
-
429
- .one-time-code__helper {
430
- font-size: var(--font-label-small-size);
431
- color: var(--theme-input-helper-color);
432
- }
433
-
434
- .email-verification,
435
- .phone-verification {
436
- display: flex;
437
- flex-direction: column;
438
- gap: var(--spacing-gap-4);
439
- }
440
-
441
- .auth-code-input__actions,
442
- .email-verification__code-actions,
443
- .phone-verification__code-actions {
444
- display: flex;
445
- align-items: center;
446
- justify-content: flex-end;
447
- gap: var(--spacing-gap-3);
448
- min-width: 0;
449
- }
450
-
451
- .auth-code-input__countdown,
452
- .email-verification__countdown,
453
- .phone-verification__countdown {
454
- display: flex;
455
- align-items: center;
456
- font-weight: 500;
457
- font-style: normal;
458
- font-size: 13px;
459
- line-height: 1em;
460
- letter-spacing: -0.0025em;
461
- color: var(--color-primary-default);
462
- flex-shrink: 0;
463
- }
464
-
465
- .button.input-utility-button {
466
- min-height: 32px;
467
- padding: var(--spacing-padding-2, 4px) var(--spacing-padding-6, 24px);
468
- border-radius: var(--shape-rounded-1, 8px);
469
-
470
- .button-label {
471
- font-size: var(--font-body-xxsmall-size);
472
- line-height: var(--font-body-xxsmall-line-height);
473
- letter-spacing: var(--font-body-xxsmall-letter-spacing);
474
- font-weight: var(--font-body-xxsmall-weight);
475
- }
476
- }
1
+ @use "./variables.scss" as inputVariables;
2
+ @use "./foundation.scss" as inputFoundation;
3
+ @use "./text.scss" as inputText;
4
+ @use "./calendar.scss" as inputCalendar;
@@ -0,0 +1,89 @@
1
+ .input-password-toggle {
2
+ width: 24px;
3
+ height: 24px;
4
+ border: none;
5
+ background: transparent;
6
+ color: var(--input-label-accent-color);
7
+ font-size: var(--font-label-small-size);
8
+ line-height: var(--font-label-small-line-height);
9
+ font-weight: var(--font-label-small-weight);
10
+ padding: 0;
11
+ cursor: pointer;
12
+
13
+ &:disabled {
14
+ color: var(--input-helper-disabled-color);
15
+ cursor: not-allowed;
16
+ }
17
+ }
18
+
19
+ .input-search-icon {
20
+ font-size: var(--font-label-large-size);
21
+ line-height: 1;
22
+ }
23
+
24
+ .one-time-code {
25
+ width: 100%;
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: var(--spacing-gap-2);
29
+ }
30
+
31
+ .one-time-code-label {
32
+ font-size: var(--font-label-small-size);
33
+ color: var(--input-label-color);
34
+ }
35
+
36
+ .one-time-code-fields {
37
+ display: flex;
38
+ gap: var(--spacing-gap-3);
39
+ }
40
+
41
+ .one-time-code-input {
42
+ width: 100%;
43
+ }
44
+
45
+ .one-time-code-helper {
46
+ font-size: var(--font-label-small-size);
47
+ color: var(--input-helper-color);
48
+ }
49
+
50
+ .email-verification,
51
+ .phone-verification {
52
+ width: 100%;
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: var(--spacing-gap-4);
56
+ }
57
+
58
+ .auth-code-input-actions {
59
+ display: flex;
60
+ align-items: center;
61
+ justify-content: flex-end;
62
+ gap: var(--spacing-gap-3);
63
+ min-width: 0;
64
+ }
65
+
66
+ .auth-code-input-countdown {
67
+ display: flex;
68
+ align-items: center;
69
+ font-weight: 500;
70
+ font-style: normal;
71
+ font-size: 13px;
72
+ line-height: 1em;
73
+ letter-spacing: -0.0025em;
74
+ color: var(--color-primary-default);
75
+ flex-shrink: 0;
76
+ }
77
+
78
+ .button.input-utility-button {
79
+ min-height: 32px;
80
+ padding: var(--spacing-padding-2, 4px) var(--spacing-padding-6, 24px);
81
+ border-radius: var(--shape-rounded-1, 8px);
82
+
83
+ .button-label {
84
+ font-size: var(--font-body-xxsmall-size);
85
+ line-height: var(--font-body-xxsmall-line-height);
86
+ letter-spacing: var(--font-body-xxsmall-letter-spacing);
87
+ font-weight: var(--font-body-xxsmall-weight);
88
+ }
89
+ }
@@ -0,0 +1,41 @@
1
+ :root {
2
+ /* Input sizing tokens; Button 변수 규칙과 동일한 prefix 패턴을 맞춘다. */
3
+ --input-default-height-small: var(--theme-size-medium-1);
4
+ --input-default-height-medium: var(--theme-size-medium-2);
5
+ --input-default-height-large: var(--theme-size-medium-3);
6
+ --input-tertiary-height-base: calc(var(--theme-size-medium-2) + 24px);
7
+ --input-default-padding-inline: var(--spacing-padding-6);
8
+ --input-default-padding-block: var(--spacing-padding-4);
9
+ --input-default-gap: var(--spacing-gap-4);
10
+ --input-default-radius-base: var(--theme-radius-large-1);
11
+ --input-tertiary-radius-base: var(--theme-radius-large-2);
12
+
13
+ /* Label/helper colors */
14
+ --input-label-color: var(--color-label-standard);
15
+ --input-label-accent-color: var(--color-primary-default);
16
+ --input-label-error-color: var(--color-error);
17
+ --input-helper-color: var(--color-label-neutral);
18
+ --input-helper-success-color: var(--color-success);
19
+ --input-helper-error-color: var(--color-error);
20
+ --input-helper-disabled-color: var(--color-label-disabled);
21
+
22
+ /* Text & placeholder colors */
23
+ --input-text-color: var(--color-label-strong);
24
+ --input-placeholder-color: var(--color-label-alternative);
25
+
26
+ /* Border tokens */
27
+ --input-border-color: var(--color-border-standard-cool-gray);
28
+ --input-border-width-default: 1px;
29
+ --input-border-width-emphasis: 1.4px;
30
+ --input-border-active-color: var(--color-blue-80);
31
+ --input-border-success-color: var(--color-blue-80);
32
+ /* error는 Figma 44% alpha */
33
+ --input-border-error-color: rgba(218, 29, 11, 0.44); // --color-feedback-error
34
+ --input-border-disabled-color: var(--color-border-standard-cool-gray);
35
+ --input-border-underline-disabled-color: var(--color-border-assistive);
36
+
37
+ /* Surface tokens */
38
+ --input-surface-color: var(--color-common-100);
39
+ --input-surface-muted-color: var(--color-neutral-99);
40
+ --input-surface-disabled-color: var(--color-neutral-95);
41
+ }