@opencode-ai/ui 0.0.0-dev-18424 → 0.0.0-dev-202608272004

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 (289) hide show
  1. package/dist/{data-display/accordion → components}/accordion.d.ts +6 -6
  2. package/dist/components/avatar.d.ts +9 -0
  3. package/dist/components/button.d.ts +9 -0
  4. package/dist/components/card.d.ts +1 -1
  5. package/dist/{forms/checkbox → components}/checkbox.d.ts +2 -2
  6. package/dist/components/dialog.d.ts +12 -0
  7. package/dist/{data-display/diff-changes → components}/diff-changes.d.ts +1 -2
  8. package/dist/components/dropdown-menu.d.ts +80 -0
  9. package/dist/components/icon-button.d.ts +10 -0
  10. package/dist/{icons/icon/additional-icons.d.ts → components/icon.d.ts} +8 -8
  11. package/dist/components/keybind.d.ts +6 -0
  12. package/dist/components/list.d.ts +1 -1
  13. package/dist/{feedback/progress-circle → components}/progress-circle.d.ts +0 -2
  14. package/dist/components/radio-group.d.ts +16 -0
  15. package/dist/components/scroll-view.d.ts +3 -3
  16. package/dist/components/select.d.ts +21 -0
  17. package/dist/{forms/switch → components}/switch.d.ts +2 -4
  18. package/dist/{navigation/tabs → components}/tabs.d.ts +8 -15
  19. package/dist/components/tag.d.ts +5 -0
  20. package/dist/{typography/text-shimmer → components}/text-shimmer.d.ts +0 -1
  21. package/dist/components/toast.d.ts +56 -0
  22. package/dist/components/tooltip.d.ts +17 -0
  23. package/dist/context/i18n.d.ts +7 -10
  24. package/dist/i18n/ar.d.ts +2 -0
  25. package/dist/i18n/bg.d.ts +2 -0
  26. package/dist/i18n/br.d.ts +2 -0
  27. package/dist/i18n/bs.d.ts +2 -0
  28. package/dist/i18n/da.d.ts +2 -0
  29. package/dist/i18n/de.d.ts +2 -0
  30. package/dist/i18n/en.d.ts +1 -227
  31. package/dist/i18n/es.d.ts +2 -0
  32. package/dist/i18n/fr.d.ts +2 -0
  33. package/dist/i18n/ja.d.ts +2 -0
  34. package/dist/i18n/km.d.ts +2 -0
  35. package/dist/i18n/ko.d.ts +2 -0
  36. package/dist/i18n/lo.d.ts +2 -0
  37. package/dist/i18n/mk.d.ts +2 -0
  38. package/dist/i18n/mn.d.ts +2 -0
  39. package/dist/i18n/my.d.ts +2 -0
  40. package/dist/i18n/pl.d.ts +2 -0
  41. package/dist/i18n/ru.d.ts +2 -0
  42. package/dist/i18n/sr.d.ts +2 -0
  43. package/dist/i18n/tg.d.ts +2 -0
  44. package/dist/i18n/th.d.ts +2 -0
  45. package/dist/i18n/tr.d.ts +2 -0
  46. package/dist/i18n/zh.d.ts +2 -0
  47. package/dist/i18n/zht.d.ts +2 -0
  48. package/dist/v2/components/accordion-v2.d.ts +26 -0
  49. package/dist/{data-display/avatar/avatar.d.ts → v2/components/avatar-v2.d.ts} +1 -1
  50. package/dist/v2/components/badge-v2.d.ts +6 -0
  51. package/dist/v2/components/button-v2.d.ts +10 -0
  52. package/dist/v2/components/checkbox-v2.d.ts +10 -0
  53. package/dist/{overlays/dialog/dialog.d.ts → v2/components/dialog-v2.d.ts} +2 -1
  54. package/dist/v2/components/diff-changes-v2.d.ts +11 -0
  55. package/dist/v2/components/divider-v2.d.ts +5 -0
  56. package/dist/{forms/field/field.d.ts → v2/components/field-v2.d.ts} +10 -4
  57. package/dist/v2/components/icon-button-v2.d.ts +11 -0
  58. package/dist/{icons/icon → v2/components}/icon.d.ts +1 -24
  59. package/dist/v2/components/inline-input-v2.d.ts +21 -0
  60. package/dist/v2/components/keybind-v2.d.ts +7 -0
  61. package/dist/{data-display/line-comment/line-comment.d.ts → v2/components/line-comment-v2.d.ts} +9 -9
  62. package/dist/v2/components/loader-v2.d.ts +3 -0
  63. package/dist/v2/components/menu-v2.d.ts +52 -0
  64. package/dist/v2/components/progress-circle-v2.d.ts +8 -0
  65. package/dist/{data-display/project-avatar/project-avatar.d.ts → v2/components/project-avatar-v2.d.ts} +1 -1
  66. package/dist/v2/components/radio-v2.d.ts +16 -0
  67. package/dist/{navigation/segmented-control/segmented-control.d.ts → v2/components/segmented-control-v2.d.ts} +5 -5
  68. package/dist/{forms/select/select.d.ts → v2/components/select-v2.d.ts} +6 -4
  69. package/dist/v2/components/split-button-v2.d.ts +5 -0
  70. package/dist/v2/components/switch-v2.d.ts +7 -0
  71. package/dist/v2/components/tabs-v2.d.ts +34 -0
  72. package/dist/{forms/text-input/text-input.d.ts → v2/components/text-input-v2.d.ts} +3 -3
  73. package/dist/v2/components/text-shimmer-v2.d.ts +9 -0
  74. package/dist/v2/components/textarea-v2.d.ts +7 -0
  75. package/dist/v2/components/toast-v2.d.ts +57 -0
  76. package/dist/v2/components/tooltip-v2.d.ts +13 -0
  77. package/dist/v2/components/wordmark-v2.d.ts +2 -0
  78. package/package.json +13 -131
  79. package/src/{data-display/accordion → components}/accordion.css +26 -1
  80. package/src/{data-display/accordion → components}/accordion.tsx +14 -14
  81. package/src/components/animated-number.css +11 -29
  82. package/src/components/animated-number.tsx +2 -2
  83. package/src/components/avatar.css +49 -0
  84. package/src/components/avatar.tsx +55 -0
  85. package/src/components/button.css +194 -0
  86. package/src/{actions/button → components}/button.tsx +11 -10
  87. package/src/components/card.css +23 -2
  88. package/src/components/card.tsx +4 -4
  89. package/src/{forms/checkbox → components}/checkbox.css +7 -1
  90. package/src/{forms/checkbox → components}/checkbox.tsx +13 -13
  91. package/src/components/collapsible.tsx +2 -2
  92. package/src/components/dialog.css +181 -0
  93. package/src/components/dialog.tsx +72 -0
  94. package/src/{data-display/diff-changes → components}/diff-changes.css +19 -22
  95. package/src/components/diff-changes.tsx +115 -0
  96. package/src/components/dock-surface.css +9 -2
  97. package/src/components/dropdown-menu.css +135 -0
  98. package/src/components/dropdown-menu.tsx +308 -0
  99. package/src/components/icon-button.css +181 -0
  100. package/src/components/icon-button.tsx +29 -0
  101. package/src/components/icon.css +39 -0
  102. package/src/{icons/icon/additional-icons.ts → components/icon.tsx} +74 -8
  103. package/src/components/image-preview.tsx +2 -3
  104. package/src/components/keybind.css +18 -0
  105. package/src/components/keybind.tsx +20 -0
  106. package/src/components/list.css +5 -5
  107. package/src/components/list.tsx +5 -7
  108. package/src/components/popover.tsx +2 -3
  109. package/src/components/progress-circle.css +16 -0
  110. package/src/components/progress-circle.tsx +64 -0
  111. package/src/components/radio-group.css +187 -0
  112. package/src/components/radio-group.tsx +83 -0
  113. package/src/components/scroll-view.tsx +20 -5
  114. package/src/components/select.css +201 -0
  115. package/src/components/select.tsx +174 -0
  116. package/src/components/sticky-accordion-header.tsx +1 -1
  117. package/src/components/switch.css +136 -0
  118. package/src/components/switch.tsx +29 -0
  119. package/src/{navigation/tabs → components}/tabs.css +229 -39
  120. package/src/components/tabs.tsx +126 -0
  121. package/src/components/tag.css +37 -0
  122. package/src/components/tag.tsx +22 -0
  123. package/src/components/text-field.tsx +4 -12
  124. package/src/{typography/text-shimmer → components}/text-shimmer.css +1 -2
  125. package/src/{typography/text-shimmer → components}/text-shimmer.tsx +0 -1
  126. package/src/components/toast.css +236 -0
  127. package/src/components/toast.tsx +185 -0
  128. package/src/components/tooltip.css +74 -0
  129. package/src/components/tooltip.tsx +163 -0
  130. package/src/context/dialog.tsx +0 -1
  131. package/src/context/i18n.tsx +14 -17
  132. package/src/hooks/create-auto-scroll.tsx +0 -20
  133. package/src/i18n/am.ts +3 -1
  134. package/src/i18n/ar.ts +3 -1
  135. package/src/i18n/az.ts +3 -1
  136. package/src/i18n/bg.ts +3 -1
  137. package/src/i18n/bn.ts +3 -1
  138. package/src/i18n/br.ts +3 -1
  139. package/src/i18n/bs.ts +3 -1
  140. package/src/i18n/ca.ts +3 -1
  141. package/src/i18n/cs.ts +3 -1
  142. package/src/i18n/da.ts +3 -1
  143. package/src/i18n/de.ts +3 -1
  144. package/src/i18n/dv.ts +3 -1
  145. package/src/i18n/dz.ts +3 -1
  146. package/src/i18n/el.ts +3 -1
  147. package/src/i18n/en.ts +5 -37
  148. package/src/i18n/es.ts +3 -1
  149. package/src/i18n/et.ts +3 -1
  150. package/src/i18n/fa.ts +3 -1
  151. package/src/i18n/fi.ts +3 -1
  152. package/src/i18n/fo.ts +3 -1
  153. package/src/i18n/fr.ts +3 -1
  154. package/src/i18n/hi.ts +3 -1
  155. package/src/i18n/hr.ts +3 -1
  156. package/src/i18n/hu.ts +3 -1
  157. package/src/i18n/hy.ts +3 -1
  158. package/src/i18n/id.ts +3 -1
  159. package/src/i18n/is.ts +3 -1
  160. package/src/i18n/it.ts +3 -1
  161. package/src/i18n/ja.ts +3 -1
  162. package/src/i18n/ka.ts +3 -1
  163. package/src/i18n/km.ts +3 -1
  164. package/src/i18n/ko.ts +3 -1
  165. package/src/i18n/lo.ts +3 -1
  166. package/src/i18n/lt.ts +3 -1
  167. package/src/i18n/lv.ts +3 -1
  168. package/src/i18n/mk.ts +3 -1
  169. package/src/i18n/mn.ts +3 -1
  170. package/src/i18n/ms.ts +3 -1
  171. package/src/i18n/my.ts +3 -1
  172. package/src/i18n/ne.ts +3 -1
  173. package/src/i18n/nl.ts +3 -1
  174. package/src/i18n/no.ts +3 -1
  175. package/src/i18n/pa.ts +3 -1
  176. package/src/i18n/pl.ts +3 -1
  177. package/src/i18n/ro.ts +3 -1
  178. package/src/i18n/ru.ts +3 -1
  179. package/src/i18n/si.ts +3 -1
  180. package/src/i18n/sk.ts +3 -1
  181. package/src/i18n/sl.ts +3 -1
  182. package/src/i18n/sq.ts +3 -1
  183. package/src/i18n/sr.ts +3 -1
  184. package/src/i18n/sv.ts +3 -1
  185. package/src/i18n/tg.ts +3 -1
  186. package/src/i18n/th.ts +3 -1
  187. package/src/i18n/tk.ts +3 -1
  188. package/src/i18n/tr.ts +3 -1
  189. package/src/i18n/uk.ts +3 -1
  190. package/src/i18n/ur.ts +3 -1
  191. package/src/i18n/uz.ts +3 -1
  192. package/src/i18n/vi.ts +3 -1
  193. package/src/i18n/zh.ts +3 -1
  194. package/src/i18n/zht.ts +3 -1
  195. package/src/styles/index.css +20 -4
  196. package/src/styles/tailwind/colors.css +0 -1
  197. package/src/styles/tailwind/index.css +1 -18
  198. package/src/styles/theme.css +2 -2
  199. package/src/theme/context.tsx +11 -19
  200. package/src/theme/themes/oc-2.json +1 -3
  201. package/src/theme/v2/foreground.ts +0 -1
  202. package/src/v2/components/accordion-v2.css +139 -0
  203. package/src/v2/components/accordion-v2.tsx +86 -0
  204. package/src/{data-display/avatar/avatar.tsx → v2/components/avatar-v2.tsx} +1 -1
  205. package/src/{data-display/badge/badge.css → v2/components/badge-v2.css} +0 -19
  206. package/src/{data-display/badge/badge.tsx → v2/components/badge-v2.tsx} +4 -6
  207. package/src/v2/components/button-v2.tsx +35 -0
  208. package/src/v2/components/checkbox-v2.css +184 -0
  209. package/src/v2/components/checkbox-v2.tsx +65 -0
  210. package/src/{overlays/dialog/dialog.css → v2/components/dialog-v2.css} +0 -3
  211. package/src/{overlays/dialog/dialog.tsx → v2/components/dialog-v2.tsx} +13 -11
  212. package/src/v2/components/diff-changes-v2.css +26 -0
  213. package/src/{data-display/diff-changes/diff-changes.tsx → v2/components/diff-changes-v2.tsx} +2 -7
  214. package/src/{layout/divider/divider.tsx → v2/components/divider-v2.tsx} +3 -3
  215. package/src/{forms/field/field.css → v2/components/field-v2.css} +1 -1
  216. package/src/{forms/field/field.tsx → v2/components/field-v2.tsx} +11 -9
  217. package/src/v2/components/icon-button-v2.tsx +37 -0
  218. package/src/{icons/icon → v2/components}/icon.tsx +9 -50
  219. package/src/v2/components/inline-input-v2.css +225 -0
  220. package/src/v2/components/inline-input-v2.tsx +107 -0
  221. package/src/{data-display/keybind/keybind.css → v2/components/keybind-v2.css} +1 -1
  222. package/src/{data-display/keybind/keybind.tsx → v2/components/keybind-v2.tsx} +3 -3
  223. package/src/{data-display/line-comment/line-comment.css → v2/components/line-comment-v2.css} +3 -3
  224. package/src/{data-display/line-comment/line-comment.tsx → v2/components/line-comment-v2.tsx} +15 -17
  225. package/src/{feedback/loader/loader.tsx → v2/components/loader-v2.tsx} +2 -2
  226. package/src/{navigation/menu/menu.css → v2/components/menu-v2.css} +2 -122
  227. package/src/{navigation/menu/menu.tsx → v2/components/menu-v2.tsx} +32 -96
  228. package/src/v2/components/progress-circle-v2.css +13 -0
  229. package/src/v2/components/progress-circle-v2.tsx +52 -0
  230. package/src/{data-display/project-avatar/project-avatar.tsx → v2/components/project-avatar-v2.tsx} +1 -1
  231. package/src/{forms/radio/radio.tsx → v2/components/radio-v2.tsx} +20 -30
  232. package/src/{navigation/segmented-control/segmented-control.css → v2/components/segmented-control-v2.css} +1 -1
  233. package/src/{navigation/segmented-control/segmented-control.tsx → v2/components/segmented-control-v2.tsx} +8 -9
  234. package/src/{forms/select/select.css → v2/components/select-v2.css} +8 -2
  235. package/src/{forms/select/select.tsx → v2/components/select-v2.tsx} +32 -38
  236. package/src/{actions/split-button/split-button.css → v2/components/split-button-v2.css} +6 -1
  237. package/src/{actions/split-button/split-button.tsx → v2/components/split-button-v2.tsx} +4 -4
  238. package/src/{forms/switch/switch.css → v2/components/switch-v2.css} +0 -110
  239. package/src/v2/components/switch-v2.tsx +28 -0
  240. package/src/{navigation/tabs/tabs-current.css → v2/components/tabs-v2.css} +10 -25
  241. package/src/v2/components/tabs-v2.tsx +149 -0
  242. package/src/{forms/text-input/text-input.css → v2/components/text-input-v2.css} +1 -1
  243. package/src/{forms/text-input/text-input.tsx → v2/components/text-input-v2.tsx} +4 -4
  244. package/src/v2/components/text-shimmer-v2.css +125 -0
  245. package/src/v2/components/text-shimmer-v2.tsx +63 -0
  246. package/src/{forms/textarea/textarea.tsx → v2/components/textarea-v2.tsx} +3 -3
  247. package/src/{feedback/toast/toast.tsx → v2/components/toast-v2.tsx} +58 -60
  248. package/src/{overlays/tooltip/tooltip.css → v2/components/tooltip-v2.css} +0 -26
  249. package/src/{overlays/tooltip/tooltip.tsx → v2/components/tooltip-v2.tsx} +14 -21
  250. package/src/{typography/wordmark/wordmark.tsx → v2/components/wordmark-v2.tsx} +1 -1
  251. package/src/{styles/tokens → v2/styles}/theme.css +14 -10
  252. package/dist/actions/button/button.d.ts +0 -10
  253. package/dist/actions/icon-button/icon-button.d.ts +0 -11
  254. package/dist/actions/split-button/split-button.d.ts +0 -5
  255. package/dist/data-display/badge/badge.d.ts +0 -7
  256. package/dist/data-display/keybind/keybind.d.ts +0 -7
  257. package/dist/feedback/loader/loader.d.ts +0 -3
  258. package/dist/feedback/toast/toast.d.ts +0 -57
  259. package/dist/forms/radio/radio.d.ts +0 -16
  260. package/dist/forms/textarea/textarea.d.ts +0 -7
  261. package/dist/i18n/he.d.ts +0 -197
  262. package/dist/layout/divider/divider.d.ts +0 -5
  263. package/dist/navigation/menu/menu.d.ts +0 -59
  264. package/dist/overlays/tooltip/tooltip.d.ts +0 -15
  265. package/dist/typography/wordmark/wordmark.d.ts +0 -2
  266. package/src/actions/icon-button/icon-button.tsx +0 -32
  267. package/src/feedback/progress-circle/progress-circle.css +0 -28
  268. package/src/feedback/progress-circle/progress-circle.tsx +0 -64
  269. package/src/forms/switch/switch.tsx +0 -34
  270. package/src/i18n/he.ts +0 -199
  271. package/src/icons/icon/icon.css +0 -3
  272. package/src/navigation/tabs/tabs.tsx +0 -194
  273. /package/dist/{forms/inline-input → components}/inline-input.d.ts +0 -0
  274. /package/dist/{navigation → v2/components}/tab-state-indicator.d.ts +0 -0
  275. /package/src/{forms/inline-input → components}/inline-input.css +0 -0
  276. /package/src/{forms/inline-input → components}/inline-input.tsx +0 -0
  277. /package/src/{data-display/avatar/avatar.css → v2/components/avatar-v2.css} +0 -0
  278. /package/src/{actions/button/button.css → v2/components/button-v2.css} +0 -0
  279. /package/src/{layout/divider/divider.css → v2/components/divider-v2.css} +0 -0
  280. /package/src/{styles/file-tree.css → v2/components/file-tree-v2.css} +0 -0
  281. /package/src/{actions/icon-button/icon-button.css → v2/components/icon-button-v2.css} +0 -0
  282. /package/src/{feedback/loader/loader.css → v2/components/loader-v2.css} +0 -0
  283. /package/src/{data-display/project-avatar/project-avatar.css → v2/components/project-avatar-v2.css} +0 -0
  284. /package/src/{forms/radio/radio.css → v2/components/radio-v2.css} +0 -0
  285. /package/src/{navigation → v2/components}/tab-state-indicator.tsx +0 -0
  286. /package/src/{forms/textarea/textarea.css → v2/components/textarea-v2.css} +0 -0
  287. /package/src/{feedback/toast/toast.css → v2/components/toast-v2.css} +0 -0
  288. /package/src/{styles/tokens → v2/styles}/colors.css +0 -0
  289. /package/src/{styles/tokens/index.css → v2/styles/tailwind.css} +0 -0
