fix(ui): Show the full SDK name in selects and shorten Windows home paths

A long detail (an installation path) was not cut, so it pushed the option label out
(e.g. "Eclipse Adopti…", the Maven name hidden) and scrolled the popup sideways. The
label now keeps its width and the detail is cut with an ellipsis (full path in the
tooltip, detail text translated). Paths under C:/Users/<name> are shown as ~/…
This commit is contained in:
l0ng-ai
2026-10-24 09:11:58 +08:00
parent 6a8016b888
commit 49be259232
4 changed files with 18 additions and 5 deletions
@@ -63,5 +63,7 @@ describe("language pages", () => {
expect(filterPackages(pkgs, "dj").map((p) => p.name)).toEqual(["Django"]);
expect(filterPackages(pkgs, "")).toHaveLength(2);
expect(tildify("/Users/me/p/.venv/bin/python")).toBe("~/p/.venv/bin/python");
expect(tildify("C:/Users/me/.m2/wrapper/dists/apache-maven-3.9.16")).toBe("~/.m2/wrapper/dists/apache-maven-3.9.16");
expect(tildify("C:/Program Files/Java/jdk-21")).toBe("C:/Program Files/Java/jdk-21");
});
});
@@ -15,7 +15,7 @@ export function useProjectSetting<T>(key: string): [T, (v: T) => void] {
return useSetting<T>(key, hasProject ? "project" : "global");
}
const HOME = /^\/(?:Users|home)\/[^/]+/;
const HOME = /^(?:\/(?:Users|home)|[A-Za-z]:[\\/]Users)[\\/][^\\/]+/;
/** `~/…` for paths in the home directory. */
export function tildify(path: string): string {
+10 -3
View File
@@ -72,13 +72,20 @@
flex: none;
color: var(--fg-muted);
}
/* The label keeps its width (up to most of the row); a long detail (a path) is cut instead. */
.optionLabel {
flex: 1;
flex: 1 0 auto;
max-width: 70%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.detail {
flex: 0 1 auto;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
}
.detail {
white-space: nowrap;
color: var(--fg-muted);
}
.disabled {
+5 -1
View File
@@ -145,7 +145,11 @@ export function Select<V extends string = string>({
<span className={styles.check}>{o.value === value && <Icon name="check" size={12} />}</span>
{o.icon && <Icon name={o.icon} size={14} />}
<span className={styles.optionLabel}>{tx(o.label)}</span>
{o.detail && <span className={styles.detail}>{o.detail}</span>}
{o.detail && (
<span className={styles.detail} title={o.detail}>
{tx(o.detail)}
</span>
)}
</>
)}
/>