@uniai-fe/uds-primitives 0.12.1 → 0.12.2

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/styles.css CHANGED
@@ -489,25 +489,18 @@
489
489
  --input-utility-gap: var(--spacing-gap-2);
490
490
  --input-tertiary-row-gap: var(--spacing-gap-1);
491
491
  --input-tertiary-control-row-gap: var(--spacing-gap-1);
492
- --input-default-radius-base: var(--theme-radius-large-1);
492
+ --input-default-radius-small: var(--theme-radius-medium-4);
493
+ --input-default-radius-medium: var(--theme-radius-large-1);
494
+ --input-default-radius-large: var(--theme-radius-large-2);
495
+ --input-default-radius-base: var(--input-default-radius-medium);
493
496
  --input-tertiary-radius-base: var(--theme-radius-large-2);
494
497
  --input-table-radius-base: 0;
495
498
  --input-tertiary-element-min-height: 1.5em;
496
499
  --input-textarea-min-height: calc(var(--input-default-height-medium) * 2);
497
500
  --input-textarea-height: 128px;
498
- /* TextArea size token은 Input 기본 size token을 재할당해 축을 일치시킨다. */
499
- --input-textarea-radius-small: var(--input-default-radius-base);
500
- --input-textarea-radius-medium: var(--input-default-radius-base);
501
- --input-textarea-radius-large: var(--input-default-radius-base);
502
- --input-textarea-padding-inline-small: var(--spacing-padding-6);
503
- --input-textarea-padding-inline-medium: var(--spacing-padding-6);
504
- --input-textarea-padding-inline-large: var(--spacing-padding-6);
505
501
  --input-textarea-padding-block-small: var(--spacing-padding-5);
506
502
  --input-textarea-padding-block-medium: var(--spacing-padding-5);
507
503
  --input-textarea-padding-block-large: var(--spacing-padding-6);
508
- --input-textarea-gap-small: var(--input-default-gap);
509
- --input-textarea-gap-medium: var(--input-default-gap);
510
- --input-textarea-gap-large: var(--input-default-gap);
511
504
  --input-textarea-counter-font-size: var(--font-label-medium-size);
512
505
  --input-textarea-counter-line-height: var(--font-label-medium-line-height);
513
506
  --input-textarea-counter-font-weight: var(--font-label-medium-weight);
@@ -588,33 +581,24 @@
588
581
  --input-status-success-color: var(--color-primary-default);
589
582
  /* TimePicker tokens */
590
583
  --input-time-width: 100%;
591
- --input-time-height-small: var(--input-default-height-small);
592
- --input-time-height-medium: var(--input-default-height-medium);
593
- --input-time-height-large: var(--input-default-height-large);
594
- --input-time-tertiary-height: var(--input-tertiary-height-base);
595
- --input-time-padding-inline: var(--input-default-padding-inline);
596
- --input-time-padding-block: var(--input-default-padding-block);
597
- --input-time-secondary-padding-block: var(--input-secondary-padding-block);
598
584
  --input-time-table-padding-inline: var(--spacing-padding-4);
599
- --input-time-radius: var(--theme-radius-medium-3);
600
- --input-time-tertiary-radius: var(--input-tertiary-radius-base);
601
- --input-time-table-radius: var(--input-table-radius-base);
585
+ --input-time-radius: var(--input-default-radius-medium);
602
586
  --input-time-field-gap: 0;
603
- --input-time-field-width: 2.7ch;
604
- --input-time-field-middle-width: 2.2ch;
605
587
  --input-time-period-field-width: 4.2ch;
606
588
  --input-time-field-height: 100%;
607
589
  --input-time-icon-size: 24px;
608
590
  --input-time-stepper-width: 28px;
609
- --input-time-stepper-button-height: 28px;
591
+ --input-time-stepper-button-height: calc(
592
+ var(--input-default-height-medium) / 2
593
+ );
610
594
  --input-time-stepper-radius: var(--theme-radius-medium-3);
611
595
  --input-time-stepper-icon-size: 16px;
612
- --input-time-text-color: var(--input-text-color);
613
- --input-time-text-disabled-color: var(--input-text-disabled-color);
614
- --input-time-placeholder-color: var(--input-placeholder-color);
596
+ --input-time-text-color: var(--color-cool-gray-30);
597
+ --input-time-text-disabled-color: var(--color-cool-gray-60);
598
+ --input-time-placeholder-color: var(--color-cool-gray-40);
615
599
  --input-time-separator-color: var(--color-label-alternative);
616
- --input-time-icon-color: var(--color-label-alternative);
617
- --input-time-icon-disabled-color: var(--color-label-disabled);
600
+ --input-time-icon-color: var(--color-cool-gray-25);
601
+ --input-time-icon-disabled-color: var(--color-cool-gray-45);
618
602
  --input-time-font-size: var(--input-text-medium-size);
619
603
  --input-time-line-height: var(--input-text-medium-line-height);
620
604
  --input-time-font-weight: var(--input-text-medium-weight);
@@ -639,6 +623,7 @@
639
623
  --input-time-border-color: var(--input-border-color);
640
624
  --input-time-border-width: var(--input-border-width-default);
641
625
  --input-time-border-width-emphasis: var(--input-border-width-emphasis);
626
+ --input-time-border-width-focus: 2px;
642
627
  --input-time-border-active-color: var(--input-border-active-color);
643
628
  --input-time-border-success-color: var(--input-border-success-color);
644
629
  --input-time-border-error-color: var(--input-border-error-color);
@@ -646,7 +631,7 @@
646
631
  --input-time-table-border-color: var(--input-border-table-default-color);
647
632
  --input-time-surface-color: var(--input-surface-color);
648
633
  --input-time-secondary-surface-color: var(--input-secondary-surface-color);
649
- --input-time-surface-disabled-color: var(--input-surface-disabled-color);
634
+ --input-time-surface-disabled-color: var(--color-cool-gray-85);
650
635
  --input-time-table-surface-color: var(--input-table-surface-color);
651
636
  --theme-navigation-height: 86px;
652
637
  --theme-navigation-padding-inline: 32px;
