@opencode-ai/ui 0.0.0-dev-202609040530 → 0.0.0-dev-19079

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/dist/actions/button/button.d.ts +10 -0
  2. package/dist/actions/icon-button/icon-button.d.ts +11 -0
  3. package/dist/actions/split-button/split-button.d.ts +5 -0
  4. package/dist/components/card.d.ts +1 -1
  5. package/dist/components/list.d.ts +1 -1
  6. package/dist/components/scroll-view.d.ts +3 -3
  7. package/dist/context/i18n.d.ts +10 -7
  8. package/dist/context/marked-base.d.ts +3 -0
  9. package/dist/context/marked-parser.d.ts +1 -2
  10. package/dist/{components → data-display/accordion}/accordion.d.ts +6 -6
  11. package/dist/{v2/components/avatar-v2.d.ts → data-display/avatar/avatar.d.ts} +1 -1
  12. package/dist/data-display/badge/badge.d.ts +7 -0
  13. package/dist/{components → data-display/diff-changes}/diff-changes.d.ts +2 -1
  14. package/dist/data-display/keybind/keybind.d.ts +7 -0
  15. package/dist/{v2/components/line-comment-v2.d.ts → data-display/line-comment/line-comment.d.ts} +9 -9
  16. package/dist/{v2/components/project-avatar-v2.d.ts → data-display/project-avatar/project-avatar.d.ts} +1 -1
  17. package/dist/feedback/loader/loader.d.ts +3 -0
  18. package/dist/{components → feedback/progress-circle}/progress-circle.d.ts +2 -0
  19. package/dist/feedback/toast/toast.d.ts +57 -0
  20. package/dist/{components → forms/checkbox}/checkbox.d.ts +2 -2
  21. package/dist/{v2/components/field-v2.d.ts → forms/field/field.d.ts} +4 -10
  22. package/dist/forms/radio/radio.d.ts +16 -0
  23. package/dist/{v2/components/select-v2.d.ts → forms/select/select.d.ts} +4 -6
  24. package/dist/{components → forms/switch}/switch.d.ts +4 -2
  25. package/dist/{v2/components/text-input-v2.d.ts → forms/text-input/text-input.d.ts} +3 -3
  26. package/dist/forms/textarea/textarea.d.ts +7 -0
  27. package/dist/hooks/use-filtered-list.d.ts +9 -0
  28. package/dist/i18n/ar.d.ts +0 -2
  29. package/dist/i18n/bg.d.ts +0 -2
  30. package/dist/i18n/br.d.ts +0 -2
  31. package/dist/i18n/bs.d.ts +0 -2
  32. package/dist/i18n/da.d.ts +0 -2
  33. package/dist/i18n/de.d.ts +0 -2
  34. package/dist/i18n/en.d.ts +238 -1
  35. package/dist/i18n/es.d.ts +0 -2
  36. package/dist/i18n/fr.d.ts +0 -2
  37. package/dist/i18n/he.d.ts +197 -0
  38. package/dist/i18n/ja.d.ts +0 -2
  39. package/dist/i18n/km.d.ts +0 -2
  40. package/dist/i18n/ko.d.ts +0 -2
  41. package/dist/i18n/lo.d.ts +0 -2
  42. package/dist/i18n/mk.d.ts +0 -2
  43. package/dist/i18n/mn.d.ts +0 -2
  44. package/dist/i18n/my.d.ts +0 -2
  45. package/dist/i18n/pl.d.ts +0 -2
  46. package/dist/i18n/ru.d.ts +0 -2
  47. package/dist/i18n/sr.d.ts +0 -2
  48. package/dist/i18n/tg.d.ts +0 -2
  49. package/dist/i18n/th.d.ts +0 -2
  50. package/dist/i18n/tr.d.ts +0 -2
  51. package/dist/i18n/zh.d.ts +0 -2
  52. package/dist/i18n/zht.d.ts +0 -2
  53. package/dist/{components/icon.d.ts → icons/icon/additional-icons.d.ts} +8 -8
  54. package/dist/{v2/components → icons/icon}/icon.d.ts +44 -1
  55. package/dist/layout/divider/divider.d.ts +5 -0
  56. package/dist/navigation/menu/menu.d.ts +59 -0
  57. package/dist/{v2/components/segmented-control-v2.d.ts → navigation/segmented-control/segmented-control.d.ts} +5 -5
  58. package/dist/{components → navigation/tabs}/tabs.d.ts +15 -8
  59. package/dist/{v2/components/dialog-v2.d.ts → overlays/dialog/dialog.d.ts} +1 -2
  60. package/dist/overlays/tooltip/tooltip.d.ts +15 -0
  61. package/dist/{components → typography/text-shimmer}/text-shimmer.d.ts +1 -0
  62. package/dist/typography/wordmark/wordmark.d.ts +2 -0
  63. package/package.json +140 -34
  64. package/src/{v2/components/button-v2.css → actions/button/button.css} +29 -0
  65. package/src/{components → actions/button}/button.tsx +19 -11
  66. package/src/actions/icon-button/icon-button.tsx +32 -0
  67. package/src/{v2/components/split-button-v2.css → actions/split-button/split-button.css} +2 -6
  68. package/src/{v2/components/split-button-v2.tsx → actions/split-button/split-button.tsx} +4 -4
  69. package/src/components/animated-number.css +29 -11
  70. package/src/components/animated-number.tsx +2 -2
  71. package/src/components/card.css +2 -23
  72. package/src/components/card.tsx +4 -4
  73. package/src/components/collapsible.tsx +2 -2
  74. package/src/components/dock-surface.css +2 -9
  75. package/src/components/image-preview.tsx +3 -2
  76. package/src/components/list.css +5 -5
  77. package/src/components/list.tsx +7 -5
  78. package/src/components/popover.tsx +3 -2
  79. package/src/components/scroll-view.tsx +5 -20
  80. package/src/components/sticky-accordion-header.tsx +1 -1
  81. package/src/components/text-field.tsx +12 -4
  82. package/src/context/dialog.tsx +1 -0
  83. package/src/context/i18n.tsx +17 -14
  84. package/src/context/marked-base.tsx +27 -0
  85. package/src/context/marked-parser.tsx +3 -13
  86. package/src/{components → data-display/accordion}/accordion.css +5 -31
  87. package/src/{components → data-display/accordion}/accordion.tsx +14 -14
  88. package/src/{v2/components/avatar-v2.tsx → data-display/avatar/avatar.tsx} +1 -1
  89. package/src/{v2/components/badge-v2.css → data-display/badge/badge.css} +19 -0
  90. package/src/{v2/components/badge-v2.tsx → data-display/badge/badge.tsx} +6 -4
  91. package/src/{components → data-display/diff-changes}/diff-changes.css +22 -19
  92. package/src/{v2/components/diff-changes-v2.tsx → data-display/diff-changes/diff-changes.tsx} +7 -2
  93. package/src/{v2/components/keybind-v2.css → data-display/keybind/keybind.css} +1 -1
  94. package/src/{v2/components/keybind-v2.tsx → data-display/keybind/keybind.tsx} +3 -3
  95. package/src/{v2/components/line-comment-v2.css → data-display/line-comment/line-comment.css} +4 -4
  96. package/src/{v2/components/line-comment-v2.tsx → data-display/line-comment/line-comment.tsx} +17 -15
  97. package/src/{v2/components/project-avatar-v2.tsx → data-display/project-avatar/project-avatar.tsx} +1 -1
  98. package/src/{v2/components/loader-v2.tsx → feedback/loader/loader.tsx} +2 -2
  99. package/src/feedback/progress-circle/progress-circle.css +28 -0
  100. package/src/feedback/progress-circle/progress-circle.tsx +64 -0
  101. package/src/{v2/components/toast-v2.tsx → feedback/toast/toast.tsx} +60 -58
  102. package/src/{components → forms/checkbox}/checkbox.css +1 -7
  103. package/src/{components → forms/checkbox}/checkbox.tsx +13 -13
  104. package/src/{v2/components/field-v2.css → forms/field/field.css} +1 -1
  105. package/src/{v2/components/field-v2.tsx → forms/field/field.tsx} +9 -11
  106. package/src/{v2/components/radio-v2.tsx → forms/radio/radio.tsx} +30 -20
  107. package/src/{v2/components/select-v2.css → forms/select/select.css} +2 -8
  108. package/src/{v2/components/select-v2.tsx → forms/select/select.tsx} +40 -32
  109. package/src/{v2/components/switch-v2.css → forms/switch/switch.css} +110 -0
  110. package/src/forms/switch/switch.tsx +34 -0
  111. package/src/{v2/components/text-input-v2.css → forms/text-input/text-input.css} +3 -3
  112. package/src/{v2/components/text-input-v2.tsx → forms/text-input/text-input.tsx} +4 -4
  113. package/src/{v2/components/textarea-v2.tsx → forms/textarea/textarea.tsx} +3 -3
  114. package/src/hooks/create-auto-scroll.tsx +20 -0
  115. package/src/i18n/am.ts +7 -9
  116. package/src/i18n/ar.ts +7 -9
  117. package/src/i18n/az.ts +7 -9
  118. package/src/i18n/bg.ts +7 -9
  119. package/src/i18n/bn.ts +7 -9
  120. package/src/i18n/br.ts +7 -9
  121. package/src/i18n/bs.ts +7 -9
  122. package/src/i18n/ca.ts +7 -9
  123. package/src/i18n/cs.ts +7 -9
  124. package/src/i18n/da.ts +7 -9
  125. package/src/i18n/de.ts +1 -3
  126. package/src/i18n/dv.ts +7 -9
  127. package/src/i18n/dz.ts +5 -7
  128. package/src/i18n/el.ts +7 -9
  129. package/src/i18n/en.ts +54 -11
  130. package/src/i18n/es.ts +6 -8
  131. package/src/i18n/et.ts +7 -9
  132. package/src/i18n/fa.ts +7 -9
  133. package/src/i18n/fi.ts +7 -9
  134. package/src/i18n/fo.ts +7 -9
  135. package/src/i18n/fr.ts +6 -8
  136. package/src/i18n/he.ts +199 -0
  137. package/src/i18n/hi.ts +7 -9
  138. package/src/i18n/hr.ts +7 -9
  139. package/src/i18n/hu.ts +7 -9
  140. package/src/i18n/hy.ts +7 -9
  141. package/src/i18n/id.ts +7 -9
  142. package/src/i18n/is.ts +7 -9
  143. package/src/i18n/it.ts +7 -9
  144. package/src/i18n/ja.ts +7 -9
  145. package/src/i18n/ka.ts +7 -9
  146. package/src/i18n/km.ts +7 -9
  147. package/src/i18n/ko.ts +7 -9
  148. package/src/i18n/lo.ts +7 -9
  149. package/src/i18n/lt.ts +7 -9
  150. package/src/i18n/lv.ts +7 -9
  151. package/src/i18n/mk.ts +7 -9
  152. package/src/i18n/mn.ts +7 -9
  153. package/src/i18n/ms.ts +7 -9
  154. package/src/i18n/my.ts +7 -9
  155. package/src/i18n/ne.ts +7 -9
  156. package/src/i18n/nl.ts +7 -9
  157. package/src/i18n/no.ts +7 -9
  158. package/src/i18n/pa.ts +7 -9
  159. package/src/i18n/pl.ts +7 -9
  160. package/src/i18n/ro.ts +7 -9
  161. package/src/i18n/ru.ts +7 -9
  162. package/src/i18n/si.ts +7 -9
  163. package/src/i18n/sk.ts +7 -9
  164. package/src/i18n/sl.ts +7 -9
  165. package/src/i18n/sq.ts +7 -9
  166. package/src/i18n/sr.ts +7 -9
  167. package/src/i18n/sv.ts +7 -9
  168. package/src/i18n/tg.ts +7 -9
  169. package/src/i18n/th.ts +7 -9
  170. package/src/i18n/tk.ts +7 -9
  171. package/src/i18n/tr.ts +7 -9
  172. package/src/i18n/uk.ts +7 -9
  173. package/src/i18n/ur.ts +7 -9
  174. package/src/i18n/uz.ts +7 -9
  175. package/src/i18n/vi.ts +7 -9
  176. package/src/i18n/zh.ts +7 -9
  177. package/src/i18n/zht.ts +7 -9
  178. package/src/{components/icon.tsx → icons/icon/additional-icons.ts} +8 -74
  179. package/src/icons/icon/icon.css +3 -0
  180. package/src/{v2/components → icons/icon}/icon.tsx +80 -12
  181. package/src/{v2/components/divider-v2.tsx → layout/divider/divider.tsx} +3 -3
  182. package/src/{v2/components/menu-v2.css → navigation/menu/menu.css} +124 -2
  183. package/src/{v2/components/menu-v2.tsx → navigation/menu/menu.tsx} +96 -32
  184. package/src/{v2/components/segmented-control-v2.css → navigation/segmented-control/segmented-control.css} +1 -1
  185. package/src/{v2/components/segmented-control-v2.tsx → navigation/segmented-control/segmented-control.tsx} +9 -8
  186. package/src/{v2/components/tabs-v2.css → navigation/tabs/tabs-current.css} +25 -10
  187. package/src/{components → navigation/tabs}/tabs.css +53 -232
  188. package/src/navigation/tabs/tabs.tsx +194 -0
  189. package/src/{v2/components/dialog-v2.css → overlays/dialog/dialog.css} +3 -0
  190. package/src/{v2/components/dialog-v2.tsx → overlays/dialog/dialog.tsx} +11 -13
  191. package/src/{v2/components/tooltip-v2.css → overlays/tooltip/tooltip.css} +26 -0
  192. package/src/{v2/components/tooltip-v2.tsx → overlays/tooltip/tooltip.tsx} +24 -17
  193. package/src/styles/base.css +5 -0
  194. package/src/styles/index.css +4 -20
  195. package/src/styles/tailwind/colors.css +1 -0
  196. package/src/styles/tailwind/index.css +18 -1
  197. package/src/styles/theme.css +2 -2
  198. package/src/{v2/styles → styles/tokens}/colors.css +8 -8
  199. package/src/{v2/styles → styles/tokens}/theme.css +20 -16
  200. package/src/theme/context.tsx +19 -11
  201. package/src/theme/themes/oc-2.json +48 -19
  202. package/src/theme/v2/default-primitives.ts +8 -8
  203. package/src/theme/v2/foreground.ts +1 -0
  204. package/src/theme/v2/mapping.ts +5 -1
  205. package/src/{components → typography/text-shimmer}/text-shimmer.css +2 -1
  206. package/src/{components → typography/text-shimmer}/text-shimmer.tsx +1 -0
  207. package/src/{v2/components/wordmark-v2.tsx → typography/wordmark/wordmark.tsx} +2 -2
  208. package/dist/components/avatar.d.ts +0 -9
  209. package/dist/components/button.d.ts +0 -9
  210. package/dist/components/dialog.d.ts +0 -12
  211. package/dist/components/dropdown-menu.d.ts +0 -80
  212. package/dist/components/icon-button.d.ts +0 -10
  213. package/dist/components/keybind.d.ts +0 -6
  214. package/dist/components/radio-group.d.ts +0 -16
  215. package/dist/components/select.d.ts +0 -21
  216. package/dist/components/tag.d.ts +0 -5
  217. package/dist/components/toast.d.ts +0 -56
  218. package/dist/components/tooltip.d.ts +0 -17
  219. package/dist/v2/components/accordion-v2.d.ts +0 -26
  220. package/dist/v2/components/badge-v2.d.ts +0 -6
  221. package/dist/v2/components/button-v2.d.ts +0 -10
  222. package/dist/v2/components/checkbox-v2.d.ts +0 -10
  223. package/dist/v2/components/diff-changes-v2.d.ts +0 -11
  224. package/dist/v2/components/divider-v2.d.ts +0 -5
  225. package/dist/v2/components/icon-button-v2.d.ts +0 -11
  226. package/dist/v2/components/inline-input-v2.d.ts +0 -21
  227. package/dist/v2/components/keybind-v2.d.ts +0 -7
  228. package/dist/v2/components/loader-v2.d.ts +0 -3
  229. package/dist/v2/components/menu-v2.d.ts +0 -52
  230. package/dist/v2/components/progress-circle-v2.d.ts +0 -8
  231. package/dist/v2/components/radio-v2.d.ts +0 -16
  232. package/dist/v2/components/split-button-v2.d.ts +0 -5
  233. package/dist/v2/components/switch-v2.d.ts +0 -7
  234. package/dist/v2/components/tabs-v2.d.ts +0 -34
  235. package/dist/v2/components/text-shimmer-v2.d.ts +0 -9
  236. package/dist/v2/components/textarea-v2.d.ts +0 -7
  237. package/dist/v2/components/toast-v2.d.ts +0 -57
  238. package/dist/v2/components/tooltip-v2.d.ts +0 -13
  239. package/dist/v2/components/wordmark-v2.d.ts +0 -2
  240. package/src/components/avatar.css +0 -49
  241. package/src/components/avatar.tsx +0 -55
  242. package/src/components/button.css +0 -194
  243. package/src/components/dialog.css +0 -181
  244. package/src/components/dialog.tsx +0 -72
  245. package/src/components/diff-changes.tsx +0 -115
  246. package/src/components/dropdown-menu.css +0 -135
  247. package/src/components/dropdown-menu.tsx +0 -308
  248. package/src/components/icon-button.css +0 -181
  249. package/src/components/icon-button.tsx +0 -29
  250. package/src/components/icon.css +0 -39
  251. package/src/components/keybind.css +0 -18
  252. package/src/components/keybind.tsx +0 -20
  253. package/src/components/progress-circle.css +0 -16
  254. package/src/components/progress-circle.tsx +0 -64
  255. package/src/components/radio-group.css +0 -187
  256. package/src/components/radio-group.tsx +0 -83
  257. package/src/components/select.css +0 -201
  258. package/src/components/select.tsx +0 -174
  259. package/src/components/switch.css +0 -136
  260. package/src/components/switch.tsx +0 -29
  261. package/src/components/tabs.tsx +0 -126
  262. package/src/components/tag.css +0 -37
  263. package/src/components/tag.tsx +0 -22
  264. package/src/components/toast.css +0 -236
  265. package/src/components/toast.tsx +0 -185
  266. package/src/components/tooltip.css +0 -74
  267. package/src/components/tooltip.tsx +0 -163
  268. package/src/v2/components/accordion-v2.css +0 -139
  269. package/src/v2/components/accordion-v2.tsx +0 -86
  270. package/src/v2/components/button-v2.tsx +0 -35
  271. package/src/v2/components/checkbox-v2.css +0 -184
  272. package/src/v2/components/checkbox-v2.tsx +0 -65
  273. package/src/v2/components/diff-changes-v2.css +0 -26
  274. package/src/v2/components/icon-button-v2.tsx +0 -37
  275. package/src/v2/components/inline-input-v2.css +0 -225
  276. package/src/v2/components/inline-input-v2.tsx +0 -107
  277. package/src/v2/components/progress-circle-v2.css +0 -13
  278. package/src/v2/components/progress-circle-v2.tsx +0 -52
  279. package/src/v2/components/switch-v2.tsx +0 -28
  280. package/src/v2/components/tabs-v2.tsx +0 -149
  281. package/src/v2/components/text-shimmer-v2.css +0 -125
  282. package/src/v2/components/text-shimmer-v2.tsx +0 -63
  283. /package/dist/{components → forms/inline-input}/inline-input.d.ts +0 -0
  284. /package/dist/{v2/components → navigation}/tab-state-indicator.d.ts +0 -0
  285. /package/src/{v2/components/icon-button-v2.css → actions/icon-button/icon-button.css} +0 -0
  286. /package/src/{v2/components/avatar-v2.css → data-display/avatar/avatar.css} +0 -0
  287. /package/src/{v2/components/project-avatar-v2.css → data-display/project-avatar/project-avatar.css} +0 -0
  288. /package/src/{v2/components/loader-v2.css → feedback/loader/loader.css} +0 -0
  289. /package/src/{v2/components/toast-v2.css → feedback/toast/toast.css} +0 -0
  290. /package/src/{components → forms/inline-input}/inline-input.css +0 -0
  291. /package/src/{components → forms/inline-input}/inline-input.tsx +0 -0
  292. /package/src/{v2/components/radio-v2.css → forms/radio/radio.css} +0 -0
  293. /package/src/{v2/components/textarea-v2.css → forms/textarea/textarea.css} +0 -0
  294. /package/src/{v2/components/divider-v2.css → layout/divider/divider.css} +0 -0
  295. /package/src/{v2/components → navigation}/tab-state-indicator.tsx +0 -0
  296. /package/src/{v2/components/file-tree-v2.css → styles/file-tree.css} +0 -0
  297. /package/src/{v2/styles/tailwind.css → styles/tokens/index.css} +0 -0
