@opencode-ai/ui 0.0.0-next-17078 → 0.0.0-next-17080

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 (166) hide show
  1. package/dist/context/i18n.d.ts +10 -1
  2. package/dist/context/marked-parser.d.ts +2 -0
  3. package/dist/context/marked-theme-register.d.ts +1 -0
  4. package/dist/context/marked-theme.d.ts +2 -0
  5. package/dist/context/marked.d.ts +2 -9
  6. package/dist/i18n/am.d.ts +1 -0
  7. package/dist/i18n/ar.d.ts +38 -0
  8. package/dist/i18n/az.d.ts +1 -0
  9. package/dist/i18n/bg.d.ts +193 -0
  10. package/dist/i18n/bn.d.ts +1 -0
  11. package/dist/i18n/br.d.ts +26 -0
  12. package/dist/i18n/bs.d.ts +26 -0
  13. package/dist/i18n/ca.d.ts +1 -0
  14. package/dist/i18n/cs.d.ts +1 -0
  15. package/dist/i18n/da.d.ts +22 -0
  16. package/dist/i18n/de.d.ts +22 -0
  17. package/dist/i18n/dv.d.ts +1 -0
  18. package/dist/i18n/dz.d.ts +1 -0
  19. package/dist/i18n/el.d.ts +1 -0
  20. package/dist/i18n/es.d.ts +26 -0
  21. package/dist/i18n/et.d.ts +1 -0
  22. package/dist/i18n/fa.d.ts +1 -0
  23. package/dist/i18n/fi.d.ts +1 -0
  24. package/dist/i18n/fo.d.ts +1 -0
  25. package/dist/i18n/fr.d.ts +26 -0
  26. package/dist/i18n/hi.d.ts +1 -0
  27. package/dist/i18n/hr.d.ts +1 -0
  28. package/dist/i18n/hu.d.ts +1 -0
  29. package/dist/i18n/hy.d.ts +1 -0
  30. package/dist/i18n/id.d.ts +1 -0
  31. package/dist/i18n/is.d.ts +1 -0
  32. package/dist/i18n/it.d.ts +1 -0
  33. package/dist/i18n/ja.d.ts +22 -0
  34. package/dist/i18n/ka.d.ts +1 -0
  35. package/dist/i18n/km.d.ts +193 -0
  36. package/dist/i18n/ko.d.ts +22 -0
  37. package/dist/i18n/lo.d.ts +193 -0
  38. package/dist/i18n/lt.d.ts +1 -0
  39. package/dist/i18n/lv.d.ts +1 -0
  40. package/dist/i18n/mk.d.ts +193 -0
  41. package/dist/i18n/mn.d.ts +193 -0
  42. package/dist/i18n/ms.d.ts +1 -0
  43. package/dist/i18n/my.d.ts +193 -0
  44. package/dist/i18n/ne.d.ts +1 -0
  45. package/dist/i18n/nl.d.ts +1 -0
  46. package/dist/i18n/pa.d.ts +1 -0
  47. package/dist/i18n/pl.d.ts +30 -0
  48. package/dist/i18n/ro.d.ts +1 -0
  49. package/dist/i18n/ru.d.ts +30 -0
  50. package/dist/i18n/si.d.ts +1 -0
  51. package/dist/i18n/sk.d.ts +1 -0
  52. package/dist/i18n/sl.d.ts +1 -0
  53. package/dist/i18n/sq.d.ts +1 -0
  54. package/dist/i18n/sr.d.ts +197 -0
  55. package/dist/i18n/sv.d.ts +1 -0
  56. package/dist/i18n/tg.d.ts +193 -0
  57. package/dist/i18n/th.d.ts +22 -0
  58. package/dist/i18n/tk.d.ts +1 -0
  59. package/dist/i18n/tr.d.ts +22 -0
  60. package/dist/i18n/ur.d.ts +1 -0
  61. package/dist/i18n/uz.d.ts +1 -0
  62. package/dist/i18n/vi.d.ts +1 -0
  63. package/dist/i18n/zh.d.ts +22 -0
  64. package/dist/i18n/zht.d.ts +22 -0
  65. package/dist/v2/components/toast-v2.d.ts +19 -10
  66. package/package.json +3 -3
  67. package/src/components/diff-changes.css +2 -0
  68. package/src/components/dropdown-menu.css +2 -2
  69. package/src/components/icon.css +5 -0
  70. package/src/components/icon.tsx +12 -1
  71. package/src/components/provider-icons/sprite.svg +2 -27
  72. package/src/components/resize-handle.css +14 -2
  73. package/src/components/resize-handle.tsx +5 -1
  74. package/src/components/scroll-view.css +1 -1
  75. package/src/components/select.css +5 -3
  76. package/src/components/switch.css +4 -0
  77. package/src/components/tabs.css +54 -26
  78. package/src/components/tabs.tsx +1 -0
  79. package/src/components/text-field.css +2 -2
  80. package/src/components/toast.css +1 -1
  81. package/src/context/i18n.tsx +38 -2
  82. package/src/context/marked-parser.tsx +68 -0
  83. package/src/context/marked-theme-register.tsx +10 -0
  84. package/src/context/marked-theme.tsx +372 -0
  85. package/src/context/marked.tsx +20 -562
  86. package/src/i18n/am.ts +194 -0
  87. package/src/i18n/ar.ts +62 -22
  88. package/src/i18n/az.ts +195 -0
  89. package/src/i18n/bg.ts +195 -0
  90. package/src/i18n/bn.ts +197 -0
  91. package/src/i18n/br.ts +34 -6
  92. package/src/i18n/bs.ts +51 -23
  93. package/src/i18n/ca.ts +199 -0
  94. package/src/i18n/cs.ts +203 -0
  95. package/src/i18n/da.ts +36 -12
  96. package/src/i18n/de.ts +58 -36
  97. package/src/i18n/dv.ts +196 -0
  98. package/src/i18n/dz.ts +197 -0
  99. package/src/i18n/el.ts +195 -0
  100. package/src/i18n/en.ts +24 -0
  101. package/src/i18n/es.ts +45 -17
  102. package/src/i18n/et.ts +195 -0
  103. package/src/i18n/fa.ts +195 -0
  104. package/src/i18n/fi.ts +195 -0
  105. package/src/i18n/fo.ts +195 -0
  106. package/src/i18n/fr.ts +51 -21
  107. package/src/i18n/hi.ts +197 -0
  108. package/src/i18n/hr.ts +200 -0
  109. package/src/i18n/hu.ts +197 -0
  110. package/src/i18n/hy.ts +195 -0
  111. package/src/i18n/id.ts +217 -0
  112. package/src/i18n/is.ts +195 -0
  113. package/src/i18n/it.ts +200 -0
  114. package/src/i18n/ja.ts +29 -5
  115. package/src/i18n/ka.ts +195 -0
  116. package/src/i18n/km.ts +196 -0
  117. package/src/i18n/ko.ts +36 -12
  118. package/src/i18n/lo.ts +195 -0
  119. package/src/i18n/lt.ts +203 -0
  120. package/src/i18n/lv.ts +199 -0
  121. package/src/i18n/mk.ts +195 -0
  122. package/src/i18n/mn.ts +195 -0
  123. package/src/i18n/ms.ts +195 -0
  124. package/src/i18n/my.ts +196 -0
  125. package/src/i18n/ne.ts +197 -0
  126. package/src/i18n/nl.ts +195 -0
  127. package/src/i18n/no.ts +47 -23
  128. package/src/i18n/pa.ts +196 -0
  129. package/src/i18n/pl.ts +57 -24
  130. package/src/i18n/ro.ts +199 -0
  131. package/src/i18n/ru.ts +55 -23
  132. package/src/i18n/si.ts +195 -0
  133. package/src/i18n/sk.ts +203 -0
  134. package/src/i18n/sl.ts +204 -0
  135. package/src/i18n/sq.ts +195 -0
  136. package/src/i18n/sr.ts +200 -0
  137. package/src/i18n/sv.ts +195 -0
  138. package/src/i18n/tg.ts +195 -0
  139. package/src/i18n/th.ts +44 -21
  140. package/src/i18n/tk.ts +195 -0
  141. package/src/i18n/tr.ts +49 -25
  142. package/src/i18n/uk.ts +47 -15
  143. package/src/i18n/ur.ts +196 -0
  144. package/src/i18n/uz.ts +198 -0
  145. package/src/i18n/vi.ts +195 -0
  146. package/src/i18n/zh.ts +52 -29
  147. package/src/i18n/zht.ts +45 -22
  148. package/src/theme/themes/oc-2.json +4 -2
  149. package/src/v2/components/button-v2.css +2 -2
  150. package/src/v2/components/dialog-v2.css +2 -2
  151. package/src/v2/components/dialog-v2.tsx +3 -1
  152. package/src/v2/components/diff-changes-v2.css +2 -0
  153. package/src/v2/components/file-tree-v2.css +6 -2
  154. package/src/v2/components/inline-input-v2.tsx +3 -1
  155. package/src/v2/components/line-comment-v2.css +1 -1
  156. package/src/v2/components/line-comment-v2.tsx +6 -4
  157. package/src/v2/components/select-v2.css +16 -5
  158. package/src/v2/components/switch-v2.css +8 -0
  159. package/src/v2/components/tabs-v2.css +4 -6
  160. package/src/v2/components/tabs-v2.tsx +4 -2
  161. package/src/v2/components/text-input-v2.css +7 -5
  162. package/src/v2/components/text-input-v2.tsx +7 -1
  163. package/src/v2/components/toast-v2.css +132 -122
  164. package/src/v2/components/toast-v2.tsx +208 -73
  165. package/dist/context/marked-code-span.d.ts +0 -10
  166. package/src/context/marked-code-span.ts +0 -17