@@ -694,23 +679,12 @@
694
679
  --select-flex: 0 1 auto;
695
680
  --select-layout-gap: var(--spacing-gap-2);
696
681
  --select-value-gap: var(--spacing-gap-2);
697
- --select-primary-height-small: var(--input-default-height-small);
698
- --select-primary-height-medium: var(--input-default-height-medium);
699
- --select-primary-height-large: var(--input-default-height-large);
700
682
  --select-primary-height-xsmall: 24px;
701
- --select-primary-radius-small: var(--input-default-radius-base);
702
- --select-primary-radius-medium: var(--input-default-radius-base);
703
- --select-primary-radius-large: var(--input-default-radius-base);
704
683
  --select-primary-radius-xsmall: var(--theme-radius-medium-2);
705
- --select-primary-padding-inline: var(--input-default-padding-inline);
706
- --select-primary-padding-block: var(--input-default-padding-block);
707
- --select-primary-gap-inline: var(--input-default-gap);
708
684
  --select-primary-padding-inline-start-xsmall: var(--spacing-padding-4);
709
685
  --select-primary-padding-inline-end-xsmall: var(--spacing-padding-3);
710
686
  --select-primary-padding-block-xsmall: var(--spacing-padding-2);
711
687
  --select-primary-gap-inline-xsmall: var(--spacing-gap-1);
712
- --select-primary-border-width-default: var(--input-border-width-default);
713
- --select-primary-border-width-focus: var(--input-border-width-emphasis);
714
688
  --select-secondary-radius: var(--theme-radius-medium-1);
715
689
  --select-secondary-padding-inline: var(--spacing-padding-4);
716
690
  --select-secondary-padding-block: var(--spacing-padding-2);
@@ -4471,6 +4445,10 @@ figure.chip {
4471
4445
  font-weight: var(--info-box-body-font-weight);
4472
4446
  }
4473
4447
 
