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
@@ -2,6 +2,35 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$description": "sh-ui 릴리즈 노트 단일 소스. docs(React)와 showcase(Flutter)가 함께 읽는다. 새 릴리즈마다 맨 앞에 추가.",
4
4
  "versions": [
5
+ {
6
+ "version": "0.59.5",
7
+ "date": "2026-05-06",
8
+ "title": "접근성 라운드 5 — RTL via logical properties",
9
+ "type": "patch",
10
+ "highlights": [
11
+ "**모든 컴포넌트 CSS 를 logical property 로 전환** — `padding-left/right` → `padding-inline-start/end`, `margin-left/right` → `margin-inline-start/end`, `border-left/right` → `border-inline-start/end`, `text-align: left/right` → `start/end`. 60+ 파일, 155 라인 변경.",
12
+ "**affix / icon column / 닫기 버튼 등 절대 위치 요소** — `left:` / `right:` 도 `inset-inline-start/end` 로 전환. Input affix prefix/suffix, Dropdown/Context Menu indicator, Code-panel 복사 버튼, Carousel 컨트롤, Page-toc 위치, Toast close 버튼.",
13
+ "**그대로 유지한 패턴** — `left: 50% + transform: translateX(-50%)` 센터링 hack, `[data-side=\"left|right\"]` 사용자 명시 사이드 (Sidebar / Toast position), JS 가 측정해 주입하는 `--active-tab-left` (Tabs).",
14
+ "**RTL 효과** — `<html dir=\"rtl\">` 또는 `direction: rtl` 컨테이너에서 자동으로 padding/margin/icon-position 이 미러링. Arabic, Hebrew, Persian 등 지원.",
15
+ "**LTR 영향 0** — logical 속성은 LTR 에서 기존 physical 과 동일하게 해석. 회귀 없음.",
16
+ "**3 variant 동기화** — registry/react plain CSS + CSS Modules + apps/docs + Tailwind variant 의 inline CSS string."
17
+ ],
18
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.59.5"
19
+ },
20
+ {
21
+ "version": "0.59.4",
22
+ "date": "2026-05-06",
23
+ "title": "접근성 라운드 4 — forced-colors 모드 (Windows High Contrast)",
24
+ "type": "patch",
25
+ "highlights": [
26
+ "**`@media (forced-colors: active)` 블록 추가** — Windows 고대비 / Edge 강제 색 모드에서 시스템 컬러 (Highlight, ButtonBorder, ButtonText, GrayText) 로 폴백. 사용자가 색 토큰을 OS 색상에 강제 매핑해도 컴포넌트 상태 (checked/pressed/active) 가 시각적으로 구별됨.",
27
+ "**대상 컴포넌트** — `Checkbox` / `Radio` (checked indicator) / `Switch` (on/off thumb + track) / `Tabs` (active indicator + selected color) / `Toggle` (pressed background+border).",
28
+ "**문제 원인** — 기존 디자인이 `background: var(--primary)` 만으로 active 상태를 표현. 강제 색 모드에서 `--primary` 가 시스템 `Canvas`/`ButtonFace` 로 덮이면 unchecked 와 동일하게 보여 구별 불가. 이제 `Highlight` (selection color) 로 명시 폴백.",
29
+ "**3 variant 동기화** — registry/react plain CSS + CSS Modules + apps/docs. Tailwind variant 는 별도 라운드 (forced-colors: 모디파이어 필요).",
30
+ "**일반 사용자 영향 0** — forced-colors 미활성 시 룰 무시. 활성 시에만 시스템 색이 우선되며 디자인 토큰을 덮어씀."
31
+ ],
32
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.59.4"
33
+ },
5
34
  {
6
35
  "version": "0.59.3",
7
36
  "date": "2026-05-06",
@@ -30,7 +30,7 @@
30
30
  font-size: 0.9375rem;
31
31
  font-weight: var(--weight-medium);
32
32
  line-height: 1.4;
33
- text-align: left;
33
+ text-align: start;
34
34
  cursor: pointer;
35
35
  transition: background-color var(--duration-fast) var(--ease-standard);
36
36
  -webkit-tap-highlight-color: transparent;
@@ -30,7 +30,7 @@
30
30
  font-size: 0.9375rem;
31
31
  font-weight: var(--weight-medium);
32
32
  line-height: 1.4;
33
- text-align: left;
33
+ text-align: start;
34
34
  cursor: pointer;
35
35
  transition: background-color var(--duration-fast) var(--ease-standard);
36
36
  -webkit-tap-highlight-color: transparent;
@@ -82,8 +82,8 @@
82
82
  .sh-ui-card__header,
83
83
  .sh-ui-card__content,
84
84
  .sh-ui-card__footer {
85
- padding-left: var(--space-4);
86
- padding-right: var(--space-4);
85
+ padding-inline-start: var(--space-4);
86
+ padding-inline-end: var(--space-4);
87
87
  }
88
88
  .sh-ui-card__footer {
89
89
  flex-wrap: wrap;
@@ -80,8 +80,8 @@
80
80
  .header,
81
81
  .content,
82
82
  .footer {
83
- padding-left: var(--space-4);
84
- padding-right: var(--space-4);
83
+ padding-inline-start: var(--space-4);
84
+ padding-inline-end: var(--space-4);
85
85
  }
86
86
  .footer {
87
87
  flex-wrap: wrap;
@@ -111,7 +111,7 @@
111
111
  .sh-ui-carousel__indicators[data-orientation="vertical"] {
112
112
  position: absolute;
113
113
  top: 50%;
114
- right: 0.5rem;
114
+ inset-inline-end: 0.5rem;
115
115
  margin-top: 0;
116
116
  flex-direction: column;
117
117
  transform: translateY(-50%);
@@ -111,7 +111,7 @@
111
111
  .carousel__indicators[data-orientation="vertical"] {
112
112
  position: absolute;
113
113
  top: 50%;
114
- right: 0.5rem;
114
+ inset-inline-end: 0.5rem;
115
115
  margin-top: 0;
116
116
  flex-direction: column;
117
117
  transform: translateY(-50%);
@@ -73,3 +73,23 @@
73
73
  transition: none;
74
74
  }
75
75
  }
76
+
77
+ /* Windows 고대비 모드: 색만으로 표시되는 checked 상태가 시스템 색에 덮여 사라지는 걸 방지. */
78
+ @media (forced-colors: active) {
79
+ .sh-ui-checkbox {
80
+ border-color: ButtonBorder;
81
+ }
82
+ .sh-ui-checkbox[data-checked],
83
+ .sh-ui-checkbox[data-indeterminate] {
84
+ background: Highlight;
85
+ border-color: Highlight;
86
+ color: HighlightText;
87
+ }
88
+ .sh-ui-checkbox:focus-visible {
89
+ outline-color: Highlight;
90
+ }
91
+ .sh-ui-checkbox[data-disabled] {
92
+ border-color: GrayText;
93
+ color: GrayText;
94
+ }
95
+ }
@@ -73,3 +73,23 @@
73
73
  transition: none;
74
74
  }
75
75
  }
76
+
77
+ /* Windows 고대비 모드: 색만으로 표시되는 checked 상태가 시스템 색에 덮여 사라지는 걸 방지. */
78
+ @media (forced-colors: active) {
79
+ .checkbox {
80
+ border-color: ButtonBorder;
81
+ }
82
+ .checkbox[data-checked],
83
+ .checkbox[data-indeterminate] {
84
+ background: Highlight;
85
+ border-color: Highlight;
86
+ color: HighlightText;
87
+ }
88
+ .checkbox:focus-visible {
89
+ outline-color: Highlight;
90
+ }
91
+ .checkbox[data-disabled] {
92
+ border-color: GrayText;
93
+ color: GrayText;
94
+ }
95
+ }
@@ -153,9 +153,9 @@ if (typeof document !== "undefined" && !document.querySelector("style[data-sh-ui
153
153
  .sh-ui-code-editor .cm-scroller { font-family: inherit; min-height: var(--sh-ui-code-editor-min-height, 7.5rem); max-height: var(--sh-ui-code-editor-max-height, 25rem); }
154
154
  .sh-ui-code-editor .cm-content { caret-color: var(--foreground); color: var(--foreground); padding: var(--space-3) 0; }
155
155
  .sh-ui-code-editor .cm-line { padding: 0 var(--space-3); }
156
- .sh-ui-code-editor .cm-gutters { background: var(--background-subtle); color: var(--foreground-muted); border-right: 1px solid var(--border); }
156
+ .sh-ui-code-editor .cm-gutters { background: var(--background-subtle); color: var(--foreground-muted); border-inline-end: 1px solid var(--border); }
157
157
  .sh-ui-code-editor .cm-activeLineGutter, .sh-ui-code-editor .cm-activeLine { background: var(--background-muted); }
158
- .sh-ui-code-editor .cm-cursor, .sh-ui-code-editor .cm-dropCursor { border-left-color: var(--foreground); }
158
+ .sh-ui-code-editor .cm-cursor, .sh-ui-code-editor .cm-dropCursor { border-inline-start-color: var(--foreground); }
159
159
  .sh-ui-code-editor .cm-selectionBackground, .sh-ui-code-editor .cm-editor .cm-selectionBackground, .sh-ui-code-editor .cm-editor.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .sh-ui-code-editor ::selection { background: var(--background-muted) !important; }
160
160
  .sh-ui-code-editor .cm-placeholder { color: var(--foreground-muted); }
161
161
  .sh-ui-code-editor .cm-tooltip { background: var(--background); border: 1px solid var(--border); color: var(--foreground); border-radius: calc(var(--radius) - 2px); }
@@ -40,7 +40,7 @@
40
40
  .sh-ui-code-editor .cm-gutters {
41
41
  background: var(--background-subtle);
42
42
  color: var(--foreground-muted);
43
- border-right: 1px solid var(--border);
43
+ border-inline-end: 1px solid var(--border);
44
44
  }
45
45
  .sh-ui-code-editor .cm-activeLineGutter,
46
46
  .sh-ui-code-editor .cm-activeLine {
@@ -48,7 +48,7 @@
48
48
  }
49
49
  .sh-ui-code-editor .cm-cursor,
50
50
  .sh-ui-code-editor .cm-dropCursor {
51
- border-left-color: var(--foreground);
51
+ border-inline-start-color: var(--foreground);
52
52
  }
53
53
  .sh-ui-code-editor .cm-selectionBackground,
54
54
  .sh-ui-code-editor .cm-editor .cm-selectionBackground,
@@ -40,7 +40,7 @@
40
40
  .code-editor .cm-gutters {
41
41
  background: var(--background-subtle);
42
42
  color: var(--foreground-muted);
43
- border-right: 1px solid var(--border);
43
+ border-inline-end: 1px solid var(--border);
44
44
  }
45
45
  .code-editor .cm-activeLineGutter,
46
46
  .code-editor .cm-activeLine {
@@ -48,7 +48,7 @@
48
48
  }
49
49
  .code-editor .cm-cursor,
50
50
  .code-editor .cm-dropCursor {
51
- border-left-color: var(--foreground);
51
+ border-inline-start-color: var(--foreground);
52
52
  }
53
53
  .code-editor .cm-selectionBackground,
54
54
  .code-editor .cm-editor .cm-selectionBackground,
@@ -33,7 +33,7 @@
33
33
  .sh-ui-code__copy-floating {
34
34
  position: absolute;
35
35
  top: var(--space-2);
36
- right: var(--space-2);
36
+ inset-inline-end: var(--space-2);
37
37
  z-index: 1;
38
38
  opacity: 0;
39
39
  transition: opacity var(--duration-fast);
@@ -116,8 +116,8 @@
116
116
  counter-increment: step;
117
117
  display: inline-block;
118
118
  width: 1.75rem;
119
- margin-right: var(--space-4);
120
- text-align: right;
119
+ margin-inline-end: var(--space-4);
120
+ text-align: end;
121
121
  color: var(--foreground-muted);
122
122
  opacity: 0.7;
123
123
  user-select: none;
@@ -33,7 +33,7 @@
33
33
  .code__copy-floating {
34
34
  position: absolute;
35
35
  top: var(--space-2);
36
- right: var(--space-2);
36
+ inset-inline-end: var(--space-2);
37
37
  z-index: 1;
38
38
  opacity: 0;
39
39
  transition: opacity var(--duration-fast);
@@ -116,8 +116,8 @@
116
116
  counter-increment: step;
117
117
  display: inline-block;
118
118
  width: 1.75rem;
119
- margin-right: var(--space-4);
120
- text-align: right;
119
+ margin-inline-end: var(--space-4);
120
+ text-align: end;
121
121
  color: var(--foreground-muted);
122
122
  opacity: 0.7;
123
123
  user-select: none;
@@ -36,7 +36,7 @@
36
36
  position: absolute;
37
37
  width: 0.875rem;
38
38
  height: 0.875rem;
39
- margin-left: -0.4375rem;
39
+ margin-inline-start: -0.4375rem;
40
40
  margin-top: -0.4375rem;
41
41
  border: 2px solid #fff;
42
42
  border-radius: 50%;
@@ -69,7 +69,7 @@
69
69
  top: 50%;
70
70
  width: 0.875rem;
71
71
  height: 0.875rem;
72
- margin-left: -0.4375rem;
72
+ margin-inline-start: -0.4375rem;
73
73
  transform: translateY(-50%);
74
74
  background: #fff;
75
75
  border-radius: 50%;
@@ -36,7 +36,7 @@
36
36
  position: absolute;
37
37
  width: 0.875rem;
38
38
  height: 0.875rem;
39
- margin-left: -0.4375rem;
39
+ margin-inline-start: -0.4375rem;
40
40
  margin-top: -0.4375rem;
41
41
  border: 2px solid #fff;
42
42
  border-radius: 50%;
@@ -69,7 +69,7 @@
69
69
  top: 50%;
70
70
  width: 0.875rem;
71
71
  height: 0.875rem;
72
- margin-left: -0.4375rem;
72
+ margin-inline-start: -0.4375rem;
73
73
  transform: translateY(-50%);
74
74
  background: #fff;
75
75
  border-radius: 50%;
@@ -83,7 +83,7 @@
83
83
 
84
84
  .sh-ui-combobox__item-indicator {
85
85
  order: 1;
86
- margin-left: auto;
86
+ margin-inline-start: auto;
87
87
  display: inline-flex;
88
88
  align-items: center;
89
89
  justify-content: center;
@@ -121,7 +121,7 @@
121
121
  align-items: center;
122
122
  gap: var(--space-1);
123
123
  padding: 0.125rem 0.375rem 0.125rem var(--space-2);
124
- margin-right: var(--space-1);
124
+ margin-inline-end: var(--space-1);
125
125
  font-size: var(--text-xs);
126
126
  line-height: 1.25rem;
127
127
  background: var(--background-muted);
@@ -83,7 +83,7 @@
83
83
 
84
84
  .combobox__item-indicator {
85
85
  order: 1;
86
- margin-left: auto;
86
+ margin-inline-start: auto;
87
87
  display: inline-flex;
88
88
  align-items: center;
89
89
  justify-content: center;
@@ -121,7 +121,7 @@
121
121
  align-items: center;
122
122
  gap: var(--space-1);
123
123
  padding: 0.125rem 0.375rem 0.125rem var(--space-2);
124
- margin-right: var(--space-1);
124
+ margin-inline-end: var(--space-1);
125
125
  font-size: var(--text-xs);
126
126
  line-height: 1.25rem;
127
127
  background: var(--background-muted);
@@ -78,12 +78,12 @@
78
78
  }
79
79
 
80
80
  .sh-ui-cm__item--check {
81
- padding-left: 1.75rem;
81
+ padding-inline-start: 1.75rem;
82
82
  }
83
83
 
84
84
  .sh-ui-cm__item-indicator {
85
85
  position: absolute;
86
- left: 0.5rem;
86
+ inset-inline-start: 0.5rem;
87
87
  display: inline-flex;
88
88
  align-items: center;
89
89
  justify-content: center;
@@ -119,7 +119,7 @@
119
119
  display: inline-flex;
120
120
  align-items: center;
121
121
  justify-content: center;
122
- margin-left: auto;
122
+ margin-inline-start: auto;
123
123
  color: var(--foreground-muted);
124
124
  }
125
125
 
@@ -78,12 +78,12 @@
78
78
  }
79
79
 
80
80
  .cm__item--check {
81
- padding-left: 1.75rem;
81
+ padding-inline-start: 1.75rem;
82
82
  }
83
83
 
84
84
  .cm__item-indicator {
85
85
  position: absolute;
86
- left: 0.5rem;
86
+ inset-inline-start: 0.5rem;
87
87
  display: inline-flex;
88
88
  align-items: center;
89
89
  justify-content: center;
@@ -119,7 +119,7 @@
119
119
  display: inline-flex;
120
120
  align-items: center;
121
121
  justify-content: center;
122
- margin-left: auto;
122
+ margin-inline-start: auto;
123
123
  color: var(--foreground-muted);
124
124
  }
125
125
 
@@ -63,7 +63,7 @@
63
63
  flex-shrink: 0;
64
64
  display: inline-flex;
65
65
  color: var(--foreground-muted);
66
- margin-left: var(--space-2);
66
+ margin-inline-start: var(--space-2);
67
67
  }
68
68
 
69
69
  /* ── Positioner / Popup ── */
@@ -63,7 +63,7 @@
63
63
  flex-shrink: 0;
64
64
  display: inline-flex;
65
65
  color: var(--foreground-muted);
66
- margin-left: var(--space-2);
66
+ margin-inline-start: var(--space-2);
67
67
  }
68
68
 
69
69
  /* ── Positioner / Popup ── */
@@ -86,12 +86,12 @@
86
86
 
87
87
  /* checkbox/radio item — 왼쪽 인디케이터 공간 확보 */
88
88
  .sh-ui-dm__item--check {
89
- padding-left: 1.75rem;
89
+ padding-inline-start: 1.75rem;
90
90
  }
91
91
 
92
92
  .sh-ui-dm__item-indicator {
93
93
  position: absolute;
94
- left: 0.5rem;
94
+ inset-inline-start: 0.5rem;
95
95
  display: inline-flex;
96
96
  align-items: center;
97
97
  justify-content: center;
@@ -129,7 +129,7 @@
129
129
  display: inline-flex;
130
130
  align-items: center;
131
131
  justify-content: center;
132
- margin-left: auto;
132
+ margin-inline-start: auto;
133
133
  color: var(--foreground-muted);
134
134
  }
135
135
 
@@ -86,12 +86,12 @@
86
86
 
87
87
  /* checkbox/radio item — 왼쪽 인디케이터 공간 확보 */
88
88
  .dm__item--check {
89
- padding-left: 1.75rem;
89
+ padding-inline-start: 1.75rem;
90
90
  }
91
91
 
92
92
  .dm__item-indicator {
93
93
  position: absolute;
94
- left: 0.5rem;
94
+ inset-inline-start: 0.5rem;
95
95
  display: inline-flex;
96
96
  align-items: center;
97
97
  justify-content: center;
@@ -129,7 +129,7 @@
129
129
  display: inline-flex;
130
130
  align-items: center;
131
131
  justify-content: center;
132
- margin-left: auto;
132
+ margin-inline-start: auto;
133
133
  color: var(--foreground-muted);
134
134
  }
135
135
 
@@ -144,7 +144,7 @@
144
144
  display: inline-flex;
145
145
  align-items: center;
146
146
  gap: var(--space-2);
147
- margin-left: auto;
147
+ margin-inline-start: auto;
148
148
  flex-shrink: 0;
149
149
  }
150
150
 
@@ -296,7 +296,7 @@
296
296
  bottom: 0;
297
297
  width: min(17.5rem, 85vw);
298
298
  background: var(--background-subtle);
299
- border-right: 1px solid var(--border);
299
+ border-inline-end: 1px solid var(--border);
300
300
  z-index: var(--z-modal);
301
301
  transform: translateX(-100%);
302
302
  transition: transform var(--duration-base) var(--ease-standard);
@@ -144,7 +144,7 @@
144
144
  display: inline-flex;
145
145
  align-items: center;
146
146
  gap: var(--space-2);
147
- margin-left: auto;
147
+ margin-inline-start: auto;
148
148
  flex-shrink: 0;
149
149
  }
150
150
 
@@ -296,7 +296,7 @@
296
296
  bottom: 0;
297
297
  width: min(17.5rem, 85vw);
298
298
  background: var(--background-subtle);
299
- border-right: 1px solid var(--border);
299
+ border-inline-end: 1px solid var(--border);
300
300
  z-index: var(--z-modal);
301
301
  transform: translateX(-100%);
302
302
  transition: transform var(--duration-base) var(--ease-standard);
@@ -65,8 +65,8 @@
65
65
  display: block;
66
66
  }
67
67
 
68
- .sh-ui-input--with-prefix { padding-left: var(--space-10); }
69
- .sh-ui-input--with-suffix { padding-right: var(--space-10); }
68
+ .sh-ui-input--with-prefix { padding-inline-start: var(--space-10); }
69
+ .sh-ui-input--with-suffix { padding-inline-end: var(--space-10); }
70
70
 
71
71
  .sh-ui-input__affix {
72
72
  position: absolute;
@@ -78,8 +78,8 @@
78
78
  color: var(--foreground-muted);
79
79
  pointer-events: none;
80
80
  }
81
- .sh-ui-input__affix--prefix { left: var(--space-3); }
82
- .sh-ui-input__affix--suffix { right: var(--space-1); }
81
+ .sh-ui-input__affix--prefix { inset-inline-start: var(--space-3); }
82
+ .sh-ui-input__affix--suffix { inset-inline-end: var(--space-1); }
83
83
 
84
84
  /* suffix 내부 클릭 가능한 요소(버튼 등)는 pointer-events 복원 */
85
85
  .sh-ui-input__affix > * { pointer-events: auto; }
@@ -64,8 +64,8 @@
64
64
  display: block;
65
65
  }
