feat: 改进侧栏滚动行为并修复主题持久化·修复某些UI显示问题#105
Conversation
修复持久化状态中的主题设置问题,不再强制使用暗色主题 改进发现页面的滚动行为,添加侧栏固定功能
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughGlobal scroll handling moved from an inner container to the window (per-channel scroll positions persisted and restored via window.scrollTo); a sticky, internally-scrollable sidebar was added for large viewports; extensive UI theming class swaps from brand colors to neutral gray across many components; search/filter and slider APIs adjusted; data-management types and flows renamed/refactored. Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant Window
participant DiscoveryView
participant Sidebar
User->>Window: scroll
Window->>DiscoveryView: window.scroll event (reads window.scrollY)
DiscoveryView->>DiscoveryView: memoized handleScroll evaluates scrollY & direction
alt scrollY >= 150
DiscoveryView->>DiscoveryView: set isSidebarFixed = true
DiscoveryView->>Sidebar: apply sticky, set max-height and internal overflow
else scrollY < 150
DiscoveryView->>DiscoveryView: set isSidebarFixed = false
DiscoveryView->>Sidebar: remove sticky constraints
end
DiscoveryView->>DiscoveryView: persist per-channel scroll state (lastScrollY)
DiscoveryView->>Window: restore scroll with window.scrollTo on channel switch
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
那个空状态颜色出问题就release么? |
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/components/DiscoveryView.tsx (1)
585-590:⚠️ Potential issue | 🟠 MajorPer-channel scroll save/restore is broken — mixing window-level and container-level scroll tracking.
handleScrolltrackswindow.scrollYand listens to bothwindowscroll events (line 663) and the content container'sonScrollhandler (line 1061). However, save/restore paths usescrollContainerRef.scrollTop:
- Restore on channel switch (lines 587–590): sets
scrollContainerRef.current.scrollTop = savedPosition- Save on channel switch (lines 878–881, 903–907): reads
scrollContainerRef.current.scrollTopThe mismatch: when the inner scrollable div (line 1061, with
overflow-y-auto) scrolls,handleScrollis called but readswindow.scrollYinstead of the container's actual scroll position. This meanshandleScrolldoesn't capture the container's scroll state for toolbar/sidebar visibility tracking.Use
window.scrollY/window.scrollTo(0, savedPosition)consistently in both save/restore andhandleScroll, or revert to tracking the container's scroll position (viaevent.target.scrollTopin the handler). The current inconsistency breaks channel-switch position restoration and causes incorrect toolbar visibility behavior.🛠️ Suggested direction — make save/restore window-based and fix handleScroll
Update
handleScrollto read the correct scroll position depending on the event source:- const handleScroll = useCallback(() => { - const currentScrollY = window.scrollY || window.pageYOffset || 0; + const handleScroll = useCallback((event?: Event) => { + let currentScrollY = 0; + if (event?.target && event.target !== window) { + // Container scroll + currentScrollY = (event.target as HTMLElement).scrollTop; + } else { + // Window scroll + currentScrollY = window.scrollY || window.pageYOffset || 0; + }Then update save/restore to use
window.scrollY:useEffect(() => { - if (scrollContainerRef.current) { - const savedPosition = discoveryScrollPositionsRef.current[selectedDiscoveryChannel] || 0; - scrollContainerRef.current.scrollTop = savedPosition; - } + const savedPosition = discoveryScrollPositionsRef.current[selectedDiscoveryChannel] || 0; + window.scrollTo({ top: savedPosition, behavior: 'auto' });onChannelSelect={(channel) => { if (channel === selectedDiscoveryChannel) { return; } - if (scrollContainerRef.current) { - const scrollTop = scrollContainerRef.current.scrollTop; - discoveryScrollPositionsRef.current[selectedDiscoveryChannel] = scrollTop; - setDiscoveryScrollPosition(selectedDiscoveryChannel, scrollTop); - } + const scrollTop = window.scrollY; + discoveryScrollPositionsRef.current[selectedDiscoveryChannel] = scrollTop; + setDiscoveryScrollPosition(selectedDiscoveryChannel, scrollTop); setSelectedDiscoveryChannel(channel); }}(apply equivalently to both mobile tab handler at lines 878–881 and desktop sidebar handler at lines 903–907)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/DiscoveryView.tsx` around lines 585 - 590, The per-channel scroll restore is broken due to mixing window vs container scroll tracking; update handleScroll to read the scroll position based on the event source (if called with a native Event with event.target then use (event.target as HTMLElement).scrollTop, otherwise use window.scrollY) and ensure the container's onScroll passes the event into handleScroll; then make save/restore consistent by switching to a window-based approach (store discoveryScrollPositionsRef.current[selectedDiscoveryChannel] = window.scrollY when saving and restore with window.scrollTo(0, savedPosition) instead of setting scrollContainerRef.current.scrollTop) or, if you prefer container-based, consistently save/read container.scrollTop everywhere — change the restore code that currently sets scrollContainerRef.current.scrollTop, the save sites that write to discoveryScrollPositionsRef (used in the mobile tab handler and desktop sidebar handler), and the container onScroll to call handleScroll with the scroll event so the handler can use event.target.scrollTop.
🧹 Nitpick comments (1)
src/components/DiscoveryView.tsx (1)
1058-1062: RedundantonScroll={handleScroll}on the inner content div.
handleScrollnow readswindow.scrollYand is registered onwindow(Lines 631, 663). The same handler is still wired to this container'sonScroll, so it will either no-op (when only the page scrolls) or fire spuriously with stalewindow.scrollYif the container scrolls independently. Remove the inlineonScrollto keep a single source of truth.♻️ Suggested change
<div ref={scrollContainerRef} - onScroll={handleScroll} className={`flex-1 overflow-y-auto space-y-4 pr-2 ${isDesktopSafeMode ? 'bg-white dark:bg-panel-dark' : ''}`} >🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/DiscoveryView.tsx` around lines 1058 - 1062, The inner content div is still wiring onScroll={handleScroll} even though handleScroll reads window.scrollY and is registered on window (see handleScroll and the window.addEventListener usage), causing duplicate/spurious calls; remove the inline onScroll prop from the div that uses scrollContainerRef so the handler is only invoked via the window listener and not from the container's onScroll.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/components/DiscoveryView.tsx`:
- Line 423: Remove the dead "sidebar fixed" feature: delete the isSidebarFixed
state, the sidebarRef useRef, the scroll/threshold logic and its effect/handler
that compute/toggle isSidebarFixed, and the JSX ref assignment on the sidebar
wrapper; then let the Tailwind sticky classes handle desktop behavior (also
remove any now-unused imports or variables related to that logic). This keeps
the implementation honest by eliminating unused symbols isSidebarFixed and
sidebarRef and the associated threshold code (or alternatively, if you prefer to
keep the feature, wire isSidebarFixed into the sidebar className to toggle
styles such as switching between "sticky" and a fixed/elevated style or adding a
shadow/border when fixed).
- Around line 887-895: The outer container incorrectly reuses scrollContainerRef
(assigned on the div at the top of the component) which overwrites the inner
content ref used elsewhere; remove the ref={scrollContainerRef} from the outer
flex container so the inner content div retains ownership of scrollContainerRef;
ensure only the inner content div (the element queried by
targetCard.scrollIntoView, the ScrollToBottom consumer, and the channel-switch
handlers) is bound to scrollContainerRef and keep sidebarRef on the sidebar div
unchanged.
In `@src/store/useAppStore.ts`:
- Line 282: The persisted theme value (safePersisted.theme) is used without
validation; replace the simple fallback with explicit validation so only 'light'
or 'dark' are accepted and anything else defaults to 'dark'. In the object where
theme is set (the theme property in useAppStore initialization using
safePersisted), check that typeof safePersisted.theme === 'string' and that it
equals 'light' or 'dark' and use that value; otherwise set 'dark'. Update any
related type assumptions in the same initializer to ensure the normalized value
is stored.
---
Outside diff comments:
In `@src/components/DiscoveryView.tsx`:
- Around line 585-590: The per-channel scroll restore is broken due to mixing
window vs container scroll tracking; update handleScroll to read the scroll
position based on the event source (if called with a native Event with
event.target then use (event.target as HTMLElement).scrollTop, otherwise use
window.scrollY) and ensure the container's onScroll passes the event into
handleScroll; then make save/restore consistent by switching to a window-based
approach (store discoveryScrollPositionsRef.current[selectedDiscoveryChannel] =
window.scrollY when saving and restore with window.scrollTo(0, savedPosition)
instead of setting scrollContainerRef.current.scrollTop) or, if you prefer
container-based, consistently save/read container.scrollTop everywhere — change
the restore code that currently sets scrollContainerRef.current.scrollTop, the
save sites that write to discoveryScrollPositionsRef (used in the mobile tab
handler and desktop sidebar handler), and the container onScroll to call
handleScroll with the scroll event so the handler can use
event.target.scrollTop.
---
Nitpick comments:
In `@src/components/DiscoveryView.tsx`:
- Around line 1058-1062: The inner content div is still wiring
onScroll={handleScroll} even though handleScroll reads window.scrollY and is
registered on window (see handleScroll and the window.addEventListener usage),
causing duplicate/spurious calls; remove the inline onScroll prop from the div
that uses scrollContainerRef so the handler is only invoked via the window
listener and not from the container's onScroll.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: f280c891-6565-4a9e-9b68-6887a557add5
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (2)
src/components/DiscoveryView.tsxsrc/store/useAppStore.ts
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
src/components/DiscoveryView.tsx (1)
423-427:⚠️ Potential issue | 🟠 MajorDead
isSidebarFixedstate and unusedsidebarRef— same concern still applies.
isSidebarFixed(Line 427) is set inhandleScroll(Lines 635–638) but never read anywhere; ESLint already flags it.sidebarRef(Line 423) is bound to the wrapper at Line 891 but never consumed. The actual sticky behavior on the desktop sidebar is driven entirely by the Tailwind classessticky top-20 max-h-[calc(100vh-6rem)]at Line 892, so the JS threshold block at Lines 633–639 is dead code.Either wire
isSidebarFixedintoclassName/styleon the sidebar wrapper (e.g., toggle elevation/border/topoffset when fixed) or drop the state, the ref, and the threshold block.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/DiscoveryView.tsx` around lines 423 - 427, The isSidebarFixed state and sidebarRef are unused: either remove the dead state/ref and the threshold logic in handleScroll, or wire them into the sidebar wrapper to control styling; to fix, choose one approach—(A) delete sidebarRef, remove isSidebarFixed and the threshold block inside handleScroll (and any related setIsSidebarFixed calls) so the layout relies on the existing Tailwind sticky classes, or (B) apply isSidebarFixed and sidebarRef to the sidebar wrapper element (the element currently bound to sidebarRef) by toggling a className or inline style based on isSidebarFixed (e.g., change elevation/border/top offset) and keep handleScroll as the source of truth; update references to isSidebarFixed, sidebarRef, and handleScroll accordingly so no state or refs remain declared but unused.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/components/DiscoveryView.tsx`:
- Around line 661-670: The app now uses window scrolling but the channel
save/restore still targets the inner container, so switch persistence to the
window: update the save handlers (currently calling discoveryScrollPositionsRef,
setDiscoveryScrollPosition and reading scrollContainerRef.current.scrollTop) to
read window.scrollY and store per-channel positions there; update the restore
effect (the useEffect that sets scrollContainerRef.current.scrollTop =
savedPosition) to call window.scrollTo({ top: savedPosition, behavior: 'auto' })
instead; remove the redundant onScroll={handleScroll} on the inner content div
and any writes that set discoveryScrollPositionsRef or
setDiscoveryScrollPosition from scrollContainerRef.scrollTop; leave handleScroll
as the window scroll handler and keep its registration/removal in the existing
useEffect.
---
Duplicate comments:
In `@src/components/DiscoveryView.tsx`:
- Around line 423-427: The isSidebarFixed state and sidebarRef are unused:
either remove the dead state/ref and the threshold logic in handleScroll, or
wire them into the sidebar wrapper to control styling; to fix, choose one
approach—(A) delete sidebarRef, remove isSidebarFixed and the threshold block
inside handleScroll (and any related setIsSidebarFixed calls) so the layout
relies on the existing Tailwind sticky classes, or (B) apply isSidebarFixed and
sidebarRef to the sidebar wrapper element (the element currently bound to
sidebarRef) by toggling a className or inline style based on isSidebarFixed
(e.g., change elevation/border/top offset) and keep handleScroll as the source
of truth; update references to isSidebarFixed, sidebarRef, and handleScroll
accordingly so no state or refs remain declared but unused.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: ce59f643-627b-44d4-aa04-a3d4f1a7db93
📒 Files selected for processing (1)
src/components/DiscoveryView.tsx
移除对 scrollContainerRef 的依赖,统一使用 window 的滚动位置 API 简化滚动位置保存和恢复逻辑,提高代码一致性
|
新的Ui确实不好看,可以留两套UI 在用户选择后重启生效 |
那个好多是AI硬编码进去的,昨天改那个真是让AI一点点调的,把codex和反重力额度还有几个coding plan都耗干了。其实没有太大变化,主要就是把各种五颜六色的做了风格上的统一,还有字号间距什么的,这件事早晚得做统一,不同历史时期不同的AI vibe coding出来的,什么样式都有,先规整一下。 |
|
玄离199 |
添加暗黑模式下的背景和边框颜色样式,提升夜间使用的视觉体验
调整多个组件中的颜色样式,将品牌色和状态色统一为中性灰调色板,提升视觉一致性。主要修改包括: - 替换品牌色和状态色为中性灰 - 统一按钮、图标、卡片等元素的颜色样式 - 优化暗黑模式下的颜色对比度
- 更新类型定义,使用 SubscriptionRepo 和 SubscriptionChannel 替代原有类型 - 重构 assetFilters 的状态管理,改用 useAppStore.setState - 添加 searchHistoryVersion 状态用于跟踪搜索历史变化 - 优化删除操作的确认提示文案和翻译 - 改进 UI 交互细节和样式
- 为 SliderInput 组件添加 showMarks 属性控制标记显示 - 更新 BulkActionToolbar 按钮颜色以符合新设计规范 - 调整 BackToTop 和 ScrollToBottom 组件的背景和边框样式 - 简化 SearchBar 的 applyFilters 函数参数 - 移除 DiscoveryView 中未使用的 currentCount 和 isSidebarFixed - 改进 MarkdownRenderer 的代码块样式和终端模拟器外观 - 修复 MarkdownImage 组件中文本透明度问题
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
src/components/MarkdownRenderer.tsx (1)
121-141:⚠️ Potential issue | 🟡 MinorLow-contrast risk: emerald-on-emerald badge for bash blocks.
bg-status-emerald/20 text-status-emerald border-status-emerald/30puts the same hue in fg and bg in both light and dark modes — the language label "bash" can be hard to read, especially in dark mode where the alpha-blended background sits onpanel-dark. Consider darkening the text in light mode (e.g.text-emerald-700) and lightening it in dark mode (dark:text-emerald-300), matching the cmd-like branch on L127 which already does this.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/MarkdownRenderer.tsx` around lines 121 - 141, The bash badge styling uses identical emerald hues for background, text, and border in both light and dark modes (see the isBashLike branch that builds the className on the <span> around {language}), causing low contrast; update the isBashLike class string to use a darker emerald text in light mode (e.g., text-emerald-700) and a lighter emerald text in dark mode (e.g., dark:text-emerald-300) while keeping the existing bg-status-emerald/20 and border-status-emerald/30 so the badge remains visually distinct and accessible.src/components/settings/BackendPanel.tsx (1)
183-192:⚠️ Potential issue | 🟡 Minor
getStatusClassreturns identical styling for every state — status badge no longer conveys status by color.All three branches (
connected,checking,disconnected) now produce the samebg-gray-100 text-gray-700 dark:bg-white/[0.04] dark:text-text-secondary. Differentiation relies entirely ongetStatusIcon(CheckCircle / spinning RefreshCw / AlertCircle) and the label text — fine for sighted users glancing at the icon, but users skimming for the badge color can no longer tell connection state apart at a glance, and the spinning icon forcheckingis the only motion cue. Either collapse the function (since all branches are identical, theswitchis dead code) or restore some subtle differentiation (e.g., a single-color border, opacity, or icon color delta) for the three states.♻️ Option A — collapse the dead switch
- const getStatusClass = () => { - switch (status) { - case 'connected': - return 'bg-gray-100 text-gray-700 dark:bg-white/[0.04] dark:text-text-secondary'; - case 'checking': - return 'bg-gray-100 text-gray-700 dark:bg-white/[0.04] dark:text-text-secondary'; - default: - return 'bg-gray-100 text-gray-700 dark:bg-white/[0.04] dark:text-text-secondary'; - } - }; + const getStatusClass = () => + 'bg-gray-100 text-gray-700 dark:bg-white/[0.04] dark:text-text-secondary';🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/settings/BackendPanel.tsx` around lines 183 - 192, The getStatusClass function currently returns identical classes for every status (connected/checking/disconnected), making the status badge colorless; either simplify by collapsing the switch into a single constant class used by the badge or restore visual differentiation by returning distinct classes per status (e.g., green-tinted classes for 'connected', amber/transparent for 'checking', red/neutral for 'disconnected') so the badge (used alongside getStatusIcon and label text) conveys state at a glance; update getStatusClass accordingly and ensure the component that consumes status (referencing the status variable and getStatusIcon) uses the new class names to reflect the chosen approach.
🧹 Nitpick comments (1)
src/components/settings/WebDAVPanel.tsx (1)
117-117: Active config card now relies on a subtle neutral tint — verify it remains discernible.Switching from a brand-tinted border/background to
border-gray-300 bg-gray-50(light) andborder-white/[0.12] bg-white/[0.06](dark) is consistent with the PR theme, but the contrast between selected and non-selected (border-black/[0.06]) is slim, especially in light mode where both backgrounds are near-white. The radio button still indicates selection, so this is mostly a polish concern.Also applies to: 229-230
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/settings/WebDAVPanel.tsx` at line 117, The active config card styling in WebDAVPanel.tsx uses very subtle neutral tints (border-gray-300 bg-gray-50 / border-white/[0.12] bg-white/[0.06]) that don’t contrast enough against the non-selected state (border-black/[0.06]); update the selected-card classes to a slightly stronger neutral (e.g., border-gray-400 and bg-gray-100 in light mode and a slightly higher-alpha white border/bg in dark mode) wherever the active card container is rendered (the element wrapping the Cloud icon and the active config card markup referenced in this file and the other matching block), so the selected state is visually distinct while keeping the same neutral palette and preserving the radio selection indicator.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/components/DiscoveryView.tsx`:
- Line 622: Update the stale inline comment inside the DiscoveryView component's
scroll handler to remove the now-removed "控制侧栏固定" and any mention of the
"sticky-threshold" branch; make it accurately describe the current behavior (it
only saves the window scroll position and toggles the toolbar visibility).
Locate the comment in the scroll-handling section of DiscoveryView.tsx and
replace the old Chinese line with a concise line reflecting: "保存滚动位置、控制工具栏显示"
(or equivalent English) so the comment matches the implemented logic.
In `@src/components/MarkdownRenderer.tsx`:
- Line 199: In the MarkdownRenderer component update the malformed Tailwind
token used in the class string: replace the incorrect "bg-light-surface50" with
the proper opacity syntax "bg-light-surface/50" (search for the class string
containing 'border-black/[0.06] dark:border-[`#30363d`] bg-light-surface50' inside
MarkdownRenderer.tsx and update it to use bg-light-surface/50) so the light-mode
gutter background uses the defined color token with 50% opacity.
In `@src/components/settings/DataManagementPanel.tsx`:
- Around line 1025-1034: searchHistoryCount can go stale because it's memoized;
drop the useMemo and compute the count on each render by directly reading
localStorage.getItem('github-stars-search-history'), JSON.parse it, and
returning parsed.length when Array.isArray(parsed), so the Data Overview
reflects updates made by SearchBar (which writes the same key). Keep
deleteSearchHistory as-is (it can still bump searchHistoryVersion), but remove
the memo gate around searchHistoryCount so the component always shows the
current length for 'github-stars-search-history'.
---
Outside diff comments:
In `@src/components/MarkdownRenderer.tsx`:
- Around line 121-141: The bash badge styling uses identical emerald hues for
background, text, and border in both light and dark modes (see the isBashLike
branch that builds the className on the <span> around {language}), causing low
contrast; update the isBashLike class string to use a darker emerald text in
light mode (e.g., text-emerald-700) and a lighter emerald text in dark mode
(e.g., dark:text-emerald-300) while keeping the existing bg-status-emerald/20
and border-status-emerald/30 so the badge remains visually distinct and
accessible.
In `@src/components/settings/BackendPanel.tsx`:
- Around line 183-192: The getStatusClass function currently returns identical
classes for every status (connected/checking/disconnected), making the status
badge colorless; either simplify by collapsing the switch into a single constant
class used by the badge or restore visual differentiation by returning distinct
classes per status (e.g., green-tinted classes for 'connected',
amber/transparent for 'checking', red/neutral for 'disconnected') so the badge
(used alongside getStatusIcon and label text) conveys state at a glance; update
getStatusClass accordingly and ensure the component that consumes status
(referencing the status variable and getStatusIcon) uses the new class names to
reflect the chosen approach.
---
Nitpick comments:
In `@src/components/settings/WebDAVPanel.tsx`:
- Line 117: The active config card styling in WebDAVPanel.tsx uses very subtle
neutral tints (border-gray-300 bg-gray-50 / border-white/[0.12] bg-white/[0.06])
that don’t contrast enough against the non-selected state (border-black/[0.06]);
update the selected-card classes to a slightly stronger neutral (e.g.,
border-gray-400 and bg-gray-100 in light mode and a slightly higher-alpha white
border/bg in dark mode) wherever the active card container is rendered (the
element wrapping the Cloud icon and the active config card markup referenced in
this file and the other matching block), so the selected state is visually
distinct while keeping the same neutral palette and preserving the radio
selection indicator.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 840b8ec2-946b-4aca-8c01-e1ea4c629a30
📒 Files selected for processing (20)
src/components/BackToTop.tsxsrc/components/BulkActionToolbar.tsxsrc/components/BulkRestoreModal.tsxsrc/components/DiscoverySidebar.tsxsrc/components/DiscoveryView.tsxsrc/components/MarkdownRenderer.test.tsxsrc/components/MarkdownRenderer.tsxsrc/components/ReleaseTimeline.tsxsrc/components/ScrollToBottom.tsxsrc/components/SearchBar.tsxsrc/components/SettingsPanel.tsxsrc/components/SubscriptionRepoCard.tsxsrc/components/settings/AIConfigPanel.tsxsrc/components/settings/BackendPanel.tsxsrc/components/settings/BackupPanel.tsxsrc/components/settings/CategoryPanel.tsxsrc/components/settings/DataManagementPanel.tsxsrc/components/settings/GeneralPanel.tsxsrc/components/settings/WebDAVPanel.tsxsrc/components/ui/SliderInput.tsx
💤 Files with no reviewable changes (1)
- src/components/MarkdownRenderer.test.tsx
✅ Files skipped from review due to trivial changes (5)
- src/components/SubscriptionRepoCard.tsx
- src/components/ReleaseTimeline.tsx
- src/components/BulkRestoreModal.tsx
- src/components/DiscoverySidebar.tsx
- src/components/settings/AIConfigPanel.tsx
|
就这样吧,可以不做换肤功能 |
调整Markdown渲染器中代码块的背景色透明度表示方式 优化数据管理面板中搜索历史版本的状态管理,移除不必要的依赖
修复持久化状态中的主题设置问题,不再强制使用暗色主题
改进发现页面的滚动行为,添加侧栏固定功能
Summary by CodeRabbit
Bug Fixes
Improvements
Documentation