sh-ui-cli 0.59.3 → 0.59.5

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 (55) hide show
  1. package/data/changelog/versions.json +29 -0
  2. package/data/registry/react/components/accordion/styles.css +1 -1
  3. package/data/registry/react/components/accordion/styles.module.css +1 -1
  4. package/data/registry/react/components/card/styles.css +2 -2
  5. package/data/registry/react/components/card/styles.module.css +2 -2
  6. package/data/registry/react/components/carousel/styles.css +1 -1
  7. package/data/registry/react/components/carousel/styles.module.css +1 -1
  8. package/data/registry/react/components/checkbox/styles.css +20 -0
  9. package/data/registry/react/components/checkbox/styles.module.css +20 -0
  10. package/data/registry/react/components/code-editor/index.tailwind.tsx +2 -2
  11. package/data/registry/react/components/code-editor/styles.css +2 -2
  12. package/data/registry/react/components/code-editor/styles.module.css +2 -2
  13. package/data/registry/react/components/code-panel/styles.css +3 -3
  14. package/data/registry/react/components/code-panel/styles.module.css +3 -3
  15. package/data/registry/react/components/color-picker/styles.css +2 -2
  16. package/data/registry/react/components/color-picker/styles.module.css +2 -2
  17. package/data/registry/react/components/combobox/styles.css +2 -2
  18. package/data/registry/react/components/combobox/styles.module.css +2 -2
  19. package/data/registry/react/components/context-menu/styles.css +3 -3
  20. package/data/registry/react/components/context-menu/styles.module.css +3 -3
  21. package/data/registry/react/components/date-picker/styles.css +1 -1
  22. package/data/registry/react/components/date-picker/styles.module.css +1 -1
  23. package/data/registry/react/components/dropdown-menu/styles.css +3 -3
  24. package/data/registry/react/components/dropdown-menu/styles.module.css +3 -3
  25. package/data/registry/react/components/header/styles.css +2 -2
  26. package/data/registry/react/components/header/styles.module.css +2 -2
  27. package/data/registry/react/components/input/styles.css +4 -4
  28. package/data/registry/react/components/input/styles.module.css +4 -4
  29. package/data/registry/react/components/markdown-editor/index.tailwind.tsx +4 -4
  30. package/data/registry/react/components/markdown-editor/styles.css +4 -4
  31. package/data/registry/react/components/markdown-editor/styles.module.css +4 -4
  32. package/data/registry/react/components/numeric-input/styles.css +1 -1
  33. package/data/registry/react/components/numeric-input/styles.module.css +1 -1
  34. package/data/registry/react/components/page-toc/styles.css +4 -4
  35. package/data/registry/react/components/page-toc/styles.module.css +4 -4
  36. package/data/registry/react/components/radio/styles.css +22 -0
  37. package/data/registry/react/components/radio/styles.module.css +22 -0
  38. package/data/registry/react/components/rich-text-editor/index.tailwind.tsx +2 -2
  39. package/data/registry/react/components/rich-text-editor/styles.css +2 -2
  40. package/data/registry/react/components/rich-text-editor/styles.module.css +2 -2
  41. package/data/registry/react/components/select/styles.css +2 -2
  42. package/data/registry/react/components/select/styles.module.css +2 -2
  43. package/data/registry/react/components/sidebar/styles.css +14 -14
  44. package/data/registry/react/components/sidebar/styles.module.css +14 -14
  45. package/data/registry/react/components/slider/styles.css +2 -2
  46. package/data/registry/react/components/slider/styles.module.css +2 -2
  47. package/data/registry/react/components/switch/styles.css +27 -0
  48. package/data/registry/react/components/switch/styles.module.css +27 -0
  49. package/data/registry/react/components/tabs/styles.css +24 -0
  50. package/data/registry/react/components/tabs/styles.module.css +24 -0
  51. package/data/registry/react/components/toast/styles.css +2 -2
  52. package/data/registry/react/components/toast/styles.module.css +2 -2
  53. package/data/registry/react/components/toggle/styles.css +16 -0
  54. package/data/registry/react/components/toggle/styles.module.css +16 -0
  55. package/package.json +1 -1
