Skip to content

Commit 3156d94

Browse files
authored
fix(ui): widen settings personal card
Widen the Control UI settings Personal quick-settings card to the intended 3/1 desktop split, keep Personal before Appearance/Automations at the narrower layout, and make the focused CSS assertions tolerant of harmless formatting changes. Verification: - pnpm --dir ui test src/styles/config-quick.test.ts - pnpm exec oxfmt --check --threads=1 ui/src/styles/config-quick.test.ts - git diff --check - GitHub CI on 4c8f6d7
1 parent 79be940 commit 3156d94

3 files changed

Lines changed: 16 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ Docs: https://docs.openclaw.ai
748748
- Require canonical node platform IDs [AI]. (#81880) Thanks @pgondhi987.
749749
- Agents/Azure OpenAI Responses: default unset Azure OpenAI API versions to `preview` so `/openai/v1/responses` calls use Azure's current Responses API route. (#82026) Thanks @leoge007.
750750
- Control UI/WebChat: compact the desktop chat header controls into a single aligned row so the session, model, thinking, and action controls no longer waste vertical space. Thanks @BunsDev.
751+
- Control UI/settings: widen the Personal quick-settings card to a 3/1 desktop split and keep Appearance/Automations below it on narrower layouts. Thanks @BunsDev.
751752
- Agents/model catalog: reuse manifest model-id normalization metadata while loading persisted read-only catalog rows, avoiding repeated metadata scans.
752753
- Agents: retry empty final turns for generic `anthropic-messages` providers instead of limiting non-visible recovery to Kimi, so custom/proxied Anthropic-compatible routes can recover with a visible answer. Addresses #46080. Thanks @wmgx, @w1tv, and @iFwu.
753754
- Agents/replies: strip workflow `<function_response>` scaffolding from user-visible sanitizer paths so raw tool output does not leak into chat history, transcript mirrors, or channel replies. Fixes #47444. Thanks @5toCode.

ui/src/styles/config-quick.css

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132

133133
.qs-side-stack {
134134
display: grid;
135-
grid-column: span 4;
135+
grid-column: span 3;
136136
grid-template-rows: auto 1fr;
137137
align-self: stretch;
138138
gap: 14px;
@@ -168,7 +168,7 @@
168168
}
169169

170170
.qs-card--personal {
171-
grid-column: span 8;
171+
grid-column: span 9;
172172
}
173173

174174
.qs-card--personal .qs-identity-grid {
@@ -1211,11 +1211,11 @@
12111211
}
12121212

12131213
.qs-card--appearance {
1214-
order: 4;
1214+
order: 5;
12151215
}
12161216

12171217
.qs-card--personal {
1218-
order: 5;
1218+
order: 4;
12191219
}
12201220

12211221
.qs-card--automations {

ui/src/styles/config-quick.test.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ if (!cssPath) {
1111
}
1212
const css = readFileSync(cssPath, "utf8");
1313

14+
function expectSelectorBlockToMatch(selector: string, pattern: RegExp) {
15+
const escapedSelector = selector.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
16+
const blockMatches = [...css.matchAll(new RegExp(`${escapedSelector}\\s*\\{[^}]*\\}`, "gs"))];
17+
expect(blockMatches.map((match) => match[0]).some((block) => pattern.test(block))).toBe(true);
18+
}
19+
1420
describe("config-quick styles", () => {
1521
it("includes the local user identity quick-settings styles", () => {
1622
expect(css).toContain(".qs-identity-grid");
@@ -31,13 +37,15 @@ describe("config-quick styles", () => {
3137
expect(css).toContain(".qs-identity-card__actions");
3238
expect(css).toContain("grid-template-columns: repeat(12, minmax(0, 1fr));");
3339
expect(css).toContain("grid-column: 1 / -1;");
34-
expect(css).toContain("grid-column: span 4;");
40+
expectSelectorBlockToMatch(".qs-side-stack", /grid-column:\s*span\s+3;/);
41+
expectSelectorBlockToMatch(".qs-card--personal", /grid-column:\s*span\s+9;/);
3542
expect(css).toContain("grid-template-columns: repeat(2, minmax(0, 1fr));");
3643
expect(css).toContain("align-items: stretch;");
3744
expect(css).toContain("display: contents;");
38-
expect(css).toContain(".qs-card--appearance {\n order: 4;");
45+
expectSelectorBlockToMatch(".qs-card--personal", /order:\s*4;/);
46+
expectSelectorBlockToMatch(".qs-card--appearance", /order:\s*5;/);
3947
expect(css).toContain(".qs-card--appearance");
40-
expect(css).toContain("order: 4");
48+
expect(css).toContain("order: 5");
4149
expect(css).toContain(".qs-card--automations");
4250
expect(css).toContain("order: 6");
4351
});

0 commit comments

Comments
 (0)