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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/dist/actions/button/button.d.ts +10 -0
  2. package/dist/actions/icon-button/icon-button.d.ts +11 -0
  3. package/dist/actions/split-button/split-button.d.ts +5 -0
  4. package/dist/components/card.d.ts +1 -1
  5. package/dist/components/list.d.ts +1 -1
  6. package/dist/components/scroll-view.d.ts +3 -3
  7. package/dist/context/i18n.d.ts +10 -7
  8. package/dist/context/marked-base.d.ts +3 -0
  9. package/dist/context/marked-parser.d.ts +1 -2
  10. package/dist/{components → data-display/accordion}/accordion.d.ts +6 -6
  11. package/dist/{v2/components/avatar-v2.d.ts → data-display/avatar/avatar.d.ts} +1 -1
  12. package/dist/data-display/badge/badge.d.ts +7 -0
  13. package/dist/{components → data-display/diff-changes}/diff-changes.d.ts +2 -1
  14. package/dist/data-display/keybind/keybind.d.ts +7 -0
  15. package/dist/{v2/components/line-comment-v2.d.ts → data-display/line-comment/line-comment.d.ts} +9 -9
  16. package/dist/{v2/components/project-avatar-v2.d.ts → data-display/project-avatar/project-avatar.d.ts} +1 -1
  17. package/dist/feedback/loader/loader.d.ts +3 -0
  18. package/dist/{components → feedback/progress-circle}/progress-circle.d.ts +2 -0
  19. package/dist/feedback/toast/toast.d.ts +57 -0
  20. package/dist/{components → forms/checkbox}/checkbox.d.ts +2 -2
  21. package/dist/{v2/components/field-v2.d.ts → forms/field/field.d.ts} +4 -10
  22. package/dist/forms/radio/radio.d.ts +16 -0
  23. package/dist/{v2/components/select-v2.d.ts → forms/select/select.d.ts} +5 -6
  24. package/dist/{components → forms/switch}/switch.d.ts +4 -2
  25. package/dist/{v2/components/text-input-v2.d.ts → forms/text-input/text-input.d.ts} +3 -3
  26. package/dist/forms/textarea/textarea.d.ts +7 -0
  27. package/dist/hooks/use-filtered-list.d.ts +9 -0
  28. package/dist/i18n/ar.d.ts +0 -2
  29. package/dist/i18n/bg.d.ts +0 -2
  30. package/dist/i18n/br.d.ts +0 -2
  31. package/dist/i18n/bs.d.ts +0 -2
  32. package/dist/i18n/da.d.ts +0 -2
  33. package/dist/i18n/de.d.ts +0 -2
  34. package/dist/i18n/en.d.ts +242 -1
  35. package/dist/i18n/es.d.ts +0 -2
  36. package/dist/i18n/fr.d.ts +0 -2
  37. package/dist/i18n/he.d.ts +197 -0
  38. package/dist/i18n/ja.d.ts +0 -2
  39. package/dist/i18n/km.d.ts +0 -2
  40. package/dist/i18n/ko.d.ts +0 -2
  41. package/dist/i18n/lo.d.ts +0 -2
  42. package/dist/i18n/mk.d.ts +0 -2
  43. package/dist/i18n/mn.d.ts +0 -2
  44. package/dist/i18n/my.d.ts +0 -2
  45. package/dist/i18n/pl.d.ts +0 -2
  46. package/dist/i18n/ru.d.ts +0 -2
  47. package/dist/i18n/sr.d.ts +0 -2
  48. package/dist/i18n/tg.d.ts +0 -2
  49. package/dist/i18n/th.d.ts +0 -2
  50. package/dist/i18n/tr.d.ts +0 -2
  51. package/dist/i18n/zh.d.ts +0 -2
  52. package/dist/i18n/zht.d.ts +0 -2
  53. package/dist/{components/icon.d.ts → icons/icon/additional-icons.d.ts} +8 -8
  54. package/dist/{v2/components → icons/icon}/icon.d.ts +44 -1
  55. package/dist/layout/divider/divider.d.ts +5 -0
  56. package/dist/navigation/menu/menu.d.ts +59 -0
  57. package/dist/{v2/components/segmented-control-v2.d.ts → navigation/segmented-control/segmented-control.d.ts} +5 -5
  58. package/dist/{components → navigation/tabs}/tabs.d.ts +15 -8
  59. package/dist/{v2/components/dialog-v2.d.ts → overlays/dialog/dialog.d.ts} +1 -2
  60. package/dist/overlays/tooltip/tooltip.d.ts +15 -0
  61. package/dist/{components → typography/text-shimmer}/text-shimmer.d.ts +1 -0
  62. package/dist/typography/wordmark/wordmark.d.ts +5 -0
  63. package/package.json +141 -35
  64. package/src/{v2/components/button-v2.css → actions/button/button.css} +29 -0
  65. package/src/{components → actions/button}/button.tsx +19 -11
  66. package/src/{v2/components/icon-button-v2.css → actions/icon-button/icon-button.css} +27 -9
  67. package/src/actions/icon-button/icon-button.tsx +32 -0
  68. package/src/{v2/components/split-button-v2.css → actions/split-button/split-button.css} +2 -6
  69. package/src/{v2/components/split-button-v2.tsx → actions/split-button/split-button.tsx} +4 -4
  70. package/src/components/animated-number.css +29 -11
  71. package/src/components/animated-number.tsx +2 -2
  72. package/src/components/card.css +2 -23
  73. package/src/components/card.tsx +4 -4
  74. package/src/components/collapsible.tsx +2 -2
  75. package/src/components/dock-surface.css +2 -9
  76. package/src/components/image-preview.tsx +3 -2
  77. package/src/components/list.css +5 -5
  78. package/src/components/list.tsx +7 -5
  79. package/src/components/popover.tsx +3 -2
  80. package/src/components/scroll-view.tsx +5 -20
  81. package/src/components/sticky-accordion-header.tsx +1 -1
  82. package/src/components/text-field.tsx +12 -4
  83. package/src/context/dialog.tsx +1 -0
  84. package/src/context/i18n.tsx +17 -14
  85. package/src/context/marked-base.tsx +27 -0
  86. package/src/context/marked-parser.tsx +3 -13
  87. package/src/{components → data-display/accordion}/accordion.css +7 -33
  88. package/src/{components → data-display/accordion}/accordion.tsx +14 -14
  89. package/src/{v2/components/avatar-v2.tsx → data-display/avatar/avatar.tsx} +1 -1
  90. package/src/{v2/components/badge-v2.css → data-display/badge/badge.css} +19 -0
  91. package/src/{v2/components/badge-v2.tsx → data-display/badge/badge.tsx} +6 -4
  92. package/src/{components → data-display/diff-changes}/diff-changes.css +22 -19
  93. package/src/{v2/components/diff-changes-v2.tsx → data-display/diff-changes/diff-changes.tsx} +7 -2
  94. package/src/{v2/components/keybind-v2.css → data-display/keybind/keybind.css} +1 -1
  95. package/src/{v2/components/keybind-v2.tsx → data-display/keybind/keybind.tsx} +3 -3
  96. package/src/{v2/components/line-comment-v2.css → data-display/line-comment/line-comment.css} +4 -4
  97. package/src/{v2/components/line-comment-v2.tsx → data-display/line-comment/line-comment.tsx} +17 -15
  98. package/src/{v2/components/project-avatar-v2.tsx → data-display/project-avatar/project-avatar.tsx} +1 -1
  99. package/src/{v2/components/loader-v2.tsx → feedback/loader/loader.tsx} +2 -2
  100. package/src/feedback/progress-circle/progress-circle.css +28 -0
  101. package/src/feedback/progress-circle/progress-circle.tsx +64 -0
  102. package/src/{v2/components/toast-v2.tsx → feedback/toast/toast.tsx} +60 -58
  103. package/src/{components → forms/checkbox}/checkbox.css +1 -7
  104. package/src/{components → forms/checkbox}/checkbox.tsx +13 -13
  105. package/src/{v2/components/field-v2.css → forms/field/field.css} +1 -1
  106. package/src/{v2/components/field-v2.tsx → forms/field/field.tsx} +9 -11
  107. package/src/{v2/components/radio-v2.tsx → forms/radio/radio.tsx} +30 -20
  108. package/src/{v2/components/select-v2.css → forms/select/select.css} +2 -8
  109. package/src/{v2/components/select-v2.tsx → forms/select/select.tsx} +42 -32
  110. package/src/{v2/components/switch-v2.css → forms/switch/switch.css} +110 -0
  111. package/src/forms/switch/switch.tsx +34 -0
  112. package/src/{v2/components/text-input-v2.css → forms/text-input/text-input.css} +3 -3
  113. package/src/{v2/components/text-input-v2.tsx → forms/text-input/text-input.tsx} +4 -4
  114. package/src/{v2/components/textarea-v2.tsx → forms/textarea/textarea.tsx} +3 -3
  115. package/src/hooks/create-auto-scroll.tsx +20 -0
  116. package/src/i18n/am.ts +7 -9
  117. package/src/i18n/ar.ts +7 -9
  118. package/src/i18n/az.ts +7 -9
  119. package/src/i18n/bg.ts +7 -9
  120. package/src/i18n/bn.ts +7 -9
  121. package/src/i18n/br.ts +7 -9
  122. package/src/i18n/bs.ts +7 -9
  123. package/src/i18n/ca.ts +7 -9
  124. package/src/i18n/cs.ts +7 -9
  125. package/src/i18n/da.ts +7 -9
  126. package/src/i18n/de.ts +1 -3
  127. package/src/i18n/dv.ts +7 -9
  128. package/src/i18n/dz.ts +5 -7
  129. package/src/i18n/el.ts +7 -9
  130. package/src/i18n/en.ts +59 -12
  131. package/src/i18n/es.ts +6 -8
  132. package/src/i18n/et.ts +7 -9
  133. package/src/i18n/fa.ts +7 -9
  134. package/src/i18n/fi.ts +7 -9
  135. package/src/i18n/fo.ts +7 -9
  136. package/src/i18n/fr.ts +6 -8
  137. package/src/i18n/he.ts +199 -0
  138. package/src/i18n/hi.ts +7 -9
  139. package/src/i18n/hr.ts +7 -9
  140. package/src/i18n/hu.ts +7 -9
  141. package/src/i18n/hy.ts +7 -9
  142. package/src/i18n/id.ts +7 -9
  143. package/src/i18n/is.ts +7 -9
  144. package/src/i18n/it.ts +7 -9
  145. package/src/i18n/ja.ts +7 -9
  146. package/src/i18n/ka.ts +7 -9
  147. package/src/i18n/km.ts +7 -9
  148. package/src/i18n/ko.ts +7 -9
  149. package/src/i18n/lo.ts +7 -9
  150. package/src/i18n/lt.ts +7 -9
  151. package/src/i18n/lv.ts +7 -9
  152. package/src/i18n/mk.ts +7 -9
  153. package/src/i18n/mn.ts +7 -9
  154. package/src/i18n/ms.ts +7 -9
  155. package/src/i18n/my.ts +7 -9
  156. package/src/i18n/ne.ts +7 -9
  157. package/src/i18n/nl.ts +7 -9
  158. package/src/i18n/no.ts +7 -9
  159. package/src/i18n/pa.ts +7 -9
  160. package/src/i18n/pl.ts +7 -9
  161. package/src/i18n/ro.ts +7 -9
  162. package/src/i18n/ru.ts +7 -9
  163. package/src/i18n/si.ts +7 -9
  164. package/src/i18n/sk.ts +7 -9
  165. package/src/i18n/sl.ts +7 -9
  166. package/src/i18n/sq.ts +7 -9
  167. package/src/i18n/sr.ts +7 -9
  168. package/src/i18n/sv.ts +7 -9
  169. package/src/i18n/tg.ts +7 -9
  170. package/src/i18n/th.ts +7 -9
  171. package/src/i18n/tk.ts +7 -9
  172. package/src/i18n/tr.ts +7 -9
  173. package/src/i18n/uk.ts +7 -9
  174. package/src/i18n/ur.ts +7 -9
  175. package/src/i18n/uz.ts +7 -9
  176. package/src/i18n/vi.ts +7 -9
  177. package/src/i18n/zh.ts +7 -9
  178. package/src/i18n/zht.ts +7 -9
  179. package/src/{components/icon.tsx → icons/icon/additional-icons.ts} +8 -74
  180. package/src/icons/icon/icon.css +3 -0
  181. package/src/{v2/components → icons/icon}/icon.tsx +80 -12
  182. package/src/{v2/components/divider-v2.tsx → layout/divider/divider.tsx} +3 -3
  183. package/src/{v2/components/menu-v2.css → navigation/menu/menu.css} +124 -2
  184. package/src/{v2/components/menu-v2.tsx → navigation/menu/menu.tsx} +96 -32
  185. package/src/{v2/components/segmented-control-v2.css → navigation/segmented-control/segmented-control.css} +1 -1
  186. package/src/{v2/components/segmented-control-v2.tsx → navigation/segmented-control/segmented-control.tsx} +9 -8
  187. package/src/{v2/components/tabs-v2.css → navigation/tabs/tabs-current.css} +25 -10
  188. package/src/{components → navigation/tabs}/tabs.css +53 -232
  189. package/src/navigation/tabs/tabs.tsx +194 -0
  190. package/src/{v2/components/dialog-v2.css → overlays/dialog/dialog.css} +3 -0
  191. package/src/{v2/components/dialog-v2.tsx → overlays/dialog/dialog.tsx} +11 -13
  192. package/src/{v2/components/tooltip-v2.css → overlays/tooltip/tooltip.css} +26 -0
  193. package/src/{v2/components/tooltip-v2.tsx → overlays/tooltip/tooltip.tsx} +24 -17
  194. package/src/styles/base.css +5 -0
  195. package/src/styles/index.css +4 -20
  196. package/src/styles/tailwind/colors.css +2 -0
  197. package/src/styles/tailwind/index.css +18 -1
  198. package/src/styles/theme.css +2 -2
  199. package/src/{v2/styles → styles/tokens}/colors.css +8 -8
  200. package/src/{v2/styles → styles/tokens}/theme.css +23 -16
  201. package/src/theme/context.tsx +19 -11
  202. package/src/theme/themes/oc-2.json +50 -19
  203. package/src/theme/v2/default-primitives.ts +8 -8
  204. package/src/theme/v2/foreground.ts +1 -0
  205. package/src/theme/v2/mapping.ts +7 -1
  206. package/src/{components → typography/text-shimmer}/text-shimmer.css +2 -1
  207. package/src/{components → typography/text-shimmer}/text-shimmer.tsx +1 -0
  208. package/src/typography/wordmark/wordmark.tsx +39 -0
  209. package/dist/components/avatar.d.ts +0 -9
  210. package/dist/components/button.d.ts +0 -9
  211. package/dist/components/dialog.d.ts +0 -12
  212. package/dist/components/dropdown-menu.d.ts +0 -80
  213. package/dist/components/icon-button.d.ts +0 -10
  214. package/dist/components/keybind.d.ts +0 -6
  215. package/dist/components/radio-group.d.ts +0 -16
  216. package/dist/components/select.d.ts +0 -21
  217. package/dist/components/tag.d.ts +0 -5
  218. package/dist/components/toast.d.ts +0 -56
  219. package/dist/components/tooltip.d.ts +0 -17
  220. package/dist/v2/components/accordion-v2.d.ts +0 -26
  221. package/dist/v2/components/badge-v2.d.ts +0 -6
  222. package/dist/v2/components/button-v2.d.ts +0 -10
  223. package/dist/v2/components/checkbox-v2.d.ts +0 -10
  224. package/dist/v2/components/diff-changes-v2.d.ts +0 -11
  225. package/dist/v2/components/divider-v2.d.ts +0 -5
  226. package/dist/v2/components/icon-button-v2.d.ts +0 -11
  227. package/dist/v2/components/inline-input-v2.d.ts +0 -21
  228. package/dist/v2/components/keybind-v2.d.ts +0 -7
  229. package/dist/v2/components/loader-v2.d.ts +0 -3
  230. package/dist/v2/components/menu-v2.d.ts +0 -52
  231. package/dist/v2/components/progress-circle-v2.d.ts +0 -8
  232. package/dist/v2/components/radio-v2.d.ts +0 -16
  233. package/dist/v2/components/split-button-v2.d.ts +0 -5
  234. package/dist/v2/components/switch-v2.d.ts +0 -7
  235. package/dist/v2/components/tabs-v2.d.ts +0 -34
  236. package/dist/v2/components/text-shimmer-v2.d.ts +0 -9
  237. package/dist/v2/components/textarea-v2.d.ts +0 -7
  238. package/dist/v2/components/toast-v2.d.ts +0 -57
  239. package/dist/v2/components/tooltip-v2.d.ts +0 -13
  240. package/dist/v2/components/wordmark-v2.d.ts +0 -2
  241. package/src/components/avatar.css +0 -49
  242. package/src/components/avatar.tsx +0 -55
  243. package/src/components/button.css +0 -194
  244. package/src/components/dialog.css +0 -181
  245. package/src/components/dialog.tsx +0 -72
  246. package/src/components/diff-changes.tsx +0 -115
  247. package/src/components/dropdown-menu.css +0 -135
  248. package/src/components/dropdown-menu.tsx +0 -308
  249. package/src/components/icon-button.css +0 -181
  250. package/src/components/icon-button.tsx +0 -29
  251. package/src/components/icon.css +0 -39
  252. package/src/components/keybind.css +0 -18
  253. package/src/components/keybind.tsx +0 -20
  254. package/src/components/progress-circle.css +0 -16
  255. package/src/components/progress-circle.tsx +0 -64
  256. package/src/components/radio-group.css +0 -187
  257. package/src/components/radio-group.tsx +0 -83
  258. package/src/components/select.css +0 -201
  259. package/src/components/select.tsx +0 -174
  260. package/src/components/switch.css +0 -136
  261. package/src/components/switch.tsx +0 -29
  262. package/src/components/tabs.tsx +0 -126
  263. package/src/components/tag.css +0 -37
  264. package/src/components/tag.tsx +0 -22
  265. package/src/components/toast.css +0 -236
  266. package/src/components/toast.tsx +0 -185
  267. package/src/components/tooltip.css +0 -74
  268. package/src/components/tooltip.tsx +0 -163
  269. package/src/v2/components/accordion-v2.css +0 -139
  270. package/src/v2/components/accordion-v2.tsx +0 -86
  271. package/src/v2/components/button-v2.tsx +0 -35
  272. package/src/v2/components/checkbox-v2.css +0 -184
  273. package/src/v2/components/checkbox-v2.tsx +0 -65
  274. package/src/v2/components/diff-changes-v2.css +0 -26
  275. package/src/v2/components/icon-button-v2.tsx +0 -37
  276. package/src/v2/components/inline-input-v2.css +0 -225
  277. package/src/v2/components/inline-input-v2.tsx +0 -107
  278. package/src/v2/components/progress-circle-v2.css +0 -13
  279. package/src/v2/components/progress-circle-v2.tsx +0 -52
  280. package/src/v2/components/switch-v2.tsx +0 -28
  281. package/src/v2/components/tabs-v2.tsx +0 -149
  282. package/src/v2/components/text-shimmer-v2.css +0 -125
  283. package/src/v2/components/text-shimmer-v2.tsx +0 -63
  284. package/src/v2/components/wordmark-v2.tsx +0 -71
  285. /package/dist/{components → forms/inline-input}/inline-input.d.ts +0 -0
  286. /package/dist/{v2/components → navigation}/tab-state-indicator.d.ts +0 -0
  287. /package/src/{v2/components/avatar-v2.css → data-display/avatar/avatar.css} +0 -0
  288. /package/src/{v2/components/project-avatar-v2.css → data-display/project-avatar/project-avatar.css} +0 -0
  289. /package/src/{v2/components/loader-v2.css → feedback/loader/loader.css} +0 -0
  290. /package/src/{v2/components/toast-v2.css → feedback/toast/toast.css} +0 -0
  291. /package/src/{components → forms/inline-input}/inline-input.css +0 -0
  292. /package/src/{components → forms/inline-input}/inline-input.tsx +0 -0
  293. /package/src/{v2/components/radio-v2.css → forms/radio/radio.css} +0 -0
  294. /package/src/{v2/components/textarea-v2.css → forms/textarea/textarea.css} +0 -0
  295. /package/src/{v2/components/divider-v2.css → layout/divider/divider.css} +0 -0
  296. /package/src/{v2/components → navigation}/tab-state-indicator.tsx +0 -0
  297. /package/src/{v2/components/file-tree-v2.css → styles/file-tree.css} +0 -0
  298. /package/src/{v2/styles/tailwind.css → styles/tokens/index.css} +0 -0
