@opencode-ai/ui 0.0.0-dev-19010 → 0.0.0-dev-202609031506
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/{data-display/accordion → components}/accordion.d.ts +6 -6
- package/dist/components/avatar.d.ts +9 -0
- package/dist/components/button.d.ts +9 -0
- package/dist/components/card.d.ts +1 -1
- package/dist/{forms/checkbox → components}/checkbox.d.ts +2 -2
- package/dist/components/dialog.d.ts +12 -0
- package/dist/{data-display/diff-changes → components}/diff-changes.d.ts +1 -2
- package/dist/components/dropdown-menu.d.ts +80 -0
- package/dist/components/icon-button.d.ts +10 -0
- package/dist/{icons/icon/additional-icons.d.ts → components/icon.d.ts} +8 -8
- package/dist/components/keybind.d.ts +6 -0
- package/dist/components/list.d.ts +1 -1
- package/dist/{feedback/progress-circle → components}/progress-circle.d.ts +0 -2
- package/dist/components/radio-group.d.ts +16 -0
- package/dist/components/scroll-view.d.ts +3 -3
- package/dist/components/select.d.ts +21 -0
- package/dist/{forms/switch → components}/switch.d.ts +2 -4
- package/dist/{navigation/tabs → components}/tabs.d.ts +8 -15
- package/dist/components/tag.d.ts +5 -0
- package/dist/{typography/text-shimmer → components}/text-shimmer.d.ts +0 -1
- package/dist/components/toast.d.ts +56 -0
- package/dist/components/tooltip.d.ts +17 -0
- package/dist/context/i18n.d.ts +7 -10
- package/dist/context/marked-parser.d.ts +2 -1
- package/dist/hooks/use-filtered-list.d.ts +0 -9
- package/dist/i18n/ar.d.ts +2 -0
- package/dist/i18n/bg.d.ts +2 -0
- package/dist/i18n/br.d.ts +2 -0
- package/dist/i18n/bs.d.ts +2 -0
- package/dist/i18n/da.d.ts +2 -0
- package/dist/i18n/de.d.ts +2 -0
- package/dist/i18n/en.d.ts +1 -238
- package/dist/i18n/es.d.ts +2 -0
- package/dist/i18n/fr.d.ts +2 -0
- package/dist/i18n/ja.d.ts +2 -0
- package/dist/i18n/km.d.ts +2 -0
- package/dist/i18n/ko.d.ts +2 -0
- package/dist/i18n/lo.d.ts +2 -0
- package/dist/i18n/mk.d.ts +2 -0
- package/dist/i18n/mn.d.ts +2 -0
- package/dist/i18n/my.d.ts +2 -0
- package/dist/i18n/pl.d.ts +2 -0
- package/dist/i18n/ru.d.ts +2 -0
- package/dist/i18n/sr.d.ts +2 -0
- package/dist/i18n/tg.d.ts +2 -0
- package/dist/i18n/th.d.ts +2 -0
- package/dist/i18n/tr.d.ts +2 -0
- package/dist/i18n/zh.d.ts +2 -0
- package/dist/i18n/zht.d.ts +2 -0
- package/dist/v2/components/accordion-v2.d.ts +26 -0
- package/dist/{data-display/avatar/avatar.d.ts → v2/components/avatar-v2.d.ts} +1 -1
- package/dist/v2/components/badge-v2.d.ts +6 -0
- package/dist/v2/components/button-v2.d.ts +10 -0
- package/dist/v2/components/checkbox-v2.d.ts +10 -0
- package/dist/{overlays/dialog/dialog.d.ts → v2/components/dialog-v2.d.ts} +2 -1
- package/dist/v2/components/diff-changes-v2.d.ts +11 -0
- package/dist/v2/components/divider-v2.d.ts +5 -0
- package/dist/{forms/field/field.d.ts → v2/components/field-v2.d.ts} +10 -4
- package/dist/v2/components/icon-button-v2.d.ts +11 -0
- package/dist/{icons/icon → v2/components}/icon.d.ts +1 -32
- package/dist/v2/components/inline-input-v2.d.ts +21 -0
- package/dist/v2/components/keybind-v2.d.ts +7 -0
- package/dist/{data-display/line-comment/line-comment.d.ts → v2/components/line-comment-v2.d.ts} +9 -9
- package/dist/v2/components/loader-v2.d.ts +3 -0
- package/dist/v2/components/menu-v2.d.ts +52 -0
- package/dist/v2/components/progress-circle-v2.d.ts +8 -0
- package/dist/{data-display/project-avatar/project-avatar.d.ts → v2/components/project-avatar-v2.d.ts} +1 -1
- package/dist/v2/components/radio-v2.d.ts +16 -0
- package/dist/{navigation/segmented-control/segmented-control.d.ts → v2/components/segmented-control-v2.d.ts} +5 -5
- package/dist/{forms/select/select.d.ts → v2/components/select-v2.d.ts} +6 -4
- package/dist/v2/components/split-button-v2.d.ts +5 -0
- package/dist/v2/components/switch-v2.d.ts +7 -0
- package/dist/v2/components/tabs-v2.d.ts +34 -0
- package/dist/{forms/text-input/text-input.d.ts → v2/components/text-input-v2.d.ts} +3 -3
- package/dist/v2/components/text-shimmer-v2.d.ts +9 -0
- package/dist/v2/components/textarea-v2.d.ts +7 -0
- package/dist/v2/components/toast-v2.d.ts +57 -0
- package/dist/v2/components/tooltip-v2.d.ts +13 -0
- package/dist/v2/components/wordmark-v2.d.ts +2 -0
- package/package.json +34 -140
- package/src/{data-display/accordion → components}/accordion.css +31 -5
- package/src/{data-display/accordion → components}/accordion.tsx +14 -14
- package/src/components/animated-number.css +11 -29
- package/src/components/animated-number.tsx +2 -2
- package/src/components/avatar.css +49 -0
- package/src/components/avatar.tsx +55 -0
- package/src/components/button.css +194 -0
- package/src/{actions/button → components}/button.tsx +11 -19
- package/src/components/card.css +23 -2
- package/src/components/card.tsx +4 -4
- package/src/{forms/checkbox → components}/checkbox.css +7 -1
- package/src/{forms/checkbox → components}/checkbox.tsx +13 -13
- package/src/components/collapsible.tsx +2 -2
- package/src/components/dialog.css +181 -0
- package/src/components/dialog.tsx +72 -0
- package/src/{data-display/diff-changes → components}/diff-changes.css +19 -22
- package/src/components/diff-changes.tsx +115 -0
- package/src/components/dock-surface.css +9 -2
- package/src/components/dropdown-menu.css +135 -0
- package/src/components/dropdown-menu.tsx +308 -0
- package/src/components/icon-button.css +181 -0
- package/src/components/icon-button.tsx +29 -0
- package/src/components/icon.css +39 -0
- package/src/{icons/icon/additional-icons.ts → components/icon.tsx} +74 -8
- package/src/components/image-preview.tsx +2 -3
- package/src/components/keybind.css +18 -0
- package/src/components/keybind.tsx +20 -0
- package/src/components/list.css +5 -5
- package/src/components/list.tsx +5 -7
- package/src/components/popover.tsx +2 -3
- package/src/components/progress-circle.css +16 -0
- package/src/components/progress-circle.tsx +64 -0
- package/src/components/radio-group.css +187 -0
- package/src/components/radio-group.tsx +83 -0
- package/src/components/scroll-view.tsx +20 -5
- package/src/components/select.css +201 -0
- package/src/components/select.tsx +174 -0
- package/src/components/sticky-accordion-header.tsx +1 -1
- package/src/components/switch.css +136 -0
- package/src/components/switch.tsx +29 -0
- package/src/{navigation/tabs → components}/tabs.css +229 -39
- package/src/components/tabs.tsx +126 -0
- package/src/components/tag.css +37 -0
- package/src/components/tag.tsx +22 -0
- package/src/components/text-field.tsx +4 -12
- package/src/{typography/text-shimmer → components}/text-shimmer.css +1 -2
- package/src/{typography/text-shimmer → components}/text-shimmer.tsx +0 -1
- package/src/components/toast.css +236 -0
- package/src/components/toast.tsx +185 -0
- package/src/components/tooltip.css +74 -0
- package/src/components/tooltip.tsx +163 -0
- package/src/context/dialog.tsx +0 -1
- package/src/context/i18n.tsx +14 -17
- package/src/context/marked-parser.tsx +13 -3
- package/src/hooks/create-auto-scroll.tsx +0 -20
- package/src/i18n/am.ts +9 -7
- package/src/i18n/ar.ts +9 -7
- package/src/i18n/az.ts +9 -7
- package/src/i18n/bg.ts +9 -7
- package/src/i18n/bn.ts +9 -7
- package/src/i18n/br.ts +9 -7
- package/src/i18n/bs.ts +9 -7
- package/src/i18n/ca.ts +9 -7
- package/src/i18n/cs.ts +9 -7
- package/src/i18n/da.ts +9 -7
- package/src/i18n/de.ts +3 -1
- package/src/i18n/dv.ts +9 -7
- package/src/i18n/dz.ts +7 -5
- package/src/i18n/el.ts +9 -7
- package/src/i18n/en.ts +11 -54
- package/src/i18n/es.ts +8 -6
- package/src/i18n/et.ts +9 -7
- package/src/i18n/fa.ts +9 -7
- package/src/i18n/fi.ts +9 -7
- package/src/i18n/fo.ts +9 -7
- package/src/i18n/fr.ts +8 -6
- package/src/i18n/hi.ts +9 -7
- package/src/i18n/hr.ts +9 -7
- package/src/i18n/hu.ts +9 -7
- package/src/i18n/hy.ts +9 -7
- package/src/i18n/id.ts +9 -7
- package/src/i18n/is.ts +9 -7
- package/src/i18n/it.ts +9 -7
- package/src/i18n/ja.ts +9 -7
- package/src/i18n/ka.ts +9 -7
- package/src/i18n/km.ts +9 -7
- package/src/i18n/ko.ts +9 -7
- package/src/i18n/lo.ts +9 -7
- package/src/i18n/lt.ts +9 -7
- package/src/i18n/lv.ts +9 -7
- package/src/i18n/mk.ts +9 -7
- package/src/i18n/mn.ts +9 -7
- package/src/i18n/ms.ts +9 -7
- package/src/i18n/my.ts +9 -7
- package/src/i18n/ne.ts +9 -7
- package/src/i18n/nl.ts +9 -7
- package/src/i18n/no.ts +9 -7
- package/src/i18n/pa.ts +9 -7
- package/src/i18n/pl.ts +9 -7
- package/src/i18n/ro.ts +9 -7
- package/src/i18n/ru.ts +9 -7
- package/src/i18n/si.ts +9 -7
- package/src/i18n/sk.ts +9 -7
- package/src/i18n/sl.ts +9 -7
- package/src/i18n/sq.ts +9 -7
- package/src/i18n/sr.ts +9 -7
- package/src/i18n/sv.ts +9 -7
- package/src/i18n/tg.ts +9 -7
- package/src/i18n/th.ts +9 -7
- package/src/i18n/tk.ts +9 -7
- package/src/i18n/tr.ts +9 -7
- package/src/i18n/uk.ts +9 -7
- package/src/i18n/ur.ts +9 -7
- package/src/i18n/uz.ts +9 -7
- package/src/i18n/vi.ts +9 -7
- package/src/i18n/zh.ts +9 -7
- package/src/i18n/zht.ts +9 -7
- package/src/styles/base.css +0 -5
- package/src/styles/index.css +20 -4
- package/src/styles/tailwind/colors.css +0 -1
- package/src/styles/tailwind/index.css +1 -18
- package/src/styles/theme.css +2 -2
- package/src/theme/context.tsx +11 -19
- package/src/theme/themes/oc-2.json +19 -48
- package/src/theme/v2/default-primitives.ts +8 -8
- package/src/theme/v2/foreground.ts +0 -1
- package/src/theme/v2/mapping.ts +1 -5
- package/src/v2/components/accordion-v2.css +139 -0
- package/src/v2/components/accordion-v2.tsx +86 -0
- package/src/{data-display/avatar/avatar.tsx → v2/components/avatar-v2.tsx} +1 -1
- package/src/{data-display/badge/badge.css → v2/components/badge-v2.css} +0 -19
- package/src/{data-display/badge/badge.tsx → v2/components/badge-v2.tsx} +4 -6
- package/src/{actions/button/button.css → v2/components/button-v2.css} +0 -29
- package/src/v2/components/button-v2.tsx +35 -0
- package/src/v2/components/checkbox-v2.css +184 -0
- package/src/v2/components/checkbox-v2.tsx +65 -0
- package/src/{overlays/dialog/dialog.css → v2/components/dialog-v2.css} +0 -3
- package/src/{overlays/dialog/dialog.tsx → v2/components/dialog-v2.tsx} +13 -11
- package/src/v2/components/diff-changes-v2.css +26 -0
- package/src/{data-display/diff-changes/diff-changes.tsx → v2/components/diff-changes-v2.tsx} +2 -7
- package/src/{layout/divider/divider.tsx → v2/components/divider-v2.tsx} +3 -3
- package/src/{forms/field/field.css → v2/components/field-v2.css} +1 -1
- package/src/{forms/field/field.tsx → v2/components/field-v2.tsx} +11 -9
- package/src/v2/components/icon-button-v2.tsx +37 -0
- package/src/{icons/icon → v2/components}/icon.tsx +12 -67
- package/src/v2/components/inline-input-v2.css +225 -0
- package/src/v2/components/inline-input-v2.tsx +107 -0
- package/src/{data-display/keybind/keybind.css → v2/components/keybind-v2.css} +1 -1
- package/src/{data-display/keybind/keybind.tsx → v2/components/keybind-v2.tsx} +3 -3
- package/src/{data-display/line-comment/line-comment.css → v2/components/line-comment-v2.css} +4 -4
- package/src/{data-display/line-comment/line-comment.tsx → v2/components/line-comment-v2.tsx} +15 -17
- package/src/{feedback/loader/loader.tsx → v2/components/loader-v2.tsx} +2 -2
- package/src/{navigation/menu/menu.css → v2/components/menu-v2.css} +2 -123
- package/src/{navigation/menu/menu.tsx → v2/components/menu-v2.tsx} +32 -96
- package/src/v2/components/progress-circle-v2.css +13 -0
- package/src/v2/components/progress-circle-v2.tsx +52 -0
- package/src/{data-display/project-avatar/project-avatar.tsx → v2/components/project-avatar-v2.tsx} +1 -1
- package/src/{forms/radio/radio.tsx → v2/components/radio-v2.tsx} +20 -30
- package/src/{navigation/segmented-control/segmented-control.css → v2/components/segmented-control-v2.css} +1 -1
- package/src/{navigation/segmented-control/segmented-control.tsx → v2/components/segmented-control-v2.tsx} +8 -9
- package/src/{forms/select/select.css → v2/components/select-v2.css} +8 -2
- package/src/{forms/select/select.tsx → v2/components/select-v2.tsx} +32 -40
- package/src/{actions/split-button/split-button.css → v2/components/split-button-v2.css} +6 -1
- package/src/{actions/split-button/split-button.tsx → v2/components/split-button-v2.tsx} +4 -4
- package/src/{forms/switch/switch.css → v2/components/switch-v2.css} +0 -110
- package/src/v2/components/switch-v2.tsx +28 -0
- package/src/{navigation/tabs/tabs-current.css → v2/components/tabs-v2.css} +10 -25
- package/src/v2/components/tabs-v2.tsx +149 -0
- package/src/{forms/text-input/text-input.css → v2/components/text-input-v2.css} +3 -3
- package/src/{forms/text-input/text-input.tsx → v2/components/text-input-v2.tsx} +4 -4
- package/src/v2/components/text-shimmer-v2.css +125 -0
- package/src/v2/components/text-shimmer-v2.tsx +63 -0
- package/src/{forms/textarea/textarea.tsx → v2/components/textarea-v2.tsx} +3 -3
- package/src/{feedback/toast/toast.tsx → v2/components/toast-v2.tsx} +58 -60
- package/src/{overlays/tooltip/tooltip.css → v2/components/tooltip-v2.css} +0 -26
- package/src/{overlays/tooltip/tooltip.tsx → v2/components/tooltip-v2.tsx} +17 -24
- package/src/{typography/wordmark/wordmark.tsx → v2/components/wordmark-v2.tsx} +2 -2
- package/src/{styles/tokens → v2/styles}/colors.css +8 -8
- package/src/{styles/tokens → v2/styles}/theme.css +16 -20
- package/dist/actions/button/button.d.ts +0 -10
- package/dist/actions/icon-button/icon-button.d.ts +0 -11
- package/dist/actions/split-button/split-button.d.ts +0 -5
- package/dist/context/marked-base.d.ts +0 -3
- package/dist/data-display/badge/badge.d.ts +0 -7
- package/dist/data-display/keybind/keybind.d.ts +0 -7
- package/dist/feedback/loader/loader.d.ts +0 -3
- package/dist/feedback/toast/toast.d.ts +0 -57
- package/dist/forms/radio/radio.d.ts +0 -16
- package/dist/forms/textarea/textarea.d.ts +0 -7
- package/dist/i18n/he.d.ts +0 -197
- package/dist/layout/divider/divider.d.ts +0 -5
- package/dist/navigation/menu/menu.d.ts +0 -59
- package/dist/overlays/tooltip/tooltip.d.ts +0 -15
- package/dist/typography/wordmark/wordmark.d.ts +0 -2
- package/src/actions/icon-button/icon-button.tsx +0 -32
- package/src/context/marked-base.tsx +0 -27
- package/src/feedback/progress-circle/progress-circle.css +0 -28
- package/src/feedback/progress-circle/progress-circle.tsx +0 -64
- package/src/forms/switch/switch.tsx +0 -34
- package/src/i18n/he.ts +0 -199
- package/src/icons/icon/icon.css +0 -3
- package/src/navigation/tabs/tabs.tsx +0 -194
- /package/dist/{forms/inline-input → components}/inline-input.d.ts +0 -0
- /package/dist/{navigation → v2/components}/tab-state-indicator.d.ts +0 -0
- /package/src/{forms/inline-input → components}/inline-input.css +0 -0
- /package/src/{forms/inline-input → components}/inline-input.tsx +0 -0
- /package/src/{data-display/avatar/avatar.css → v2/components/avatar-v2.css} +0 -0
- /package/src/{layout/divider/divider.css → v2/components/divider-v2.css} +0 -0
- /package/src/{styles/file-tree.css → v2/components/file-tree-v2.css} +0 -0
- /package/src/{actions/icon-button/icon-button.css → v2/components/icon-button-v2.css} +0 -0
- /package/src/{feedback/loader/loader.css → v2/components/loader-v2.css} +0 -0
- /package/src/{data-display/project-avatar/project-avatar.css → v2/components/project-avatar-v2.css} +0 -0
- /package/src/{forms/radio/radio.css → v2/components/radio-v2.css} +0 -0
- /package/src/{navigation → v2/components}/tab-state-indicator.tsx +0 -0
- /package/src/{forms/textarea/textarea.css → v2/components/textarea-v2.css} +0 -0
- /package/src/{feedback/toast/toast.css → v2/components/toast-v2.css} +0 -0
- /package/src/{styles/tokens/index.css → v2/styles/tailwind.css} +0 -0
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { onMount, type ComponentProps, splitProps } from "solid-js"
|
|
2
|
-
import { additionalIcons, additionalIconViewBox } from "./additional-icons"
|
|
3
|
-
import "./icon.css"
|
|
4
2
|
|
|
5
|
-
// Consumers center the SVG viewport, so each icon must center its artwork within its viewBox.
|
|
6
3
|
const icons = {
|
|
7
4
|
edit: {
|
|
8
5
|
viewBox: "0 0 16 16",
|
|
9
|
-
body: `<path d="M13.
|
|
6
|
+
body: `<path d="M13.5555 8.21534V13.5556H2.44434L2.44434 2.4445H7.78462M6.88878 9.11119C6.88878 9.11119 8.96327 9.0367 9.69678 8.3032L14.0301 3.96986C14.5824 3.4176 14.5824 2.52213 14.0301 1.96986C13.4778 1.4176 12.5824 1.4176 12.0301 1.96986L7.69678 6.3032C7.00513 6.99484 6.88878 9.11119 6.88878 9.11119Z" stroke="currentColor"/>`,
|
|
10
7
|
},
|
|
11
8
|
"folder-add-left": {
|
|
12
9
|
viewBox: "0 0 16 16",
|
|
@@ -20,10 +17,6 @@ const icons = {
|
|
|
20
17
|
viewBox: "0 0 16 16",
|
|
21
18
|
body: `<path d="M5.118 5.686V10.314M5.118 5.686C5.97 5.686 6.661 4.995 6.661 4.143C6.661 3.291 5.97 2.6 5.118 2.6C4.266 2.6 3.575 3.291 3.575 4.143C3.575 4.995 4.266 5.686 5.118 5.686ZM5.118 10.314C4.266 10.314 3.575 11.005 3.575 11.857C3.575 12.709 4.266 13.4 5.118 13.4C5.97 13.4 6.661 12.709 6.661 11.857M5.118 10.314C5.97 10.314 6.661 11.005 6.661 11.857M10.882 5.686C11.734 5.686 12.425 4.995 12.425 4.143C12.425 3.291 11.734 2.6 10.882 2.6C10.03 2.6 9.339 3.291 9.339 4.143C9.339 4.995 10.03 5.686 10.882 5.686ZM10.882 5.686V9.457C10.882 10.783 9.807 11.857 8.482 11.857H6.661" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>`,
|
|
22
19
|
},
|
|
23
|
-
"branch-out": {
|
|
24
|
-
viewBox: "0 0 16 16",
|
|
25
|
-
body: `<path d="M10.4225 3.35355L12.9024 5.83344L10.4225 8.31333" stroke="currentColor"/><path d="M1 12.2852H4.23042C4.89912 12.2852 5.52359 11.951 5.89452 11.3946L9.00783 6.72462C8.37877 6.16823 10.0032 5.83402 10.6719 5.83402H12.9024" stroke="currentColor"/><path d="M8.5 12.2852H14" stroke="currentColor" stroke-linejoin="round"/>`,
|
|
26
|
-
},
|
|
27
20
|
"grid-plus": {
|
|
28
21
|
viewBox: "0 0 16 16",
|
|
29
22
|
body: `<path d="M13.9948 11.668H9.32812M11.6641 9.33203V13.9987M6.66667 9.33203V13.9987H2V9.33203H6.66667ZM6.66667 2V6.66667H2V2H6.66667ZM13.9948 2V6.66667H9.32812V2H13.9948Z" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="square"/>`,
|
|
@@ -32,10 +25,6 @@ const icons = {
|
|
|
32
25
|
viewBox: "0 0 16 16",
|
|
33
26
|
body: `<path d="M6.33345 6.33349V5.00015H9.66679V7.00015L8.00015 8.00015V9.66679M8.27485 11.6819H7.71897M14.4446 8.00011C14.4446 11.5593 11.5593 14.4446 8.00011 14.4446C4.44094 14.4446 1.55566 11.5593 1.55566 8.00011C1.55566 4.44094 4.44094 1.55566 8.00011 1.55566C11.5593 1.55566 14.4446 4.44094 14.4446 8.00011Z" stroke="currentColor" stroke-linecap="square"/>`,
|
|
34
27
|
},
|
|
35
|
-
"circle-exclamation": {
|
|
36
|
-
viewBox: "0 0 16 16",
|
|
37
|
-
body: `<path d="M8.75 11.75H7.25V10.25H8.75V11.75Z" fill="currentColor"/><path d="M8.75 9.25H7.25V4.25H8.75V9.25Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="M8 1C9.93286 1 11.684 1.7836 12.9502 3.0498C14.2164 4.31601 15 6.06714 15 8C15 11.866 11.866 15 8 15C6.06714 15 4.31601 14.2164 3.0498 12.9502C1.7836 11.684 1 9.93286 1 8C1 4.13401 4.13401 1 8 1ZM8 2C4.68629 2 2 4.68629 2 8C2 9.65699 2.67148 11.1559 3.75781 12.2422C4.84415 13.3285 6.34301 14 8 14C11.3137 14 14 11.3137 14 8C14 6.34301 13.3285 4.84415 12.2422 3.75781C11.1559 2.67148 9.65699 2 8 2Z" fill="currentColor"/>`,
|
|
38
|
-
},
|
|
39
28
|
"sidebar-right": {
|
|
40
29
|
viewBox: "0 0 20 20",
|
|
41
30
|
body: `<path d="M2.91536 2.91406H2.36536V2.36406H2.91536V2.91406ZM2.91536 17.0807V17.6307H2.36536V17.0807H2.91536ZM17.082 17.0807H17.632V17.6307H17.082V17.0807ZM17.082 2.91406V2.36406H17.632V2.91406H17.082ZM6.9987 2.91406H6.4487V2.36406H6.9987V2.91406ZM6.9987 17.0807V17.6307H6.4487V17.0807H6.9987ZM2.91536 2.91406H3.46536V17.0807H2.91536H2.36536V2.91406H2.91536ZM2.91536 17.0807V16.5307H17.082V17.0807V17.6307H2.91536V17.0807ZM17.082 17.0807H16.532V2.91406H17.082H17.632V17.0807H17.082ZM17.082 2.91406V3.46406H2.91536V2.91406V2.36406H17.082V2.91406ZM6.9987 2.91406H7.5487V17.0807H6.9987H6.4487V2.91406H6.9987ZM17.082 17.0807L17.082 17.6307L6.9987 17.6307V17.0807V16.5307L17.082 16.5307L17.082 17.0807ZM6.9987 2.91406V2.36406H17.082V2.91406V3.46406H6.9987V2.91406Z" fill="currentColor"/>`,
|
|
@@ -132,14 +121,6 @@ const icons = {
|
|
|
132
121
|
viewBox: "0 0 20 20",
|
|
133
122
|
body: `<path d="M7 14.5H13M7 7.99512H10.0049M10.0049 7.99512H13M10.0049 7.99512V5M10.0049 7.99512V11M18 18V2L2 2L2 18H18Z" stroke="currentColor"/>`,
|
|
134
123
|
},
|
|
135
|
-
"window-analytics": {
|
|
136
|
-
viewBox: "0 0 16 16",
|
|
137
|
-
body: `<path d="M14.5 9.8333V13.5H1.5V2.5H7.1667M9.5 2.5V7.5H14.5V2.5H9.5Z" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="square"/>`,
|
|
138
|
-
},
|
|
139
|
-
trash: {
|
|
140
|
-
viewBox: "0 0 20 20",
|
|
141
|
-
body: `<path d="M4.58342 17.9134L4.58369 17.4134L4.22787 17.5384L4.22766 18.0384H4.58342V17.9134ZM15.4167 17.9134V18.0384H15.7725L15.7723 17.5384L15.4167 17.9134ZM2.08342 3.95508V3.45508H1.58342V3.95508H2.08342V4.45508V3.95508ZM17.9167 4.45508V4.95508H18.4167V4.45508H17.9167V3.95508V4.45508ZM4.16677 4.58008L3.66701 4.5996L4.22816 17.5379L4.72792 17.4934L5.22767 17.4489L4.66652 4.54055L4.16677 4.58008ZM4.58342 18.0384V17.9134H15.4167V18.0384V18.5384H4.58342V18.0384ZM15.4167 17.9134L15.8332 17.5379L16.2498 4.5996L15.7501 4.58008L15.2503 4.56055L14.8337 17.4989L15.4167 17.9134ZM15.8334 4.58008V4.08008H4.16677V4.58008V5.08008H15.8334V4.58008ZM2.08342 4.45508V4.95508H4.16677V4.58008V4.08008H2.08342V4.45508ZM15.8334 4.58008V5.08008H17.9167V4.45508V3.95508H15.8334V4.58008ZM6.83951 4.35149L7.432 4.55047C7.79251 3.47701 8.80699 2.70508 10.0001 2.70508V2.20508V1.70508C8.25392 1.70508 6.77335 2.83539 6.24702 4.15251L6.83951 4.35149ZM10.0001 2.20508V2.70508C11.1932 2.70508 12.2077 3.47701 12.5682 4.55047L13.1607 4.35149L13.7532 4.15251C13.2269 2.83539 11.7463 1.70508 10.0001 1.70508V2.20508Z" fill="currentColor"/>`,
|
|
142
|
-
},
|
|
143
124
|
"outline-sliders": {
|
|
144
125
|
viewBox: "0 0 16 16",
|
|
145
126
|
body: `<path d="M11.7779 4.66675H14.4446M11.7779 4.66675C11.7779 5.77132 10.8825 6.66675 9.77789 6.66675C8.67332 6.66675 7.77789 5.77132 7.77789 4.66675M11.7779 4.66675C11.7779 3.56218 10.8825 2.66675 9.77789 2.66675C8.67332 2.66675 7.77789 3.56218 7.77789 4.66675M1.55566 4.66675H7.77789M4.22233 11.3334H1.55566M4.22233 11.3334C4.22233 12.438 5.11776 13.3334 6.22233 13.3334C7.3269 13.3334 8.22233 12.438 8.22233 11.3334M4.22233 11.3334C4.22233 10.2288 5.11776 9.33341 6.22233 9.33341C7.3269 9.33341 8.22233 10.2288 8.22233 11.3334M14.4446 11.3334H8.22233" stroke="currentColor"/>`,
|
|
@@ -152,14 +133,6 @@ const icons = {
|
|
|
152
133
|
viewBox: "0 0 16 16",
|
|
153
134
|
body: `<path d="M13.5555 6.66656V2.44434H9.33326M13.5555 2.44434L7.99993 7.99989M13.5555 9.33324V13.5555C13.5555 13.5555 12.7599 13.5555 11.7777 13.5555H2.44438C2.44438 13.5555 2.44438 12.7599 2.44438 11.7777V4.22213C2.44438 3.2399 2.44434 2.44435 2.44434 2.44435H6.66661" stroke="currentColor"/>`,
|
|
154
135
|
},
|
|
155
|
-
"outline-arrow-to-corner-top-right": {
|
|
156
|
-
viewBox: "0 0 16 16",
|
|
157
|
-
body: `<path d="M2 8.5V2H14V14H8M5 5.66667H10.3333V11M3.66797 12.333L9.94292 6.05806" stroke="currentColor" stroke-linecap="square"/>`,
|
|
158
|
-
},
|
|
159
|
-
"outline-hexagonal-warning": {
|
|
160
|
-
viewBox: "0 0 16 16",
|
|
161
|
-
body: `<path d="M10.6667 1.33325H5.33272L1.33334 5.33325L1.33342 10.6917L5.3327 14.691L10.6667 14.6909L14.6911 10.6917V5.33255L10.6667 1.33325Z" stroke="currentColor"/><path d="M8 10.6667H8.00667" stroke="currentColor" stroke-linecap="square"/><path d="M8 7.99992V5.33325" stroke="currentColor" stroke-linecap="square"/>`,
|
|
162
|
-
},
|
|
163
136
|
"outline-share": {
|
|
164
137
|
viewBox: "0 0 16 16",
|
|
165
138
|
body: `<path d="M13.5554 10.4445V13.5556C13.5554 13.5556 12.7599 13.5556 11.7777 13.5556H4.22211C3.23989 13.5556 2.44434 13.5556 2.44434 13.5556V10.4445M4.88878 5.55557L7.99989 2.44446L11.111 5.55557M7.99989 2.44446L7.99989 9.11112" stroke="currentColor"/>`,
|
|
@@ -172,41 +145,20 @@ const icons = {
|
|
|
172
145
|
viewBox: "0 0 20 20",
|
|
173
146
|
body: `<path d="M5.83333 4.16406L2.5 7.4974L5.83333 10.8307M3.33333 7.4974H17.9167V15.4141H10" stroke="currentColor" stroke-linecap="square"/>`,
|
|
174
147
|
},
|
|
175
|
-
"fill-triangle-down": {
|
|
176
|
-
viewBox: "0 0 16 16",
|
|
177
|
-
body: `<path d="M5.37624 6.75194C5.1818 6.41861 5.42223 6 5.80813 6H10.1921C10.578 6 10.8184 6.41861 10.624 6.75194L8.43199 10.5096C8.23905 10.8404 7.76115 10.8404 7.56821 10.5096L5.37624 6.75194Z" fill="currentColor"/>`,
|
|
178
|
-
},
|
|
179
148
|
archive: {
|
|
180
149
|
viewBox: "0 0 16 16",
|
|
181
150
|
body: `<path d="M13.1112 13.5555V14.0555H13.6112V13.5555H13.1112ZM2.889 13.5555H2.389L2.389 14.0555H2.889V13.5555ZM3.38901 5.55546L3.38901 5.05546L2.38901 5.05546L2.38901 5.55546L2.88901 5.55546L3.38901 5.55546ZM14.4446 2.44434H14.9446V1.94434L14.4446 1.94434L14.4446 2.44434ZM14.4446 5.55545L14.4446 6.05545L14.9446 6.05545V5.55545H14.4446ZM1.55566 5.55546L1.05566 5.55545L1.05566 6.05546L1.55566 6.05546L1.55566 5.55546ZM1.5557 2.44436L1.5557 1.94436L1.05571 1.94436L1.0557 2.44435L1.5557 2.44436ZM13.1112 5.55546H12.6112V13.5555H13.1112H13.6112V5.55546H13.1112ZM2.889 13.5555H3.389L3.38901 5.55546L2.88901 5.55546L2.38901 5.55546L2.389 13.5555H2.889ZM14.4446 2.44434H13.9446V5.55545H14.4446H14.9446V2.44434H14.4446ZM1.55566 5.55546L2.05566 5.55547L2.0557 2.44436L1.5557 2.44436L1.0557 2.44435L1.05566 5.55545L1.55566 5.55546ZM6.22234 8.22213V8.72213H9.7779V8.22213V7.72213H6.22234V8.22213ZM13.1112 13.5555V13.0555H2.889V13.5555V14.0555H13.1112V13.5555ZM1.5557 2.44436L1.5557 2.94436L14.4446 2.94434L14.4446 2.44434L14.4446 1.94434L1.5557 1.94436L1.5557 2.44436ZM14.4446 5.55545L14.4446 5.05545L1.55566 5.05546L1.55566 5.55546L1.55566 6.05546L14.4446 6.05545L14.4446 5.55545Z" fill="currentColor"/>`,
|
|
182
151
|
},
|
|
183
152
|
}
|
|
184
153
|
|
|
185
|
-
type IconName = keyof typeof icons | keyof typeof additionalIcons
|
|
186
|
-
|
|
187
154
|
const spriteID = "opencode-v2-icon-sprite"
|
|
188
|
-
const symbol = (name:
|
|
155
|
+
const symbol = (name: keyof typeof icons) => `opencode-v2-icon-${name}`
|
|
189
156
|
let spriteInserted = false
|
|
190
157
|
|
|
191
|
-
function getIcon(name: IconName) {
|
|
192
|
-
const icon = icons[name as keyof typeof icons]
|
|
193
|
-
if (icon) return icon
|
|
194
|
-
const body = additionalIcons[name as keyof typeof additionalIcons]
|
|
195
|
-
return { body, viewBox: additionalIconViewBox(name as keyof typeof additionalIcons) }
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function spriteContent() {
|
|
199
|
-
return Array.from(new Set<IconName>([...Object.keys(additionalIcons), ...Object.keys(icons)] as IconName[]))
|
|
200
|
-
.map((name) => `<symbol id="${symbol(name)}" viewBox="${getIcon(name).viewBox}">${getIcon(name).body}</symbol>`)
|
|
201
|
-
.join("")
|
|
202
|
-
}
|
|
203
|
-
|
|
204
158
|
function ensureSprite() {
|
|
205
159
|
if (spriteInserted) return
|
|
206
160
|
if (typeof document === "undefined") return
|
|
207
|
-
|
|
208
|
-
if (existing) {
|
|
209
|
-
existing.innerHTML = spriteContent()
|
|
161
|
+
if (document.getElementById(spriteID)) {
|
|
210
162
|
spriteInserted = true
|
|
211
163
|
return
|
|
212
164
|
}
|
|
@@ -218,24 +170,25 @@ function ensureSprite() {
|
|
|
218
170
|
svg.setAttribute("height", "0")
|
|
219
171
|
svg.style.position = "absolute"
|
|
220
172
|
svg.style.overflow = "hidden"
|
|
221
|
-
svg.innerHTML =
|
|
173
|
+
svg.innerHTML = Object.entries(icons)
|
|
174
|
+
.map(
|
|
175
|
+
([name, icon]) =>
|
|
176
|
+
`<symbol id="${symbol(name as keyof typeof icons)}" viewBox="${icon.viewBox}">${icon.body}</symbol>`,
|
|
177
|
+
)
|
|
178
|
+
.join("")
|
|
222
179
|
document.body.insertBefore(svg, document.body.firstChild)
|
|
223
180
|
spriteInserted = true
|
|
224
181
|
}
|
|
225
182
|
|
|
226
183
|
export interface IconProps extends ComponentProps<"svg"> {
|
|
227
|
-
name:
|
|
184
|
+
name: keyof typeof icons | (string & {})
|
|
228
185
|
size?: "small" | "normal" | "large"
|
|
229
186
|
}
|
|
230
187
|
|
|
231
188
|
export function Icon(props: IconProps) {
|
|
232
189
|
const [split, rest] = splitProps(props, ["name", "size"])
|
|
233
|
-
const iconName = ()
|
|
234
|
-
|
|
235
|
-
if (additionalIcons[split.name as keyof typeof additionalIcons]) return split.name as keyof typeof additionalIcons
|
|
236
|
-
return "plus"
|
|
237
|
-
}
|
|
238
|
-
const icon = () => getIcon(iconName())
|
|
190
|
+
const iconName = () => (icons[split.name as keyof typeof icons] ? (split.name as keyof typeof icons) : "plus")
|
|
191
|
+
const icon = () => icons[iconName()]
|
|
239
192
|
const pixelSize = split.size === "small" ? 14 : split.size === "large" ? 20 : 16
|
|
240
193
|
onMount(ensureSprite)
|
|
241
194
|
|
|
@@ -243,14 +196,6 @@ export function Icon(props: IconProps) {
|
|
|
243
196
|
<svg
|
|
244
197
|
{...rest}
|
|
245
198
|
data-slot="icon-svg"
|
|
246
|
-
data-directional={
|
|
247
|
-
iconName() === "arrow-left" ||
|
|
248
|
-
iconName() === "arrow-right" ||
|
|
249
|
-
iconName() === "chevron-left" ||
|
|
250
|
-
iconName() === "chevron-right"
|
|
251
|
-
? ""
|
|
252
|
-
: undefined
|
|
253
|
-
}
|
|
254
199
|
width={pixelSize}
|
|
255
200
|
height={pixelSize}
|
|
256
201
|
viewBox={icon().viewBox}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
[data-component="inline-input-v2"] {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: row;
|
|
5
|
+
align-items: stretch;
|
|
6
|
+
padding: 0;
|
|
7
|
+
width: 280px;
|
|
8
|
+
height: 28px;
|
|
9
|
+
border: 0;
|
|
10
|
+
border-radius: 6px;
|
|
11
|
+
outline: 1px solid transparent;
|
|
12
|
+
outline-offset: 0;
|
|
13
|
+
background:
|
|
14
|
+
linear-gradient(180deg, var(--v2-alpha-light-2) 0%, var(--v2-alpha-light-0) 100%), var(--v2-background-bg-base);
|
|
15
|
+
box-shadow: var(--v2-elevation-button-neutral);
|
|
16
|
+
flex: none;
|
|
17
|
+
align-self: stretch;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
transition:
|
|
20
|
+
background 85ms ease-out,
|
|
21
|
+
outline-color 85ms ease-out,
|
|
22
|
+
box-shadow 85ms ease-out;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
[data-component="inline-input-v2"][data-appearance="large"] {
|
|
26
|
+
height: 32px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
[data-component="inline-input-v2"]:where(:hover):not([data-disabled], [data-invalid]):not(:focus-within) {
|
|
30
|
+
background:
|
|
31
|
+
linear-gradient(0deg, var(--v2-overlay-simple-overlay-hover), var(--v2-overlay-simple-overlay-hover)),
|
|
32
|
+
linear-gradient(180deg, var(--v2-alpha-light-2) 0%, var(--v2-alpha-light-0) 100%), var(--v2-background-bg-base);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
[data-component="inline-input-v2"]:where(:hover):not([data-disabled], [data-invalid]):not(:focus-within)
|
|
36
|
+
[data-slot="inline-input-v2-prefix"] {
|
|
37
|
+
background: transparent;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
[data-component="inline-input-v2"]:where(:focus-within):not([data-disabled], [data-invalid]) {
|
|
41
|
+
outline-color: var(--v2-border-border-focus);
|
|
42
|
+
box-shadow: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
[data-component="inline-input-v2"]:where([data-invalid]):not([data-disabled]) {
|
|
46
|
+
outline-color: var(--v2-state-fg-danger);
|
|
47
|
+
box-shadow: none;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
[data-component="inline-input-v2"]:where([data-disabled]) {
|
|
51
|
+
opacity: 0.5;
|
|
52
|
+
cursor: not-allowed;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-prefix"] {
|
|
56
|
+
box-sizing: border-box;
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
justify-content: center;
|
|
60
|
+
align-items: flex-start;
|
|
61
|
+
flex: none;
|
|
62
|
+
align-self: stretch;
|
|
63
|
+
width: fit-content;
|
|
64
|
+
min-width: 0;
|
|
65
|
+
max-width: 100%;
|
|
66
|
+
padding: 4px 8px;
|
|
67
|
+
gap: 4px;
|
|
68
|
+
background: var(--v2-background-bg-layer-01);
|
|
69
|
+
border-radius: 4px 0 0 4px;
|
|
70
|
+
cursor: default;
|
|
71
|
+
transition: background 85ms ease-out;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
[data-component="inline-input-v2"]:where([data-disabled]) [data-slot="inline-input-v2-prefix"] {
|
|
75
|
+
cursor: not-allowed;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[data-component="inline-input-v2"][data-label-width] [data-slot="inline-input-v2-prefix"] {
|
|
79
|
+
width: var(--inline-input-v2-label-width);
|
|
80
|
+
min-width: var(--inline-input-v2-label-width);
|
|
81
|
+
max-width: var(--inline-input-v2-label-width);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-prefix-text"] {
|
|
85
|
+
display: block;
|
|
86
|
+
width: 100%;
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
text-overflow: ellipsis;
|
|
89
|
+
white-space: nowrap;
|
|
90
|
+
font-style: normal;
|
|
91
|
+
font-weight: 440;
|
|
92
|
+
font-size: 13px;
|
|
93
|
+
line-height: 1;
|
|
94
|
+
letter-spacing: -0.04px;
|
|
95
|
+
color: var(--v2-text-text-muted);
|
|
96
|
+
font-variation-settings: "slnt" 0;
|
|
97
|
+
user-select: none;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
[data-component="inline-input-v2"][data-numeric] [data-slot="inline-input-v2-prefix-text"] {
|
|
101
|
+
font-variant-numeric: tabular-nums;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-divider"] {
|
|
105
|
+
flex: none;
|
|
106
|
+
align-self: stretch;
|
|
107
|
+
width: 0.5px;
|
|
108
|
+
min-width: 0.5px;
|
|
109
|
+
background: var(--v2-border-border-base);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-field"] {
|
|
113
|
+
display: flex;
|
|
114
|
+
flex-direction: row;
|
|
115
|
+
align-items: center;
|
|
116
|
+
align-self: stretch;
|
|
117
|
+
flex: 1 1 auto;
|
|
118
|
+
min-width: 0;
|
|
119
|
+
padding: 4px 8px;
|
|
120
|
+
gap: 8px;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
[data-component="inline-input-v2"][data-appearance="large"] [data-slot="inline-input-v2-field"] {
|
|
124
|
+
padding-top: 6px;
|
|
125
|
+
padding-bottom: 6px;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-value"] {
|
|
129
|
+
display: flex;
|
|
130
|
+
flex-direction: row;
|
|
131
|
+
align-items: center;
|
|
132
|
+
flex: 1 1 auto;
|
|
133
|
+
min-width: 0;
|
|
134
|
+
min-height: 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-input"] {
|
|
138
|
+
display: block;
|
|
139
|
+
width: 100%;
|
|
140
|
+
min-width: 0;
|
|
141
|
+
height: 100%;
|
|
142
|
+
padding: 0;
|
|
143
|
+
margin: 0;
|
|
144
|
+
border: 0;
|
|
145
|
+
background: transparent;
|
|
146
|
+
outline: none;
|
|
147
|
+
font-style: normal;
|
|
148
|
+
font-weight: 440;
|
|
149
|
+
font-size: 13px;
|
|
150
|
+
line-height: 1;
|
|
151
|
+
letter-spacing: -0.04px;
|
|
152
|
+
color: var(--v2-text-text-base);
|
|
153
|
+
font-variation-settings: "slnt" 0;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-input"]::placeholder {
|
|
157
|
+
color: var(--v2-text-text-faint);
|
|
158
|
+
user-select: none;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
[data-component="inline-input-v2"][data-numeric] [data-slot="inline-input-v2-input"] {
|
|
162
|
+
font-variant-numeric: tabular-nums;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"] {
|
|
166
|
+
display: flex;
|
|
167
|
+
flex-direction: row;
|
|
168
|
+
justify-content: center;
|
|
169
|
+
align-items: center;
|
|
170
|
+
flex: none;
|
|
171
|
+
width: 20px;
|
|
172
|
+
height: 20px;
|
|
173
|
+
padding: 2px;
|
|
174
|
+
gap: 3px;
|
|
175
|
+
border: 0;
|
|
176
|
+
border-radius: 4px;
|
|
177
|
+
background: transparent;
|
|
178
|
+
color: var(--v2-icon-icon-muted);
|
|
179
|
+
cursor: pointer;
|
|
180
|
+
outline: none;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
[data-component="inline-input-v2"]
|
|
184
|
+
[data-slot="inline-input-v2-icon-button"]:is(:hover, [data-state="hover"]):not(:disabled) {
|
|
185
|
+
background-color: var(--v2-overlay-simple-overlay-hover);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
[data-component="inline-input-v2"]
|
|
189
|
+
[data-slot="inline-input-v2-icon-button"]:is(:active, [data-state="pressed"]):not(:disabled) {
|
|
190
|
+
background-color: var(--v2-overlay-simple-overlay-pressed);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"]:focus {
|
|
194
|
+
outline: none;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"]:focus-visible {
|
|
198
|
+
outline: 2px solid var(--v2-border-border-focus);
|
|
199
|
+
outline-offset: 1px;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
[data-component="inline-input-v2"]:where([data-disabled]) [data-slot="inline-input-v2-icon-button"] {
|
|
203
|
+
cursor: not-allowed;
|
|
204
|
+
pointer-events: none;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
[data-component="inline-input-v2"] [data-slot="inline-input-v2-icon-button"] [data-slot="icon-svg"] {
|
|
208
|
+
display: block;
|
|
209
|
+
flex: none;
|
|
210
|
+
color: currentColor;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
[data-component="inline-input-v2"][data-invalid]:not([data-disabled]) [data-slot="inline-input-v2-prefix-text"] {
|
|
214
|
+
color: var(--v2-text-text-muted);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
[data-component="inline-input-v2"][data-invalid]:not([data-disabled]) [data-slot="inline-input-v2-input"] {
|
|
218
|
+
color: var(--v2-state-fg-danger);
|
|
219
|
+
caret-color: var(--v2-state-fg-danger);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
[data-component="inline-input-v2"][data-invalid]:not([data-disabled]) [data-slot="inline-input-v2-input"]::placeholder {
|
|
223
|
+
color: var(--v2-state-fg-danger);
|
|
224
|
+
opacity: 1;
|
|
225
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type ComponentProps, type JSX, Show, splitProps } from "solid-js"
|
|
2
|
+
import { Icon } from "./icon"
|
|
3
|
+
import { useI18n } from "../../context/i18n"
|
|
4
|
+
import "./inline-input-v2.css"
|
|
5
|
+
|
|
6
|
+
export interface InlineInputV2Props extends Omit<ComponentProps<"input">, "type" | "prefix"> {
|
|
7
|
+
/** Inline label shown before the field (prefix segment). */
|
|
8
|
+
prefix: JSX.Element
|
|
9
|
+
/** Fixed width for the prefix segment (px number or CSS length). Omit for fit-content. */
|
|
10
|
+
labelWidth?: number | string
|
|
11
|
+
/** Show the trailing copy action. */
|
|
12
|
+
showCopyButton?: boolean
|
|
13
|
+
/** Accessible label for the copy button. */
|
|
14
|
+
copyLabel?: string
|
|
15
|
+
onCopyClick?: (event: MouseEvent) => void
|
|
16
|
+
/** Apply tabular numerals to the prefix and field value. */
|
|
17
|
+
numeric?: boolean
|
|
18
|
+
/** Error styling for the field and value text. */
|
|
19
|
+
invalid?: boolean
|
|
20
|
+
/** `base` is 28px tall; `large` is 32px tall. */
|
|
21
|
+
appearance?: "base" | "large"
|
|
22
|
+
type?: ComponentProps<"input">["type"]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function InlineInputV2(props: InlineInputV2Props) {
|
|
26
|
+
const i18n = useI18n()
|
|
27
|
+
const [local, inputProps] = splitProps(props, [
|
|
28
|
+
"class",
|
|
29
|
+
"classList",
|
|
30
|
+
"prefix",
|
|
31
|
+
"labelWidth",
|
|
32
|
+
"showCopyButton",
|
|
33
|
+
"copyLabel",
|
|
34
|
+
"onCopyClick",
|
|
35
|
+
"numeric",
|
|
36
|
+
"invalid",
|
|
37
|
+
"appearance",
|
|
38
|
+
"disabled",
|
|
39
|
+
"style",
|
|
40
|
+
])
|
|
41
|
+
|
|
42
|
+
let input: HTMLInputElement | undefined
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div
|
|
46
|
+
data-component="inline-input-v2"
|
|
47
|
+
data-disabled={local.disabled ? "" : undefined}
|
|
48
|
+
data-invalid={local.invalid ? "" : undefined}
|
|
49
|
+
data-numeric={local.numeric ? "" : undefined}
|
|
50
|
+
data-appearance={local.appearance ?? "base"}
|
|
51
|
+
data-label-width={local.labelWidth != null ? "" : undefined}
|
|
52
|
+
classList={{
|
|
53
|
+
...local.classList,
|
|
54
|
+
[local.class ?? ""]: !!local.class,
|
|
55
|
+
}}
|
|
56
|
+
style={{
|
|
57
|
+
...(typeof local.style === "object" && local.style != null ? local.style : {}),
|
|
58
|
+
...(local.labelWidth != null
|
|
59
|
+
? {
|
|
60
|
+
"--inline-input-v2-label-width":
|
|
61
|
+
typeof local.labelWidth === "number" ? `${local.labelWidth}px` : local.labelWidth,
|
|
62
|
+
}
|
|
63
|
+
: {}),
|
|
64
|
+
}}
|
|
65
|
+
>
|
|
66
|
+
<div
|
|
67
|
+
data-slot="inline-input-v2-prefix"
|
|
68
|
+
onMouseDown={(event) => {
|
|
69
|
+
if (local.disabled || event.button !== 0) return
|
|
70
|
+
// Keep focus on the input without using a native <label>, so external labels still work.
|
|
71
|
+
event.preventDefault()
|
|
72
|
+
input?.focus()
|
|
73
|
+
}}
|
|
74
|
+
>
|
|
75
|
+
<span data-slot="inline-input-v2-prefix-text">{local.prefix}</span>
|
|
76
|
+
</div>
|
|
77
|
+
<div data-slot="inline-input-v2-divider" aria-hidden="true" />
|
|
78
|
+
<div data-slot="inline-input-v2-field">
|
|
79
|
+
<div data-slot="inline-input-v2-value">
|
|
80
|
+
<input
|
|
81
|
+
{...inputProps}
|
|
82
|
+
ref={(el) => {
|
|
83
|
+
input = el
|
|
84
|
+
const ref = inputProps.ref
|
|
85
|
+
if (typeof ref === "function") ref(el)
|
|
86
|
+
}}
|
|
87
|
+
type={inputProps.type ?? "text"}
|
|
88
|
+
disabled={local.disabled}
|
|
89
|
+
aria-invalid={local.invalid ? true : undefined}
|
|
90
|
+
data-slot="inline-input-v2-input"
|
|
91
|
+
/>
|
|
92
|
+
</div>
|
|
93
|
+
<Show when={local.showCopyButton}>
|
|
94
|
+
<button
|
|
95
|
+
type="button"
|
|
96
|
+
data-slot="inline-input-v2-icon-button"
|
|
97
|
+
aria-label={local.copyLabel ?? i18n.t("ui.message.copy")}
|
|
98
|
+
disabled={local.disabled}
|
|
99
|
+
onClick={local.onCopyClick}
|
|
100
|
+
>
|
|
101
|
+
<Icon name="copy" />
|
|
102
|
+
</button>
|
|
103
|
+
</Show>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
)
|
|
107
|
+
}
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
justify-content: center;
|
|
28
28
|
align-items: center;
|
|
29
29
|
padding: 0;
|
|
30
|
-
padding-inline: 4px;
|
|
31
30
|
gap: 4px;
|
|
32
31
|
min-width: 14px;
|
|
33
32
|
height: 14px;
|
|
@@ -49,6 +48,7 @@
|
|
|
49
48
|
flex-direction: row;
|
|
50
49
|
justify-content: center;
|
|
51
50
|
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.css"
|
|
2
|
+
import "./keybind-v2.css"
|
|
3
3
|
|
|
4
|
-
export interface
|
|
4
|
+
export interface KeybindV2Props extends ComponentProps<"div"> {
|
|
5
5
|
keys: string[]
|
|
6
6
|
variant?: "neutral" | "ghost"
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export function
|
|
9
|
+
export function KeybindV2(props: KeybindV2Props) {
|
|
10
10
|
const [local, rest] = splitProps(props, ["keys", "variant", "class", "classList"])
|
|
11
11
|
return (
|
|
12
12
|
<div
|
package/src/{data-display/line-comment/line-comment.css → v2/components/line-comment-v2.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: 1;
|
|
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: 1;
|
|
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"]) {
|
|
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: 1;
|
|
142
142
|
letter-spacing: -0.04px;
|
|
143
143
|
color: var(--v2-text-text-base);
|
|
144
144
|
user-select: none;
|
package/src/{data-display/line-comment/line-comment.tsx → v2/components/line-comment-v2.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 "../../components/file-icon"
|
|
3
3
|
import { useI18n } from "../../context/i18n"
|
|
4
4
|
import { useFilteredList } from "../../hooks"
|
|
5
|
-
import {
|
|
6
|
-
import "./line-comment.css"
|
|
5
|
+
import { ButtonV2 } from "./button-v2"
|
|
6
|
+
import "./line-comment-v2.css"
|
|
7
7
|
|
|
8
8
|
/** Horizontal “more” glyph for the display-card overflow control (Figma outline-dots). */
|
|
9
|
-
export function
|
|
9
|
+
export function LineCommentV2OverflowIcon(props: ComponentProps<"svg">) {
|
|
10
10
|
return (
|
|
11
11
|
<svg
|
|
12
12
|
{...props}
|
|
@@ -24,16 +24,16 @@ export function LineCommentOverflowIcon(props: ComponentProps<"svg">) {
|
|
|
24
24
|
)
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export interface
|
|
27
|
+
export interface LineCommentV2Props 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 `LineCommentV2OverflowIcon` inside `line-comment-v2-overflow`. */
|
|
33
33
|
actions?: JSX.Element
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export function
|
|
36
|
+
export function LineCommentV2(props: LineCommentV2Props) {
|
|
37
37
|
const [local, rest] = splitProps(props, ["comment", "selection", "actions", "class", "classList"])
|
|
38
38
|
return (
|
|
39
39
|
<div
|
|
@@ -56,11 +56,11 @@ export function LineComment(props: LineCommentProps) {
|
|
|
56
56
|
)
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
export type
|
|
59
|
+
export type LineCommentEditorV2Mention = {
|
|
60
60
|
items: (query: string) => string[] | Promise<string[]>
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export interface
|
|
63
|
+
export interface LineCommentEditorV2Props 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 LineCommentEditorProps extends Omit<ComponentProps<"div">, "chi
|
|
|
73
73
|
cancelLabel?: string
|
|
74
74
|
submitLabel?: string
|
|
75
75
|
autofocus?: boolean
|
|
76
|
-
mention?:
|
|
76
|
+
mention?: LineCommentEditorV2Mention
|
|
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 LineCommentEditorV2(props: LineCommentEditorV2Props) {
|
|
90
90
|
const i18n = useI18n()
|
|
91
91
|
let textareaRef: HTMLTextAreaElement | undefined
|
|
92
92
|
const [mentionOpen, setMentionOpen] = createSignal(false)
|
|
@@ -212,11 +212,9 @@ export function LineCommentEditor(props: LineCommentEditorProps) {
|
|
|
212
212
|
textareaRef = el
|
|
213
213
|
}}
|
|
214
214
|
data-slot="line-comment-v2-textarea"
|
|
215
|
-
dir="auto"
|
|
216
215
|
rows={local.rows ?? 3}
|
|
217
216
|
placeholder={local.placeholder ?? i18n.t("ui.lineComment.contextPlaceholder")}
|
|
218
217
|
value={local.value}
|
|
219
|
-
style={{ "unicode-bidi": "plaintext", "text-align": "start" }}
|
|
220
218
|
onInput={(e) => {
|
|
221
219
|
local.onInput(e.currentTarget.value)
|
|
222
220
|
syncMention()
|
|
@@ -294,12 +292,12 @@ export function LineCommentEditor(props: LineCommentEditorProps) {
|
|
|
294
292
|
<div data-slot="line-comment-v2-footer">
|
|
295
293
|
<div data-slot="line-comment-v2-footer-meta">{local.selection}</div>
|
|
296
294
|
<div data-slot="line-comment-v2-footer-actions">
|
|
297
|
-
<
|
|
295
|
+
<ButtonV2 type="button" size="normal" variant="neutral" onClick={() => local.onCancel()}>
|
|
298
296
|
{local.cancelLabel ?? i18n.t("ui.lineComment.cancel")}
|
|
299
|
-
</
|
|
300
|
-
<
|
|
297
|
+
</ButtonV2>
|
|
298
|
+
<ButtonV2 type="button" size="normal" variant="contrast" disabled={!canSubmit()} onClick={submit}>
|
|
301
299
|
{local.submitLabel ?? i18n.t("ui.lineComment.submit")}
|
|
302
|
-
</
|
|
300
|
+
</ButtonV2>
|
|
303
301
|
</div>
|
|
304
302
|
</div>
|
|
305
303
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { splitProps, type ComponentProps } from "solid-js"
|
|
2
|
-
import "./loader.css"
|
|
2
|
+
import "./loader-v2.css"
|
|
3
3
|
|
|
4
|
-
export function
|
|
4
|
+
export function LoaderV2(props: ComponentProps<"svg">) {
|
|
5
5
|
const [local, rest] = splitProps(props, ["class", "classList", "width", "height"])
|
|
6
6
|
return (
|
|
7
7
|
<svg
|