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