@@ -1,6 +1,17 @@
1
- import { Select as Kobalte } from "@kobalte/core/select"
1
+ import {
2
+ Content,
3
+ Item,
4
+ ItemIndicator,
5
+ ItemLabel,
6
+ Listbox,
7
+ Portal,
8
+ Root,
9
+ Section,
10
+ Trigger,
11
+ Value,
12
+ } from "@kobalte/core/select"
2
13
  import { Show, createMemo, onCleanup, splitProps, type ComponentProps, type JSX } from "solid-js"
3
- import "./select-v2.css"
14
+ import "./select.css"
4
15
 
5
16
  function groupOptions<T>(options: T[], groupBy?: (x: T) => string): { category: string; options: T[] }[] {
6
17
  if (!groupBy) {
@@ -40,8 +51,8 @@ const CheckSmall = () => (
40
51
  </svg>
41
52
  )
42
53
 
43
- export type SelectV2Props<T> = Omit<
44
- ComponentProps<typeof Kobalte<T, { category: string; options: T[] }>>,
54
+ export type SelectProps<T> = Omit<
55
+ ComponentProps<typeof Root<T, { category: string; options: T[] }>>,
45
56
  "value" | "onSelect" | "children" | "options" | "itemComponent" | "sectionComponent" | "defaultValue" | "multiple"
46
57
  > & {
47
58
  placeholder?: string
@@ -53,15 +64,14 @@ export type SelectV2Props<T> = Omit<
53
64
  groupBy?: (x: T) => string
54
65
  onSelect?: (value: T | null) => void
55
66
  onHighlight?: (value: T | undefined) => void | (() => void)
56
- /** `base` / `large` match text-input-v2; `inline` is a compact settings-row trigger. */
57
- appearance?: "base" | "large" | "inline"
58
67
  invalid?: boolean
59
68
  numeric?: boolean
60
69
  children?: (item: T) => JSX.Element
61
70
  valueClass?: string
71
+ contentClass?: string
62
72
  }
63
73
 
64
- export function SelectV2<T>(props: SelectV2Props<T>) {
74
+ export function Select<T>(props: SelectProps<T>) {
65
75
  const [local, others] = splitProps(props, [
66
76
  "class",
67
77
  "classList",
@@ -75,11 +85,11 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
75
85
  "onHighlight",
76
86
  "onOpenChange",
77
87
  "children",
78
- "appearance",
79
88
  "invalid",
80
89
  "numeric",
81
90
  "disabled",
82
91
  "valueClass",
92
+ "contentClass",
83
93
  "placement",
84
94
  "gutter",
85
95
  "sameWidth",
@@ -88,8 +98,6 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
88
98
  "fitViewport",
89
99
  ])
90
100
 
91
- const inline = () => (local.appearance ?? "base") === "inline"
92
-
93
101
  const state: { key?: string; cleanup?: void | (() => void) } = {}
94
102
 
95
103
  const stop = () => {
@@ -118,15 +126,15 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
118
126
  const grouped = createMemo(() => groupOptions(local.options, local.groupBy))
119
127
 
120
128
  return (
121
- <Kobalte<T, { category: string; options: T[] }>
129
+ <Root<T, { category: string; options: T[] }>
122
130
  {...others}
123
131
  multiple={false}
124
132
  allowDuplicateSelectionEvents={false}
125
133
  disabled={local.disabled}
126
134
  data-component="select-v2-root"
127
- placement={local.placement ?? (inline() ? "bottom-end" : "bottom-start")}
135
+ placement={local.placement ?? "bottom-end"}
128
136
  gutter={local.gutter ?? 4}
129
- sameWidth={local.sameWidth ?? !inline()}
137
+ sameWidth={local.sameWidth ?? false}
130
138
  flip={local.flip ?? true}
131
139
  slide={local.slide ?? true}
132
140
  fitViewport={local.fitViewport ?? false}
@@ -137,31 +145,31 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
137
145
  optionGroupChildren="options"
138
146
  placeholder={local.placeholder}
139
147
  sectionComponent={(sectionProps) => (
140
- <Kobalte.Section>
148
+ <Section>
141
149
  <Show when={sectionProps.section.rawValue.category}>
142
150
  <div data-slot="menu-v2-group-label">{sectionProps.section.rawValue.category}</div>
143
151
  </Show>
144
- </Kobalte.Section>
152
+ </Section>
145
153
  )}
146
154
  itemComponent={(itemProps) => (
147
- <Kobalte.Item
155
+ <Item
148
156
  {...itemProps}
149
157
  data-component="menu-v2-item"
150
158
  onPointerEnter={() => move(itemProps.item.rawValue)}
151
159
  onPointerMove={() => move(itemProps.item.rawValue)}
152
160
  onFocus={() => move(itemProps.item.rawValue)}
153
161
  >
154
- <Kobalte.ItemLabel data-slot="menu-v2-item-content" as="span">
162
+ <ItemLabel data-slot="menu-v2-item-content" as="span">
155
163
  {local.children
156
164
  ? local.children(itemProps.item.rawValue)
157
165
  : local.label
158
166
  ? local.label(itemProps.item.rawValue)
159
167
  : String(itemProps.item.rawValue as string)}
160
- </Kobalte.ItemLabel>
161
- <Kobalte.ItemIndicator data-slot="menu-v2-item-indicator" forceMount>
168
+ </ItemLabel>
169
+ <ItemIndicator data-slot="menu-v2-item-indicator" forceMount>
162
170
  <CheckSmall />
163
- </Kobalte.ItemIndicator>
164
- </Kobalte.Item>
171
+ </ItemIndicator>
172
+ </Item>
165
173
  )}
166
174
  onChange={(next) => {
167
175
  const v = next == null ? null : Array.isArray(next) ? ((next[0] as T) ?? null) : (next as T)
@@ -173,10 +181,12 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
173
181
  if (!open) stop()
174
182
  }}
175
183
  >
176
- <Kobalte.Trigger
184
+ <Trigger
177
185
  as="div"
186
+ aria-label={props["aria-label"]}
187
+ aria-labelledby={props["aria-labelledby"]}
178
188
  data-component="select-v2"
179
- data-appearance={local.appearance ?? "base"}
189
+ data-appearance="inline"
180
190
  data-invalid={local.invalid ? "" : undefined}
181
191
  data-numeric={local.numeric ? "" : undefined}
182
192
  disabled={local.disabled}
@@ -187,23 +197,23 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
187
197
  }}
188
198
  >
189
199
  <div data-slot="select-v2-value">
190
- <Kobalte.Value<T> data-slot="select-v2-value-text" class={local.valueClass}>
200
+ <Value<T> data-slot="select-v2-value-text" class={local.valueClass}>
191
201
  {(st) => {
192
202
  const selected = st.selectedOption()
193
203
  if (local.label && selected != null) return local.label(selected)
194
204
  return selected != null ? (selected as string) : ""
195
205
  }}
196
- </Kobalte.Value>
206
+ </Value>
197
207
  </div>
198
208
  <span data-slot="select-v2-chevron" aria-hidden="true">
199
209
  <ChevronDown />
200
210
  </span>
201
- </Kobalte.Trigger>
202
- <Kobalte.Portal>
203
- <Kobalte.Content data-component="menu-v2-content" data-slot="select-v2-content">
204
- <Kobalte.Listbox data-slot="select-v2-listbox" />
205
- </Kobalte.Content>
206
- </Kobalte.Portal>
207
- </Kobalte>
211
+ </Trigger>
212
+ <Portal>
213
+ <Content class={local.contentClass} data-component="menu-v2-content" data-slot="select-v2-content">
214
+ <Listbox data-slot="select-v2-listbox" />
215
+ </Content>
216
+ </Portal>
217
+ </Root>
208
218
  )
209
219
  }
@@ -160,3 +160,113 @@
160
160
  pointer-events: none;
161
161
  }
162
162
  }