@@ -48,6 +48,7 @@ export declare const dict: {
48
48
  "ui.lineComment.editorLabel.prefix": string;
49
49
  "ui.lineComment.editorLabel.suffix": string;
50
50
  "ui.lineComment.placeholder": string;
51
+ "ui.lineComment.contextPlaceholder": string;
51
52
  "ui.lineComment.submit": string;
52
53
  "ui.lineComment.cancel": string;
53
54
  "ui.sessionTurn.steps.show": string;
@@ -103,6 +104,23 @@ export declare const dict: {
103
104
  "ui.list.emptyWithFilter.prefix": string;
104
105
  "ui.list.emptyWithFilter.suffix": string;
105
106
  "ui.messageNav.newMessage": string;
107
+ "ui.promptInput.noMatchingItems": string;
108
+ "ui.promptInput.commands": string;
109
+ "ui.promptInput.dropFiles": string;
110
+ "ui.promptInput.removeAttachment": string;
111
+ "ui.promptInput.label": string;
112
+ "ui.promptInput.placeholder.shell": string;
113
+ "ui.promptInput.placeholder.normal": string;
114
+ "ui.promptInput.add": string;
115
+ "ui.promptInput.attachments": string;
116
+ "ui.promptInput.context": string;
117
+ "ui.promptInput.shell": string;
118
+ "ui.promptInput.chooseAgent": string;
119
+ "ui.promptInput.chooseModel": string;
120
+ "ui.promptInput.chooseVariant": string;
121
+ "ui.promptInput.send": string;
122
+ "ui.promptInput.stop": string;
123
+ "ui.tabs.close": string;
106
124
  "ui.textField.copyToClipboard": string;
107
125
  "ui.textField.copyLink": string;
108
126
  "ui.textField.copied": string;
@@ -115,9 +133,11 @@ export declare const dict: {
115
133
  "ui.tool.grep": string;
116
134
  "ui.tool.webfetch": string;
117
135
  "ui.tool.websearch": string;
136
+ "ui.tool.websearch.provider": string;
118
137
  "ui.tool.shell": string;
119
138
  "ui.tool.patch": string;
120
139
  "ui.tool.questions": string;
140
+ "ui.tool.questions.numbered": string;
121
141
  "ui.tool.agent": string;
122
142
  "ui.tool.agent.default": string;
123
143
  "ui.common.file.one": string;
@@ -125,6 +145,8 @@ export declare const dict: {
125
145
  "ui.common.question.one": string;
126
146
  "ui.common.question.other": string;
127
147
  "ui.common.add": string;
148
+ "ui.common.clear": string;
149
+ "ui.common.file": string;
128
150
  "ui.common.back": string;
129
151
  "ui.common.cancel": string;
130
152
  "ui.common.confirm": string;
@@ -1,22 +1,21 @@
1
- import { Toast as Kobalte, toaster } from "@kobalte/core/toast";
2
- import type { ToastRootProps, ToastCloseButtonProps, ToastTitleProps, ToastDescriptionProps } from "@kobalte/core/toast";
1
+ import { type ToasterProps } from "solid-sonner";
3
2
  import type { ComponentProps, JSX } from "solid-js";
3
+ import "./button-v2.css";
4
4
  import "./toast-v2.css";
5
- export interface ToastV2RegionProps extends ComponentProps<typeof Kobalte.Region> {
5
+ export interface ToastV2RegionProps extends ToasterProps {
6
6
  }
7
7
  declare function ToastV2Region(props: ToastV2RegionProps): JSX.Element;
8
- export interface ToastV2RootComponentProps extends ToastRootProps {
9
- class?: string;
10
- classList?: ComponentProps<"li">["classList"];
8
+ export interface ToastV2RootComponentProps {
9
+ toastId: number;
11
10
  children?: JSX.Element;
12
11
  }
13
12
  declare function ToastV2Root(props: ToastV2RootComponentProps): JSX.Element;
14
13
  declare function ToastV2Icon(props: ComponentProps<"div">): JSX.Element;
15
14
  declare function ToastV2Content(props: ComponentProps<"div">): JSX.Element;
16
- declare function ToastV2Title(props: ToastTitleProps & ComponentProps<"div">): JSX.Element;
17
- declare function ToastV2Description(props: ToastDescriptionProps & ComponentProps<"div">): JSX.Element;
15
+ declare function ToastV2Title(props: ComponentProps<"div">): JSX.Element;
16
+ declare function ToastV2Description(props: ComponentProps<"div">): JSX.Element;
18
17
  declare function ToastV2Actions(props: ComponentProps<"div">): JSX.Element;
19
- declare function ToastV2CloseButton(props: ToastCloseButtonProps & ComponentProps<"button">): JSX.Element;
18
+ declare function ToastV2CloseButton(props: ComponentProps<"button">): JSX.Element;
20
19
  export declare const ToastV2: typeof ToastV2Root & {
21
20
  Region: typeof ToastV2Region;
22
21
  Icon: typeof ToastV2Icon;
@@ -26,7 +25,15 @@ export declare const ToastV2: typeof ToastV2Root & {
26
25
  Actions: typeof ToastV2Actions;
27
26
  CloseButton: typeof ToastV2CloseButton;
28
27
  };
29
- export { toaster as toasterV2 };
28
+ export declare const toasterV2: {
29
+ show(render: (props: {
30
+ toastId: number;
31
+ }) => JSX.Element, options?: {
32
+ duration?: number;
33
+ persistent?: boolean;
34
+ }): number;
35
+ dismiss(toastId?: number): string | number | undefined;
36
+ };
30
37
  export interface ToastV2Action {
31
38
  label: string;
32
39
  variant?: "primary" | "secondary";
@@ -36,6 +43,7 @@ export interface ToastV2Options {
36
43
  title?: string;
37
44
  description?: string;
38
45
  icon?: JSX.Element;
46
+ variant?: "default" | "success" | "error" | "loading";
39
47
  duration?: number;
40
48
  persistent?: boolean;
41
49
  actions?: ToastV2Action[];
@@ -46,3 +54,4 @@ export interface ToastV2PromiseOptions<T, U = unknown> {
46
54
  success?: (data: T) => JSX.Element;
47
55
  error?: (error: U) => JSX.Element;
48
56
  }
57
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencode-ai/ui",
3
- "version": "0.0.0-next-17078",
3
+ "version": "0.0.0-next-17080",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -135,8 +135,7 @@
135
135
  "fuzzysort": "3.1.0",
136
136
  "katex": "0.16.27",
137
137
  "luxon": "3.6.1",
138
- "marked": "17.0.6",
139
- "marked-katex-extension": "5.1.6",
138
+ "marked": "18.0.7",
140
139
  "marked-shiki": "1.2.1",
141
140
  "morphdom": "2.7.8",
142
141
  "motion": "12.34.5",
@@ -146,6 +145,7 @@
146
145
  "remend": "1.3.0",
147
146
  "shiki": "4.2.0",
148
147
  "solid-list": "0.3.0",
148
+ "solid-sonner": "0.3.1",
149
149
  "strip-ansi": "7.1.2"
150
150
  },
151
151
  "peerDependencies": {
@@ -1,5 +1,7 @@
1
1
  [data-component="diff-changes"] {
2
2
  display: flex;
3
+ direction: ltr;
4
+ unicode-bidi: isolate;
3
5
  gap: 8px;
4
6
  justify-content: flex-end;
5
7
  align-items: center;
@@ -60,7 +60,7 @@
60
60
 
61
61
  [data-slot="dropdown-menu-checkbox-item"],
62
62
  [data-slot="dropdown-menu-radio-item"] {
63
- padding-right: 28px;
63
+ padding-inline-end: 28px;
64
64
  }
65
65
 
66
66
  [data-slot="dropdown-menu-sub-trigger"] {
@@ -76,7 +76,7 @@
76
76
  width: 16px;
77
77
  height: 16px;
78
78
  position: absolute;
79
- right: 8px;
79
+ inset-inline-end: 8px;
80
80
  top: 50%;
81
81
  transform: translateY(-50%);
82
82
  }
@@ -32,3 +32,8 @@
32
32
  height: auto;
33
33
  }
34
34
  }
35
+
36
+ :dir(rtl) [data-component="icon"][data-directional] [data-slot="icon-svg"],
37
+ :dir(rtl) [data-slot="menu-v2-item-chevron"] {
38
+ transform: scaleX(-1);
39
+ }
@@ -151,7 +151,18 @@ export function Icon(props: IconProps) {
151
151
  onMount(ensureSprite)
152
152
 
153
153
  return (
154
- <div data-component="icon" data-size={local.size || "normal"}>
154
+ <div
155
+ data-component="icon"
156
+ data-size={local.size || "normal"}
157
+ data-directional={
158
+ local.name === "arrow-left" ||
159
+ local.name === "arrow-right" ||
160
+ local.name === "chevron-left" ||
161
+ local.name === "chevron-right"
162
+ ? true
163
+ : undefined
164
+ }
165
+ >
155
166
  <svg
156
167
  data-slot="icon-svg"
157
168
  classList={{
@@ -366,34 +366,9 @@
366
366
  </symbol>
367
367
  <symbol viewBox="0 0 24 24" fill="none" id="openrouter">
368
368
  <path
369
- d="M3.10913 12.07C3.65512 12.07 5.76627 11.5988 6.85825 10.98C7.95023 10.3612 7.95023 10.3612 10.207 8.75965C13.0642 6.73196 15.0845 7.41088 18.3968 7.41088"
369
+ d="M728.039 234C819.325 234 893.323 308.62 893.323 400.668C893.323 492.716 819.325 567.336 728.039 567.336L891.984 732.656C912.81 753.655 898.061 789.56 868.613 789.56H397.472C245.333 789.56 122 665.193 122 511.78C122 358.367 245.333 234 397.472 234H728.039ZM397.472 345.112C306.189 345.112 232.189 419.732 232.189 511.78C232.189 603.828 306.189 678.448 397.472 678.448C488.756 678.448 562.756 603.828 562.756 511.78C562.756 419.732 488.756 345.112 397.472 345.112Z"
370
370
  fill="currentColor"
371
- ></path>
372
- <path
373
- d="M3.10913 12.07C3.65512 12.07 5.76627 11.5988 6.85825 10.98C7.95023 10.3612 7.95023 10.3612 10.207 8.75965C13.0642 6.73196 15.0845 7.41088 18.3968 7.41088"
374
- stroke="currentColor"
375
- stroke-width="3.27593"
376
- ></path>
377
- <path
378
- d="M21.6 7.43108L16.0037 10.6622V4.20001L21.6 7.43108Z"
379
- fill="currentColor"
380
- stroke="currentColor"
381
- stroke-width="0.0363992"
382
- ></path>
383
- <path
384
- d="M3 12.072C3.54599 12.072 5.65714 12.5432 6.74912 13.162C7.8411 13.7808 7.8411 13.7808 10.0978 15.3823C12.9551 17.41 14.9753 16.7311 18.2877 16.7311"
385
- fill="currentColor"
386
- ></path>
387
- <path
388
- d="M3 12.072C3.54599 12.072 5.65714 12.5432 6.74912 13.162C7.8411 13.7808 7.8411 13.7808 10.0978 15.3823C12.9551 17.41 14.9753 16.7311 18.2877 16.7311"
389
- stroke="currentColor"
390
- stroke-width="3.27593"
391
- ></path>
392
- <path
393
- d="M21.4909 16.7109L15.8945 13.4798V19.942L21.4909 16.7109Z"
394
- fill="currentColor"
395
- stroke="currentColor"
396
- stroke-width="0.0363992"
371
+ transform="scale(0.0234375)"
397
372
  ></path>
398
373
  </symbol>
399
374
  <symbol viewBox="0 0 24 24" fill="none" id="opencode">
@@ -14,7 +14,7 @@
14
14
  opacity: 1;
15
15
  }
16
16
 
17
- &[data-direction="horizontal"] {
17
+ &:where([data-direction="horizontal"]) {
18
18
  inset-block: 0;
19
19
  inset-inline-end: 0;
20
20
  width: 8px;
@@ -33,9 +33,21 @@
33
33
  inset-inline-start: 50%;
34
34
  transform: translateX(-50%);
35
35
  }
36
+
37
+ &:dir(rtl) {
38
+ transform: translateX(-50%);
39
+
40
+ &[data-edge="start"] {
41
+ transform: translateX(50%);
42
+ }
43
+
44
+ &::after {
45
+ transform: translateX(50%);
46
+ }
47
+ }
36
48
  }
37
49
 
38
- &[data-direction="vertical"] {
50
+ &:where([data-direction="vertical"]) {
39
51
  inset-inline: 0;
40
52
  inset-block-start: 0;
41
53
  height: 8px;
@@ -33,6 +33,10 @@ export function ResizeHandle(props: ResizeHandleProps) {
33
33
  e.preventDefault()
34
34
  const edge = local.edge ?? (local.direction === "vertical" ? "start" : "end")
35
35
  const start = local.direction === "horizontal" ? e.clientX : e.clientY
36
+ const rtl =
37
+ local.direction === "horizontal" &&
38
+ e.currentTarget instanceof Element &&
39
+ getComputedStyle(e.currentTarget).direction === "rtl"
36
40
  const startSize = local.size
37
41
  const min = local.min
38
42
  const max = local.max
@@ -53,7 +57,7 @@ export function ResizeHandle(props: ResizeHandleProps) {
53
57
  ? edge === "end"
54
58
  ? pos - start
55
59
  : start - pos
56
- : edge === "start"
60
+ : (edge === "start") !== rtl
57
61
  ? start - pos
58
62
  : pos - start
59
63
  current = startSize + delta
@@ -21,7 +21,7 @@
21
21
 
22
22
  .scroll-view__thumb {
23
23
  position: absolute;
24
- right: 0;
24
+ inset-inline-end: 0;
25
25
  top: 0;
26
26
  width: 12px;
27
27
  transition: opacity 200ms ease;
@@ -1,6 +1,7 @@
1
1
  [data-component="select"] {
2
2
  [data-slot="select-select-trigger"] {
3
- padding: 0 4px 0 8px;
3
+ padding-block: 0;
4
+ padding-inline: 8px 4px;
4
5
  box-shadow: none;
5
6
 
6
7
  [data-slot="select-select-trigger-value"] {
@@ -46,7 +47,8 @@
46
47
 
47
48
  &[data-trigger-style="settings"] {
48
49
  [data-slot="select-select-trigger"] {
49
- padding: 6px 6px 6px 12px;
50
+ padding-block: 6px;
51
+ padding-inline: 12px 6px;
50
52
  box-shadow: none;
51
53
  border-radius: 6px;
52
54
  min-width: 160px;
@@ -154,7 +156,7 @@
154
156
  display: flex;
155
157
  align-items: center;
156
158
  justify-content: center;
157
- margin-left: auto;
159
+ margin-inline-start: auto;
158
160
  width: 16px;
159
161
  height: 16px;
160
162
  }
@@ -103,6 +103,10 @@
103
103
  background-color: var(--icon-invert-base);
104
104
  }
105
105
 
106
+ &:dir(rtl)[data-checked] [data-slot="switch-thumb"] {
107
+ transform: translateX(-12px);
108
+ }
109
+
106
110
  &[data-checked]:hover:not([data-disabled], [data-readonly]) [data-slot="switch-control"] {
107
111
  border-color: var(--border-hover);
108
112
  background-color: var(--surface-hover);
@@ -61,7 +61,7 @@
61
61
  flex-shrink: 0;
62
62
  max-width: 280px;
63
63
  border-bottom: 1px solid var(--border-weak-base);
64
- border-right: 1px solid var(--border-weak-base);
64
+ border-inline-end: 1px solid var(--border-weak-base);
65
65
  background-color: var(--background-base);
66
66
 
67
67
  [data-slot="tabs-trigger"] {
@@ -111,10 +111,10 @@
111
111
  color: var(--text-strong);
112
112
  }
113
113
  &:has([data-slot="tabs-trigger-close-button"]) {
114
- padding-right: 12px;
114
+ padding-inline-end: 12px;
115
115
 
116
116
  [data-slot="tabs-trigger"] {
117
- padding-right: 0;
117
+ padding-inline-end: 0;
118
118
  }
119
119
  }
120
120
  }
@@ -141,8 +141,8 @@
141
141
 
142
142
  [data-slot="tabs-list"] {
143
143
  height: var(--tabs-bar-height);
144
- padding-left: 12px;
145
- padding-right: 0;
144
+ padding-inline-start: 12px;
145
+ padding-inline-end: 0;
146
146
  --tabs-review-gap: 16px;
147
147
  --tabs-review-fade: 16px;
148
148
  gap: var(--tabs-review-gap);
@@ -162,11 +162,15 @@
162
162
  position: absolute;
163
163
  top: 0;
164
164
  bottom: 0;
165
- left: calc(var(--tabs-review-fade) * -1);
165
+ inset-inline-end: 100%;
166
166
  width: var(--tabs-review-fade);
167
167
  pointer-events: none;
168
168
  background: linear-gradient(90deg, transparent, var(--background-stronger));
169
169
  }
170
+
171
+ &:dir(rtl)::before {
172
+ background: linear-gradient(270deg, transparent, var(--background-stronger));
173
+ }
170
174
  }
171
175
  }
172
176
 
@@ -213,9 +217,9 @@
213
217
  }
214
218
 
215
219
  &:has([data-slot="tabs-trigger-close-button"]) {
216
- padding-right: 5px;
220
+ padding-inline-end: 5px;
217
221
  [data-slot="tabs-trigger"] {
218
- padding-right: 0 !important;
222
+ padding-inline-end: 0 !important;
219
223
  }
220
224
  }
221
225
 
@@ -271,7 +275,7 @@
271
275
  #terminal-panel &[data-variant="normal"][data-orientation="horizontal"] {
272
276
  [data-slot="tabs-list"] {
273
277
  height: 52px;
274
- padding-right: 12px;
278
+ padding-inline-end: 12px;
275
279
  gap: 8px;
276
280
  }
277
281
 
@@ -291,7 +295,7 @@
291
295
  }
292
296
 
293
297
  &:has([data-slot="tabs-trigger-close-button"]) {
294
- padding-right: 8px;
298
+ padding-inline-end: 8px;
295
299
  }
296
300
 
297
301
  &:has([data-selected]) {
@@ -378,9 +382,9 @@
378
382
  }
379
383
 
380
384
  &:has([data-slot="tabs-trigger-close-button"]) {
381
- padding-right: 0;
385
+ padding-inline-end: 0;
382
386
  [data-slot="tabs-trigger"] {
383
- padding-right: 0;
387
+ padding-inline-end: 0;
384
388
  }
385
389
  }
386
390
  }
@@ -490,7 +494,7 @@
490
494
  padding: 8px;
491
495
  gap: 4px;
492
496
  background-color: var(--background-base);
493
- border-right: 1px solid var(--border-weak-base);
497
+ border-inline-end: 1px solid var(--border-weak-base);
494
498
 
495
499
  &::after {
496
500
  display: none;
@@ -572,7 +576,7 @@
572
576
  padding: 12px;
573
577
  gap: 0;
574
578
  background-color: var(--background-base);
575
- border-right: 1px solid var(--border-weak-base);
579
+ border-inline-end: 1px solid var(--border-weak-base);
576
580
 
577
581
  &::after {
578
582
  display: none;
@@ -581,7 +585,8 @@
581
585
 
582
586
  [data-slot="tabs-section-title"] {
583
587
  width: 100%;
584
- padding: 0 0 0 4px;
588
+ padding: 0;
589
+ padding-inline-start: 4px;
585
590
  font-family: var(--font-family-sans);
586
591
  font-size: var(--font-size-small);
587
592
  font-weight: var(--font-weight-medium);
@@ -695,6 +700,10 @@ body[data-new-layout] #terminal-panel [data-component="tabs"][data-variant="norm
695
700
  &::before {
696
701
  background: linear-gradient(90deg, transparent, var(--v2-background-bg-base));
697
702
  }
703
+
704
+ &:dir(rtl)::before {
705
+ background: linear-gradient(270deg, transparent, var(--v2-background-bg-base));
706
+ }
698
707
  }
699
708
  }
700
709
  }
@@ -702,7 +711,7 @@ body[data-new-layout] #terminal-panel [data-component="tabs"][data-variant="norm
702
711
  body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"] {
703
712
  [data-slot="tabs-list"] {
704
713
  height: 52px;
705
- padding-right: 12px;
714
+ padding-inline-end: 12px;
706
715
  gap: 8px;
707
716
  --tabs-review-fade: 8px;
708
717
  }
@@ -723,10 +732,10 @@ body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal
723
732
  }
724
733
 
725
734
  &:has([data-slot="tabs-trigger-close-button"]) {
726
- padding-right: 8px;
735
+ padding-inline-end: 8px;
727
736
 
728
737
  [data-slot="tabs-trigger-close-button"] {
729
- margin-left: 2px;
738
+ margin-inline-start: 2px;
730
739
  }
731
740
  }
732
741
 
@@ -754,7 +763,7 @@ body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal
754
763
  .tab-fileicon-color,
755
764
  .tab-fileicon-mono,
756
765
  [data-slot="icon-svg"] {
757
- margin-left: -2px;
766
+ margin-inline-start: -2px;
758
767
  }
759
768
  }
760
769
 
@@ -792,7 +801,7 @@ body[data-new-layout]
792
801
  .session-review-v2-tabs-bar
793
802
  [data-slot="tabs-list"]
794
803
  > .sticky {
795
- padding-right: 0;
804
+ padding-inline-end: 0;
796
805
 
797
806
  [data-component="icon-button-v2"] {
798
807
  position: relative;
@@ -800,7 +809,7 @@ body[data-new-layout]
800
809
  &::after {
801
810
  content: "";
802
811
  position: absolute;
803
- left: 100%;
812
+ inset-inline-start: 100%;
804
813
  top: 50%;
805
814
  transform: translateY(-50%);
806
815
  width: 20px;
@@ -811,21 +820,35 @@ body[data-new-layout]
811
820
  }
812
821
  }
813
822
 
823
+ body[data-new-layout]
824
+ #review-panel
825
+ [data-component="tabs"]
826
+ .session-review-v2-tabs-bar
827
+ [data-slot="tabs-list"]
828
+ > .sticky:not(.session-review-v2-sidebar-toggle-slot) {
829
+ left: auto;
830
+ right: auto;
831
+ inset-inline-end: 0;
832
+ }
833
+
814
834
  body[data-new-layout]
815
835
  #review-panel
816
836
  [data-component="tabs"]
817
837
  .session-review-v2-tabs-bar
818
838
  [data-slot="tabs-list"]
819
839
  > .session-review-v2-sidebar-toggle-slot.sticky {
820
- padding-right: 0;
840
+ left: auto;
841
+ right: auto;
842
+ inset-inline-start: 0;
843
+ padding-inline-end: 0;
821
844
 
822
845
  &::before {
823
846
  content: "";
824
847
  position: absolute;
825
848
  top: 50%;
826
849
  bottom: auto;
827
- left: auto;
828
- right: 100%;
850
+ inset-inline-start: auto;
851
+ inset-inline-end: 100%;
829
852
  transform: translateY(-50%);
830
853
  width: 12px;
831
854
  height: 28px;
@@ -838,7 +861,8 @@ body[data-new-layout]
838
861
  content: "";
839
862
  position: absolute;
840
863
  top: 50%;
841
- left: 100%;
864
+ inset-inline-start: 100%;
865
+ inset-inline-end: auto;
842
866
  transform: translateY(-50%);
843
867
  width: 8px;
844
868
  height: 28px;
@@ -846,6 +870,10 @@ body[data-new-layout]
846
870
  background: linear-gradient(90deg, var(--v2-background-bg-base), transparent);
847
871
  }
848
872
 
873
+ &:dir(rtl)::after {
874
+ background: linear-gradient(270deg, var(--v2-background-bg-base), transparent);
875
+ }
876
+
849
877
  [data-component="icon-button-v2"]::after {
850
878
  display: none;
851
879
  }
@@ -853,7 +881,7 @@ body[data-new-layout]
853
881
 
854
882
  body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-open-in-app-slot {
855
883
  flex-shrink: 0;
856
- margin-left: auto;
884
+ margin-inline-start: auto;
857
885
  }
858
886
 
859
887
  body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-open-in-app {
@@ -80,6 +80,7 @@ function TabsTrigger(props: ParentProps<TabsTriggerProps>) {
80
80
  >
81
81
  <Kobalte.Trigger
82
82
  {...rest}
83
+ dir={rest.dir ?? "auto"}
83
84
  data-slot="tabs-trigger"
84
85
  data-value={props.value}
85
86
  classList={{ [split.classes?.button ?? ""]: split.classes?.button }}
@@ -45,7 +45,7 @@
45
45
  align-items: start;
46
46
  justify-content: space-between;
47
47
  width: 100%;
48
- padding-right: 4px;
48
+ padding-inline-end: 4px;
49
49
 
50
50
  border-radius: var(--radius-md);
51
51
  border: 1px solid var(--border-weak-base);
@@ -68,7 +68,7 @@
68
68
  }
69
69
 
70
70
  &:not(:has([data-slot="input-copy-button"])) {
71
- padding-right: 0;
71
+ padding-inline-end: 0;
72
72
  }
73
73
  }
74
74
 
@@ -1,7 +1,7 @@
1
1
  [data-component="toast-region"] {
2
2
  position: fixed;
3
3
  bottom: 48px;
4
- right: 32px;
4
+ inset-inline-end: 32px;
5
5
  z-index: 1000;
6
6
  display: flex;
7
7
  flex-direction: column;