@@ -4,12 +4,12 @@
4
4
  .sh-ui-page-toc {
5
5
  position: fixed;
6
6
  top: 5rem;
7
- right: 1.5rem;
7
+ inset-inline-end: 1.5rem;
8
8
  width: 14rem;
9
9
  max-height: calc(100vh - 7rem);
10
10
  overflow-y: auto;
11
11
  padding: 0.75rem 0.5rem 0.75rem 1rem;
12
- border-left: 1px solid var(--border);
12
+ border-inline-start: 1px solid var(--border);
13
13
  font-size: 0.8125rem;
14
14
  z-index: 5;
15
15
  }
@@ -34,13 +34,13 @@
34
34
 
35
35
  .sh-ui-page-toc__list > li[data-level="3"] .sh-ui-page-toc__link,
36
36
  .sh-ui-page-toc__list > li[data-level="4"] .sh-ui-page-toc__link {
37
- padding-left: 1.25rem;
37
+ padding-inline-start: 1.25rem;
38
38
  font-size: 0.8125em;
39
39
  color: var(--foreground-subtle, var(--foreground-muted));
40
40
  }
41
41
  .sh-ui-page-toc__list > li[data-level="5"] .sh-ui-page-toc__link,
42
42
  .sh-ui-page-toc__list > li[data-level="6"] .sh-ui-page-toc__link {
43
- padding-left: 2rem;
43
+ padding-inline-start: 2rem;
44
44
  font-size: 0.75em;
45
45
  color: var(--foreground-subtle, var(--foreground-muted));
46
46
  }
@@ -4,12 +4,12 @@
4
4
  .page-toc {
5
5
  position: fixed;
6
6
  top: 5rem;
7
- right: 1.5rem;
7
+ inset-inline-end: 1.5rem;
8
8
  width: 14rem;
9
9
  max-height: calc(100vh - 7rem);
10
10
  overflow-y: auto;
11
11
  padding: 0.75rem 0.5rem 0.75rem 1rem;
12
- border-left: 1px solid var(--border);
12
+ border-inline-start: 1px solid var(--border);
13
13
  font-size: 0.8125rem;
14
14
  z-index: 5;
15
15
  }
@@ -34,13 +34,13 @@
34
34
 
35
35
  .page-toc__list > li[data-level="3"] .page-toc__link,
36
36
  .page-toc__list > li[data-level="4"] .page-toc__link {
37
- padding-left: 1.25rem;
37
+ padding-inline-start: 1.25rem;
38
38
  font-size: 0.8125em;
39
39
  color: var(--foreground-subtle, var(--foreground-muted));
40
40
  }
41
41
  .page-toc__list > li[data-level="5"] .page-toc__link,
42
42
  .page-toc__list > li[data-level="6"] .page-toc__link {
43
- padding-left: 2rem;
43
+ padding-inline-start: 2rem;
44
44
  font-size: 0.75em;
45
45
  color: var(--foreground-subtle, var(--foreground-muted));
46
46
  }
@@ -78,3 +78,25 @@
78
78
  transition: none;
79
79
  }
80
80
  }
81
+
82
+ /* Windows 고대비 모드. */
83
+ @media (forced-colors: active) {
84
+ .sh-ui-radio {
85
+ border-color: ButtonBorder;
86
+ }
87
+ .sh-ui-radio[data-checked] {
88
+ border-color: Highlight;
89
+ }
90
+ .sh-ui-radio__indicator {
91
+ background: Highlight;
92
+ }
93
+ .sh-ui-radio:focus-visible {
94
+ outline-color: Highlight;
95
+ }
96
+ .sh-ui-radio[data-disabled] {
97
+ border-color: GrayText;
98
+ }
99
+ .sh-ui-radio[data-disabled] .sh-ui-radio__indicator {
100
+ background: GrayText;
101
+ }
102
+ }
@@ -78,3 +78,25 @@
78
78
  transition: none;