163
+
164
+ [data-component="switch"][data-appearance="standard"] {
165
+ [data-slot="switch-control"] {
166
+ padding: 0;
167
+ width: 28px;
168
+ height: 16px;
169
+ border-radius: 3px;
170
+ border: 1px solid var(--border-weak-base);
171
+ background: var(--surface-base);
172
+ box-shadow: none;
173
+ transition:
174
+ background-color 150ms,
175
+ border-color 150ms;
176
+ }
177
+
178
+ [data-slot="switch-thumb"] {
179
+ box-sizing: content-box;
180
+ width: 14px;
181
+ height: 14px;
182
+ border-radius: 2px;
183
+ border: 1px solid var(--border-base);
184
+ background: var(--icon-invert-base);
185
+ box-shadow:
186
+ 0 1px 2px -1px rgba(19, 16, 16, 0.04),
187
+ 0 1px 2px 0 rgba(19, 16, 16, 0.06),
188
+ 0 1px 3px 0 rgba(19, 16, 16, 0.08);
189
+ transform: translateX(-1px);
190
+ transition:
191
+ transform 150ms,
192
+ background-color 150ms;
193
+ }
194
+
195
+ [data-slot="switch-label"] {
196
+ color: var(--text-base);
197
+ font-family: var(--font-family-sans);
198
+ font-size: var(--font-size-small);
199
+ font-style: normal;
200
+ font-weight: var(--font-weight-regular);
201
+ line-height: var(--line-height-large);
202
+ letter-spacing: var(--letter-spacing-normal);
203
+ }
204
+
205
+ [data-slot="switch-description"] {
206
+ color: var(--text-base);
207
+ font-family: var(--font-family-sans);
208
+ font-size: 12px;
209
+ font-weight: var(--font-weight-regular);
210
+ line-height: var(--line-height-normal);
211
+ letter-spacing: var(--letter-spacing-normal);
212
+ }
213
+
214
+ [data-slot="switch-error"] {
215
+ color: var(--text-error);
216
+ }
217
+
218
+ &:hover:not([data-disabled], [data-readonly]) [data-slot="switch-control"] {
219
+ border-color: var(--border-hover);
220
+ background: var(--surface-hover);
221
+ }
222
+
223
+ &:hover:not([data-disabled], [data-readonly]) [data-slot="switch-thumb"] {
224
+ width: 14px;
225
+ border-radius: 2px;
226
+ }
227
+
228
+ &:not([data-readonly]) [data-slot="switch-input"]:focus-visible ~ [data-slot="switch-control"] {
229
+ border-color: var(--border-focus);
230
+ outline: none;
231
+ box-shadow: var(--shadow-xs-border-focus);
232
+ }
233
+
234
+ &[data-checked] [data-slot="switch-control"] {
235
+ border-color: var(--icon-strong-base);
236
+ background: var(--icon-strong-base);
237
+ box-shadow: none;
238
+ }
239
+
240
+ &[data-checked] [data-slot="switch-thumb"],
241
+ &[data-checked]:hover:not([data-disabled], [data-readonly]) [data-slot="switch-thumb"] {
242
+ width: 14px;
243
+ border: none;
244
+ border-radius: 2px;
245
+ transform: translateX(12px);
246
+ background: var(--icon-invert-base);
247
+ }
248
+
249
+ &:dir(rtl)[data-checked] [data-slot="switch-thumb"],
250
+ &:dir(rtl)[data-checked]:hover:not([data-disabled], [data-readonly]) [data-slot="switch-thumb"] {
251
+ transform: translateX(-12px);
252
+ }
253
+
254
+ &[data-checked]:hover:not([data-disabled], [data-readonly]) [data-slot="switch-control"] {
255
+ border-color: var(--border-hover);
256
+ background: var(--surface-hover);
257
+ }
258
+
259
+ &[data-disabled] [data-slot="switch-control"] {
260
+ border-color: var(--border-disabled);
261
+ background: var(--surface-disabled);
262
+ opacity: 1;
263
+ }
264
+
265
+ &[data-disabled] [data-slot="switch-thumb"] {
266
+ background: var(--icon-disabled);
267
+ }
268
+
269
+ &[data-invalid] [data-slot="switch-control"] {
270
+ border-color: var(--border-error);
271
+ }
272
+ }
@@ -0,0 +1,34 @@
1
+ import { Control, Description, ErrorMessage, Input, Label, Root, Thumb } from "@kobalte/core/switch"
2
+ import { Show, splitProps } from "solid-js"
3
+ import type { ComponentProps, ParentProps } from "solid-js"
4
+ import "./switch.css"
5
+
6
+ export interface SwitchProps extends ParentProps<ComponentProps<typeof Root>> {
7
+ // I think we should consolidate - ask designers.
8
+ appearance?: "standard" | "compact"
9
+ hideLabel?: boolean
10
+ description?: string
11
+ }
12
+
13
+ export function Switch(props: SwitchProps) {
14
+ const [local, others] = splitProps(props, ["children", "class", "appearance", "hideLabel", "description"])
15
+ return (
16
+ <Root {...others} class={local.class} data-component="switch" data-appearance={local.appearance ?? "compact"}>
17
+ <Input data-slot="switch-input" />
18
+ <Show when={local.children}>
19
+ {(label) => (
20
+ <Label data-slot="switch-label" classList={{ "sr-only": local.hideLabel }}>
21
+ {label()}
22
+ </Label>
23
+ )}
24
+ </Show>
25
+ <Show when={local.description}>
26
+ <Description data-slot="switch-description">{local.description}</Description>
27
+ </Show>
28
+ <Control data-slot="switch-control">
29
+ <Thumb data-slot="switch-thumb" />
30
+ </Control>
31
+ <ErrorMessage data-slot="switch-error" />
32
+ </Root>
33
+ )
34
+ }
@@ -13,7 +13,7 @@
13
13
  outline: 1px solid transparent;
