@opencode-ai/ui 0.0.0-dev-202609060432 → 0.0.0-dev-19178

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 (298) 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} +5 -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 +242 -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 +5 -0
  63. package/package.json +141 -35
  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/{v2/components/icon-button-v2.css → actions/icon-button/icon-button.css} +27 -9
  67. package/src/actions/icon-button/icon-button.tsx +32 -0
  68. package/src/{v2/components/split-button-v2.css → actions/split-button/split-button.css} +2 -6
  69. package/src/{v2/components/split-button-v2.tsx → actions/split-button/split-button.tsx} +4 -4
  70. package/src/components/animated-number.css +29 -11
  71. package/src/components/animated-number.tsx +2 -2
  72. package/src/components/card.css +2 -23
  73. package/src/components/card.tsx +4 -4
  74. package/src/components/collapsible.tsx +2 -2
  75. package/src/components/dock-surface.css +2 -9
  76. package/src/components/image-preview.tsx +3 -2
  77. package/src/components/list.css +5 -5
  78. package/src/components/list.tsx +7 -5
  79. package/src/components/popover.tsx +3 -2
  80. package/src/components/scroll-view.tsx +5 -20
  81. package/src/components/sticky-accordion-header.tsx +1 -1
  82. package/src/components/text-field.tsx +12 -4
  83. package/src/context/dialog.tsx +1 -0
  84. package/src/context/i18n.tsx +17 -14
  85. package/src/context/marked-base.tsx +27 -0
  86. package/src/context/marked-parser.tsx +3 -13
  87. package/src/{components → data-display/accordion}/accordion.css +7 -33
  88. package/src/{components → data-display/accordion}/accordion.tsx +14 -14
  89. package/src/{v2/components/avatar-v2.tsx → data-display/avatar/avatar.tsx} +1 -1
  90. package/src/{v2/components/badge-v2.css → data-display/badge/badge.css} +19 -0
  91. package/src/{v2/components/badge-v2.tsx → data-display/badge/badge.tsx} +6 -4
  92. package/src/{components → data-display/diff-changes}/diff-changes.css +22 -19
  93. package/src/{v2/components/diff-changes-v2.tsx → data-display/diff-changes/diff-changes.tsx} +7 -2
  94. package/src/{v2/components/keybind-v2.css → data-display/keybind/keybind.css} +1 -1
  95. package/src/{v2/components/keybind-v2.tsx → data-display/keybind/keybind.tsx} +3 -3
  96. package/src/{v2/components/line-comment-v2.css → data-display/line-comment/line-comment.css} +4 -4
  97. package/src/{v2/components/line-comment-v2.tsx → data-display/line-comment/line-comment.tsx} +17 -15
  98. package/src/{v2/components/project-avatar-v2.tsx → data-display/project-avatar/project-avatar.tsx} +1 -1
  99. package/src/{v2/components/loader-v2.tsx → feedback/loader/loader.tsx} +2 -2
  100. package/src/feedback/progress-circle/progress-circle.css +28 -0
  101. package/src/feedback/progress-circle/progress-circle.tsx +64 -0
  102. package/src/{v2/components/toast-v2.tsx → feedback/toast/toast.tsx} +60 -58
  103. package/src/{components → forms/checkbox}/checkbox.css +1 -7
  104. package/src/{components → forms/checkbox}/checkbox.tsx +13 -13
  105. package/src/{v2/components/field-v2.css → forms/field/field.css} +1 -1
  106. package/src/{v2/components/field-v2.tsx → forms/field/field.tsx} +9 -11
  107. package/src/{v2/components/radio-v2.tsx → forms/radio/radio.tsx} +30 -20
  108. package/src/{v2/components/select-v2.css → forms/select/select.css} +2 -8
  109. package/src/{v2/components/select-v2.tsx → forms/select/select.tsx} +42 -32
  110. package/src/{v2/components/switch-v2.css → forms/switch/switch.css} +110 -0
  111. package/src/forms/switch/switch.tsx +34 -0
  112. package/src/{v2/components/text-input-v2.css → forms/text-input/text-input.css} +3 -3
  113. package/src/{v2/components/text-input-v2.tsx → forms/text-input/text-input.tsx} +4 -4
  114. package/src/{v2/components/textarea-v2.tsx → forms/textarea/textarea.tsx} +3 -3
  115. package/src/hooks/create-auto-scroll.tsx +20 -0
  116. package/src/i18n/am.ts +7 -9
  117. package/src/i18n/ar.ts +7 -9
  118. package/src/i18n/az.ts +7 -9
  119. package/src/i18n/bg.ts +7 -9
  120. package/src/i18n/bn.ts +7 -9
  121. package/src/i18n/br.ts +7 -9
  122. package/src/i18n/bs.ts +7 -9
  123. package/src/i18n/ca.ts +7 -9
  124. package/src/i18n/cs.ts +7 -9
  125. package/src/i18n/da.ts +7 -9
  126. package/src/i18n/de.ts +1 -3
  127. package/src/i18n/dv.ts +7 -9
  128. package/src/i18n/dz.ts +5 -7
  129. package/src/i18n/el.ts +7 -9
  130. package/src/i18n/en.ts +59 -12
  131. package/src/i18n/es.ts +6 -8
  132. package/src/i18n/et.ts +7 -9
  133. package/src/i18n/fa.ts +7 -9
  134. package/src/i18n/fi.ts +7 -9
  135. package/src/i18n/fo.ts +7 -9
  136. package/src/i18n/fr.ts +6 -8
  137. package/src/i18n/he.ts +199 -0
  138. package/src/i18n/hi.ts +7 -9
  139. package/src/i18n/hr.ts +7 -9
  140. package/src/i18n/hu.ts +7 -9
  141. package/src/i18n/hy.ts +7 -9
  142. package/src/i18n/id.ts +7 -9
  143. package/src/i18n/is.ts +7 -9
  144. package/src/i18n/it.ts +7 -9
  145. package/src/i18n/ja.ts +7 -9
  146. package/src/i18n/ka.ts +7 -9
  147. package/src/i18n/km.ts +7 -9
  148. package/src/i18n/ko.ts +7 -9
  149. package/src/i18n/lo.ts +7 -9
  150. package/src/i18n/lt.ts +7 -9
  151. package/src/i18n/lv.ts +7 -9
  152. package/src/i18n/mk.ts +7 -9
  153. package/src/i18n/mn.ts +7 -9
  154. package/src/i18n/ms.ts +7 -9
  155. package/src/i18n/my.ts +7 -9
  156. package/src/i18n/ne.ts +7 -9
  157. package/src/i18n/nl.ts +7 -9
  158. package/src/i18n/no.ts +7 -9
  159. package/src/i18n/pa.ts +7 -9
  160. package/src/i18n/pl.ts +7 -9
  161. package/src/i18n/ro.ts +7 -9
  162. package/src/i18n/ru.ts +7 -9
  163. package/src/i18n/si.ts +7 -9
  164. package/src/i18n/sk.ts +7 -9
  165. package/src/i18n/sl.ts +7 -9
  166. package/src/i18n/sq.ts +7 -9
  167. package/src/i18n/sr.ts +7 -9
  168. package/src/i18n/sv.ts +7 -9
  169. package/src/i18n/tg.ts +7 -9
  170. package/src/i18n/th.ts +7 -9
  171. package/src/i18n/tk.ts +7 -9
  172. package/src/i18n/tr.ts +7 -9
  173. package/src/i18n/uk.ts +7 -9
  174. package/src/i18n/ur.ts +7 -9
  175. package/src/i18n/uz.ts +7 -9
  176. package/src/i18n/vi.ts +7 -9
  177. package/src/i18n/zh.ts +7 -9
  178. package/src/i18n/zht.ts +7 -9
  179. package/src/{components/icon.tsx → icons/icon/additional-icons.ts} +8 -74
  180. package/src/icons/icon/icon.css +3 -0
  181. package/src/{v2/components → icons/icon}/icon.tsx +80 -12
  182. package/src/{v2/components/divider-v2.tsx → layout/divider/divider.tsx} +3 -3
  183. package/src/{v2/components/menu-v2.css → navigation/menu/menu.css} +124 -2
  184. package/src/{v2/components/menu-v2.tsx → navigation/menu/menu.tsx} +96 -32
  185. package/src/{v2/components/segmented-control-v2.css → navigation/segmented-control/segmented-control.css} +1 -1
  186. package/src/{v2/components/segmented-control-v2.tsx → navigation/segmented-control/segmented-control.tsx} +9 -8
  187. package/src/{v2/components/tabs-v2.css → navigation/tabs/tabs-current.css} +25 -10
  188. package/src/{components → navigation/tabs}/tabs.css +53 -232
  189. package/src/navigation/tabs/tabs.tsx +194 -0
  190. package/src/{v2/components/dialog-v2.css → overlays/dialog/dialog.css} +3 -0
  191. package/src/{v2/components/dialog-v2.tsx → overlays/dialog/dialog.tsx} +11 -13
  192. package/src/{v2/components/tooltip-v2.css → overlays/tooltip/tooltip.css} +26 -0
  193. package/src/{v2/components/tooltip-v2.tsx → overlays/tooltip/tooltip.tsx} +24 -17
  194. package/src/styles/base.css +5 -0
  195. package/src/styles/index.css +4 -20
  196. package/src/styles/tailwind/colors.css +2 -0
  197. package/src/styles/tailwind/index.css +18 -1
  198. package/src/styles/theme.css +2 -2
  199. package/src/{v2/styles → styles/tokens}/colors.css +8 -8
  200. package/src/{v2/styles → styles/tokens}/theme.css +23 -16
  201. package/src/theme/context.tsx +19 -11
  202. package/src/theme/themes/oc-2.json +50 -19
  203. package/src/theme/v2/default-primitives.ts +8 -8
  204. package/src/theme/v2/foreground.ts +1 -0
  205. package/src/theme/v2/mapping.ts +7 -1
  206. package/src/{components → typography/text-shimmer}/text-shimmer.css +2 -1
  207. package/src/{components → typography/text-shimmer}/text-shimmer.tsx +1 -0
  208. package/src/typography/wordmark/wordmark.tsx +39 -0
  209. package/dist/components/avatar.d.ts +0 -9
  210. package/dist/components/button.d.ts +0 -9
  211. package/dist/components/dialog.d.ts +0 -12
  212. package/dist/components/dropdown-menu.d.ts +0 -80
  213. package/dist/components/icon-button.d.ts +0 -10
  214. package/dist/components/keybind.d.ts +0 -6
  215. package/dist/components/radio-group.d.ts +0 -16
  216. package/dist/components/select.d.ts +0 -21
  217. package/dist/components/tag.d.ts +0 -5
  218. package/dist/components/toast.d.ts +0 -56
  219. package/dist/components/tooltip.d.ts +0 -17
  220. package/dist/v2/components/accordion-v2.d.ts +0 -26
  221. package/dist/v2/components/badge-v2.d.ts +0 -6
  222. package/dist/v2/components/button-v2.d.ts +0 -10
  223. package/dist/v2/components/checkbox-v2.d.ts +0 -10
  224. package/dist/v2/components/diff-changes-v2.d.ts +0 -11
  225. package/dist/v2/components/divider-v2.d.ts +0 -5
  226. package/dist/v2/components/icon-button-v2.d.ts +0 -11
  227. package/dist/v2/components/inline-input-v2.d.ts +0 -21
  228. package/dist/v2/components/keybind-v2.d.ts +0 -7
  229. package/dist/v2/components/loader-v2.d.ts +0 -3
  230. package/dist/v2/components/menu-v2.d.ts +0 -52
  231. package/dist/v2/components/progress-circle-v2.d.ts +0 -8
  232. package/dist/v2/components/radio-v2.d.ts +0 -16
  233. package/dist/v2/components/split-button-v2.d.ts +0 -5
  234. package/dist/v2/components/switch-v2.d.ts +0 -7
  235. package/dist/v2/components/tabs-v2.d.ts +0 -34
  236. package/dist/v2/components/text-shimmer-v2.d.ts +0 -9
  237. package/dist/v2/components/textarea-v2.d.ts +0 -7
  238. package/dist/v2/components/toast-v2.d.ts +0 -57
  239. package/dist/v2/components/tooltip-v2.d.ts +0 -13
  240. package/dist/v2/components/wordmark-v2.d.ts +0 -2
  241. package/src/components/avatar.css +0 -49
  242. package/src/components/avatar.tsx +0 -55
  243. package/src/components/button.css +0 -194
  244. package/src/components/dialog.css +0 -181
  245. package/src/components/dialog.tsx +0 -72
  246. package/src/components/diff-changes.tsx +0 -115
  247. package/src/components/dropdown-menu.css +0 -135
  248. package/src/components/dropdown-menu.tsx +0 -308
  249. package/src/components/icon-button.css +0 -181
  250. package/src/components/icon-button.tsx +0 -29
  251. package/src/components/icon.css +0 -39
  252. package/src/components/keybind.css +0 -18
  253. package/src/components/keybind.tsx +0 -20
  254. package/src/components/progress-circle.css +0 -16
  255. package/src/components/progress-circle.tsx +0 -64
  256. package/src/components/radio-group.css +0 -187
  257. package/src/components/radio-group.tsx +0 -83
  258. package/src/components/select.css +0 -201
  259. package/src/components/select.tsx +0 -174
  260. package/src/components/switch.css +0 -136
  261. package/src/components/switch.tsx +0 -29
  262. package/src/components/tabs.tsx +0 -126
  263. package/src/components/tag.css +0 -37
  264. package/src/components/tag.tsx +0 -22
  265. package/src/components/toast.css +0 -236
  266. package/src/components/toast.tsx +0 -185
  267. package/src/components/tooltip.css +0 -74
  268. package/src/components/tooltip.tsx +0 -163
  269. package/src/v2/components/accordion-v2.css +0 -139
  270. package/src/v2/components/accordion-v2.tsx +0 -86
  271. package/src/v2/components/button-v2.tsx +0 -35
  272. package/src/v2/components/checkbox-v2.css +0 -184
  273. package/src/v2/components/checkbox-v2.tsx +0 -65
  274. package/src/v2/components/diff-changes-v2.css +0 -26
  275. package/src/v2/components/icon-button-v2.tsx +0 -37
  276. package/src/v2/components/inline-input-v2.css +0 -225
  277. package/src/v2/components/inline-input-v2.tsx +0 -107
  278. package/src/v2/components/progress-circle-v2.css +0 -13
  279. package/src/v2/components/progress-circle-v2.tsx +0 -52
  280. package/src/v2/components/switch-v2.tsx +0 -28
  281. package/src/v2/components/tabs-v2.tsx +0 -149
  282. package/src/v2/components/text-shimmer-v2.css +0 -125
  283. package/src/v2/components/text-shimmer-v2.tsx +0 -63
  284. package/src/v2/components/wordmark-v2.tsx +0 -71
  285. /package/dist/{components → forms/inline-input}/inline-input.d.ts +0 -0
  286. /package/dist/{v2/components → navigation}/tab-state-indicator.d.ts +0 -0
  287. /package/src/{v2/components/avatar-v2.css → data-display/avatar/avatar.css} +0 -0
  288. /package/src/{v2/components/project-avatar-v2.css → data-display/project-avatar/project-avatar.css} +0 -0
  289. /package/src/{v2/components/loader-v2.css → feedback/loader/loader.css} +0 -0
  290. /package/src/{v2/components/toast-v2.css → feedback/toast/toast.css} +0 -0
  291. /package/src/{components → forms/inline-input}/inline-input.css +0 -0
  292. /package/src/{components → forms/inline-input}/inline-input.tsx +0 -0
  293. /package/src/{v2/components/radio-v2.css → forms/radio/radio.css} +0 -0
  294. /package/src/{v2/components/textarea-v2.css → forms/textarea/textarea.css} +0 -0
  295. /package/src/{v2/components/divider-v2.css → layout/divider/divider.css} +0 -0
  296. /package/src/{v2/components → navigation}/tab-state-indicator.tsx +0 -0
  297. /package/src/{v2/components/file-tree-v2.css → styles/file-tree.css} +0 -0
  298. /package/src/{v2/styles/tailwind.css → styles/tokens/index.css} +0 -0
