@opencode-ai/ui 0.0.0-dev-202609040530 → 0.0.0-dev-19079

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 (297) hide show
  1. package/dist/actions/button/button.d.ts +10 -0
  2. package/dist/actions/icon-button/icon-button.d.ts +11 -0
  3. package/dist/actions/split-button/split-button.d.ts +5 -0
  4. package/dist/components/card.d.ts +1 -1
  5. package/dist/components/list.d.ts +1 -1
  6. package/dist/components/scroll-view.d.ts +3 -3
  7. package/dist/context/i18n.d.ts +10 -7
  8. package/dist/context/marked-base.d.ts +3 -0
  9. package/dist/context/marked-parser.d.ts +1 -2
  10. package/dist/{components → data-display/accordion}/accordion.d.ts +6 -6
  11. package/dist/{v2/components/avatar-v2.d.ts → data-display/avatar/avatar.d.ts} +1 -1
  12. package/dist/data-display/badge/badge.d.ts +7 -0
  13. package/dist/{components → data-display/diff-changes}/diff-changes.d.ts +2 -1
  14. package/dist/data-display/keybind/keybind.d.ts +7 -0
  15. package/dist/{v2/components/line-comment-v2.d.ts → data-display/line-comment/line-comment.d.ts} +9 -9
  16. package/dist/{v2/components/project-avatar-v2.d.ts → data-display/project-avatar/project-avatar.d.ts} +1 -1
  17. package/dist/feedback/loader/loader.d.ts +3 -0
  18. package/dist/{components → feedback/progress-circle}/progress-circle.d.ts +2 -0
  19. package/dist/feedback/toast/toast.d.ts +57 -0
  20. package/dist/{components → forms/checkbox}/checkbox.d.ts +2 -2
  21. package/dist/{v2/components/field-v2.d.ts → forms/field/field.d.ts} +4 -10
  22. package/dist/forms/radio/radio.d.ts +16 -0
  23. package/dist/{v2/components/select-v2.d.ts → forms/select/select.d.ts} +4 -6
  24. package/dist/{components → forms/switch}/switch.d.ts +4 -2
  25. package/dist/{v2/components/text-input-v2.d.ts → forms/text-input/text-input.d.ts} +3 -3
  26. package/dist/forms/textarea/textarea.d.ts +7 -0
  27. package/dist/hooks/use-filtered-list.d.ts +9 -0
  28. package/dist/i18n/ar.d.ts +0 -2
  29. package/dist/i18n/bg.d.ts +0 -2
  30. package/dist/i18n/br.d.ts +0 -2
  31. package/dist/i18n/bs.d.ts +0 -2
  32. package/dist/i18n/da.d.ts +0 -2
  33. package/dist/i18n/de.d.ts +0 -2
  34. package/dist/i18n/en.d.ts +238 -1
  35. package/dist/i18n/es.d.ts +0 -2
  36. package/dist/i18n/fr.d.ts +0 -2
  37. package/dist/i18n/he.d.ts +197 -0
  38. package/dist/i18n/ja.d.ts +0 -2
  39. package/dist/i18n/km.d.ts +0 -2
  40. package/dist/i18n/ko.d.ts +0 -2
  41. package/dist/i18n/lo.d.ts +0 -2
  42. package/dist/i18n/mk.d.ts +0 -2
  43. package/dist/i18n/mn.d.ts +0 -2
  44. package/dist/i18n/my.d.ts +0 -2
  45. package/dist/i18n/pl.d.ts +0 -2
  46. package/dist/i18n/ru.d.ts +0 -2
  47. package/dist/i18n/sr.d.ts +0 -2
  48. package/dist/i18n/tg.d.ts +0 -2
  49. package/dist/i18n/th.d.ts +0 -2
  50. package/dist/i18n/tr.d.ts +0 -2
  51. package/dist/i18n/zh.d.ts +0 -2
  52. package/dist/i18n/zht.d.ts +0 -2
  53. package/dist/{components/icon.d.ts → icons/icon/additional-icons.d.ts} +8 -8
  54. package/dist/{v2/components → icons/icon}/icon.d.ts +44 -1
  55. package/dist/layout/divider/divider.d.ts +5 -0
  56. package/dist/navigation/menu/menu.d.ts +59 -0
  57. package/dist/{v2/components/segmented-control-v2.d.ts → navigation/segmented-control/segmented-control.d.ts} +5 -5
  58. package/dist/{components → navigation/tabs}/tabs.d.ts +15 -8
  59. package/dist/{v2/components/dialog-v2.d.ts → overlays/dialog/dialog.d.ts} +1 -2
  60. package/dist/overlays/tooltip/tooltip.d.ts +15 -0
  61. package/dist/{components → typography/text-shimmer}/text-shimmer.d.ts +1 -0
  62. package/dist/typography/wordmark/wordmark.d.ts +2 -0
  63. package/package.json +140 -34
  64. package/src/{v2/components/button-v2.css → actions/button/button.css} +29 -0
  65. package/src/{components → actions/button}/button.tsx +19 -11
  66. package/src/actions/icon-button/icon-button.tsx +32 -0
  67. package/src/{v2/components/split-button-v2.css → actions/split-button/split-button.css} +2 -6
  68. package/src/{v2/components/split-button-v2.tsx → actions/split-button/split-button.tsx} +4 -4
  69. package/src/components/animated-number.css +29 -11
  70. package/src/components/animated-number.tsx +2 -2
  71. package/src/components/card.css +2 -23
  72. package/src/components/card.tsx +4 -4
  73. package/src/components/collapsible.tsx +2 -2
  74. package/src/components/dock-surface.css +2 -9
  75. package/src/components/image-preview.tsx +3 -2
  76. package/src/components/list.css +5 -5
  77. package/src/components/list.tsx +7 -5
  78. package/src/components/popover.tsx +3 -2
  79. package/src/components/scroll-view.tsx +5 -20
  80. package/src/components/sticky-accordion-header.tsx +1 -1
  81. package/src/components/text-field.tsx +12 -4
  82. package/src/context/dialog.tsx +1 -0
  83. package/src/context/i18n.tsx +17 -14
  84. package/src/context/marked-base.tsx +27 -0
  85. package/src/context/marked-parser.tsx +3 -13
  86. package/src/{components → data-display/accordion}/accordion.css +5 -31
  87. package/src/{components → data-display/accordion}/accordion.tsx +14 -14
  88. package/src/{v2/components/avatar-v2.tsx → data-display/avatar/avatar.tsx} +1 -1
  89. package/src/{v2/components/badge-v2.css → data-display/badge/badge.css} +19 -0
  90. package/src/{v2/components/badge-v2.tsx → data-display/badge/badge.tsx} +6 -4
  91. package/src/{components → data-display/diff-changes}/diff-changes.css +22 -19
  92. package/src/{v2/components/diff-changes-v2.tsx → data-display/diff-changes/diff-changes.tsx} +7 -2
  93. package/src/{v2/components/keybind-v2.css → data-display/keybind/keybind.css} +1 -1
  94. package/src/{v2/components/keybind-v2.tsx → data-display/keybind/keybind.tsx} +3 -3
  95. package/src/{v2/components/line-comment-v2.css → data-display/line-comment/line-comment.css} +4 -4
  96. package/src/{v2/components/line-comment-v2.tsx → data-display/line-comment/line-comment.tsx} +17 -15
  97. package/src/{v2/components/project-avatar-v2.tsx → data-display/project-avatar/project-avatar.tsx} +1 -1
  98. package/src/{v2/components/loader-v2.tsx → feedback/loader/loader.tsx} +2 -2
  99. package/src/feedback/progress-circle/progress-circle.css +28 -0
  100. package/src/feedback/progress-circle/progress-circle.tsx +64 -0
  101. package/src/{v2/components/toast-v2.tsx → feedback/toast/toast.tsx} +60 -58
  102. package/src/{components → forms/checkbox}/checkbox.css +1 -7
  103. package/src/{components → forms/checkbox}/checkbox.tsx +13 -13
  104. package/src/{v2/components/field-v2.css → forms/field/field.css} +1 -1
  105. package/src/{v2/components/field-v2.tsx → forms/field/field.tsx} +9 -11
  106. package/src/{v2/components/radio-v2.tsx → forms/radio/radio.tsx} +30 -20
  107. package/src/{v2/components/select-v2.css → forms/select/select.css} +2 -8
  108. package/src/{v2/components/select-v2.tsx → forms/select/select.tsx} +40 -32
  109. package/src/{v2/components/switch-v2.css → forms/switch/switch.css} +110 -0
  110. package/src/forms/switch/switch.tsx +34 -0
  111. package/src/{v2/components/text-input-v2.css → forms/text-input/text-input.css} +3 -3
  112. package/src/{v2/components/text-input-v2.tsx → forms/text-input/text-input.tsx} +4 -4
  113. package/src/{v2/components/textarea-v2.tsx → forms/textarea/textarea.tsx} +3 -3
  114. package/src/hooks/create-auto-scroll.tsx +20 -0
  115. package/src/i18n/am.ts +7 -9
  116. package/src/i18n/ar.ts +7 -9
  117. package/src/i18n/az.ts +7 -9
  118. package/src/i18n/bg.ts +7 -9
  119. package/src/i18n/bn.ts +7 -9
  120. package/src/i18n/br.ts +7 -9
  121. package/src/i18n/bs.ts +7 -9
  122. package/src/i18n/ca.ts +7 -9
  123. package/src/i18n/cs.ts +7 -9
  124. package/src/i18n/da.ts +7 -9
  125. package/src/i18n/de.ts +1 -3
  126. package/src/i18n/dv.ts +7 -9
  127. package/src/i18n/dz.ts +5 -7
  128. package/src/i18n/el.ts +7 -9
  129. package/src/i18n/en.ts +54 -11
  130. package/src/i18n/es.ts +6 -8
  131. package/src/i18n/et.ts +7 -9
  132. package/src/i18n/fa.ts +7 -9
  133. package/src/i18n/fi.ts +7 -9
  134. package/src/i18n/fo.ts +7 -9
  135. package/src/i18n/fr.ts +6 -8
  136. package/src/i18n/he.ts +199 -0
  137. package/src/i18n/hi.ts +7 -9
  138. package/src/i18n/hr.ts +7 -9
  139. package/src/i18n/hu.ts +7 -9
  140. package/src/i18n/hy.ts +7 -9
  141. package/src/i18n/id.ts +7 -9
  142. package/src/i18n/is.ts +7 -9
  143. package/src/i18n/it.ts +7 -9
  144. package/src/i18n/ja.ts +7 -9
  145. package/src/i18n/ka.ts +7 -9
  146. package/src/i18n/km.ts +7 -9
  147. package/src/i18n/ko.ts +7 -9
  148. package/src/i18n/lo.ts +7 -9
  149. package/src/i18n/lt.ts +7 -9
  150. package/src/i18n/lv.ts +7 -9
  151. package/src/i18n/mk.ts +7 -9
  152. package/src/i18n/mn.ts +7 -9
  153. package/src/i18n/ms.ts +7 -9
  154. package/src/i18n/my.ts +7 -9
  155. package/src/i18n/ne.ts +7 -9
  156. package/src/i18n/nl.ts +7 -9
  157. package/src/i18n/no.ts +7 -9
  158. package/src/i18n/pa.ts +7 -9
  159. package/src/i18n/pl.ts +7 -9
  160. package/src/i18n/ro.ts +7 -9
  161. package/src/i18n/ru.ts +7 -9
  162. package/src/i18n/si.ts +7 -9
  163. package/src/i18n/sk.ts +7 -9
  164. package/src/i18n/sl.ts +7 -9
  165. package/src/i18n/sq.ts +7 -9
  166. package/src/i18n/sr.ts +7 -9
  167. package/src/i18n/sv.ts +7 -9
  168. package/src/i18n/tg.ts +7 -9
  169. package/src/i18n/th.ts +7 -9
  170. package/src/i18n/tk.ts +7 -9
  171. package/src/i18n/tr.ts +7 -9
  172. package/src/i18n/uk.ts +7 -9
  173. package/src/i18n/ur.ts +7 -9
  174. package/src/i18n/uz.ts +7 -9
  175. package/src/i18n/vi.ts +7 -9
  176. package/src/i18n/zh.ts +7 -9
  177. package/src/i18n/zht.ts +7 -9
  178. package/src/{components/icon.tsx → icons/icon/additional-icons.ts} +8 -74
  179. package/src/icons/icon/icon.css +3 -0
  180. package/src/{v2/components → icons/icon}/icon.tsx +80 -12
  181. package/src/{v2/components/divider-v2.tsx → layout/divider/divider.tsx} +3 -3
  182. package/src/{v2/components/menu-v2.css → navigation/menu/menu.css} +124 -2
  183. package/src/{v2/components/menu-v2.tsx → navigation/menu/menu.tsx} +96 -32
  184. package/src/{v2/components/segmented-control-v2.css → navigation/segmented-control/segmented-control.css} +1 -1
  185. package/src/{v2/components/segmented-control-v2.tsx → navigation/segmented-control/segmented-control.tsx} +9 -8
  186. package/src/{v2/components/tabs-v2.css → navigation/tabs/tabs-current.css} +25 -10
  187. package/src/{components → navigation/tabs}/tabs.css +53 -232
  188. package/src/navigation/tabs/tabs.tsx +194 -0
  189. package/src/{v2/components/dialog-v2.css → overlays/dialog/dialog.css} +3 -0
  190. package/src/{v2/components/dialog-v2.tsx → overlays/dialog/dialog.tsx} +11 -13
  191. package/src/{v2/components/tooltip-v2.css → overlays/tooltip/tooltip.css} +26 -0
  192. package/src/{v2/components/tooltip-v2.tsx → overlays/tooltip/tooltip.tsx} +24 -17
  193. package/src/styles/base.css +5 -0
  194. package/src/styles/index.css +4 -20
  195. package/src/styles/tailwind/colors.css +1 -0
  196. package/src/styles/tailwind/index.css +18 -1
  197. package/src/styles/theme.css +2 -2
  198. package/src/{v2/styles → styles/tokens}/colors.css +8 -8
  199. package/src/{v2/styles → styles/tokens}/theme.css +20 -16
  200. package/src/theme/context.tsx +19 -11
  201. package/src/theme/themes/oc-2.json +48 -19
  202. package/src/theme/v2/default-primitives.ts +8 -8
  203. package/src/theme/v2/foreground.ts +1 -0
  204. package/src/theme/v2/mapping.ts +5 -1
  205. package/src/{components → typography/text-shimmer}/text-shimmer.css +2 -1
  206. package/src/{components → typography/text-shimmer}/text-shimmer.tsx +1 -0
  207. package/src/{v2/components/wordmark-v2.tsx → typography/wordmark/wordmark.tsx} +2 -2
  208. package/dist/components/avatar.d.ts +0 -9
  209. package/dist/components/button.d.ts +0 -9
  210. package/dist/components/dialog.d.ts +0 -12
  211. package/dist/components/dropdown-menu.d.ts +0 -80
  212. package/dist/components/icon-button.d.ts +0 -10
  213. package/dist/components/keybind.d.ts +0 -6
  214. package/dist/components/radio-group.d.ts +0 -16
  215. package/dist/components/select.d.ts +0 -21
  216. package/dist/components/tag.d.ts +0 -5
  217. package/dist/components/toast.d.ts +0 -56
  218. package/dist/components/tooltip.d.ts +0 -17
  219. package/dist/v2/components/accordion-v2.d.ts +0 -26
  220. package/dist/v2/components/badge-v2.d.ts +0 -6
  221. package/dist/v2/components/button-v2.d.ts +0 -10
  222. package/dist/v2/components/checkbox-v2.d.ts +0 -10
  223. package/dist/v2/components/diff-changes-v2.d.ts +0 -11
  224. package/dist/v2/components/divider-v2.d.ts +0 -5
  225. package/dist/v2/components/icon-button-v2.d.ts +0 -11
  226. package/dist/v2/components/inline-input-v2.d.ts +0 -21
  227. package/dist/v2/components/keybind-v2.d.ts +0 -7
  228. package/dist/v2/components/loader-v2.d.ts +0 -3
  229. package/dist/v2/components/menu-v2.d.ts +0 -52
  230. package/dist/v2/components/progress-circle-v2.d.ts +0 -8
  231. package/dist/v2/components/radio-v2.d.ts +0 -16
  232. package/dist/v2/components/split-button-v2.d.ts +0 -5
  233. package/dist/v2/components/switch-v2.d.ts +0 -7
  234. package/dist/v2/components/tabs-v2.d.ts +0 -34
  235. package/dist/v2/components/text-shimmer-v2.d.ts +0 -9
  236. package/dist/v2/components/textarea-v2.d.ts +0 -7
  237. package/dist/v2/components/toast-v2.d.ts +0 -57
  238. package/dist/v2/components/tooltip-v2.d.ts +0 -13
  239. package/dist/v2/components/wordmark-v2.d.ts +0 -2
  240. package/src/components/avatar.css +0 -49
  241. package/src/components/avatar.tsx +0 -55
  242. package/src/components/button.css +0 -194
  243. package/src/components/dialog.css +0 -181
  244. package/src/components/dialog.tsx +0 -72
  245. package/src/components/diff-changes.tsx +0 -115
  246. package/src/components/dropdown-menu.css +0 -135
  247. package/src/components/dropdown-menu.tsx +0 -308
  248. package/src/components/icon-button.css +0 -181
  249. package/src/components/icon-button.tsx +0 -29
  250. package/src/components/icon.css +0 -39
  251. package/src/components/keybind.css +0 -18
  252. package/src/components/keybind.tsx +0 -20
  253. package/src/components/progress-circle.css +0 -16
  254. package/src/components/progress-circle.tsx +0 -64
  255. package/src/components/radio-group.css +0 -187
  256. package/src/components/radio-group.tsx +0 -83
  257. package/src/components/select.css +0 -201
  258. package/src/components/select.tsx +0 -174
  259. package/src/components/switch.css +0 -136
  260. package/src/components/switch.tsx +0 -29
  261. package/src/components/tabs.tsx +0 -126
  262. package/src/components/tag.css +0 -37
  263. package/src/components/tag.tsx +0 -22
  264. package/src/components/toast.css +0 -236
  265. package/src/components/toast.tsx +0 -185
  266. package/src/components/tooltip.css +0 -74
  267. package/src/components/tooltip.tsx +0 -163
  268. package/src/v2/components/accordion-v2.css +0 -139
  269. package/src/v2/components/accordion-v2.tsx +0 -86
  270. package/src/v2/components/button-v2.tsx +0 -35
  271. package/src/v2/components/checkbox-v2.css +0 -184
  272. package/src/v2/components/checkbox-v2.tsx +0 -65
  273. package/src/v2/components/diff-changes-v2.css +0 -26
  274. package/src/v2/components/icon-button-v2.tsx +0 -37
  275. package/src/v2/components/inline-input-v2.css +0 -225
  276. package/src/v2/components/inline-input-v2.tsx +0 -107
  277. package/src/v2/components/progress-circle-v2.css +0 -13
  278. package/src/v2/components/progress-circle-v2.tsx +0 -52
  279. package/src/v2/components/switch-v2.tsx +0 -28
  280. package/src/v2/components/tabs-v2.tsx +0 -149
  281. package/src/v2/components/text-shimmer-v2.css +0 -125
  282. package/src/v2/components/text-shimmer-v2.tsx +0 -63
  283. /package/dist/{components → forms/inline-input}/inline-input.d.ts +0 -0
  284. /package/dist/{v2/components → navigation}/tab-state-indicator.d.ts +0 -0
  285. /package/src/{v2/components/icon-button-v2.css → actions/icon-button/icon-button.css} +0 -0
  286. /package/src/{v2/components/avatar-v2.css → data-display/avatar/avatar.css} +0 -0
  287. /package/src/{v2/components/project-avatar-v2.css → data-display/project-avatar/project-avatar.css} +0 -0
  288. /package/src/{v2/components/loader-v2.css → feedback/loader/loader.css} +0 -0
  289. /package/src/{v2/components/toast-v2.css → feedback/toast/toast.css} +0 -0
  290. /package/src/{components → forms/inline-input}/inline-input.css +0 -0
  291. /package/src/{components → forms/inline-input}/inline-input.tsx +0 -0
  292. /package/src/{v2/components/radio-v2.css → forms/radio/radio.css} +0 -0
  293. /package/src/{v2/components/textarea-v2.css → forms/textarea/textarea.css} +0 -0
  294. /package/src/{v2/components/divider-v2.css → layout/divider/divider.css} +0 -0
  295. /package/src/{v2/components → navigation}/tab-state-indicator.tsx +0 -0
  296. /package/src/{v2/components/file-tree-v2.css → styles/file-tree.css} +0 -0
  297. /package/src/{v2/styles/tailwind.css → styles/tokens/index.css} +0 -0