66
66
 
67
- .withPrefix { padding-left: var(--space-10); }
68
- .withSuffix { padding-right: var(--space-10); }
67
+ .withPrefix { padding-inline-start: var(--space-10); }
68
+ .withSuffix { padding-inline-end: var(--space-10); }
69
69
 
70
70
  .affix {
71
71
  position: absolute;
@@ -77,8 +77,8 @@
77
77
  color: var(--foreground-muted);
78
78
  pointer-events: none;
79
79
  }
80
- .affixPrefix { left: var(--space-3); }
81
- .affixSuffix { right: var(--space-1); }
80
+ .affixPrefix { inset-inline-start: var(--space-3); }
81
+ .affixSuffix { inset-inline-end: var(--space-1); }
82
82
 
83
83
  .affix > * { pointer-events: auto; }
84
84
 
@@ -95,19 +95,19 @@ if (typeof document !== "undefined" && !document.querySelector("style[data-sh-ui
95
95
  .sh-ui-md-editor__preview-inner h3 { font-size: 1.125rem; }
96
96
  .sh-ui-md-editor__preview-inner h4, .sh-ui-md-editor__preview-inner h5, .sh-ui-md-editor__preview-inner h6 { font-size: 1rem; }
97
97
  .sh-ui-md-editor__preview-inner p, .sh-ui-md-editor__preview-inner ul, .sh-ui-md-editor__preview-inner ol, .sh-ui-md-editor__preview-inner blockquote, .sh-ui-md-editor__preview-inner pre, .sh-ui-md-editor__preview-inner table { margin-top: 0; margin-bottom: var(--space-3); }
98
- .sh-ui-md-editor__preview-inner ul, .sh-ui-md-editor__preview-inner ol { padding-left: var(--space-5); }
98
+ .sh-ui-md-editor__preview-inner ul, .sh-ui-md-editor__preview-inner ol { padding-inline-start: var(--space-5); }
99
99
  .sh-ui-md-editor__preview-inner li { margin-bottom: var(--space-1); }
100
- .sh-ui-md-editor__preview-inner li > input[type="checkbox"] { margin-right: var(--space-2); }
100
+ .sh-ui-md-editor__preview-inner li > input[type="checkbox"] { margin-inline-end: var(--space-2); }
101
101
  .sh-ui-md-editor__preview-inner a { color: var(--primary); text-decoration: underline; text-underline-offset: 2px; }
102
102
  .sh-ui-md-editor__preview-inner a:hover { text-decoration-thickness: 2px; }
103
- .sh-ui-md-editor__preview-inner blockquote { 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; }
103
+ .sh-ui-md-editor__preview-inner blockquote { 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; }
104
104
  .sh-ui-md-editor__preview-inner blockquote > :last-child { margin-bottom: 0; }
105
105
  .sh-ui-md-editor__preview-inner 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); }
