@opencode-ai/ui 0.0.0-dev-202608201855 → 0.0.0-dev-17751

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 (285) 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/{components → data-display/accordion}/accordion.d.ts +6 -6
  9. package/dist/{v2/components/avatar-v2.d.ts → data-display/avatar/avatar.d.ts} +1 -1
  10. package/dist/data-display/badge/badge.d.ts +7 -0
  11. package/dist/{components → data-display/diff-changes}/diff-changes.d.ts +2 -1
  12. package/dist/data-display/keybind/keybind.d.ts +7 -0
  13. package/dist/{v2/components/line-comment-v2.d.ts → data-display/line-comment/line-comment.d.ts} +9 -9
  14. package/dist/{v2/components/project-avatar-v2.d.ts → data-display/project-avatar/project-avatar.d.ts} +1 -1
  15. package/dist/feedback/loader/loader.d.ts +3 -0
  16. package/dist/{components → feedback/progress-circle}/progress-circle.d.ts +2 -0
  17. package/dist/feedback/toast/toast.d.ts +57 -0
  18. package/dist/{components → forms/checkbox}/checkbox.d.ts +2 -2
  19. package/dist/{v2/components/field-v2.d.ts → forms/field/field.d.ts} +4 -10
  20. package/dist/forms/radio/radio.d.ts +16 -0
  21. package/dist/{v2/components/select-v2.d.ts → forms/select/select.d.ts} +4 -6
  22. package/dist/{components → forms/switch}/switch.d.ts +4 -2
  23. package/dist/{v2/components/text-input-v2.d.ts → forms/text-input/text-input.d.ts} +3 -3
  24. package/dist/forms/textarea/textarea.d.ts +7 -0
  25. package/dist/i18n/ar.d.ts +0 -2
  26. package/dist/i18n/bg.d.ts +0 -2
  27. package/dist/i18n/br.d.ts +0 -2
  28. package/dist/i18n/bs.d.ts +0 -2
  29. package/dist/i18n/da.d.ts +0 -2
  30. package/dist/i18n/de.d.ts +0 -2
  31. package/dist/i18n/en.d.ts +209 -1
  32. package/dist/i18n/es.d.ts +0 -2
  33. package/dist/i18n/fr.d.ts +0 -2
  34. package/dist/i18n/he.d.ts +197 -0
  35. package/dist/i18n/ja.d.ts +0 -2
  36. package/dist/i18n/km.d.ts +0 -2
  37. package/dist/i18n/ko.d.ts +0 -2
  38. package/dist/i18n/lo.d.ts +0 -2
  39. package/dist/i18n/mk.d.ts +0 -2
  40. package/dist/i18n/mn.d.ts +0 -2
  41. package/dist/i18n/my.d.ts +0 -2
  42. package/dist/i18n/pl.d.ts +0 -2
  43. package/dist/i18n/ru.d.ts +0 -2
  44. package/dist/i18n/sr.d.ts +0 -2
  45. package/dist/i18n/tg.d.ts +0 -2
  46. package/dist/i18n/th.d.ts +0 -2
  47. package/dist/i18n/tr.d.ts +0 -2
  48. package/dist/i18n/zh.d.ts +0 -2
  49. package/dist/i18n/zht.d.ts +0 -2
  50. package/dist/{components/icon.d.ts → icons/icon/additional-icons.d.ts} +8 -8
  51. package/dist/{v2/components → icons/icon}/icon.d.ts +16 -1
  52. package/dist/layout/divider/divider.d.ts +5 -0
  53. package/dist/navigation/menu/menu.d.ts +59 -0
  54. package/dist/{v2/components/segmented-control-v2.d.ts → navigation/segmented-control/segmented-control.d.ts} +5 -5
  55. package/dist/{components → navigation/tabs}/tabs.d.ts +15 -8
  56. package/dist/{v2/components/dialog-v2.d.ts → overlays/dialog/dialog.d.ts} +1 -2
  57. package/dist/overlays/tooltip/tooltip.d.ts +14 -0
  58. package/dist/{components → typography/text-shimmer}/text-shimmer.d.ts +1 -0
  59. package/dist/typography/wordmark/wordmark.d.ts +2 -0
  60. package/package.json +131 -13
  61. package/src/{v2/components/button-v2.tsx → actions/button/button.tsx} +8 -8
  62. package/src/actions/icon-button/icon-button.tsx +32 -0
  63. package/src/{v2/components/split-button-v2.css → actions/split-button/split-button.css} +1 -6
  64. package/src/{v2/components/split-button-v2.tsx → actions/split-button/split-button.tsx} +4 -4
  65. package/src/components/animated-number.css +29 -11
  66. package/src/components/animated-number.tsx +2 -2
  67. package/src/components/card.css +2 -23
  68. package/src/components/card.tsx +4 -4
  69. package/src/components/collapsible.tsx +1 -1
  70. package/src/components/image-preview.tsx +3 -2
  71. package/src/components/list.css +5 -5
  72. package/src/components/list.tsx +7 -5
  73. package/src/components/popover.tsx +3 -2
  74. package/src/components/provider-icon.tsx +1 -1
  75. package/src/components/scroll-view.tsx +5 -20
  76. package/src/components/sticky-accordion-header.tsx +1 -1
  77. package/src/components/text-field.tsx +12 -4
  78. package/src/context/i18n.tsx +17 -14
  79. package/src/{components → data-display/accordion}/accordion.css +1 -26
  80. package/src/{components → data-display/accordion}/accordion.tsx +14 -14
  81. package/src/{v2/components/avatar-v2.tsx → data-display/avatar/avatar.tsx} +1 -1
  82. package/src/{v2/components/badge-v2.css → data-display/badge/badge.css} +19 -0
  83. package/src/{v2/components/badge-v2.tsx → data-display/badge/badge.tsx} +6 -4
  84. package/src/{components → data-display/diff-changes}/diff-changes.css +22 -19
  85. package/src/{v2/components/diff-changes-v2.tsx → data-display/diff-changes/diff-changes.tsx} +7 -2
  86. package/src/{v2/components/keybind-v2.css → data-display/keybind/keybind.css} +1 -1
  87. package/src/{v2/components/keybind-v2.tsx → data-display/keybind/keybind.tsx} +3 -3
  88. package/src/{v2/components/line-comment-v2.tsx → data-display/line-comment/line-comment.tsx} +17 -15
  89. package/src/{v2/components/project-avatar-v2.tsx → data-display/project-avatar/project-avatar.tsx} +1 -1
  90. package/src/{v2/components/loader-v2.tsx → feedback/loader/loader.tsx} +2 -2
  91. package/src/feedback/progress-circle/progress-circle.css +28 -0
  92. package/src/feedback/progress-circle/progress-circle.tsx +64 -0
  93. package/src/{v2/components/toast-v2.tsx → feedback/toast/toast.tsx} +60 -58
  94. package/src/{components → forms/checkbox}/checkbox.css +1 -7
  95. package/src/{components → forms/checkbox}/checkbox.tsx +13 -13
  96. package/src/{v2/components/field-v2.tsx → forms/field/field.tsx} +9 -11
  97. package/src/{v2/components/radio-v2.tsx → forms/radio/radio.tsx} +30 -20
  98. package/src/{v2/components/select-v2.css → forms/select/select.css} +2 -8
  99. package/src/{v2/components/select-v2.tsx → forms/select/select.tsx} +38 -32
  100. package/src/{v2/components/switch-v2.css → forms/switch/switch.css} +110 -0
  101. package/src/forms/switch/switch.tsx +34 -0
  102. package/src/{v2/components/text-input-v2.tsx → forms/text-input/text-input.tsx} +4 -4
  103. package/src/{v2/components/textarea-v2.tsx → forms/textarea/textarea.tsx} +3 -3
  104. package/src/hooks/create-auto-scroll.tsx +20 -0
  105. package/src/i18n/am.ts +0 -2
  106. package/src/i18n/ar.ts +0 -2
  107. package/src/i18n/az.ts +0 -2
  108. package/src/i18n/bg.ts +0 -2
  109. package/src/i18n/bn.ts +0 -2
  110. package/src/i18n/br.ts +0 -2
  111. package/src/i18n/bs.ts +0 -2
  112. package/src/i18n/ca.ts +0 -2
  113. package/src/i18n/cs.ts +0 -2
  114. package/src/i18n/da.ts +0 -2
  115. package/src/i18n/de.ts +0 -2
  116. package/src/i18n/dv.ts +0 -2
  117. package/src/i18n/dz.ts +0 -2
  118. package/src/i18n/el.ts +0 -2
  119. package/src/i18n/en.ts +18 -4
  120. package/src/i18n/es.ts +0 -2
  121. package/src/i18n/et.ts +0 -2
  122. package/src/i18n/fa.ts +0 -2
  123. package/src/i18n/fi.ts +0 -2
  124. package/src/i18n/fo.ts +0 -2
  125. package/src/i18n/fr.ts +0 -2
  126. package/src/i18n/he.ts +199 -0
  127. package/src/i18n/hi.ts +0 -2
  128. package/src/i18n/hr.ts +0 -2
  129. package/src/i18n/hu.ts +0 -2
  130. package/src/i18n/hy.ts +0 -2
  131. package/src/i18n/id.ts +0 -2
  132. package/src/i18n/is.ts +0 -2
  133. package/src/i18n/it.ts +0 -2
  134. package/src/i18n/ja.ts +0 -2
  135. package/src/i18n/ka.ts +0 -2
  136. package/src/i18n/km.ts +0 -2
  137. package/src/i18n/ko.ts +0 -2
  138. package/src/i18n/lo.ts +0 -2
  139. package/src/i18n/lt.ts +0 -2
  140. package/src/i18n/lv.ts +0 -2
  141. package/src/i18n/mk.ts +0 -2
  142. package/src/i18n/mn.ts +0 -2
  143. package/src/i18n/ms.ts +0 -2
  144. package/src/i18n/my.ts +0 -2
  145. package/src/i18n/ne.ts +0 -2
  146. package/src/i18n/nl.ts +0 -2
  147. package/src/i18n/no.ts +0 -2
  148. package/src/i18n/pa.ts +0 -2
  149. package/src/i18n/pl.ts +0 -2
  150. package/src/i18n/ro.ts +0 -2
  151. package/src/i18n/ru.ts +0 -2
  152. package/src/i18n/si.ts +0 -2
  153. package/src/i18n/sk.ts +0 -2
  154. package/src/i18n/sl.ts +0 -2
  155. package/src/i18n/sq.ts +0 -2
  156. package/src/i18n/sr.ts +0 -2
  157. package/src/i18n/sv.ts +0 -2
  158. package/src/i18n/tg.ts +0 -2
  159. package/src/i18n/th.ts +0 -2
  160. package/src/i18n/tk.ts +0 -2
  161. package/src/i18n/tr.ts +0 -2
  162. package/src/i18n/uk.ts +0 -2
  163. package/src/i18n/ur.ts +0 -2
  164. package/src/i18n/uz.ts +0 -2
  165. package/src/i18n/vi.ts +0 -2
  166. package/src/i18n/zh.ts +0 -2
  167. package/src/i18n/zht.ts +0 -2
  168. package/src/{components/icon.tsx → icons/icon/additional-icons.ts} +8 -74
  169. package/src/icons/icon/icon.css +3 -0
  170. package/src/{v2/components → icons/icon}/icon.tsx +42 -9
  171. package/src/{v2/components/divider-v2.tsx → layout/divider/divider.tsx} +3 -3
  172. package/src/{v2/components/menu-v2.css → navigation/menu/menu.css} +121 -0
  173. package/src/{v2/components/menu-v2.tsx → navigation/menu/menu.tsx} +96 -32
  174. package/src/{v2/components/segmented-control-v2.tsx → navigation/segmented-control/segmented-control.tsx} +9 -8
  175. package/src/{v2/components/tabs-v2.css → navigation/tabs/tabs-current.css} +24 -9
  176. package/src/{components → navigation/tabs}/tabs.css +39 -229
  177. package/src/navigation/tabs/tabs.tsx +194 -0
  178. package/src/{v2/components/dialog-v2.css → overlays/dialog/dialog.css} +3 -0
  179. package/src/{v2/components/dialog-v2.tsx → overlays/dialog/dialog.tsx} +11 -13
  180. package/src/{v2/components/tooltip-v2.css → overlays/tooltip/tooltip.css} +26 -0
  181. package/src/{v2/components/tooltip-v2.tsx → overlays/tooltip/tooltip.tsx} +18 -14
  182. package/src/styles/index.css +4 -20
  183. package/src/styles/tailwind/index.css +15 -1
  184. package/src/{v2/styles → styles/tokens}/theme.css +0 -12
  185. package/src/theme/context.tsx +19 -11
  186. package/src/theme/themes/oc-2.json +1 -1
  187. package/src/{components → typography/text-shimmer}/text-shimmer.css +2 -1
  188. package/src/{components → typography/text-shimmer}/text-shimmer.tsx +1 -0
  189. package/src/{v2/components/wordmark-v2.tsx → typography/wordmark/wordmark.tsx} +1 -1
  190. package/dist/components/avatar.d.ts +0 -9
  191. package/dist/components/button.d.ts +0 -9
  192. package/dist/components/dialog.d.ts +0 -12
  193. package/dist/components/dropdown-menu.d.ts +0 -80
  194. package/dist/components/icon-button.d.ts +0 -10
  195. package/dist/components/keybind.d.ts +0 -6
  196. package/dist/components/radio-group.d.ts +0 -16
  197. package/dist/components/select.d.ts +0 -21
  198. package/dist/components/tag.d.ts +0 -5
  199. package/dist/components/toast.d.ts +0 -56
  200. package/dist/components/tooltip.d.ts +0 -17
  201. package/dist/v2/components/accordion-v2.d.ts +0 -26
  202. package/dist/v2/components/badge-v2.d.ts +0 -6
  203. package/dist/v2/components/button-v2.d.ts +0 -10
  204. package/dist/v2/components/checkbox-v2.d.ts +0 -10
  205. package/dist/v2/components/diff-changes-v2.d.ts +0 -11
  206. package/dist/v2/components/divider-v2.d.ts +0 -5
  207. package/dist/v2/components/icon-button-v2.d.ts +0 -11
  208. package/dist/v2/components/inline-input-v2.d.ts +0 -21
  209. package/dist/v2/components/keybind-v2.d.ts +0 -7
  210. package/dist/v2/components/loader-v2.d.ts +0 -3
  211. package/dist/v2/components/menu-v2.d.ts +0 -52
  212. package/dist/v2/components/progress-circle-v2.d.ts +0 -8
  213. package/dist/v2/components/radio-v2.d.ts +0 -16
  214. package/dist/v2/components/split-button-v2.d.ts +0 -5
  215. package/dist/v2/components/switch-v2.d.ts +0 -7
  216. package/dist/v2/components/tabs-v2.d.ts +0 -34
  217. package/dist/v2/components/text-shimmer-v2.d.ts +0 -9
  218. package/dist/v2/components/textarea-v2.d.ts +0 -7
  219. package/dist/v2/components/toast-v2.d.ts +0 -57
  220. package/dist/v2/components/tooltip-v2.d.ts +0 -13
  221. package/dist/v2/components/wordmark-v2.d.ts +0 -2
  222. package/src/components/avatar.css +0 -49
  223. package/src/components/avatar.tsx +0 -55
  224. package/src/components/button.css +0 -194
  225. package/src/components/button.tsx +0 -33
  226. package/src/components/dialog.css +0 -181
  227. package/src/components/dialog.tsx +0 -72
  228. package/src/components/diff-changes.tsx +0 -115
  229. package/src/components/dropdown-menu.css +0 -135
  230. package/src/components/dropdown-menu.tsx +0 -308
  231. package/src/components/icon-button.css +0 -181
  232. package/src/components/icon-button.tsx +0 -29
  233. package/src/components/icon.css +0 -39
  234. package/src/components/keybind.css +0 -18
  235. package/src/components/keybind.tsx +0 -20
  236. package/src/components/progress-circle.css +0 -16
  237. package/src/components/progress-circle.tsx +0 -64
  238. package/src/components/radio-group.css +0 -187
  239. package/src/components/radio-group.tsx +0 -83
  240. package/src/components/select.css +0 -201
  241. package/src/components/select.tsx +0 -174
  242. package/src/components/switch.css +0 -136
  243. package/src/components/switch.tsx +0 -29
  244. package/src/components/tabs.tsx +0 -126
  245. package/src/components/tag.css +0 -37
  246. package/src/components/tag.tsx +0 -22
  247. package/src/components/toast.css +0 -236
  248. package/src/components/toast.tsx +0 -185
  249. package/src/components/tooltip.css +0 -74
  250. package/src/components/tooltip.tsx +0 -163
  251. package/src/v2/components/accordion-v2.css +0 -139
  252. package/src/v2/components/accordion-v2.tsx +0 -86
  253. package/src/v2/components/checkbox-v2.css +0 -184
  254. package/src/v2/components/checkbox-v2.tsx +0 -65
  255. package/src/v2/components/diff-changes-v2.css +0 -26
  256. package/src/v2/components/icon-button-v2.tsx +0 -37
  257. package/src/v2/components/inline-input-v2.css +0 -225
  258. package/src/v2/components/inline-input-v2.tsx +0 -107
  259. package/src/v2/components/progress-circle-v2.css +0 -13
  260. package/src/v2/components/progress-circle-v2.tsx +0 -52
  261. package/src/v2/components/switch-v2.tsx +0 -28
  262. package/src/v2/components/tabs-v2.tsx +0 -149
  263. package/src/v2/components/text-shimmer-v2.css +0 -125
  264. package/src/v2/components/text-shimmer-v2.tsx +0 -63
  265. /package/dist/{components → forms/inline-input}/inline-input.d.ts +0 -0
  266. /package/dist/{v2/components → navigation}/tab-state-indicator.d.ts +0 -0
  267. /package/src/{v2/components/button-v2.css → actions/button/button.css} +0 -0
  268. /package/src/{v2/components/icon-button-v2.css → actions/icon-button/icon-button.css} +0 -0
  269. /package/src/{v2/components/avatar-v2.css → data-display/avatar/avatar.css} +0 -0
  270. /package/src/{v2/components/line-comment-v2.css → data-display/line-comment/line-comment.css} +0 -0
  271. /package/src/{v2/components/project-avatar-v2.css → data-display/project-avatar/project-avatar.css} +0 -0
  272. /package/src/{v2/components/loader-v2.css → feedback/loader/loader.css} +0 -0
  273. /package/src/{v2/components/toast-v2.css → feedback/toast/toast.css} +0 -0
  274. /package/src/{v2/components/field-v2.css → forms/field/field.css} +0 -0
  275. /package/src/{components → forms/inline-input}/inline-input.css +0 -0
  276. /package/src/{components → forms/inline-input}/inline-input.tsx +0 -0
  277. /package/src/{v2/components/radio-v2.css → forms/radio/radio.css} +0 -0
  278. /package/src/{v2/components/text-input-v2.css → forms/text-input/text-input.css} +0 -0
  279. /package/src/{v2/components/textarea-v2.css → forms/textarea/textarea.css} +0 -0
  280. /package/src/{v2/components/divider-v2.css → layout/divider/divider.css} +0 -0
  281. /package/src/{v2/components/segmented-control-v2.css → navigation/segmented-control/segmented-control.css} +0 -0
  282. /package/src/{v2/components → navigation}/tab-state-indicator.tsx +0 -0
  283. /package/src/{v2/components/file-tree-v2.css → styles/file-tree.css} +0 -0
  284. /package/src/{v2/styles → styles/tokens}/colors.css +0 -0
  285. /package/src/{v2/styles/tailwind.css → styles/tokens/index.css} +0 -0