14
14
  outline-offset: 0;
15
15
  background:
16
- linear-gradient(180deg, var(--v2-alpha-light-2) 0%, var(--v2-alpha-light-0) 100%), var(--v2-background-bg-base);
16
+ linear-gradient(180deg, var(--v2-alpha-light-6) 0%, var(--v2-alpha-light-2) 100%), var(--v2-background-bg-base);
17
17
  box-shadow: var(--v2-elevation-button-neutral);
18
18
  flex: none;
19
19
  align-self: stretch;
@@ -30,7 +30,7 @@
30
30
  [data-component="text-input-v2"]:where(:hover):not([data-disabled], [data-invalid]):not(:focus-within) {
31
31
  background:
32
32
  linear-gradient(0deg, var(--v2-overlay-simple-overlay-hover), var(--v2-overlay-simple-overlay-hover)),
33
- linear-gradient(180deg, var(--v2-alpha-light-2) 0%, var(--v2-alpha-light-0) 100%), var(--v2-background-bg-base);
33
+ linear-gradient(180deg, var(--v2-alpha-light-6) 0%, var(--v2-alpha-light-2) 100%), var(--v2-background-bg-base);
34
34
  }
35
35
 
36
36
  [data-component="text-input-v2"]:where(:focus-within):not([data-disabled], [data-invalid]) {
@@ -92,7 +92,7 @@
92
92
  font-style: normal;
93
93
  font-weight: 440;
94
94
  font-size: 13px;
95
- line-height: 1;
95
+ line-height: var(--line-height-compact);
96
96
  letter-spacing: -0.04px;
97
97
  color: var(--v2-text-text-base);
98
98
  font-variation-settings: "slnt" 0;
@@ -1,9 +1,9 @@
1
1
  import { type ComponentProps, type JSX, Show, splitProps } from "solid-js"
2
- import { Icon } from "./icon"
2
+ import { Icon } from "@opencode-ai/ui/icon"
3
3
  import { useI18n } from "../../context/i18n"
4
- import "./text-input-v2.css"
4
+ import "./text-input.css"
5
5
 
6
- export interface TextInputV2Props extends Omit<ComponentProps<"input">, "type"> {
6
+ export interface TextInputProps extends Omit<ComponentProps<"input">, "type"> {
7
7
  /** Icon or adornment shown before the field value. */
8
8
  leadingIcon?: JSX.Element
9
9
  /** Show the trailing copy action. */
@@ -25,7 +25,7 @@ export interface TextInputV2Props extends Omit<ComponentProps<"input">, "type">
25
25
  type?: ComponentProps<"input">["type"]
26
26
  }
27
27
 
28
- export function TextInputV2(props: TextInputV2Props) {
28
+ export function TextInput(props: TextInputProps) {
29
29
  const i18n = useI18n()
30
30
  const [local, inputProps] = splitProps(props, [
31
31
  "class",
@@ -1,12 +1,12 @@
1
1
  import { type ComponentProps, splitProps } from "solid-js"
2
- import "./textarea-v2.css"
2
+ import "./textarea.css"
3
3
 
4
- export interface TextareaV2Props extends ComponentProps<"textarea"> {
4
+ export interface TextareaProps extends ComponentProps<"textarea"> {
5
5
  /** Error styling for the field and value text. */
6
6
  invalid?: boolean
7
7
  }
8
8
 
9
- export function TextareaV2(props: TextareaV2Props) {
9
+ export function Textarea(props: TextareaProps) {
10
10
  const [local, textareaProps] = splitProps(props, ["class", "classList", "invalid", "disabled", "rows"])
11
11
 
12
12
  return (
@@ -186,6 +186,26 @@ export function createAutoScroll(options: AutoScrollOptions) {
186
186
  },
187
187
  )
188
188
 
189
+ createEffect(() => {
190
+ const el = store.scrollRef
191
+ if (!el) return
192
+ const root = el.closest("main")
193
+ if (!root) return
194
+ let connected = el.isConnected
195
+ const contains = (node: Node) => node === el || (node instanceof Element && node.contains(el))
196
+ const observer = new MutationObserver((records) => {
197
+ records.forEach((record) => {
198
+ if ([...record.removedNodes].some(contains)) connected = false
199
+ if (!record.addedNodes.length || ![...record.addedNodes].some(contains)) return
200
+ const reattached = !connected
201
+ connected = true
202
+ if (reattached) scrollToBottom(false)
203
+ })
204
+ })
205
+ observer.observe(root, { childList: true })
206
+ onCleanup(() => observer.disconnect())
207
+ })
208
+
189
209
  createEffect(
190
210
  on(options.working, (working: boolean) => {
191
211
  settling = false
package/src/i18n/am.ts CHANGED
@@ -10,7 +10,7 @@ export const dict: Record<string, string> = {
10
10
  "ui.sessionReview.change.added": "ተጨማሪ",
11
11
  "ui.sessionReview.change.removed": "ተወግዷል",
12
12
  "ui.sessionReview.change.modified": "የተሻሻለው",
13
- "ui.sessionReview.image.loading": "በመጫን ላይ...",
13
+ "ui.sessionReview.image.loading": "በመጫን ላይ…",
14
14
  "ui.sessionReview.image.placeholder": "ምስል",
15
15
  "ui.sessionReview.largeDiff.title": "ለመሰራት በጣም ትልቅ ልዩነት",
16
16
  "ui.sessionReview.largeDiff.meta": "ገደብ፡ {{limit}} መስመሮች ተለውጠዋል። የአሁኑ፡ {{current}} መስመሮች ተለውጠዋል።",
@@ -28,7 +28,7 @@ export const dict: Record<string, string> = {
28
28
  "ui.sessionReviewV2.empty.noGit.title": "ምንም ክትትል የሚደረግባቸው ለውጦች የሉም",
29
29
  "ui.sessionReviewV2.empty.noGit.description": "በዚህ ፕሮጀክት ላይ ለውጦችን ይከታተሉ፣ ይገምግሙ እና ይቀልብሱ",
30
30
  "ui.sessionReviewV2.empty.noGit.action": "Git ማከማቻ ፍጠር",
31
- "ui.sessionReviewV2.empty.noGit.actionLoading": "Git ማከማቻ በመፍጠር ላይ...",
31
+ "ui.sessionReviewV2.empty.noGit.actionLoading": "Git ማከማቻ በመፍጠር ላይ…",
32
32
  "ui.sessionReviewV2.empty.changes.title": "አሁን ምንም ለውጥ የለም",
33
33
  "ui.sessionReviewV2.empty.changes.description": "የፕሮጀክት ለውጦች እዚህ ይታያሉ",
34
34
  "ui.sessionReview.openFile": "ክፍት ፋይል",
@@ -37,7 +37,7 @@ export const dict: Record<string, string> = {
37
37
  "ui.fileMedia.kind.image": "ምስል",
38
38
  "ui.fileMedia.kind.audio": "ድምጽ",
39
39
  "ui.fileMedia.state.removed": "{{kind}}ፋይል ተወግዷል።",
40
- "ui.fileMedia.state.loading": "በመጫን ላይ {{kind}}...",
40
+ "ui.fileMedia.state.loading": "በመጫን ላይ {{kind}}",
41
41
  "ui.fileMedia.state.error": "{{kind}}ን መጫን አልተቻለም።",
42
42
  "ui.fileMedia.state.unavailable": "{{kind}} ቅድመ እይታ አይገኝም።",
43
43
  "ui.fileMedia.binary.title": "ሁለትዮሽ ፋይል",
@@ -68,7 +68,7 @@ export const dict: Record<string, string> = {
68
68
  "ui.sessionTurn.error.freeUsageExceeded": "ነፃ አጠቃቀም ታልፏል",
69
69
  "ui.sessionTurn.error.addCredits": "ክሬዲት አክል",
70
70
  "dialog.usageExceeded.freeTier.title": "ነፃ ገደብ ላይ ደርሷል",
71
- "dialog.usageExceeded.freeTier.description": "ለምርጥ ክፍት ምንጭ ሞዴሎች ታማኝ መዳረሻ ለማግኘት በወር $10 ለOpenCode Go ይመዝገቡ።",
71
+ "dialog.usageExceeded.freeTier.description": "ለOpenCode Go ለምርጥ ክፍት ምንጭ ሞዴሎች ታማኝ መዳረሻ ለማግኘት ይመዝገቡ፣ ከ$5 በወር ጀምሮ።",
72
72
  "dialog.usageExceeded.freeTier.actionLabel": "ለደንበኝነት ይመዝገቡ",
73
73
  "dialog.usageExceeded.accountRateLimit.title": "የሂድ ገደብ ላይ ደርሷል",
74
74
  "dialog.usageExceeded.accountRateLimit.description":
@@ -114,8 +114,8 @@ export const dict: Record<string, string> = {
114
114
  "ui.promptInput.dropFiles": "ለማያያዝ ፋይሎችን ጣል",
115
115
  "ui.promptInput.removeAttachment": "ዓባሪን አስወግድ",
116
116
  "ui.promptInput.label": "ፕሮምፕት",
117
- "ui.promptInput.placeholder.shell": "የሼል ትዕዛዝ አስገባ...",
118
- "ui.promptInput.placeholder.normal": "ማንኛውንም ነገር ይጠይቁ፣ {{slash}} ለትእዛዞች፣ {{at}} ለአውድ...",
117
+ "ui.promptInput.placeholder.shell": "የሼል ትዕዛዝ አስገባ…",
118
+ "ui.promptInput.placeholder.normal": "ማንኛውንም ነገር ይጠይቁ፣ {{slash}} ለትእዛዞች፣ {{at}} ለአውድ…",
119
119
  "ui.promptInput.add": "ምስሎችን እና ፋይሎችን አክል",
120
120
  "ui.promptInput.attachments": "ምስሎች እና ፋይሎች",
121
121
  "ui.promptInput.context": "አውድ",
@@ -142,8 +142,6 @@ export const dict: Record<string, string> = {
142
142
  "ui.tool.websearch.provider": "{{provider}}ድር ፍለጋ",
143
143
  "ui.tool.shell": "ሼል",
144
144
  "ui.tool.patch": "Patch",
145
- "ui.tool.todos": "የሚደረጉ ነገሮች",
146
- "ui.tool.todos.read": "ወደ-ድርጊት አንብብ",
147
145
  "ui.tool.questions": "ጥያቄዎች",
148
146
  "ui.tool.questions.numbered": "ጥያቄዎች {{number}}",
149
147
  "ui.tool.agent": "{{type}} ወኪል",
@@ -192,5 +190,5 @@ export const dict: Record<string, string> = {
192
190
  "ui.question.review.notAnswered": "(አልተመለሰም)",
193
191
  "ui.question.multiHint": "የሚመለከተውን ሁሉንም መልሶች ይምረጡ",
194
192
  "ui.question.singleHint": "አንድ መልስ ምረጥ",
195
- "ui.question.custom.placeholder": "መልስዎን ይተይቡ...",
193
+ "ui.question.custom.placeholder": "መልስዎን ይተይቡ…",
196
194
  }
package/src/i18n/ar.ts CHANGED
@@ -13,7 +13,7 @@ export const dict = {
13
13
  "ui.sessionReview.change.added": "مضاف",
14
14
  "ui.sessionReview.change.removed": "محذوف",
15
15
  "ui.sessionReview.change.modified": "معدل",
16
- "ui.sessionReview.image.loading": "جارٍ التحميل...",
16
+ "ui.sessionReview.image.loading": "جارٍ التحميل…",
17
17
  "ui.sessionReview.image.placeholder": "صورة",
18
18
  "ui.sessionReview.largeDiff.title": "الفروقات أكبر من أن تُعرض",
19
19
  "ui.sessionReview.largeDiff.meta": "الحد: {{limit}} سطرًا معدّلًا. حاليًا: {{current}} سطرًا معدّلًا.",
@@ -31,13 +31,13 @@ export const dict = {
31
31
  "ui.sessionReviewV2.empty.noGit.title": "لا توجد تغييرات متتبعة",
32
32
  "ui.sessionReviewV2.empty.noGit.description": "تتبع التغييرات في هذا المشروع وراجعها وتراجع عنها",
33
33
  "ui.sessionReviewV2.empty.noGit.action": "إنشاء مستودع Git",
34
- "ui.sessionReviewV2.empty.noGit.actionLoading": "جارٍ إنشاء مستودع Git...",
34
+ "ui.sessionReviewV2.empty.noGit.actionLoading": "جارٍ إنشاء مستودع Git",
35
35
  "ui.sessionReviewV2.empty.changes.title": "لا توجد تغييرات في الملفات بعد",
36
36
  "ui.sessionReviewV2.empty.changes.description": "ستظهر تغييرات المشروع هنا",
37
37
  "ui.fileMedia.kind.image": "صورة",
38
38
  "ui.fileMedia.kind.audio": "صوت",
39
39
  "ui.fileMedia.state.removed": "تمت إزالة {{kind}}",
40
- "ui.fileMedia.state.loading": "جارٍ تحميل {{kind}}...",
40
+ "ui.fileMedia.state.loading": "جارٍ تحميل {{kind}}",
41
41
  "ui.fileMedia.state.error": "تعذر تحميل {{kind}}.",
42
42
  "ui.fileMedia.state.unavailable": "معاينة {{kind}} غير متاحة.",
43
43
  "ui.fileMedia.binary.title": "ملف ثنائي",
@@ -77,7 +77,7 @@ export const dict = {
77
77
 
78
78
  "dialog.usageExceeded.freeTier.title": "تم الوصول إلى الحد المجاني",
79
79
  "dialog.usageExceeded.freeTier.description":
80
- "اشترك في OpenCode Go مقابل $10/شهر للحصول على وصول موثوق إلى أفضل النماذج مفتوحة المصدر.",
80
+ "اشترك في OpenCode Go للحصول على وصول موثوق إلى أفضل النماذج مفتوحة المصدر، ابتداءً من $5/شهر.",
81
81
  "dialog.usageExceeded.freeTier.actionLabel": "اشترك",
82
82
  "dialog.usageExceeded.accountRateLimit.title": "تم الوصول إلى حد Go",
83
83
  "dialog.usageExceeded.accountRateLimit.description":
@@ -136,8 +136,8 @@ export const dict = {
136
136
  "ui.promptInput.dropFiles": "أفلت الملفات لإرفاقها",
137
137
  "ui.promptInput.removeAttachment": "إزالة المرفق",
138
138
  "ui.promptInput.label": "الموجّه",
139
- "ui.promptInput.placeholder.shell": "أدخل أمر shell...",
140
- "ui.promptInput.placeholder.normal": "اسأل عن أي شيء، {{slash}} للأوامر، {{at}} للسياق...",
139
+ "ui.promptInput.placeholder.shell": "أدخل أمر shell",
140
+ "ui.promptInput.placeholder.normal": "اسأل عن أي شيء، {{slash}} للأوامر، {{at}} للسياق…",
141
141
  "ui.promptInput.add": "إضافة صور وملفات",
142
142
  "ui.promptInput.attachments": "الصور والملفات",
143
143
  "ui.promptInput.context": "السياق",
@@ -167,8 +167,6 @@ export const dict = {
167
167
  "ui.tool.websearch.provider": "{{provider}} بحث الويب",
168
168
  "ui.tool.shell": "Shell",
169
169
  "ui.tool.patch": "تطبيق رقعة",
170
- "ui.tool.todos": "المهام",
171
- "ui.tool.todos.read": "قراءة المهام",
172
170
  "ui.tool.questions": "أسئلة",
173
171
  "ui.tool.questions.numbered": "أسئلة {{number}}",
174
172
  "ui.tool.agent": "وكيل {{type}}",
@@ -217,7 +215,7 @@ export const dict = {
217
215
  "ui.question.review.notAnswered": "(لم تتم الإجابة)",
218
216
  "ui.question.multiHint": "حدد كل ما ينطبق",
219
217
  "ui.question.singleHint": "حدد إجابة واحدة",
220
- "ui.question.custom.placeholder": "اكتب إجابتك...",
218
+ "ui.question.custom.placeholder": "اكتب إجابتك…",
221
219
 
222
220
  "ui.fileSearch.placeholder": "بحث",
223
221
  "ui.fileSearch.previousMatch": "المطابقة السابقة",
package/src/i18n/az.ts CHANGED
@@ -10,7 +10,7 @@ export const dict: Record<string, string> = {
10
10
  "ui.sessionReview.change.added": "Əlavə edildi",
11
11
  "ui.sessionReview.change.removed": "Silindi",
12
12
  "ui.sessionReview.change.modified": "Dəyişdirildi",
13
- "ui.sessionReview.image.loading": "Yüklənir...",
13
+ "ui.sessionReview.image.loading": "Yüklənir",
14
14
  "ui.sessionReview.image.placeholder": "Şəkil",
15
15
  "ui.sessionReview.largeDiff.title": "Fərq göstərmək üçün çox böyükdür",
16
16
  "ui.sessionReview.largeDiff.meta": "Limit: {{limit}} dəyişmiş sətir. Cari: {{current}} dəyişmiş sətir.",
@@ -28,7 +28,7 @@ export const dict: Record<string, string> = {
28
28
  "ui.sessionReviewV2.empty.noGit.title": "İzlənən dəyişiklik yoxdur",
29
29
  "ui.sessionReviewV2.empty.noGit.description": "Bu layihədə dəyişiklikləri izləyin, nəzərdən keçirin və ləğv edin",
30
30
  "ui.sessionReviewV2.empty.noGit.action": "Git repozitoriyası yarat",
31
- "ui.sessionReviewV2.empty.noGit.actionLoading": "Git repozitoriyası yaradılır...",
31
+ "ui.sessionReviewV2.empty.noGit.actionLoading": "Git repozitoriyası yaradılır",
32
32
  "ui.sessionReviewV2.empty.changes.title": "Hələ heç bir fayl dəyişikliyi yoxdur",
33
33
  "ui.sessionReviewV2.empty.changes.description": "Layihə dəyişiklikləri burada görünəcək",
34
34
  "ui.sessionReview.openFile": "Faylı aç",
@@ -37,7 +37,7 @@ export const dict: Record<string, string> = {
37
37
  "ui.fileMedia.kind.image": "şəkil",
38
38
  "ui.fileMedia.kind.audio": "səs",
39
39
  "ui.fileMedia.state.removed": "{{kind}} faylı silindi.",
40
- "ui.fileMedia.state.loading": "{{kind}} yüklənir...",
40
+ "ui.fileMedia.state.loading": "{{kind}} yüklənir",
41
41
  "ui.fileMedia.state.error": "{{kind}} yüklənə bilmədi.",
42
42
  "ui.fileMedia.state.unavailable": "{{kind}} önbaxışı mövcud deyil.",
43
43
  "ui.fileMedia.binary.title": "İkili fayl",
@@ -69,7 +69,7 @@ export const dict: Record<string, string> = {
69
69
  "ui.sessionTurn.error.addCredits": "Kredit əlavə et",
70
70
  "dialog.usageExceeded.freeTier.title": "Pulsuz limitə çatdınız",
71
71
  "dialog.usageExceeded.freeTier.description":
72
- "Ayda $10 olan OpenCode Go abunəliyi ilə ən yaxşı açıq mənbəli modellərə etibarlı giriş əldə edin.",
72
+ "Ayda $5-dan başlayan OpenCode Go abunəliyi ilə ən yaxşı açıq mənbəli modellərə etibarlı giriş əldə edin.",
73
73
  "dialog.usageExceeded.freeTier.actionLabel": "Abunə ol",
74
74
  "dialog.usageExceeded.accountRateLimit.title": "Go limitinə çatdınız",
75
75
  "dialog.usageExceeded.accountRateLimit.description":
@@ -115,8 +115,8 @@ export const dict: Record<string, string> = {
115
115
  "ui.promptInput.dropFiles": "Əlavə etmək üçün faylları buraxın",
116
116
  "ui.promptInput.removeAttachment": "Əlavəni sil",
117
117
  "ui.promptInput.label": "Prompt",
118
- "ui.promptInput.placeholder.shell": "Shell əmrini daxil edin...",
119
- "ui.promptInput.placeholder.normal": "İstədiyinizi soruşun, {{slash}} əmrlər üçün, {{at}} kontekst üçün...",
118
+ "ui.promptInput.placeholder.shell": "Shell əmrini daxil edin",
119
+ "ui.promptInput.placeholder.normal": "İstədiyinizi soruşun, {{slash}} əmrlər üçün, {{at}} kontekst üçün",
120
120
  "ui.promptInput.add": "Şəkil və fayllar əlavə edin",
121
121
  "ui.promptInput.attachments": "Şəkillər və fayllar",
122
122
  "ui.promptInput.context": "Kontekst",
@@ -143,8 +143,6 @@ export const dict: Record<string, string> = {
143
143
  "ui.tool.websearch.provider": "{{provider}} Veb axtarışı",
144
144
  "ui.tool.shell": "Shell",
145
145
  "ui.tool.patch": "Patch",
146
- "ui.tool.todos": "Tapşırıqlar",
147
- "ui.tool.todos.read": "Tapşırıqları oxu",
148
146
  "ui.tool.questions": "Suallar",
149
147
  "ui.tool.questions.numbered": "Suallar {{number}}",
150
148
  "ui.tool.agent": "{{type}} Agent",
@@ -193,5 +191,5 @@ export const dict: Record<string, string> = {
193
191
  "ui.question.review.notAnswered": "(cavablanmayıb)",
194
192
  "ui.question.multiHint": "Uyğun gələn bütün cavabları seçin",
195
193
  "ui.question.singleHint": "Bir cavab seçin",
196
- "ui.question.custom.placeholder": "Cavabınızı yazın...",
194
+ "ui.question.custom.placeholder": "Cavabınızı yazın",
197
195
  }