@opencode-ai/ui 0.0.0-dev-202609050337 → 0.0.0-dev-19145

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 +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 +2 -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/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 +59 -12
  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
@@ -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
+ }