@@ -1,8 +1,5 @@
1
1
  import { onMount, type ComponentProps, splitProps } from "solid-js"
2
- import { additionalIcons, additionalIconViewBox } from "./additional-icons"
3
- import "./icon.css"
4
2
 
5
- // Consumers center the SVG viewport, so each icon must center its artwork within its viewBox.
6
3
  const icons = {
7
4
  edit: {
8
5
  viewBox: "0 0 16 16",
@@ -20,10 +17,6 @@ const icons = {
20
17
  viewBox: "0 0 16 16",
21
18
  body: `<path d="M5.118 5.686V10.314M5.118 5.686C5.97 5.686 6.661 4.995 6.661 4.143C6.661 3.291 5.97 2.6 5.118 2.6C4.266 2.6 3.575 3.291 3.575 4.143C3.575 4.995 4.266 5.686 5.118 5.686ZM5.118 10.314C4.266 10.314 3.575 11.005 3.575 11.857C3.575 12.709 4.266 13.4 5.118 13.4C5.97 13.4 6.661 12.709 6.661 11.857M5.118 10.314C5.97 10.314 6.661 11.005 6.661 11.857M10.882 5.686C11.734 5.686 12.425 4.995 12.425 4.143C12.425 3.291 11.734 2.6 10.882 2.6C10.03 2.6 9.339 3.291 9.339 4.143C9.339 4.995 10.03 5.686 10.882 5.686ZM10.882 5.686V9.457C10.882 10.783 9.807 11.857 8.482 11.857H6.661" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>`,
22
19
  },
23
- "branch-out": {
24
- viewBox: "0 0 16 16",
25
- body: `<path d="M10.4225 3.35355L12.9024 5.83344L10.4225 8.31333" stroke="currentColor"/><path d="M1 12.2852H4.23042C4.89912 12.2852 5.52359 11.951 5.89452 11.3946L9.00783 6.72462C8.37877 6.16823 10.0032 5.83402 10.6719 5.83402H12.9024" stroke="currentColor"/><path d="M8.5 12.2852H14" stroke="currentColor" stroke-linejoin="round"/>`,
26
- },
27
20
  "grid-plus": {
28
21
  viewBox: "0 0 16 16",
29
22
  body: `<path d="M13.9948 11.668H9.32812M11.6641 9.33203V13.9987M6.66667 9.33203V13.9987H2V9.33203H6.66667ZM6.66667 2V6.66667H2V2H6.66667ZM13.9948 2V6.66667H9.32812V2H13.9948Z" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="square"/>`,
@@ -32,10 +25,6 @@ const icons = {
32
25
  viewBox: "0 0 16 16",
33
26
  body: `<path d="M6.33345 6.33349V5.00015H9.66679V7.00015L8.00015 8.00015V9.66679M8.27485 11.6819H7.71897M14.4446 8.00011C14.4446 11.5593 11.5593 14.4446 8.00011 14.4446C4.44094 14.4446 1.55566 11.5593 1.55566 8.00011C1.55566 4.44094 4.44094 1.55566 8.00011 1.55566C11.5593 1.55566 14.4446 4.44094 14.4446 8.00011Z" stroke="currentColor" stroke-linecap="square"/>`,
34
27
  },
35
- "circle-exclamation": {
36
- viewBox: "0 0 16 16",
37
- body: `<path d="M7.9987 5.50016V8.50016M7.9987 10.5002V10.5068M14.1654 8.00016C14.1654 11.4059 11.4045 14.1668 7.9987 14.1668C6.29582 14.1668 4.75415 13.4766 3.63821 12.3607C2.52226 11.2447 1.83203 9.70304 1.83203 8.00016C1.83203 4.59441 4.59294 1.8335 7.9987 1.8335C9.70158 1.8335 11.2432 2.52372 12.3592 3.63967C13.4751 4.75562 14.1654 6.29728 14.1654 8.00016Z" stroke="currentColor" stroke-linecap="square"/>`,
38
- },
39
28
  "sidebar-right": {
40
29
  viewBox: "0 0 20 20",
41
30
  body: `<path d="M2.91536 2.91406H2.36536V2.36406H2.91536V2.91406ZM2.91536 17.0807V17.6307H2.36536V17.0807H2.91536ZM17.082 17.0807H17.632V17.6307H17.082V17.0807ZM17.082 2.91406V2.36406H17.632V2.91406H17.082ZM6.9987 2.91406H6.4487V2.36406H6.9987V2.91406ZM6.9987 17.0807V17.6307H6.4487V17.0807H6.9987ZM2.91536 2.91406H3.46536V17.0807H2.91536H2.36536V2.91406H2.91536ZM2.91536 17.0807V16.5307H17.082V17.0807V17.6307H2.91536V17.0807ZM17.082 17.0807H16.532V2.91406H17.082H17.632V17.0807H17.082ZM17.082 2.91406V3.46406H2.91536V2.91406V2.36406H17.082V2.91406ZM6.9987 2.91406H7.5487V17.0807H6.9987H6.4487V2.91406H6.9987ZM17.082 17.0807L17.082 17.6307L6.9987 17.6307V17.0807V16.5307L17.082 16.5307L17.082 17.0807ZM6.9987 2.91406V2.36406H17.082V2.91406V3.46406H6.9987V2.91406Z" fill="currentColor"/>`,
@@ -132,14 +121,6 @@ const icons = {
132
121
  viewBox: "0 0 20 20",
133
122
  body: `<path d="M7 14.5H13M7 7.99512H10.0049M10.0049 7.99512H13M10.0049 7.99512V5M10.0049 7.99512V11M18 18V2L2 2L2 18H18Z" stroke="currentColor"/>`,
134
123
  },
135
- "window-analytics": {
136
- viewBox: "0 0 16 16",
137
- body: `<g transform="translate(1 2)"><path d="M7 4H11M7 8H11M0.5 0.5V11.5H13.5V0.5H0.5ZM3.5 3.5H4.5V4.5H3.5V3.5ZM3.5 7.5H4.5V8.5H3.5V7.5Z" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="square"/></g>`,
138
- },
139
- trash: {
140
- viewBox: "0 0 20 20",
141
- body: `<path d="M4.58342 17.9134L4.58369 17.4134L4.22787 17.5384L4.22766 18.0384H4.58342V17.9134ZM15.4167 17.9134V18.0384H15.7725L15.7723 17.5384L15.4167 17.9134ZM2.08342 3.95508V3.45508H1.58342V3.95508H2.08342V4.45508V3.95508ZM17.9167 4.45508V4.95508H18.4167V4.45508H17.9167V3.95508V4.45508ZM4.16677 4.58008L3.66701 4.5996L4.22816 17.5379L4.72792 17.4934L5.22767 17.4489L4.66652 4.54055L4.16677 4.58008ZM4.58342 18.0384V17.9134H15.4167V18.0384V18.5384H4.58342V18.0384ZM15.4167 17.9134L15.8332 17.5379L16.2498 4.5996L15.7501 4.58008L15.2503 4.56055L14.8337 17.4989L15.4167 17.9134ZM15.8334 4.58008V4.08008H4.16677V4.58008V5.08008H15.8334V4.58008ZM2.08342 4.45508V4.95508H4.16677V4.58008V4.08008H2.08342V4.45508ZM15.8334 4.58008V5.08008H17.9167V4.45508V3.95508H15.8334V4.58008ZM6.83951 4.35149L7.432 4.55047C7.79251 3.47701 8.80699 2.70508 10.0001 2.70508V2.20508V1.70508C8.25392 1.70508 6.77335 2.83539 6.24702 4.15251L6.83951 4.35149ZM10.0001 2.20508V2.70508C11.1932 2.70508 12.2077 3.47701 12.5682 4.55047L13.1607 4.35149L13.7532 4.15251C13.2269 2.83539 11.7463 1.70508 10.0001 1.70508V2.20508Z" fill="currentColor"/>`,
142
- },
143
124
  "outline-sliders": {
144
125
  viewBox: "0 0 16 16",
145
126
  body: `<path d="M11.7779 4.66675H14.4446M11.7779 4.66675C11.7779 5.77132 10.8825 6.66675 9.77789 6.66675C8.67332 6.66675 7.77789 5.77132 7.77789 4.66675M11.7779 4.66675C11.7779 3.56218 10.8825 2.66675 9.77789 2.66675C8.67332 2.66675 7.77789 3.56218 7.77789 4.66675M1.55566 4.66675H7.77789M4.22233 11.3334H1.55566M4.22233 11.3334C4.22233 12.438 5.11776 13.3334 6.22233 13.3334C7.3269 13.3334 8.22233 12.438 8.22233 11.3334M4.22233 11.3334C4.22233 10.2288 5.11776 9.33341 6.22233 9.33341C7.3269 9.33341 8.22233 10.2288 8.22233 11.3334M14.4446 11.3334H8.22233" stroke="currentColor"/>`,
@@ -164,29 +145,16 @@ const icons = {
164
145
  viewBox: "0 0 20 20",
165
146
  body: `<path d="M5.83333 4.16406L2.5 7.4974L5.83333 10.8307M3.33333 7.4974H17.9167V15.4141H10" stroke="currentColor" stroke-linecap="square"/>`,
166
147
  },
167
- "fill-triangle-down": {
168
- viewBox: "0 0 16 16",
169
- body: `<path d="M5.37624 6.75194C5.1818 6.41861 5.42223 6 5.80813 6H10.1921C10.578 6 10.8184 6.41861 10.624 6.75194L8.43199 10.5096C8.23905 10.8404 7.76115 10.8404 7.56821 10.5096L5.37624 6.75194Z" fill="currentColor"/>`,
170
- },
171
148
  archive: {
172
149
  viewBox: "0 0 16 16",
173
150
  body: `<path d="M13.1112 13.5555V14.0555H13.6112V13.5555H13.1112ZM2.889 13.5555H2.389L2.389 14.0555H2.889V13.5555ZM3.38901 5.55546L3.38901 5.05546L2.38901 5.05546L2.38901 5.55546L2.88901 5.55546L3.38901 5.55546ZM14.4446 2.44434H14.9446V1.94434L14.4446 1.94434L14.4446 2.44434ZM14.4446 5.55545L14.4446 6.05545L14.9446 6.05545V5.55545H14.4446ZM1.55566 5.55546L1.05566 5.55545L1.05566 6.05546L1.55566 6.05546L1.55566 5.55546ZM1.5557 2.44436L1.5557 1.94436L1.05571 1.94436L1.0557 2.44435L1.5557 2.44436ZM13.1112 5.55546H12.6112V13.5555H13.1112H13.6112V5.55546H13.1112ZM2.889 13.5555H3.389L3.38901 5.55546L2.88901 5.55546L2.38901 5.55546L2.389 13.5555H2.889ZM14.4446 2.44434H13.9446V5.55545H14.4446H14.9446V2.44434H14.4446ZM1.55566 5.55546L2.05566 5.55547L2.0557 2.44436L1.5557 2.44436L1.0557 2.44435L1.05566 5.55545L1.55566 5.55546ZM6.22234 8.22213V8.72213H9.7779V8.22213V7.72213H6.22234V8.22213ZM13.1112 13.5555V13.0555H2.889V13.5555V14.0555H13.1112V13.5555ZM1.5557 2.44436L1.5557 2.94436L14.4446 2.94434L14.4446 2.44434L14.4446 1.94434L1.5557 1.94436L1.5557 2.44436ZM14.4446 5.55545L14.4446 5.05545L1.55566 5.05546L1.55566 5.55546L1.55566 6.05546L14.4446 6.05545L14.4446 5.55545Z" fill="currentColor"/>`,
174
151
  },
175
152
  }
176
153
 
177
- type IconName = keyof typeof icons | keyof typeof additionalIcons
178
-
179
154
  const spriteID = "opencode-v2-icon-sprite"
180
- const symbol = (name: IconName) => `opencode-v2-icon-${name}`
155
+ const symbol = (name: keyof typeof icons) => `opencode-v2-icon-${name}`
181
156
  let spriteInserted = false
182
157
 
183
- function getIcon(name: IconName) {
184
- const icon = icons[name as keyof typeof icons]
185
- if (icon) return icon
186
- const body = additionalIcons[name as keyof typeof additionalIcons]
187
- return { body, viewBox: additionalIconViewBox(name as keyof typeof additionalIcons) }
188
- }
189
-
190
158
  function ensureSprite() {
191
159
  if (spriteInserted) return
192
160
  if (typeof document === "undefined") return
@@ -202,26 +170,25 @@ function ensureSprite() {
202
170
  svg.setAttribute("height", "0")
203
171
  svg.style.position = "absolute"
204
172
  svg.style.overflow = "hidden"
205
- svg.innerHTML = Array.from(new Set<IconName>([...Object.keys(additionalIcons), ...Object.keys(icons)] as IconName[]))
206
- .map((name) => `<symbol id="${symbol(name)}" viewBox="${getIcon(name).viewBox}">${getIcon(name).body}</symbol>`)
173
+ svg.innerHTML = Object.entries(icons)
174
+ .map(
175
+ ([name, icon]) =>
176
+ `<symbol id="${symbol(name as keyof typeof icons)}" viewBox="${icon.viewBox}">${icon.body}</symbol>`,
177
+ )
207
178
  .join("")
208
179
  document.body.insertBefore(svg, document.body.firstChild)
209
180
  spriteInserted = true
210
181
  }
211
182
 
212
183
  export interface IconProps extends ComponentProps<"svg"> {
213
- name: IconName | (string & {})
184
+ name: keyof typeof icons | (string & {})
214
185
  size?: "small" | "normal" | "large"
215
186
  }
216
187
 
217
188
  export function Icon(props: IconProps) {
218
189
  const [split, rest] = splitProps(props, ["name", "size"])
219
- const iconName = (): IconName => {
220
- if (icons[split.name as keyof typeof icons]) return split.name as keyof typeof icons
221
- if (additionalIcons[split.name as keyof typeof additionalIcons]) return split.name as keyof typeof additionalIcons
222
- return "plus"
223
- }
224
- const icon = () => getIcon(iconName())
190
+ const iconName = () => (icons[split.name as keyof typeof icons] ? (split.name as keyof typeof icons) : "plus")
191
+ const icon = () => icons[iconName()]
225
192
  const pixelSize = split.size === "small" ? 14 : split.size === "large" ? 20 : 16
226
193
  onMount(ensureSprite)
227
194
 
@@ -229,14 +196,6 @@ export function Icon(props: IconProps) {
229
196
  <svg
230
197
  {...rest}
231
198
  data-slot="icon-svg"
232
- data-directional={
233
- iconName() === "arrow-left" ||
234
- iconName() === "arrow-right" ||
235
- iconName() === "chevron-left" ||
236
- iconName() === "chevron-right"
237
- ? ""
238
- : undefined
239
- }
240
199
  width={pixelSize}
241
200
  height={pixelSize}
242
201
  viewBox={icon().viewBox}
@@ -0,0 +1,225 @@
1
+ [data-component="inline-input-v2"] {
2
+ box-sizing: border-box;
3
+ display: flex;
4
+ flex-direction: row;
5
+ align-items: stretch;
6
+ padding: 0;
7
+ width: 280px;
8
+ height: 28px;
9
+ border: 0;
10
+ border-radius: 6px;
11
+ outline: 1px solid transparent;
12
+ outline-offset: 0;
13
+ background:
14
+ linear-gradient(180deg, var(--v2-alpha-light-2) 0%, var(--v2-alpha-light-0) 100%), var(--v2-background-bg-base);
15
+ box-shadow: var(--v2-elevation-button-neutral);
16
+ flex: none;
17
+ align-self: stretch;
18
+ overflow: hidden;
19
+ transition:
20
+ background 85ms ease-out,
21
+ outline-color 85ms ease-out,
22
+ box-shadow 85ms ease-out;
23
+ }
24
+
25
+ [data-component="inline-input-v2"][data-appearance="large"] {
26
+ height: 32px;
27
+ }
28
+
29
+ [data-component="inline-input-v2"]:where(:hover):not([data-disabled], [data-invalid]):not(:focus-within) {
30
+ background:
31
+ linear-gradient(0deg, var(--v2-overlay-simple-overlay-hover), var(--v2-overlay-simple-overlay-hover)),
32
+ linear-gradient(180deg, var(--v2-alpha-light-2) 0%, var(--v2-alpha-light-0) 100%), var(--v2-background-bg-base);
33
+ }
34
+
35
+ [data-component="inline-input-v2"]:where(:hover):not([data-disabled], [data-invalid]):not(:focus-within)
36
+ [data-slot="inline-input-v2-prefix"] {
37
+ background: transparent;
38
+ }
39
+
40
+ [data-component="inline-input-v2"]:where(:focus-within):not([data-disabled], [data-invalid]) {
41
+ outline-color: var(--v2-border-border-focus);
42
+ box-shadow: none;
43
+ }
44
+
45
+ [data-component="inline-input-v2"]:where([data-invalid]):not([data-disabled]) {
46
+ outline-color: var(--v2-state-fg-danger);
47
+ box-shadow: none;
48
+ }
49
+
50
+ [data-component="inline-input-v2"]:where([data-disabled]) {
51
+ opacity: 0.5;
52
+ cursor: not-allowed;
53
+ }
54
+
55
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-prefix"] {
56
+ box-sizing: border-box;
57
+ display: flex;
58
+ flex-direction: column;
59
+ justify-content: center;
60
+ align-items: flex-start;
61
+ flex: none;
62
+ align-self: stretch;
63
+ width: fit-content;
64
+ min-width: 0;
65
+ max-width: 100%;
66
+ padding: 4px 8px;
67
+ gap: 4px;
68
+ background: var(--v2-background-bg-layer-01);
69
+ border-radius: 4px 0 0 4px;
70
+ cursor: default;
71
+ transition: background 85ms ease-out;
72
+ }
73
+
74
+ [data-component="inline-input-v2"]:where([data-disabled]) [data-slot="inline-input-v2-prefix"] {
75
+ cursor: not-allowed;
76
+ }
77
+
78
+ [data-component="inline-input-v2"][data-label-width] [data-slot="inline-input-v2-prefix"] {
79
+ width: var(--inline-input-v2-label-width);
80
+ min-width: var(--inline-input-v2-label-width);
81
+ max-width: var(--inline-input-v2-label-width);
82
+ }
83
+
84
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-prefix-text"] {
85
+ display: block;
86
+ width: 100%;
87
+ overflow: hidden;
88
+ text-overflow: ellipsis;
89
+ white-space: nowrap;
90
+ font-style: normal;
91
+ font-weight: 440;
92
+ font-size: 13px;
93
+ line-height: 1;
94
+ letter-spacing: -0.04px;
95
+ color: var(--v2-text-text-muted);
96
+ font-variation-settings: "slnt" 0;
97
+ user-select: none;
98
+ }
99
+
100
+ [data-component="inline-input-v2"][data-numeric] [data-slot="inline-input-v2-prefix-text"] {
101
+ font-variant-numeric: tabular-nums;
102
+ }
103
+
104
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-divider"] {
105
+ flex: none;
106
+ align-self: stretch;
107
+ width: 0.5px;
108
+ min-width: 0.5px;
109
+ background: var(--v2-border-border-base);
110
+ }
111
+
112
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-field"] {
113
+ display: flex;
114
+ flex-direction: row;
115
+ align-items: center;
116
+ align-self: stretch;
117
+ flex: 1 1 auto;
118
+ min-width: 0;
119
+ padding: 4px 8px;
120
+ gap: 8px;
121
+ }
122
+
123
+ [data-component="inline-input-v2"][data-appearance="large"] [data-slot="inline-input-v2-field"] {
124
+ padding-top: 6px;
125
+ padding-bottom: 6px;
126
+ }
127
+
128
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-value"] {
129
+ display: flex;
130
+ flex-direction: row;
131
+ align-items: center;
132
+ flex: 1 1 auto;
133
+ min-width: 0;
134
+ min-height: 0;
135
+ }
136
+
137
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-input"] {
138
+ display: block;
139
+ width: 100%;
140
+ min-width: 0;
141
+ height: 100%;
142
+ padding: 0;
143
+ margin: 0;
144
+ border: 0;
145
+ background: transparent;
146
+ outline: none;
147
+ font-style: normal;
148
+ font-weight: 440;
149
+ font-size: 13px;
150
+ line-height: 1;
151
+ letter-spacing: -0.04px;
152
+ color: var(--v2-text-text-base);
153
+ font-variation-settings: "slnt" 0;
154
+ }
155
+
156
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-input"]::placeholder {
157
+ color: var(--v2-text-text-faint);
158
+ user-select: none;
159
+ }
160
+
161
+ [data-component="inline-input-v2"][data-numeric] [data-slot="inline-input-v2-input"] {
162
+ font-variant-numeric: tabular-nums;
163
+ }
164
+
165
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"] {
166
+ display: flex;
167
+ flex-direction: row;
168
+ justify-content: center;
169
+ align-items: center;
170
+ flex: none;
171
+ width: 20px;
172
+ height: 20px;
173
+ padding: 2px;
174
+ gap: 3px;
175
+ border: 0;
176
+ border-radius: 4px;
177
+ background: transparent;
178
+ color: var(--v2-icon-icon-muted);
179
+ cursor: pointer;
180
+ outline: none;
181
+ }
182
+
183
+ [data-component="inline-input-v2"]
184
+ [data-slot="inline-input-v2-icon-button"]:is(:hover, [data-state="hover"]):not(:disabled) {
185
+ background-color: var(--v2-overlay-simple-overlay-hover);
186
+ }
187
+
188
+ [data-component="inline-input-v2"]
189
+ [data-slot="inline-input-v2-icon-button"]:is(:active, [data-state="pressed"]):not(:disabled) {
190
+ background-color: var(--v2-overlay-simple-overlay-pressed);
191
+ }
192
+
193
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"]:focus {
194
+ outline: none;
195
+ }
196
+
197
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"]:focus-visible {
198
+ outline: 2px solid var(--v2-border-border-focus);
199
+ outline-offset: 1px;
200
+ }
201
+
202
+ [data-component="inline-input-v2"]:where([data-disabled]) [data-slot="inline-input-v2-icon-button"] {
203
+ cursor: not-allowed;
204
+ pointer-events: none;
205
+ }
206
+
207
+ [data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"] [data-slot="icon-svg"] {
208
+ display: block;
209
+ flex: none;
210
+ color: currentColor;
211
+ }
212
+
213
+ [data-component="inline-input-v2"][data-invalid]:not([data-disabled]) [data-slot="inline-input-v2-prefix-text"] {
214
+ color: var(--v2-text-text-muted);
215
+ }
216
+
217
+ [data-component="inline-input-v2"][data-invalid]:not([data-disabled]) [data-slot="inline-input-v2-input"] {
218
+ color: var(--v2-state-fg-danger);
219
+ caret-color: var(--v2-state-fg-danger);
220
+ }
221
+
222
+ [data-component="inline-input-v2"][data-invalid]:not([data-disabled]) [data-slot="inline-input-v2-input"]::placeholder {
223
+ color: var(--v2-state-fg-danger);
224
+ opacity: 1;
225
+ }
@@ -0,0 +1,107 @@
1
+ import { type ComponentProps, type JSX, Show, splitProps } from "solid-js"
2
+ import { Icon } from "./icon"
3
+ import { useI18n } from "../../context/i18n"
4
+ import "./inline-input-v2.css"
5
+
6
+ export interface InlineInputV2Props extends Omit<ComponentProps<"input">, "type" | "prefix"> {
7
+ /** Inline label shown before the field (prefix segment). */
8
+ prefix: JSX.Element
9
+ /** Fixed width for the prefix segment (px number or CSS length). Omit for fit-content. */
10
+ labelWidth?: number | string
11
+ /** Show the trailing copy action. */
12
+ showCopyButton?: boolean
13
+ /** Accessible label for the copy button. */
14
+ copyLabel?: string
15
+ onCopyClick?: (event: MouseEvent) => void
16
+ /** Apply tabular numerals to the prefix and field value. */
17
+ numeric?: boolean
18
+ /** Error styling for the field and value text. */
19
+ invalid?: boolean
20
+ /** `base` is 28px tall; `large` is 32px tall. */
21
+ appearance?: "base" | "large"
22
+ type?: ComponentProps<"input">["type"]
23
+ }
24
+
25
+ export function InlineInputV2(props: InlineInputV2Props) {
26
+ const i18n = useI18n()
27
+ const [local, inputProps] = splitProps(props, [
28
+ "class",
29
+ "classList",
30
+ "prefix",
31
+ "labelWidth",
32
+ "showCopyButton",
33
+ "copyLabel",
34
+ "onCopyClick",
35
+ "numeric",
36
+ "invalid",
37
+ "appearance",
38
+ "disabled",
39
+ "style",
40
+ ])
41
+
42
+ let input: HTMLInputElement | undefined
43
+
44
+ return (
45
+ <div
46
+ data-component="inline-input-v2"
47
+ data-disabled={local.disabled ? "" : undefined}
48
+ data-invalid={local.invalid ? "" : undefined}
49
+ data-numeric={local.numeric ? "" : undefined}
50
+ data-appearance={local.appearance ?? "base"}
51
+ data-label-width={local.labelWidth != null ? "" : undefined}
52
+ classList={{
53
+ ...local.classList,
54
+ [local.class ?? ""]: !!local.class,
55
+ }}
56
+ style={{
57
+ ...(typeof local.style === "object" && local.style != null ? local.style : {}),
58
+ ...(local.labelWidth != null
59
+ ? {
60
+ "--inline-input-v2-label-width":
61
+ typeof local.labelWidth === "number" ? `${local.labelWidth}px` : local.labelWidth,
62
+ }
63
+ : {}),
64
+ }}
65
+ >
66
+ <div
67
+ data-slot="inline-input-v2-prefix"
68
+ onMouseDown={(event) => {
69
+ if (local.disabled || event.button !== 0) return
70
+ // Keep focus on the input without using a native <label>, so external labels still work.
71
+ event.preventDefault()
72
+ input?.focus()
73
+ }}
74
+ >
75
+ <span data-slot="inline-input-v2-prefix-text">{local.prefix}</span>
76
+ </div>
77
+ <div data-slot="inline-input-v2-divider" aria-hidden="true" />
78
+ <div data-slot="inline-input-v2-field">
79
+ <div data-slot="inline-input-v2-value">
80
+ <input
81
+ {...inputProps}
82
+ ref={(el) => {
83
+ input = el
84
+ const ref = inputProps.ref
85
+ if (typeof ref === "function") ref(el)
86
+ }}
87
+ type={inputProps.type ?? "text"}
88
+ disabled={local.disabled}
89
+ aria-invalid={local.invalid ? true : undefined}
90
+ data-slot="inline-input-v2-input"
91
+ />
92
+ </div>
93
+ <Show when={local.showCopyButton}>
94
+ <button
95
+ type="button"
96
+ data-slot="inline-input-v2-icon-button"
97
+ aria-label={local.copyLabel ?? i18n.t("ui.message.copy")}
98
+ disabled={local.disabled}
99
+ onClick={local.onCopyClick}
100
+ >
101
+ <Icon name="copy" />
102
+ </button>
103
+ </Show>
104
+ </div>
105
+ </div>
106
+ )
107
+ }
@@ -27,7 +27,6 @@
27
27
  justify-content: center;
