@opencode/ui 0.0.0-reserved → 2.0.0

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 (520) hide show
  1. package/LICENSE +21 -0
  2. package/dist/actions/button/button.d.ts +10 -0
  3. package/dist/actions/icon-button/icon-button.d.ts +11 -0
  4. package/dist/actions/split-button/split-button.d.ts +5 -0
  5. package/dist/components/animated-number.d.ts +4 -0
  6. package/dist/components/app-icon.d.ts +6 -0
  7. package/dist/components/app-icons/types.d.ts +2 -0
  8. package/dist/components/card.d.ts +22 -0
  9. package/dist/components/collapsible.d.ts +17 -0
  10. package/dist/components/context-menu.d.ts +80 -0
  11. package/dist/components/dock-surface.d.ts +7 -0
  12. package/dist/components/favicon.d.ts +1 -0
  13. package/dist/components/file-icon.d.ts +12 -0
  14. package/dist/components/file-icons/types.d.ts +2 -0
  15. package/dist/components/font.d.ts +1 -0
  16. package/dist/components/hover-card.d.ts +9 -0
  17. package/dist/components/image-preview.d.ts +5 -0
  18. package/dist/components/list.d.ts +45 -0
  19. package/dist/components/logo.d.ts +8 -0
  20. package/dist/components/motion-spring.d.ts +4 -0
  21. package/dist/components/popover.d.ts +14 -0
  22. package/dist/components/progress.d.ts +7 -0
  23. package/dist/components/provider-icon.d.ts +5 -0
  24. package/dist/components/provider-icons/types.d.ts +2 -0
  25. package/dist/components/resize-handle.d.ts +14 -0
  26. package/dist/components/scroll-view.d.ts +42 -0
  27. package/dist/components/spinner.d.ts +6 -0
  28. package/dist/components/sticky-accordion-header.d.ts +5 -0
  29. package/dist/components/text-field.d.ts +13 -0
  30. package/dist/components/text-reveal.d.ts +13 -0
  31. package/dist/components/text-strikethrough.d.ts +11 -0
  32. package/dist/components/typewriter.d.ts +6 -0
  33. package/dist/context/dialog.d.ts +18 -0
  34. package/dist/context/file.d.ts +5 -0
  35. package/dist/context/helper.d.ts +14 -0
  36. package/dist/context/i18n.d.ts +24 -0
  37. package/dist/context/index.d.ts +4 -0
  38. package/dist/context/marked-base.d.ts +3 -0
  39. package/dist/context/marked-parser.d.ts +1 -0
  40. package/dist/context/marked-theme-register.d.ts +1 -0
  41. package/dist/context/marked-theme.d.ts +2 -0
  42. package/dist/context/marked.d.ts +2 -0
  43. package/dist/context/worker-pool.d.ts +9 -0
  44. package/dist/data-display/accordion/accordion.d.ts +24 -0
  45. package/dist/data-display/avatar/avatar.d.ts +11 -0
  46. package/dist/data-display/badge/badge.d.ts +7 -0
  47. package/dist/data-display/diff-changes/diff-changes.d.ts +12 -0
  48. package/dist/data-display/keybind/keybind.d.ts +7 -0
  49. package/dist/data-display/line-comment/line-comment.d.ts +32 -0
  50. package/dist/data-display/project-avatar/project-avatar.d.ts +12 -0
  51. package/dist/feedback/loader/loader.d.ts +3 -0
  52. package/dist/feedback/progress-circle/progress-circle.d.ts +9 -0
  53. package/dist/feedback/toast/toast.d.ts +57 -0
  54. package/dist/forms/checkbox/checkbox.d.ts +8 -0
  55. package/dist/forms/field/field.d.ts +22 -0
  56. package/dist/forms/inline-input/inline-input.d.ts +5 -0
  57. package/dist/forms/radio/radio.d.ts +16 -0
  58. package/dist/forms/select/select.d.ts +23 -0
  59. package/dist/forms/switch/switch.d.ts +9 -0
  60. package/dist/forms/text-input/text-input.d.ts +24 -0
  61. package/dist/forms/textarea/textarea.d.ts +7 -0
  62. package/dist/hooks/create-auto-scroll.d.ts +17 -0
  63. package/dist/hooks/index.d.ts +2 -0
  64. package/dist/hooks/use-filtered-list.d.ts +48 -0
  65. package/dist/i18n/am.d.ts +1 -0
  66. package/dist/i18n/ar.d.ts +209 -0
  67. package/dist/i18n/az.d.ts +1 -0
  68. package/dist/i18n/bg.d.ts +193 -0
  69. package/dist/i18n/bn.d.ts +1 -0
  70. package/dist/i18n/br.d.ts +197 -0
  71. package/dist/i18n/bs.d.ts +197 -0
  72. package/dist/i18n/ca.d.ts +1 -0
  73. package/dist/i18n/cs.d.ts +1 -0
  74. package/dist/i18n/da.d.ts +193 -0
  75. package/dist/i18n/de.d.ts +193 -0
  76. package/dist/i18n/dv.d.ts +1 -0
  77. package/dist/i18n/dz.d.ts +1 -0
  78. package/dist/i18n/el.d.ts +1 -0
  79. package/dist/i18n/en.d.ts +251 -0
  80. package/dist/i18n/es.d.ts +197 -0
  81. package/dist/i18n/et.d.ts +1 -0
  82. package/dist/i18n/fa.d.ts +1 -0
  83. package/dist/i18n/fi.d.ts +1 -0
  84. package/dist/i18n/fo.d.ts +1 -0
  85. package/dist/i18n/fr.d.ts +197 -0
  86. package/dist/i18n/he.d.ts +197 -0
  87. package/dist/i18n/hi.d.ts +1 -0
  88. package/dist/i18n/hr.d.ts +1 -0
  89. package/dist/i18n/hu.d.ts +1 -0
  90. package/dist/i18n/hy.d.ts +1 -0
  91. package/dist/i18n/id.d.ts +1 -0
  92. package/dist/i18n/is.d.ts +1 -0
  93. package/dist/i18n/it.d.ts +1 -0
  94. package/dist/i18n/ja.d.ts +193 -0
  95. package/dist/i18n/ka.d.ts +1 -0
  96. package/dist/i18n/km.d.ts +193 -0
  97. package/dist/i18n/ko.d.ts +193 -0
  98. package/dist/i18n/lo.d.ts +193 -0
  99. package/dist/i18n/lt.d.ts +1 -0
  100. package/dist/i18n/lv.d.ts +1 -0
  101. package/dist/i18n/mk.d.ts +193 -0
  102. package/dist/i18n/mn.d.ts +193 -0
  103. package/dist/i18n/ms.d.ts +1 -0
  104. package/dist/i18n/my.d.ts +193 -0
  105. package/dist/i18n/ne.d.ts +1 -0
  106. package/dist/i18n/nl.d.ts +1 -0
  107. package/dist/i18n/no.d.ts +4 -0
  108. package/dist/i18n/pa.d.ts +1 -0
  109. package/dist/i18n/pl.d.ts +201 -0
  110. package/dist/i18n/ro.d.ts +1 -0
  111. package/dist/i18n/ru.d.ts +201 -0
  112. package/dist/i18n/si.d.ts +1 -0
  113. package/dist/i18n/sk.d.ts +1 -0
  114. package/dist/i18n/sl.d.ts +1 -0
  115. package/dist/i18n/sq.d.ts +1 -0
  116. package/dist/i18n/sr.d.ts +197 -0
  117. package/dist/i18n/sv.d.ts +1 -0
  118. package/dist/i18n/tg.d.ts +193 -0
  119. package/dist/i18n/th.d.ts +193 -0
  120. package/dist/i18n/tk.d.ts +1 -0
  121. package/dist/i18n/tr.d.ts +193 -0
  122. package/dist/i18n/uk.d.ts +1 -0
  123. package/dist/i18n/ur.d.ts +1 -0
  124. package/dist/i18n/uz.d.ts +1 -0
  125. package/dist/i18n/vi.d.ts +1 -0
  126. package/dist/i18n/zh.d.ts +193 -0
  127. package/dist/i18n/zht.d.ts +193 -0
  128. package/dist/icons/icon/additional-icons.d.ts +105 -0
  129. package/dist/icons/icon/icon.d.ts +228 -0
  130. package/dist/layout/divider/divider.d.ts +5 -0
  131. package/dist/navigation/menu/menu.d.ts +59 -0
  132. package/dist/navigation/segmented-control/segmented-control.d.ts +21 -0
  133. package/dist/navigation/tab-state-indicator.d.ts +2 -0
  134. package/dist/navigation/tabs/tabs.d.ts +39 -0
  135. package/dist/overlays/dialog/dialog.d.ts +26 -0
  136. package/dist/overlays/tooltip/tooltip.d.ts +15 -0
  137. package/dist/storybook/fixtures.d.ts +19 -0
  138. package/dist/storybook/scaffold.d.ts +16 -0
  139. package/dist/theme/color.d.ts +30 -0
  140. package/dist/theme/context.d.ts +21 -0
  141. package/dist/theme/default-themes.d.ts +39 -0
  142. package/dist/theme/index.d.ts +7 -0
  143. package/dist/theme/loader.d.ts +6 -0
  144. package/dist/theme/resolve.d.ts +7 -0
  145. package/dist/theme/types.d.ts +56 -0
  146. package/dist/theme/v2/avatar.d.ts +5 -0
  147. package/dist/theme/v2/default-primitives.d.ts +3 -0
  148. package/dist/theme/v2/foreground.d.ts +2 -0
  149. package/dist/theme/v2/mapping.d.ts +3 -0
  150. package/dist/theme/v2/resolve.d.ts +9 -0
  151. package/dist/typography/text-shimmer/text-shimmer.d.ts +9 -0
  152. package/dist/typography/wordmark/wordmark.d.ts +5 -0
  153. package/package.json +252 -6
  154. package/src/actions/button/button.css +294 -0
  155. package/src/actions/button/button.tsx +42 -0
  156. package/src/actions/icon-button/icon-button.css +124 -0
  157. package/src/actions/icon-button/icon-button.tsx +32 -0
  158. package/src/actions/split-button/split-button.css +95 -0
  159. package/src/actions/split-button/split-button.tsx +48 -0
  160. package/src/actions/submit.css +74 -0
  161. package/src/assets/audio/alert-01.aac +0 -0
  162. package/src/assets/audio/alert-01.mp3 +0 -0
  163. package/src/assets/audio/alert-02.aac +0 -0
  164. package/src/assets/audio/alert-02.mp3 +0 -0
  165. package/src/assets/audio/alert-03.aac +0 -0
  166. package/src/assets/audio/alert-03.mp3 +0 -0
  167. package/src/assets/audio/alert-04.aac +0 -0
  168. package/src/assets/audio/alert-04.mp3 +0 -0
  169. package/src/assets/audio/alert-05.aac +0 -0
  170. package/src/assets/audio/alert-05.mp3 +0 -0
  171. package/src/assets/audio/alert-06.aac +0 -0
  172. package/src/assets/audio/alert-06.mp3 +0 -0
  173. package/src/assets/audio/alert-07.aac +0 -0
  174. package/src/assets/audio/alert-07.mp3 +0 -0
  175. package/src/assets/audio/alert-08.aac +0 -0
  176. package/src/assets/audio/alert-08.mp3 +0 -0
  177. package/src/assets/audio/alert-09.aac +0 -0
  178. package/src/assets/audio/alert-09.mp3 +0 -0
  179. package/src/assets/audio/alert-10.aac +0 -0
  180. package/src/assets/audio/alert-10.mp3 +0 -0
  181. package/src/assets/audio/bip-bop-01.aac +0 -0
  182. package/src/assets/audio/bip-bop-01.mp3 +0 -0
  183. package/src/assets/audio/bip-bop-02.aac +0 -0
  184. package/src/assets/audio/bip-bop-02.mp3 +0 -0
  185. package/src/assets/audio/bip-bop-03.aac +0 -0
  186. package/src/assets/audio/bip-bop-03.mp3 +0 -0
  187. package/src/assets/audio/bip-bop-04.aac +0 -0
  188. package/src/assets/audio/bip-bop-04.mp3 +0 -0
  189. package/src/assets/audio/bip-bop-05.aac +0 -0
  190. package/src/assets/audio/bip-bop-05.mp3 +0 -0
  191. package/src/assets/audio/bip-bop-06.aac +0 -0
  192. package/src/assets/audio/bip-bop-06.mp3 +0 -0
  193. package/src/assets/audio/bip-bop-07.aac +0 -0
  194. package/src/assets/audio/bip-bop-07.mp3 +0 -0
  195. package/src/assets/audio/bip-bop-08.aac +0 -0
  196. package/src/assets/audio/bip-bop-08.mp3 +0 -0
  197. package/src/assets/audio/bip-bop-09.aac +0 -0
  198. package/src/assets/audio/bip-bop-09.mp3 +0 -0
  199. package/src/assets/audio/bip-bop-10.aac +0 -0
  200. package/src/assets/audio/bip-bop-10.mp3 +0 -0
  201. package/src/assets/audio/nope-01.aac +0 -0
  202. package/src/assets/audio/nope-01.mp3 +0 -0
  203. package/src/assets/audio/nope-02.aac +0 -0
  204. package/src/assets/audio/nope-02.mp3 +0 -0
  205. package/src/assets/audio/nope-03.aac +0 -0
  206. package/src/assets/audio/nope-03.mp3 +0 -0
  207. package/src/assets/audio/nope-04.aac +0 -0
  208. package/src/assets/audio/nope-04.mp3 +0 -0
  209. package/src/assets/audio/nope-05.aac +0 -0
  210. package/src/assets/audio/nope-05.mp3 +0 -0
  211. package/src/assets/audio/nope-06.aac +0 -0
  212. package/src/assets/audio/nope-06.mp3 +0 -0
  213. package/src/assets/audio/nope-07.aac +0 -0
  214. package/src/assets/audio/nope-07.mp3 +0 -0
  215. package/src/assets/audio/nope-08.aac +0 -0
  216. package/src/assets/audio/nope-08.mp3 +0 -0
  217. package/src/assets/audio/nope-09.aac +0 -0
  218. package/src/assets/audio/nope-09.mp3 +0 -0
  219. package/src/assets/audio/nope-10.aac +0 -0
  220. package/src/assets/audio/nope-10.mp3 +0 -0
  221. package/src/assets/audio/nope-11.aac +0 -0
  222. package/src/assets/audio/nope-11.mp3 +0 -0
  223. package/src/assets/audio/nope-12.aac +0 -0
  224. package/src/assets/audio/nope-12.mp3 +0 -0
  225. package/src/assets/audio/staplebops-01.aac +0 -0
  226. package/src/assets/audio/staplebops-01.mp3 +0 -0
  227. package/src/assets/audio/staplebops-02.aac +0 -0
  228. package/src/assets/audio/staplebops-02.mp3 +0 -0
  229. package/src/assets/audio/staplebops-03.aac +0 -0
  230. package/src/assets/audio/staplebops-03.mp3 +0 -0
  231. package/src/assets/audio/staplebops-04.aac +0 -0
  232. package/src/assets/audio/staplebops-04.mp3 +0 -0
  233. package/src/assets/audio/staplebops-05.aac +0 -0
  234. package/src/assets/audio/staplebops-05.mp3 +0 -0
  235. package/src/assets/audio/staplebops-06.aac +0 -0
  236. package/src/assets/audio/staplebops-06.mp3 +0 -0
  237. package/src/assets/audio/staplebops-07.aac +0 -0
  238. package/src/assets/audio/staplebops-07.mp3 +0 -0
  239. package/src/assets/audio/yup-01.aac +0 -0
  240. package/src/assets/audio/yup-01.mp3 +0 -0
  241. package/src/assets/audio/yup-02.aac +0 -0
  242. package/src/assets/audio/yup-02.mp3 +0 -0
  243. package/src/assets/audio/yup-03.aac +0 -0
  244. package/src/assets/audio/yup-03.mp3 +0 -0
  245. package/src/assets/audio/yup-04.aac +0 -0
  246. package/src/assets/audio/yup-04.mp3 +0 -0
  247. package/src/assets/audio/yup-05.aac +0 -0
  248. package/src/assets/audio/yup-05.mp3 +0 -0
  249. package/src/assets/audio/yup-06.aac +0 -0
  250. package/src/assets/audio/yup-06.mp3 +0 -0
  251. package/src/assets/fonts/Inter.ttf +0 -0
  252. package/src/assets/fonts/JetBrainsMonoNerdFontMono-Regular.woff2 +0 -0
  253. package/src/assets/icons/app/android-studio.svg +369 -0
  254. package/src/assets/icons/app/antigravity.svg +97 -0
  255. package/src/assets/icons/app/cursor.svg +16 -0
  256. package/src/assets/icons/app/file-explorer.svg +20 -0
  257. package/src/assets/icons/app/finder.png +0 -0
  258. package/src/assets/icons/app/ghostty.svg +13 -0
  259. package/src/assets/icons/app/iterm2.svg +13 -0
  260. package/src/assets/icons/app/powershell.svg +14 -0
  261. package/src/assets/icons/app/sublimetext.svg +17 -0
  262. package/src/assets/icons/app/terminal.png +0 -0
  263. package/src/assets/icons/app/textmate.png +0 -0
  264. package/src/assets/icons/app/vscode.svg +39 -0
  265. package/src/assets/icons/app/warp.png +0 -0
  266. package/src/assets/icons/app/xcode.png +0 -0
  267. package/src/assets/icons/app/zed-dark.svg +15 -0
  268. package/src/assets/icons/app/zed.svg +15 -0
  269. package/src/components/animated-number.css +93 -0
  270. package/src/components/animated-number.tsx +109 -0
  271. package/src/components/app-icon.css +5 -0
  272. package/src/components/app-icon.tsx +85 -0
  273. package/src/components/app-icons/sprite.svg +114 -0
  274. package/src/components/app-icons/types.ts +21 -0
  275. package/src/components/card.css +94 -0
  276. package/src/components/card.tsx +123 -0
  277. package/src/components/collapsible.css +154 -0
  278. package/src/components/collapsible.tsx +48 -0
  279. package/src/components/context-menu.css +134 -0
  280. package/src/components/context-menu.tsx +308 -0
  281. package/src/components/dock-surface.css +30 -0
  282. package/src/components/dock-surface.tsx +54 -0
  283. package/src/components/favicon.tsx +13 -0
  284. package/src/components/file-icon.css +26 -0
  285. package/src/components/file-icon.tsx +588 -0
  286. package/src/components/file-icons/sprite.svg +11707 -0
  287. package/src/components/file-icons/types.ts +1095 -0
  288. package/src/components/font.tsx +1 -0
  289. package/src/components/hover-card.css +61 -0
  290. package/src/components/hover-card.tsx +32 -0
  291. package/src/components/image-preview.css +63 -0
  292. package/src/components/image-preview.tsx +33 -0
  293. package/src/components/list.css +331 -0
  294. package/src/components/list.tsx +396 -0
  295. package/src/components/logo.css +4 -0
  296. package/src/components/logo.tsx +62 -0
  297. package/src/components/motion-spring.tsx +58 -0
  298. package/src/components/popover.css +98 -0
  299. package/src/components/popover.tsx +154 -0
  300. package/src/components/progress.css +63 -0
  301. package/src/components/progress.tsx +39 -0
  302. package/src/components/provider-icon.css +5 -0
  303. package/src/components/provider-icon.tsx +25 -0
  304. package/src/components/provider-icons/sprite.svg +1110 -0
  305. package/src/components/provider-icons/types.ts +105 -0
  306. package/src/components/resize-handle.css +70 -0
  307. package/src/components/resize-handle.tsx +102 -0
  308. package/src/components/scroll-view.css +99 -0
  309. package/src/components/scroll-view.tsx +453 -0
  310. package/src/components/spinner.css +6 -0
  311. package/src/components/spinner.tsx +52 -0
  312. package/src/components/sticky-accordion-header.css +6 -0
  313. package/src/components/sticky-accordion-header.tsx +18 -0
  314. package/src/components/text-field.css +134 -0
  315. package/src/components/text-field.tsx +136 -0
  316. package/src/components/text-reveal.css +150 -0
  317. package/src/components/text-reveal.tsx +143 -0
  318. package/src/components/text-strikethrough.css +27 -0
  319. package/src/components/text-strikethrough.tsx +84 -0
  320. package/src/components/typewriter.css +14 -0
  321. package/src/components/typewriter.tsx +55 -0
  322. package/src/context/dialog.tsx +198 -0
  323. package/src/context/file.tsx +10 -0
  324. package/src/context/helper.tsx +38 -0
  325. package/src/context/i18n.tsx +77 -0
  326. package/src/context/index.ts +4 -0
  327. package/src/context/marked-base.tsx +55 -0
  328. package/src/context/marked-parser.tsx +58 -0
  329. package/src/context/marked-theme-register.tsx +10 -0
  330. package/src/context/marked-theme.tsx +372 -0
  331. package/src/context/marked.tsx +28 -0
  332. package/src/context/worker-pool.tsx +20 -0
  333. package/src/custom-elements.d.ts +17 -0
  334. package/src/data-display/accordion/accordion.css +121 -0
  335. package/src/data-display/accordion/accordion.tsx +92 -0
  336. package/src/data-display/avatar/avatar.css +70 -0
  337. package/src/data-display/avatar/avatar.tsx +59 -0
  338. package/src/data-display/badge/badge.css +52 -0
  339. package/src/data-display/badge/badge.tsx +25 -0
  340. package/src/data-display/diff-changes/diff-changes.css +47 -0
  341. package/src/data-display/diff-changes/diff-changes.tsx +33 -0
  342. package/src/data-display/keybind/keybind.css +76 -0
  343. package/src/data-display/keybind/keybind.tsx +30 -0
  344. package/src/data-display/line-comment/line-comment.css +258 -0
  345. package/src/data-display/line-comment/line-comment.tsx +308 -0
  346. package/src/data-display/project-avatar/project-avatar.css +132 -0
  347. package/src/data-display/project-avatar/project-avatar.tsx +66 -0
  348. package/src/feedback/loader/loader.css +32 -0
  349. package/src/feedback/loader/loader.tsx +31 -0
  350. package/src/feedback/progress-circle/progress-circle.css +28 -0
  351. package/src/feedback/progress-circle/progress-circle.tsx +64 -0
  352. package/src/feedback/toast/toast.css +225 -0
  353. package/src/feedback/toast/toast.tsx +283 -0
  354. package/src/forms/checkbox/checkbox.css +125 -0
  355. package/src/forms/checkbox/checkbox.tsx +43 -0
  356. package/src/forms/field/field.css +94 -0
  357. package/src/forms/field/field.tsx +263 -0
  358. package/src/forms/inline-input/inline-input.css +17 -0
  359. package/src/forms/inline-input/inline-input.tsx +22 -0
  360. package/src/forms/radio/radio.css +202 -0
  361. package/src/forms/radio/radio.tsx +82 -0
  362. package/src/forms/select/select.css +290 -0
  363. package/src/forms/select/select.tsx +219 -0
  364. package/src/forms/switch/switch.css +272 -0
  365. package/src/forms/switch/switch.tsx +34 -0
  366. package/src/forms/text-input/text-input.css +181 -0
  367. package/src/forms/text-input/text-input.tsx +99 -0
  368. package/src/forms/textarea/textarea.css +78 -0
  369. package/src/forms/textarea/textarea.tsx +31 -0
  370. package/src/hooks/create-auto-scroll.tsx +257 -0
  371. package/src/hooks/index.ts +2 -0
  372. package/src/hooks/use-filtered-list.tsx +134 -0
  373. package/src/i18n/am.ts +194 -0
  374. package/src/i18n/ar.ts +231 -0
  375. package/src/i18n/az.ts +195 -0
  376. package/src/i18n/bg.ts +195 -0
  377. package/src/i18n/bn.ts +197 -0
  378. package/src/i18n/br.ts +219 -0
  379. package/src/i18n/bs.ts +223 -0
  380. package/src/i18n/ca.ts +199 -0
  381. package/src/i18n/cs.ts +203 -0
  382. package/src/i18n/da.ts +214 -0
  383. package/src/i18n/de.ts +219 -0
  384. package/src/i18n/dv.ts +196 -0
  385. package/src/i18n/dz.ts +197 -0
  386. package/src/i18n/el.ts +195 -0
  387. package/src/i18n/en.ts +276 -0
  388. package/src/i18n/es.ts +219 -0
  389. package/src/i18n/et.ts +195 -0
  390. package/src/i18n/fa.ts +195 -0
  391. package/src/i18n/fi.ts +195 -0
  392. package/src/i18n/fo.ts +195 -0
  393. package/src/i18n/fr.ts +221 -0
  394. package/src/i18n/he.ts +199 -0
  395. package/src/i18n/hi.ts +197 -0
  396. package/src/i18n/hr.ts +200 -0
  397. package/src/i18n/hu.ts +197 -0
  398. package/src/i18n/hy.ts +195 -0
  399. package/src/i18n/id.ts +217 -0
  400. package/src/i18n/is.ts +195 -0
  401. package/src/i18n/it.ts +200 -0
  402. package/src/i18n/ja.ts +214 -0
  403. package/src/i18n/ka.ts +195 -0
  404. package/src/i18n/km.ts +196 -0
  405. package/src/i18n/ko.ts +216 -0
  406. package/src/i18n/lo.ts +195 -0
  407. package/src/i18n/lt.ts +203 -0
  408. package/src/i18n/lv.ts +199 -0
  409. package/src/i18n/mk.ts +195 -0
  410. package/src/i18n/mn.ts +195 -0
  411. package/src/i18n/ms.ts +195 -0
  412. package/src/i18n/my.ts +196 -0
  413. package/src/i18n/ne.ts +197 -0
  414. package/src/i18n/nl.ts +195 -0
  415. package/src/i18n/no.ts +219 -0
  416. package/src/i18n/pa.ts +196 -0
  417. package/src/i18n/pl.ts +223 -0
  418. package/src/i18n/ro.ts +199 -0
  419. package/src/i18n/ru.ts +222 -0
  420. package/src/i18n/si.ts +195 -0
  421. package/src/i18n/sk.ts +203 -0
  422. package/src/i18n/sl.ts +204 -0
  423. package/src/i18n/sq.ts +195 -0
  424. package/src/i18n/sr.ts +200 -0
  425. package/src/i18n/sv.ts +195 -0
  426. package/src/i18n/tg.ts +195 -0
  427. package/src/i18n/th.ts +215 -0
  428. package/src/i18n/tk.ts +195 -0
  429. package/src/i18n/tr.ts +221 -0
  430. package/src/i18n/uk.ts +226 -0
  431. package/src/i18n/ur.ts +196 -0
  432. package/src/i18n/uz.ts +198 -0
  433. package/src/i18n/vi.ts +195 -0
  434. package/src/i18n/zh.ts +217 -0
  435. package/src/i18n/zht.ts +217 -0
  436. package/src/icons/icon/additional-icons.ts +115 -0
  437. package/src/icons/icon/icon.css +3 -0
  438. package/src/icons/icon/icon.tsx +305 -0
  439. package/src/layout/divider/divider.css +11 -0
  440. package/src/layout/divider/divider.tsx +20 -0
  441. package/src/navigation/menu/menu.css +311 -0
  442. package/src/navigation/menu/menu.tsx +289 -0
  443. package/src/navigation/segmented-control/segmented-control.css +80 -0
  444. package/src/navigation/segmented-control/segmented-control.tsx +209 -0
  445. package/src/navigation/tab-state-indicator.tsx +37 -0
  446. package/src/navigation/tabs/tabs-current.css +239 -0
  447. package/src/navigation/tabs/tabs.css +710 -0
  448. package/src/navigation/tabs/tabs.tsx +194 -0
  449. package/src/overlays/dialog/dialog.css +180 -0
  450. package/src/overlays/dialog/dialog.tsx +115 -0
  451. package/src/overlays/tooltip/tooltip.css +102 -0
  452. package/src/overlays/tooltip/tooltip.tsx +154 -0
  453. package/src/storybook/fixtures.ts +51 -0
  454. package/src/storybook/scaffold.tsx +62 -0
  455. package/src/styles/animations.css +141 -0
  456. package/src/styles/base.css +409 -0
  457. package/src/styles/colors.css +772 -0
  458. package/src/styles/file-tree.css +202 -0
  459. package/src/styles/index.css +37 -0
  460. package/src/styles/tailwind/colors.css +288 -0
  461. package/src/styles/tailwind/index.css +95 -0
  462. package/src/styles/tailwind/utilities.css +131 -0
  463. package/src/styles/theme.css +631 -0
  464. package/src/styles/tokens/colors.css +172 -0
  465. package/src/styles/tokens/index.css +2 -0
  466. package/src/styles/tokens/theme.css +510 -0
  467. package/src/styles/utilities.css +118 -0
  468. package/src/theme/color.ts +299 -0
  469. package/src/theme/context.tsx +381 -0
  470. package/src/theme/default-themes.ts +116 -0
  471. package/src/theme/index.ts +78 -0
  472. package/src/theme/loader.ts +112 -0
  473. package/src/theme/resolve.ts +540 -0
  474. package/src/theme/themes/amoled.json +49 -0
  475. package/src/theme/themes/aura.json +51 -0
  476. package/src/theme/themes/ayu.json +51 -0
  477. package/src/theme/themes/carbonfox.json +53 -0
  478. package/src/theme/themes/catppuccin-frappe.json +85 -0
  479. package/src/theme/themes/catppuccin-macchiato.json +85 -0
  480. package/src/theme/themes/catppuccin.json +45 -0
  481. package/src/theme/themes/cobalt2.json +87 -0
  482. package/src/theme/themes/cursor.json +91 -0
  483. package/src/theme/themes/dracula.json +49 -0
  484. package/src/theme/themes/everforest.json +89 -0
  485. package/src/theme/themes/flexoki.json +86 -0
  486. package/src/theme/themes/github.json +85 -0
  487. package/src/theme/themes/gruvbox.json +45 -0
  488. package/src/theme/themes/kanagawa.json +89 -0
  489. package/src/theme/themes/lucent-orng.json +87 -0
  490. package/src/theme/themes/material.json +87 -0
  491. package/src/theme/themes/matrix.json +113 -0
  492. package/src/theme/themes/mercury.json +86 -0
  493. package/src/theme/themes/monokai.json +49 -0
  494. package/src/theme/themes/nightowl.json +46 -0
  495. package/src/theme/themes/nord.json +46 -0
  496. package/src/theme/themes/oc-2.json +507 -0
  497. package/src/theme/themes/one-dark.json +89 -0
  498. package/src/theme/themes/onedarkpro.json +45 -0
  499. package/src/theme/themes/opencode.json +89 -0
  500. package/src/theme/themes/orng.json +87 -0
  501. package/src/theme/themes/osaka-jade.json +88 -0
  502. package/src/theme/themes/palenight.json +85 -0
  503. package/src/theme/themes/rosepine.json +85 -0
  504. package/src/theme/themes/shadesofpurple.json +51 -0
  505. package/src/theme/themes/solarized.json +49 -0
  506. package/src/theme/themes/synthwave84.json +87 -0
  507. package/src/theme/themes/tokyonight.json +47 -0
  508. package/src/theme/themes/vercel.json +90 -0
  509. package/src/theme/themes/vesper.json +51 -0
  510. package/src/theme/themes/zenburn.json +87 -0
  511. package/src/theme/types.ts +75 -0
  512. package/src/theme/v2/avatar.ts +48 -0
  513. package/src/theme/v2/default-primitives.ts +114 -0
  514. package/src/theme/v2/foreground.ts +61 -0
  515. package/src/theme/v2/mapping.ts +176 -0
  516. package/src/theme/v2/resolve.ts +153 -0
  517. package/src/typography/text-shimmer/text-shimmer.css +120 -0
  518. package/src/typography/text-shimmer/text-shimmer.tsx +63 -0
  519. package/src/typography/wordmark/wordmark.tsx +39 -0
  520. package/README.md +0 -5