106
106
  .sh-ui-md-editor__preview-inner pre { 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; }
107
107
  .sh-ui-md-editor__preview-inner pre > code { padding: 0; background: transparent; font-size: inherit; }
108
108
  .sh-ui-md-editor__preview-inner hr { border: 0; border-top: 1px solid var(--border); margin: var(--space-4) 0; }
109
109
  .sh-ui-md-editor__preview-inner table { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
110
- .sh-ui-md-editor__preview-inner th, .sh-ui-md-editor__preview-inner td { padding: var(--space-2) var(--space-3); border: 1px solid var(--border); text-align: left; }
110
+ .sh-ui-md-editor__preview-inner th, .sh-ui-md-editor__preview-inner td { padding: var(--space-2) var(--space-3); border: 1px solid var(--border); text-align: start; }
111
111
  .sh-ui-md-editor__preview-inner thead { background: var(--background-subtle); }
112
112
  .sh-ui-md-editor__preview-inner img { max-width: 100%; height: auto; border-radius: calc(var(--radius) - 2px); }
113
113
  .sh-ui-md-editor__preview-inner del { color: var(--foreground-muted); }
@@ -76,13 +76,13 @@
76
76
 
77
77
  .sh-ui-md-editor__preview-inner ul,
78
78
  .sh-ui-md-editor__preview-inner ol {
79
- padding-left: var(--space-5);
79
+ padding-inline-start: var(--space-5);
80
80
  }
81
81
  .sh-ui-md-editor__preview-inner li {
82
82
  margin-bottom: var(--space-1);
83
83
  }
84
84
  .sh-ui-md-editor__preview-inner li > input[type="checkbox"] {
85
- margin-right: var(--space-2);
85
+ margin-inline-end: var(--space-2);
86
86
  }
87
87
 
88
88
  .sh-ui-md-editor__preview-inner a {
@@ -96,7 +96,7 @@
96
96
 
97
97
  .sh-ui-md-editor__preview-inner blockquote {
98
98
  padding: var(--space-2) var(--space-3);
99
- border-left: 3px solid var(--border-strong);
99
+ border-inline-start: 3px solid var(--border-strong);
100
100
  background: var(--background-subtle);
101
101
  color: var(--foreground-muted);
102
102
  border-radius: 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0;
@@ -143,7 +143,7 @@
143
143
  .sh-ui-md-editor__preview-inner td {
144
144
  padding: var(--space-2) var(--space-3);
145
145
  border: 1px solid var(--border);
146
- text-align: left;
146
+ text-align: start;
147
147
  }
148
148
  .sh-ui-md-editor__preview-inner thead {
149
149
  background: var(--background-subtle);
@@ -76,13 +76,13 @@
76
76
 
77
77
  .md-editor__preview-inner ul,
78
78
  .md-editor__preview-inner ol {
79
- padding-left: var(--space-5);
79
+ padding-inline-start: var(--space-5);
80
80
  }
81
81
  .md-editor__preview-inner li {
82
82
  margin-bottom: var(--space-1);
83
83
  }
84
84
  .md-editor__preview-inner li > input[type="checkbox"] {
85
- margin-right: var(--space-2);
85
+ margin-inline-end: var(--space-2);
86
86
  }
87
87
 
88
88
  .md-editor__preview-inner a {
@@ -96,7 +96,7 @@
96
96
 
97
97
  .md-editor__preview-inner blockquote {
98
98
  padding: var(--space-2) var(--space-3);
99
- border-left: 3px solid var(--border-strong);
99
+ border-inline-start: 3px solid var(--border-strong);
100
100
  background: var(--background-subtle);
101
101
  color: var(--foreground-muted);
102
102
  border-radius: 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0;
@@ -143,7 +143,7 @@
143
143
  .md-editor__preview-inner td {
144
144
  padding: var(--space-2) var(--space-3);
145
145
  border: 1px solid var(--border);
146
- text-align: left;
146
+ text-align: start;
147
147
  }
148
148
  .md-editor__preview-inner thead {
149
149
  background: var(--background-subtle);
@@ -15,7 +15,7 @@
15
15
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
16
16
  font-size: var(--text-xs);
17
17
  line-height: 1.2;
18
- text-align: right;
18
+ text-align: end;
19
19
  border: 1px solid transparent;
20
20
  border-radius: calc(var(--radius) - 4px);
21
21
  background: transparent;
@@ -15,7 +15,7 @@
15
15
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
16
16
  font-size: var(--text-xs);
17
17
  line-height: 1.2;
18
- text-align: right;
18
+ text-align: end;
19
19
  border: 1px solid transparent;
20
20
  border-radius: calc(var(--radius) - 4px);
21
21
  background: transparent;