79
79
  }
80
80
  }
81
+
82
+ /* Windows 고대비 모드. */
83
+ @media (forced-colors: active) {
84
+ .radio {
85
+ border-color: ButtonBorder;
86
+ }
87
+ .radio[data-checked] {
88
+ border-color: Highlight;
89
+ }
90
+ .radio__indicator {
91
+ background: Highlight;
92
+ }
93
+ .radio:focus-visible {
94
+ outline-color: Highlight;
95
+ }
96
+ .radio[data-disabled] {
97
+ border-color: GrayText;
98
+ }
99
+ .radio[data-disabled] .radio__indicator {
100
+ background: GrayText;
101
+ }
102
+ }
@@ -190,10 +190,10 @@ if (typeof document !== "undefined" && !document.querySelector("style[data-sh-ui
190
190
  .sh-ui-rte__content h1 { font-size: 1.5rem; }
191
191
  .sh-ui-rte__content h2 { font-size: 1.25rem; }
192
192
  .sh-ui-rte__content h3 { font-size: 1.125rem; }
193
- .sh-ui-rte__content ul, .sh-ui-rte__content ol { margin: 0 0 var(--space-3); padding-left: var(--space-5); }
193
+ .sh-ui-rte__content ul, .sh-ui-rte__content ol { margin: 0 0 var(--space-3); padding-inline-start: var(--space-5); }
194
194
  .sh-ui-rte__content li { margin-bottom: var(--space-1); }
195
195
  .sh-ui-rte__content li > p { margin: 0; }
196
- .sh-ui-rte__content blockquote { margin: 0 0 var(--space-3); padding: var(--space-2) var(--space-3); border-left: 3px solid var(--border-strong); background: var(--background-subtle); color: var(--foreground-muted); border-radius: 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0; }
196
+ .sh-ui-rte__content blockquote { margin: 0 0 var(--space-3); padding: var(--space-2) var(--space-3); border-inline-start: 3px solid var(--border-strong); background: var(--background-subtle); color: var(--foreground-muted); border-radius: 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0; }
197
197
  .sh-ui-rte__content blockquote > :last-child { margin-bottom: 0; }
198
198
  .sh-ui-rte__content code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.875em; padding: 0.125rem 0.375rem; border-radius: calc(var(--radius) - 4px); background: var(--background-muted); color: var(--foreground); }
199
199
  .sh-ui-rte__content pre { margin: 0 0 var(--space-3); padding: var(--space-3); border: 1px solid var(--border); border-radius: var(--radius); background: var(--background-subtle); overflow-x: auto; font-size: 0.8125rem; line-height: 1.6; }
@@ -115,7 +115,7 @@
115
115
  .sh-ui-rte__content ul,
116
116
  .sh-ui-rte__content ol {
117
117
  margin: 0 0 var(--space-3);
118
- padding-left: var(--space-5);
118
+ padding-inline-start: var(--space-5);
119
119
  }
120
120
  .sh-ui-rte__content li {
121
121
  margin-bottom: var(--space-1);
@@ -127,7 +127,7 @@
127
127
  .sh-ui-rte__content blockquote {
128
128
  margin: 0 0 var(--space-3);
129
129
  padding: var(--space-2) var(--space-3);
130
- border-left: 3px solid var(--border-strong);
130
+ border-inline-start: 3px solid var(--border-strong);
131
131
  background: var(--background-subtle);
132
132
  color: var(--foreground-muted);
133
133
  border-radius: 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0;
@@ -115,7 +115,7 @@
115
115
  .rte__content ul,
116
116
  .rte__content ol {
117
117
  margin: 0 0 var(--space-3);
118
- padding-left: var(--space-5);
118
+ padding-inline-start: var(--space-5);
119
119
  }
120
120
  .rte__content li {
121
121
  margin-bottom: var(--space-1);
@@ -127,7 +127,7 @@
127
127
  .rte__content blockquote {
128
128
  margin: 0 0 var(--space-3);
129
129
  padding: var(--space-2) var(--space-3);
130
- border-left: 3px solid var(--border-strong);
130
+ border-inline-start: 3px solid var(--border-strong);
131
131
  background: var(--background-subtle);
132
132
  color: var(--foreground-muted);
133
133
  border-radius: 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0;
@@ -38,7 +38,7 @@
38
38
 
39
39
  .sh-ui-select__value {
40
40
  flex: 1 1 auto;
41
- text-align: left;
41
+ text-align: start;
42
42
  overflow: hidden;
43
43
  text-overflow: ellipsis;
44
44
  white-space: nowrap;
@@ -134,7 +134,7 @@
134
134
 
135
135
  .sh-ui-select__indicator {
136
136
  order: 1;
137
- margin-left: auto;
137
+ margin-inline-start: auto;
138
138
  display: inline-flex;
139
139
  align-items: center;
140
140
  justify-content: center;
@@ -38,7 +38,7 @@
38
38
 
39
39
  .select__value {
40
40
  flex: 1 1 auto;
41
- text-align: left;
41
+ text-align: start;
42
42
  overflow: hidden;
43
43
  text-overflow: ellipsis;
44
44
  white-space: nowrap;
@@ -134,7 +134,7 @@
134
134
 
135
135
  .select__indicator {
136
136
  order: 1;
137
- margin-left: auto;
137
+ margin-inline-start: auto;
138
138
  display: inline-flex;
139
139
  align-items: center;
140
140
  justify-content: center;
@@ -40,15 +40,15 @@
40
40
  flex-shrink: 0;
41
41
  background: var(--sidebar-bg);
42
42
  color: var(--sidebar-fg);
43
- border-right: 1px solid var(--sidebar-border);
43
+ border-inline-end: 1px solid var(--sidebar-border);
44
44
  transition: width var(--duration-slow) ease;
45
45
  position: relative;
46
46
  z-index: 5;
47
47
  }
48
48
 
49
49
  .sh-ui-sidebar[data-side="right"] {
50
- border-right: none;
51
- border-left: 1px solid var(--sidebar-border);
50
+ border-inline-end: none;
51
+ border-inline-start: 1px solid var(--sidebar-border);
52
52
  order: 1;
53
53
  }
54
54
 
@@ -118,7 +118,7 @@
118
118
  width: var(--sidebar-width-mobile);
119
119
  z-index: var(--z-overlay);
120
120
  transition: transform var(--duration-slow) ease;
121
- border-right: 1px solid var(--sidebar-border);
121
+ border-inline-end: 1px solid var(--sidebar-border);
122
122
  }
123
123
  .sh-ui-sidebar--mobile[data-side="left"] {
124
124
  left: 0;
@@ -127,8 +127,8 @@
127
127
  .sh-ui-sidebar--mobile[data-side="right"] {
128
128
  right: 0;
129
129
  transform: translateX(100%);
130
- border-right: none;
131
- border-left: 1px solid var(--sidebar-border);
130
+ border-inline-end: none;
131
+ border-inline-start: 1px solid var(--sidebar-border);
132
132
  }
133
133
  .sh-ui-sidebar--mobile[data-state="open"] {
134
134
  transform: translateX(0);
@@ -178,7 +178,7 @@
178
178
  width: var(--sidebar-panel-width);
179
179
  flex-shrink: 0;
180
180
  background: var(--background);
181
- border-right: 1px solid var(--sidebar-border);
181
+ border-inline-end: 1px solid var(--sidebar-border);
182
182
  position: relative;
183
183
  z-index: 4;
184
184
  overflow: hidden;
@@ -243,7 +243,7 @@
243
243
  left: 0;
244
244
  width: min(var(--sidebar-panel-width), 90vw);
245
245
  z-index: var(--z-modal);
246
- border-right: 1px solid var(--sidebar-border);
246
+ border-inline-end: 1px solid var(--sidebar-border);
247
247
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
248
248
  }
249
249
  }
@@ -335,7 +335,7 @@
335
335
  align-items: center;
336
336
  gap: var(--space-2);
337
337
  padding: var(--space-2);
338
- text-align: left;
338
+ text-align: start;
339
339
  font-size: var(--text-sm);
340
340
  color: var(--sidebar-fg);
341
341
  background: transparent;
@@ -400,8 +400,8 @@
400
400
  list-style: none;
401
401
  margin: 0.125rem 0 0;
402
402
  padding: 0.125rem 0 0.125rem 0.625rem;
403
- margin-left: 0.875rem;
404
- border-left: 1px solid var(--sidebar-border);
403
+ margin-inline-start: 0.875rem;
404
+ border-inline-start: 1px solid var(--sidebar-border);
405
405
  display: flex;
406
406
  flex-direction: column;
407
407
  gap: 0.125rem;
@@ -453,7 +453,7 @@
453
453
  .sh-ui-sidebar__chevron {
454
454
  width: 0.875rem !important;
455
455
  height: 0.875rem !important;
456
- margin-left: auto;
456
+ margin-inline-start: auto;
457
457
  flex-shrink: 0;
458
458
  transition: transform 150ms ease;
459
459
  color: var(--foreground-muted);
@@ -474,10 +474,10 @@
474
474
  gap: 0.125rem;
475
475
  margin: 0;
476
476
  padding: 0;
477
- border-left: 0;
477
+ border-inline-start: 0;
478
478
  }
479
479
  .sh-ui-sidebar__collapsible-flyout .sh-ui-sidebar__menu-sub-button {
480
- padding-left: 0.625rem;
480
+ padding-inline-start: 0.625rem;
481
481
  }
482
482
 
483
483
  /* collapsed=icon 상태에서는 chevron 숨기고 content도 숨김 */
@@ -40,15 +40,15 @@
40
40
  flex-shrink: 0;
41
41
  background: var(--sidebar-bg);
42
42
  color: var(--sidebar-fg);
43
- border-right: 1px solid var(--sidebar-border);
43
+ border-inline-end: 1px solid var(--sidebar-border);
44
44
  transition: width var(--duration-slow) ease;
45
45
  position: relative;
46
46
  z-index: 5;
47
47
  }
48
48
 
49
49
  .sidebar[data-side="right"] {
50
- border-right: none;
51
- border-left: 1px solid var(--sidebar-border);
50
+ border-inline-end: none;
51
+ border-inline-start: 1px solid var(--sidebar-border);
52
52
  order: 1;
53
53
  }
54
54
 
@@ -118,7 +118,7 @@
118
118
  width: var(--sidebar-width-mobile);
119
119
  z-index: var(--z-overlay);
120
120
  transition: transform var(--duration-slow) ease;
121
- border-right: 1px solid var(--sidebar-border);
121
+ border-inline-end: 1px solid var(--sidebar-border);
122
122
  }
123
123
  .sidebar--mobile[data-side="left"] {
124
124
  left: 0;
@@ -127,8 +127,8 @@
127
127
  .sidebar--mobile[data-side="right"] {
128
128
  right: 0;
129
129
  transform: translateX(100%);
130
- border-right: none;
131
- border-left: 1px solid var(--sidebar-border);
130
+ border-inline-end: none;
131
+ border-inline-start: 1px solid var(--sidebar-border);
132
132
  }
133
133
  .sidebar--mobile[data-state="open"] {
134
134
  transform: translateX(0);
@@ -178,7 +178,7 @@
178
178
  width: var(--sidebar-panel-width);
179
179
  flex-shrink: 0;
180
180
  background: var(--background);
181
- border-right: 1px solid var(--sidebar-border);
181
+ border-inline-end: 1px solid var(--sidebar-border);
182
182
  position: relative;
183
183
  z-index: 4;
184
184
  overflow: hidden;
@@ -243,7 +243,7 @@
243
243
  left: 0;
244
244
  width: min(var(--sidebar-panel-width), 90vw);
245
245
  z-index: var(--z-modal);
246
- border-right: 1px solid var(--sidebar-border);
246
+ border-inline-end: 1px solid var(--sidebar-border);
247
247
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
248
248
  }
249
249
  }
@@ -335,7 +335,7 @@
335
335
  align-items: center;
336
336
  gap: var(--space-2);
337
337
  padding: var(--space-2);
338
- text-align: left;
338
+ text-align: start;
339
339
  font-size: var(--text-sm);
340
340
  color: var(--sidebar-fg);
341
341
  background: transparent;
@@ -400,8 +400,8 @@
400
400
  list-style: none;
401
401
  margin: 0.125rem 0 0;
402
402
  padding: 0.125rem 0 0.125rem 0.625rem;
403
- margin-left: 0.875rem;
404
- border-left: 1px solid var(--sidebar-border);
403
+ margin-inline-start: 0.875rem;
404
+ border-inline-start: 1px solid var(--sidebar-border);
405
405
  display: flex;
406
406
  flex-direction: column;
407
407
  gap: 0.125rem;
@@ -453,7 +453,7 @@
453
453
  .sidebar__chevron {
454
454
  width: 0.875rem !important;
455
455
  height: 0.875rem !important;
456
- margin-left: auto;
456
+ margin-inline-start: auto;
457
457
  flex-shrink: 0;
458
458
  transition: transform 150ms ease;
459
459
  color: var(--foreground-muted);
@@ -474,10 +474,10 @@
474
474
  gap: 0.125rem;
475
475
  margin: 0;
476
476
  padding: 0;
477
- border-left: 0;
477
+ border-inline-start: 0;
478
478
  }
479
479
  .sidebar__collapsible-flyout .sidebar__menu-sub-button {
480
- padding-left: 0.625rem;
480
+ padding-inline-start: 0.625rem;
481
481
  }
482
482
 
483
483
  /* collapsed=icon 상태에서는 chevron 숨기고 content도 숨김 */
@@ -36,7 +36,7 @@
36
36
  top: 50%;
37
37
  width: 1rem;
38
38
  height: 1rem;
39
- margin-left: -0.5rem;
39
+ margin-inline-start: -0.5rem;
40
40
  transform: translateY(-50%);
41
41
  background: var(--background);
42
42
  border: 2px solid var(--primary);
@@ -59,6 +59,6 @@
59
59
  .sh-ui-slider__thumb {
60
60
  width: 1.25rem;
61
61
  height: 1.25rem;
62
- margin-left: -0.625rem;
62
+ margin-inline-start: -0.625rem;
63
63
  }
64
64
  }
@@ -36,7 +36,7 @@
36
36
  top: 50%;
37
37
  width: 1rem;
38
38
  height: 1rem;
39
- margin-left: -0.5rem;
39
+ margin-inline-start: -0.5rem;
40
40
  transform: translateY(-50%);
41
41
  background: var(--background);
42
42
  border: 2px solid var(--primary);
@@ -59,6 +59,6 @@
59
59
  .slider__thumb {
60
60
  width: 1.25rem;
61
61
  height: 1.25rem;
62
- margin-left: -0.625rem;
62
+ margin-inline-start: -0.625rem;
63
63
  }
64
64
  }
@@ -81,3 +81,30 @@
81
81
  transition-duration: 0.01ms !important;
82
82
  }
83
83
  }
84
+
85
+ /* Windows 고대비 모드: on/off 가 background-color 만으로 표시되므로 시스템 색에 덮이면 구별 불가. */
86
+ @media (forced-colors: active) {
87
+ .sh-ui-switch {
88
+ border: 1px solid ButtonBorder;
89
+ background: ButtonFace;
90
+ }
91
+ .sh-ui-switch[data-checked] {
92
+ background: Highlight;
93
+ border-color: Highlight;
94
+ }
95
+ .sh-ui-switch__thumb {
96
+ background: ButtonText;
97
+ }
98
+ .sh-ui-switch[data-checked] .sh-ui-switch__thumb {
99
+ background: HighlightText;
100
+ }
101
+ .sh-ui-switch:focus-visible {
102
+ outline-color: Highlight;
103
+ }
104
+ .sh-ui-switch[data-disabled] {
105
+ border-color: GrayText;
106
+ }
107
+ .sh-ui-switch[data-disabled] .sh-ui-switch__thumb {
108
+ background: GrayText;
109
+ }
110
+ }
@@ -81,3 +81,30 @@
81
81
  transition-duration: 0.01ms !important;
82
82
  }
