@opencode-ai/ui 0.0.0-dev-202608240755 → 0.0.0-dev-18071
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.
- package/dist/actions/button/button.d.ts +10 -0
- package/dist/actions/icon-button/icon-button.d.ts +11 -0
- package/dist/actions/split-button/split-button.d.ts +5 -0
- package/dist/components/card.d.ts +1 -1
- package/dist/components/list.d.ts +1 -1
- package/dist/components/scroll-view.d.ts +3 -3
- package/dist/context/i18n.d.ts +10 -7
- package/dist/{components → data-display/accordion}/accordion.d.ts +6 -6
- package/dist/{v2/components/avatar-v2.d.ts → data-display/avatar/avatar.d.ts} +1 -1
- package/dist/data-display/badge/badge.d.ts +7 -0
- package/dist/{components → data-display/diff-changes}/diff-changes.d.ts +2 -1
- package/dist/data-display/keybind/keybind.d.ts +7 -0
- package/dist/{v2/components/line-comment-v2.d.ts → data-display/line-comment/line-comment.d.ts} +9 -9
- package/dist/{v2/components/project-avatar-v2.d.ts → data-display/project-avatar/project-avatar.d.ts} +1 -1
- package/dist/feedback/loader/loader.d.ts +3 -0
- package/dist/{components → feedback/progress-circle}/progress-circle.d.ts +2 -0
- package/dist/feedback/toast/toast.d.ts +57 -0
- package/dist/{components → forms/checkbox}/checkbox.d.ts +2 -2
- package/dist/{v2/components/field-v2.d.ts → forms/field/field.d.ts} +4 -10
- package/dist/forms/radio/radio.d.ts +16 -0
- package/dist/{v2/components/select-v2.d.ts → forms/select/select.d.ts} +4 -6
- package/dist/{components → forms/switch}/switch.d.ts +4 -2
- package/dist/{v2/components/text-input-v2.d.ts → forms/text-input/text-input.d.ts} +3 -3
- package/dist/forms/textarea/textarea.d.ts +7 -0
- package/dist/i18n/ar.d.ts +0 -2
- package/dist/i18n/bg.d.ts +0 -2
- package/dist/i18n/br.d.ts +0 -2
- package/dist/i18n/bs.d.ts +0 -2
- package/dist/i18n/da.d.ts +0 -2
- package/dist/i18n/de.d.ts +0 -2
- package/dist/i18n/en.d.ts +219 -1
- package/dist/i18n/es.d.ts +0 -2
- package/dist/i18n/fr.d.ts +0 -2
- package/dist/i18n/he.d.ts +197 -0
- package/dist/i18n/ja.d.ts +0 -2
- package/dist/i18n/km.d.ts +0 -2
- package/dist/i18n/ko.d.ts +0 -2
- package/dist/i18n/lo.d.ts +0 -2
- package/dist/i18n/mk.d.ts +0 -2
- package/dist/i18n/mn.d.ts +0 -2
- package/dist/i18n/my.d.ts +0 -2
- package/dist/i18n/pl.d.ts +0 -2
- package/dist/i18n/ru.d.ts +0 -2
- package/dist/i18n/sr.d.ts +0 -2
- package/dist/i18n/tg.d.ts +0 -2
- package/dist/i18n/th.d.ts +0 -2
- package/dist/i18n/tr.d.ts +0 -2
- package/dist/i18n/zh.d.ts +0 -2
- package/dist/i18n/zht.d.ts +0 -2
- package/dist/{components/icon.d.ts → icons/icon/additional-icons.d.ts} +8 -8
- package/dist/{v2/components → icons/icon}/icon.d.ts +20 -1
- package/dist/layout/divider/divider.d.ts +5 -0
- package/dist/navigation/menu/menu.d.ts +59 -0
- package/dist/{v2/components/segmented-control-v2.d.ts → navigation/segmented-control/segmented-control.d.ts} +5 -5
- package/dist/{components → navigation/tabs}/tabs.d.ts +15 -8
- package/dist/{v2/components/dialog-v2.d.ts → overlays/dialog/dialog.d.ts} +1 -2
- package/dist/overlays/tooltip/tooltip.d.ts +15 -0
- package/dist/{components → typography/text-shimmer}/text-shimmer.d.ts +1 -0
- package/dist/typography/wordmark/wordmark.d.ts +2 -0
- package/package.json +131 -13
- package/src/{components → actions/button}/button.tsx +10 -11
- package/src/actions/icon-button/icon-button.tsx +32 -0
- package/src/{v2/components/split-button-v2.css → actions/split-button/split-button.css} +1 -6
- package/src/{v2/components/split-button-v2.tsx → actions/split-button/split-button.tsx} +4 -4
- package/src/components/animated-number.css +29 -11
- package/src/components/animated-number.tsx +2 -2
- package/src/components/card.css +2 -23
- package/src/components/card.tsx +4 -4
- package/src/components/collapsible.tsx +2 -2
- package/src/components/dock-surface.css +2 -9
- package/src/components/image-preview.tsx +3 -2
- package/src/components/list.css +5 -5
- package/src/components/list.tsx +7 -5
- package/src/components/popover.tsx +3 -2
- package/src/components/scroll-view.tsx +5 -20
- package/src/components/sticky-accordion-header.tsx +1 -1
- package/src/components/text-field.tsx +12 -4
- package/src/context/dialog.tsx +2 -1
- package/src/context/i18n.tsx +17 -14
- package/src/{components → data-display/accordion}/accordion.css +1 -26
- package/src/{components → data-display/accordion}/accordion.tsx +14 -14
- package/src/{v2/components/avatar-v2.tsx → data-display/avatar/avatar.tsx} +1 -1
- package/src/{v2/components/badge-v2.css → data-display/badge/badge.css} +19 -0
- package/src/{v2/components/badge-v2.tsx → data-display/badge/badge.tsx} +6 -4
- package/src/{components → data-display/diff-changes}/diff-changes.css +22 -19
- package/src/{v2/components/diff-changes-v2.tsx → data-display/diff-changes/diff-changes.tsx} +7 -2
- package/src/{v2/components/keybind-v2.css → data-display/keybind/keybind.css} +1 -1
- package/src/{v2/components/keybind-v2.tsx → data-display/keybind/keybind.tsx} +3 -3
- package/src/{v2/components/line-comment-v2.css → data-display/line-comment/line-comment.css} +3 -3
- package/src/{v2/components/line-comment-v2.tsx → data-display/line-comment/line-comment.tsx} +17 -15
- package/src/{v2/components/project-avatar-v2.tsx → data-display/project-avatar/project-avatar.tsx} +1 -1
- package/src/{v2/components/loader-v2.tsx → feedback/loader/loader.tsx} +2 -2
- package/src/feedback/progress-circle/progress-circle.css +28 -0
- package/src/feedback/progress-circle/progress-circle.tsx +64 -0
- package/src/{v2/components/toast-v2.tsx → feedback/toast/toast.tsx} +60 -58
- package/src/{components → forms/checkbox}/checkbox.css +1 -7
- package/src/{components → forms/checkbox}/checkbox.tsx +13 -13
- package/src/{v2/components/field-v2.css → forms/field/field.css} +1 -1
- package/src/{v2/components/field-v2.tsx → forms/field/field.tsx} +9 -11
- package/src/{v2/components/radio-v2.tsx → forms/radio/radio.tsx} +30 -20
- package/src/{v2/components/select-v2.css → forms/select/select.css} +2 -8
- package/src/{v2/components/select-v2.tsx → forms/select/select.tsx} +38 -32
- package/src/{v2/components/switch-v2.css → forms/switch/switch.css} +110 -0
- package/src/forms/switch/switch.tsx +34 -0
- package/src/{v2/components/text-input-v2.css → forms/text-input/text-input.css} +1 -1
- package/src/{v2/components/text-input-v2.tsx → forms/text-input/text-input.tsx} +4 -4
- package/src/{v2/components/textarea-v2.tsx → forms/textarea/textarea.tsx} +3 -3
- package/src/hooks/create-auto-scroll.tsx +20 -0
- package/src/i18n/am.ts +1 -3
- package/src/i18n/ar.ts +1 -3
- package/src/i18n/az.ts +1 -3
- package/src/i18n/bg.ts +1 -3
- package/src/i18n/bn.ts +1 -3
- package/src/i18n/br.ts +1 -3
- package/src/i18n/bs.ts +1 -3
- package/src/i18n/ca.ts +1 -3
- package/src/i18n/cs.ts +1 -3
- package/src/i18n/da.ts +1 -3
- package/src/i18n/de.ts +1 -3
- package/src/i18n/dv.ts +1 -3
- package/src/i18n/dz.ts +1 -3
- package/src/i18n/el.ts +1 -3
- package/src/i18n/en.ts +29 -5
- package/src/i18n/es.ts +1 -3
- package/src/i18n/et.ts +1 -3
- package/src/i18n/fa.ts +1 -3
- package/src/i18n/fi.ts +1 -3
- package/src/i18n/fo.ts +1 -3
- package/src/i18n/fr.ts +1 -3
- package/src/i18n/he.ts +199 -0
- package/src/i18n/hi.ts +1 -3
- package/src/i18n/hr.ts +1 -3
- package/src/i18n/hu.ts +1 -3
- package/src/i18n/hy.ts +1 -3
- package/src/i18n/id.ts +1 -3
- package/src/i18n/is.ts +1 -3
- package/src/i18n/it.ts +1 -3
- package/src/i18n/ja.ts +1 -3
- package/src/i18n/ka.ts +1 -3
- package/src/i18n/km.ts +1 -3
- package/src/i18n/ko.ts +1 -3
- package/src/i18n/lo.ts +1 -3
- package/src/i18n/lt.ts +1 -3
- package/src/i18n/lv.ts +1 -3
- package/src/i18n/mk.ts +1 -3
- package/src/i18n/mn.ts +1 -3
- package/src/i18n/ms.ts +1 -3
- package/src/i18n/my.ts +1 -3
- package/src/i18n/ne.ts +1 -3
- package/src/i18n/nl.ts +1 -3
- package/src/i18n/no.ts +1 -3
- package/src/i18n/pa.ts +1 -3
- package/src/i18n/pl.ts +1 -3
- package/src/i18n/ro.ts +1 -3
- package/src/i18n/ru.ts +1 -3
- package/src/i18n/si.ts +1 -3
- package/src/i18n/sk.ts +1 -3
- package/src/i18n/sl.ts +1 -3
- package/src/i18n/sq.ts +1 -3
- package/src/i18n/sr.ts +1 -3
- package/src/i18n/sv.ts +1 -3
- package/src/i18n/tg.ts +1 -3
- package/src/i18n/th.ts +1 -3
- package/src/i18n/tk.ts +1 -3
- package/src/i18n/tr.ts +1 -3
- package/src/i18n/uk.ts +1 -3
- package/src/i18n/ur.ts +1 -3
- package/src/i18n/uz.ts +1 -3
- package/src/i18n/vi.ts +1 -3
- package/src/i18n/zh.ts +1 -3
- package/src/i18n/zht.ts +1 -3
- package/src/{components/icon.tsx → icons/icon/additional-icons.ts} +8 -74
- package/src/icons/icon/icon.css +3 -0
- package/src/{v2/components → icons/icon}/icon.tsx +46 -9
- package/src/{v2/components/divider-v2.tsx → layout/divider/divider.tsx} +3 -3
- package/src/{v2/components/menu-v2.css → navigation/menu/menu.css} +122 -1
- package/src/{v2/components/menu-v2.tsx → navigation/menu/menu.tsx} +96 -32
- package/src/{v2/components/segmented-control-v2.css → navigation/segmented-control/segmented-control.css} +1 -1
- package/src/{v2/components/segmented-control-v2.tsx → navigation/segmented-control/segmented-control.tsx} +9 -8
- package/src/{v2/components/tabs-v2.css → navigation/tabs/tabs-current.css} +25 -10
- package/src/{components → navigation/tabs}/tabs.css +39 -229
- package/src/navigation/tabs/tabs.tsx +194 -0
- package/src/{v2/components/dialog-v2.css → overlays/dialog/dialog.css} +3 -0
- package/src/{v2/components/dialog-v2.tsx → overlays/dialog/dialog.tsx} +11 -13
- package/src/{v2/components/tooltip-v2.css → overlays/tooltip/tooltip.css} +26 -0
- package/src/{v2/components/tooltip-v2.tsx → overlays/tooltip/tooltip.tsx} +21 -14
- package/src/styles/index.css +4 -20
- package/src/styles/tailwind/colors.css +1 -0
- package/src/styles/tailwind/index.css +18 -1
- package/src/{v2/styles → styles/tokens}/theme.css +8 -12
- package/src/theme/context.tsx +19 -11
- package/src/theme/themes/oc-2.json +3 -1
- package/src/theme/v2/foreground.ts +1 -0
- package/src/{components → typography/text-shimmer}/text-shimmer.css +2 -1
- package/src/{components → typography/text-shimmer}/text-shimmer.tsx +1 -0
- package/src/{v2/components/wordmark-v2.tsx → typography/wordmark/wordmark.tsx} +1 -1
- package/dist/components/avatar.d.ts +0 -9
- package/dist/components/button.d.ts +0 -9
- package/dist/components/dialog.d.ts +0 -12
- package/dist/components/dropdown-menu.d.ts +0 -80
- package/dist/components/icon-button.d.ts +0 -10
- package/dist/components/keybind.d.ts +0 -6
- package/dist/components/radio-group.d.ts +0 -16
- package/dist/components/select.d.ts +0 -21
- package/dist/components/tag.d.ts +0 -5
- package/dist/components/toast.d.ts +0 -56
- package/dist/components/tooltip.d.ts +0 -17
- package/dist/v2/components/accordion-v2.d.ts +0 -26
- package/dist/v2/components/badge-v2.d.ts +0 -6
- package/dist/v2/components/button-v2.d.ts +0 -10
- package/dist/v2/components/checkbox-v2.d.ts +0 -10
- package/dist/v2/components/diff-changes-v2.d.ts +0 -11
- package/dist/v2/components/divider-v2.d.ts +0 -5
- package/dist/v2/components/icon-button-v2.d.ts +0 -11
- package/dist/v2/components/inline-input-v2.d.ts +0 -21
- package/dist/v2/components/keybind-v2.d.ts +0 -7
- package/dist/v2/components/loader-v2.d.ts +0 -3
- package/dist/v2/components/menu-v2.d.ts +0 -52
- package/dist/v2/components/progress-circle-v2.d.ts +0 -8
- package/dist/v2/components/radio-v2.d.ts +0 -16
- package/dist/v2/components/split-button-v2.d.ts +0 -5
- package/dist/v2/components/switch-v2.d.ts +0 -7
- package/dist/v2/components/tabs-v2.d.ts +0 -34
- package/dist/v2/components/text-shimmer-v2.d.ts +0 -9
- package/dist/v2/components/textarea-v2.d.ts +0 -7
- package/dist/v2/components/toast-v2.d.ts +0 -57
- package/dist/v2/components/tooltip-v2.d.ts +0 -13
- package/dist/v2/components/wordmark-v2.d.ts +0 -2
- package/src/components/avatar.css +0 -49
- package/src/components/avatar.tsx +0 -55
- package/src/components/button.css +0 -194
- package/src/components/dialog.css +0 -181
- package/src/components/dialog.tsx +0 -72
- package/src/components/diff-changes.tsx +0 -115
- package/src/components/dropdown-menu.css +0 -135
- package/src/components/dropdown-menu.tsx +0 -308
- package/src/components/icon-button.css +0 -181
- package/src/components/icon-button.tsx +0 -29
- package/src/components/icon.css +0 -39
- package/src/components/keybind.css +0 -18
- package/src/components/keybind.tsx +0 -20
- package/src/components/progress-circle.css +0 -16
- package/src/components/progress-circle.tsx +0 -64
- package/src/components/radio-group.css +0 -187
- package/src/components/radio-group.tsx +0 -83
- package/src/components/select.css +0 -201
- package/src/components/select.tsx +0 -174
- package/src/components/switch.css +0 -136
- package/src/components/switch.tsx +0 -29
- package/src/components/tabs.tsx +0 -126
- package/src/components/tag.css +0 -37
- package/src/components/tag.tsx +0 -22
- package/src/components/toast.css +0 -236
- package/src/components/toast.tsx +0 -185
- package/src/components/tooltip.css +0 -74
- package/src/components/tooltip.tsx +0 -163
- package/src/v2/components/accordion-v2.css +0 -139
- package/src/v2/components/accordion-v2.tsx +0 -86
- package/src/v2/components/button-v2.tsx +0 -35
- package/src/v2/components/checkbox-v2.css +0 -184
- package/src/v2/components/checkbox-v2.tsx +0 -65
- package/src/v2/components/diff-changes-v2.css +0 -26
- package/src/v2/components/icon-button-v2.tsx +0 -37
- package/src/v2/components/inline-input-v2.css +0 -225
- package/src/v2/components/inline-input-v2.tsx +0 -107
- package/src/v2/components/progress-circle-v2.css +0 -13
- package/src/v2/components/progress-circle-v2.tsx +0 -52
- package/src/v2/components/switch-v2.tsx +0 -28
- package/src/v2/components/tabs-v2.tsx +0 -149
- package/src/v2/components/text-shimmer-v2.css +0 -125
- package/src/v2/components/text-shimmer-v2.tsx +0 -63
- /package/dist/{components → forms/inline-input}/inline-input.d.ts +0 -0
- /package/dist/{v2/components → navigation}/tab-state-indicator.d.ts +0 -0
- /package/src/{v2/components/button-v2.css → actions/button/button.css} +0 -0
- /package/src/{v2/components/icon-button-v2.css → actions/icon-button/icon-button.css} +0 -0
- /package/src/{v2/components/avatar-v2.css → data-display/avatar/avatar.css} +0 -0
- /package/src/{v2/components/project-avatar-v2.css → data-display/project-avatar/project-avatar.css} +0 -0
- /package/src/{v2/components/loader-v2.css → feedback/loader/loader.css} +0 -0
- /package/src/{v2/components/toast-v2.css → feedback/toast/toast.css} +0 -0
- /package/src/{components → forms/inline-input}/inline-input.css +0 -0
- /package/src/{components → forms/inline-input}/inline-input.tsx +0 -0
- /package/src/{v2/components/radio-v2.css → forms/radio/radio.css} +0 -0
- /package/src/{v2/components/textarea-v2.css → forms/textarea/textarea.css} +0 -0
- /package/src/{v2/components/divider-v2.css → layout/divider/divider.css} +0 -0
- /package/src/{v2/components → navigation}/tab-state-indicator.tsx +0 -0
- /package/src/{v2/components/file-tree-v2.css → styles/file-tree.css} +0 -0
- /package/src/{v2/styles → styles/tokens}/colors.css +0 -0
- /package/src/{v2/styles/tailwind.css → styles/tokens/index.css} +0 -0
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
type ComponentProps,
|
|
12
12
|
type ParentProps,
|
|
13
13
|
} from "solid-js"
|
|
14
|
-
import {
|
|
15
|
-
import "./field
|
|
14
|
+
import { Tooltip } from "@opencode-ai/ui/tooltip"
|
|
15
|
+
import "./field.css"
|
|
16
16
|
|
|
17
17
|
type FieldContextValue = {
|
|
18
18
|
controlId: string
|
|
@@ -40,14 +40,14 @@ function useField() {
|
|
|
40
40
|
const CONTROL_SELECTOR = [
|
|
41
41
|
"[data-slot='text-input-v2-input']",
|
|
42
42
|
"[data-slot='textarea-v2-textarea']",
|
|
43
|
-
"[data-
|
|
43
|
+
"[data-component='inline-input']",
|
|
44
44
|
].join(", ")
|
|
45
45
|
|
|
46
|
-
export interface
|
|
46
|
+
export interface FieldProps extends ComponentProps<"div"> {
|
|
47
47
|
invalid?: boolean
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
function
|
|
50
|
+
function FieldRoot(props: ParentProps<FieldProps>) {
|
|
51
51
|
const [local, rest] = splitProps(props, ["invalid", "class", "classList", "children"])
|
|
52
52
|
|
|
53
53
|
const controlId = `field-control-${createUniqueId()}`
|
|
@@ -86,7 +86,7 @@ function FieldV2Root(props: ParentProps<FieldV2Props>) {
|
|
|
86
86
|
if (!control) return
|
|
87
87
|
|
|
88
88
|
const shell = control.closest(
|
|
89
|
-
"[data-component='text-input-v2'], [data-component='textarea-v2'], [data-component='inline-input
|
|
89
|
+
"[data-component='text-input-v2'], [data-component='textarea-v2'], [data-component='inline-input']",
|
|
90
90
|
) as HTMLElement | null
|
|
91
91
|
|
|
92
92
|
control.id = controlId
|
|
@@ -173,7 +173,7 @@ function FieldLabel(props: ParentProps<FieldLabelProps>) {
|
|
|
173
173
|
<span data-slot="field-v2-label-text">{local.children}</span>
|
|
174
174
|
<Show when={local.tooltip}>
|
|
175
175
|
{(tooltip) => (
|
|
176
|
-
<
|
|
176
|
+
<Tooltip value={tooltip()}>
|
|
177
177
|
<button
|
|
178
178
|
type="button"
|
|
179
179
|
data-slot="field-v2-label-info"
|
|
@@ -182,7 +182,7 @@ function FieldLabel(props: ParentProps<FieldLabelProps>) {
|
|
|
182
182
|
>
|
|
183
183
|
<FieldLabelInfoIcon />
|
|
184
184
|
</button>
|
|
185
|
-
</
|
|
185
|
+
</Tooltip>
|
|
186
186
|
)}
|
|
187
187
|
</Show>
|
|
188
188
|
</label>
|
|
@@ -255,11 +255,9 @@ function FieldControl(props: ParentProps<ComponentProps<"div">>) {
|
|
|
255
255
|
)
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
export const
|
|
258
|
+
export const Field = Object.assign(FieldRoot, {
|
|
259
259
|
Label: FieldLabel,
|
|
260
260
|
Prefix: FieldPrefix,
|
|
261
261
|
Suffix: FieldSuffix,
|
|
262
262
|
Control: FieldControl,
|
|
263
263
|
})
|
|
264
|
-
|
|
265
|
-
export const Field = FieldV2
|
|
@@ -1,18 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Description,
|
|
3
|
+
ErrorMessage,
|
|
4
|
+
Item,
|
|
5
|
+
ItemControl,
|
|
6
|
+
ItemIndicator,
|
|
7
|
+
ItemInput,
|
|
8
|
+
ItemLabel,
|
|
9
|
+
Label,
|
|
10
|
+
Root,
|
|
11
|
+
} from "@kobalte/core/radio-group"
|
|
2
12
|
import { Show, splitProps, type JSX } from "solid-js"
|
|
3
13
|
import type { ComponentProps, ParentProps } from "solid-js"
|
|
4
|
-
import "./radio
|
|
14
|
+
import "./radio.css"
|
|
5
15
|
|
|
6
|
-
export interface
|
|
16
|
+
export interface RadioGroupProps extends ParentProps<ComponentProps<typeof Root>> {
|
|
7
17
|
label?: JSX.Element
|
|
8
18
|
description?: JSX.Element
|
|
9
19
|
hideLabel?: boolean
|
|
10
20
|
}
|
|
11
21
|
|
|
12
|
-
export function
|
|
22
|
+
export function RadioGroup(props: RadioGroupProps) {
|
|
13
23
|
const [local, others] = splitProps(props, ["class", "classList", "children", "label", "description", "hideLabel"])
|
|
14
24
|
return (
|
|
15
|
-
<
|
|
25
|
+
<Root
|
|
16
26
|
{...others}
|
|
17
27
|
data-component="radio-v2"
|
|
18
28
|
classList={{
|
|
@@ -22,30 +32,30 @@ export function RadioGroupV2(props: RadioGroupV2Props) {
|
|
|
22
32
|
>
|
|
23
33
|
<Show when={local.label}>
|
|
24
34
|
{(label) => (
|
|
25
|
-
<
|
|
35
|
+
<Label data-slot="radio-v2-label" classList={{ "sr-only": local.hideLabel }}>
|
|
26
36
|
{label()}
|
|
27
|
-
</
|
|
37
|
+
</Label>
|
|
28
38
|
)}
|
|
29
39
|
</Show>
|
|
30
40
|
<Show when={local.description}>
|
|
31
|
-
{(description) => <
|
|
41
|
+
{(description) => <Description data-slot="radio-v2-description">{description()}</Description>}
|
|
32
42
|
</Show>
|
|
33
43
|
<div data-slot="radio-v2-items">{local.children}</div>
|
|
34
|
-
<
|
|
35
|
-
</
|
|
44
|
+
<ErrorMessage data-slot="radio-v2-error" />
|
|
45
|
+
</Root>
|
|
36
46
|
)
|
|
37
47
|
}
|
|
38
48
|
|
|
39
|
-
export interface
|
|
49
|
+
export interface RadioItemProps extends ComponentProps<typeof Item> {
|
|
40
50
|
label: JSX.Element
|
|
41
51
|
description?: JSX.Element
|
|
42
52
|
hideLabel?: boolean
|
|
43
53
|
}
|
|
44
54
|
|
|
45
|
-
export function
|
|
55
|
+
export function RadioItem(props: RadioItemProps) {
|
|
46
56
|
const [local, others] = splitProps(props, ["class", "classList", "label", "description", "hideLabel"])
|
|
47
57
|
return (
|
|
48
|
-
<
|
|
58
|
+
<Item
|
|
49
59
|
{...others}
|
|
50
60
|
data-slot="radio-v2-item"
|
|
51
61
|
classList={{
|
|
@@ -53,20 +63,20 @@ export function RadioItemV2(props: RadioItemV2Props) {
|
|
|
53
63
|
[local.class ?? ""]: !!local.class,
|
|
54
64
|
}}
|
|
55
65
|
>
|
|
56
|
-
<
|
|
66
|
+
<ItemInput data-slot="radio-v2-item-input" />
|
|
57
67
|
<div data-slot="radio-v2-item-control-stack">
|
|
58
|
-
<
|
|
59
|
-
<
|
|
60
|
-
</
|
|
68
|
+
<ItemControl data-slot="radio-v2-item-control">
|
|
69
|
+
<ItemIndicator data-slot="radio-v2-item-indicator" />
|
|
70
|
+
</ItemControl>
|
|
61
71
|
</div>
|
|
62
|
-
<
|
|
72
|
+
<ItemLabel data-slot="radio-v2-item-label" classList={{ "sr-only": local.hideLabel }}>
|
|
63
73
|
<div data-slot="radio-v2-item-text">
|
|
64
74
|
<span data-slot="radio-v2-item-label-text">{local.label}</span>
|
|
65
75
|
<Show when={local.description}>
|
|
66
76
|
{(description) => <span data-slot="radio-v2-item-description">{description()}</span>}
|
|
67
77
|
</Show>
|
|
68
78
|
</div>
|
|
69
|
-
</
|
|
70
|
-
</
|
|
79
|
+
</ItemLabel>
|
|
80
|
+
</Item>
|
|
71
81
|
)
|
|
72
82
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@import "
|
|
1
|
+
@import "../../navigation/menu/menu.css";
|
|
2
2
|
|
|
3
3
|
/* Above modal dialogs (z-index 50); matches legacy select-content. */
|
|
4
4
|
[data-popper-positioner]:has([data-slot="select-v2-content"]) {
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
/*
|
|
49
|
+
/* Shared trigger structure for the inline control. */
|
|
50
50
|
[data-component="select-v2"] {
|
|
51
51
|
box-sizing: border-box;
|
|
52
52
|
display: flex;
|
|
@@ -73,12 +73,6 @@
|
|
|
73
73
|
box-shadow 85ms ease-out;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
[data-component="select-v2"][data-appearance="large"] {
|
|
77
|
-
height: 32px;
|
|
78
|
-
padding-block: 0;
|
|
79
|
-
padding-inline: 0 8px;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
76
|
[data-component="select-v2"]:where(:hover):not([data-disabled], [data-invalid]):not(:focus-within):not(
|
|
83
77
|
[data-expanded]
|
|
84
78
|
) {
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
44
|
-
ComponentProps<typeof
|
|
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,13 @@ 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
|
|
62
71
|
}
|
|
63
72
|
|
|
64
|
-
export function
|
|
73
|
+
export function Select<T>(props: SelectProps<T>) {
|
|
65
74
|
const [local, others] = splitProps(props, [
|
|
66
75
|
"class",
|
|
67
76
|
"classList",
|
|
@@ -75,7 +84,6 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
|
|
|
75
84
|
"onHighlight",
|
|
76
85
|
"onOpenChange",
|
|
77
86
|
"children",
|
|
78
|
-
"appearance",
|
|
79
87
|
"invalid",
|
|
80
88
|
"numeric",
|
|
81
89
|
"disabled",
|
|
@@ -88,8 +96,6 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
|
|
|
88
96
|
"fitViewport",
|
|
89
97
|
])
|
|
90
98
|
|
|
91
|
-
const inline = () => (local.appearance ?? "base") === "inline"
|
|
92
|
-
|
|
93
99
|
const state: { key?: string; cleanup?: void | (() => void) } = {}
|
|
94
100
|
|
|
95
101
|
const stop = () => {
|
|
@@ -118,15 +124,15 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
|
|
|
118
124
|
const grouped = createMemo(() => groupOptions(local.options, local.groupBy))
|
|
119
125
|
|
|
120
126
|
return (
|
|
121
|
-
<
|
|
127
|
+
<Root<T, { category: string; options: T[] }>
|
|
122
128
|
{...others}
|
|
123
129
|
multiple={false}
|
|
124
130
|
allowDuplicateSelectionEvents={false}
|
|
125
131
|
disabled={local.disabled}
|
|
126
132
|
data-component="select-v2-root"
|
|
127
|
-
placement={local.placement ??
|
|
133
|
+
placement={local.placement ?? "bottom-end"}
|
|
128
134
|
gutter={local.gutter ?? 4}
|
|
129
|
-
sameWidth={local.sameWidth ??
|
|
135
|
+
sameWidth={local.sameWidth ?? false}
|
|
130
136
|
flip={local.flip ?? true}
|
|
131
137
|
slide={local.slide ?? true}
|
|
132
138
|
fitViewport={local.fitViewport ?? false}
|
|
@@ -137,31 +143,31 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
|
|
|
137
143
|
optionGroupChildren="options"
|
|
138
144
|
placeholder={local.placeholder}
|
|
139
145
|
sectionComponent={(sectionProps) => (
|
|
140
|
-
<
|
|
146
|
+
<Section>
|
|
141
147
|
<Show when={sectionProps.section.rawValue.category}>
|
|
142
148
|
<div data-slot="menu-v2-group-label">{sectionProps.section.rawValue.category}</div>
|
|
143
149
|
</Show>
|
|
144
|
-
</
|
|
150
|
+
</Section>
|
|
145
151
|
)}
|
|
146
152
|
itemComponent={(itemProps) => (
|
|
147
|
-
<
|
|
153
|
+
<Item
|
|
148
154
|
{...itemProps}
|
|
149
155
|
data-component="menu-v2-item"
|
|
150
156
|
onPointerEnter={() => move(itemProps.item.rawValue)}
|
|
151
157
|
onPointerMove={() => move(itemProps.item.rawValue)}
|
|
152
158
|
onFocus={() => move(itemProps.item.rawValue)}
|
|
153
159
|
>
|
|
154
|
-
<
|
|
160
|
+
<ItemLabel data-slot="menu-v2-item-content" as="span">
|
|
155
161
|
{local.children
|
|
156
162
|
? local.children(itemProps.item.rawValue)
|
|
157
163
|
: local.label
|
|
158
164
|
? local.label(itemProps.item.rawValue)
|
|
159
165
|
: String(itemProps.item.rawValue as string)}
|
|
160
|
-
</
|
|
161
|
-
<
|
|
166
|
+
</ItemLabel>
|
|
167
|
+
<ItemIndicator data-slot="menu-v2-item-indicator" forceMount>
|
|
162
168
|
<CheckSmall />
|
|
163
|
-
</
|
|
164
|
-
</
|
|
169
|
+
</ItemIndicator>
|
|
170
|
+
</Item>
|
|
165
171
|
)}
|
|
166
172
|
onChange={(next) => {
|
|
167
173
|
const v = next == null ? null : Array.isArray(next) ? ((next[0] as T) ?? null) : (next as T)
|
|
@@ -173,10 +179,10 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
|
|
|
173
179
|
if (!open) stop()
|
|
174
180
|
}}
|
|
175
181
|
>
|
|
176
|
-
<
|
|
182
|
+
<Trigger
|
|
177
183
|
as="div"
|
|
178
184
|
data-component="select-v2"
|
|
179
|
-
data-appearance=
|
|
185
|
+
data-appearance="inline"
|
|
180
186
|
data-invalid={local.invalid ? "" : undefined}
|
|
181
187
|
data-numeric={local.numeric ? "" : undefined}
|
|
182
188
|
disabled={local.disabled}
|
|
@@ -187,23 +193,23 @@ export function SelectV2<T>(props: SelectV2Props<T>) {
|
|
|
187
193
|
}}
|
|
188
194
|
>
|
|
189
195
|
<div data-slot="select-v2-value">
|
|
190
|
-
<
|
|
196
|
+
<Value<T> data-slot="select-v2-value-text" class={local.valueClass}>
|
|
191
197
|
{(st) => {
|
|
192
198
|
const selected = st.selectedOption()
|
|
193
199
|
if (local.label && selected != null) return local.label(selected)
|
|
194
200
|
return selected != null ? (selected as string) : ""
|
|
195
201
|
}}
|
|
196
|
-
</
|
|
202
|
+
</Value>
|
|
197
203
|
</div>
|
|
198
204
|
<span data-slot="select-v2-chevron" aria-hidden="true">
|
|
199
205
|
<ChevronDown />
|
|
200
206
|
</span>
|
|
201
|
-
</
|
|
202
|
-
<
|
|
203
|
-
<
|
|
204
|
-
<
|
|
205
|
-
</
|
|
206
|
-
</
|
|
207
|
-
</
|
|
207
|
+
</Trigger>
|
|
208
|
+
<Portal>
|
|
209
|
+
<Content data-component="menu-v2-content" data-slot="select-v2-content">
|
|
210
|
+
<Listbox data-slot="select-v2-listbox" />
|
|
211
|
+
</Content>
|
|
212
|
+
</Portal>
|
|
213
|
+
</Root>
|
|
208
214
|
)
|
|
209
215
|
}
|
|
@@ -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
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type ComponentProps, type JSX, Show, splitProps } from "solid-js"
|
|
2
|
-
import { Icon } from "
|
|
2
|
+
import { Icon } from "@opencode-ai/ui/icon"
|
|
3
3
|
import { useI18n } from "../../context/i18n"
|
|
4
|
-
import "./text-input
|
|
4
|
+
import "./text-input.css"
|
|
5
5
|
|
|
6
|
-
export interface
|
|
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
|
|
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
|
|
2
|
+
import "./textarea.css"
|
|
3
3
|
|
|
4
|
-
export interface
|
|
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
|
|
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
|
@@ -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": "ለምርጥ ክፍት ምንጭ ሞዴሎች ታማኝ መዳረሻ ለማግኘት
|
|
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":
|
|
@@ -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}} ወኪል",
|
package/src/i18n/ar.ts
CHANGED
|
@@ -77,7 +77,7 @@ export const dict = {
|
|
|
77
77
|
|
|
78
78
|
"dialog.usageExceeded.freeTier.title": "تم الوصول إلى الحد المجاني",
|
|
79
79
|
"dialog.usageExceeded.freeTier.description":
|
|
80
|
-
"اشترك في OpenCode Go
|
|
80
|
+
"اشترك في OpenCode Go للحصول على وصول موثوق إلى أفضل النماذج مفتوحة المصدر، ابتداءً من $5/شهر.",
|
|
81
81
|
"dialog.usageExceeded.freeTier.actionLabel": "اشترك",
|
|
82
82
|
"dialog.usageExceeded.accountRateLimit.title": "تم الوصول إلى حد Go",
|
|
83
83
|
"dialog.usageExceeded.accountRateLimit.description":
|
|
@@ -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}}",
|
package/src/i18n/az.ts
CHANGED
|
@@ -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 $
|
|
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":
|
|
@@ -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",
|
package/src/i18n/bg.ts
CHANGED
|
@@ -69,7 +69,7 @@ export const dict = {
|
|
|
69
69
|
"ui.sessionTurn.error.addCredits": "Добавете кредити",
|
|
70
70
|
"dialog.usageExceeded.freeTier.title": "Безплатният лимит е достигнат",
|
|
71
71
|
"dialog.usageExceeded.freeTier.description":
|
|
72
|
-
"Абонирайте се за OpenCode Go за надежден достъп до най-добрите модели с отворен
|
|
72
|
+
"Абонирайте се за OpenCode Go за надежден достъп до най-добрите модели с отворен код, започващи от $5/месец.",
|
|
73
73
|
"dialog.usageExceeded.freeTier.actionLabel": "Абонирайте се",
|
|
74
74
|
"dialog.usageExceeded.accountRateLimit.title": "Лимитът за движение е достигнат",
|
|
75
75
|
"dialog.usageExceeded.accountRateLimit.description":
|
|
@@ -143,8 +143,6 @@ export const dict = {
|
|
|
143
143
|
"ui.tool.websearch.provider": "{{provider}} Търсене в мрежата",
|
|
144
144
|
"ui.tool.shell": "Shell",
|
|
145
145
|
"ui.tool.patch": "Patch",
|
|
146
|
-
"ui.tool.todos": "Задачи",
|
|
147
|
-
"ui.tool.todos.read": "Прочетете задачи",
|
|
148
146
|
"ui.tool.questions": "Въпроси",
|
|
149
147
|
"ui.tool.questions.numbered": "Въпроси {{number}}",
|
|
150
148
|
"ui.tool.agent": "{{type}} Агент",
|