@@ -10,7 +10,7 @@ import {
10
10
  type ParentProps,
11
11
  } from "solid-js"
12
12
  import type { ComponentProps } from "solid-js"
13
- import "./segmented-control-v2.css"
13
+ import "./segmented-control.css"
14
14
 
15
15
  type OnChange = (value: string | null) => void
16
16
 
@@ -26,11 +26,11 @@ const SegmentedControlContext = createContext<SegmentedControlContextValue>()
26
26
 
27
27
  function useSegmentedControlContext() {
28
28
  const ctx = useContext(SegmentedControlContext)
29
- if (!ctx) throw new Error("SegmentedControlItemV2 must be used inside SegmentedControlV2")
29
+ if (!ctx) throw new Error("SegmentedControlItem must be used inside SegmentedControl")
30
30
  return ctx
31
31
  }
32
32
 
33
- export type SegmentedControlV2Props = Omit<ComponentProps<"div">, "onChange"> &
33
+ export type SegmentedControlProps = Omit<ComponentProps<"div">, "onChange"> &
34
34
  ParentProps<{
35
35
  /** Selected value when controlled (including `null` when empty). Omit key for uncontrolled. */
36
36
  value?: string | null
@@ -42,7 +42,7 @@ export type SegmentedControlV2Props = Omit<ComponentProps<"div">, "onChange"> &
42
42
  disabled?: boolean
43
43
  }>