83
83
  }
84
+
85
+ /* Windows 고대비 모드: on/off 가 background-color 만으로 표시되므로 시스템 색에 덮이면 구별 불가. */
86
+ @media (forced-colors: active) {
87
+ .switch {
88
+ border: 1px solid ButtonBorder;
89
+ background: ButtonFace;
90
+ }
91
+ .switch[data-checked] {
92
+ background: Highlight;
93
+ border-color: Highlight;
94
+ }
95
+ .switch__thumb {
96
+ background: ButtonText;
97
+ }
98
+ .switch[data-checked] .switch__thumb {
99
+ background: HighlightText;
100
+ }
101
+ .switch:focus-visible {
102
+ outline-color: Highlight;
103
+ }
104
+ .switch[data-disabled] {
105
+ border-color: GrayText;
106
+ }
107
+ .switch[data-disabled] .switch__thumb {
108
+ background: GrayText;
109
+ }
110
+ }
@@ -146,3 +146,27 @@
146
146
  .sh-ui-tabs[data-variant="plain"] .sh-ui-tabs__indicator {
147
147
  display: none;
148
148
  }
149
+
150
+ /* Windows 고대비 모드: indicator 색이 시스템 색에 덮이면 active 탭 구별 불가. */
151
+ @media (forced-colors: active) {
152
+ .sh-ui-tabs__trigger[data-selected] {
153
+ color: Highlight;
154
+ }
155
+ .sh-ui-tabs[data-variant="underline"] .sh-ui-tabs__indicator {
156
+ box-shadow: inset 0 -2px 0 Highlight;
157
+ }
158
+ .sh-ui-tabs[data-variant="underline"][data-orientation="vertical"] .sh-ui-tabs__indicator {
159
+ box-shadow: inset -2px 0 0 Highlight;
160
+ }
161
+ .sh-ui-tabs[data-variant="pill"] .sh-ui-tabs__indicator {
162
+ border: 1px solid Highlight;
163
+ background: ButtonFace;
164
+ }
165
+ .sh-ui-tabs[data-variant="plain"] .sh-ui-tabs__trigger[data-selected] {
166
+ outline: 1px solid Highlight;
167
+ }
168
+ .sh-ui-tabs__trigger:focus-visible,
169
+ .sh-ui-tabs__content:focus-visible {
170
+ outline-color: Highlight;
171
+ }
172
+ }
@@ -146,3 +146,27 @@
146
146
  .tabs[data-variant="plain"] .tabs__indicator {
147
147
  display: none;
148
148
  }