@@ -1,17 +1,17 @@
1
- import { Accordion as Kobalte } from "@kobalte/core/accordion"
1
+ import { Content, Header, Item, Root, Trigger } from "@kobalte/core/accordion"
2
2
  import { splitProps } from "solid-js"
3
3
  import type { ComponentProps, ParentProps } from "solid-js"
4
4
 
5
- export interface AccordionProps extends ComponentProps<typeof Kobalte> {}
6
- export interface AccordionItemProps extends ComponentProps<typeof Kobalte.Item> {}
7
- export interface AccordionHeaderProps extends ComponentProps<typeof Kobalte.Header> {}
8
- export interface AccordionTriggerProps extends ComponentProps<typeof Kobalte.Trigger> {}
9
- export interface AccordionContentProps extends ComponentProps<typeof Kobalte.Content> {}
5
+ export interface AccordionProps extends ComponentProps<typeof Root> {}
6
+ export interface AccordionItemProps extends ComponentProps<typeof Item> {}
7
+ export interface AccordionHeaderProps extends ComponentProps<typeof Header> {}
8
+ export interface AccordionTriggerProps extends ComponentProps<typeof Trigger> {}
9
+ export interface AccordionContentProps extends ComponentProps<typeof Content> {}
10
10
 
11
11
  function AccordionRoot(props: AccordionProps) {
12
12
  const [split, rest] = splitProps(props, ["class", "classList"])
13
13
  return (
14
- <Kobalte
14
+ <Root
15
15
  {...rest}
16
16
  data-component="accordion"
17
17
  classList={{
@@ -25,7 +25,7 @@ function AccordionRoot(props: AccordionProps) {
25
25
  function AccordionItem(props: AccordionItemProps) {
26
26
  const [split, rest] = splitProps(props, ["class", "classList"])
27
27
  return (
28
- <Kobalte.Item
28
+ <Item
29
29
  {...rest}
30
30
  data-slot="accordion-item"
31
31
  classList={{
@@ -39,7 +39,7 @@ function AccordionItem(props: AccordionItemProps) {
39
39
  function AccordionHeader(props: ParentProps<AccordionHeaderProps>) {
40
40
  const [split, rest] = splitProps(props, ["class", "classList", "children"])
41
41
  return (
42
- <Kobalte.Header
42
+ <Header
43
43
  {...rest}
44
44
  data-slot="accordion-header"
45
45
  classList={{
@@ -48,14 +48,14 @@ function AccordionHeader(props: ParentProps<AccordionHeaderProps>) {
48
48
  }}
49
49
  >
50
50
  {split.children}
51
- </Kobalte.Header>
51
+ </Header>
52
52
  )
53
53
  }
54
54
 
55
55
  function AccordionTrigger(props: ParentProps<AccordionTriggerProps>) {
56
56
  const [split, rest] = splitProps(props, ["class", "classList", "children"])
57
57
  return (
58
- <Kobalte.Trigger
58
+ <Trigger
59
59
  {...rest}
60
60
  data-slot="accordion-trigger"
61
61
  classList={{
@@ -64,14 +64,14 @@ function AccordionTrigger(props: ParentProps<AccordionTriggerProps>) {
64
64
  }}
65
65
  >
66
66
  {split.children}
67
- </Kobalte.Trigger>
67
+ </Trigger>
68
68
  )
69
69
  }
70
70
 
71
71
  function AccordionContent(props: ParentProps<AccordionContentProps>) {
72
72
  const [split, rest] = splitProps(props, ["class", "classList", "children"])
73
73
  return (
74
- <Kobalte.Content
74
+ <Content
75
75
  {...rest}
76
76
  data-slot="accordion-content"
77
77
  classList={{
@@ -80,7 +80,7 @@ function AccordionContent(props: ParentProps<AccordionContentProps>) {
80
80
  }}
81
81
  >
82
82
  {split.children}
83
- </Kobalte.Content>
83
+ </Content>
84
84
  )
85
85
  }
86
86
 
@@ -1,5 +1,5 @@
1
1
  import { type ComponentProps, splitProps, Show } from "solid-js"
2
- import "./avatar-v2.css"
2
+ import "./avatar.css"
3
3
 
4
4
  const segmenter =
5
5
  typeof Intl !== "undefined" && "Segmenter" in Intl
@@ -31,3 +31,22 @@
31
31
  background: var(--v2-background-bg-accent);
32
32
  color: var(--v2-text-text-contrast);
33
33
  }
34
+
35
+ [data-component="tag"][data-appearance="standard"] {
36
+ height: 18px;
37
+ padding: 0 6px;
38
+ border-radius: var(--radius-xs);
39
+ font-family: var(--font-family-sans);
40
+ font-size: var(--font-size-small);
41
+ font-style: normal;
42
+ font-weight: var(--font-weight-medium);
43
+ line-height: var(--line-height-large);
44
+ letter-spacing: var(--letter-spacing-normal);
45
+ font-variant-numeric: normal;
46
+ }
47
+
48
+ [data-component="tag"][data-appearance="standard"][data-variant="neutral"] {
49
+ border: 0.5px solid var(--border-weak-base);
50
+ background: var(--surface-raised-base);
51
+ color: var(--text-base);
52
+ }
@@ -1,16 +1,18 @@
1
1
  import { type ComponentProps, splitProps } from "solid-js"
2
- import "./badge-v2.css"
2
+ import "./badge.css"
3
3
 
4
- export interface TagProps extends ComponentProps<"span"> {
4
+ export interface BadgeProps extends ComponentProps<"span"> {
5
+ appearance?: "standard" | "compact"
5
6
  variant?: "neutral" | "accent"
6
7
  }
7
8
 
8
- export function Tag(props: TagProps) {
9
- const [split, rest] = splitProps(props, ["class", "classList", "children", "variant"])
9
+ export function Badge(props: BadgeProps) {
10
+ const [split, rest] = splitProps(props, ["class", "classList", "children", "appearance", "variant"])
10
11
  return (
11
12
  <span
12
13
  {...rest}
13
14
  data-component="tag"
15
+ data-appearance={split.appearance ?? "compact"}
14
16
  data-variant={split.variant ?? "neutral"}
15
17
  classList={{
16
18
  ...split.classList,
@@ -6,18 +6,27 @@
6
6
  justify-content: flex-end;
7
7
  align-items: center;
8
8
 
9
- [data-slot="diff-changes-additions"] {
10
- font-family: var(--font-family-mono);
11
- font-feature-settings: var(--font-family-mono--font-feature-settings);
12
- font-size: 14px;
9
+ [data-slot="diff-changes-additions"],
10
+ [data-slot="diff-changes-deletions"] {
11
+ font-size: 11px;
13
12
  font-style: normal;
14
- font-weight: var(--font-weight-regular);
15
- line-height: var(--line-height-large);
16
- letter-spacing: var(--letter-spacing-normal);
13
+ font-weight: 440;
14
+ line-height: 1;
15
+ letter-spacing: 0.05px;
17
16
  text-align: right;
18
- color: var(--text-diff-add-base);
17
+ }
18
+
19
+ [data-slot="diff-changes-additions"] {
20
+ color: var(--v2-state-fg-success);
19
21
  }
20
22
 
23
+ [data-slot="diff-changes-deletions"] {
24
+ color: var(--v2-state-fg-danger);
25
+ }
26
+ }
27
+
28
+ [data-component="diff-changes"][data-appearance="standard"] {
29
+ [data-slot="diff-changes-additions"],
21
30
  [data-slot="diff-changes-deletions"] {
22
31
  font-family: var(--font-family-mono);
23
32
  font-feature-settings: var(--font-family-mono--font-feature-settings);
@@ -26,19 +35,13 @@
26
35
  font-weight: var(--font-weight-regular);
27
36
  line-height: var(--line-height-large);
28
37
  letter-spacing: var(--letter-spacing-normal);
29
- text-align: right;
30
- color: var(--text-diff-delete-base);
31
38
  }
32
- }
33
39
 
34
- [data-component="diff-changes"][data-variant="bars"] {
35
- width: 18px;
36
- height: 14px;
37
- flex-shrink: 0;
40
+ [data-slot="diff-changes-additions"] {
41
+ color: var(--text-diff-add-base);
42
+ }
38
43
 
39
- svg {
40
- display: block;
41
- width: 100%;
42
- height: 100%;
44
+ [data-slot="diff-changes-deletions"] {
45
+ color: var(--text-diff-delete-base);
43
46
  }
44
47
  }
@@ -1,8 +1,9 @@
1
1
  import { createMemo, Show } from "solid-js"
2
- import "./diff-changes-v2.css"
2
+ import "./diff-changes.css"
3
3
 
4
4
  export function DiffChanges(props: {
5
5
  class?: string
6
+ appearance?: "standard" | "compact"
6
7
  changes: { additions: number; deletions: number } | { additions: number; deletions: number }[]
7
8
  }) {
8
9
  const additions = createMemo(() =>
@@ -19,7 +20,11 @@ export function DiffChanges(props: {
19
20
 
20
21
  return (
21
22
  <Show when={total() > 0}>
22
- <div data-component="diff-changes" classList={{ [props.class ?? ""]: true }}>
23
+ <div
24
+ data-component="diff-changes"
25
+ data-appearance={props.appearance ?? "compact"}
26
+ classList={{ [props.class ?? ""]: true }}
27
+ >
23
28
  <span data-slot="diff-changes-additions">{`+${additions()}`}</span>
24
29
  <span data-slot="diff-changes-deletions">{`-${deletions()}`}</span>
25
30
  </div>
@@ -27,6 +27,7 @@
27
27
  justify-content: center;
28
28
  align-items: center;
29
29
  padding: 0;
30
+ padding-inline: 4px;
30
31
  gap: 4px;
31
32
  min-width: 14px;
32
33
  height: 14px;
@@ -48,7 +49,6 @@
48
49
  flex-direction: row;
49
50
  justify-content: center;
50
51
  align-items: center;
51
- min-width: 14px;
52
52
  height: 11px;
53
53
  padding: 0;
54
54
  flex: none;
@@ -1,12 +1,12 @@
1
1
  import { type ComponentProps, For, splitProps } from "solid-js"
2
- import "./keybind-v2.css"
2
+ import "./keybind.css"
3
3
 
4
- export interface KeybindV2Props extends ComponentProps<"div"> {
4
+ export interface KeybindProps extends ComponentProps<"div"> {
5
5
  keys: string[]
6
6
  variant?: "neutral" | "ghost"
7
7
  }
8
8
 
9
- export function KeybindV2(props: KeybindV2Props) {
9
+ export function Keybind(props: KeybindProps) {
10
10
  const [local, rest] = splitProps(props, ["keys", "variant", "class", "classList"])
11
11
  return (
12
12
  <div
@@ -49,7 +49,7 @@
49
49
  font-size: 13px;
50
50
  font-style: normal;
51
51
  font-weight: 440;
52
- line-height: 1;
52
+ line-height: var(--line-height-compact);
53
53
  letter-spacing: -0.04px;
54
54
  color: var(--v2-text-text-base);
55
55
  font-variation-settings: "slnt" 0;
@@ -59,7 +59,7 @@
59
59
  font-size: 11px;
60
60
  font-style: normal;
61
61
  font-weight: 530;
62
- line-height: 1;
62
+ line-height: var(--line-height-tight);
63
63
  letter-spacing: 0.05px;
64
64
  color: var(--v2-text-text-faint);
65
65
  font-variation-settings: "slnt" 0;
@@ -103,7 +103,7 @@
103
103
  background-color: var(--v2-overlay-simple-overlay-hover);
104
104
  }
105
105
 
106
- [data-slot="line-comment-v2-overflow"]:is(:active, [data-state="pressed"]) {
106
+ [data-slot="line-comment-v2-overflow"]:is(:active, [data-state="pressed"], [data-expanded]) {
107
107
  background-color: var(--v2-overlay-simple-overlay-pressed);
108
108
  }
109
109
 
@@ -138,7 +138,7 @@
138
138
  font-size: 13px;
139
139
  font-style: normal;
140
140
  font-weight: 530;
141
- line-height: 1;
141
+ line-height: var(--line-height-compact);
142
142
  letter-spacing: -0.04px;
143
143
  color: var(--v2-text-text-base);
144
144
  user-select: none;
@@ -1,12 +1,12 @@
1
1
  import { For, Show, createSignal, onMount, splitProps, type ComponentProps, type JSX } from "solid-js"
2
- import { FileIcon } from "../../components/file-icon"
2
+ import { FileIcon } from "@opencode-ai/ui/file-icon"
3
3
  import { useI18n } from "../../context/i18n"
4
4
  import { useFilteredList } from "../../hooks"
5
- import { ButtonV2 } from "./button-v2"
6
- import "./line-comment-v2.css"
5
+ import { Button } from "@opencode-ai/ui/button"
6
+ import "./line-comment.css"
7
7
 
8
8
  /** Horizontal “more” glyph for the display-card overflow control (Figma outline-dots). */
9
- export function LineCommentV2OverflowIcon(props: ComponentProps<"svg">) {
9
+ export function LineCommentOverflowIcon(props: ComponentProps<"svg">) {
10
10
  return (
11
11
  <svg
12
12
  {...props}
@@ -24,16 +24,16 @@ export function LineCommentV2OverflowIcon(props: ComponentProps<"svg">) {
24
24
  )
25
25
  }
26
26
 
27
- export interface LineCommentV2Props extends ComponentProps<"div"> {
27
+ export interface LineCommentProps extends ComponentProps<"div"> {
28
28
  /** Main comment body (text or rich content). */
29
29
  comment: JSX.Element
30
30
  /** Line / selection context (e.g. “Comment on line 40”). */
31
31
  selection: JSX.Element
32
- /** Typically an overflow menu trigger; use `LineCommentV2OverflowIcon` inside `line-comment-v2-overflow`. */
32
+ /** Typically an overflow menu trigger; use `LineCommentOverflowIcon` inside `line-comment-v2-overflow`. */
33
33
  actions?: JSX.Element
34
34
  }
35
35
 
36
- export function LineCommentV2(props: LineCommentV2Props) {
36
+ export function LineComment(props: LineCommentProps) {
37
37
  const [local, rest] = splitProps(props, ["comment", "selection", "actions", "class", "classList"])
38
38
  return (
39
39
  <div
@@ -56,11 +56,11 @@ export function LineCommentV2(props: LineCommentV2Props) {
56
56
  )
57
57
  }
58
58
 
59
- export type LineCommentEditorV2Mention = {
59
+ export type LineCommentEditorMention = {
60
60
  items: (query: string) => string[] | Promise<string[]>
61
61
  }
62
62
 
63
- export interface LineCommentEditorV2Props extends Omit<ComponentProps<"div">, "children" | "onInput" | "onSubmit"> {
63
+ export interface LineCommentEditorProps extends Omit<ComponentProps<"div">, "children" | "onInput" | "onSubmit"> {
64
64
  /** Visible field label above the textarea (default: “Comment”). */
65
65
  heading?: JSX.Element | string
66
66
  value: string
@@ -73,7 +73,7 @@ export interface LineCommentEditorV2Props extends Omit<ComponentProps<"div">, "c
73
73
  cancelLabel?: string
74
74
  submitLabel?: string
75
75
  autofocus?: boolean
76
- mention?: LineCommentEditorV2Mention
76
+ mention?: LineCommentEditorMention
77
77
  }
78
78
 
79
79
  function pathFilename(path: string) {
@@ -86,7 +86,7 @@ function pathDirectory(path: string) {
86
86
  return index === -1 ? "" : path.slice(0, index + 1)
87
87
  }
88
88
 
89
- export function LineCommentEditorV2(props: LineCommentEditorV2Props) {
89
+ export function LineCommentEditor(props: LineCommentEditorProps) {
90
90
  const i18n = useI18n()
91
91
  let textareaRef: HTMLTextAreaElement | undefined
92
92
  const [mentionOpen, setMentionOpen] = createSignal(false)
@@ -212,9 +212,11 @@ export function LineCommentEditorV2(props: LineCommentEditorV2Props) {
212
212
  textareaRef = el
213
213
  }}
214
214
  data-slot="line-comment-v2-textarea"
215
+ dir="auto"
215
216
  rows={local.rows ?? 3}
216
217
  placeholder={local.placeholder ?? i18n.t("ui.lineComment.contextPlaceholder")}
217
218
  value={local.value}
219
+ style={{ "unicode-bidi": "plaintext", "text-align": "start" }}
218
220
  onInput={(e) => {
219
221
  local.onInput(e.currentTarget.value)
220
222
  syncMention()
@@ -292,12 +294,12 @@ export function LineCommentEditorV2(props: LineCommentEditorV2Props) {
292
294
  <div data-slot="line-comment-v2-footer">
293
295
  <div data-slot="line-comment-v2-footer-meta">{local.selection}</div>
294
296
  <div data-slot="line-comment-v2-footer-actions">
295
- <ButtonV2 type="button" size="normal" variant="neutral" onClick={() => local.onCancel()}>
297
+ <Button type="button" size="normal" variant="ghost" onClick={() => local.onCancel()}>
296
298
  {local.cancelLabel ?? i18n.t("ui.lineComment.cancel")}
297
- </ButtonV2>
298
- <ButtonV2 type="button" size="normal" variant="contrast" disabled={!canSubmit()} onClick={submit}>
299
+ </Button>
300
+ <Button type="button" size="normal" variant="contrast" disabled={!canSubmit()} onClick={submit}>
299
301
  {local.submitLabel ?? i18n.t("ui.lineComment.submit")}
300
- </ButtonV2>
302
+ </Button>
301
303
  </div>
302
304
  </div>
303
305
  </div>
@@ -1,5 +1,5 @@
1
1
  import { type ComponentProps, splitProps, Show } from "solid-js"
2
- import "./project-avatar-v2.css"
2
+ import "./project-avatar.css"
3
3
 
4
4
  const segmenter =
5
5
  typeof Intl !== "undefined" && "Segmenter" in Intl
@@ -1,7 +1,7 @@
1
1
  import { splitProps, type ComponentProps } from "solid-js"
2
- import "./loader-v2.css"
2
+ import "./loader.css"
3
3
 
4
- export function LoaderV2(props: ComponentProps<"svg">) {
4
+ export function Loader(props: ComponentProps<"svg">) {
5
5
  const [local, rest] = splitProps(props, ["class", "classList", "width", "height"])
6
6
  return (
7
7
  <svg
@@ -0,0 +1,28 @@
1
+ [data-component="progress-circle"] {
2
+ display: block;
3
+ transform: rotate(-90deg);
4
+ }
5
+
6
+ [data-component="progress-circle"][data-appearance="compact"] [data-slot="progress-circle-background"] {
7
+ stroke: var(--v2-background-bg-layer-04);
8
+ }
9
+
10
+ [data-component="progress-circle"][data-appearance="compact"] [data-slot="progress-circle-progress"] {
11
+ stroke: var(--v2-icon-icon-base);
12
+ }
13
+
14
+ [data-component="progress-circle"][data-appearance="indicator"] [data-slot="progress-circle-background"] {
15
+ stroke: var(--progress-circle-background, var(--border-weak-base));
16
+ }
17
+
18
+ [data-component="progress-circle"][data-appearance="indicator"] [data-slot="progress-circle-background-overlay"] {
19
+ stroke: var(--progress-circle-background-overlay, transparent);
20
+ }
21
+
22
+ [data-component="progress-circle"][data-appearance="indicator"] [data-slot="progress-circle-progress"] {
23
+ stroke: var(--progress-circle-progress, var(--border-active));
24
+ }
25
+
26
+ [data-component="progress-circle"] [data-slot="progress-circle-progress"] {
27
+ transition: stroke-dashoffset 0.35s cubic-bezier(0.65, 0, 0.35, 1);
28
+ }
@@ -0,0 +1,64 @@
1
+ import { type ComponentProps, createMemo, Show, splitProps } from "solid-js"
2
+ import "./progress-circle.css"
3
+
4
+ export interface ProgressCircleProps extends Pick<ComponentProps<"svg">, "class" | "classList" | "style"> {
5
+ percentage: number
6
+ appearance?: "compact" | "indicator"
7
+ size?: number
8
+ strokeWidth?: number
9
+ }
10
+
11
+ export function ProgressCircle(props: ProgressCircleProps) {
12
+ const [local, rest] = splitProps(props, ["percentage", "appearance", "size", "strokeWidth", "class", "classList"])
13
+
14
+ const appearance = () => local.appearance ?? "compact"
15
+ const viewBoxSize = () => (appearance() === "indicator" ? 16 : 14)
16
+ const size = () => local.size ?? viewBoxSize()
17
+ const strokeWidth = () => local.strokeWidth ?? (appearance() === "indicator" ? 3 : 1.5)
18
+ const center = () => viewBoxSize() / 2
19
+ const radius = () => center() - strokeWidth() / 2
20
+ const circumference = createMemo(() => 2 * Math.PI * radius())
21
+ const offset = createMemo(() => circumference() * (1 - Math.max(0, Math.min(100, local.percentage || 0)) / 100))
22
+
23
+ return (
24
+ <svg
25
+ {...rest}
26
+ width={size()}
27
+ height={size()}
28
+ viewBox={`0 0 ${viewBoxSize()} ${viewBoxSize()}`}
29
+ fill="none"
30
+ data-component="progress-circle"
31
+ data-appearance={appearance()}
32
+ classList={{
33
+ ...local.classList,
34
+ [local.class ?? ""]: !!local.class,
35
+ }}
36
+ >
37
+ <circle
38
+ cx={center()}
39
+ cy={center()}
40
+ r={radius()}
41
+ data-slot="progress-circle-background"
42
+ stroke-width={strokeWidth()}
43
+ />
44
+ <Show when={appearance() === "indicator"}>
45
+ <circle
46
+ cx={center()}
47
+ cy={center()}
48
+ r={radius()}
49
+ data-slot="progress-circle-background-overlay"
50
+ stroke-width={strokeWidth()}
51
+ />
52
+ </Show>
53
+ <circle
54
+ cx={center()}
55
+ cy={center()}
56
+ r={radius()}
57
+ data-slot="progress-circle-progress"
58
+ stroke-width={strokeWidth()}
59
+ stroke-dasharray={circumference().toString()}
60
+ stroke-dashoffset={offset()}
61
+ />
62
+ </svg>
63
+ )
64
+ }