@@ -31,7 +31,7 @@
31
31
  align-self: stretch;
32
32
  margin-bottom: 4px;
33
33
 
34
- > [data-component="icon-button"] {
34
+ > [data-component="icon-button-v2"] {
35
35
  width: 24px;
36
36
  height: 24px;
37
37
  flex-shrink: 0;
@@ -83,7 +83,7 @@
83
83
  }
84
84
  }
85
85
 
86
- > [data-component="icon-button"] {
86
+ > [data-component="icon-button-v2"] {
87
87
  width: 20px;
88
88
  height: 20px;
89
89
  background-color: transparent;
@@ -106,7 +106,7 @@
106
106
  }
107
107
  }
108
108
 
109
- > [data-component="icon-button"] {
109
+ > [data-component="icon-button-v2"] {
110
110
  background-color: transparent;
111
111
 
112
112
  &:hover:not(:disabled),
@@ -252,7 +252,7 @@
252
252
  justify-content: center;
253
253
  flex-shrink: 0;
254
254
  aspect-ratio: 1/1;
255
- [data-component="icon"] {
255
+ [data-slot="icon-svg"] {
256
256
  color: var(--icon-strong-base);
257
257
  }
258
258
  }
@@ -262,7 +262,7 @@
262
262
  justify-content: center;
263
263
  flex-shrink: 0;
264
264
  aspect-ratio: 1/1;
265
- [data-component="icon"] {
265
+ [data-slot="icon-svg"] {
266
266
  color: var(--icon-strong-base);
267
267
  }
268
268
  }
@@ -3,8 +3,8 @@ import { createEffect, For, type JSX, on, Show } from "solid-js"
3
3
  import { createStore } from "solid-js/store"
4
4
  import { makeEventListener } from "@solid-primitives/event-listener"
5
5
  import { useI18n } from "../context/i18n"
6
- import { Icon, type IconProps } from "./icon"
7
- import { IconButton } from "./icon-button"
6
+ import { Icon, type IconProps } from "@opencode-ai/ui/icon"
7
+ import { IconButton } from "@opencode-ai/ui/icon-button"
8
8
  import { TextField } from "./text-field"
9
9
 
10
10
  function findByKey(container: HTMLElement, key: string) {
@@ -302,7 +302,7 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void })
302
302
  </div>
303
303
  <Show when={internalFilter()}>
304
304
  <IconButton
305
- icon="circle-x"
305
+ icon={<Icon name="circle-x" />}
306
306
  variant="ghost"
307
307
  onClick={() => {
308
308
  setInternalFilter("")
@@ -367,9 +367,11 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void })
367
367
  </span>
368
368
  )}