149
+
150
+ /* Windows 고대비 모드: indicator 색이 시스템 색에 덮이면 active 탭 구별 불가. */
151
+ @media (forced-colors: active) {
152
+ .tabs__trigger[data-selected] {
153
+ color: Highlight;
154
+ }
155
+ .tabs[data-variant="underline"] .tabs__indicator {
156
+ box-shadow: inset 0 -2px 0 Highlight;
157
+ }
158
+ .tabs[data-variant="underline"][data-orientation="vertical"] .tabs__indicator {
159
+ box-shadow: inset -2px 0 0 Highlight;
160
+ }
161
+ .tabs[data-variant="pill"] .tabs__indicator {
162
+ border: 1px solid Highlight;
163
+ background: ButtonFace;
164
+ }
165
+ .tabs[data-variant="plain"] .tabs__trigger[data-selected] {
166
+ outline: 1px solid Highlight;
167
+ }
168
+ .tabs__trigger:focus-visible,
169
+ .tabs__content:focus-visible {
170
+ outline-color: Highlight;
171
+ }
172
+ }
@@ -245,7 +245,7 @@
245
245
  flex-shrink: 0;
246
246
  display: inline-flex;
247
247
  align-items: center;
248
- margin-left: auto;
248
+ margin-inline-start: auto;
249
249
  }
