@opencode-ai/ui 0.0.0-dev-202609030903 → 0.0.0-dev-18996
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/context/marked-base.d.ts +3 -0
- package/dist/context/marked-parser.d.ts +1 -2
- 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/hooks/use-filtered-list.d.ts +9 -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 +234 -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 +24 -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 +140 -34
- 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 +1 -0
- package/src/context/i18n.tsx +17 -14
- package/src/context/marked-base.tsx +27 -0
- package/src/context/marked-parser.tsx +3 -13
- package/src/{components → data-display/accordion}/accordion.css +5 -31
- 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} +4 -4
- 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} +40 -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 +7 -9
- package/src/i18n/ar.ts +7 -9
- package/src/i18n/az.ts +7 -9
- package/src/i18n/bg.ts +7 -9
- package/src/i18n/bn.ts +7 -9
- package/src/i18n/br.ts +7 -9
- package/src/i18n/bs.ts +7 -9
- package/src/i18n/ca.ts +7 -9
- package/src/i18n/cs.ts +7 -9
- package/src/i18n/da.ts +7 -9
- package/src/i18n/de.ts +1 -3
- package/src/i18n/dv.ts +7 -9
- package/src/i18n/dz.ts +5 -7
- package/src/i18n/el.ts +7 -9
- package/src/i18n/en.ts +50 -11
- package/src/i18n/es.ts +6 -8
- package/src/i18n/et.ts +7 -9
- package/src/i18n/fa.ts +7 -9
- package/src/i18n/fi.ts +7 -9
- package/src/i18n/fo.ts +7 -9
- package/src/i18n/fr.ts +6 -8
- package/src/i18n/he.ts +199 -0
- package/src/i18n/hi.ts +7 -9
- package/src/i18n/hr.ts +7 -9
- package/src/i18n/hu.ts +7 -9
- package/src/i18n/hy.ts +7 -9
- package/src/i18n/id.ts +7 -9
- package/src/i18n/is.ts +7 -9
- package/src/i18n/it.ts +7 -9
- package/src/i18n/ja.ts +7 -9
- package/src/i18n/ka.ts +7 -9
- package/src/i18n/km.ts +7 -9
- package/src/i18n/ko.ts +7 -9
- package/src/i18n/lo.ts +7 -9
- package/src/i18n/lt.ts +7 -9
- package/src/i18n/lv.ts +7 -9
- package/src/i18n/mk.ts +7 -9
- package/src/i18n/mn.ts +7 -9
- package/src/i18n/ms.ts +7 -9
- package/src/i18n/my.ts +7 -9
- package/src/i18n/ne.ts +7 -9
- package/src/i18n/nl.ts +7 -9
- package/src/i18n/no.ts +7 -9
- package/src/i18n/pa.ts +7 -9
- package/src/i18n/pl.ts +7 -9
- package/src/i18n/ro.ts +7 -9
- package/src/i18n/ru.ts +7 -9
- package/src/i18n/si.ts +7 -9
- package/src/i18n/sk.ts +7 -9
- package/src/i18n/sl.ts +7 -9
- package/src/i18n/sq.ts +7 -9
- package/src/i18n/sr.ts +7 -9
- package/src/i18n/sv.ts +7 -9
- package/src/i18n/tg.ts +7 -9
- package/src/i18n/th.ts +7 -9
- package/src/i18n/tk.ts +7 -9
- package/src/i18n/tr.ts +7 -9
- package/src/i18n/uk.ts +7 -9
- package/src/i18n/ur.ts +7 -9
- package/src/i18n/uz.ts +7 -9
- package/src/i18n/vi.ts +7 -9
- package/src/i18n/zh.ts +7 -9
- package/src/i18n/zht.ts +7 -9
- 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 +51 -10
- package/src/{v2/components/divider-v2.tsx → layout/divider/divider.tsx} +3 -3
- package/src/{v2/components/menu-v2.css → navigation/menu/menu.css} +123 -2
- 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} +24 -17
- package/src/styles/base.css +5 -0
- 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/styles/theme.css +2 -2
- package/src/{v2/styles → styles/tokens}/theme.css +18 -14
- 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/theme/v2/mapping.ts +4 -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} +2 -2
- 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
|
@@ -6,18 +6,27 @@
|
|
|
6
6
|
justify-content: flex-end;
|
|
7
7
|
align-items: center;
|
|
8
8
|
|
|
9
|
-
[data-slot="diff-changes-additions"]
|
|
10
|
-
|
|
11
|
-
font-
|
|
12
|
-
font-size: 14px;
|
|
9
|
+
[data-slot="diff-changes-additions"],
|
|
10
|
+
[data-slot="diff-changes-deletions"] {
|
|
11
|
+
font-size: 11px;
|
|
13
12
|
font-style: normal;
|
|
14
|
-
font-weight:
|
|
15
|
-
line-height:
|
|
16
|
-
letter-spacing:
|
|
13
|
+
font-weight: 440;
|
|
14
|
+
line-height: 1;
|
|
15
|
+
letter-spacing: 0.05px;
|
|
17
16
|
text-align: right;
|
|
18
|
-
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[data-slot="diff-changes-additions"] {
|
|
20
|
+
color: var(--v2-state-fg-success);
|
|
19
21
|
}
|
|
20
22
|
|
|
23
|
+
[data-slot="diff-changes-deletions"] {
|
|
24
|
+
color: var(--v2-state-fg-danger);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
[data-component="diff-changes"][data-appearance="standard"] {
|
|
29
|
+
[data-slot="diff-changes-additions"],
|
|
21
30
|
[data-slot="diff-changes-deletions"] {
|
|
22
31
|
font-family: var(--font-family-mono);
|
|
23
32
|
font-feature-settings: var(--font-family-mono--font-feature-settings);
|
|
@@ -26,19 +35,13 @@
|
|
|
26
35
|
font-weight: var(--font-weight-regular);
|
|
27
36
|
line-height: var(--line-height-large);
|
|
28
37
|
letter-spacing: var(--letter-spacing-normal);
|
|
29
|
-
text-align: right;
|
|
30
|
-
color: var(--text-diff-delete-base);
|
|
31
38
|
}
|
|
32
|
-
}
|
|
33
39
|
|
|
34
|
-
[data-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
flex-shrink: 0;
|
|
40
|
+
[data-slot="diff-changes-additions"] {
|
|
41
|
+
color: var(--text-diff-add-base);
|
|
42
|
+
}
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
width: 100%;
|
|
42
|
-
height: 100%;
|
|
44
|
+
[data-slot="diff-changes-deletions"] {
|
|
45
|
+
color: var(--text-diff-delete-base);
|
|
43
46
|
}
|
|
44
47
|
}
|
package/src/{v2/components/diff-changes-v2.tsx → data-display/diff-changes/diff-changes.tsx}
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createMemo, Show } from "solid-js"
|
|
2
|
-
import "./diff-changes
|
|
2
|
+
import "./diff-changes.css"
|
|
3
3
|
|
|
4
4
|
export function DiffChanges(props: {
|
|
5
5
|
class?: string
|
|
6
|
+
appearance?: "standard" | "compact"
|
|
6
7
|
changes: { additions: number; deletions: number } | { additions: number; deletions: number }[]
|
|
7
8
|
}) {
|
|
8
9
|
const additions = createMemo(() =>
|
|
@@ -19,7 +20,11 @@ export function DiffChanges(props: {
|
|
|
19
20
|
|
|
20
21
|
return (
|
|
21
22
|
<Show when={total() > 0}>
|
|
22
|
-
<div
|
|
23
|
+
<div
|
|
24
|
+
data-component="diff-changes"
|
|
25
|
+
data-appearance={props.appearance ?? "compact"}
|
|
26
|
+
classList={{ [props.class ?? ""]: true }}
|
|
27
|
+
>
|
|
23
28
|
<span data-slot="diff-changes-additions">{`+${additions()}`}</span>
|
|
24
29
|
<span data-slot="diff-changes-deletions">{`-${deletions()}`}</span>
|
|
25
30
|
</div>
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
justify-content: center;
|
|
28
28
|
align-items: center;
|
|
29
29
|
padding: 0;
|
|
30
|
+
padding-inline: 4px;
|
|
30
31
|
gap: 4px;
|
|
31
32
|
min-width: 14px;
|
|
32
33
|
height: 14px;
|
|
@@ -48,7 +49,6 @@
|
|
|
48
49
|
flex-direction: row;
|
|
49
50
|
justify-content: center;
|
|
50
51
|
align-items: center;
|
|
51
|
-
min-width: 14px;
|
|
52
52
|
height: 11px;
|
|
53
53
|
padding: 0;
|
|
54
54
|
flex: none;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type ComponentProps, For, splitProps } from "solid-js"
|
|
2
|
-
import "./keybind
|
|
2
|
+
import "./keybind.css"
|
|
3
3
|
|
|
4
|
-
export interface
|
|
4
|
+
export interface KeybindProps extends ComponentProps<"div"> {
|
|
5
5
|
keys: string[]
|
|
6
6
|
variant?: "neutral" | "ghost"
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export function
|
|
9
|
+
export function Keybind(props: KeybindProps) {
|
|
10
10
|
const [local, rest] = splitProps(props, ["keys", "variant", "class", "classList"])
|
|
11
11
|
return (
|
|
12
12
|
<div
|
package/src/{v2/components/line-comment-v2.css → data-display/line-comment/line-comment.css}
RENAMED
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
font-size: 13px;
|
|
50
50
|
font-style: normal;
|
|
51
51
|
font-weight: 440;
|
|
52
|
-
line-height:
|
|
52
|
+
line-height: var(--line-height-compact);
|
|
53
53
|
letter-spacing: -0.04px;
|
|
54
54
|
color: var(--v2-text-text-base);
|
|
55
55
|
font-variation-settings: "slnt" 0;
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
font-size: 11px;
|
|
60
60
|
font-style: normal;
|
|
61
61
|
font-weight: 530;
|
|
62
|
-
line-height:
|
|
62
|
+
line-height: var(--line-height-tight);
|
|
63
63
|
letter-spacing: 0.05px;
|
|
64
64
|
color: var(--v2-text-text-faint);
|
|
65
65
|
font-variation-settings: "slnt" 0;
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
background-color: var(--v2-overlay-simple-overlay-hover);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
[data-slot="line-comment-v2-overflow"]:is(:active, [data-state="pressed"]) {
|
|
106
|
+
[data-slot="line-comment-v2-overflow"]:is(:active, [data-state="pressed"], [data-expanded]) {
|
|
107
107
|
background-color: var(--v2-overlay-simple-overlay-pressed);
|
|
108
108
|
}
|
|
109
109
|
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
font-size: 13px;
|
|
139
139
|
font-style: normal;
|
|
140
140
|
font-weight: 530;
|
|
141
|
-
line-height:
|
|
141
|
+
line-height: var(--line-height-compact);
|
|
142
142
|
letter-spacing: -0.04px;
|
|
143
143
|
color: var(--v2-text-text-base);
|
|
144
144
|
user-select: none;
|
package/src/{v2/components/line-comment-v2.tsx → data-display/line-comment/line-comment.tsx}
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { For, Show, createSignal, onMount, splitProps, type ComponentProps, type JSX } from "solid-js"
|
|
2
|
-
import { FileIcon } from "
|
|
2
|
+
import { FileIcon } from "@opencode-ai/ui/file-icon"
|
|
3
3
|
import { useI18n } from "../../context/i18n"
|
|
4
4
|
import { useFilteredList } from "../../hooks"
|
|
5
|
-
import {
|
|
6
|
-
import "./line-comment
|
|
5
|
+
import { Button } from "@opencode-ai/ui/button"
|
|
6
|
+
import "./line-comment.css"
|
|
7
7
|
|
|
8
8
|
/** Horizontal “more” glyph for the display-card overflow control (Figma outline-dots). */
|
|
9
|
-
export function
|
|
9
|
+
export function LineCommentOverflowIcon(props: ComponentProps<"svg">) {
|
|
10
10
|
return (
|
|
11
11
|
<svg
|
|
12
12
|
{...props}
|
|
@@ -24,16 +24,16 @@ export function LineCommentV2OverflowIcon(props: ComponentProps<"svg">) {
|
|
|
24
24
|
)
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export interface
|
|
27
|
+
export interface LineCommentProps extends ComponentProps<"div"> {
|
|
28
28
|
/** Main comment body (text or rich content). */
|
|
29
29
|
comment: JSX.Element
|
|
30
30
|
/** Line / selection context (e.g. “Comment on line 40”). */
|
|
31
31
|
selection: JSX.Element
|
|
32
|
-
/** Typically an overflow menu trigger; use `
|
|
32
|
+
/** Typically an overflow menu trigger; use `LineCommentOverflowIcon` inside `line-comment-v2-overflow`. */
|
|
33
33
|
actions?: JSX.Element
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export function
|
|
36
|
+
export function LineComment(props: LineCommentProps) {
|
|
37
37
|
const [local, rest] = splitProps(props, ["comment", "selection", "actions", "class", "classList"])
|
|
38
38
|
return (
|
|
39
39
|
<div
|
|
@@ -56,11 +56,11 @@ export function LineCommentV2(props: LineCommentV2Props) {
|
|
|
56
56
|
)
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
export type
|
|
59
|
+
export type LineCommentEditorMention = {
|
|
60
60
|
items: (query: string) => string[] | Promise<string[]>
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export interface
|
|
63
|
+
export interface LineCommentEditorProps extends Omit<ComponentProps<"div">, "children" | "onInput" | "onSubmit"> {
|
|
64
64
|
/** Visible field label above the textarea (default: “Comment”). */
|
|
65
65
|
heading?: JSX.Element | string
|
|
66
66
|
value: string
|
|
@@ -73,7 +73,7 @@ export interface LineCommentEditorV2Props extends Omit<ComponentProps<"div">, "c
|
|
|
73
73
|
cancelLabel?: string
|
|
74
74
|
submitLabel?: string
|
|
75
75
|
autofocus?: boolean
|
|
76
|
-
mention?:
|
|
76
|
+
mention?: LineCommentEditorMention
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
function pathFilename(path: string) {
|
|
@@ -86,7 +86,7 @@ function pathDirectory(path: string) {
|
|
|
86
86
|
return index === -1 ? "" : path.slice(0, index + 1)
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
export function
|
|
89
|
+
export function LineCommentEditor(props: LineCommentEditorProps) {
|
|
90
90
|
const i18n = useI18n()
|
|
91
91
|
let textareaRef: HTMLTextAreaElement | undefined
|
|
92
92
|
const [mentionOpen, setMentionOpen] = createSignal(false)
|
|
@@ -212,9 +212,11 @@ export function LineCommentEditorV2(props: LineCommentEditorV2Props) {
|
|
|
212
212
|
textareaRef = el
|
|
213
213
|
}}
|
|
214
214
|
data-slot="line-comment-v2-textarea"
|
|
215
|
+
dir="auto"
|
|
215
216
|
rows={local.rows ?? 3}
|
|
216
217
|
placeholder={local.placeholder ?? i18n.t("ui.lineComment.contextPlaceholder")}
|
|
217
218
|
value={local.value}
|
|
219
|
+
style={{ "unicode-bidi": "plaintext", "text-align": "start" }}
|
|
218
220
|
onInput={(e) => {
|
|
219
221
|
local.onInput(e.currentTarget.value)
|
|
220
222
|
syncMention()
|
|
@@ -292,12 +294,12 @@ export function LineCommentEditorV2(props: LineCommentEditorV2Props) {
|
|
|
292
294
|
<div data-slot="line-comment-v2-footer">
|
|
293
295
|
<div data-slot="line-comment-v2-footer-meta">{local.selection}</div>
|
|
294
296
|
<div data-slot="line-comment-v2-footer-actions">
|
|
295
|
-
<
|
|
297
|
+
<Button type="button" size="normal" variant="ghost" onClick={() => local.onCancel()}>
|
|
296
298
|
{local.cancelLabel ?? i18n.t("ui.lineComment.cancel")}
|
|
297
|
-
</
|
|
298
|
-
<
|
|
299
|
+
</Button>
|
|
300
|
+
<Button type="button" size="normal" variant="contrast" disabled={!canSubmit()} onClick={submit}>
|
|
299
301
|
{local.submitLabel ?? i18n.t("ui.lineComment.submit")}
|
|
300
|
-
</
|
|
302
|
+
</Button>
|
|
301
303
|
</div>
|
|
302
304
|
</div>
|
|
303
305
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { splitProps, type ComponentProps } from "solid-js"
|
|
2
|
-
import "./loader
|
|
2
|
+
import "./loader.css"
|
|
3
3
|
|
|
4
|
-
export function
|
|
4
|
+
export function Loader(props: ComponentProps<"svg">) {
|
|
5
5
|
const [local, rest] = splitProps(props, ["class", "classList", "width", "height"])
|
|
6
6
|
return (
|
|
7
7
|
<svg
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
[data-component="progress-circle"] {
|
|
2
|
+
display: block;
|
|
3
|
+
transform: rotate(-90deg);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
[data-component="progress-circle"][data-appearance="compact"] [data-slot="progress-circle-background"] {
|
|
7
|
+
stroke: var(--v2-background-bg-layer-04);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
[data-component="progress-circle"][data-appearance="compact"] [data-slot="progress-circle-progress"] {
|
|
11
|
+
stroke: var(--v2-icon-icon-base);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
[data-component="progress-circle"][data-appearance="indicator"] [data-slot="progress-circle-background"] {
|
|
15
|
+
stroke: var(--progress-circle-background, var(--border-weak-base));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
[data-component="progress-circle"][data-appearance="indicator"] [data-slot="progress-circle-background-overlay"] {
|
|
19
|
+
stroke: var(--progress-circle-background-overlay, transparent);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
[data-component="progress-circle"][data-appearance="indicator"] [data-slot="progress-circle-progress"] {
|
|
23
|
+
stroke: var(--progress-circle-progress, var(--border-active));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
[data-component="progress-circle"] [data-slot="progress-circle-progress"] {
|
|
27
|
+
transition: stroke-dashoffset 0.35s cubic-bezier(0.65, 0, 0.35, 1);
|
|
28
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type ComponentProps, createMemo, Show, splitProps } from "solid-js"
|
|
2
|
+
import "./progress-circle.css"
|
|
3
|
+
|
|
4
|
+
export interface ProgressCircleProps extends Pick<ComponentProps<"svg">, "class" | "classList" | "style"> {
|
|
5
|
+
percentage: number
|
|
6
|
+
appearance?: "compact" | "indicator"
|
|
7
|
+
size?: number
|
|
8
|
+
strokeWidth?: number
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function ProgressCircle(props: ProgressCircleProps) {
|
|
12
|
+
const [local, rest] = splitProps(props, ["percentage", "appearance", "size", "strokeWidth", "class", "classList"])
|
|
13
|
+
|
|
14
|
+
const appearance = () => local.appearance ?? "compact"
|
|
15
|
+
const viewBoxSize = () => (appearance() === "indicator" ? 16 : 14)
|
|
16
|
+
const size = () => local.size ?? viewBoxSize()
|
|
17
|
+
const strokeWidth = () => local.strokeWidth ?? (appearance() === "indicator" ? 3 : 1.5)
|
|
18
|
+
const center = () => viewBoxSize() / 2
|
|
19
|
+
const radius = () => center() - strokeWidth() / 2
|
|
20
|
+
const circumference = createMemo(() => 2 * Math.PI * radius())
|
|
21
|
+
const offset = createMemo(() => circumference() * (1 - Math.max(0, Math.min(100, local.percentage || 0)) / 100))
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<svg
|
|
25
|
+
{...rest}
|
|
26
|
+
width={size()}
|
|
27
|
+
height={size()}
|
|
28
|
+
viewBox={`0 0 ${viewBoxSize()} ${viewBoxSize()}`}
|
|
29
|
+
fill="none"
|
|
30
|
+
data-component="progress-circle"
|
|
31
|
+
data-appearance={appearance()}
|
|
32
|
+
classList={{
|
|
33
|
+
...local.classList,
|
|
34
|
+
[local.class ?? ""]: !!local.class,
|
|
35
|
+
}}
|
|
36
|
+
>
|
|
37
|
+
<circle
|
|
38
|
+
cx={center()}
|
|
39
|
+
cy={center()}
|
|
40
|
+
r={radius()}
|
|
41
|
+
data-slot="progress-circle-background"
|
|
42
|
+
stroke-width={strokeWidth()}
|
|
43
|
+
/>
|
|
44
|
+
<Show when={appearance() === "indicator"}>
|
|
45
|
+
<circle
|
|
46
|
+
cx={center()}
|
|
47
|
+
cy={center()}
|
|
48
|
+
r={radius()}
|
|
49
|
+
data-slot="progress-circle-background-overlay"
|
|
50
|
+
stroke-width={strokeWidth()}
|
|
51
|
+
/>
|
|
52
|
+
</Show>
|
|
53
|
+
<circle
|
|
54
|
+
cx={center()}
|
|
55
|
+
cy={center()}
|
|
56
|
+
r={radius()}
|
|
57
|
+
data-slot="progress-circle-progress"
|
|
58
|
+
stroke-width={strokeWidth()}
|
|
59
|
+
stroke-dasharray={circumference().toString()}
|
|
60
|
+
stroke-dashoffset={offset()}
|
|
61
|
+
/>
|
|
62
|
+
</svg>
|
|
63
|
+
)
|
|
64
|
+
}
|
|
@@ -4,12 +4,12 @@ import type { ComponentProps, JSX } from "solid-js"
|
|
|
4
4
|
import { createContext, onCleanup, onMount, splitProps, useContext } from "solid-js"
|
|
5
5
|
import { Portal } from "solid-js/web"
|
|
6
6
|
import { useI18n } from "../../context/i18n"
|
|
7
|
-
import "
|
|
8
|
-
import "./toast
|
|
7
|
+
import "../../actions/button/button.css"
|
|
8
|
+
import "./toast.css"
|
|
9
9
|
|
|
10
|
-
export interface
|
|
10
|
+
export interface ToastRegionProps extends ToasterProps {}
|
|
11
11
|
|
|
12
|
-
function
|
|
12
|
+
function ToastRegion(props: ToastRegionProps) {
|
|
13
13
|
const i18n = useI18n()
|
|
14
14
|
const [local, rest] = splitProps(props, ["class", "className", "style", "toastOptions", "swipeDirections"])
|
|
15
15
|
onMount(() => {
|
|
@@ -67,40 +67,40 @@ function ToastV2Region(props: ToastV2RegionProps) {
|
|
|
67
67
|
)
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
const
|
|
70
|
+
const ToastContext = createContext<number>()
|
|
71
71
|
|
|
72
|
-
export interface
|
|
72
|
+
export interface ToastRootComponentProps {
|
|
73
73
|
toastId: number
|
|
74
74
|
children?: JSX.Element
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
function
|
|
78
|
-
return <
|
|
77
|
+
function ToastRoot(props: ToastRootComponentProps) {
|
|
78
|
+
return <ToastContext.Provider value={props.toastId}>{props.children}</ToastContext.Provider>
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
function
|
|
81
|
+
function ToastIcon(props: ComponentProps<"div">) {
|
|
82
82
|
return <div data-slot="toast-v2-icon" {...props} />
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
function
|
|
85
|
+
function ToastContent(props: ComponentProps<"div">) {
|
|
86
86
|
return <div data-slot="toast-v2-content" {...props} />
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
function
|
|
89
|
+
function ToastTitle(props: ComponentProps<"div">) {
|
|
90
90
|
return <div data-slot="toast-v2-title" {...props} />
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
function
|
|
93
|
+
function ToastDescription(props: ComponentProps<"div">) {
|
|
94
94
|
return <div data-slot="toast-v2-description" {...props} />
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
function
|
|
97
|
+
function ToastActions(props: ComponentProps<"div">) {
|
|
98
98
|
return <div data-slot="toast-v2-actions" {...props} />
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
function
|
|
101
|
+
function ToastCloseButton(props: ComponentProps<"button">) {
|
|
102
102
|
const i18n = useI18n()
|
|
103
|
-
const toastId = useContext(
|
|
103
|
+
const toastId = useContext(ToastContext)
|
|
104
104
|
const [local, rest] = splitProps(props, ["children", "onClick"])
|
|
105
105
|
return (
|
|
106
106
|
<button
|
|
@@ -110,7 +110,7 @@ function ToastV2CloseButton(props: ComponentProps<"button">) {
|
|
|
110
110
|
{...rest}
|
|
111
111
|
onClick={(event) => {
|
|
112
112
|
if (typeof local.onClick === "function") local.onClick(event)
|
|
113
|
-
if (!event.defaultPrevented && toastId !== undefined)
|
|
113
|
+
if (!event.defaultPrevented && toastId !== undefined) toaster.dismiss(toastId)
|
|
114
114
|
}}
|
|
115
115
|
>
|
|
116
116
|
{local.children ?? <CloseIcon />}
|
|
@@ -127,19 +127,19 @@ function CloseIcon() {
|
|
|
127
127
|
)
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
export const
|
|
131
|
-
Region:
|
|
132
|
-
Icon:
|
|
133
|
-
Content:
|
|
134
|
-
Title:
|
|
135
|
-
Description:
|
|
136
|
-
Actions:
|
|
137
|
-
CloseButton:
|
|
130
|
+
export const Toast = Object.assign(ToastRoot, {
|
|
131
|
+
Region: ToastRegion,
|
|
132
|
+
Icon: ToastIcon,
|
|
133
|
+
Content: ToastContent,
|
|
134
|
+
Title: ToastTitle,
|
|
135
|
+
Description: ToastDescription,
|
|
136
|
+
Actions: ToastActions,
|
|
137
|
+
CloseButton: ToastCloseButton,
|
|
138
138
|
})
|
|
139
139
|
|
|
140
140
|
let toastV2Id = 0
|
|
141
141
|
|
|
142
|
-
export const
|
|
142
|
+
export const toaster = {
|
|
143
143
|
show(render: (props: { toastId: number }) => JSX.Element, options?: { duration?: number; persistent?: boolean }) {
|
|
144
144
|
const toastId = --toastV2Id
|
|
145
145
|
toast.custom((id) => render({ toastId: Number(id) }), {
|
|
@@ -152,43 +152,43 @@ export const toasterV2 = {
|
|
|
152
152
|
},
|
|
153
153
|
dismiss(toastId?: number) {
|
|
154
154
|
if (toastId === undefined) {
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
activeToastByKey.clear()
|
|
156
|
+
activeToastById.clear()
|
|
157
157
|
} else {
|
|
158
|
-
|
|
158
|
+
releaseToast(activeToastById.get(toastId))
|
|
159
159
|
}
|
|
160
160
|
return toast.dismiss(toastId)
|
|
161
161
|
},
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
export interface
|
|
164
|
+
export interface ToastAction {
|
|
165
165
|
label: string
|
|
166
166
|
variant?: "primary" | "secondary"
|
|
167
167
|
onClick: "dismiss" | (() => void)
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
export interface
|
|
170
|
+
export interface ToastOptions {
|
|
171
171
|
title?: string
|
|
172
172
|
description?: string
|
|
173
173
|
icon?: JSX.Element
|
|
174
174
|
variant?: "default" | "success" | "error" | "loading"
|
|
175
175
|
duration?: number
|
|
176
176
|
persistent?: boolean
|
|
177
|
-
actions?:
|
|
177
|
+
actions?: ToastAction[]
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
interface
|
|
180
|
+
interface ActiveToast {
|
|
181
181
|
id: number
|
|
182
182
|
key: string
|
|
183
|
-
options:
|
|
183
|
+
options: ToastOptions
|
|
184
184
|
actions?: JSX.Element
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
const
|
|
188
|
-
const
|
|
187
|
+
const activeToastByKey = new Map<string, ActiveToast>()
|
|
188
|
+
const activeToastById = new Map<number, ActiveToast>()
|
|
189
189
|
|
|
190
|
-
export function
|
|
191
|
-
const opts:
|
|
190
|
+
export function showToast(options: ToastOptions | string) {
|
|
191
|
+
const opts: ToastOptions = typeof options === "string" ? { description: options } : options
|
|
192
192
|
const key = JSON.stringify({
|
|
193
193
|
title: opts.title,
|
|
194
194
|
description: opts.description,
|
|
@@ -197,29 +197,29 @@ export function showToastV2(options: ToastV2Options | string) {
|
|
|
197
197
|
persistent: opts.persistent,
|
|
198
198
|
actions: opts.actions?.map((action) => [action.label, action.variant]),
|
|
199
199
|
})
|
|
200
|
-
const active =
|
|
200
|
+
const active = activeToastByKey.get(key)
|
|
201
201
|
const toasts = toast.getToasts()
|
|
202
202
|
|
|
203
203
|
if (active && toasts.at(-1)?.id === active.id) {
|
|
204
204
|
active.options = opts
|
|
205
|
-
|
|
206
|
-
|
|
205
|
+
publishToast(active)
|
|
206
|
+
pulseToast(active.id)
|
|
207
207
|
return active.id
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
if (active && toasts.some((item) => item.id === active.id))
|
|
211
|
-
|
|
210
|
+
if (active && toasts.some((item) => item.id === active.id)) toaster.dismiss(active.id)
|
|
211
|
+
releaseToast(active)
|
|
212
212
|
|
|
213
|
-
const entry:
|
|
214
|
-
entry.actions =
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
213
|
+
const entry: ActiveToast = { id: --toastV2Id, key, options: opts }
|
|
214
|
+
entry.actions = createToastActions(entry)
|
|
215
|
+
activeToastByKey.set(key, entry)
|
|
216
|
+
activeToastById.set(entry.id, entry)
|
|
217
|
+
publishToast(entry)
|
|
218
218
|
return entry.id
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
function
|
|
222
|
-
const release = () =>
|
|
221
|
+
function publishToast(entry: ActiveToast) {
|
|
222
|
+
const release = () => releaseToast(entry)
|
|
223
223
|
toast(entry.options.title ?? "", {
|
|
224
224
|
id: entry.id,
|
|
225
225
|
description: entry.options.description,
|
|
@@ -235,10 +235,12 @@ function publishToastV2(entry: ActiveToastV2) {
|
|
|
235
235
|
})
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
function
|
|
238
|
+
function createToastActions(entry: ActiveToast) {
|
|
239
239
|
if (!entry.options.actions?.length) return undefined
|
|
240
240
|
return (
|
|
241
|
-
<
|
|
241
|
+
<Toast.Actions>
|
|
242
|
+
{/* Static map, not <For>: this JSX is created imperatively outside any Solid
|
|
243
|
+
root, where a <For> computation would never be disposed. */}
|
|
242
244
|
{entry.options.actions.map((action, index) => (
|
|
243
245
|
<button
|
|
244
246
|
type="button"
|
|
@@ -249,17 +251,17 @@ function createToastV2Actions(entry: ActiveToastV2) {
|
|
|
249
251
|
onClick={() => {
|
|
250
252
|
const onClick = entry.options.actions?.[index]?.onClick
|
|
251
253
|
if (typeof onClick === "function") onClick()
|
|
252
|
-
|
|
254
|
+
toaster.dismiss(entry.id)
|
|
253
255
|
}}
|
|
254
256
|
>
|
|
255
257
|
{action.label}
|
|
256
258
|
</button>
|
|
257
259
|
))}
|
|
258
|
-
</
|
|
260
|
+
</Toast.Actions>
|
|
259
261
|
)
|
|
260
262
|
}
|
|
261
263
|
|
|
262
|
-
function
|
|
264
|
+
function pulseToast(toastId: number) {
|
|
263
265
|
if (typeof document === "undefined" || typeof requestAnimationFrame === "undefined") return
|
|
264
266
|
requestAnimationFrame(() => {
|
|
265
267
|
const element = document.querySelector<HTMLElement>(`[data-testid="toast-v2-${toastId}"]`)
|
|
@@ -268,13 +270,13 @@ function pulseToastV2(toastId: number) {
|
|
|
268
270
|
})
|
|
269
271
|
}
|
|
270
272
|
|
|
271
|
-
function
|
|
273
|
+
function releaseToast(entry: ActiveToast | undefined) {
|
|
272
274
|
if (!entry) return
|
|
273
|
-
if (
|
|
274
|
-
if (
|
|
275
|
+
if (activeToastByKey.get(entry.key) === entry) activeToastByKey.delete(entry.key)
|
|
276
|
+
if (activeToastById.get(entry.id) === entry) activeToastById.delete(entry.id)
|
|
275
277
|
}
|
|
276
278
|
|
|
277
|
-
export interface
|
|
279
|
+
export interface ToastPromiseOptions<T, U = unknown> {
|
|
278
280
|
loading?: JSX.Element
|
|
279
281
|
success?: (data: T) => JSX.Element
|
|
280
282
|
error?: (error: U) => JSX.Element
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
border-color 220ms var(--tool-motion-ease, cubic-bezier(0.22, 1, 0.36, 1)),
|
|
33
33
|
background-color 220ms var(--tool-motion-ease, cubic-bezier(0.22, 1, 0.36, 1)),
|
|
34
34
|
box-shadow 220ms var(--tool-motion-ease, cubic-bezier(0.22, 1, 0.36, 1));
|
|
35
|
-
/* background-color: var(--surface-weak); */
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
[data-slot="checkbox-checkbox-indicator"] {
|
|
@@ -49,19 +48,14 @@
|
|
|
49
48
|
transform 220ms var(--tool-motion-ease, cubic-bezier(0.22, 1, 0.36, 1));
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
/* [data-slot="checkbox-checkbox-content"] { */
|
|
53
|
-
/* } */
|
|
54
|
-
|
|
55
51
|
[data-slot="checkbox-checkbox-label"] {
|
|
56
52
|
user-select: none;
|
|
57
53
|
color: var(--text-base);
|
|
58
|
-
|
|
59
|
-
/* text-12-regular */
|
|
60
54
|
font-family: var(--font-family-sans);
|
|
61
55
|
font-size: var(--font-size-small);
|
|
62
56
|
font-style: normal;
|
|
63
57
|
font-weight: var(--font-weight-regular);
|
|
64
|
-
line-height: var(--line-height-large);
|
|
58
|
+
line-height: var(--line-height-large);
|
|
65
59
|
letter-spacing: var(--letter-spacing-normal);
|
|
66
60
|
}
|
|
67
61
|
|