Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
1a2f602
feat(web): regroup provider editor and rebuild models list
StiensWout Aug 28, 2026
f4a683f
feat(web): show picker visibility as a switch in provider model lists
StiensWout Aug 28, 2026
fffa670
fix(web): merge provider refresh and last-checked into one button
StiensWout Aug 28, 2026
14cbb66
fix(web): honor hidden favorites and icon tones in provider model list
StiensWout Aug 28, 2026
cc01fb7
fix(web): keep last-checked text in the refresh button's accessible name
StiensWout Aug 28, 2026
d6ab4e7
fix(web): keep provider staleness and policy tooltip readable on read…
StiensWout Aug 28, 2026
d597007
fix(web): tone the header update icon and let provider rows grow when…
StiensWout Aug 28, 2026
7776d92
fix(web): keep model row actions visible on coarse pointers
StiensWout Aug 28, 2026
a5592ee
fix(web): cap the provider model list on narrow viewports
StiensWout Aug 28, 2026
2ff8b73
fix(web): make the custom-model switch tooltip reachable and name the…
StiensWout Aug 28, 2026
c30b44d
feat(web): one-line provider fields, aligned model columns, and a mod…
StiensWout Sep 2, 2026
5c71aaf
fix(web): scroll a newly added custom model into view
StiensWout Sep 2, 2026
c211b95
fix(web): fit the three custom-model row actions in the actions column
StiensWout Sep 2, 2026
f33e44e
fix(web): clear the model filter when a custom model is added
StiensWout Sep 2, 2026
71ceb4f
fix(web): hide model capabilities on phone widths and describe grid f…
StiensWout Sep 2, 2026
d6fb0bb
fix(web): keep the capability cell in the model row grid on phone widths
StiensWout Sep 2, 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
85 changes: 53 additions & 32 deletions apps/web/src/components/settings/ProviderAccentColorPicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -228,8 +228,17 @@ export function ProviderAccentColorPicker(props: {
readonly onCommit: (value: string) => void;
readonly description?: string;
readonly commitDelayMs?: number;
/** `inline` renders only the swatch row, for callers that supply their own label. */
readonly layout?: "stacked" | "inline";
}) {
const { commitDelayMs = 0, description, displayName, onCommit, value } = props;
const {
commitDelayMs = 0,
description,
displayName,
layout = "stacked",
onCommit,
value,
} = props;
const [optimisticValue, setOptimisticValue] = useState(() => value ?? "");
const commitTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
const pendingCommitRef = useRef<string | null>(null);
Expand Down Expand Up @@ -295,40 +304,52 @@ export function ProviderAccentColorPicker(props: {
: "";
const customSelected = Boolean(normalized && selectedValue === "");

const swatchRow = (
<div
role="group"
aria-label="Accent color"
className="flex min-w-0 flex-wrap items-center gap-2"
>
<ProviderCustomColorPicker
displayName={displayName}
value={normalized}
selected={customSelected}
onCommit={commitAccentColor}
/>
<ColorSelector
key={selectedValue}
colors={[...PROVIDER_ACCENT_SWATCHES]}
defaultValue={selectedValue}
size="lg"
onColorSelect={commitAccentColor}
className="flex-wrap gap-1.5"
/>
<Button
type="button"
size="icon"
variant="ghost"
className={cn(
"size-7 shrink-0 text-muted-foreground transition-opacity",
normalized ? "opacity-100" : "pointer-events-none opacity-0",
)}
onClick={() => commitAccentColor("")}
aria-label={`Clear accent color for ${displayName}`}
aria-hidden={!normalized}
tabIndex={normalized ? 0 : -1}
>
<XIcon className="size-3.5" aria-hidden />
</Button>
</div>
);

if (layout === "inline") {
return swatchRow;
}

return (
<div className="grid gap-2">
<span className="text-xs font-medium text-foreground">Accent color</span>
<div className="flex min-w-0 flex-wrap items-center gap-2">
<ProviderCustomColorPicker
displayName={displayName}
value={normalized}
selected={customSelected}
onCommit={commitAccentColor}
/>
<ColorSelector
key={selectedValue}
colors={[...PROVIDER_ACCENT_SWATCHES]}
defaultValue={selectedValue}
size="lg"
onColorSelect={commitAccentColor}
className="flex-wrap gap-1.5"
/>
<Button
type="button"
size="icon"
variant="ghost"
className={cn(
"size-7 shrink-0 text-muted-foreground transition-opacity",
normalized ? "opacity-100" : "pointer-events-none opacity-0",
)}
onClick={() => commitAccentColor("")}
aria-label={`Clear accent color for ${displayName}`}
aria-hidden={!normalized}
tabIndex={normalized ? 0 : -1}
>
<XIcon className="size-3.5" aria-hidden />
</Button>
</div>
{swatchRow}
{description ? <span className="text-xs text-muted-foreground">{description}</span> : null}
</div>
);
Expand Down
Loading
Loading