369
369
  </Show>
370
- {props.divider && (i() !== group.items.length - 1 || (showAdd() && isLastGroup())) && (
370
+ <Show
371
+ when={props.divider && (i() !== group.items.length - 1 || (showAdd() && isLastGroup()))}
372
+ >
371
373
  <span data-slot="list-item-divider" />
372
- )}
374
+ </Show>
373
375
  </button>
374
376
  )
375
377
  if (props.itemWrapper) return props.itemWrapper(item, node)
@@ -3,7 +3,8 @@ import { ComponentProps, JSXElement, ParentProps, Show, createEffect, splitProps
3
3
  import { createStore } from "solid-js/store"
4
4
  import { makeEventListener } from "@solid-primitives/event-listener"
5
5
  import { useI18n } from "../context/i18n"
6
- import { IconButton } from "./icon-button"
6
+ import { Icon } from "@opencode-ai/ui/icon"
7
+ import { IconButton } from "@opencode-ai/ui/icon-button"
7
8
 
8
9
  export interface PopoverProps<T extends ValidComponent = "div">
9
10
  extends ParentProps,
@@ -122,7 +123,7 @@ export function Popover<T extends ValidComponent = "div">(props: PopoverProps<T>
122
123
  <Kobalte.CloseButton
123
124
  data-slot="popover-close-button"
124
125
  as={IconButton}
125
- icon="close"
126
+ icon={<Icon name="close" />}
126
127
  variant="ghost"
127
128
  aria-label={i18n.t("ui.common.close")}
128
129
  />
@@ -9,7 +9,7 @@ export type ProviderIconProps = JSX.SVGElementTags["svg"] & {
9
9
 
10
10
  export const ProviderIcon: Component<ProviderIconProps> = (props) => {
11
11
  const [local, rest] = splitProps(props, ["id", "class", "classList"])
12
- const resolved = createMemo(() => (iconNames.includes(local.id as IconName) ? local.id : "synthetic"))
12
+ const resolved = createMemo(() => (iconNames.includes(local.id as IconName) ? local.id : "session.synthetic"))
13
13
  return (
14
14
  <svg
15
15
  data-component="provider-icon"
@@ -1,14 +1,4 @@
1
- import {
2
- createEffect,
3
- createMemo,
4
- mergeProps,
5
- onCleanup,
6
- onMount,
7
- Show,
8
- splitProps,
9
- type Accessor,
10
- type ComponentProps,
11
- } from "solid-js"
1
+ import { createEffect, mergeProps, onCleanup, onMount, Show, splitProps, type ComponentProps } from "solid-js"
12
2
  import { Portal } from "solid-js/web"
13
3
  import { createResizeObserver } from "@solid-primitives/resize-observer"
14
4
  import { createStore } from "solid-js/store"
@@ -27,9 +17,9 @@ export interface ScrollViewProps extends ComponentProps<"div"> {
27
17
  * */
28
18
  thumbVisibility?: ScrollViewThumbVisibility
29
19
  /** Mount the thumb into an external track. Scroll metrics still come from this ScrollView. */
30
- thumbContainer?: HTMLElement | Accessor<HTMLElement | undefined>
20
+ thumbContainer?: HTMLElement
31
21
  /** Element whose hover reveals the thumb. Defaults to the ScrollView root when unset. */
32
- thumbHoverTarget?: HTMLElement | Accessor<HTMLElement | undefined>
22
+ thumbHoverTarget?: HTMLElement
33
23
  }
34
24
 
35
25
  export const scrollKey = (event: Pick<KeyboardEvent, "key" | "altKey" | "ctrlKey" | "metaKey" | "shiftKey">) => {
@@ -128,13 +118,8 @@ export function ScrollView(props: ScrollViewProps) {
128
118
  let viewportRef!: HTMLDivElement
129
119
  let thumbRef!: HTMLDivElement
130
120
 
131
- const resolveEl = (value: HTMLElement | Accessor<HTMLElement | undefined> | undefined) => {
132
- if (typeof value === "function") return value()
133
- return value
134
- }
135
-
136
- const thumbMount = createMemo(() => resolveEl(local.thumbContainer))
137
- const thumbHover = createMemo(() => resolveEl(local.thumbHoverTarget))
121
+ const thumbMount = () => local.thumbContainer
122
+ const thumbHover = () => local.thumbHoverTarget
138
123
  const hoverRoot = () => !local.thumbHoverTarget && !local.thumbContainer
139
124
 
140
125
  const [state, setState] = createStore({
@@ -1,4 +1,4 @@
1
- import { Accordion } from "./accordion"
1
+ import { Accordion } from "@opencode-ai/ui/accordion"
2
2
  import { ParentProps } from "solid-js"
3
3
 
4
4
  export function StickyAccordionHeader(
@@ -2,8 +2,9 @@ import { TextField as Kobalte } from "@kobalte/core/text-field"
2
2
  import { createSignal, Show, splitProps } from "solid-js"
3
3
  import type { ComponentProps } from "solid-js"
4
4
  import { useI18n } from "../context/i18n"
5
- import { IconButton } from "./icon-button"
6
- import { Tooltip } from "./tooltip"
5
+ import { IconButton } from "@opencode-ai/ui/icon-button"
6
+ import { Icon } from "@opencode-ai/ui/icon"
7
+ import { Tooltip } from "@opencode-ai/ui/tooltip"
7
8
 
8
9
  export interface TextFieldProps
9
10
  extends ComponentProps<typeof Kobalte.Input>,
@@ -106,10 +107,17 @@ export function TextField(props: TextFieldProps) {
106
107
  <Kobalte.TextArea {...others} autoResize data-slot="input-input" class={local.class} />
107
108
  </Show>
108
109
  <Show when={local.copyable}>
109
- <Tooltip value={label()} placement="top" gutter={4} forceOpen={copied()} skipDelayDuration={0}>
110
+ <Tooltip
111
+ appearance="standard"
112
+ value={label()}
113
+ placement="top"
114
+ gutter={4}
115
+ forceOpen={copied() ? true : undefined}
116
+ skipDelayDuration={0}
117
+ >
110
118
  <IconButton
111
119
  type="button"
112
- icon={icon()}
120
+ icon={<Icon name={icon()} />}
113
121
  variant="ghost"
114
122
  onClick={handleCopy}
115
123
  tabIndex={-1}
@@ -1,26 +1,24 @@
1
1
  import { createContext, useContext, type Accessor, type ParentProps } from "solid-js"
2
2
  import { I18nProvider } from "@kobalte/core/i18n"
3
3
  import { dict as en } from "../i18n/en"
4
+ import type { Key, LocaleKey, PluralCategory, PluralKey, PluralLookupKey } from "../i18n/en"
4
5
 
5
- export type UiI18nKey = keyof typeof en
6
-
7
- export const UI_PLURAL_KEYS = [
8
- "ui.sessionTurn.diffs.changed",
9
- "ui.messagePart.context.read",
10
- "ui.messagePart.context.search",
11
- "ui.messagePart.context.list",
12
- ] as const
13
- export type UiI18nPluralKey = (typeof UI_PLURAL_KEYS)[number]
14
- export type UiPluralCategory = "zero" | "one" | "two" | "few" | "many" | "other"
15
- export type UiI18nPluralLookupKey = `${UiI18nPluralKey}.${UiPluralCategory}`
6
+ export type UiI18nKey = Key
7
+ export type UiI18nPluralKey = PluralKey
8
+ export type UiPluralCategory = PluralCategory
9
+ export type UiI18nPluralLookupKey = PluralLookupKey
10
+ export type UiI18nLocaleKey = LocaleKey
11
+ type UiTranslationKey<Value extends string> = Value extends UiI18nPluralLookupKey ? never : Value
16
12
 
17
13
  export type UiI18nParams = Record<string, string | number | boolean>
14
+ export type UiTranslate = <Value extends string>(key: UiTranslationKey<Value>, params?: UiI18nParams) => string
18
15
 
19
16
  export type UiI18n = {
20
17
  locale: Accessor<string>
21
18
  layoutLocale?: Accessor<string>
22
- t: (key: UiI18nKey, params?: UiI18nParams) => string
19
+ t: UiTranslate
23
20
  plural: (key: UiI18nPluralKey, count: number, params?: UiI18nParams) => string
21
+ pluralForm?: (key: UiI18nPluralKey, category: UiPluralCategory, params?: UiI18nParams) => string
24
22
  }
25
23
 
26
24
  const rules = new Map<string, Intl.PluralRules>()
@@ -50,11 +48,16 @@ function resolveTemplate(text: string, params?: UiI18nParams) {
50
48
  const fallback: UiI18n = {
51
49
  locale: () => "en",
52
50
  t: (key, params) => {
53
- const value = en[key] ?? String(key)
51
+ const value = en[key as UiI18nKey] ?? String(key)
54
52
  return resolveTemplate(value, params)
55
53
  },
56
54
  plural: (key, count, params) =>
57
- fallback.t(pluralKey(key, pluralCategory(fallback.locale(), count)), { ...params, count }),
55
+ fallback.pluralForm!(key, pluralCategory(fallback.locale(), count), { ...params, count }),
56
+ pluralForm: (key, category, params) => {
57
+ const values = en as Partial<Record<UiI18nLocaleKey, string>>
58
+ const value = values[pluralKey(key, category)] ?? values[`${key}.other`] ?? `${key}.other`
59
+ return resolveTemplate(value, params)
60
+ },
58
61
  }
59
62
 
60
63
  const Context = createContext<UiI18n>(fallback)
@@ -43,12 +43,11 @@
43
43
  color: var(--v2-text-text-base);
44
44
  transition: background-color 0.15s ease;
45
45
 
46
- /* text-12-regular */
47
46
  font-family: var(--font-family-sans);
48
47
  font-size: var(--font-size-small);
49
48
  font-style: normal;
50
49
  font-weight: var(--font-weight-regular);
51
- line-height: var(--line-height-large); /* 166.667% */
50
+ line-height: var(--line-height-large);
52
51
  letter-spacing: var(--letter-spacing-normal);
53
52
 
54
53
  &:hover:not([data-disabled]) {
@@ -104,30 +103,6 @@
104
103
  }
105
104
  }
106
105
 
107
- body:not([data-new-layout]) [data-component="accordion"] {
108
- [data-slot="accordion-item"] [data-slot="accordion-header"] [data-slot="accordion-trigger"] {
109
- background-color: var(--background-stronger);
110
- border-width: 1px;
111
- border-color: var(--border-weak-base);
112
- color: var(--text-strong);
113
-
114
- &:hover:not([data-disabled]) {
115
- background-color: var(--surface-base-hover);
116
- }
117
-
118
- &:active:not([data-disabled]) {
119
- background-color: var(--surface-base-active);
120
- }
121
- }
122
-
123
- [data-slot="accordion-item"][data-expanded] [data-slot="accordion-content"] {
124
- border-width: 1px;
125
- border-color: var(--border-weak-base);
126
- border-top: 0;
127
- background-color: var(--background-stronger);
128
- }
129
- }
130
-
131
106
  @keyframes slideDown {
132
107
  from {
133
108
  height: 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
@@ -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="neutral" 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