@@ -0,0 +1,194 @@
1
+ import { Content, List, Root, Trigger } from "@kobalte/core/tabs"
2
+ import { createContext, Show, splitProps, useContext, type JSX } from "solid-js"
3
+ import type { Component, ComponentProps, ParentProps } from "solid-js"
4
+ import { useI18n } from "../../context/i18n"
5
+ import "./tabs-current.css"
6
+
7
+ export type TabsVariant = "panel" | "underline" | "surface" | "line" | "pill" | "settings"
8
+
9
+ export interface TabsProps extends ComponentProps<typeof Root> {
10
+ variant?: TabsVariant
11
+ orientation?: "horizontal" | "vertical"
12
+ }
13
+ export interface TabsListProps extends ComponentProps<typeof List> {}
14
+ export interface TabsTriggerProps extends ComponentProps<typeof Trigger> {
15
+ classes?: { button?: string }
16
+ closeButton?: JSX.Element
17
+ hideCloseButton?: boolean
18
+ onMiddleClick?: () => void
19
+ subtext?: JSX.Element | string
20
+ }
21
+ export interface TabsCloseButtonProps extends ComponentProps<"button"> {}
22
+ export interface TabsContentProps extends ComponentProps<typeof Content> {}
23
+
24
+ const TabsContext = createContext<{ current: () => boolean }>({ current: () => false })
25
+
26
+ function TabsRoot(props: TabsProps) {
27
+ const [local, rest] = splitProps(props, ["class", "classList", "variant", "orientation", "children"])
28
+ const variant = () => local.variant ?? "panel"
29
+ const current = () => variant() === "line" || variant() === "pill" || variant() === "settings"
30
+ const dataVariant = () => {
31
+ if (variant() === "panel" || variant() === "line") return "normal"
32
+ if (variant() === "underline") return "alt"
33
+ if (variant() === "surface") return "pill"
34
+ return variant()
35
+ }
36
+ return (
37
+ <TabsContext.Provider value={{ current }}>
38
+ <Root
39
+ {...rest}
40
+ orientation={local.orientation}
41
+ data-component={current() ? "tabs-v2" : "tabs"}
42
+ data-variant={dataVariant()}
43
+ data-orientation={local.orientation || "horizontal"}
44
+ classList={{
45
+ ...local.classList,
46
+ [local.class ?? ""]: !!local.class,
47
+ }}
48
+ >
49
+ {local.children}
50
+ </Root>
51
+ </TabsContext.Provider>
52
+ )
53
+ }
54
+
55
+ function TabsList(props: TabsListProps) {
56
+ const ctx = useContext(TabsContext)
57
+ const [local, rest] = splitProps(props, ["class", "classList"])
58
+ return (
59
+ <List
60
+ {...rest}
61
+ data-slot={ctx.current() ? "tabs-v2-list" : "tabs-list"}
62
+ classList={{
63
+ ...local.classList,
64
+ [local.class ?? ""]: !!local.class,
65
+ }}
66
+ />
67
+ )
68
+ }
69
+
70
+ function TabsTrigger(props: ParentProps<TabsTriggerProps>) {
71
+ const ctx = useContext(TabsContext)
72
+ const [local, rest] = splitProps(props, [
73
+ "class",
74
+ "classList",
75
+ "classes",
76
+ "children",
77
+ "closeButton",
78
+ "hideCloseButton",
79
+ "onMiddleClick",
80
+ "subtext",
81
+ "dir",
82
+ ])
83
+ const wrapperSlot = () => (ctx.current() ? "tabs-v2-trigger-wrapper" : "tabs-trigger-wrapper")
84
+ const triggerSlot = () => (ctx.current() ? "tabs-v2-trigger" : "tabs-trigger")
85
+ const closeSlot = () => (ctx.current() ? "tabs-v2-trigger-close-button" : "tabs-trigger-close-button")
86
+ return (
87
+ <div
88
+ data-slot={wrapperSlot()}
89
+ data-value={props.value}
90
+ classList={{
91
+ ...local.classList,
92
+ [local.class ?? ""]: !!local.class,
93
+ }}
94
+ onMouseDown={(event) => {
95
+ if (event.button !== 1 || !local.onMiddleClick) return
96
+ event.preventDefault()
97
+ }}
98
+ onAuxClick={(event) => {
99
+ if (event.button !== 1 || !local.onMiddleClick) return
100
+ event.preventDefault()
101
+ local.onMiddleClick()
102
+ }}
103
+ >
104
+ <Trigger
105
+ {...rest}
106
+ dir={local.dir ?? "auto"}
107
+ data-slot={triggerSlot()}
108
+ data-value={props.value}
109
+ classList={{ [local.classes?.button ?? ""]: !!local.classes?.button }}
110
+ >
111
+ <Show when={ctx.current()} fallback={local.children}>
112
+ <span class="inline-flex items-center gap-2" data-slot="tabs-v2-trigger-content">
113
+ {local.children}
114
+ <Show when={local.subtext}>
115
+ {(subtext) => (
116
+ <span data-slot="tabs-v2-subtext" class="ms-2 text-xs text-text-weak">
117
+ {subtext()}
118
+ </span>
119
+ )}
120
+ </Show>
121
+ </span>
122
+ </Show>
123
+ </Trigger>
124
+ <Show when={local.closeButton}>
125
+ {(closeButton) => (
126
+ <div data-slot={closeSlot()} data-hidden={local.hideCloseButton ? "" : undefined}>
127
+ {closeButton()}
128
+ </div>
129
+ )}
130
+ </Show>
131
+ </div>
132
+ )
133
+ }
134
+
135
+ function TabsCloseButton(props: TabsCloseButtonProps) {
136
+ const i18n = useI18n()
137
+ const [local, rest] = splitProps(props, ["class", "classList", "onClick", "onPointerDown", "aria-label"])
138
+ return (
139
+ <button
140
+ type="button"
141
+ {...rest}
142
+ aria-label={local["aria-label"] ?? i18n.t("ui.tabs.close")}
143
+ data-slot="tabs-close-button"
144
+ classList={{
145
+ [local.class ?? ""]: !!local.class,
146
+ ...local.classList,
147
+ }}
148
+ onPointerDown={(event) => {
149
+ event.stopPropagation()
150
+ if (typeof local.onPointerDown === "function") local.onPointerDown(event)
151
+ }}
152
+ onClick={(event) => {
153
+ event.preventDefault()
154
+ event.stopPropagation()
155
+ if (typeof local.onClick === "function") local.onClick(event)
156
+ }}
157
+ >
158
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
159
+ <path d="M10.8889 3.11108L3.11108 10.8889" stroke="currentColor" stroke-linejoin="round" />
160
+ <path d="M3.11108 3.11108L10.8889 10.8889" stroke="currentColor" stroke-linejoin="round" />
161
+ </svg>
162
+ </button>
163
+ )
164
+ }
165
+
166
+ function TabsContent(props: ParentProps<TabsContentProps>) {
167
+ const ctx = useContext(TabsContext)
168
+ const [local, rest] = splitProps(props, ["class", "classList", "children"])
169
+ return (
170
+ <Content
171
+ {...rest}
172
+ data-slot={ctx.current() ? "tabs-v2-content" : "tabs-content"}
173
+ classList={{
174
+ ...local.classList,
175
+ [local.class ?? ""]: !!local.class,
176
+ }}
177
+ >
178
+ {local.children}
179
+ </Content>
180
+ )
181
+ }
182
+
183
+ const TabsSectionTitle: Component<ParentProps> = (props) => {
184
+ const ctx = useContext(TabsContext)
185
+ return <div data-slot={ctx.current() ? "tabs-v2-section-title" : "tabs-section-title"}>{props.children}</div>
186
+ }
187
+
188
+ export const Tabs = Object.assign(TabsRoot, {
189
+ List: TabsList,
190
+ Trigger: TabsTrigger,
191
+ CloseButton: TabsCloseButton,
192
+ Content: TabsContent,
193
+ SectionTitle: TabsSectionTitle,
194
+ })
@@ -93,6 +93,9 @@
93
93
  [data-slot="dialog-description"] {
94
94
  flex: none;
95
95
  flex-grow: 0;
96
+ min-width: 0;
97
+ max-width: 100%;
98
+ overflow-wrap: anywhere;
96
99
  user-select: none;
97
100
  font-weight: 440;
98
101
  font-size: 13px;
@@ -1,7 +1,7 @@
1
- import { Dialog as Kobalte } from "@kobalte/core/dialog"
1
+ import { CloseButton, Content, Description, Title } from "@kobalte/core/dialog"
2
2
  import { type ComponentProps, type JSXElement, type ParentProps, Show, children, splitProps } from "solid-js"
3
3
  import { useI18n } from "../../context/i18n"
4
- import "./dialog-v2.css"
4
+ import "./dialog.css"
5
5
 
6
6
  export interface DialogProps extends ParentProps {
7
7
  size?: "normal" | "large" | "x-large"
@@ -36,7 +36,7 @@ export function DialogBody(props: ParentProps & { class?: ComponentProps<"div">[
36
36
  }
37
37
 
38
38
  export function DialogTitle(props: ParentProps) {
39
- return <Kobalte.Title data-slot="dialog-header-title">{props.children}</Kobalte.Title>
39
+ return <Title data-slot="dialog-header-title">{props.children}</Title>
40
40
  }
41
41
 
42
42
  export function DialogTitleGroup(props: DialogTitleGroupProps) {
@@ -45,8 +45,8 @@ export function DialogTitleGroup(props: DialogTitleGroupProps) {
45
45
 
46
46
  return (
47
47
  <div data-slot="dialog-title-group">
48
- <Show when={title()}>{(t) => <Kobalte.Title data-slot="dialog-title">{t()}</Kobalte.Title>}</Show>
49
- <Kobalte.Description data-slot="dialog-description">{description()}</Kobalte.Description>
48
+ <Show when={title()}>{(t) => <Title data-slot="dialog-title">{t()}</Title>}</Show>
49
+ <Description data-slot="dialog-description">{description()}</Description>
50
50
  </div>
51
51
  )
52
52
  }
@@ -59,8 +59,8 @@ export function DialogHeader(props: DialogHeaderProps) {
59
59
  return (
60
60
  <div data-slot="dialog-header" data-hide-close={hideClose() ? "" : undefined}>
61
61
  {local.children}
62
- {!hideClose() && (
63
- <Kobalte.CloseButton data-slot="dialog-close-button" aria-label={local.closeLabel ?? i18n.t("ui.common.close")}>
62
+ <Show when={!hideClose()}>
63
+ <CloseButton data-slot="dialog-close-button" aria-label={local.closeLabel ?? i18n.t("ui.common.close")}>
64
64
  <svg
65
65
  width="16"
66
66
  height="16"
@@ -75,8 +75,8 @@ export function DialogHeader(props: DialogHeaderProps) {
75
75
  stroke-linejoin="round"
76
76
  />
77
77
  </svg>
78
- </Kobalte.CloseButton>
79
- )}
78
+ </CloseButton>
79
+ </Show>
80
80
  </div>
81
81
  )
82
82
  }
@@ -92,7 +92,7 @@ export function Dialog(props: DialogProps) {
92
92
  data-size={local.size || "normal"}
93
93
  >
94
94
  <div data-slot="dialog-container" class={local.containerClass}>
95
- <Kobalte.Content
95
+ <Content
96
96
  data-slot="dialog-content"
97
97
  classList={{
98
98
  ...local.classList,
@@ -108,10 +108,8 @@ export function Dialog(props: DialogProps) {
108
108
  }}
109
109
  >
110
110
  {local.children}
111
- </Kobalte.Content>
111
+ </Content>
112
112
  </div>
113
113
  </div>
114
114
  )
115
115
  }
116
-
117
- export const DialogV2 = Dialog
@@ -39,6 +39,32 @@
39
39
  }
40
40
  }
41
41
 
42
+ [data-component="tooltip-v2"][data-appearance="standard"] {
43
+ display: block;
44
+ max-width: 320px;
45
+ padding: 2px 8px;
46
+ border: 1px solid var(--border-weak-base, rgba(0, 0, 0, 0.07));
47
+ border-radius: var(--radius-sm);
48
+ background: var(--surface-float-base);
49
+ color: var(--text-invert-strong);
50
+ box-shadow: var(--shadow-md);
51
+ font-family: var(--font-family-sans);
52
+ font-size: var(--font-size-small);
53
+ font-style: normal;
54
+ font-weight: var(--font-weight-medium);
55
+ line-height: var(--line-height-large);
56
+ letter-spacing: var(--letter-spacing-normal);
57
+ font-variant-numeric: normal;
58
+ font-variation-settings: normal;
59
+ user-select: text;
60
+ animation: none;
61
+
62
+ &[data-closed]:not([data-force-open="true"]) {
63
+ opacity: 0;
64
+ animation: none;
65
+ }
66
+ }
67
+
42
68
  @keyframes tooltipV2In {
43
69
  from {
44
70
  opacity: 0;
@@ -1,19 +1,21 @@
1
- import { Tooltip as KobalteTooltip } from "@kobalte/core/tooltip"
2
- import { createEffect, Match, onCleanup, splitProps, Switch, type JSX } from "solid-js"
1
+ import { Content, Portal, Root, Trigger } from "@kobalte/core/tooltip"
2
+ import { createEffect, Match, onCleanup, splitProps, Switch, untrack, type JSX } from "solid-js"
3
3
  import type { ComponentProps } from "solid-js"
4
4
  import { createStore } from "solid-js/store"
5
- import "./tooltip-v2.css"
5
+ import "./tooltip.css"
6
6
 
7
- export interface TooltipV2Props extends ComponentProps<typeof KobalteTooltip> {
7
+ export interface TooltipProps extends ComponentProps<typeof Root> {
8
8
  value: JSX.Element
9
+ appearance?: "standard" | "compact"
9
10
  class?: string
10
11
  contentClass?: string
11
12
  contentStyle?: JSX.CSSProperties
12
13
  inactive?: boolean
13
14
  forceOpen?: boolean
15
+ triggerTabIndex?: number
14
16
  }
15
17
 
16
- export function TooltipV2(props: TooltipV2Props) {
18
+ export function Tooltip(props: TooltipProps) {
17
19
  let ref: HTMLDivElement | undefined
18
20
  const [state, setState] = createStore({
19
21
  open: false,
@@ -22,16 +24,19 @@ export function TooltipV2(props: TooltipV2Props) {
22
24
  })
23
25
  const [local, others] = splitProps(props, [
24
26
  "children",
27
+ "appearance",
25
28
  "class",
26
29
  "contentClass",
27
30
  "contentStyle",
28
31
  "inactive",
29
32
  "forceOpen",
33
+ "triggerTabIndex",
30
34
  "ignoreSafeArea",
31
35
  "value",
32
36
  ])
33
37
 
34
38
  const close = () => setState("open", false)
39
+ const controlled = () => local.forceOpen !== undefined
35
40
 
36
41
  const inside = () => {
37
42
  const active = document.activeElement
@@ -40,7 +45,7 @@ export function TooltipV2(props: TooltipV2Props) {
40
45
  }
41
46
 
42
47
  const drop = (expand = state.expand) => {
43
- if (expand) return
48
+ if (expand || !state.block) return
44
49
  if (ref?.matches(":hover")) return
45
50
  if (inside()) return
46
51
  setState("block", false)
@@ -69,7 +74,7 @@ export function TooltipV2(props: TooltipV2Props) {
69
74
 
70
75
  createEffect(() => {
71
76
  if (!ref) return
72
- sync()
77
+ untrack(sync)
73
78
  const obs = new MutationObserver(sync)
74
79
  obs.observe(ref, {
75
80
  subtree: true,
@@ -86,16 +91,16 @@ export function TooltipV2(props: TooltipV2Props) {
86
91
  <Switch>
87
92
  <Match when={local.inactive}>{local.children}</Match>
88
93
  <Match when={true}>
89
- <KobalteTooltip
94
+ <Root
90
95
  gutter={4}
91
96
  openDelay={400}
92
97
  skipDelayDuration={300}
93
98
  {...others}
94
99
  closeDelay={0}
95
100
  ignoreSafeArea={local.ignoreSafeArea ?? true}
96
- open={local.forceOpen || state.open}
101
+ open={controlled() ? local.forceOpen : state.open}
97
102
  onOpenChange={(open) => {
98
- if (local.forceOpen) return
103
+ if (controlled()) return
99
104
  if (state.block && open) return
100
105
  if (justClickedTrigger) {
101
106
  justClickedTrigger = false
@@ -104,9 +109,10 @@ export function TooltipV2(props: TooltipV2Props) {
104
109
  setState("open", open)
105
110
  }}
106
111
  >
107
- <KobalteTooltip.Trigger
112
+ <Trigger
108
113
  ref={ref}
109
114
  as="div"
115
+ tabIndex={local.triggerTabIndex}
110
116
  data-component="tooltip-v2-trigger"
111
117
  class={local.class}
112
118
  onPointerDownCapture={arm}
@@ -118,14 +124,15 @@ export function TooltipV2(props: TooltipV2Props) {
118
124
  onFocusOut={() => requestAnimationFrame(() => drop())}
119
125
  >
120
126
  {local.children}
121
- </KobalteTooltip.Trigger>
122
- <KobalteTooltip.Portal>
123
- <KobalteTooltip.Content
127
+ </Trigger>
128
+ <Portal>
129
+ <Content
124
130
  ref={(el) => {
125
131
  const theme = ref?.closest("[data-theme]")?.getAttribute("data-theme")
126
132
  if (theme) el.setAttribute("data-theme", theme)
127
133
  }}
128
134
  data-component="tooltip-v2"
135
+ data-appearance={local.appearance ?? "compact"}
129
136
  data-placement={props.placement}
130
137
  data-force-open={local.forceOpen}
131
138
  class={local.contentClass}
@@ -138,9 +145,9 @@ export function TooltipV2(props: TooltipV2Props) {
138
145
  }}
139
146
  >
140
147
  {local.value}
141
- </KobalteTooltip.Content>
142
- </KobalteTooltip.Portal>
143
- </KobalteTooltip>
148
+ </Content>
149
+ </Portal>
150
+ </Root>
144
151
  </Match>
145
152
  </Switch>
146
153
  )
@@ -401,4 +401,9 @@ input:where([type="button"], [type="reset"], [type="submit"]),
401
401
  [contenteditable="true"] {
402
402
  font-size: 16px !important;
403
403
  }
404
+
405
+ input::placeholder,
406
+ textarea::placeholder {
407
+ font-size: 13px;
408
+ }
404
409
  }
@@ -6,47 +6,31 @@
6
6
  @import "./base.css" layer(base);
7
7
  @import "katex/dist/katex.min.css" layer(base);
8
8
 
9
- @import "../components/accordion.css" layer(components);
9
+ @import "../data-display/accordion/accordion.css" layer(components);
10
10
  @import "../components/animated-number.css" layer(components);
11
11
  @import "../components/app-icon.css" layer(components);
12
- @import "../components/avatar.css" layer(components);
13
- @import "../components/button.css" layer(components);
14
12
  @import "../components/card.css" layer(components);
15
- @import "../components/checkbox.css" layer(components);
13
+ @import "../forms/checkbox/checkbox.css" layer(components);
16
14
  @import "../components/collapsible.css" layer(components);
17
- @import "../components/diff-changes.css" layer(components);
18
15
  @import "../components/context-menu.css" layer(components);
19
- @import "../components/dropdown-menu.css" layer(components);
20
- @import "../components/dialog.css" layer(components);
21
16
  @import "../components/file-icon.css" layer(components);
22
17
  @import "../components/hover-card.css" layer(components);
23
18
  @import "../components/provider-icon.css" layer(components);
24
19
  @import "../components/dock-surface.css" layer(components);
25
- @import "../components/icon.css" layer(components);
26
- @import "../components/icon-button.css" layer(components);
27
20
  @import "../components/image-preview.css" layer(components);
28
- @import "../components/keybind.css" layer(components);
21
+ @import "../forms/inline-input/inline-input.css" layer(components);
29
22
  @import "../components/text-field.css" layer(components);
30
- @import "../components/inline-input.css" layer(components);
31
23
  @import "../components/list.css" layer(components);
32
24
  @import "../components/logo.css" layer(components);
33
25
  @import "../components/popover.css" layer(components);
34
26
  @import "../components/progress.css" layer(components);
35
- @import "../components/progress-circle.css" layer(components);
36
- @import "../components/radio-group.css" layer(components);
37
27
  @import "../components/resize-handle.css" layer(components);
38
- @import "../components/select.css" layer(components);
39
28
  @import "../components/spinner.css" layer(components);
40
- @import "../components/switch.css" layer(components);
41
29
  @import "../components/scroll-view.css" layer(components);
42
30
  @import "../components/sticky-accordion-header.css" layer(components);
43
- @import "../components/tabs.css" layer(components);
44
- @import "../components/tag.css" layer(components);
31
+ @import "../navigation/tabs/tabs.css" layer(components);
45
32
  @import "../components/text-reveal.css" layer(components);
46
33
  @import "../components/text-strikethrough.css" layer(components);
47
- @import "../components/text-shimmer.css" layer(components);
48
- @import "../components/toast.css" layer(components);
49
- @import "../components/tooltip.css" layer(components);
50
34
  @import "../components/typewriter.css" layer(components);
51
35
 
52
36
  @import "./utilities.css" layer(utilities);
@@ -252,6 +252,7 @@
252
252
  --color-v2-text-text-code-accent: var(--v2-text-text-code-accent);
253
253
  --color-v2-icon-icon-base: var(--v2-icon-icon-base);
254
254
  --color-v2-icon-icon-muted: var(--v2-icon-icon-muted);
255
+ --color-v2-icon-icon-faint: var(--v2-icon-icon-faint);
255
256
  --color-v2-icon-icon-inverse: var(--v2-icon-icon-inverse);
256
257
  --color-v2-icon-icon-contrast: var(--v2-icon-icon-contrast);
257
258
  --color-v2-icon-icon-accent: var(--v2-icon-icon-accent);
@@ -1,7 +1,21 @@
1
1
  @layer theme, base, components, utilities;
2
2
 
3
3
  @import "tailwindcss/theme.css" layer(theme);
4
- @import "tailwindcss/utilities.css" layer(utilities) source("../../../../");
4
+ @import "tailwindcss/utilities.css" layer(utilities) source(none);
5
+ @source "../../../../app/src";
6
+ @source "../../../../app/index.html";
7
+ @source not "../../../../app/src/i18n";
8
+ @source not "../../../../app/src/**/*.test.{ts,tsx}";
9
+ @source "../../../../desktop/src/renderer";
10
+ @source not "../../../../desktop/src/renderer/**/*.test.{ts,tsx}";
11
+ @source "../../../../enterprise/src";
12
+ @source "../../../../session-ui/src";
13
+ @source not "../../../../session-ui/src/**/*.test.{ts,tsx}";
14
+ @source "../../../../storybook";
15
+ @source "../../../src";
16
+ @source not "../../../src/assets";
17
+ @source not "../../../src/i18n";
18
+ @source not "../../../src/**/*.test.{ts,tsx}";
5
19
  @import "./utilities.css";
6
20
 
7
21
  @import "../index.css";
@@ -51,6 +65,9 @@
51
65
  --leading-lg: var(--line-height-large);
52
66
  --leading-xl: var(--line-height-x-large);
53
67
  --leading-2xl: var(--line-height-2x-large);
68
+ --leading-text-tight: var(--line-height-tight);
69
+ --leading-text-compact: var(--line-height-compact);
70
+ --leading-text-base: var(--line-height-base);
54
71
 
55
72
  --tracking-normal: var(--letter-spacing-normal);
56
73
  --tracking-tight: var(--letter-spacing-tight);
@@ -1,8 +1,8 @@
1
1
  :root {
2
- --font-family-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
2
+ --font-family-sans: "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
3
3
  --font-family-sans--font-feature-settings: normal;
4
4
  --font-family-mono:
5
- ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
5
+ "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
6
6
  --font-family-mono--font-feature-settings: normal;
7
7
 
8
8
  --font-size-small: 13px;
@@ -128,18 +128,18 @@
128
128
  --v2-cyan-1200: #00353fff;
129
129
 
130
130
  /* ── Blue ── */
131
- --v2-blue-100: #ecf1feff;
132
- --v2-blue-200: #d7e2fcff;
131
+ --v2-blue-100: #f5f8ffff;
132
+ --v2-blue-200: #ecf1feff;
133
133
  --v2-blue-300: #c3d4fdff;
134
134
  --v2-blue-400: #a2bcffff;
135
135
  --v2-blue-500: #7698fdff;
136
136
  --v2-blue-600: #3b5cf6ff;
137
- --v2-blue-700: #3250dfff;
138
- --v2-blue-800: #2c47c8ff;
139
- --v2-blue-900: #263fa9ff;
140
- --v2-blue-1000: #22388fff;
141
- --v2-blue-1100: #1c2e70ff;
142
- --v2-blue-1200: #1b2852ff;
137
+ --v2-blue-700: #0b34f4ff;
138
+ --v2-blue-800: #3250dfff;
139
+ --v2-blue-900: #2c47c8ff;
140
+ --v2-blue-1000: #263fa9ff;
141
+ --v2-blue-1100: #22388fff;
142
+ --v2-blue-1200: #021945ff;
143
143
 
144
144
  /* ── Purple ── */
145
145
  --v2-purple-100: #ebecfeff;