44
44
 
45
- export function SegmentedControlV2(props: SegmentedControlV2Props) {
45
+ export function SegmentedControl(props: SegmentedControlProps) {
46
46
  const isControlled = createMemo(() => Object.hasOwn(props as object, "value"))
47
47
  const merged = mergeProps({ allowDeselect: false, disabled: false }, props)
48
48
  const [local, rest] = splitProps(merged, [
@@ -119,7 +119,7 @@ export function SegmentedControlV2(props: SegmentedControlV2Props) {
119
119
  )
120
120
  }
121
121
 
122
- export type SegmentedControlItemV2Props = Omit<ComponentProps<"button">, "type" | "children"> &
122
+ export type SegmentedControlItemProps = Omit<ComponentProps<"button">, "type" | "children"> &
123
123
  ParentProps<{
124
124
  value: string
125
125
  children: JSX.Element
@@ -132,7 +132,7 @@ function invokeButtonHandler<E extends Event>(
132
132
  if (typeof handler === "function") (handler as (ev: typeof e) => void)(e)
133
133
  }
134
134
 
135
- export function SegmentedControlItemV2(props: SegmentedControlItemV2Props) {
135
+ export function SegmentedControlItem(props: SegmentedControlItemProps) {
136
136
  const merged = mergeProps({ disabled: false }, props)
137
137
  const [local, rest] = splitProps(merged, [
138
138
  "class",
@@ -159,13 +159,14 @@ export function SegmentedControlItemV2(props: SegmentedControlItemV2Props) {
159
159
  invokeButtonHandler(local.onKeyDown, e)
160
160
  if (e.defaultPrevented || disabled()) return
161
161
  const t = e.currentTarget
162
+ const horizontal = t.closest(`[data-slot="segmented-control-v2"]`)?.matches(":dir(rtl)") ? -1 : 1
162
163
 
163
164
  if (e.key === "ArrowRight") {
164
165
  e.preventDefault()
165
- ctx.focusNext(t, 1)
166
+ ctx.focusNext(t, horizontal)
166
167
  } else if (e.key === "ArrowLeft") {
167
168
  e.preventDefault()
168
- ctx.focusNext(t, -1)
169
+ ctx.focusNext(t, -horizontal as 1 | -1)
169
170
  }
170
171
 
171
172
  // accessibility stuff
@@ -59,7 +59,7 @@
59
59
 
60
60
  font-size: 13px;
61
61
  font-weight: 440;
62
- line-height: 100%;
62
+ line-height: var(--line-height-compact);
63
63
  letter-spacing: -0.04px;
64
64
  }
65
65
 
@@ -68,22 +68,29 @@
68
68
  box-shadow: none;
69
69
  }
70
70
 
71
- [data-component="tabs-v2"] [data-slot="tabs-v2-close-button"] {
72
- width: 20px;
73
- height: 20px;
71
+ [data-slot="tabs-v2-trigger-close-button"] {
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: center;
74
75
  margin-inline-start: -5px;
75
76
  flex: none;
77
+ }
78
+
79
+ [data-slot="tabs-v2-trigger-close-button"] [data-slot="tabs-close-button"] {
80
+ width: 20px;
81
+ height: 20px;
82
+ padding: 0;
76
83
  display: flex;
77
84
  align-items: center;
78
85
  justify-content: center;
79
86
  color: var(--v2-text-text-faint);
80
87
  }
81
88
 
82
- [data-component="tabs-v2"] [data-slot="tabs-v2-close-button"]:hover {
89
+ [data-slot="tabs-v2-trigger-close-button"] [data-slot="tabs-close-button"]:hover {
83
90
  color: var(--v2-text-text-muted);
84
91
  }
85
92
 
86
- [data-component="tabs-v2"] [data-component="icon-button"] {
93
+ [data-component="tabs-v2"] [data-component="icon-button-v2"] {
87
94
  margin: 0;
88
95
  }
89
96
 
@@ -175,7 +182,7 @@
175
182
  border: 0.5px solid var(--v2-border-border-muted);
176
183
  }
177
184
 
178
- [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"] [data-slot="tabs-v2-list"] {
185
+ [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"] > [data-slot="tabs-v2-list"] {
179
186
  flex-direction: column;
180
187
  width: 240px;
181
188
  min-width: 200px;
@@ -186,7 +193,9 @@
186
193
  border-inline-end: 1px solid var(--v2-border-border-base);
187
194
  }
188
195
 
189
- [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"] [data-slot="tabs-v2-section-title"] {
196
+ [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"]
197
+ > [data-slot="tabs-v2-list"]
198
+ [data-slot="tabs-v2-section-title"] {
190
199
  width: 100%;
191
200
  padding-inline-start: 4px;
192
201
  color: var(--v2-text-text-muted);
@@ -195,7 +204,9 @@
195
204
  user-select: none;
196
205
  }
197
206
 
198
- [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"] [data-slot="tabs-v2-trigger-wrapper"] {
207
+ [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"]
208
+ > [data-slot="tabs-v2-list"]
209
+ [data-slot="tabs-v2-trigger-wrapper"] {
199
210
  width: 100%;
200
211
  height: 28px;
201
212
  border-radius: 4px;
@@ -203,7 +214,9 @@
203
214
  color: var(--v2-text-text-muted);
204
215
  }
205
216
 
206
- [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"] [data-slot="tabs-v2-trigger"] {
217
+ [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"]
218
+ > [data-slot="tabs-v2-list"]
219
+ [data-slot="tabs-v2-trigger"] {
207
220
  width: 100%;
208
221
  height: 100%;
209
222
  justify-content: flex-start;
@@ -212,12 +225,14 @@
212
225
  }
213
226
 
214
227
  [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"]
228
+ > [data-slot="tabs-v2-list"]
215
229
  [data-slot="tabs-v2-trigger-wrapper"]:hover:not(:disabled):not(:has([data-selected])) {
216
230
  background-color: var(--v2-background-bg-layer-03);
217
231
  color: var(--v2-text-text-base);
218
232
  }
219
233
 
220
234
  [data-component="tabs-v2"][data-variant="settings"][data-orientation="vertical"]
235
+ > [data-slot="tabs-v2-list"]
221
236
  [data-slot="tabs-v2-trigger-wrapper"]:has([data-selected]) {
222
237
  background-color: var(--v2-background-bg-layer-03);
223
238
  color: var(--v2-text-text-base);
@@ -18,15 +18,13 @@
18
18
  display: flex;
19
19
  align-items: center;
20
20
  overflow-x: auto;
21
-
22
- /* Hide scrollbar */
23
21
  scrollbar-width: none;
24
22
  -ms-overflow-style: none;
23
+
25
24
  &::-webkit-scrollbar {
26
25
  display: none;
27
26
  }
28
27
 
29
- /* After element to fill remaining space */
30
28
  &::after {
31
29
  content: "";
32
30
  display: block;
@@ -48,15 +46,12 @@
48
46
  align-items: center;
49
47
  gap: 12px;
50
48
  color: var(--text-base);
51
-
52
- /* text-14-medium */
53
49
  font-family: var(--font-family-sans);
54
50
  font-size: 14px;
55
51
  font-style: normal;
56
52
  font-weight: var(--font-weight-medium);
57
- line-height: var(--line-height-large); /* 142.857% */
53
+ line-height: var(--line-height-large);
58
54
  letter-spacing: var(--letter-spacing-normal);
59
-
60
55
  white-space: nowrap;
61
56
  flex-shrink: 0;
62
57
  max-width: 280px;
@@ -86,6 +81,13 @@
86
81
  justify-content: center;
87
82
  }
88
83
 
84
+ [data-slot="tabs-close-button"] {
85
+ padding: 0;
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: center;
89
+ }
90
+
89
91
  [data-component="icon-button"] {
90
92
  margin: -0.25rem;
91
93
  }
@@ -94,14 +96,17 @@
94
96
  pointer-events: none;
95
97
  color: var(--text-weaker);
96
98
  }
99
+
97
100
  &:focus-visible {
98
101
  outline: none;
99
102
  box-shadow: none;
100
103
  }
104
+
101
105
  &:has([data-selected]) {
102
106
  color: var(--text-strong);
103
107
  background-color: transparent;
104
108
  border-bottom-color: transparent;
109
+
105
110
  [data-slot="tabs-trigger-close-button"] {
106
111
  opacity: 1;
107
112
  }
@@ -110,6 +115,7 @@
110
115
  &:hover:not(:disabled):not([data-selected]) {
111
116
  color: var(--text-strong);
112
117
  }
118
+
113
119
  &:has([data-slot="tabs-trigger-close-button"]) {
114
120
  padding-inline-end: 12px;
115
121
 
@@ -122,10 +128,9 @@
122
128
  [data-slot="tabs-content"] {
123
129
  overflow-y: auto;
124
130
  flex: 1;
125
-
126
- /* Hide scrollbar */
127
131
  scrollbar-width: none;
128
132
  -ms-overflow-style: none;
133
+
129
134
  &::-webkit-scrollbar {
130
135
  display: none;
131
136
  }
@@ -218,6 +223,7 @@
218
223
 
219
224
  &:has([data-slot="tabs-trigger-close-button"]) {
220
225
  padding-inline-end: 5px;
226
+
221
227
  [data-slot="tabs-trigger"] {
222
228
  padding-inline-end: 0 !important;
223
229
  }
@@ -239,10 +245,6 @@
239
245
  background-color: var(--surface-base-hover);
240
246
  }
241
247
 
242
- /*
243
- File tabs: use monochrome icon by default.
244
- Full-color icon is shown on hover/selected.
245
- */
246
248
  [data-slot="tabs-trigger"] {
247
249
  .tab-fileicon-color,
248
250
  .tab-fileicon-mono {
@@ -329,9 +331,6 @@
329
331
  border: none;
330
332
  background-color: transparent;
331
333
  }
332
- &:empty::after {
333
- display: none;
334
- }
335
334
  }
336
335
 
337
336
  [data-slot="tabs-trigger-wrapper"] {
@@ -342,13 +341,11 @@
342
341
  border-bottom-style: solid;
343
342
  border-bottom-color: transparent;
344
343
  gap: 4px;
345
-
346
- /* text-14-regular */
347
344
  font-family: var(--font-family-sans);
348
345
  font-size: var(--font-size-base);
349
346
  font-style: normal;
350
347
  font-weight: var(--font-weight-regular);
351
- line-height: var(--line-height-x-large); /* 171.429% */
348
+ line-height: var(--line-height-x-large);
352
349
  letter-spacing: var(--letter-spacing-normal);
353
350
 
354
351
  [data-slot="tabs-trigger"] {
@@ -359,18 +356,6 @@
359
356
  border-bottom-color: transparent;
360
357
  }
361
358
 
362
- [data-slot="tabs-trigger-close-button"] {
363
- display: flex;
364
- align-items: center;
365
- justify-content: center;
366
- }
367
-
368
- [data-component="icon-button"] {
369
- width: 16px;
370
- height: 16px;
371
- margin: 0;
372
- }
373
-
374
359
  &:has([data-selected]) {
375
360
  color: var(--text-strong);
376
361
  background-color: transparent;
@@ -383,14 +368,12 @@
383
368
 
384
369
  &:has([data-slot="tabs-trigger-close-button"]) {
385
370
  padding-inline-end: 0;
371
+
386
372
  [data-slot="tabs-trigger"] {
387
373
  padding-inline-end: 0;
388
374
  }
389
375
  }
390
376
  }
391
-
392
- /* [data-slot="tabs-content"] { */
393
- /* } */
394
377
  }
395
378
 
396
379
  &[data-variant="pill"][data-orientation="horizontal"] {
@@ -413,8 +396,6 @@
413
396
  border-radius: var(--radius-sm);
414
397
  background-color: transparent;
415
398
  gap: 0;
416
-
417
- /* text-13-medium */
418
399
  font-family: var(--font-family-sans);
419
400
  font-size: var(--font-size-small);
420
401
  font-style: normal;
@@ -434,17 +415,13 @@
434
415
  color: var(--text-strong);
435
416
  }
436
417
 
437
- &:active:not(:disabled) {
418
+ &:active:not(:disabled),
419
+ &:has([data-selected]) {
438
420
  background-color: var(--surface-base-active);
439
421
  }
440
422
 
441
423
  &:has([data-selected]) {
442
- background-color: var(--surface-base-active);
443
424
  color: var(--text-strong);
444
-
445
- &:hover:not(:disabled) {
446
- background-color: var(--surface-base-active);
447
- }
448
425
  }
449
426
  }
450
427
  }
@@ -481,170 +458,6 @@
481
458
  }
482
459
  }
483
460
  }
484
-
485
- &[data-orientation="vertical"] {
486
- flex-direction: row;
487
-
488
- [data-slot="tabs-list"] {
489
- flex-direction: column;
490
- width: auto;
491
- height: 100%;
492
- overflow-x: hidden;
493
- overflow-y: auto;
494
- padding: 8px;
495
- gap: 4px;
496
- background-color: var(--background-base);
497
- border-inline-end: 1px solid var(--border-weak-base);
498
-
499
- &::after {
500
- display: none;
501
- }
502
- }
503
-
504
- [data-slot="tabs-trigger-wrapper"] {
505
- width: 100%;
506
- height: 32px;
507
- border: none;
508
- border-radius: 8px;
509
- background-color: transparent;
510
-
511
- [data-slot="tabs-trigger"] {
512
- height: 100%;
513
- padding: 0 8px;
514
- gap: 8px;
515
- justify-content: flex-start;
516
- }
517
-
518
- &:hover:not(:disabled) {
519
- background-color: var(--surface-base-hover);
520
- }
521
-
522
- &:has([data-selected]) {
523
- background-color: var(--surface-base-active);
524
- color: var(--text-strong);
525
- }
526
- }
527
-
528
- [data-slot="tabs-content"] {
529
- overflow-x: auto;
530
- overflow-y: auto;
531
- }
532
-
533
- &[data-variant="alt"] {
534
- [data-slot="tabs-list"] {
535
- padding: 8px;
536
- gap: 4px;
537
- border: none;
538
-
539
- &::after {
540
- display: none;
541
- }
542
- }
543
-
544
- [data-slot="tabs-trigger-wrapper"] {
545
- height: 32px;
546
- border: none;
547
- border-radius: 8px;
548
-
549
- [data-slot="tabs-trigger"] {
550
- border: none;
551
- padding: 0 8px;
552
- gap: 8px;
553
- justify-content: flex-start;
554
- }
555
-
556
- &:hover:not(:disabled) {
557
- background-color: var(--surface-base-hover);
558
- }
559
-
560
- &:has([data-selected]) {
561
- background-color: var(--surface-base-hover);
562
- color: var(--text-strong);
563
- }
564
- }
565
- }
566
-
567
- &[data-variant="settings"] {
568
- [data-slot="tabs-list"] {
569
- width: 150px;
570
- min-width: 150px;
571
-
572
- @media (min-width: 640px) {
573
- width: 200px;
574
- min-width: 200px;
575
- }
576
- padding: 12px;
577
- gap: 0;
578
- background-color: var(--background-base);
579
- border-inline-end: 1px solid var(--border-weak-base);
580
-
581
- &::after {
582
- display: none;
583
- }
584
- }
585
-
586
- [data-slot="tabs-section-title"] {
587
- width: 100%;
588
- padding: 0;
589
- padding-inline-start: 4px;
590
- font-family: var(--font-family-sans);
591
- font-size: var(--font-size-small);
592
- font-weight: var(--font-weight-medium);
593
- color: var(--text-weak);
594
- }
595
-
596
- [data-slot="tabs-trigger-wrapper"] {
597
- height: 32px;
598
- border: none;
599
- border-radius: var(--radius-md);
600
-
601
- /* text-14-medium */
602
- font-family: var(--font-family-sans);
603
- font-size: var(--font-size-base);
604
- font-weight: var(--font-weight-medium);
605
- line-height: var(--line-height-large);
606
-
607
- [data-slot="tabs-trigger"] {
608
- border: none;
609
- padding: 0 8px;
610
- gap: 12px;
611
- justify-content: flex-start;
612
- width: 100%;
613
- height: 100%;
614
- }
615
-
616
- [data-component="icon"] {
617
- color: var(--icon-base);
618
- }
619
-
620
- &:hover:not(:disabled) {
621
- background-color: var(--surface-base-hover);
622
- }
623
-
624
- &:has([data-slot="tabs-trigger"]:focus-visible) {
625
- background-color: var(--surface-base-hover);
626
- box-shadow: var(--shadow-xs-border-focus);
627
- }
628
-
629
- &:has([data-selected]) {
630
- background-color: var(--surface-base-active);
631
- color: var(--text-strong);
632
-
633
- [data-component="icon"] {
634
- color: var(--icon-strong-base);
635
- }
636
-
637
- &:hover:not(:disabled) {
638
- background-color: var(--surface-base-active);
639
- }
640
- }
641
- }
642
-
643
- [data-slot="tabs-content"] {
644
- background-color: var(--surface-stronger-non-alpha);
645
- }
646
- }
647
- }
648
461
  }
649
462
 
650
463
  [data-component="tabs-drag-preview"] {
@@ -685,10 +498,10 @@
685
498
  position: relative;
686
499
  }
687
500
 
688
- body[data-new-layout] #review-panel [data-component="tabs"],
689
- body[data-new-layout] #terminal-panel [data-component="tabs"],
690
- body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"],
691
- body[data-new-layout] #terminal-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"] {
501
+ :root body #review-panel [data-component="tabs"],
502
+ :root body #terminal-panel [data-component="tabs"],
503
+ :root body #review-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"],
504
+ :root body #terminal-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"] {
692
505
  background-color: var(--v2-background-bg-base);
693
506
 
694
507
  [data-slot="tabs-list"] {
@@ -708,7 +521,7 @@ body[data-new-layout] #terminal-panel [data-component="tabs"][data-variant="norm
708
521
  }
709
522
  }
710
523
 
711
- body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"] {
524
+ :root body #review-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"] {
712
525
  [data-slot="tabs-list"] {
713
526
  height: 52px;
714
527
  padding-inline-end: 12px;
@@ -739,6 +552,17 @@ body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal
739
552
  }
740
553
  }
741
554
 
555
+ &[data-value="open-file"],
556
+ &[data-value^="file://"]
557
+ {
558
+ gap: 8px;
559
+ padding-inline-end: 4px;
560
+
561
+ [data-slot="tabs-trigger-close-button"] {
562
+ margin-inline-start: 0;
563
+ }
564
+ }
565
+
742
566
  &:has([data-selected]) {
743
567
  background-color: var(--v2-background-bg-layer-02);
744
568
  box-shadow: none;
@@ -756,25 +580,24 @@ body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal
756
580
  font-variation-settings: "slnt" 0;
757
581
  font-variant-numeric: tabular-nums;
758
582
 
759
- &[data-selected] {
583
+ &[data-selected]:not([data-value="open-file"]) {
760
584
  color: var(--v2-text-text-base);
761
585
  }
762
586
 
763
587
  .tab-fileicon-color,
764
- .tab-fileicon-mono,
765
- [data-slot="icon-svg"] {
588
+ .tab-fileicon-mono {
766
589
  margin-inline-start: -2px;
767
590
  }
768
- }
769
591
 
770
- /* Preview/temporary tabs: beat trigger + .text-14-medium upright defaults */
771
- [data-slot="tabs-trigger"] .italic {
772
- font-style: italic !important;
773
- font-variation-settings: "slnt" -10 !important;
592
+ .italic {
593
+ font-style: italic !important;
594
+ font-variation-settings: "slnt" -10 !important;
595
+ padding-inline-end: 2px;
596
+ }
774
597
  }
775
598
  }
776
599
 
777
- body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-tabs-bar {
600
+ :root body #review-panel [data-component="tabs"] .session-review-v2-tabs-bar {
778
601
  width: 100%;
779
602
  min-width: 0;
780
603
  gap: 8px;
@@ -783,8 +606,9 @@ body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-t
783
606
  background-color: var(--v2-background-bg-base);
784
607
  }
785
608
 
786
- body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-tabs-bar [data-slot="tabs-list"],
787
- body[data-new-layout]
609
+ :root body #review-panel [data-component="tabs"] .session-review-v2-tabs-bar [data-slot="tabs-list"],
610
+ :root
611
+ body
788
612
  #review-panel
789
613
  [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"]
790
614
  .session-review-v2-tabs-bar
@@ -795,12 +619,7 @@ body[data-new-layout]
795
619
  border-bottom: none;
796
620
  }
797
621
 
798
- body[data-new-layout]
799
- #review-panel
800
- [data-component="tabs"]
801
- .session-review-v2-tabs-bar
802
- [data-slot="tabs-list"]
803
- > .sticky {
622
+ :root body #review-panel [data-component="tabs"] .session-review-v2-tabs-bar [data-slot="tabs-list"] > .sticky {
804
623
  padding-inline-end: 0;
805
624
 
806
625
  [data-component="icon-button-v2"] {
@@ -820,7 +639,8 @@ body[data-new-layout]
820
639
  }
821
640
  }
822
641
 
823
- body[data-new-layout]
642
+ :root
643
+ body
824
644
  #review-panel
825
645
  [data-component="tabs"]
826
646
  .session-review-v2-tabs-bar
@@ -831,7 +651,8 @@ body[data-new-layout]
831
651
  inset-inline-end: 0;
832
652
  }
833
653
 
834
- body[data-new-layout]
654
+ :root
655
+ body
835
656
  #review-panel
836
657
  [data-component="tabs"]
837
658
  .session-review-v2-tabs-bar
@@ -879,11 +700,11 @@ body[data-new-layout]
879
700
  }
880
701
  }
881
702
 
882
- body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-open-in-app-slot {
703
+ :root body #review-panel [data-component="tabs"] .session-review-v2-open-in-app-slot {
883
704
  flex-shrink: 0;
884
705
  margin-inline-start: auto;
885
706
  }
886
707
 
887
- body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-open-in-app {
708
+ :root body #review-panel [data-component="tabs"] .session-review-v2-open-in-app {
888
709
  flex-shrink: 0;
889
710
  }