@uniai-fe/uds-primitives 0.13.0 → 0.13.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.
package/dist/styles.css CHANGED
@@ -290,7 +290,6 @@
290
290
  --theme-checkbox-icon-default: transparent;
291
291
  --theme-checkbox-icon-selected: var(--color-common-100);
292
292
  --theme-checkbox-icon-disabled-selected: var(--color-common-100);
293
- --theme-checkbox-focus-ring: rgba(2, 84, 255, 0.32);
294
293
  --theme-chip-height: var(--theme-size-small-3);
295
294
  /* 변경: Figma text menu item은 기본 chip보다 낮은 24px height를 사용한다. */
296
295
  --theme-chip-height-text: 24px;
@@ -436,7 +435,6 @@
436
435
  --fab-line-height: var(--font-body-small-line-height);
437
436
  --fab-letter-spacing: var(--font-body-small-letter-spacing);
438
437
  --fab-outlined-background: var(--button-default-outline-bg);
439
- --fab-focus-color: var(--color-primary-default);
440
438
  --fab-disabled-background: var(--button-default-neutral-disabled-bg);
441
439
  --fab-disabled-foreground: var(--button-default-neutral-disabled-foreground);
442
440
  --form-field-width: auto;
@@ -671,7 +669,6 @@
671
669
  --theme-radio-card-description-color: var(--color-label-neutral);
672
670
  --theme-radio-card-badge-background: var(--color-surface-static-blue);
673
671
  --theme-radio-card-badge-color: var(--color-primary-default);
674
- --theme-radio-focus-ring: rgba(2, 84, 255, 0.32);
675
672
  --theme-radio-disabled-selected-opacity: 0.28;
676
673
  /* layout presets */
677
674
  --select-width: 100%;
@@ -812,7 +809,6 @@
812
809
  --select-multiple-chip-border-color: transparent;
813
810
  --select-multiple-chip-remove-color: var(--color-label-strong);
814
811
  --select-multiple-chip-remove-hover-color: var(--color-label-strong);
815
- --select-multiple-chip-remove-focus-outline-color: var(--color-border-strong);
816
812
  --select-multiple-chip-summary-color: var(--color-label-standard);
817
813
  --select-multiple-chip-summary-surface: var(--color-surface-standard);
818
814
  --select-multiple-chip-summary-border-color: transparent;
@@ -841,7 +837,6 @@
841
837
  0px 2px 8px rgba(0, 0, 0, 0.04), 0px 0px 4px rgba(0, 0, 0, 0.08);
842
838
  --switch-thumb-shadow-checked:
843
839
  0px 2px 8px rgba(0, 0, 0, 0.08), 0px 0px 4px rgba(0, 0, 0, 0.12);
844
- --switch-focus-ring: var(--color-primary-focus);
845
840
  --switch-disabled-opacity: 0.4;
846
841
  --switch-text-width: fit-content;
847
842
  --switch-text-height-medium: 32px;
@@ -2557,6 +2552,10 @@
2557
2552
  width: var(--calendar-body-width);
2558
2553
  }
2559
2554
 
2555
+ .calendar-grid .mantine-focus-auto:focus-visible {
2556
+ outline: none;
2557
+ }
2558
+
2560
2559
  .calendar-range-grid {
2561
2560
  width: var(--calendar-body-width);
2562
2561
  }
@@ -3038,8 +3037,7 @@
3038
3037
  transition:
3039
3038
  background-color 0.15s ease,
3040
3039
  border-color 0.15s ease,
3041
- opacity 0.15s ease,
3042
- box-shadow 0.15s ease;
3040
+ opacity 0.15s ease;
3043
3041
  }
3044
3042
  .checkbox[data-size="medium"] {
3045
3043
  inline-size: var(--theme-checkbox-frame-size-medium);
@@ -3055,10 +3053,6 @@
3055
3053
  cursor: not-allowed;
3056
3054
  }
3057
3055
 