250
250
 
251
251
  /* ── Close ── */
@@ -253,7 +253,7 @@
253
253
  .sh-ui-toast__close {
254
254
  position: absolute;
255
255
  top: 0.375rem;
256
- right: 0.375rem;
256
+ inset-inline-end: 0.375rem;
257
257
  display: inline-flex;
258
258
  align-items: center;
259
259
  justify-content: center;
@@ -245,7 +245,7 @@
245
245
  flex-shrink: 0;
246
246
  display: inline-flex;
247
247
  align-items: center;
248
- margin-left: auto;
248
+ margin-inline-start: auto;
249
249
  }
250
250
 
251
251
  /* ── Close ── */
@@ -253,7 +253,7 @@
253
253
  .toast__close {
254
254
  position: absolute;
255
255
  top: 0.375rem;
256
- right: 0.375rem;
256
+ inset-inline-end: 0.375rem;
257
257
  display: inline-flex;
258
258
  align-items: center;
259
259
  justify-content: center;
@@ -83,3 +83,19 @@
83
83
  transition: none;
84
84
  }
85
85
  }
86
+
87
+ /* Windows 고대비 모드: pressed 가 background-color 만으로 표시되므로 시스템 색에 덮이면 구별 불가. */
88
+ @media (forced-colors: active) {
89
+ .sh-ui-toggle[data-pressed] {
90
+ background: Highlight;
91
+ color: HighlightText;
92
+ border-color: Highlight;
93
+ }
94
+ .sh-ui-toggle:focus-visible {
95
+ outline-color: Highlight;
96
+ }
97
+ .sh-ui-toggle:disabled {
98
+ color: GrayText;
99
+ border-color: GrayText;
100
+ }
101
+ }
@@ -83,3 +83,19 @@
83
83
  transition: none;
84
84
  }
85
85
  }
86
+
87
+ /* Windows 고대비 모드: pressed 가 background-color 만으로 표시되므로 시스템 색에 덮이면 구별 불가. */
88
+ @media (forced-colors: active) {
89
+ .toggle[data-pressed] {
90
+ background: Highlight;
91
+ color: HighlightText;
92
+ border-color: Highlight;
93
+ }
94
+ .toggle:focus-visible {
95
+ outline-color: Highlight;
96
+ }
97
+ .toggle:disabled {
98
+ color: GrayText;
99
+ border-color: GrayText;
100
+ }
101
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh-ui-cli",
3
- "version": "0.59.3",
3
+ "version": "0.59.5",
4
4
  "description": "sh-ui CLI — 프로젝트 스캐폴드(create) + 컴포넌트 추가(add/list/remove) + IDE-내 AI용 MCP 서버",
5
5
  "license": "MIT",
6
6
  "repository": {