feat(ui): simplify connection list selected state styling#2026
feat(ui): simplify connection list selected state styling#2026
Conversation
Use solid background color for selected state without additional effects
- Move badge to right: 8px position - Add left shadow mask to cover truncated text
- Remove send button and message shadows for cleaner dark/night themes - Adjust topic color indicator height calculations for better alignment
- Remove separator lines from message properties for consistent appearance - Add bottom border to connection list header - Add icons to new connection/group dropdown menu items - Adjust shadow and color variables in themes
Remove border-bottom from connection topbar for cleaner appearance. Add explicit tree node selection when clicking on connections/collections.
- Add button hover/active effects with smooth transitions - Improve subscription item shadows with layered effect - Add hover translateX animation for subscription items - Add color line height animation on hover - Improve close button with scale hover effect - Update entry animation to fade + slide up
- Merge connect button and dropdown into a single themed button group - Unify button border-radius to 8px across the application - Add 4px border-radius for Meta dropdown button in publish area
- Merge connect button and dropdown into themed button group - Unify button border-radius to 8px
- Sync leftbar styling with animations and indicator - Sync connection list to use text color for online status - Sync subscription list animations and hover effects - Sync message item styling and shadows - Update theme variables for shadows - Adjust layout positions for leftbar width
…tions - Add segmented control for view mode toggle with sliding animation - Redesign toolbar with compact filter controls and type pills - Optimize DiffView header with side-by-side comparison layout - Add badge-style metadata display (QoS, Retain, Size) - Move navigation buttons to header edges for better UX - Unify JSONViewer header with same design pattern - Remove colons from Previous/Current labels in translations
- Fix nav-right buttons not stretching to full header height - Add explicit hover styles for nav-right buttons - Ensure consistent hover effect across left and right navigation
There was a problem hiding this comment.
Pull request overview
This PR updates UI styling across the connections area and several viewer/components, aiming for a cleaner, more uniform look (solid selected states, updated spacing, and consistent rounding/shadows across themes).
Changes:
- Adjusts left sidebar/layout offsets (e.g., 81→76px) and related fixed-position left margins.
- Simplifies/modernizes connection list item layout (online indicator via text color, unread badge positioning).
- Broad UI restyling across viewer widgets and shared components (toolbars, card radii, shadows, animations, theme variables).
Reviewed changes
Copilot reviewed 46 out of 46 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| web/src/views/connections/index.vue | Adjusts left offset for the connection list container. |
| web/src/views/connections/ConnectionsList.vue | Refactors connection item markup/CSS; adjusts unread badge and online indicator. |
| web/src/views/connections/ConnectionsDetail.vue | Updates computed/fixed left offsets to match new sidebar widths. |
| web/src/views/connections/ConnectionForm.vue | Updates connect button/dropdown layout and styling. |
| web/src/views/Home.vue | Updates right pane offsets to match sidebar width changes. |
| web/src/components/SubscriptionsList.vue | Tweaks spacing, transitions, hover effects, and popover rounding. |
| web/src/components/MsgRightItem.vue | Adds shadow styling to outgoing message bubbles. |
| web/src/components/MsgLeftItem.vue | Updates message bubble background and layout metrics. |
| web/src/components/MessageList.vue | Updates scrollbar thumb radius. |
| web/src/components/Leftbar.vue | Restyles leftbar (sizes, gradients, hover/active states). |
| web/src/components/LeftPanel.vue | Updates fixed left offsets and slide animation endpoints. |
| web/src/assets/scss/theme/night.scss | Adjusts shadow-related theme variables. |
| web/src/assets/scss/theme/light.scss | Tweaks text color variable for right info. |
| web/src/assets/scss/theme/dark.scss | Adjusts shadow-related theme variables. |
| web/src/assets/scss/mixins.scss | Updates shared message mixin styles and spacing. |
| web/src/assets/scss/element/element-reset.scss | Updates Element UI mini button radius. |
| src/widgets/JSONViewer.vue | Significant JSON viewer header/navigation/search UI redesign. |
| src/widgets/DiffView.vue | Updates diff header UI and navigation controls layout/styles. |
| src/views/viewer/dashboard/DashboardView.vue | Updates dashboard card/layout radii to 8px. |
| src/views/viewer/PayloadInspector.vue | Replaces controls with a new toolbar + segmented view mode control. |
| src/views/script/index.vue | Updates container border radius. |
| src/views/log/index.vue | Updates container border radius. |
| src/views/connections/ConnectionsList.vue | Connection tree item UI updates; ensures current node selection; dropdown styling. |
| src/views/connections/ConnectionForm.vue | Updates connect button/dropdown grouping and styling. |
| src/views/Home.vue | Applies glassy topbar styling and updates rightbar margin-left. |
| src/utils/styles.ts | Updates shared layout constants for left offsets. |
| src/lang/viewer.ts | Removes trailing colons from “Previous/Current” labels. |
| src/components/charts/BigNumber.vue | Updates rounding to 8px. |
| src/components/ai/MCPSettings.vue | Updates rounding to 8px across several UI blocks. |
| src/components/ai/CopilotMessages.vue | Updates code block rounding to 8px. |
| src/components/SubscriptionsList.vue | Adds/updates button styling, transitions, hover effects, and popover rounding. |
| src/components/MsgRightItem.vue | Adds shadow styling to outgoing message bubbles. |
| src/components/MsgPublish.vue | Updates button radii and dropdown button styling. |
| src/components/MsgLeftItem.vue | Updates message bubble background, shadow, and topic color sizing logic. |
| src/components/Leftbar.vue | Restyles leftbar (sizes, gradients, hover/active states). |
| src/components/FullMsgDialog.vue | Updates container border radius. |
| src/components/EmptyPage.vue | Redesigns empty state visuals (animations, button styles, typography). |
| src/assets/scss/theme/night.scss | Adjusts shadow-related theme variables. |
| src/assets/scss/theme/light.scss | Tweaks text color variable for right info. |
| src/assets/scss/theme/dark.scss | Adjusts shadow-related theme variables. |
| src/assets/scss/theme/custom/prism-one-light.scss | Updates code toolbar rounding. |
| src/assets/scss/theme/custom/prism-one-dark.scss | Updates code toolbar rounding. |
| src/assets/scss/mixins.scss | Updates shared message mixin styles and spacing. |
| src/assets/scss/element/element-reset.scss | Updates Element UI rounding (mini buttons/progress). |
| src/assets/scss/connections.scss | Updates connection list left offset to match new leftbar width. |
| src/assets/scss/base.scss | Updates scrollbar thumb radius and textarea rounding. |
Comments suppressed due to low confidence (4)
src/widgets/DiffView.vue:183
- The
thisvariable of this arrow function it will not be bound to the Vue instance.
Thethisvariable of this arrow function it will not be bound to the Vue instance.
private handleKeydown = (e: KeyboardEvent) => {
const active = document.activeElement as HTMLElement | null
const isEditable =
!!active && (active.tagName === 'INPUT' || active.tagName === 'TEXTAREA' || active.isContentEditable)
if (isEditable) return
if (e.key === 'ArrowLeft') {
e.preventDefault()
this.goToPrevious()
} else if (e.key === 'ArrowRight') {
e.preventDefault()
this.goToNext()
}
}
src/widgets/JSONViewer.vue:358
- The
thisvariable of this arrow function it will not be bound to the Vue instance.
Thethisvariable of this arrow function it will not be bound to the Vue instance.
private handleKeydown = (e: KeyboardEvent) => {
const active = document.activeElement as HTMLElement | null
const isEditable =
!!active && (active.tagName === 'INPUT' || active.tagName === 'TEXTAREA' || active.isContentEditable)
if (isEditable) return
if (e.key === 'ArrowLeft') {
e.preventDefault()
this.goToPrevious()
} else if (e.key === 'ArrowRight') {
e.preventDefault()
this.goToNext()
}
}
web/src/views/connections/ConnectionsDetail.vue:965
- The
thisvariable of this arrow function it will not be bound to the Vue instance.
src/views/viewer/dashboard/DashboardView.vue:821 - Variable 'value' is of type date, object or regular expression, but it is compared to an expression of type null.
} else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @keyframes glow-pulse { | ||
| 0%, | ||
| 100% { | ||
| box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); | ||
| } | ||
| 50% { | ||
| box-shadow: 0 0 12px 2px rgba(16, 185, 129, 0.3); | ||
| } | ||
| } |
There was a problem hiding this comment.
@keyframes glow-pulse is defined but not referenced anywhere in this stylesheet. Consider removing it to avoid dead CSS, or add the corresponding animation: glow-pulse ... usage if it’s intended.
| background: var(--color-bg-glass); | ||
| backdrop-filter: blur(12px); | ||
| -webkit-backdrop-filter: blur(12px); | ||
| transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| border-bottom: 1px solid var(--color-border-default); |
There was a problem hiding this comment.
--color-bg-glass is referenced here but isn’t defined in the theme variables (no --color-bg-glass: found in src/assets/scss/theme/*). This makes the background declaration invalid and will fall back unexpectedly. Define --color-bg-glass for all themes (or switch to an existing variable with an explicit fallback like var(--color-bg-normal, ...)).
| .el-input.is-disabled .el-input__inner { | ||
| background-color: transparent; | ||
| background-color: var(--color-bg-msg-input); | ||
| } |
There was a problem hiding this comment.
--color-bg-msg-input is used for disabled input backgrounds here but isn’t defined anywhere in the theme files. Add this CSS variable to each theme (or provide a fallback) to avoid invalid CSS / inconsistent disabled input styling.
| .el-input.is-disabled .el-input__inner { | ||
| background-color: transparent; | ||
| background-color: var(--color-bg-msg-input); | ||
| } |
There was a problem hiding this comment.
--color-bg-msg-input is used for disabled input backgrounds here but isn’t defined anywhere in the theme files. Add this CSS variable to each theme (or provide a fallback) to avoid invalid CSS / inconsistent disabled input styling.
| Show = '337px', | ||
| Hide = '77px', |
There was a problem hiding this comment.
LeftValues looks off-by-one vs the updated layout widths: src/components/Leftbar.vue:97 sets the left bar to 76px, and src/assets/scss/connections.scss:6 positions the connection list at left: 76px with width: 260px (so the content left should be 76px when hidden, 336px when shown). Current values Hide='77px' / Show='337px' will introduce a 1px gap/misalignment for views using these enums (e.g. ConnectionsDetail.vue topbar :style.left).
| Show = '337px', | |
| Hide = '77px', | |
| Show = '336px', | |
| Hide = '76px', |
| <template> | ||
| <div class="json-tree-view"> | ||
| <div class="json-header"> | ||
| <div class="json-header" v-if="currentMessage && currentMessage.createAt"> | ||
| <el-tooltip | ||
| :effect="theme !== 'light' ? 'light' : 'dark'" |
There was a problem hiding this comment.
The PR title/description says this is about simplifying the connection list selected-state styling, but this file contains a substantial redesign of the JSON viewer header/navigation/search UI. Please update the PR description to reflect the broader scope, or split these UI redesign changes into separate PR(s) to keep review risk manageable.
| @keyframes glow-pulse { | ||
| 0%, | ||
| 100% { | ||
| box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); | ||
| } | ||
| 50% { | ||
| box-shadow: 0 0 12px 2px rgba(16, 185, 129, 0.3); | ||
| } | ||
| } | ||
|
|
There was a problem hiding this comment.
@keyframes glow-pulse is defined but not referenced anywhere in this stylesheet. Consider removing it to avoid dead CSS, or add the corresponding animation: glow-pulse ... usage if it’s intended.
| @keyframes glow-pulse { | |
| 0%, | |
| 100% { | |
| box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); | |
| } | |
| 50% { | |
| box-shadow: 0 0 12px 2px rgba(16, 185, 129, 0.3); | |
| } | |
| } |
Summary
Test plan