@@ -0,0 +1,257 @@
1
+ import { createEffect, on, onCleanup } from "solid-js"
2
+ import { createStore } from "solid-js/store"
3
+ import { createEventListener } from "@solid-primitives/event-listener"
4
+ import { createResizeObserver } from "@solid-primitives/resize-observer"
5
+
6
+ export interface AutoScrollOptions {
7
+ working: () => boolean
8
+ onUserInteracted?: () => void
9
+ overflowAnchor?: "none" | "auto" | "dynamic"
10
+ bottomThreshold?: number
11
+ }
12
+
13
+ export function createAutoScroll(options: AutoScrollOptions) {
14
+ let settling = false
15
+ let settleTimer: ReturnType<typeof setTimeout> | undefined
16
+ let autoTimer: ReturnType<typeof setTimeout> | undefined
17
+ let auto: { top: number; time: number } | undefined
18
+
19
+ const threshold = () => options.bottomThreshold ?? 10
20
+
21
+ const [store, setStore] = createStore({
22
+ contentRef: undefined as HTMLElement | undefined,
23
+ scrollRef: undefined as HTMLElement | undefined,
24
+ userScrolled: false,
25
+ })
26
+
27
+ const active = () => options.working() || settling
28
+
29
+ const distanceFromBottom = (el: HTMLElement) => {
30
+ return el.scrollHeight - el.clientHeight - el.scrollTop
31
+ }
32
+
33
+ const canScroll = (el: HTMLElement) => {
34
+ return el.scrollHeight - el.clientHeight > 1
35
+ }
36
+
37
+ // Browsers can dispatch scroll events asynchronously. If new content arrives
38
+ // between us calling `scrollTo()` and the subsequent `scroll` event firing,
39
+ // the handler can see a non-zero `distanceFromBottom` and incorrectly assume
40
+ // the user scrolled.
41
+ const markAuto = (el: HTMLElement) => {
42
+ auto = {
43
+ top: Math.max(0, el.scrollHeight - el.clientHeight),
44
+ time: Date.now(),
45
+ }
46
+
47
+ if (autoTimer) clearTimeout(autoTimer)
48
+ autoTimer = setTimeout(() => {
49
+ auto = undefined
50
+ autoTimer = undefined
51
+ }, 1500)
52
+ }
53
+
54
+ const isAuto = (el: HTMLElement) => {
55
+ const a = auto
56
+ if (!a) return false
57
+
58
+ if (Date.now() - a.time > 1500) {
59
+ auto = undefined
60
+ return false
61
+ }
62
+
63
+ return Math.abs(el.scrollTop - a.top) < 2
64
+ }
65
+
66
+ const scrollToBottomNow = (behavior: ScrollBehavior) => {
67
+ const el = store.scrollRef
68
+ if (!el) return
69
+ markAuto(el)
70
+ if (behavior === "smooth") {
71
+ el.scrollTo({ top: el.scrollHeight, behavior })
72
+ return
73
+ }
74
+
75
+ // `scrollTop` assignment bypasses any CSS `scroll-behavior: smooth`.
76
+ el.scrollTop = el.scrollHeight
77
+ }
78
+
79
+ const scrollToBottom = (force: boolean) => {
80
+ if (!force && !active()) return
81
+
82
+ if (force && store.userScrolled) setStore("userScrolled", false)
83
+
84
+ const el = store.scrollRef
85
+ if (!el) return
86
+
87
+ if (!force && store.userScrolled) return
88
+
89
+ const distance = distanceFromBottom(el)
90
+ if (distance < 2) {
91
+ markAuto(el)
92
+ return
93
+ }
94
+
95
+ // For auto-following content we prefer immediate updates to avoid
96
+ // visible "catch up" animations while content is still settling.
97
+ scrollToBottomNow("auto")
98
+ }
99
+
100
+ const stop = () => {
101
+ const el = store.scrollRef
102
+ if (!el) return
103
+ if (!canScroll(el)) {
104
+ if (store.userScrolled) setStore("userScrolled", false)
105
+ return
106
+ }
107
+ if (store.userScrolled) return
108
+
109
+ setStore("userScrolled", true)
110
+ options.onUserInteracted?.()
111
+ }
112
+
113
+ const handleWheel = (e: WheelEvent) => {
114
+ if (e.deltaY >= 0) return
115
+ // If the user is scrolling within a nested scrollable region (tool output,
116
+ // code block, etc), don't treat it as leaving the "follow bottom" mode.
117
+ // Those regions opt in via `data-scrollable`.
118
+ const el = store.scrollRef
119
+ const target = e.target instanceof Element ? e.target : undefined
120
+ const nested = target?.closest("[data-scrollable]")
121
+ if (el && nested && nested !== el) return
122
+ stop()
123
+ }
124
+
125
+ const handleScroll = () => {
126
+ const el = store.scrollRef
127
+ if (!el) return
128
+
129
+ if (!canScroll(el)) {
130
+ if (store.userScrolled) setStore("userScrolled", false)
131
+ return
132
+ }
133
+
134
+ if (distanceFromBottom(el) < threshold()) {
135
+ if (store.userScrolled) setStore("userScrolled", false)
136
+ return
137
+ }
138
+
139
+ // Ignore scroll events triggered by our own scrollToBottom calls.
140
+ if (!store.userScrolled && isAuto(el)) {
141
+ scrollToBottom(false)
142
+ return
143
+ }
144
+
145
+ stop()
146
+ }
147
+
148
+ const handleInteraction = () => {
149
+ if (!active()) return
150
+ const selection = window.getSelection()
151
+ if (selection && selection.toString().length > 0) {
152
+ stop()
153
+ }
154
+ }
155
+
156
+ const updateOverflowAnchor = (el: HTMLElement) => {
157
+ const mode = options.overflowAnchor ?? "dynamic"
158
+
159
+ if (mode === "none") {
160
+ el.style.overflowAnchor = "none"
161
+ return
162
+ }
163
+
164
+ if (mode === "auto") {
165
+ el.style.overflowAnchor = "auto"
166
+ return
167
+ }
168
+
169
+ el.style.overflowAnchor = store.userScrolled ? "auto" : "none"
170
+ }
171
+
172
+ createResizeObserver(
173
+ () => store.contentRef,
174
+ () => {
175
+ const el = store.scrollRef
176
+ if (el && !canScroll(el)) {
177
+ if (store.userScrolled) setStore("userScrolled", false)
178
+ return
179
+ }
180
+ if (!active()) return
181
+ if (store.userScrolled) return
182
+ // ResizeObserver fires after layout, before paint.
183
+ // Keep the bottom locked in the same frame to avoid visible
184
+ // "jump up then catch up" artifacts while streaming content.
185
+ scrollToBottom(false)
186
+ },
187
+ )
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
+
209
+ createEffect(
210
+ on(options.working, (working: boolean) => {
211
+ settling = false
212
+ if (settleTimer) clearTimeout(settleTimer)
213
+ settleTimer = undefined
214
+
215
+ if (working) {
216
+ if (!store.userScrolled) scrollToBottom(true)
217
+ return
218
+ }
219
+
220
+ settling = true
221
+ settleTimer = setTimeout(() => {
222
+ settling = false
223
+ }, 300)
224
+ }),
225
+ )
226
+
227
+ createEffect(() => {
228
+ // Track `userScrolled` even before `scrollRef` is attached, so we can
229
+ // update overflow anchoring once the element exists.
230
+ store.userScrolled
231
+ const el = store.scrollRef
232
+ if (!el) return
233
+ updateOverflowAnchor(el)
234
+ })
235
+
236
+ createEventListener(() => store.scrollRef, "wheel", handleWheel, { passive: true })
237
+
238
+ onCleanup(() => {
239
+ if (settleTimer) clearTimeout(settleTimer)
240
+ if (autoTimer) clearTimeout(autoTimer)
241
+ })
242
+
243
+ return {
244
+ scrollRef: (el: HTMLElement | undefined) => setStore("scrollRef", el),
245
+ contentRef: (el: HTMLElement | undefined) => setStore("contentRef", el),
246
+ handleScroll,
247
+ handleInteraction,
248
+ pause: stop,
249
+ resume: () => {
250
+ if (store.userScrolled) setStore("userScrolled", false)
251
+ scrollToBottom(true)
252
+ },
253
+ scrollToBottom: () => scrollToBottom(false),
254
+ forceScrollToBottom: () => scrollToBottom(true),
255
+ userScrolled: () => store.userScrolled,
256
+ }
257
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./use-filtered-list"
2
+ export * from "./create-auto-scroll"
@@ -0,0 +1,134 @@
1
+ import fuzzysort from "fuzzysort"
2
+ import { entries, flatMap, groupBy, map, pipe } from "remeda"
3
+ import { createEffect, createMemo, createResource, on } from "solid-js"
4
+ import { createStore } from "solid-js/store"
5
+ import { createList } from "solid-list"
6
+
7
+ export interface FilteredListProps<T> {
8
+ items: T[] | ((filter: string) => T[] | Promise<T[]>)
9
+ key: (item: T) => string
10
+ filterKeys?: string[]
11
+ current?: T
12
+ groupBy?: (x: T) => string
13
+ sortBy?: (a: T, b: T) => number
14
+ sortGroupsBy?: (a: { category: string; items: T[] }, b: { category: string; items: T[] }) => number
15
+ skipFilter?: (item: T) => boolean
16
+ onSelect?: (value: T | undefined, index: number) => void
17
+ noInitialSelection?: boolean
18
+ }
19
+
20
+ export function useFilteredList<T>(props: FilteredListProps<T>) {
21
+ const [store, setStore] = createStore<{ filter: string }>({ filter: "" })
22
+
23
+ type Group = { category: string; items: [T, ...T[]] }
24
+ const empty: Group[] = []
25
+
26
+ const [grouped, { refetch }] = createResource(
27
+ () => ({
28
+ filter: store.filter,
29
+ items: typeof props.items === "function" ? props.items(store.filter) : props.items,
30
+ }),
31
+ async ({ filter, items }) => {
32
+ const query = filter ?? ""
33
+ const needle = query.toLowerCase()
34
+ const all = (await Promise.resolve(items)) || []
35
+ const result = pipe(
36
+ all,
37
+ (x) => {
38
+ if (!needle) return x
39
+ const skipFilter = props.skipFilter
40
+ const filterable = skipFilter ? x.filter((item) => !skipFilter(item)) : x
41
+ const skipped = skipFilter ? x.filter(skipFilter) : []
42
+ const filtered =
43
+ !props.filterKeys && Array.isArray(filterable) && filterable.every((e) => typeof e === "string")
44
+ ? (fuzzysort.go(needle, filterable).map((x) => x.target) as T[])
45
+ : fuzzysort.go(needle, filterable, { keys: props.filterKeys! }).map((x) => x.obj)
46
+ return skipped.length ? [...filtered, ...skipped] : filtered
47
+ },
48
+ groupBy((x) => (props.groupBy ? props.groupBy(x) : "")),
49
+ entries(),
50
+ map(([k, v]) => ({ category: k, items: props.sortBy ? v.sort(props.sortBy) : v })),
51
+ (groups) => (props.sortGroupsBy ? groups.sort(props.sortGroupsBy) : groups),
52
+ )
53
+ return result
54
+ },
55
+ { initialValue: empty },
56
+ )
57
+
58
+ const flat = createMemo(() => {
59
+ return pipe(
60
+ grouped.latest || [],
61
+ flatMap((x) => x.items),
62
+ )
63
+ })
64
+
65
+ function initialActive() {
66
+ if (props.noInitialSelection) return ""
67
+ if (props.current) return props.key(props.current)
68
+
69
+ const items = flat()
70
+ if (items.length === 0) return ""
71
+ return props.key(items[0])
72
+ }
73
+
74
+ const list = createList({
75
+ items: () => flat().map(props.key),
76
+ initialActive: initialActive(),
77
+ loop: true,
78
+ })
79
+
80
+ const reset = () => {
81
+ if (props.noInitialSelection) {
82
+ list.setActive("")
83
+ return
84
+ }
85
+ const all = flat()
86
+ if (all.length === 0) return
87
+ list.setActive(props.key(all[0]))
88
+ }
89
+
90
+ const onKeyDown = (event: KeyboardEvent) => {
91
+ if (event.key === "Enter" && !event.isComposing) {
92
+ event.preventDefault()
93
+ const selectedIndex = flat().findIndex((x) => props.key(x) === list.active())
94
+ const selected = flat()[selectedIndex]
95
+ if (selected) props.onSelect?.(selected, selectedIndex)
96
+ } else if (event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey) {
97
+ if (event.key === "n" || event.key === "p") {
98
+ event.preventDefault()
99
+ const navEvent = new KeyboardEvent("keydown", {
100
+ key: event.key === "n" ? "ArrowDown" : "ArrowUp",
101
+ bubbles: true,
102
+ })
103
+ list.onKeyDown(navEvent)
104
+ }
105
+ } else {
106
+ // Skip list navigation for text editing shortcuts (e.g., Option+Arrow, Option+Backspace on macOS)
107
+ if (event.altKey || event.metaKey) return
108
+ list.onKeyDown(event)
109
+ }
110
+ }
111
+
112
+ createEffect(
113
+ on(grouped, () => {
114
+ reset()
115
+ }),
116
+ )
117
+
118
+ const onInput = (value: string) => {
119
+ setStore("filter", value)
120
+ }
121
+
122
+ return {
123
+ grouped,
124
+ filter: () => store.filter,
125
+ flat,
126
+ reset,
127
+ refetch,
128
+ clear: () => setStore("filter", ""),
129
+ onKeyDown,
130
+ onInput,
131
+ active: list.active,
132
+ setActive: list.setActive,
133
+ }
134
+ }
package/src/i18n/am.ts ADDED
@@ -0,0 +1,194 @@
1
+ export const dict: Record<string, string> = {
2
+ "ui.sessionReview.title": "የክፍለ ጊዜ ለውጦች",
3
+ "ui.sessionReview.title.git": "Gitይለውጣል",
4
+ "ui.sessionReview.title.branch": "ቅርንጫፍ ለውጦች",
5
+ "ui.sessionReview.title.lastTurn": "የመጨረሻው ዙር ለውጦች",
6
+ "ui.sessionReview.diffStyle.unified": "የተዋሃደ",
7
+ "ui.sessionReview.diffStyle.split": "የተከፋፈለ",
8
+ "ui.sessionReview.expandAll": "ሁሉንም ዘርጋ",
9
+ "ui.sessionReview.collapseAll": "ሁሉንም ሰብስብ",
10
+ "ui.sessionReview.change.added": "ተጨማሪ",
11
+ "ui.sessionReview.change.removed": "ተወግዷል",
12
+ "ui.sessionReview.change.modified": "የተሻሻለው",
13
+ "ui.sessionReview.image.loading": "በመጫን ላይ…",
14
+ "ui.sessionReview.image.placeholder": "ምስል",
15
+ "ui.sessionReview.largeDiff.title": "ለመሰራት በጣም ትልቅ ልዩነት",
16
+ "ui.sessionReview.largeDiff.meta": "ገደብ፡ {{limit}} መስመሮች ተለውጠዋል። የአሁኑ፡ {{current}} መስመሮች ተለውጠዋል።",
17
+ "ui.sessionReview.largeDiff.renderAnyway": "ለማንኛውም ስጥ",
18
+ "ui.sessionReviewV2.expandMode": "መዘርጋ ወይም ሰብስብ ልዩነት",
19
+ "ui.sessionReviewV2.filterFiles": "ፋይሎችን አጣራ",
20
+ "ui.sessionReviewV2.toggleSidebar": "ፋይል ዛፍን ቀይር",
21
+ "ui.sessionReviewV2.showAllLines": "ሁሉንም መስመሮች አሳይ",
22
+ "ui.sessionReviewV2.hideNonDiffLines": "ልዩ ያልሆኑ መስመሮችን ደብቅ",
23
+ "ui.sessionReviewV2.unifiedDiff": "የተዋሃደ ልዩነት",
24
+ "ui.sessionReviewV2.splitDiff": "የተከፈለ ልዩነት",
25
+ "ui.sessionReviewV2.previousFile": "የቀድሞው ፋይል",
26
+ "ui.sessionReviewV2.nextFile": "ቀጣይ ፋይል",
27
+ "ui.sessionReviewV2.diffView": "ልዩ እይታ",
28
+ "ui.sessionReviewV2.empty.noGit.title": "ምንም ክትትል የሚደረግባቸው ለውጦች የሉም",
29
+ "ui.sessionReviewV2.empty.noGit.description": "በዚህ ፕሮጀክት ላይ ለውጦችን ይከታተሉ፣ ይገምግሙ እና ይቀልብሱ",
30
+ "ui.sessionReviewV2.empty.noGit.action": "Git ማከማቻ ፍጠር",
31
+ "ui.sessionReviewV2.empty.noGit.actionLoading": "Git ማከማቻ በመፍጠር ላይ…",
32
+ "ui.sessionReviewV2.empty.changes.title": "አሁን ምንም ለውጥ የለም",
33
+ "ui.sessionReviewV2.empty.changes.description": "የፕሮጀክት ለውጦች እዚህ ይታያሉ",
34
+ "ui.sessionReview.openFile": "ክፍት ፋይል",
35
+ "ui.sessionReview.selection.line": "መስመር {{line}}",
36
+ "ui.sessionReview.selection.lines": "መስመሮች {{start}}-{{end}}",
37
+ "ui.fileMedia.kind.image": "ምስል",
38
+ "ui.fileMedia.kind.audio": "ድምጽ",
39
+ "ui.fileMedia.state.removed": "{{kind}}ፋይል ተወግዷል።",
40
+ "ui.fileMedia.state.loading": "በመጫን ላይ {{kind}}…",
41
+ "ui.fileMedia.state.error": "{{kind}}ን መጫን አልተቻለም።",
42
+ "ui.fileMedia.state.unavailable": "{{kind}} ቅድመ እይታ አይገኝም።",
43
+ "ui.fileMedia.binary.title": "ሁለትዮሽ ፋይል",
44
+ "ui.fileMedia.binary.description.path": "{{path}} ሁለትዮሽ ነው።",
45
+ "ui.fileMedia.binary.description.default": "ሁለትዮሽ ይዘት",
46
+ "ui.lineComment.label.prefix": "አስተያየት በ ላይ ",
47
+ "ui.lineComment.label.suffix": "",
48
+ "ui.lineComment.editorLabel.prefix": "በላይ አስተያየት መስጠት ",
49
+ "ui.lineComment.editorLabel.suffix": "",
50
+ "ui.lineComment.placeholder": "አስተያየት ያክሉ",
51
+ "ui.lineComment.contextPlaceholder": "ለዚህ ለውጥ አውድ ጨምር",
52
+ "ui.lineComment.submit": "አስተያየት",
53
+ "ui.lineComment.cancel": "ሰርዝ",
54
+ "ui.sessionTurn.steps.show": "ደረጃዎችን አሳይ",
55
+ "ui.sessionTurn.steps.hide": "ደረጃዎችን ደብቅ",
56
+ "ui.sessionTurn.summary.response": "ምላሽ",
57
+ "ui.sessionTurn.diff.showMore": "ተጨማሪ ለውጦችን አሳይ ({{count}})",
58
+ "ui.sessionTurn.diffs.changed.one": "{{count}}የተለወጠ ፋይል",
59
+ "ui.sessionTurn.diffs.changed.other": "{{count}}የተቀየሩ ፋይሎች",
60
+ "ui.sessionTurn.diffs.showAll": "ሁሉንም አሳይ",
61
+ "ui.sessionTurn.diffs.showLess": "ያነሰ አሳይ",
62
+ "ui.sessionTurn.diffs.more": "+{{count}} ተጨማሪ ፋይሎች",
63
+ "ui.sessionTurn.retry.retrying": "እንደገና በመሞከር ላይ",
64
+ "ui.sessionTurn.retry.inSeconds": "በ{{seconds}}ሰ",
65
+ "ui.sessionTurn.retry.attempt": "ሙከራ #{{attempt}}",
66
+ "ui.sessionTurn.retry.attemptLine": "{{line}} - ሙከራ #{{attempt}}",
67
+ "ui.sessionTurn.retry.geminiHot": "gemini አሁን በጣም ሞቃት ነው",
68
+ "ui.sessionTurn.error.freeUsageExceeded": "ነፃ አጠቃቀም ታልፏል",
69
+ "ui.sessionTurn.error.addCredits": "ክሬዲት አክል",
70
+ "dialog.usageExceeded.freeTier.title": "ነፃ ገደብ ላይ ደርሷል",
71
+ "dialog.usageExceeded.freeTier.description": "ለOpenCode Go ለምርጥ ክፍት ምንጭ ሞዴሎች ታማኝ መዳረሻ ለማግኘት ይመዝገቡ፣ ከ$5 በወር ጀምሮ።",
72
+ "dialog.usageExceeded.freeTier.actionLabel": "ለደንበኝነት ይመዝገቡ",
73
+ "dialog.usageExceeded.accountRateLimit.title": "የሂድ ገደብ ላይ ደርሷል",
74
+ "dialog.usageExceeded.accountRateLimit.description":
75
+ "የአጠቃቀም ገደብ ላይ ደርሷል። ይህን ሞዴል አሁን መጠቀሙን ለመቀጠል ካለው ቀሪ ሒሳብ መጠቀምን ያንቁ",
76
+ "dialog.usageExceeded.accountRateLimit.actionLabel": "ክፍት ቅንብሮች",
77
+ "ui.sessionTurn.status.delegating": "ሥራን በውክልና መስጠት",
78
+ "ui.sessionTurn.status.planning": "ቀጣዮቹን ደረጃዎች ማቀድ",
79
+ "ui.sessionTurn.status.gatheringContext": "ማሰስ",
80
+ "ui.sessionTurn.status.gatheredContext": "የተፈተሸ",
81
+ "ui.sessionTurn.status.searchingCodebase": "የኮድ ቤዝ ፍለጋ",
82
+ "ui.sessionTurn.status.searchingWeb": "ድሩን መፈለግ",
83
+ "ui.sessionTurn.status.makingEdits": "ማስተካከል",
84
+ "ui.sessionTurn.status.runningCommands": "አሂድ ትዕዛዞች",
85
+ "ui.sessionTurn.status.thinking": "አስተሳሰብ",
86
+ "ui.sessionTurn.status.thinkingWithTopic": "ማሰብ - {{topic}}",
87
+ "ui.sessionTurn.status.gatheringThoughts": "ሀሳቦችን መሰብሰብ",
88
+ "ui.sessionTurn.status.consideringNextSteps": "ቀጣዮቹን ደረጃዎች ከግምት ውስጥ በማስገባት",
89
+ "ui.messagePart.diagnostic.error": "ስህተት",
90
+ "ui.messagePart.title.edit": "አርትዕ",
91
+ "ui.messagePart.title.write": "ጻፍ",
92
+ "ui.messagePart.option.typeOwnAnswer": "የራስህን መልስ ተይብ",
93
+ "ui.messagePart.review.title": "መልሶችዎን ይገምግሙ",
94
+ "ui.messagePart.questions.dismissed": "ጥያቄዎች ውድቅ የተደረጉ",
95
+ "ui.messagePart.compaction": "የክፍለ ጊዜው የታመቀ",
96
+ "ui.messagePart.context.read.one": "{{count}} ማንበብ",
97
+ "ui.messagePart.context.read.other": "{{count}} ያነባል",
98
+ "ui.messagePart.context.search.one": "{{count}} ፍለጋ",
99
+ "ui.messagePart.context.search.other": "{{count}} ፍለጋዎች",
100
+ "ui.messagePart.context.list.one": "{{count}}ዝርዝር",
101
+ "ui.messagePart.context.list.other": "{{count}}ዝርዝሮች",
102
+ "ui.list.loading": "በመጫን ላይ",
103
+ "ui.list.empty": "ምንም ውጤቶች",
104
+ "ui.list.clearFilter": "ማጣሪያን አጽዳ",
105
+ "ui.list.emptyWithFilter.prefix": "ምንም ውጤቶች ለ",
106
+ "ui.list.emptyWithFilter.suffix": "",
107
+ "ui.fileSearch.placeholder": "አግኝ",
108
+ "ui.fileSearch.previousMatch": "የቀድሞ ግጥሚያ",
109
+ "ui.fileSearch.nextMatch": "ቀጣይ ተዛማጅ",
110
+ "ui.fileSearch.close": "ፍለጋን ዝጋ",
111
+ "ui.messageNav.newMessage": "አዲስ መልእክት",
112
+ "ui.promptInput.noMatchingItems": "ምንም የሚዛመዱ ነገሮች የሉም",
113
+ "ui.promptInput.commands": "ትዕዛዞች",
114
+ "ui.promptInput.dropFiles": "ለማያያዝ ፋይሎችን ጣል",
115
+ "ui.promptInput.removeAttachment": "ዓባሪን አስወግድ",
116
+ "ui.promptInput.label": "ፕሮምፕት",
117
+ "ui.promptInput.placeholder.shell": "የሼል ትዕዛዝ አስገባ…",
118
+ "ui.promptInput.placeholder.normal": "ማንኛውንም ነገር ይጠይቁ፣ {{slash}} ለትእዛዞች፣ {{at}} ለአውድ…",
119
+ "ui.promptInput.add": "ምስሎችን እና ፋይሎችን አክል",
120
+ "ui.promptInput.attachments": "ምስሎች እና ፋይሎች",
121
+ "ui.promptInput.context": "አውድ",
122
+ "ui.promptInput.shell": "የሼል ትዕዛዝ",
123
+ "ui.promptInput.chooseAgent": "ወኪሉን ይምረጡ",
124
+ "ui.promptInput.chooseModel": "ሞዴል ምረጥ",
125
+ "ui.promptInput.chooseVariant": "የሞዴል ልዩነትን ምረጥ",
126
+ "ui.promptInput.send": "ላክ",
127
+ "ui.promptInput.stop": "አቁም",
128
+ "ui.tabs.close": "ትርፉን ዝጋ",
129
+ "ui.textField.copyToClipboard": "ወደ ቅንጥብ ሰሌዳ ቅዳ",
130
+ "ui.textField.copyLink": "መገልበጥ አገናኝ",
131
+ "ui.textField.copied": "የተገለበጠ",
132
+ "ui.imagePreview.alt": "የምስል ቅድመ እይታ",
133
+ "ui.scrollView.ariaLabel": "መጠቅለል የሚችል ይዘት",
134
+ "ui.tool.read": "አንብብ",
135
+ "ui.tool.loaded": "ተጭኗል",
136
+ "ui.tool.list": "ዝርዝር",
137
+ "ui.tool.glob": "Glob",
138
+ "ui.tool.grep": "Grep",
139
+ "ui.tool.task": "ተግባር",
140
+ "ui.tool.webfetch": "Webfetch",
141
+ "ui.tool.websearch": "ድር ፍለጋ",
142
+ "ui.tool.websearch.provider": "{{provider}}ድር ፍለጋ",
143
+ "ui.tool.shell": "ሼል",
144
+ "ui.tool.patch": "Patch",
145
+ "ui.tool.questions": "ጥያቄዎች",
146
+ "ui.tool.questions.numbered": "ጥያቄዎች {{number}}",
147
+ "ui.tool.agent": "{{type}} ወኪል",
148
+ "ui.tool.agent.default": "ወኪል",
149
+ "ui.tool.skill": "ክህሎት",
150
+ "ui.basicTool.called": "የተጠራው `{{tool}}`",
151
+ "ui.toolErrorCard.failed": "አልተሳካም",
152
+ "ui.toolErrorCard.copyError": "ስህተት ቅጂ",
153
+ "ui.common.file.one": "ፋይል",
154
+ "ui.common.file.other": "ፋይሎች",
155
+ "ui.common.question.one": "ጥያቄ",
156
+ "ui.common.question.other": "ጥያቄዎች",
157
+ "ui.common.add": "አክል",
158
+ "ui.common.clear": "ግልጽ",
159
+ "ui.common.file": "ፋይል",
160
+ "ui.common.back": "ተመለስ",
161
+ "ui.common.cancel": "ሰርዝ",
162
+ "ui.common.confirm": "አረጋግጥ",
163
+ "ui.common.dismiss": "አሰናብት",
164
+ "ui.common.close": "ዝጋ",
165
+ "ui.common.next": "ቀጣይ",
166
+ "ui.common.submit": "አስረክብ",
167
+ "ui.common.showMore": "ተጨማሪ አሳይ",
168
+ "ui.permission.deny": "ክድ",
169
+ "ui.permission.allowAlways": "ሁልጊዜ ፍቀድ",
170
+ "ui.permission.allowOnce": "አንድ ጊዜ ፍቀድ",
171
+ "ui.message.expand": "መልዕክት ዘርጋ",
172
+ "ui.message.collapse": "መልዕክት ሰብስብ",
173
+ "ui.message.copy": "ኮፒ",
174
+ "ui.message.copyMessage": "መልዕክት ቅዳ",
175
+ "ui.message.forkMessage": "ወደ አዲስ ክፍለ ጊዜ ቅርንጫፍ ፍጠር",
176
+ "ui.message.revertMessage": "መልዕክት ቀይር",
177
+ "ui.message.copyResponse": "መልስ ቅጂ",
178
+ "ui.message.copied": "የተገለበጠ",
179
+ "ui.message.duration.seconds": "{{count}} ሰ",
180
+ "ui.message.duration.minutesSeconds": "{{minutes}} ደ {{seconds}} ሰ",
181
+ "ui.message.interrupted": "የተቋረጠ",
182
+ "ui.message.queued": "ወረፋ ላይ",
183
+ "ui.message.attachment.alt": "አባሪ",
184
+ "ui.patch.action.deleted": "የተሰረዘ",
185
+ "ui.patch.action.created": "የተፈጠረ",
186
+ "ui.patch.action.moved": "ተንቀሳቅሷል",
187
+ "ui.patch.action.patched": "የተጣበቁ",
188
+ "ui.question.subtitle.answered": "{{count}} መልስ",
189
+ "ui.question.answer.none": "(መልስ የለም)",
190
+ "ui.question.review.notAnswered": "(አልተመለሰም)",
191
+ "ui.question.multiHint": "የሚመለከተውን ሁሉንም መልሶች ይምረጡ",
192
+ "ui.question.singleHint": "አንድ መልስ ምረጥ",
193
+ "ui.question.custom.placeholder": "መልስዎን ይተይቡ…",
194
+ }