3058
- .checkbox:focus-visible {
3059
- box-shadow: 0 0 0 2px var(--theme-checkbox-focus-ring);
3060
- }
3061
-
3062
3056
  .checkbox-surface {
3063
3057
  inline-size: var(--theme-checkbox-indicator-size-medium);
3064
3058
  block-size: var(--theme-checkbox-indicator-size-medium);
@@ -3218,11 +3212,6 @@ figure.chip {
3218
3212
  margin: 0;
3219
3213
  }
3220
3214
 
3221
- .chip:focus-visible {
3222
- outline: 2px solid var(--color-primary-default);
3223
- outline-offset: 2px;
3224
- }
3225
-
3226
3215
  .chip:where([data-style="filter"][data-fill="solid"]) {
3227
3216
  --chip-bg: var(--color-surface-standard);
3228
3217
  --chip-label-color: var(--color-label-neutral);
@@ -3982,10 +3971,6 @@ figure.chip {
3982
3971
  background-color: var(--fab-pressed-background);
3983
3972
  box-shadow: var(--fab-pressed-shadow);
3984
3973
  }
3985
- .fab:where(:focus-visible) {
3986
- outline: 2px solid var(--fab-focus-color);
3987
- outline-offset: 2px;
3988
- }
3989
3974
  .fab:where(:disabled) {
3990
3975
  background-color: var(--fab-disabled-background);
3991
3976
  border-color: var(--fab-disabled-background);
@@ -5333,12 +5318,6 @@ figure.chip {
5333
5318
  pointer-events: none;
5334
5319
  }
5335
5320
 
5336
- .bottom-navigation-trigger:focus-visible {
5337
- outline: none;
5338
- border-radius: var(--theme-radius-large-1, 12px);
5339
- box-shadow: 0 0 0 2px var(--color-primary-focus, rgba(0, 97, 255, 0.2));
5340
- }
5341
-
5342
5321
  .navigation-item-icon {
5343
5322
  display: inline-flex;
5344
5323
  align-items: center;
@@ -5577,9 +5556,7 @@ figure.chip {
5577
5556
  border-radius: 0;
5578
5557
  padding: 0;
5579
5558
  cursor: pointer;
5580
- transition:
5581
- box-shadow 0.15s ease,
5582
- transform 0.15s ease;
5559
+ transition: transform 0.15s ease;
5583
5560
  }
5584
5561
  .radio[data-size="large"] {
5585
5562
  inline-size: var(--theme-radio-frame-size-large);
@@ -5590,10 +5567,6 @@ figure.chip {
5590
5567
  opacity: 0.6;
5591
5568
  }
5592
5569
 
5593
- .radio:focus-visible {
5594
- box-shadow: 0 0 0 2px var(--theme-radio-focus-ring);
5595
- }
5596
-
5597
5570
  .radio-indicator {
5598
5571
  inline-size: var(--theme-radio-indicator-size-medium);
5599
5572
  block-size: var(--theme-radio-indicator-size-medium);
@@ -5874,11 +5847,6 @@ figure.chip {
5874
5847
  opacity: var(--segmented-disabled-opacity);
5875
5848
  }
5876
5849
 
5877
- .segmented-control-button:where(:focus-visible) {
5878
- outline: 2px solid var(--color-focus-ring, var(--color-primary-default));
5879
- outline-offset: 2px;
5880
- }
5881
-
5882
5850
  .segmented-control-label {
5883
5851
  display: flex;
5884
5852
  align-items: center;
@@ -6358,10 +6326,6 @@ figure.chip {
6358
6326
  border-radius: 9999px;
6359
6327
  transition: color 150ms ease;
6360
6328
  }
6361
- .select-tag-remove:focus-visible {
6362
- outline: 0.2rem solid var(--select-multiple-chip-remove-focus-outline-color);
6363
- outline-offset: 0.1rem;
6364
- }
6365
6329
  .select-tag-remove:hover {
6366
6330
  color: var(--select-multiple-chip-remove-hover-color);
6367
6331
  }
@@ -6434,7 +6398,6 @@ figure.chip {
6434
6398
  cursor: pointer;
6435
6399
  transition:
6436
6400
  background-color 0.2s ease,
6437
- box-shadow 0.2s ease,
6438
6401
  opacity 0.2s ease;
6439
6402
  }
6440
6403
 
@@ -6449,10 +6412,6 @@ figure.chip {
6449
6412
  background-color: var(--switch-track-background-checked);
6450
6413
  }
6451
6414
 
6452
- .switch:where(:focus-visible) {
6453
- box-shadow: 0 0 0 2px var(--switch-focus-ring);
6454
- }
6455
-
6456
6415
  .switch:where(:disabled) {
6457
6416
  cursor: not-allowed;
6458
6417
  opacity: var(--switch-disabled-opacity);
@@ -6581,11 +6540,6 @@ figure.chip {
6581
6540
  cursor: not-allowed;
6582
6541
  }
6583
6542
 
6584
- .switch-text-button:where(:focus-visible) {
6585
- outline: 2px solid var(--switch-focus-ring);
6586
- outline-offset: 2px;
6587
- }
6588
-
6589
6543
  .switch-text-label {
6590
6544
  display: flex;
6591
6545
  align-items: center;
@@ -6665,11 +6619,6 @@ figure.chip {
6665
6619
  transition: background-color 0.2s ease;
6666
6620
  }
6667
6621
 
6668
- .tab-trigger:where(:focus-visible) {
6669
- outline: 2px solid var(--color-primary-default);
6670
- outline-offset: 2px;
6671
- }
6672
-
6673
6622
  .tab-trigger:where([data-disabled="true"]) {
6674
6623
  cursor: not-allowed;
6675
6624
  opacity: var(--tab-disabled-opacity);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-primitives",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "description": "UNIAI Design System; Primitives Components Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -87,9 +87,9 @@
87
87
  "react-hook-form": "^7.86.0",
88
88
  "sass": "^1.102.0",
89
89
  "typescript": "6.0.3",
90
- "@uniai-fe/eslint-config": "0.4.4",
91
- "@uniai-fe/next-devkit": "0.4.1",
92
90
  "@uniai-fe/tsconfig": "0.2.0",
91
+ "@uniai-fe/next-devkit": "0.4.1",
92
+ "@uniai-fe/eslint-config": "0.4.4",
93
93
  "@uniai-fe/uds-foundation": "0.6.0",
94
94
  "@uniai-fe/util-functions": "0.4.3"
95
95
  },
@@ -59,6 +59,11 @@
59
59
  width: var(--calendar-body-width);
60
60
  }
61
61
 
62
+ .calendar-grid .mantine-focus-auto:focus-visible {
63
+ // Mantine의 공통 초점 테두리만 숨기고 날짜 상태 표시는 유지한다.
64
+ outline: none;
65
+ }
66
+
62
67
  .calendar-range-grid {
63
68
  width: var(--calendar-body-width);
64
69
  }
@@ -22,7 +22,6 @@
22
22
  --theme-checkbox-icon-default: transparent;
23
23
  --theme-checkbox-icon-selected: var(--color-common-100);
24
24
  --theme-checkbox-icon-disabled-selected: var(--color-common-100);
25
- --theme-checkbox-focus-ring: rgba(2, 84, 255, 0.32);
26
25
  }
27
26
 
28
27
  .checkbox {
@@ -38,8 +37,7 @@
38
37
  transition:
39
38
  background-color 0.15s ease,
40
39
  border-color 0.15s ease,
41
- opacity 0.15s ease,
42
- box-shadow 0.15s ease;
40
+ opacity 0.15s ease;
43
41
 
44
42
  &[data-size="medium"] {
45
43
  inline-size: var(--theme-checkbox-frame-size-medium);
@@ -58,10 +56,6 @@
58
56
  }
59
57
  }
60
58
 
61
- .checkbox:focus-visible {
62
- box-shadow: 0 0 0 2px var(--theme-checkbox-focus-ring);
63
- }
64
-
65
59
  .checkbox-surface {
66
60
  inline-size: var(--theme-checkbox-indicator-size-medium);
67
61
  block-size: var(--theme-checkbox-indicator-size-medium);
@@ -42,11 +42,6 @@ figure.chip {
42
42
  margin: 0;
43
43
  }
44
44
 
45
- .chip:focus-visible {
46
- outline: 2px solid var(--color-primary-default);
47
- outline-offset: 2px;
48
- }
49
-
50
45
  .chip:where([data-style="filter"][data-fill="solid"]) {
51
46
  --chip-bg: var(--color-surface-standard);
52
47
  --chip-label-color: var(--color-label-neutral);
@@ -89,11 +89,6 @@
89
89
  box-shadow: var(--fab-pressed-shadow);
90
90
  }
91
91
 
92
- &:where(:focus-visible) {
93
- outline: 2px solid var(--fab-focus-color);
94
- outline-offset: 2px;
95
- }
96
-
97
92
  &:where(:disabled) {
98
93
  background-color: var(--fab-disabled-background);
99
94
  border-color: var(--fab-disabled-background);
@@ -19,7 +19,6 @@
19
19
  --fab-line-height: var(--font-body-small-line-height);
20
20
  --fab-letter-spacing: var(--font-body-small-letter-spacing);
21
21
  --fab-outlined-background: var(--button-default-outline-bg);
22
- --fab-focus-color: var(--color-primary-default);
23
22
  --fab-disabled-background: var(--button-default-neutral-disabled-bg);
24
23
  --fab-disabled-foreground: var(--button-default-neutral-disabled-foreground);
25
24
  }
@@ -86,12 +86,6 @@
86
86
  pointer-events: none;
87
87
  }
88
88
 
89
- .bottom-navigation-trigger:focus-visible {
90
- outline: none;
91
- border-radius: var(--theme-radius-large-1, 12px);
92
- box-shadow: 0 0 0 2px var(--color-primary-focus, rgba(0, 97, 255, 0.2));
93
- }
94
-
95
89
  .navigation-item-icon {
96
90
  display: inline-flex;
97
91
  align-items: center;
@@ -23,7 +23,6 @@
23
23
  --theme-radio-card-description-color: var(--color-label-neutral);
24
24
  --theme-radio-card-badge-background: var(--color-surface-static-blue);
25
25
  --theme-radio-card-badge-color: var(--color-primary-default);
26
- --theme-radio-focus-ring: rgba(2, 84, 255, 0.32);
27
26
  --theme-radio-disabled-selected-opacity: 0.28;
28
27
  }
29
28
 
@@ -38,9 +37,7 @@
38
37
  border-radius: 0;
39
38
  padding: 0;
40
39
  cursor: pointer;
41
- transition:
42
- box-shadow 0.15s ease,
43
- transform 0.15s ease;
40
+ transition: transform 0.15s ease;
44
41
 
45
42
  &[data-size="large"] {
46
43
  inline-size: var(--theme-radio-frame-size-large);
@@ -53,10 +50,6 @@
53
50
  }
54
51
  }
55
52
 
56
- .radio:focus-visible {
57
- box-shadow: 0 0 0 2px var(--theme-radio-focus-ring);
58
- }
59
-
60
53
  .radio-indicator {
61
54
  inline-size: var(--theme-radio-indicator-size-medium);
62
55
  block-size: var(--theme-radio-indicator-size-medium);
@@ -92,11 +92,6 @@
92
92
  opacity: var(--segmented-disabled-opacity);
93
93
  }
94
94
 
95
- .segmented-control-button:where(:focus-visible) {
96
- outline: 2px solid var(--color-focus-ring, var(--color-primary-default));
97
- outline-offset: 2px;
98
- }
99
-
100
95
  .segmented-control-label {
101
96
  display: flex;
102
97
  align-items: center;
@@ -485,11 +485,6 @@
485
485
  border-radius: 9999px;
486
486
  transition: color 150ms ease;
487
487
 
488
- &:focus-visible {
489
- outline: 0.2rem solid var(--select-multiple-chip-remove-focus-outline-color);
490
- outline-offset: 0.1rem;
491
- }
492
-
493
488
  &:hover {
494
489
  color: var(--select-multiple-chip-remove-hover-color);
495
490
  }
@@ -147,7 +147,6 @@
147
147
  --select-multiple-chip-border-color: transparent;
148
148
  --select-multiple-chip-remove-color: var(--color-label-strong);
149
149
  --select-multiple-chip-remove-hover-color: var(--color-label-strong);
150
- --select-multiple-chip-remove-focus-outline-color: var(--color-border-strong);
151
150
  --select-multiple-chip-summary-color: var(--color-label-standard);
152
151
  --select-multiple-chip-summary-surface: var(--color-surface-standard);
153
152
  --select-multiple-chip-summary-border-color: transparent;
@@ -16,7 +16,6 @@
16
16
  cursor: pointer;
17
17
  transition:
18
18
  background-color 0.2s ease,
19
- box-shadow 0.2s ease,
20
19
  opacity 0.2s ease;
21
20
  }
22
21
 
@@ -31,10 +30,6 @@
31
30
  background-color: var(--switch-track-background-checked);
32
31
  }
33
32
 
34
- .switch:where(:focus-visible) {
35
- box-shadow: 0 0 0 2px var(--switch-focus-ring);
36
- }
37
-
38
33
  .switch:where(:disabled) {
39
34
  cursor: not-allowed;
40
35
  opacity: var(--switch-disabled-opacity);
@@ -165,11 +160,6 @@
165
160
  cursor: not-allowed;
166
161
  }
167
162
 
168
- .switch-text-button:where(:focus-visible) {
169
- outline: 2px solid var(--switch-focus-ring);
170
- outline-offset: 2px;
171
- }
172
-
173
163
  .switch-text-label {
174
164
  display: flex;
175
165
  align-items: center;
@@ -16,7 +16,6 @@
16
16
  0px 2px 8px rgba(0, 0, 0, 0.04), 0px 0px 4px rgba(0, 0, 0, 0.08);
17
17
  --switch-thumb-shadow-checked:
18
18
  0px 2px 8px rgba(0, 0, 0, 0.08), 0px 0px 4px rgba(0, 0, 0, 0.12);
19
- --switch-focus-ring: var(--color-primary-focus);
20
19
  --switch-disabled-opacity: 0.4;
21
20
 
22
21
  --switch-text-width: fit-content;
@@ -6,20 +6,20 @@ import { useTabContext } from "../utils";
6
6
  import { TabLabel } from "./Label";
7
7
 
8
8
  /**
9
- * TabTrigger: 개별 탭 버튼. icon slot을 지원한다.
9
+ * Tab Trigger; 개별 탭 선택
10
10
  * @component
11
- * @param {TabTriggerProps} props
12
- * @param {React.ReactNode} [props.icon] 라벨 앞 슬롯.
13
- * @param {React.ReactNode} [props.children] 라벨 콘텐츠.
14
- * @param {string} [props.className] trigger className.
15
- * @param {string} props.value 탭 value.
16
- * @param {boolean} [props.disabled] disabled 상태.
11
+ * @property {TabTriggerProps} props Radix 탭 입력과 icon을 전달한다.
12
+ * @property {React.ReactNode} [props.icon] 라벨 앞 아이콘.
13
+ * @property {React.ReactNode} [props.children] 라벨 콘텐츠.
14
+ * @property {string} [props.className] trigger에 병합할 className.
15
+ * @property {string} props.value 선택할 탭 값.
16
+ * @property {boolean} [props.disabled] 비활성 상태.
17
+ * @desc 선택·focus·disabled와 native handler를 Radix에 위임하고 초점 테두리는 Foundation reset을 따른다.
17
18
  */
18
19
  const TabTrigger = forwardRef<HTMLButtonElement, TabTriggerProps>(
19
20
  ({ icon, children, className, ...restProps }, forwardedRef) => {
20
21
  const { variant, scale } = useTabContext();
21
22
  const hasIcon = Boolean(icon);
22
-
23
23
  return (
24
24
  <TabsPrimitive.Trigger
25
25
  {...restProps}
@@ -68,11 +68,6 @@
68
68
  transition: background-color 0.2s ease;
69
69
  }
70
70
 
71
- .tab-trigger:where(:focus-visible) {
72
- outline: 2px solid var(--color-primary-default);
73
- outline-offset: 2px;
74
- }
75
-
76
71
  .tab-trigger:where([data-disabled="true"]) {
77
72
  cursor: not-allowed;
78
73
  opacity: var(--tab-disabled-opacity);