4448
+ .input-time {
4449
+ --input-time-field-width: 1.9em;
4450
+ }
4451
+
4474
4452
  .input {
4475
4453
  display: flex;
4476
4454
  flex-direction: column;
@@ -4555,6 +4533,7 @@ figure.chip {
4555
4533
  }
4556
4534
  .input-field:where([data-size="small"]) {
4557
4535
  min-height: var(--input-default-height-small);
4536
+ border-radius: var(--input-default-radius-small);
4558
4537
  --input-font-size: var(--input-text-small-size);
4559
4538
  --input-line-height: var(--input-text-small-line-height);
4560
4539
  --input-font-weight: var(--input-text-small-weight);
@@ -4562,6 +4541,7 @@ figure.chip {
4562
4541
  }
4563
4542
  .input-field:where([data-size="large"]) {
4564
4543
  min-height: var(--input-default-height-large);
4544
+ border-radius: var(--input-default-radius-large);
4565
4545
  --input-font-size: var(--input-text-large-size);
4566
4546
  --input-line-height: var(--input-text-large-line-height);
4567
4547
  --input-font-weight: var(--input-text-large-weight);
@@ -4730,30 +4710,23 @@ figure.chip {
4730
4710
  }
4731
4711
 
4732
4712
  .input:where([data-input-type="textarea"]) .input-field {
4733
- --input-textarea-radius: var(--input-textarea-radius-medium);
4734
- --input-textarea-padding-inline: var(--input-textarea-padding-inline-medium);
4735
4713
  --input-textarea-padding-block: var(--input-textarea-padding-block-medium);
4736
- --input-textarea-gap: var(--input-textarea-gap-medium);
4737
4714
  align-items: stretch;
4738
4715
  flex-direction: column;
4739
- gap: var(--input-textarea-gap);
4740
- border-radius: var(--input-textarea-radius);
4716
+ gap: var(--input-default-gap);
4717
+ border-radius: var(--input-default-radius-medium);
4741
4718
  padding: var(--input-textarea-padding-block)
4742
- var(--input-textarea-padding-inline);
4719
+ var(--input-default-padding-inline);
4743
4720
  }
4744
4721
  .input:where([data-input-type="textarea"])
4745
4722
  .input-field:where([data-size="small"]) {
4746
- --input-textarea-radius: var(--input-textarea-radius-small);
4747
- --input-textarea-padding-inline: var(--input-textarea-padding-inline-small);
4748
4723
  --input-textarea-padding-block: var(--input-textarea-padding-block-small);
4749
- --input-textarea-gap: var(--input-textarea-gap-small);
4724
+ border-radius: var(--input-default-radius-small);
4750
4725
  }
4751
4726
  .input:where([data-input-type="textarea"])
4752
4727
  .input-field:where([data-size="large"]) {
4753
- --input-textarea-radius: var(--input-textarea-radius-large);
4754
- --input-textarea-padding-inline: var(--input-textarea-padding-inline-large);
4755
4728
  --input-textarea-padding-block: var(--input-textarea-padding-block-large);
4756
- --input-textarea-gap: var(--input-textarea-gap-large);
4729
+ border-radius: var(--input-default-radius-large);
4757
4730
  }
4758
4731
 
4759
4732
  .input:where([data-input-type="textarea"]) {
@@ -5174,11 +5147,14 @@ figure.chip {
5174
5147
  align-items: center;
5175
5148
  flex: 1 1 auto;
5176
5149
  min-width: 0;
5177
- min-height: var(--input-time-height-medium);
5178
- padding: var(--input-time-padding-block) var(--input-time-padding-inline);
5150
+ height: var(--input-default-height-medium);
5151
+ min-height: var(--input-default-height-medium);
5152
+ padding: var(--input-default-padding-block)
5153
+ var(--input-default-padding-inline);
5179
5154
  border: var(--input-time-border-width) solid var(--input-time-border-color);
5180
5155
  border-radius: var(--input-time-radius);
5181
5156
  background-color: var(--input-time-surface-color);
5157
+ box-sizing: border-box;
5182
5158
  }
5183
5159
 
5184
5160
  .input-time-fields-group {
@@ -5211,16 +5187,6 @@ figure.chip {
5211
5187
  letter-spacing: var(--input-time-letter-spacing);
5212
5188
  text-align: center;
5213
5189
  }
5214
- .input-time-field:first-child {
5215
- text-align: right;
5216
- }
5217
- .input-time-field:last-of-type {
5218
- text-align: left;
5219
- }
5220
- .input-time-field:not(:first-child):not(:last-of-type) {
5221
- width: var(--input-time-field-middle-width);
5222
- min-width: var(--input-time-field-middle-width);
5223
- }
5224
5190
  .input-time-field::placeholder {
5225
5191
  color: var(--input-time-placeholder-color);
5226
5192
  }
@@ -5254,8 +5220,8 @@ figure.chip {
5254
5220
  }
5255
5221
  .input-time-icon-button svg {
5256
5222
  display: block;
5257
- width: 100%;
5258
- height: 100%;
5223
+ width: var(--input-time-icon-size);
5224
+ height: var(--input-time-icon-size);
5259
5225
  }
5260
5226
 
5261
5227
  .input-time-stepper {
@@ -5278,6 +5244,7 @@ figure.chip {
5278
5244
  background-color: var(--input-time-surface-color);
5279
5245
  color: var(--input-time-text-color);
5280
5246
  cursor: pointer;
5247
+ box-sizing: border-box;
5281
5248
  }
5282
5249
  .input-time-stepper-button:first-child {
5283
5250
  border-radius: 0 var(--input-time-stepper-radius) 0 0;
@@ -5296,22 +5263,55 @@ figure.chip {
5296
5263
  border-radius: var(--input-time-radius) 0 0 var(--input-time-radius);
5297
5264
  }
5298
5265
 
5299
- .input-time:where([data-size="small"]) .input-time-trigger-input {
5300
- min-height: var(--input-time-height-small);
5266
+ .input-time:where([data-size="small"]) {
5267
+ --input-time-radius: var(--input-default-radius-small);
5268
+ --input-time-stepper-button-height: calc(
5269
+ var(--input-default-height-small) / 2
5270
+ );
5271
+ --input-time-font-size: var(--input-time-text-small-size);
5272
+ --input-time-line-height: var(--input-time-text-small-line-height);
5273
+ --input-time-font-weight: var(--input-time-text-small-weight);
5274
+ --input-time-letter-spacing: var(--input-time-text-small-letter-spacing);
5301
5275
  }
5302
- .input-time:where([data-size="small"]) .input-time-field {
5303
- font-size: var(--input-time-text-small-size);
5304
- line-height: var(--input-time-text-small-line-height);
5305
- font-weight: var(--input-time-text-small-weight);
5276
+ .input-time:where([data-size="small"]) .input-time-trigger-input {
5277
+ height: var(--input-default-height-small);
5278
+ min-height: var(--input-default-height-small);
5306
5279
  }
5307
5280
 
5281
+ .input-time:where([data-size="large"]) {
5282
+ --input-time-radius: var(--input-default-radius-large);
5283
+ --input-time-stepper-button-height: calc(
5284
+ var(--input-default-height-large) / 2
5285
+ );
5286
+ --input-time-font-size: var(--input-time-text-large-size);
5287
+ --input-time-line-height: var(--input-time-text-large-line-height);
5288
+ --input-time-font-weight: var(--input-time-text-large-weight);
5289
+ --input-time-letter-spacing: var(--input-time-text-large-letter-spacing);
5290
+ }
5308
5291
  .input-time:where([data-size="large"]) .input-time-trigger-input {
5309
- min-height: var(--input-time-height-large);
5292
+ height: var(--input-default-height-large);
5293
+ min-height: var(--input-default-height-large);
5294
+ }
5295
+
5296
+ .input-time:where([data-state="active"]) .input-time-field::placeholder,
5297
+ .input-time:where([data-state="focused"]) .input-time-field::placeholder {
5298
+ color: var(--input-time-text-color);
5299
+ }
5300
+
5301
+ .input-time:where([data-priority="primary"][data-state="focused"])
5302
+ .input-time-trigger-input,
5303
+ .input-time:where([data-priority="primary"][data-state="focused"])
5304
+ .input-time-stepper-button {
5305
+ border-color: var(--input-time-border-active-color);
5306
+ border-width: var(--input-time-border-width-focus);
5307
+ }
5308
+ .input-time:where([data-priority="primary"][data-state="focused"])
5309
+ .input-time-stepper-button {
5310
+ border-left: 0;
5310
5311
  }
5311
- .input-time:where([data-size="large"]) .input-time-field {
5312
- font-size: var(--input-time-text-large-size);
5313
- line-height: var(--input-time-text-large-line-height);
5314
- font-weight: var(--input-time-text-large-weight);
5312
+ .input-time:where([data-priority="primary"][data-state="focused"])
5313
+ .input-time-stepper-button:last-child {
5314
+ border-top: 0;
5315
5315
  }
5316
5316
 
5317
5317
  .input-time:where([data-priority="secondary"]) .input-time-trigger-input {
@@ -5324,8 +5324,8 @@ figure.chip {
5324
5324
  }
5325
5325
 
5326
5326
  .input-time:where([data-priority="tertiary"]) .input-time-trigger-input {
5327
- min-height: var(--input-time-tertiary-height);
5328
- border-radius: var(--input-time-tertiary-radius);
5327
+ min-height: var(--input-tertiary-height-base);
5328
+ border-radius: var(--input-tertiary-radius-base);
5329
5329
  }
5330
5330
 
5331
5331
  .input-time:where([data-priority="table"]) {
@@ -5333,11 +5333,11 @@ figure.chip {
5333
5333
  height: 100%;
5334
5334
  }
5335
5335
  .input-time:where([data-priority="table"]) .input-time-trigger-input {
5336
- min-height: var(--input-time-height-small);
5336
+ min-height: var(--input-default-height-small);
5337
5337
  height: 100%;
5338
5338
  padding-inline: var(--input-time-table-padding-inline);
5339
5339
  border-color: var(--input-time-table-border-color);
5340
- border-radius: var(--input-time-table-radius);
5340
+ border-radius: var(--input-table-radius-base);
5341
5341
  background-color: var(--input-time-table-surface-color);
5342
5342
  }
5343
5343
  .input-time:where([data-priority="table"]) .input-time-field {
@@ -5360,10 +5360,14 @@ figure.chip {
5360
5360
  border-color: var(--input-time-border-disabled-color);
5361
5361
  background-color: var(--input-time-surface-disabled-color);
5362
5362
  }
5363
- .input-time:where([data-state="disabled"]) .input-time-field {
5363
+ .input-time:where([data-state="disabled"]) .input-time-field,
5364
+ .input-time:where([data-state="disabled"]) .input-time-period-field {
5364
5365
  color: var(--input-time-text-disabled-color);
5365
5366
  cursor: default;
5366
5367
  }
5368
+ .input-time:where([data-state="disabled"]) .input-time-field::placeholder {
5369
+ color: var(--input-time-text-disabled-color);
5370
+ }
5367
5371
  .input-time:where([data-state="disabled"]) .input-time-icon-button {
5368
5372
  color: var(--input-time-icon-disabled-color);
5369
5373
  cursor: default;
@@ -6085,7 +6089,7 @@ figure.chip {
6085
6089
  color: var(--segmented-label-active-color);
6086
6090
  }
6087
6091
 
6088
- /* Select tokens mapped to Input primary tokens for visual parity */
6092
+ /* Select-specific tokens. Primary small/medium/large geometry consumes Input.Base directly. */
6089
6093
 
6090
6094
  .select {
6091
6095
  display: flex;
@@ -6138,13 +6142,13 @@ figure.chip {
6138
6142
  display: flex;
6139
6143
  width: 100%;
6140
6144
  align-items: center;
6141
- gap: var(--select-primary-gap-inline);
6142
- min-height: var(--select-primary-height-medium);
6143
- padding: var(--select-primary-padding-block)
6144
- var(--select-primary-padding-inline);
6145
- border: var(--select-primary-border-width-default) solid
6145
+ gap: var(--input-default-gap);
6146
+ min-height: var(--input-default-height-medium);
6147
+ padding: var(--input-default-padding-block)
6148
+ var(--input-default-padding-inline);
6149
+ border: var(--input-border-width-default) solid
6146
6150
  var(--select-primary-color-border);
6147
- border-radius: var(--select-primary-radius-medium);
6151
+ border-radius: var(--input-default-radius-medium);
6148
6152
  background-color: var(--select-primary-color-surface);
6149
6153
  cursor: pointer;
6150
6154
  transition:
@@ -6154,8 +6158,8 @@ figure.chip {
6154
6158
  text-align: left;
6155
6159
  }
6156
6160
  .select-button:where([data-size="small"]) {
6157
- min-height: var(--select-primary-height-small);
6158
- border-radius: var(--select-primary-radius-small);
6161
+ min-height: var(--input-default-height-small);
6162
+ border-radius: var(--input-default-radius-small);
6159
6163
  }
6160
6164
  .select-button:where([data-size="xsmall"]) {
6161
6165
  min-height: var(--select-primary-height-xsmall);
@@ -6167,8 +6171,8 @@ figure.chip {
6167
6171
  var(--select-primary-padding-inline-start-xsmall);
6168
6172
  }
6169
6173
  .select-button:where([data-size="large"]) {
6170
- min-height: var(--select-primary-height-large);
6171
- border-radius: var(--select-primary-radius-large);
6174
+ min-height: var(--input-default-height-large);
6175
+ border-radius: var(--input-default-radius-large);
6172
6176
  }
6173
6177
  .select-button:where([data-multiple="true"]) {
6174
6178
  align-items: center;
@@ -6238,7 +6242,7 @@ figure.chip {
6238
6242
  .select-button:where(:not([data-priority="secondary"])):focus-visible,
6239
6243
  .select-button:where(:not([data-priority="secondary"])):focus-within {
6240
6244
  border-color: var(--select-primary-color-border-focused);
6241
- border-width: var(--select-primary-border-width-focus);
6245
+ border-width: var(--input-border-width-emphasis);
6242
6246
  --select-icon-fill: var(--select-icon-color-focused);
6243
6247
  }
6244
6248
  .select-button:where([data-priority="table"]):where([data-state="focused"]),
@@ -6246,7 +6250,7 @@ figure.chip {
6246
6250
  .select-button:where([data-priority="table"]):focus-visible,
6247
6251
  .select-button:where([data-priority="table"]):focus-within {
6248
6252
  border-color: var(--select-table-border-focus-color);
6249
- border-width: var(--select-primary-border-width-focus);
6253
+ border-width: var(--input-border-width-emphasis);
6250
6254
  --select-icon-fill: var(--select-table-icon-color-focused);
6251
6255
  }
6252
6256
  .select-button:where(:not([data-priority="secondary"])):where(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-primitives",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "UNIAI Design System; Primitives Components Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -90,8 +90,8 @@
90
90
  "@uniai-fe/eslint-config": "0.4.2",
91
91
  "@uniai-fe/next-devkit": "0.4.0",
92
92
  "@uniai-fe/tsconfig": "0.2.0",
93
- "@uniai-fe/util-functions": "0.4.3",
94
- "@uniai-fe/uds-foundation": "0.5.0"
93
+ "@uniai-fe/uds-foundation": "0.5.0",
94
+ "@uniai-fe/util-functions": "0.4.3"
95
95
  },
96
96
  "scripts": {
97
97
  "check:pre-commit": "pnpm --dir ../../.. run check:pre-commit",
@@ -22,10 +22,30 @@ import {
22
22
  stepTimeValue,
23
23
  toDisplayHour,
24
24
  } from "../../../time-picker/utils";
25
- import ClockIcon from "../../img/clock.svg";
26
25
  import type { InputTimeDraft, InputTimeTemplateProps } from "../../types";
27
26
  import InputTimeTrigger from "./Trigger";
28
27
 
28
+ const defaultClockIcon = (
29
+ <svg
30
+ width="24"
31
+ height="24"
32
+ viewBox="0 0 24 24"
33
+ fill="none"
34
+ aria-hidden="true"
35
+ >
36
+ <path
37
+ d="M12 7.2002C12.4418 7.2002 12.7998 7.55817 12.7998 8V11.8213L15.3965 13.3057C15.78 13.5248 15.9134 14.0129 15.6943 14.3965C15.4752 14.78 14.9871 14.9134 14.6035 14.6943L11.6035 12.9805C11.3544 12.8381 11.2003 12.5731 11.2002 12.2861V8C11.2002 7.55817 11.5582 7.2002 12 7.2002Z"
38
+ fill="currentColor"
39
+ />
40
+ <path
41
+ fillRule="evenodd"
42
+ clipRule="evenodd"
43
+ d="M12 2.2002C17.4124 2.2002 21.7998 6.58761 21.7998 12C21.7998 17.4124 17.4124 21.7998 12 21.7998C6.58761 21.7998 2.2002 17.4124 2.2002 12C2.2002 6.58761 6.58761 2.2002 12 2.2002ZM12 3.7998C7.47126 3.7998 3.7998 7.47126 3.7998 12C3.7998 16.5287 7.47126 20.2002 12 20.2002C16.5287 20.2002 20.2002 16.5287 20.2002 12C20.2002 7.47126 16.5287 3.7998 12 3.7998Z"
44
+ fill="currentColor"
45
+ />
46
+ </svg>
47
+ );
48
+
29
49
  const getInputTimeDraft = (
30
50
  value: string,
31
51
  format: "12h" | "24h",
@@ -122,13 +142,12 @@ const InputTimeTemplate = forwardRef<HTMLDivElement, InputTimeTemplateProps>(
122
142
 
123
143
  const isDisabled =
124
144
  disabled || stateProp === "disabled" || stateProp === "loading";
125
- const visualState =
126
- priority === "tertiary"
127
- ? isDisabled
128
- ? "disabled"
129
- : "default"
130
- : !isDisabled && activeUnit
131
- ? "active"
145
+ const visualState = isDisabled
146
+ ? "disabled"
147
+ : priority === "tertiary"
148
+ ? "default"
149
+ : activeUnit
150
+ ? "focused"
132
151
  : stateProp;
133
152
  const resolvedIconPosition =
134
153
  iconPosition ?? (priority === "table" ? "left" : "right");
@@ -343,9 +362,7 @@ const InputTimeTemplate = forwardRef<HTMLDivElement, InputTimeTemplateProps>(
343
362
  withSeconds={withSeconds}
344
363
  disabled={Boolean(isDisabled)}
345
364
  readOnly={readOnly}
346
- icon={
347
- icon === undefined ? <ClockIcon aria-hidden="true" /> : icon
348
- }
365
+ icon={icon === undefined ? defaultClockIcon : icon}
349
366
  iconPosition={resolvedIconPosition}
350
367
  iconLabel={iconLabel}
351
368
  hoursInputLabel={hoursInputLabel}
@@ -44,6 +44,7 @@ const InputTimeTrigger = forwardRef<HTMLDivElement, InputTimeTriggerProps>(
44
44
  onStep,
45
45
  onRootBlur,
46
46
  className,
47
+ onClick: onPopupTriggerClick,
47
48
  ...restProps
48
49
  },
49
50
  ref,
@@ -71,6 +72,15 @@ const InputTimeTrigger = forwardRef<HTMLDivElement, InputTimeTriggerProps>(
71
72
  const onClockClick = () => {
72
73
  hoursRef.current?.focus();
73
74
  };
75
+ // PopOver.Trigger가 주입한 click은 clock button에서만 popup toggle로 위임한다.
76
+ const onRootClick = (event: MouseEvent<HTMLDivElement>) => {
77
+ if (
78
+ event.target instanceof Element &&
79
+ event.target.closest(".input-time-icon-button")
80
+ ) {
81
+ onPopupTriggerClick?.(event);
82
+ }
83
+ };
74
84
 
75
85
  return (
76
86
  <div
@@ -84,6 +94,7 @@ const InputTimeTrigger = forwardRef<HTMLDivElement, InputTimeTriggerProps>(
84
94
  data-active-unit={activeUnit ?? undefined}
85
95
  data-icon-position={iconPosition}
86
96
  onBlur={onRootBlur}
97
+ onClick={onRootClick}
87
98
  >
88
99
  <div className="input-time-trigger-input">
89
100
  {iconPosition === "left" ? (
@@ -89,6 +89,7 @@
89
89
 
90
90
  &:where([data-size="small"]) {
91
91
  min-height: var(--input-default-height-small);
92
+ border-radius: var(--input-default-radius-small);
92
93
  // Figma small 규격(40px/15px/1.4/0.2px)을 size token으로 고정한다.
93
94
  --input-font-size: var(--input-text-small-size);
94
95
  --input-line-height: var(--input-text-small-line-height);
@@ -98,6 +99,7 @@
98
99
 
99
100
  &:where([data-size="large"]) {
100
101
  min-height: var(--input-default-height-large);
102
+ border-radius: var(--input-default-radius-large);
101
103
  // Figma large 규격(56px/19px)을 size token으로 고정한다.
102
104
  --input-font-size: var(--input-text-large-size);
103
105
  --input-line-height: var(--input-text-large-line-height);
@@ -299,30 +301,22 @@
299
301
  }
300
302
 
301
303
  .input:where([data-input-type="textarea"]) .input-field {
302
- // TextArea는 size별로 radius/spacing을 분기해 input과 동일한 스케일 감각을 유지한다.
303
- --input-textarea-radius: var(--input-textarea-radius-medium);
304
- --input-textarea-padding-inline: var(--input-textarea-padding-inline-medium);
305
304
  --input-textarea-padding-block: var(--input-textarea-padding-block-medium);
306
- --input-textarea-gap: var(--input-textarea-gap-medium);
307
305
  align-items: stretch;
308
306
  flex-direction: column;
309
- gap: var(--input-textarea-gap);
310
- border-radius: var(--input-textarea-radius);
307
+ gap: var(--input-default-gap);
308
+ border-radius: var(--input-default-radius-medium);
311
309
  padding: var(--input-textarea-padding-block)
312
- var(--input-textarea-padding-inline);
310
+ var(--input-default-padding-inline);
313
311
 
314
312
  &:where([data-size="small"]) {
315
- --input-textarea-radius: var(--input-textarea-radius-small);
316
- --input-textarea-padding-inline: var(--input-textarea-padding-inline-small);
317
313
  --input-textarea-padding-block: var(--input-textarea-padding-block-small);
318
- --input-textarea-gap: var(--input-textarea-gap-small);
314
+ border-radius: var(--input-default-radius-small);
319
315
  }
320
316
 
321
317
  &:where([data-size="large"]) {
322
- --input-textarea-radius: var(--input-textarea-radius-large);
323
- --input-textarea-padding-inline: var(--input-textarea-padding-inline-large);
324
318
  --input-textarea-padding-block: var(--input-textarea-padding-block-large);
325
- --input-textarea-gap: var(--input-textarea-gap-large);
319
+ border-radius: var(--input-default-radius-large);
326
320
  }
327
321
  }
328
322
 
@@ -31,11 +31,14 @@
31
31
  align-items: center;
32
32
  flex: 1 1 auto;
33
33
  min-width: 0;
34
- min-height: var(--input-time-height-medium);
35
- padding: var(--input-time-padding-block) var(--input-time-padding-inline);
34
+ height: var(--input-default-height-medium);
35
+ min-height: var(--input-default-height-medium);
36
+ padding: var(--input-default-padding-block)
37
+ var(--input-default-padding-inline);
36
38
  border: var(--input-time-border-width) solid var(--input-time-border-color);
37
39
  border-radius: var(--input-time-radius);
38
40
  background-color: var(--input-time-surface-color);
41
+ box-sizing: border-box;
39
42
  }
40
43
 
41
44
  .input-time-fields-group {
@@ -69,19 +72,6 @@
69
72
  letter-spacing: var(--input-time-letter-spacing);
70
73
  text-align: center;
71
74
 
72
- &:first-child {
73
- text-align: right;
74
- }
75
-
76
- &:last-of-type {
77
- text-align: left;
78
- }
79
-
80
- &:not(:first-child):not(:last-of-type) {
81
- width: var(--input-time-field-middle-width);
82
- min-width: var(--input-time-field-middle-width);
83
- }
84
-
85
75
  &::placeholder {
86
76
  color: var(--input-time-placeholder-color);
87
77
  }
@@ -116,8 +106,8 @@
116
106
 
117
107
  svg {
118
108
  display: block;
119
- width: 100%;
120
- height: 100%;
109
+ width: var(--input-time-icon-size);
110
+ height: var(--input-time-icon-size);
121
111
  }
122
112
  }
123
113
 
@@ -141,6 +131,7 @@
141
131
  background-color: var(--input-time-surface-color);
142
132
  color: var(--input-time-text-color);
143
133
  cursor: pointer;
134
+ box-sizing: border-box;
144
135
 
145
136
  &:first-child {
146
137
  border-radius: 0 var(--input-time-stepper-radius) 0 0;
@@ -163,26 +154,57 @@
163
154
  }
164
155
 
165
156
  .input-time:where([data-size="small"]) {
166
- .input-time-trigger-input {
167
- min-height: var(--input-time-height-small);
168
- }
157
+ --input-time-radius: var(--input-default-radius-small);
158
+ --input-time-stepper-button-height: calc(
159
+ var(--input-default-height-small) / 2
160
+ );
161
+ --input-time-font-size: var(--input-time-text-small-size);
162
+ --input-time-line-height: var(--input-time-text-small-line-height);
163
+ --input-time-font-weight: var(--input-time-text-small-weight);
164
+ --input-time-letter-spacing: var(--input-time-text-small-letter-spacing);
169
165
 
170
- .input-time-field {
171
- font-size: var(--input-time-text-small-size);
172
- line-height: var(--input-time-text-small-line-height);
173
- font-weight: var(--input-time-text-small-weight);
166
+ .input-time-trigger-input {
167
+ height: var(--input-default-height-small);
168
+ min-height: var(--input-default-height-small);
174
169
  }
175
170
  }
176
171
 
177
172
  .input-time:where([data-size="large"]) {
173
+ --input-time-radius: var(--input-default-radius-large);
174
+ --input-time-stepper-button-height: calc(
175
+ var(--input-default-height-large) / 2
176
+ );
177
+ --input-time-font-size: var(--input-time-text-large-size);
178
+ --input-time-line-height: var(--input-time-text-large-line-height);
179
+ --input-time-font-weight: var(--input-time-text-large-weight);
180
+ --input-time-letter-spacing: var(--input-time-text-large-letter-spacing);
181
+
178
182
  .input-time-trigger-input {
179
- min-height: var(--input-time-height-large);
183
+ height: var(--input-default-height-large);
184
+ min-height: var(--input-default-height-large);
180
185
  }
186
+ }
181
187
 
182
- .input-time-field {
183
- font-size: var(--input-time-text-large-size);
184
- line-height: var(--input-time-text-large-line-height);
185
- font-weight: var(--input-time-text-large-weight);
188
+ .input-time:where([data-state="active"]),
189
+ .input-time:where([data-state="focused"]) {
190
+ .input-time-field::placeholder {
191
+ color: var(--input-time-text-color);
192
+ }
193
+ }
194
+
195
+ .input-time:where([data-priority="primary"][data-state="focused"]) {
196
+ .input-time-trigger-input,
197
+ .input-time-stepper-button {
198
+ border-color: var(--input-time-border-active-color);
199
+ border-width: var(--input-time-border-width-focus);
200
+ }
201
+
202
+ .input-time-stepper-button {
203
+ border-left: 0;
204
+
205
+ &:last-child {
206
+ border-top: 0;
207
+ }
186
208
  }
187
209
  }
188
210
 
@@ -199,8 +221,8 @@
199
221
 
200
222
  .input-time:where([data-priority="tertiary"]) {
201
223
  .input-time-trigger-input {
202
- min-height: var(--input-time-tertiary-height);
203
- border-radius: var(--input-time-tertiary-radius);
224
+ min-height: var(--input-tertiary-height-base);
225
+ border-radius: var(--input-tertiary-radius-base);
204
226
  }
205
227
  }
206
228
 
@@ -209,11 +231,11 @@
209
231
  height: 100%;
210
232
 
211
233
  .input-time-trigger-input {
212
- min-height: var(--input-time-height-small);
234
+ min-height: var(--input-default-height-small);
213
235
  height: 100%;
214
236
  padding-inline: var(--input-time-table-padding-inline);
215
237
  border-color: var(--input-time-table-border-color);
216
- border-radius: var(--input-time-table-radius);
238
+ border-radius: var(--input-table-radius-base);
217
239
  background-color: var(--input-time-table-surface-color);
218
240
  }
219
241
 
@@ -244,11 +266,16 @@
244
266
  background-color: var(--input-time-surface-disabled-color);
245
267
  }
246
268
 
247
- .input-time-field {
269
+ .input-time-field,
270
+ .input-time-period-field {
248
271
  color: var(--input-time-text-disabled-color);
249
272
  cursor: default;
250
273
  }
251
274
 
275
+ .input-time-field::placeholder {
276
+ color: var(--input-time-text-disabled-color);
277
+ }
278
+
252
279
  .input-time-icon-button {
253
280
  color: var(--input-time-icon-disabled-color);
254
281
  cursor: default;
@@ -17,25 +17,18 @@
17
17
  --input-utility-gap: var(--spacing-gap-2);
18
18
  --input-tertiary-row-gap: var(--spacing-gap-1);
19
19
  --input-tertiary-control-row-gap: var(--spacing-gap-1);
20
- --input-default-radius-base: var(--theme-radius-large-1);
20
+ --input-default-radius-small: var(--theme-radius-medium-4);
21
+ --input-default-radius-medium: var(--theme-radius-large-1);
22
+ --input-default-radius-large: var(--theme-radius-large-2);
23
+ --input-default-radius-base: var(--input-default-radius-medium);
21
24
  --input-tertiary-radius-base: var(--theme-radius-large-2);
22
25
  --input-table-radius-base: 0;
23
26
  --input-tertiary-element-min-height: 1.5em;
24
27
  --input-textarea-min-height: calc(var(--input-default-height-medium) * 2);
25
28
  --input-textarea-height: 128px;
26
- /* TextArea size token은 Input 기본 size token을 재할당해 축을 일치시킨다. */
27
- --input-textarea-radius-small: var(--input-default-radius-base);
28
- --input-textarea-radius-medium: var(--input-default-radius-base);
29
- --input-textarea-radius-large: var(--input-default-radius-base);
30
- --input-textarea-padding-inline-small: var(--spacing-padding-6);
31
- --input-textarea-padding-inline-medium: var(--spacing-padding-6);
32
- --input-textarea-padding-inline-large: var(--spacing-padding-6);
33
29
  --input-textarea-padding-block-small: var(--spacing-padding-5);
34
30
  --input-textarea-padding-block-medium: var(--spacing-padding-5);
35
31
  --input-textarea-padding-block-large: var(--spacing-padding-6);
36
- --input-textarea-gap-small: var(--input-default-gap);
37
- --input-textarea-gap-medium: var(--input-default-gap);
38
- --input-textarea-gap-large: var(--input-default-gap);
39
32
  --input-textarea-counter-font-size: var(--font-label-medium-size);
40
33
  --input-textarea-counter-line-height: var(--font-label-medium-line-height);
41
34
  --input-textarea-counter-font-weight: var(--font-label-medium-weight);
@@ -122,33 +115,24 @@
122
115
 
123
116
  /* TimePicker tokens */
124
117
  --input-time-width: 100%;
125
- --input-time-height-small: var(--input-default-height-small);
126
- --input-time-height-medium: var(--input-default-height-medium);
127
- --input-time-height-large: var(--input-default-height-large);
128
- --input-time-tertiary-height: var(--input-tertiary-height-base);
129
- --input-time-padding-inline: var(--input-default-padding-inline);
130
- --input-time-padding-block: var(--input-default-padding-block);
131
- --input-time-secondary-padding-block: var(--input-secondary-padding-block);
132
118
  --input-time-table-padding-inline: var(--spacing-padding-4);
133
- --input-time-radius: var(--theme-radius-medium-3);
134
- --input-time-tertiary-radius: var(--input-tertiary-radius-base);
135
- --input-time-table-radius: var(--input-table-radius-base);
119
+ --input-time-radius: var(--input-default-radius-medium);
136
120
  --input-time-field-gap: 0;
137
- --input-time-field-width: 2.7ch;
138
- --input-time-field-middle-width: 2.2ch;
139
121
  --input-time-period-field-width: 4.2ch;
140
122
  --input-time-field-height: 100%;
141
123
  --input-time-icon-size: 24px;
142
124
  --input-time-stepper-width: 28px;
143
- --input-time-stepper-button-height: 28px;
125
+ --input-time-stepper-button-height: calc(
126
+ var(--input-default-height-medium) / 2
127
+ );
144
128
  --input-time-stepper-radius: var(--theme-radius-medium-3);
145
129
  --input-time-stepper-icon-size: 16px;
146
- --input-time-text-color: var(--input-text-color);
147
- --input-time-text-disabled-color: var(--input-text-disabled-color);
148
- --input-time-placeholder-color: var(--input-placeholder-color);
130
+ --input-time-text-color: var(--color-cool-gray-30);
131
+ --input-time-text-disabled-color: var(--color-cool-gray-60);
132
+ --input-time-placeholder-color: var(--color-cool-gray-40);
149
133
  --input-time-separator-color: var(--color-label-alternative);
150
- --input-time-icon-color: var(--color-label-alternative);
151
- --input-time-icon-disabled-color: var(--color-label-disabled);
134
+ --input-time-icon-color: var(--color-cool-gray-25);
135
+ --input-time-icon-disabled-color: var(--color-cool-gray-45);
152
136
  --input-time-font-size: var(--input-text-medium-size);
153
137
  --input-time-line-height: var(--input-text-medium-line-height);
154
138
  --input-time-font-weight: var(--input-text-medium-weight);
@@ -173,6 +157,7 @@
173
157
  --input-time-border-color: var(--input-border-color);
174
158
  --input-time-border-width: var(--input-border-width-default);
175
159
  --input-time-border-width-emphasis: var(--input-border-width-emphasis);
160
+ --input-time-border-width-focus: 2px;
176
161
  --input-time-border-active-color: var(--input-border-active-color);
177
162
  --input-time-border-success-color: var(--input-border-success-color);
178
163
  --input-time-border-error-color: var(--input-border-error-color);
@@ -180,6 +165,10 @@
180
165
  --input-time-table-border-color: var(--input-border-table-default-color);
181
166
  --input-time-surface-color: var(--input-surface-color);
182
167
  --input-time-secondary-surface-color: var(--input-secondary-surface-color);
183
- --input-time-surface-disabled-color: var(--input-surface-disabled-color);
168
+ --input-time-surface-disabled-color: var(--color-cool-gray-85);
184
169
  --input-time-table-surface-color: var(--input-table-surface-color);
185
170
  }
171
+
172
+ .input-time {
173
+ --input-time-field-width: 1.9em;
174
+ }
@@ -49,13 +49,13 @@
49
49
  display: flex;
50
50
  width: 100%;
51
51
  align-items: center;
52
- gap: var(--select-primary-gap-inline);
53
- min-height: var(--select-primary-height-medium);
54
- padding: var(--select-primary-padding-block)
55
- var(--select-primary-padding-inline);
56
- border: var(--select-primary-border-width-default) solid
52
+ gap: var(--input-default-gap);
53
+ min-height: var(--input-default-height-medium);
54
+ padding: var(--input-default-padding-block)
55
+ var(--input-default-padding-inline);
56
+ border: var(--input-border-width-default) solid
57
57
  var(--select-primary-color-border);
58
- border-radius: var(--select-primary-radius-medium);
58
+ border-radius: var(--input-default-radius-medium);
59
59
  background-color: var(--select-primary-color-surface);
60
60
  cursor: pointer;
61
61
  transition:
@@ -65,8 +65,8 @@
65
65
  text-align: left;
66
66
 
67
67
  &:where([data-size="small"]) {
68
- min-height: var(--select-primary-height-small);
69
- border-radius: var(--select-primary-radius-small);
68
+ min-height: var(--input-default-height-small);
69
+ border-radius: var(--input-default-radius-small);
70
70
  }
71
71
 
72
72
  &:where([data-size="xsmall"]) {
@@ -81,8 +81,8 @@
81
81
  }
82
82
 
83
83
  &:where([data-size="large"]) {
84
- min-height: var(--select-primary-height-large);
85
- border-radius: var(--select-primary-radius-large);
84
+ min-height: var(--input-default-height-large);
85
+ border-radius: var(--input-default-radius-large);
86
86
  }
87
87
 
88
88
  &:where([data-multiple="true"]) {
@@ -146,7 +146,7 @@
146
146
  &:where(:not([data-priority="secondary"])):focus-visible,
147
147
  &:where(:not([data-priority="secondary"])):focus-within {
148
148
  border-color: var(--select-primary-color-border-focused);
149
- border-width: var(--select-primary-border-width-focus);
149
+ border-width: var(--input-border-width-emphasis);
150
150
  --select-icon-fill: var(--select-icon-color-focused);
151
151
  }
152
152
 
@@ -155,7 +155,7 @@
155
155
  &:where([data-priority="table"]):focus-visible,
156
156
  &:where([data-priority="table"]):focus-within {
157
157
  border-color: var(--select-table-border-focus-color);
158
- border-width: var(--select-primary-border-width-focus);
158
+ border-width: var(--input-border-width-emphasis);
159
159
  --select-icon-fill: var(--select-table-icon-color-focused);
160
160
  }
161
161
 
@@ -1,4 +1,4 @@
1
- /* Select tokens mapped to Input primary tokens for visual parity */
1
+ /* Select-specific tokens. Primary small/medium/large geometry consumes Input.Base directly. */
2
2
  :root {
3
3
  /* layout presets */
4
4
  --select-width: 100%;
@@ -6,25 +6,14 @@
6
6
  --select-layout-gap: var(--spacing-gap-2);
7
7
  --select-value-gap: var(--spacing-gap-2);
8
8
 
9
- --select-primary-height-small: var(--input-default-height-small);
10
- --select-primary-height-medium: var(--input-default-height-medium);
11
- --select-primary-height-large: var(--input-default-height-large);
12
9
  --select-primary-height-xsmall: 24px;
13
10
 
14
- --select-primary-radius-small: var(--input-default-radius-base);
15
- --select-primary-radius-medium: var(--input-default-radius-base);
16
- --select-primary-radius-large: var(--input-default-radius-base);
17
11
  --select-primary-radius-xsmall: var(--theme-radius-medium-2);
18
12
 
19
- --select-primary-padding-inline: var(--input-default-padding-inline);
20
- --select-primary-padding-block: var(--input-default-padding-block);
21
- --select-primary-gap-inline: var(--input-default-gap);
22
13
  --select-primary-padding-inline-start-xsmall: var(--spacing-padding-4);
23
14
  --select-primary-padding-inline-end-xsmall: var(--spacing-padding-3);
24
15
  --select-primary-padding-block-xsmall: var(--spacing-padding-2);
25
16
  --select-primary-gap-inline-xsmall: var(--spacing-gap-1);
26
- --select-primary-border-width-default: var(--input-border-width-default);
27
- --select-primary-border-width-focus: var(--input-border-width-emphasis);
28
17
 
29
18
  --select-secondary-radius: var(--theme-radius-medium-1);
30
19
  --select-secondary-padding-inline: var(--spacing-padding-4);
@@ -1,4 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="1.6"/>
3
- <path d="M12 7.5V12L15.25 14.25" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
4
- </svg>