28
28
  align-items: center;
29
29
  padding: 0;
30
- padding-inline: 4px;
31
30
  gap: 4px;
32
31
  min-width: 14px;
33
32
  height: 14px;
@@ -49,6 +48,7 @@
49
48
  flex-direction: row;
50
49
  justify-content: center;
51
50
  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.css"
2
+ import "./keybind-v2.css"
3
3
 
4
- export interface KeybindProps extends ComponentProps<"div"> {
4
+ export interface KeybindV2Props extends ComponentProps<"div"> {
5
5
  keys: string[]
6
6
  variant?: "neutral" | "ghost"
7
7
  }
8
8
 
9
- export function Keybind(props: KeybindProps) {
9
+ export function KeybindV2(props: KeybindV2Props) {
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: var(--line-height-compact);
52
+ line-height: 1;
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: var(--line-height-tight);
62
+ line-height: 1;
63
63
  letter-spacing: 0.05px;
64
64
  color: var(--v2-text-text-faint);
65
65
  font-variation-settings: "slnt" 0;
@@ -138,7 +138,7 @@
138
138
  font-size: 13px;
139
139
  font-style: normal;
140
140
  font-weight: 530;
141
- line-height: var(--line-height-compact);
141
+ line-height: 1;
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 "@opencode-ai/ui/file-icon"
2
+ import { FileIcon } from "../../components/file-icon"
3
3
  import { useI18n } from "../../context/i18n"
4
4
  import { useFilteredList } from "../../hooks"
5
- import { Button } from "@opencode-ai/ui/button"
6
- import "./line-comment.css"
5
+ import { ButtonV2 } from "./button-v2"
6
+ import "./line-comment-v2.css"
7
7
 
8
8
  /** Horizontal “more” glyph for the display-card overflow control (Figma outline-dots). */
9
- export function LineCommentOverflowIcon(props: ComponentProps<"svg">) {
9
+ export function LineCommentV2OverflowIcon(props: ComponentProps<"svg">) {
10
10
  return (
11
11
  <svg
12
12
  {...props}
@@ -24,16 +24,16 @@ export function LineCommentOverflowIcon(props: ComponentProps<"svg">) {
24
24
  )
25
25
  }
26
26
 
27
- export interface LineCommentProps extends ComponentProps<"div"> {
27
+ export interface LineCommentV2Props 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 `LineCommentOverflowIcon` inside `line-comment-v2-overflow`. */
32
+ /** Typically an overflow menu trigger; use `LineCommentV2OverflowIcon` inside `line-comment-v2-overflow`. */
33
33
  actions?: JSX.Element
34
34
  }
35
35
 
36
- export function LineComment(props: LineCommentProps) {
36
+ export function LineCommentV2(props: LineCommentV2Props) {
37
37
  const [local, rest] = splitProps(props, ["comment", "selection", "actions", "class", "classList"])
38
38
  return (
39
39
  <div
@@ -56,11 +56,11 @@ export function LineComment(props: LineCommentProps) {
56
56
  )
57
57
  }
58
58
 
59
- export type LineCommentEditorMention = {
59
+ export type LineCommentEditorV2Mention = {
60
60
  items: (query: string) => string[] | Promise<string[]>
61
61
  }
62
62
 
63
- export interface LineCommentEditorProps extends Omit<ComponentProps<"div">, "children" | "onInput" | "onSubmit"> {
63
+ export interface LineCommentEditorV2Props 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 LineCommentEditorProps extends Omit<ComponentProps<"div">, "chi
73
73
  cancelLabel?: string
74
74
  submitLabel?: string
75
75
  autofocus?: boolean
76
- mention?: LineCommentEditorMention
76
+ mention?: LineCommentEditorV2Mention
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 LineCommentEditor(props: LineCommentEditorProps) {
89
+ export function LineCommentEditorV2(props: LineCommentEditorV2Props) {
90
90
  const i18n = useI18n()
91
91
  let textareaRef: HTMLTextAreaElement | undefined
92
92
  const [mentionOpen, setMentionOpen] = createSignal(false)
@@ -212,11 +212,9 @@ export function LineCommentEditor(props: LineCommentEditorProps) {
212
212
  textareaRef = el
213
213
  }}
214
214
  data-slot="line-comment-v2-textarea"
215
- dir="auto"
216
215
  rows={local.rows ?? 3}
217
216
  placeholder={local.placeholder ?? i18n.t("ui.lineComment.contextPlaceholder")}
218
217
  value={local.value}
219
- style={{ "unicode-bidi": "plaintext", "text-align": "start" }}
220
218
  onInput={(e) => {
221
219
  local.onInput(e.currentTarget.value)
222
220
  syncMention()
@@ -294,12 +292,12 @@ export function LineCommentEditor(props: LineCommentEditorProps) {
294
292
  <div data-slot="line-comment-v2-footer">
295
293
  <div data-slot="line-comment-v2-footer-meta">{local.selection}</div>
296
294
  <div data-slot="line-comment-v2-footer-actions">
297
- <Button type="button" size="normal" variant="neutral" onClick={() => local.onCancel()}>
295
+ <ButtonV2 type="button" size="normal" variant="neutral" onClick={() => local.onCancel()}>
298
296
  {local.cancelLabel ?? i18n.t("ui.lineComment.cancel")}
299
- </Button>
300
- <Button type="button" size="normal" variant="contrast" disabled={!canSubmit()} onClick={submit}>
297
+ </ButtonV2>
298
+ <ButtonV2 type="button" size="normal" variant="contrast" disabled={!canSubmit()} onClick={submit}>
301
299
  {local.submitLabel ?? i18n.t("ui.lineComment.submit")}
302
- </Button>
300
+ </ButtonV2>
303
301
  </div>
304
302
  </div>
305
303
  </div>
@@ -1,7 +1,7 @@
1
1
  import { splitProps, type ComponentProps } from "solid-js"
2
- import "./loader.css"
2
+ import "./loader-v2.css"
3
3
 
4
- export function Loader(props: ComponentProps<"svg">) {
4
+ export function LoaderV2(props: ComponentProps<"svg">) {
5
5
  const [local, rest] = splitProps(props, ["class", "classList", "width", "height"])
6
6
  return (
7
7
  <svg