Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
6f5a3d3
keep recent turns during session compaction
nexxeln Apr 10, 2026
aa86fb7
refactor compaction tail selection
nexxeln Apr 10, 2026
9819eb0
tweak: disable
rekram1-node Apr 10, 2026
2e18a60
merge dev
nexxeln Apr 16, 2026
42771c1
fix(compaction): budget retained tail with media
nexxeln Apr 16, 2026
a488229
Merge branch 'dev' into nxl/improve-compaction-strategy
Brendonovich Apr 17, 2026
e543acf
chore: bump electron and fix taskbar icon (#23368)
Hona Apr 19, 2026
40ba8f3
sync release versions for v1.14.17
Apr 19, 2026
b34ca44
fix incorrect config directory by lazily loading electron-store (#23373)
Hona Apr 19, 2026
9ed9371
chore: update nix node_modules hashes
opencode-agent[bot] Apr 19, 2026
f14ac47
docs: document --dangerously-skip-permissions CLI flag (#23371)
ariane-emory Apr 19, 2026
75960e3
chore: generate
opencode-agent[bot] Apr 19, 2026
fc05889
fix (#23385)
rekram1-node Apr 19, 2026
40834fd
core: allow users with credits but no payment method to access zen mode
thdxr Apr 19, 2026
f02504b
chore: generate
opencode-agent[bot] Apr 19, 2026
135c8f0
chore: generate
opencode-agent[bot] Apr 19, 2026
e60a6e3
fix: change Free download button text to Download (#23388)
thdxr Apr 19, 2026
7f3b64c
chore: update nix node_modules hashes
opencode-agent[bot] Apr 19, 2026
889087c
fix(ripgrep): restore native rg backend (#22773)
nexxeln Apr 19, 2026
e998c9e
chore: update nix node_modules hashes
opencode-agent[bot] Apr 19, 2026
a546e88
fix(desktop-electron): run JSON migration before spawning sidecar (#2…
Brendonovich Apr 19, 2026
8ee47a0
chore: update nix node_modules hashes
opencode-agent[bot] Apr 19, 2026
83227be
fix(version): remove --target flag from beta release creation (#23403)
Brendonovich Apr 19, 2026
c09bcfe
sync release versions for v1.14.18
Apr 19, 2026
10bd044
feat: add terminal font settings and built-in Nerd Font (#23391)
Hona Apr 19, 2026
33b2795
chore: generate
opencode-agent[bot] Apr 19, 2026
a824064
stabilize TUI theme persistence and KV writes (#23188)
kommander Apr 19, 2026
9c7e52b
chore: update nix node_modules hashes
opencode-agent[bot] Apr 19, 2026
6eddf08
flip toolcall prune defaults
thdxr Apr 19, 2026
5ae74aa
Merge branch 'nxl/improve-compaction-strategy' into dev
thdxr Apr 19, 2026
48acab4
ci: skip Docker builds during preview releases to save time
thdxr Apr 19, 2026
29f05cb
chore: generate
opencode-agent[bot] Apr 19, 2026
b9640fc
core: fix session compaction test to properly enable prune config option
thdxr Apr 19, 2026
e4be557
ci: skip beta smoke fixes for now
thdxr Apr 20, 2026
6e01786
feat(provider): add NVIDIA to popular providers, docs, and attributio…
anniesurla Apr 20, 2026
a7a85c9
fix(core): fix Windows managed install and bump ripgrep to 15.1.0 for…
Hona Apr 20, 2026
cbe702c
chore: generate
opencode-agent[bot] Apr 20, 2026
93e633f
refactor(app): move QueryProvider to AppInterface (#23484)
Brendonovich Apr 20, 2026
8bc4f91
fix: parallel edits sometimes would override each other (#23483)
rekram1-node Apr 20, 2026
84e322b
chore: generate
opencode-agent[bot] Apr 20, 2026
687b758
app: better loading (#23489)
Brendonovich Apr 20, 2026
e539efe
fix: patch arborist to get around bun bug (#23460)
rekram1-node Apr 20, 2026
c6c56ac
tweak: rename tail_tokens -> preserve_recent_tokens (#23491)
rekram1-node Apr 20, 2026
f3d5a71
chore: generate
opencode-agent[bot] Apr 20, 2026
3ddc69e
chore: update nix node_modules hashes
opencode-agent[bot] Apr 20, 2026
7a568a4
fix: defer MessageV2.Assistant.shape access to break circular dep in …
Hona Apr 20, 2026
7c6948c
sync release versions for v1.14.19
Apr 20, 2026
91468fe
fix(ui): use parentID matching instead of positional scan for assista…
heimoshuiyu Apr 20, 2026
16caaa2
fix(app): fall back to icon.url in sidebar avatar (#18747)
ysm-dev Apr 20, 2026
ae7a351
zen: tpm based routing
fwang Apr 20, 2026
d68ebee
docs(go): add Kimi K2.6 to Go and Zen content (#23558)
MrMushrooooom Apr 20, 2026
7e576ee
chore: generate
opencode-agent[bot] Apr 20, 2026
3406f18
fix(plugin): add env parameter to WorkspaceAdaptor.create type (#23235)
jamesmurdza Apr 20, 2026
8b33237
chore: generate
opencode-agent[bot] Apr 20, 2026
debcff2
feat(core): add debug workspace server (#23590)
jlongster Apr 20, 2026
bd1bdc4
chore: generate
opencode-agent[bot] Apr 20, 2026
ad65af2
zen: tpm routing
fwang Apr 20, 2026
06dde3a
chore: generate
opencode-agent[bot] Apr 20, 2026
bad025e
sync
fwang Apr 20, 2026
65e99fc
chore: generate
opencode-agent[bot] Apr 20, 2026
3e8abac
sync
fwang Apr 20, 2026
f74a255
zen: tpm routing
fwang Apr 21, 2026
53b0084
chore: generate
opencode-agent[bot] Apr 21, 2026
6278ce5
zen: tpm routing
fwang Apr 21, 2026
a38d53f
chore: generate
opencode-agent[bot] Apr 21, 2026
e5687d6
electron: use custom oc:// protocol for renderer windows (#23516)
Brendonovich Apr 21, 2026
4964ce4
chore: generate
opencode-agent[bot] Apr 21, 2026
eb99064
refactor(desktop-electron): enable contextIsolation and sandbox (#23523)
Brendonovich Apr 21, 2026
a08aa21
chore: generate
opencode-agent[bot] Apr 21, 2026
bd54b68
zen: m2.7 & k2.6
fwang Apr 21, 2026
38e2f4c
fix(desktop-electron): add CORS headers to main window webRequest (#2…
Brendonovich Apr 21, 2026
1e0137f
go: promote kimi k2.6 usage limits (#23634)
MrMushrooooom Apr 21, 2026
22d33c5
fix(app): properly wrap produce calls in setProjects (#23638)
Brendonovich Apr 21, 2026
8a7bb7c
zen: tpm routing
fwang Apr 21, 2026
224548d
fix(desktop): adjust layout properties in DialogSelectServer componen…
OpeOginni Apr 21, 2026
92c0058
fix(core): use file:// URLs for local dynamic import() on Windows+Nod…
Hona Apr 21, 2026
febadc5
fix(ui): correct diff render condition logic (#23670)
Brendonovich Apr 21, 2026
811a7e9
feat(app): allow disabling progress bar in settings (#23674)
Brendonovich Apr 21, 2026
8d2d12d
chore: generate
opencode-agent[bot] Apr 21, 2026
8cc2c81
fix(app): prevent prompt input animations from rerunning on every ren…
Brendonovich Apr 21, 2026
b5acc22
fix(core): fix permissions routing when using remote workspace (#23593)
jlongster Apr 21, 2026
2486621
chore: kill unused tool (#23701)
rekram1-node Apr 21, 2026
9579429
test(opencode): consolidate session prompt tests into Effect style (#…
kitlangton Apr 21, 2026
96a534d
feat(core): bridge GET /config through experimental HttpApi (#23712)
kitlangton Apr 21, 2026
e95474d
fix: revert parts of a824064c4 which caused system theme regression (…
rekram1-node Apr 21, 2026
3205f12
chore: update nix node_modules hashes
opencode-agent[bot] Apr 21, 2026
ecc06a3
refactor(core): make Config.Info canonical Effect Schema (#23716)
kitlangton Apr 21, 2026
1e1a500
chore: generate
opencode-agent[bot] Apr 21, 2026
c9fb8d0
sync release versions for v1.14.20
Apr 21, 2026
cd6415f
fix(tui): don't check for version upgrades if it's disabled by the us…
rahuliyer95 Apr 21, 2026
58232d8
fix: dont show variants for kimi models that dont support them (#23696)
rekram1-node Apr 21, 2026
8751f48
Update VOUCHED list
github-actions[bot] Apr 21, 2026
1a20703
feat: add Mistral Small reasoning variant support (issue #19479) (#23…
rubdos Apr 21, 2026
caaddf0
zen: ling 2.6 free
fwang Apr 21, 2026
7933657
migrate LSP data schemas to Effect Schema (#23745)
kitlangton Apr 21, 2026
2ae64f4
refactor(core): migrate MessageV2.Format to Effect Schema (#23744)
kitlangton Apr 21, 2026
b0f565b
refactor(core): migrate ConfigPermission.Info to Effect Schema canoni…
kitlangton Apr 21, 2026
b1c3095
chore: generate
opencode-agent[bot] Apr 21, 2026
0bcf734
migrate Snapshot schemas to Effect Schema (#23747)
kitlangton Apr 21, 2026
d6dea3f
chore(core): clean up after ConfigPermission Effect Schema migration …
kitlangton Apr 21, 2026
df0c1f6
refactor(core): migrate MessageV2 tool state schemas to Effect Schema…
kitlangton Apr 21, 2026
2da6d86
refactor(core): derive provider schema .zod via effect-zod walker (#2…
kitlangton Apr 21, 2026
5e9fb3c
feat: replace csharp-ls with roslyn-language-server (#14463)
jmbryan4 Apr 21, 2026
d2181e9
chore: generate
opencode-agent[bot] Apr 21, 2026
8043cfa
fix(desktop): update desktop file and MetaInfo file (#14933)
NN708 Apr 21, 2026
ad7ae73
refactor(core): derive all schema.ts leaves' .zod via effect-zod walk…
kitlangton Apr 22, 2026
628102a
zen: handle alibaba format
fwang Apr 22, 2026
fa62396
refactor(core): migrate MessageV2 part leaves + ToolPart to Effect Sc…
kitlangton Apr 22, 2026
1a76799
chore: generate
opencode-agent[bot] Apr 22, 2026
e895438
refactor(core): migrate MessageV2 message DTOs (User/Assistant/Part/I…
kitlangton Apr 22, 2026
1593c3e
refactor(core): migrate MessageV2 internal Cursor to Effect Schema (#…
kitlangton Apr 22, 2026
ed802fd
refactor(core): migrate MessageV2 errors to Schema-backed named error…
kitlangton Apr 22, 2026
b045558
chore: generate
opencode-agent[bot] Apr 22, 2026
69b8ea0
chore: bump Bun to 1.3.13 (#23791)
Hona Apr 22, 2026
06066db
fix(app): improve icon override handling in project edit dialog (#23768)
Brendonovich Apr 22, 2026
c819804
chore: update nix node_modules hashes
opencode-agent[bot] Apr 22, 2026
8113a43
fix: preserve BOM in text tool round-trips (#23797)
Hona Apr 22, 2026
894e638
chore: generate
opencode-agent[bot] Apr 22, 2026
20756e0
test: fix cross-spawn stderr race on Windows CI (#23808)
Hona Apr 22, 2026
71d196d
chore: generate
opencode-agent[bot] Apr 22, 2026
d884ab7
fix: consolidate project avatar source logic (#23819)
Brendonovich Apr 22, 2026
6196b81
fix(tui): fail fast on invalid session startup (#23837)
nexxeln Apr 22, 2026
fa8b7bc
chore: generate
opencode-agent[bot] Apr 22, 2026
574b2c2
fix(session): improve session compaction (#23870)
nexxeln Apr 22, 2026
504fd1b
chore: generate
opencode-agent[bot] Apr 22, 2026
3a082a0
fix(project): use git common dir for bare repo project cache (#19054)
StevenTCramer Apr 22, 2026
e9b1d3b
docs: add MiMo V2.5 to Go pages (#23876)
MrMushrooooom Apr 22, 2026
5d133f2
chore: generate
opencode-agent[bot] Apr 22, 2026
58db41b
chore: update nix bun version (#23881)
gigamonster256 Apr 22, 2026
e383df4
feat: support pull diagnostics in the LSP client (C#, Kotlin, etc) (#…
Hona Apr 22, 2026
1cd4c92
chore: generate
opencode-agent[bot] Apr 22, 2026
6387b35
log session sdk errors (#23652)
Hona Apr 23, 2026
ac26394
fix(beta): PR resolvers/smoke check should typecheck all pacakges (#2…
Hona Apr 23, 2026
9730008
tweak: codex model logic (#23925)
rekram1-node Apr 23, 2026
df27baa
refactor: remove redundant pending check from working memo (#23929)
Brendonovich Apr 23, 2026
871789c
sync release versions for v1.14.21
Apr 23, 2026
a419f1c
zen: hy3 preview
fwang Apr 23, 2026
785f358
fix: add keyed prop to Show components for proper reactivity (#23935)
Brendonovich Apr 23, 2026
6002500
feat(project): add icon_url_override field to projects (#23955)
Brendonovich Apr 23, 2026
3ae74cb
chore: generate
opencode-agent[bot] Apr 23, 2026
9b6db08
chore: add to TEAM_MEMBERS (#23975)
simonklee Apr 23, 2026
38deb0f
fix(npm): respect npmrc config (#24001)
nexxeln Apr 23, 2026
596145a
release: v1.14.22
Apr 23, 2026
5bd50c6
refactor: kilo compat for v1.14.22
imanolmzd-svg Apr 24, 2026
5e51925
resolve merge conflicts
imanolmzd-svg Apr 24, 2026
eea7211
fix(kilocode): update schema references to use .zod accessor after ef…
imanolmzd-svg Apr 24, 2026
3cec1ff
refactor(snapshot): introduce SummaryFileDiff schema and tighten Kilo…
imanolmzd-svg Apr 24, 2026
6e0e278
build(sdk): regenerate SDK types and sort package.json dependencies
imanolmzd-svg Apr 24, 2026
0a9b293
Merge branch 'main' into imanolmaiztegui/kilo-opencode-v1.14.22
imanolmzd-svg Apr 24, 2026
7631e13
docs(kilo-docs): add Mistral reasoning documentation URL to source links
imanolmzd-svg Apr 24, 2026
2a6c429
fix(opencode): remove mistral from reasoning model check and rebrand …
imanolmzd-svg Apr 24, 2026
9fb07ca
test(opencode): skip flaky prompt tests and update agent reference
imanolmzd-svg Apr 25, 2026
2fb8052
Merge branch 'main' into imanolmaiztegui/kilo-opencode-v1.14.22
imanolmzd-svg Apr 25, 2026
7672adb
fix(opencode): use `pwd -P` in shell spawns to resolve stale PWD on CI
imanolmzd-svg Apr 25, 2026
b21778d
refactor(session): pass cwd as positional arg to login shells instead…
imanolmzd-svg Apr 25, 2026
09513e0
fix(prompt): clean up shell invocation comments and simplify cwd hand…
imanolmzd-svg Apr 25, 2026
79d23cb
debug: use GitHub-hosted windows-2025 runner to isolate Blacksmith
imanolmzd-svg Apr 25, 2026
2721d15
debug: try windows-2022 to test Windows Server 2025 hypothesis
imanolmzd-svg Apr 25, 2026
9de2221
debug: use D:\tmp on windows to avoid C:\Users symlink causing os err…
imanolmzd-svg Apr 25, 2026
08255dd
debug: back to blacksmith-8vcpu-windows-2025 with D:\tmp fix
imanolmzd-svg Apr 25, 2026
e99dfe5
test: skip ripgrep-dependent tests on windows (#9496)
imanolmzd-svg Apr 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 14 additions & 9 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 19 additions & 18 deletions nix/kilo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
sysctl,
makeBinaryWrapper,
models-dev,
ripgrep,
installShellFiles,
versionCheckHook,
writableTmpDirAsHomeHook,
Expand Down Expand Up @@ -51,25 +52,25 @@ stdenvNoCC.mkDerivation (finalAttrs: {
runHook postBuild
'';

installPhase =
''
runHook preInstall

install -Dm755 dist/@kilocode/cli-*/bin/kilo $out/bin/kilo
install -Dm644 schema.json $out/share/kilo/schema.json
''
# bun runs sysctl to detect if dunning on rosetta2
+ lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
wrapProgram $out/bin/kilo \
--prefix PATH : ${
lib.makeBinPath [
sysctl
installPhase = ''
runHook preInstall

install -Dm755 dist/@kilocode/cli-*/bin/kilo $out/bin/kilo
install -Dm644 schema.json $out/share/kilo/schema.json

wrapProgram $out/bin/kilo \
--prefix PATH : ${
lib.makeBinPath (
[
ripgrep
]
}
''
+ ''
runHook postInstall
'';
# bun runs sysctl to detect if dunning on rosetta2
++ lib.optional stdenvNoCC.hostPlatform.isDarwin sysctl
)
}

runHook postInstall
'';

postInstall = lib.optionalString (stdenvNoCC.buildPlatform.canExecute stdenvNoCC.hostPlatform) ''
# trick yargs into also generating zsh completions
Expand Down
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
"description": "AI-powered development tool",
"private": true,
"type": "module",
"packageManager": "[email protected].11",
"packageManager": "[email protected].13",
"scripts": {
"dev": "bun run --cwd packages/opencode --conditions=browser src/index.ts",
"dev:desktop": "bun --cwd packages/desktop tauri dev",
"dev:desktop": "bun --cwd packages/desktop-electron dev",
"dev:web": "bun --cwd packages/app dev",
"dev:console": "ulimit -n 10240 2>/dev/null; bun run --cwd packages/console/app dev",
"dev:storybook": "bun --cwd packages/storybook storybook",
Expand All @@ -29,7 +29,7 @@
"@effect/opentelemetry": "4.0.0-beta.48",
"@effect/platform-node": "4.0.0-beta.48",
"@npmcli/arborist": "9.4.0",
"@types/bun": "1.3.11",
"@types/bun": "1.3.12",
"@types/cross-spawn": "6.0.6",
"@octokit/rest": "22.0.0",
"@hono/zod-validator": "0.4.2",
Expand Down Expand Up @@ -141,6 +141,7 @@
"happy-dom": ">=20.8.9"
},
"patchedDependencies": {
"@npmcli/[email protected]": "patches/@npmcli%[email protected]",
"@standard-community/[email protected]": "patches/@standard-community%[email protected]",
"[email protected]": "patches/[email protected]",
"[email protected]": "patches/[email protected]"
Expand Down
Binary file not shown.
42 changes: 21 additions & 21 deletions packages/app/src/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -141,13 +141,11 @@ export function AppBaseProviders(props: ParentProps<{ locale?: Locale }>) {
<LanguageProvider locale={props.locale}>
<UiI18nBridge>
<ErrorBoundary fallback={(error) => <ErrorPage error={error} />}>
<QueryProvider>
<DialogProvider>
<MarkedProvider>
<FileComponentProvider component={File}>{props.children}</FileComponentProvider>
</MarkedProvider>
</DialogProvider>
</QueryProvider>
<DialogProvider>
<MarkedProvider>
<FileComponentProvider component={File}>{props.children}</FileComponentProvider>
</MarkedProvider>
</DialogProvider>
</ErrorBoundary>
</UiI18nBridge>
</LanguageProvider>
Expand Down Expand Up @@ -293,20 +291,22 @@ export function AppInterface(props: {
>
<ConnectionGate disableHealthCheck={props.disableHealthCheck}>
<ServerKey>
<GlobalSDKProvider>
<GlobalSyncProvider>
<Dynamic
component={props.router ?? Router}
root={(routerProps) => <RouterRoot appChildren={props.children}>{routerProps.children}</RouterRoot>}
>
<Route path="/" component={HomeRoute} />
<Route path="/:dir" component={DirectoryLayout}>
<Route path="/" component={SessionIndexRoute} />
<Route path="/session/:id?" component={SessionRoute} />
</Route>
</Dynamic>
</GlobalSyncProvider>
</GlobalSDKProvider>
<QueryProvider>
<GlobalSDKProvider>
<GlobalSyncProvider>
<Dynamic
component={props.router ?? Router}
root={(routerProps) => <RouterRoot appChildren={props.children}>{routerProps.children}</RouterRoot>}
>
<Route path="/" component={HomeRoute} />
<Route path="/:dir" component={DirectoryLayout}>
<Route path="/" component={SessionIndexRoute} />
<Route path="/session/:id?" component={SessionRoute} />
</Route>
</Dynamic>
</GlobalSyncProvider>
</GlobalSDKProvider>
</QueryProvider>
</ServerKey>
</ConnectionGate>
</ServerProvider>
Expand Down
52 changes: 31 additions & 21 deletions packages/app/src/components/dialog-edit-project.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { type LocalProject, getAvatarColors } from "@/context/layout"
import { getFilename } from "@opencode-ai/shared/util/path"
import { Avatar } from "@opencode-ai/ui/avatar"
import { useLanguage } from "@/context/language"
import { getProjectAvatarSource } from "@/pages/layout/sidebar-items"

const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const

Expand All @@ -26,8 +27,8 @@ export function DialogEditProject(props: { project: LocalProject }) {

const [store, setStore] = createStore({
name: defaultName(),
color: props.project.icon?.color || "pink",
iconUrl: props.project.icon?.override || "",
color: props.project.icon?.color,
iconOverride: props.project.icon?.override,
startup: props.project.commands?.start ?? "",
dragOver: false,
iconHover: false,
Expand All @@ -39,7 +40,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
if (!file.type.startsWith("image/")) return
const reader = new FileReader()
reader.onload = (e) => {
setStore("iconUrl", e.target?.result as string)
setStore("iconOverride", e.target?.result as string)
setStore("iconHover", false)
}
reader.readAsDataURL(file)
Expand Down Expand Up @@ -68,7 +69,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
}

function clearIcon() {
setStore("iconUrl", "")
setStore("iconOverride", "")
}

const saveMutation = useMutation(() => ({
Expand All @@ -81,17 +82,17 @@ export function DialogEditProject(props: { project: LocalProject }) {
projectID: props.project.id,
directory: props.project.worktree,
name,
icon: { color: store.color, override: store.iconUrl },
icon: { color: store.color || "", override: store.iconOverride || "" },
commands: { start },
})
globalSync.project.icon(props.project.worktree, store.iconUrl || undefined)
globalSync.project.icon(props.project.worktree, store.iconOverride || undefined)
dialog.close()
return
}

globalSync.project.meta(props.project.worktree, {
name,
icon: { color: store.color, override: store.iconUrl || undefined },
icon: { color: store.color || undefined, override: store.iconOverride || undefined },
commands: { start: start || undefined },
})
dialog.close()
Expand Down Expand Up @@ -130,21 +131,25 @@ export function DialogEditProject(props: { project: LocalProject }) {
classList={{
"border-text-interactive-base bg-surface-info-base/20": store.dragOver,
"border-border-base hover:border-border-strong": !store.dragOver,
"overflow-hidden": !!store.iconUrl,
"overflow-hidden": !!store.iconOverride,
}}
onDrop={handleDrop}
onDragOver={handleDragOver}
onDragLeave={handleDragLeave}
onClick={() => {
if (store.iconUrl && store.iconHover) {
if (store.iconOverride && store.iconHover) {
clearIcon()
} else {
iconInput?.click()
}
}}
>
<Show
when={store.iconUrl}
when={getProjectAvatarSource(props.project.id, {
color: store.color,
url: props.project.icon?.url,
override: store.iconOverride,
})}
fallback={
<div class="size-full flex items-center justify-center">
<Avatar
Expand All @@ -155,27 +160,29 @@ export function DialogEditProject(props: { project: LocalProject }) {
</div>
}
>
<img
src={store.iconUrl}
alt={language.t("dialog.project.edit.icon.alt")}
class="size-full object-cover"
/>
{(src) => (
<img
src={src()}
alt={language.t("dialog.project.edit.icon.alt")}
class="size-full object-cover"
/>
)}
</Show>
</div>
<div
class="absolute inset-0 size-16 bg-surface-raised-stronger-non-alpha/90 rounded-[6px] z-10 pointer-events-none flex items-center justify-center transition-opacity"
classList={{
"opacity-100": store.iconHover && !store.iconUrl,
"opacity-0": !(store.iconHover && !store.iconUrl),
"opacity-100": store.iconHover && !store.iconOverride,
"opacity-0": !(store.iconHover && !store.iconOverride),
}}
>
<Icon name="cloud-upload" size="large" class="text-icon-on-interactive-base drop-shadow-sm" />
</div>
<div
class="absolute inset-0 size-16 bg-surface-raised-stronger-non-alpha/90 rounded-[6px] z-10 pointer-events-none flex items-center justify-center transition-opacity"
classList={{
"opacity-100": store.iconHover && !!store.iconUrl,
"opacity-0": !(store.iconHover && !!store.iconUrl),
"opacity-100": store.iconHover && !!store.iconOverride,
"opacity-0": !(store.iconHover && !!store.iconOverride),
}}
>
<Icon name="trash" size="large" class="text-icon-on-interactive-base drop-shadow-sm" />
Expand All @@ -198,7 +205,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
</div>
</div>

<Show when={!store.iconUrl}>
<Show when={!store.iconOverride}>
<div class="flex flex-col gap-2">
<label class="text-12-medium text-text-weak">{language.t("dialog.project.edit.color")}</label>
<div class="flex gap-1.5">
Expand All @@ -215,7 +222,10 @@ export function DialogEditProject(props: { project: LocalProject }) {
"bg-transparent border border-transparent hover:bg-surface-base-hover hover:border-border-weak-base":
store.color !== color,
}}
onClick={() => setStore("color", color)}
onClick={() => {
if (store.color === color && !props.project.icon?.url) return
setStore("color", store.color === color ? undefined : color)
}}
>
<Avatar
fallback={store.name || defaultName()}
Expand Down
Loading
Loading