Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(sidebar): develop new component #2868

Merged
merged 21 commits into from
Dec 30, 2024

Conversation

Alex-huxiyang
Copy link
Collaborator

@Alex-huxiyang Alex-huxiyang commented Dec 17, 2024

Summary by CodeRabbit

  • 新功能

    • 引入了 SideBarSideBarItem 组件,增强了导航功能。
    • 新增多个示例组件 (Demo1Demo6),展示 SideBar 的不同用法。
    • 增加了多语言支持,包含中英文翻译。
  • 文档

    • 完善了 SideBarSideBar.Item 组件的文档,提供使用示例和属性说明。
    • 新增了 SideBar 组件的详细文档,包括功能和样式自定义选项。
  • 样式

    • 添加了新的样式变量,以支持自定义侧边栏外观。

Copy link

coderabbitai bot commented Dec 17, 2024

概述

演练

这个拉取请求引入了一个新的侧边栏导航组件 SideBar,包括其子组件 SideBarItem。新组件提供了灵活的侧边内容选择和切换功能,支持多种交互模式,如禁用选项、值匹配、多标题处理和滚动动画控制。组件同时支持 H5 和 Taro 平台,并提供了详细的文档和多个演示示例。

变更

文件路径 变更摘要
src/config.json 新增 SideBarSideBarItem 组件配置
src/packages/sidebar/* 新增侧边栏组件实现、测试、文档和演示文件
src/packages/sidebaritem/* 新增侧边栏子项组件实现和相关文件
src/styles/variables.scss 添加侧边栏相关的样式变量

可能相关的 PRs

建议的审阅者

  • oasis-cloud

诗歌

🐰 侧边栏,轻盈舞动
点击切换,内容飞扬
导航之路,兔子开疆
用户体验,如丝般柔长
代码如诗,跃然纸上!


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added the 3.x label Dec 17, 2024
Copy link

codecov bot commented Dec 17, 2024

Codecov Report

Attention: Patch coverage is 84.94624% with 28 lines in your changes missing coverage. Please review.

Project coverage is 85.96%. Comparing base (811527a) to head (1977729).
Report is 3 commits behind head on feat_v3.x.

Files with missing lines Patch % Lines
src/packages/sidebar/sidebar.tsx 82.91% 27 Missing ⚠️
src/packages/sidebaritem/sidebaritem.tsx 95.83% 1 Missing ⚠️
Additional details and impacted files
@@              Coverage Diff              @@
##           feat_v3.x    #2868      +/-   ##
=============================================
- Coverage      85.97%   85.96%   -0.02%     
=============================================
  Files            273      277       +4     
  Lines          18492    18678     +186     
  Branches        2736     2764      +28     
=============================================
+ Hits           15898    16056     +158     
- Misses          2589     2617      +28     
  Partials           5        5              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 21

🧹 Nitpick comments (33)
src/packages/sidebar/sidebar.tsx (1)

163-167: 移除冗余的 if 块,简化代码

React.Children.map 中的 if 块没有对 childProps 进行任何修改,可以安全地移除该条件判断,以提高代码的可读性。

建议应用以下修改:

              let childProps = {
                ...child.props,
                active: value === child.props.value,
              }

-             if (String(value) !== String(child.props.value || idx)) {
-               childProps = {
-                 ...childProps,
-               }
-             }

              return React.cloneElement(child, childProps)
src/packages/sidebar/sidebar.taro.tsx (1)

168-168: 使用可选链操作符,简化对 onClick 的调用

可以使用可选链操作符 ?. 来简化对 onClick 的调用,使代码更加简洁和清晰。

建议应用以下修改:

-   onClick && onClick(item.value)
+   onClick?.(item.value)
🧰 Tools
🪛 Biome (1.9.4)

[error] 168-168: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

src/packages/sidebar/types.ts (1)

15-16: onChangeonClick 属性设置为可选

为了增加组件的灵活性,建议将 onChangeonClick 属性设为可选属性,以便在不需要回调时无需传递对应函数。

建议应用以下修改:

-   onChange: (index: string | number) => void
-   onClick: (index: string | number) => void
+   onChange?: (index: string | number) => void
+   onClick?: (index: string | number) => void
src/packages/sidebar/demos/h5/demo2.tsx (2)

5-5: 建议优化状态类型定义

当前的类型定义 <number | string> 过于宽泛。建议根据实际使用场景限定更具体的类型,比如只使用 string 类型。

-const [value, setValue] = useState<number | string>('0')
+const [value, setValue] = useState<string>('0')

8-14: 建议优化性能和样式处理

  1. 建议使用 useCallback 优化 onChange 处理函数
  2. 建议将样式提取到单独的样式文件中
+const handleChange = useCallback((value: string) => {
+  setValue(value)
+}, [])

 <SideBar
-  style={{ height: 300 }}
+  className="demo-sidebar"
   value={value}
-  onChange={(value) => {
-    setValue(value)
-  }}
+  onChange={handleChange}
 >

请在样式文件中添加:

.demo-sidebar {
  height: 300px;
}
src/packages/sidebar/demos/taro/demo2.tsx (1)

1-22: 建议重构以减少代码重复

当前的 Taro 版本与 H5 版本代码几乎完全相同,仅有引入路径不同。建议考虑以下重构方案:

  1. 创建一个共享的基础组件
  2. 使用高阶组件或自定义 hook 来处理平台差异

建议创建一个共享的实现:

// shared/demo2.base.tsx
import React, { useState, useCallback } from 'react'

export interface Demo2Props {
  SideBar: any;  // 根据实际类型定义
}

export const createDemo2 = ({ SideBar }: Demo2Props) => {
  return () => {
    const [value, setValue] = useState<string>('0')
    const handleChange = useCallback((value: string) => {
      setValue(value)
    }, [])

    return (
      <SideBar
        className="demo-sidebar"
        value={value}
        onChange={handleChange}
      >
        <SideBar.Item title="Opt 1">Content 1</SideBar.Item>
        <SideBar.Item title="Opt 2">Content 2</SideBar.Item>
        <SideBar.Item title="Opt 3" disabled />
      </SideBar>
    )
  }
}

然后在各平台特定文件中:

// H5
import { SideBar } from '@nutui/nutui-react'
export default createDemo2({ SideBar })

// Taro
import { SideBar } from '@nutui/nutui-react-taro'
export default createDemo2({ SideBar })
src/packages/sidebar/demos/h5/demo1.tsx (2)

6-6: 建议优化数组生成方式

当前使用 Array.from(new Array(3).keys()) 生成数组的方式较为复杂。建议使用更简洁的方式。

-const list = Array.from(new Array(3).keys())
+const list = [0, 1, 2]

或者使用更具语义化的方式:

const SIDEBAR_ITEMS = Array.from({ length: 3 }, (_, index) => ({
  id: `item-${index}`,
  title: `Opt ${index + 1}`,
  content: `Content ${index + 1}`
}))

16-20: 建议改进列表渲染实现

  1. key 的使用可以更具唯一性
  2. 建议将列表项的内容抽取为配置
-{list.map((item) => (
-  <SideBar.Item key={item} title={`Opt ${item + 1}`}>
-    Content {item + 1}
-  </SideBar.Item>
-))}
+{SIDEBAR_ITEMS.map(({ id, title, content }) => (
+  <SideBar.Item key={id} title={title}>
+    {content}
+  </SideBar.Item>
+))}
src/packages/sidebar/demos/h5/demo4.tsx (2)

5-5: 考虑使用更具体的类型定义

建议将 value 的类型定义得更加明确,避免使用联合类型。

-const [value, setValue] = useState<number | string>('0')
+const [value, setValue] = useState<string>('0')

9-15: 增加无障碍支持

建议为 SideBar 组件添加适当的 ARIA 属性,以提升可访问性。

 <SideBar
   style={{ height: 300 }}
   value={value}
+  role="navigation"
+  aria-label="侧边栏导航"
   onChange={(value) => {
     setValue(value)
   }}
 >
src/packages/sidebar/demos/taro/demo4.tsx (2)

1-25: 需要重构以避免代码重复

此组件与 H5 版本完全相同,仅导入路径不同。建议:

  1. 创建一个基础组件
  2. 根据平台差异使用不同的高阶组件包装

建议的重构方案:

// SidebarDemo.base.tsx
import React from 'react'
import type { FC } from 'react'
import type { SideBarProps } from './types'

interface BaseProps {
  SideBar: FC<SideBarProps>
}

export const BaseSidebarDemo = ({ SideBar }: BaseProps) => {
  // 共享的实现逻辑
}

// demo4.tsx
import { SideBar } from '@nutui/nutui-react-taro' // 或 H5 版本
import { BaseSidebarDemo } from './SidebarDemo.base'

const Demo4 = () => <BaseSidebarDemo SideBar={SideBar} />

12-14: 建议添加错误处理

当状态更新失败时,需要适当的错误处理机制。

 onChange={(value) => {
+  try {
     setValue(value)
+  } catch (error) {
+    console.error('状态更新失败:', error)
+  }
 }}
src/packages/sidebar/demos/h5/demo5.tsx (2)

6-6: 建议优化大列表渲染性能

创建20个列表项可能会影响性能。建议:

  • 考虑使用虚拟列表优化大量数据渲染
  • 实现分页或懒加载机制

1-27: 建议提取共享代码到公共模块

H5版本和Taro版本的demo代码高度重复,建议:

  • 创建一个共享的基础组件
  • 将平台特定的逻辑通过适配器模式处理

示例重构:

// shared/demo5.base.tsx
export const createDemo5 = (SideBar: any) => {
  return () => {
    const [value, setValue] = useState<number | string>('0')
    const list = Array.from(new Array(20).keys())
    return (
      <SideBar
        style={{ height: 300 }}
        value={value}
        contentDuration={500}
        sidebarDuration={300}
        onChange={setValue}
      >
        {list.map((item) => (
          <SideBar.Item key={item} title={`Opt ${item + 1}`}>
            Content {item + 1}
          </SideBar.Item>
        ))}
      </SideBar>
    )
  }
}
src/packages/sidebar/demos/taro/demo5.tsx (1)

14-16: 建议优化事件处理器的写法

当前onChange的写法可以简化:

-        onChange={(value) => {
-          setValue(value)
-        }}
+        onChange={setValue}
src/packages/sidebar/demos/h5/demo3.tsx (2)

4-4: 组件命名需要调整

文件名为 demo3.tsx 但组件名为 Demo2,这种不一致可能会造成混淆。建议将组件名改为 Demo3 以保持一致性。


8-14: 建议将高度参数化

目前 SideBar 的高度被硬编码为 300px,建议将其作为可配置项:

-        style={{ height: 300 }}
+        style={{ height: props.height ?? 300 }}

这样可以提高组件的复用性和灵活性。

src/packages/sidebaritem/sidebaritem.tsx (1)

33-35: 简化条件渲染逻辑

当前的条件渲染逻辑可以更简洁:

- return children ? (
-   <div className={classes}>{!disabled && children}</div>
- ) : null
+ if (!children) return null
+ return <div className={classes}>{!disabled && children}</div>

这样可以提高代码的可读性。

src/packages/sidebaritem/sidebaritem.taro.tsx (1)

34-36: 建议增加可访问性支持

组件缺少必要的可访问性属性,建议添加适当的 ARIA 属性和角色。

   return children ? (
-    <View className={classes}>{!disabled && children}</View>
+    <View
+      className={classes}
+      role="tab"
+      aria-disabled={disabled}
+      aria-selected={props.active}
+    >
+      {!disabled && children}
+    </View>
   ) : null
src/packages/sidebar/demo.tsx (1)

29-41: 建议添加错误边界

为了提高组件的健壮性,建议添加错误边界来捕获和处理可能的渲染错误。

+  const ErrorBoundary = ({ children }: { children: React.ReactNode }) => {
+    try {
+      return <>{children}</>
+    } catch (error) {
+      console.error('Demo rendering error:', error)
+      return <div>演示加载失败</div>
+    }
+  }

   return (
     <>
       <div className="demo">
         <h2>{translated.basic}</h2>
+        <ErrorBoundary>
           <Demo1 />
+        </ErrorBoundary>
         // ... 对其他 Demo 组件也应用相同的处理
       </div>
     </>
   )
src/packages/sidebar/demo.taro.tsx (1)

33-35: 建议优化类名拼接逻辑

建议使用模板字符串来提高代码可读性。

-      <ScrollView
-        className={`demo ${Taro.getEnv() === 'WEB' ? 'web  full' : ''}`}
-      >
+      <ScrollView
+        className={`demo${Taro.getEnv() === 'WEB' ? ' web full' : ''}`}
+      >
src/packages/sidebar/sidebar.scss (2)

22-26: 建议完善滚动条样式兼容性

当前的滚动条隐藏实现可能在某些浏览器中不生效,建议添加更完整的跨浏览器支持。

    &::-webkit-scrollbar {
      display: none;
      width: 0;
      background: transparent;
    }
+    /* Firefox */
+    scrollbar-width: none;
+    /* IE */
+    -ms-overflow-style: none;

4-64: 建议添加浏览器前缀

为了确保更好的跨浏览器兼容性,建议为关键CSS属性添加浏览器前缀。

建议使用 Autoprefixer 或类似工具自动添加所需的浏览器前缀。

src/packages/sidebar/doc.md (1)

57-64: 建议完善属性说明

Props 表格中的一些属性描述可以更详细:

  • valuedefaultValue 建议添加示例值
  • contentDurationsidebarDuration 建议说明单位(毫秒)
  • onClickonChange 建议添加回调参数的详细说明
src/packages/sidebar/doc.taro.md (3)

59-64: Props 表格中的类型格式需要优化

类型定义中的转义字符使用不当,可能导致文档渲染异常。

建议修改为以下格式:

-| value | 当前激活的`item`的key | `string \| number` | `-` |
-| defaultValue | 未设置value时,`item`的key的默认值 | `string \| number` | `-` |
+| value | 当前激活的`item`的key | `string | number` | `-` |
+| defaultValue | 未设置value时,`item`的key的默认值 | `string | number` | `-` |

80-81: 链接引用格式需要修正

ConfigProvider 组件的链接引用格式不正确。

建议修改为:

-组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](#/zh-CN/component/configprovider)。
+组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](/zh-CN/component/configprovider)。
🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)


92-93: 表格格式异常

最后一行的表格内容格式存在问题,多出了一个逗号。

建议修改为:

-| \--nutui-sidebar-item-padding, 24px | 内容区域的内边距 | `24px 20px` |
+| \--nutui-sidebar-item-padding | 内容区域的内边距 | `24px 20px` |
src/packages/sidebar/doc.en-US.md (3)

59-64: Props 表格中的类型格式需要统一修正

英文文档中的类型定义格式与中文文档存在相同问题。

建议按照相同方式修改类型格式:

-| value | The key of the currently activated `item` | `string \| number` | `-` |
-| defaultValue | When value is not set, the default value of the key of `item` | `string \| number` | `-` |
+| value | The key of the currently activated `item` | `string | number` | `-` |
+| defaultValue | When value is not set, the default value of the key of `item` | `string | number` | `-` |

80-81: ConfigProvider 链接引用需要修正

英文文档中的 ConfigProvider 组件链接同样需要修正。

建议修改为:

-The component provides the following CSS variables, which can be used to customize styles. Please refer to [ConfigProvider component](#/en-US/component/configprovider).
+The component provides the following CSS variables, which can be used to customize styles. Please refer to [ConfigProvider component](/en-US/component/configprovider).
🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)


92-93: CSS 变量表格格式异常

最后一行的表格内容存在相同的格式问题。

建议修改为:

-| \--nutui-sidebar-item-padding, 24px | Padding of the content area | `24px 20px` |
+| \--nutui-sidebar-item-padding | Padding of the content area | `24px 20px` |
src/config.json (1)

346-369: 建议优化组件配置

新增的 SideBar 组件配置有以下几点建议:

  1. 考虑到已有 SideNavBar 组件,建议在描述中说明与现有组件的区别和使用场景。
  2. sort 值与其他导航组件重叠,建议调整以保持合理的展示顺序。

建议修改配置:

 {
   "version": "3.0.0",
   "name": "SideBar",
   "type": "component",
   "cName": "侧边栏导航",
-  "desc": "用于侧边内容选择和切换",
+  "desc": "新版侧边栏导航组件,提供更灵活的内容选择和切换功能",
-  "sort": 10,
+  "sort": 11,
   "show": true,
   "taro": true,
   "author": "Alex.hxy",
   "v15": true
 }
src/styles/variables.scss (1)

2181-2203: 建议优化变量的组织结构和注释

建议按照以下方式组织侧边栏相关的变量:

  1. 添加分组注释,将变量按照外观、尺寸、字体等类别归类
  2. 为复杂的变量添加详细的用途说明
 // sidebar(✅)
+// 布局相关
 $sidebar-background-color: var(
   --nutui-sidebar-background-color,
   $color-background
 ) !default;
 $sidebar-border-radius: var(--nutui-sidebar-border-radius, 0) !default;
 $sidebar-width: var(--nutui-sidebar-width, 104px) !default;
 $sidebar-title-height: var(--nutui-sidebar-title-height, 52px) !default;
+
+// 字体相关
 $sidebar-inactive-font-size: var(
   --nutui-sidebar-inactive-font-size,
   $font-size-base
 ) !default;
 $sidebar-active-font-size: var(
   --nutui-sidebar-active-font-size,
   $font-size-xl
 ) !default;
 $sidebar-active-font-weight: var(
   --nutui-sidebar-active-font-weight,
   500
 ) !default;
+
+// 颜色相关
 $sidebar-active-color: var(--nutui-sidebar-active-color, #fa2c19) !default;
 $sidebar-item-background: var(--nutui-sidebar-item-background, $white) !default;
+
+// 间距相关
 $sidebar-item-padding: var(--nutui-sidebar-item-padding, 24px 20px) !default;
src/packages/sidebar/doc.zh-TW.md (1)

11-51: 建议补充更多使用场景说明

为了帮助开发者更好地理解组件的应用场景,建议在示例代码部分补充以下内容:

  1. 每个示例的实际应用场景说明
  2. 示例代码的预期效果说明
  3. 常见的使用注意事项
 ## 示例代碼
 
 ### 基礎用法
+> 用于简单的垂直导航场景,点击侧边导航即可切换内容。
 
 :::demo
 <CodeBlock src='h5/demo1.tsx'></CodeBlock>
 :::
 
 ### 禁用選項
+> 禁用特定选项,适用于权限控制或特定状态下的导航项。
 
 :::demo
 <CodeBlock src='h5/demo2.tsx'></CodeBlock>
 :::
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e7b36cf and daff164.

📒 Files selected for processing (31)
  • src/config.json (1 hunks)
  • src/packages/sidebar/_test_/sidebar.spec.tsx (1 hunks)
  • src/packages/sidebar/demo.taro.tsx (1 hunks)
  • src/packages/sidebar/demo.tsx (1 hunks)
  • src/packages/sidebar/demos/h5/demo1.tsx (1 hunks)
  • src/packages/sidebar/demos/h5/demo2.tsx (1 hunks)
  • src/packages/sidebar/demos/h5/demo3.tsx (1 hunks)
  • src/packages/sidebar/demos/h5/demo4.tsx (1 hunks)
  • src/packages/sidebar/demos/h5/demo5.tsx (1 hunks)
  • src/packages/sidebar/demos/taro/demo1.tsx (1 hunks)
  • src/packages/sidebar/demos/taro/demo2.tsx (1 hunks)
  • src/packages/sidebar/demos/taro/demo3.tsx (1 hunks)
  • src/packages/sidebar/demos/taro/demo4.tsx (1 hunks)
  • src/packages/sidebar/demos/taro/demo5.tsx (1 hunks)
  • src/packages/sidebar/doc.en-US.md (1 hunks)
  • src/packages/sidebar/doc.md (1 hunks)
  • src/packages/sidebar/doc.taro.md (1 hunks)
  • src/packages/sidebar/doc.zh-TW.md (1 hunks)
  • src/packages/sidebar/index.taro.ts (1 hunks)
  • src/packages/sidebar/index.ts (1 hunks)
  • src/packages/sidebar/sidebar.scss (1 hunks)
  • src/packages/sidebar/sidebar.taro.tsx (1 hunks)
  • src/packages/sidebar/sidebar.tsx (1 hunks)
  • src/packages/sidebar/types.ts (1 hunks)
  • src/packages/sidebar/utils.ts (1 hunks)
  • src/packages/sidebaritem/index.taro.ts (1 hunks)
  • src/packages/sidebaritem/index.ts (1 hunks)
  • src/packages/sidebaritem/sidebaritem.scss (1 hunks)
  • src/packages/sidebaritem/sidebaritem.taro.tsx (1 hunks)
  • src/packages/sidebaritem/sidebaritem.tsx (1 hunks)
  • src/styles/variables.scss (1 hunks)
✅ Files skipped from review due to trivial changes (4)
  • src/packages/sidebar/index.taro.ts
  • src/packages/sidebaritem/index.ts
  • src/packages/sidebar/index.ts
  • src/packages/sidebaritem/index.taro.ts
🧰 Additional context used
🪛 Markdownlint (0.37.0)
src/packages/sidebar/doc.en-US.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.taro.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.zh-TW.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

🪛 Biome (1.9.4)
src/packages/sidebar/sidebar.taro.tsx

[error] 168-168: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

🔇 Additional comments (3)
src/packages/sidebaritem/sidebaritem.scss (1)

1-16: 代码良好,无需修改

样式定义清晰,符合预期,没有发现需要修改的问题。

src/packages/sidebar/demos/taro/demo5.tsx (1)

1-27: 建议复用H5版本的实现逻辑

当前Taro版本与H5版本代码重复,仅import来源不同。建议:

  • 采用上述共享基础组件的方案
  • 只保留平台特定的导入声明
src/packages/sidebar/demo.taro.tsx (1)

12-49: 组件结构清晰,实现合理

组件的整体结构和国际化实现都很规范,代码组织良好。

src/packages/sidebar/sidebar.tsx Outdated Show resolved Hide resolved
src/packages/sidebar/sidebar.tsx Outdated Show resolved Hide resolved
src/packages/sidebar/sidebar.tsx Outdated Show resolved Hide resolved
src/packages/sidebar/sidebar.taro.tsx Outdated Show resolved Hide resolved
src/packages/sidebar/sidebar.taro.tsx Outdated Show resolved Hide resolved
src/packages/sidebaritem/sidebaritem.taro.tsx Show resolved Hide resolved
src/packages/sidebar/demo.tsx Show resolved Hide resolved
src/packages/sidebar/doc.md Show resolved Hide resolved
src/packages/sidebar/doc.zh-TW.md Show resolved Hide resolved
src/packages/sidebar/doc.zh-TW.md Outdated Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

♻️ Duplicate comments (2)
src/packages/sidebar/demos/taro/demo3.tsx (1)

1-28: 🛠️ Refactor suggestion

建议重构以减少代码重复

该文件与 H5 版本的代码几乎完全相同,仅导入路径不同。

建议创建一个共享的基础组件:

// shared/demo3.base.tsx
export const createDemo3 = (SideBar) => {
  return () => {
    const [value, setValue] = useState<'a' | 'b' | 'c'>('b')
    return (
      <SideBar
        className="demo-sidebar"
        value={value}
        onChange={setValue}
      >
        <SideBar.Item title="选项 1" value="a">
          内容 1
        </SideBar.Item>
        <SideBar.Item title="选项 2" value="b">
          内容 2
        </SideBar.Item>
        <SideBar.Item title="选项 3" value="c">
          内容 3
        </SideBar.Item>
      </SideBar>
    )
  }
}
src/packages/sidebar/doc.zh-TW.md (1)

80-80: ⚠️ Potential issue

修复文档中的链接引用

ConfigProvider 组件的链接引用格式有误,应修改为正确的路径格式。

-組件提供了下列 CSS 變量,可用於自定義樣式,使用方法請參考 [ConfigProvider 組件](#/zh-CN/component/configprovider)。
+組件提供了下列 CSS 變量,可用於自定義樣式,使用方法請參考 [ConfigProvider 組件](/zh-CN/component/configprovider)。
🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

🧹 Nitpick comments (10)
src/packages/sidebar/demos/h5/demo3.tsx (3)

5-5: 建议使用更具体的类型定义

当前 useState 的类型定义比较宽泛。建议将类型限制为实际使用的值类型。

-const [value, setValue] = useState<number | string>('b')
+const [value, setValue] = useState<'a' | 'b' | 'c'>('b')

8-14: 建议将内联样式迁移到 CSS 文件中

为了保持代码整洁和样式的可复用性,建议将内联样式抽离到单独的 CSS 文件中。

-style={{ height: 300 }}
+className="demo-sidebar"

然后在对应的 CSS 文件中添加:

.demo-sidebar {
  height: 300px;
}

15-23: 建议增加更有意义的示例内容

当前示例内容过于简单,建议添加更贴近实际使用场景的内容,以便更好地展示组件的实际应用。

src/packages/sidebar/doc.md (2)

59-64: 建议完善 Props 文档

建议为以下属性添加更详细的说明:

  1. valuedefaultValue 的值应该是什么格式
  2. contentDurationsidebarDuration 的单位是什么(毫秒还是秒)
  3. onClickonChange 的回调参数 index 具体代表什么

84-93: 建议补充 CSS 变量的使用示例

为了帮助开发者更好地理解和使用这些 CSS 变量,建议添加一个自定义主题的示例代码。

src/packages/sidebar/doc.en-US.md (2)

59-64: 完善英文文档中的技术术语翻译

建议修改以下翻译以保持专业性:

  1. "label" 应该统一翻译为 "tab" 或 "item"
  2. "tag Key" 建议改为 "item key"
  3. "matched identifier" 可以更清晰地表述为 "unique identifier"

Also applies to: 72-74


1-93: 建议添加英文版的在线预览链接

为了方便英文用户快速预览组件效果,建议在文档开头添加在线预览链接(比如 CodeSandbox 或 StackBlitz)。

🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/sidebar.tsx (1)

159-164: 建议简化内容渲染逻辑

当前代码中存在不必要的对象展开操作,可以简化实现。

建议进行如下修改:

- if (String(value) !== String(child.props.value || idx)) {
-   childProps = {
-     ...childProps,
-   }
- }
src/packages/sidebar/sidebar.taro.tsx (2)

99-108: 建议优化类型定义

当前的 RectItem 类型定义可以更加严格和具体,特别是 dataset 的类型定义。

建议进行如下修改:

 type RectItem = {
   bottom: number
-  dataset: { sid: string }
+  dataset: Readonly<{
+    sid: string
+  }>
   height: number
   id: string
   left: number
   right: number
   top: number
   width: number
 }

177-179: 平台特定处理实现正确

代码正确处理了不同平台的滚动动画差异,实现合理。不过建议添加注释说明不同平台的处理逻辑。

建议添加如下注释:

 scrollWithAnimation={
+  // Web 平台支持平滑滚动动画,其他平台使用原生实现
   Taro.getEnv() !== 'WEB' ? false : scrollWithAnimation.current
 }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between daff164 and 8010707.

📒 Files selected for processing (8)
  • src/packages/sidebar/demos/h5/demo3.tsx (1 hunks)
  • src/packages/sidebar/demos/taro/demo3.tsx (1 hunks)
  • src/packages/sidebar/doc.en-US.md (1 hunks)
  • src/packages/sidebar/doc.md (1 hunks)
  • src/packages/sidebar/doc.taro.md (1 hunks)
  • src/packages/sidebar/doc.zh-TW.md (1 hunks)
  • src/packages/sidebar/sidebar.taro.tsx (1 hunks)
  • src/packages/sidebar/sidebar.tsx (1 hunks)
🧰 Additional context used
🪛 Markdownlint (0.37.0)
src/packages/sidebar/doc.taro.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.zh-TW.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.en-US.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

🔇 Additional comments (4)
src/packages/sidebar/doc.md (1)

80-80: 修复无效的链接片段

ConfigProvider 组件的链接片段 #/zh-CN/component/configprovider 无效,需要更新为正确的链接地址。

🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.taro.md (1)

17-17: 验证 Taro 示例代码的完整性

请确认以下几点:

  1. 所有的示例代码文件都存在于 taro 目录下
  2. 示例代码中使用的是 Taro 特定的 API 和组件
  3. 示例代码考虑了小程序的限制和特性

Also applies to: 25-25, 33-33, 41-41, 49-49

✅ Verification successful

Let's verify the Taro-specific API usage in these demo files.


Let's check the actual content of these demo files to verify their implementation.


示例代码已完整实现且符合 Taro 规范

示例代码验证结果:

  • 所有 demo1-5.tsx 文件都已存在且实现完整
  • 正确使用了 @nutui/nutui-react-taro 的 Taro 专用组件
  • 代码结构符合小程序规范,未使用不支持的特性
  • 示例涵盖了基础用法、禁用状态、自定义值和动画效果等特性
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 验证 Taro 示例代码文件是否存在
for demo in {1..5}; do
  if ! fd -t f "demo${demo}.tsx" "src/packages/sidebar/demos/taro"; then
    echo "Missing Taro demo${demo}.tsx"
  fi
done

Length of output: 574


Script:

#!/bin/bash
# Check Taro imports and API usage in demo files
for demo in {1..5}; do
  echo "=== demo${demo}.tsx ==="
  rg -A 2 "import.*@tarojs|from ['|\"]@tarojs" "src/packages/sidebar/demos/taro/demo${demo}.tsx"
done

# Also check if demos use Taro components
for demo in {1..5}; do
  echo "=== demo${demo}.tsx components ==="
  rg "View|Text|Button" "src/packages/sidebar/demos/taro/demo${demo}.tsx"
done

Length of output: 1554


Script:

#!/bin/bash
# Display content of each Taro demo file
for demo in {1..5}; do
  echo "=== demo${demo}.tsx 内容 ==="
  cat "src/packages/sidebar/demos/taro/demo${demo}.tsx"
  echo -e "\n"
done

Length of output: 3748

src/packages/sidebar/sidebar.tsx (2)

119-123: 实现正确且符合最佳实践

tabChange 函数的实现遵循了最佳实践,正确处理了禁用状态的检查顺序。


67-82: 🛠️ Refactor suggestion

建议使用空值合并运算符处理 value 赋值

当前的实现可能会在 value0 时出现问题。建议使用空值合并运算符来确保正确处理所有有效值。

建议进行如下修改:

- value: props.value ?? idx,
+ value: props.value !== undefined ? props.value : idx,

Likely invalid or redundant comment.

src/packages/sidebar/sidebar.tsx Show resolved Hide resolved
src/packages/sidebar/sidebar.tsx Show resolved Hide resolved
src/packages/sidebar/sidebar.taro.tsx Show resolved Hide resolved
src/packages/sidebar/sidebar.taro.tsx Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/packages/sidebar/_test_/sidebar.spec.tsx (1)

1-7: 建议优化测试设置

  1. 缺少 vitest 的显式导入,但后续使用了 vi.fn()
  2. 测试数据过于简单,建议使用更有意义的数据结构

建议修改如下:

 import * as React from 'react'
 import { fireEvent, render } from '@testing-library/react'
 import '@testing-library/jest-dom'
+import { vi } from 'vitest'
 import { SideBar } from '../sidebar'

-const list = Array.from(new Array(3).keys())
+const list = [
+  { id: 1, title: '选项1', content: '内容1' },
+  { id: 2, title: '选项2', content: '内容2' },
+  { id: 3, title: '选项3', content: '内容3' },
+]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8010707 and bec5d79.

📒 Files selected for processing (1)
  • src/packages/sidebar/_test_/sidebar.spec.tsx (1 hunks)
🔇 Additional comments (2)
src/packages/sidebar/_test_/sidebar.spec.tsx (2)

8-51: 建议增加更多测试用例覆盖组件的核心功能

参考先前的评审意见,建议添加以下测试场景:

  • 点击切换选项的交互测试
  • 动画持续时间(contentDuration/sidebarDuration)的验证
  • 禁用状态的处理
  • 边界情况的处理(空列表、异常值等)

8-20: 🛠️ Refactor suggestion

建议增强默认值渲染测试

当前测试用例过于简单,建议增加以下断言:

  1. 验证所有选项是否正确渲染
  2. 验证内容区域是否正确显示
  3. 验证非激活项的状态

建议修改如下:

 test('should render defaultValue correctly', async () => {
   const { container } = render(
     <SideBar style={{ height: 300 }} value="0">
       {list.map((item) => (
-        <SideBar.Item key={item} title={`Opt ${item + 1}`}>
-          Content {item + 1}
+        <SideBar.Item key={item.id} title={item.title}>
+          {item.content}
         </SideBar.Item>
       ))}
     </SideBar>
   )
-  const item = container.querySelectorAll('.nut-sidebar-titles-item')[0]
-  expect(item).toHaveClass('nut-sidebar-titles-item-active')
+  const items = container.querySelectorAll('.nut-sidebar-titles-item')
+  const contents = container.querySelectorAll('.nut-sidebar-item-content')
+  
+  // 验证选项数量
+  expect(items).toHaveLength(list.length)
+  
+  // 验证第一项激活状态
+  expect(items[0]).toHaveClass('nut-sidebar-titles-item-active')
+  
+  // 验证其他项非激活状态
+  expect(items[1]).not.toHaveClass('nut-sidebar-titles-item-active')
+  expect(items[2]).not.toHaveClass('nut-sidebar-titles-item-active')
+  
+  // 验证内容显示
+  expect(contents[0]).toHaveTextContent(list[0].content)
 })

Likely invalid or redundant comment.

src/packages/sidebar/_test_/sidebar.spec.tsx Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (2)
src/packages/sidebar/doc.zh-TW.md (1)

80-80: ⚠️ Potential issue

修复 ConfigProvider 组件链接

ConfigProvider 组件的链接格式不正确,需要更新为有效的链接地址。

-組件提供了下列 CSS 變量,可用於自定義樣式,使用方法請參考 [ConfigProvider 組件](#/zh-CN/component/configprovider)。
+組件提供了下列 CSS 變量,可用於自定義樣式,使用方法請參考 [ConfigProvider 組件](/zh-CN/component/configprovider)。
🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.taro.md (1)

80-80: ⚠️ Potential issue

修复 ConfigProvider 组件链接

ConfigProvider 组件的链接格式不正确,需要更新为有效的链接地址。

-组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](#/zh-CN/component/configprovider)。
+组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](/zh-CN/component/configprovider)。
🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

🧹 Nitpick comments (5)
src/packages/sidebar/_test_/sidebar.spec.tsx (3)

8-20: 建议增加默认渲染测试用例的覆盖范围

当前测试仅验证了第一个选项的激活状态,建议添加以下测试点:

  • 验证所有选项是否都正确渲染
  • 验证选项的标题文本
  • 验证选项的内容是否正确渲染
  • 验证非激活项的状态
test('should render defaultValue correctly', async () => {
  const { container } = render(
    <SideBar style={{ height: 300 }} value="0">
      {list.map((item) => (
        <SideBar.Item key={item} title={`Opt ${item + 1}`}>
          Content {item + 1}
        </SideBar.Item>
      ))}
    </SideBar>
  )
  
  const items = container.querySelectorAll('.nut-sidebar-titles-item')
  // 验证选项数量
  expect(items).toHaveLength(3)
  
  // 验证激活状态
  expect(items[0]).toHaveClass('nut-sidebar-titles-item-active')
  expect(items[1]).not.toHaveClass('nut-sidebar-titles-item-active')
  
  // 验证标题文本
  expect(items[0]).toHaveTextContent('Opt 1')
  
  // 验证内容
  const contents = container.querySelectorAll('.nut-sidebar-item')
  expect(contents[0]).toHaveTextContent('Content 1')
})

37-51: 建议完善禁用状态测试

当前测试仅验证了回调函数未被调用,建议增加以下测试内容:

  1. 验证禁用状态的样式
  2. 验证可访问性属性
  3. 验证禁用项的提示信息
test('disabled option', async () => {
  const onChange = vi.fn()
  const { container } = render(
    <SideBar style={{ height: 300 }} value="0" onChange={onChange}>
      {list.map((item) => (
        <SideBar.Item key={item} title={`Opt ${item + 1}`} disabled>
          Content {item + 1}
        </SideBar.Item>
      ))}
    </SideBar>
  )
  
  const items = container.querySelectorAll('.nut-sidebar-titles-item')
  fireEvent.click(items[1])
  expect(onChange).not.toHaveBeenCalled()
  
  // 验证禁用状态样式
  expect(items[1]).toHaveClass('nut-sidebar-titles-item-disabled')
  
  // 验证可访问性属性
  expect(items[1]).toHaveAttribute('aria-disabled', 'true')
  
  // 验证提示信息
  expect(items[1]).toHaveAttribute('title', '该选项已禁用')
})

52-70: 建议添加更多边界情况的测试

当前测试验证了基本的值匹配功能,建议添加以下测试场景:

  1. 无效值的处理
  2. 值更新后的重新匹配
  3. 动态更新选项列表
test('matchByValue edge cases', async () => {
  const list1 = [
    { value: 'a', title: 'Opt a' },
    { value: 'b', title: 'Opt b' },
    { value: 'c', title: 'Opt c' },
  ]
  
  const { container, rerender } = render(
    <SideBar style={{ height: 300 }} value="invalid">
      {list1.map((item) => (
        <SideBar.Item key={item.value} title={item.title} value={item.value}>
          Content {item.value}
        </SideBar.Item>
      ))}
    </SideBar>
  )
  
  // 验证无效值
  const items = container.querySelectorAll('.nut-sidebar-titles-item')
  expect(items[0]).not.toHaveClass('nut-sidebar-titles-item-active')
  
  // 验证值更新
  rerender(
    <SideBar style={{ height: 300 }} value="b">
      {list1.map((item) => (
        <SideBar.Item key={item.value} title={item.title} value={item.value}>
          Content {item.value}
        </SideBar.Item>
      ))}
    </SideBar>
  )
  expect(items[1]).toHaveClass('nut-sidebar-titles-item-active')
  
  // 验证动态选项
  const newList = [...list1, { value: 'd', title: 'Opt d' }]
  rerender(
    <SideBar style={{ height: 300 }} value="b">
      {newList.map((item) => (
        <SideBar.Item key={item.value} title={item.title} value={item.value}>
          Content {item.value}
        </SideBar.Item>
      ))}
    </SideBar>
  )
  const updatedItems = container.querySelectorAll('.nut-sidebar-titles-item')
  expect(updatedItems).toHaveLength(4)
})
src/packages/sidebar/doc.en-US.md (1)

80-80: 修复文档中的链接引用

文档中的ConfigProvider组件链接引用有误,需要更新为正确的链接地址。同时建议添加以下内容:

  1. 添加更多使用示例和最佳实践
  2. 补充常见问题解答部分
  3. 添加与其他组件配合使用的示例
-The component provides the following CSS variables, which can be used to customize styles. Please refer to [ConfigProvider component](#/en-US/component/configprovider).
+The component provides the following CSS variables, which can be used to customize styles. Please refer to [ConfigProvider component](/en-US/component/configprovider).
🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/styles/variables.scss (1)

2181-2206: 建议增加更多样式自定义变量

当前侧边栏组件的样式变量覆盖了基本样式需求,建议添加以下变量以提供更多自定义选项:

  1. 过渡动画持续时间
  2. 禁用状态的样式
  3. 悬停状态的样式
// 添加以下变量
$sidebar-transition-duration: var(--nutui-sidebar-transition-duration, 0.3s) !default;
$sidebar-disabled-color: var(--nutui-sidebar-disabled-color, $color-text-disabled) !default;
$sidebar-disabled-background: var(--nutui-sidebar-disabled-background, $color-background) !default;
$sidebar-hover-color: var(--nutui-sidebar-hover-color, $color-primary) !default;
$sidebar-hover-background: var(--nutui-sidebar-hover-background, $color-primary-light-pressed) !default;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bec5d79 and 4539dc5.

📒 Files selected for processing (7)
  • src/packages/sidebar/_test_/sidebar.spec.tsx (1 hunks)
  • src/packages/sidebar/doc.en-US.md (1 hunks)
  • src/packages/sidebar/doc.md (1 hunks)
  • src/packages/sidebar/doc.taro.md (1 hunks)
  • src/packages/sidebar/doc.zh-TW.md (1 hunks)
  • src/packages/sidebar/sidebar.scss (1 hunks)
  • src/styles/variables.scss (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/packages/sidebar/sidebar.scss
🧰 Additional context used
🪛 Markdownlint (0.37.0)
src/packages/sidebar/doc.en-US.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.taro.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.zh-TW.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

🔇 Additional comments (2)
src/packages/sidebar/doc.md (1)

80-80: ⚠️ Potential issue

修复 ConfigProvider 组件链接

ConfigProvider 组件的链接格式不正确,需要更新为有效的链接地址。

-组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](#/zh-CN/component/configprovider)。
+组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](/zh-CN/component/configprovider)。

Likely invalid or redundant comment.

🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.taro.md (1)

17-17: 建议验证 Taro 示例代码路径

请确认以下示例代码文件路径是否存在且正确:

  • taro/demo1.tsx
  • taro/demo2.tsx
  • taro/demo3.tsx
  • taro/demo4.tsx
  • taro/demo5.tsx

Also applies to: 25-25, 33-33, 41-41, 49-49

✅ Verification successful

Let me try a different approach to verify the demo files.


Based on the search results, I can now provide a final response:

示例代码路径正确且文件存在

经验证,所有 Taro 示例代码文件均存在于正确的位置:

  • src/packages/sidebar/demos/taro/demo1.tsx
  • src/packages/sidebar/demos/taro/demo2.tsx
  • src/packages/sidebar/demos/taro/demo3.tsx
  • src/packages/sidebar/demos/taro/demo4.tsx
  • src/packages/sidebar/demos/taro/demo5.tsx

文档中的引用路径 taro/demo[1-5].tsx 是相对于组件 demos 目录的相对路径,使用方式正确。

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 验证 Taro 示例代码文件是否存在
for demo in {1..5}; do
  fd "demo${demo}.tsx" --type f --glob "*/taro/*"
done

Length of output: 794


Script:

#!/bin/bash
# Search for demo files in the entire repository
fd "demo[1-5].tsx" --type f

Length of output: 31579


Script:

#!/bin/bash
# Search for any files containing 'taro' in their path
fd . --type f | grep -i "taro"

Length of output: 40767


Script:

#!/bin/bash
# Look for demo file references in the doc.taro.md file
rg "demo[1-5].tsx" "src/packages/sidebar/doc.taro.md"

Length of output: 278


Script:

#!/bin/bash
# Check the repository structure for demo files location
fd . --type d | grep -i "demo\|example"

Length of output: 9339


:::demo

<CodeBlock src='h5/demo1.tsx'></CodeBlock>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

示例代码路径需要更新

文档中的示例代码路径 h5/demo1.tsx 需要修改为 demos/h5/demo1.tsx。根据代码库的实际结构,正确的路径应为:

  • demos/h5/demo1.tsx
  • demos/h5/demo2.tsx
  • demos/h5/demo3.tsx
  • demos/h5/demo4.tsx
  • demos/h5/demo5.tsx
🔗 Analysis chain

建议验证示例代码路径

请确认以下示例代码文件路径是否存在且正确:

  • h5/demo1.tsx
  • h5/demo2.tsx
  • h5/demo3.tsx
  • h5/demo4.tsx
  • h5/demo5.tsx

Also applies to: 25-25, 33-33, 41-41, 49-49


Let me try a different approach to verify the demo files.


Let me check the specific sidebar demo files to verify the paths.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 验证示例代码文件是否存在
for demo in {1..5}; do
  fd "demo${demo}.tsx" --type f --glob "*/h5/*"
done

Length of output: 774


Script:

#!/bin/bash
# Search for demo files in the entire repository
fd "demo[1-5].tsx" --type f

# Also check if there's a demos or demo directory
fd "demo" --type d

Length of output: 34309


Script:

#!/bin/bash
# Check the content of sidebar demo files
cat src/packages/sidebar/demos/h5/demo1.tsx

Length of output: 635

src/packages/sidebar/_test_/sidebar.spec.tsx Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
migrate-from-v2.md (1)

305-314: 建议完善 SideBar 组件的文档说明

建议对以下几点进行补充说明:

  1. 属性的类型定义
  2. 回调函数的参数类型
  3. 示例代码
  4. 与其他导航组件的使用场景对比

建议按照如下格式补充属性说明:

 #### SideBar
 
 - 新增SideBar组件
-  - 支持属性value,用于当前激活的`item`的key
-  - 支持属性defaultValue, 表示未设置value时,`item`的key的默认值
-  - 支持属性contentDuration, 用于内容滚动动画时长
-  - 支持属性sidebarDuration, 用于侧栏滚动动画时长
-  - 支持属性onClick, 点击标签时触发
-  - 支持属性onChange, 当前激活的标签改变时触发
+  - value: string | number,当前激活项的标识符
+  - defaultValue: string | number,默认激活项的标识符
+  - contentDuration: number,内容区域滚动动画时长,单位ms
+  - sidebarDuration: number,侧边栏滚动动画时长,单位ms
+  - onClick: (value: string | number) => void,点击标签时触发
+  - onChange: (value: string | number) => void,激活项改变时触发
+
+ 示例:
+ ```tsx
+ <SideBar defaultValue="1" onChange={(val) => console.log(val)}>
+   <SideBar.Item title="标签1" value="1" />
+   <SideBar.Item title="标签2" value="2" />
+ </SideBar>
+ ```
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4539dc5 and fc0bdbd.

📒 Files selected for processing (1)
  • migrate-from-v2.md (4 hunks)
🔇 Additional comments (2)
migrate-from-v2.md (2)

540-544: 属性命名更改符合直观理解

属性重命名改动合理:

  • listType 改为 previewType 更准确地描述了属性的用途
  • isDeletable 改为 deletable 符合组件库的命名规范
  • isPreview 改为 preview 保持了命名的一致性
  • defaultImg 改为 previewUrl 更清晰地表达了属性的功能
  • defaultFileList 改为 defaultValue 统一了组件的受控模式

816-816: ⚠️ Potential issue

修正 Swiper 组件文档中的属性名

-  - `autoplay` 重命名为 `autoplay`
+  - `autoPlay` 重命名为 `autoPlay`

Likely invalid or redundant comment.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/styles/variables.scss (1)

2148-2173: 侧边栏变量定义合理且完整

变量定义涵盖了侧边栏组件所需的主要样式属性,包括尺寸、颜色、字体等关键特性。建议考虑以下几点优化:

  1. 可以添加响应式断点变量,以适应不同屏幕尺寸
  2. 考虑增加过渡动画相关的变量
  3. 建议添加hover状态的样式变量

建议添加以下变量:

// 响应式断点
+$sidebar-small-width: var(--nutui-sidebar-small-width, 80px) !default;
+$sidebar-large-width: var(--nutui-sidebar-large-width, 200px) !default;

// 动画
+$sidebar-transition-duration: var(--nutui-sidebar-transition-duration, 0.3s) !default;

// hover状态
+$sidebar-item-hover-background: var(--nutui-sidebar-item-hover-background, $color-background) !default;
src/config.json (1)

351-352: 建议补充更详细的组件描述

当前描述"用于侧边内容选择和切换"过于简单。建议补充以下信息:

  • 组件的具体使用场景
  • 与其他导航组件的区别
  • 核心功能特点
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fc0bdbd and 25fce1e.

📒 Files selected for processing (3)
  • migrate-from-v2.md (3 hunks)
  • src/config.json (1 hunks)
  • src/styles/variables.scss (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • migrate-from-v2.md
🔇 Additional comments (1)
src/config.json (1)

347-358: 请注意新旧侧边栏组件的共存问题

观察到以下潜在问题:

  1. 新增的 SideBar 组件与现有的 SideNavBar 组件功能可能重叠
  2. 新增的 SideBarItem 组件与现有的 SideNavBarItem 组件功能可能重叠
  3. 新组件使用 3.0.0 版本,而旧组件使用 2.0.0 版本

建议:

  • 明确说明新旧组件的区别和迁移路径
  • 考虑在文档中添加版本迁移指南
  • 考虑为旧组件添加废弃(deprecated)标记

Also applies to: 359-370

@xiaoyatong
Copy link
Collaborator

1、需要关注最大宽度的设置
2、内容区留白处理也给下demo

@xiaoyatong
Copy link
Collaborator

3、关注下单测

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (12)
src/packages/sidebar/demos/h5/demo6.tsx (3)

5-5: 建议明确初始值类型的一致性
当前使用了 number | string 作为状态类型,但初始值却为字符串 '0'。若预期后续要以数值类型处理,可考虑统一为 number,避免在后续逻辑中进行额外的类型转换。


6-6: 优化数组初始化的写法
可以使用更简洁的写法来生成 [0, 1, 2]

- const list = Array.from(new Array(3).keys())
+ const list = Array.from({ length: 3 }, (_, i) => i)

9-10: 考虑增加最大宽度或自适应配置
虽然这里将 Sidebar 的高度设定为固定的 300,但没有对应的最大宽度设置。为确保在不同设备和屏幕尺寸下都有良好体验,建议增加对应的 maxWidth 或自适应逻辑。

src/packages/sidebar/demos/taro/demo6.tsx (3)

4-6: 命名方面可稍作说明,增强可读性
函数式组件命名为 Demo6 在可维护性上或许不足以表达组件用途,建议根据项目需求更具语义化。


8-10: 建议增加更灵活的样式设置
目前通过 style={{ height: 300 }} 针对高度作了硬编码,若有最大宽度限制或跨设备自适应需求,可能需要在项目中的全局样式或更高级的样式解决方案中进行配置,以便日后维护与扩展。


19-21: 建议提供示例展示空白区域及布局处理
SideBar.Item 中显示内容时,若需要展示较多文本或带有空白区域的内容,建议在 Demo 或文档里示例常见布局方式和空白处理方法,方便他人理解和引用。

src/packages/sidebar/demo.tsx (1)

10-10: 组件命名需要与功能保持一致

组件名称 SideNavBarDemo 与实际功能不符,建议改为 SidebarDemo 以保持与组件功能的一致性。

-const SideNavBarDemo = () => {
+const SidebarDemo = () => {
src/packages/sidebar/demo.taro.tsx (2)

13-13: 组件命名需要与功能保持一致

组件名称 TabsDemo 与实际功能不符,这是一个侧边栏演示组件,建议改为 SidebarDemo 以保持一致性。

-const TabsDemo = () => {
+const SidebarDemo = () => {

36-38: 优化类名拼接逻辑

建议使用模板字符串或条件运算符来简化类名拼接逻辑。

-      <ScrollView
-        className={`demo ${Taro.getEnv() === 'WEB' ? 'web  full' : ''}`}
-      >
+      <ScrollView
+        className={`demo${Taro.getEnv() === 'WEB' ? ' web full' : ''}`}
+      >
src/packages/sidebar/doc.zh-TW.md (1)

57-64: 优化属性表格格式

Props 表格中的类型描述需要转义特殊字符,建议修改格式以提高可读性。

-| value | 當前激活的`item`的key | `string \| number` | `-` |
-| defaultValue | 未設置value時,`item`的key的默認值 | `string \| number` | `-` |
+| value | 當前激活的 `item` 的 key | `string \| number` | `-` |
+| defaultValue | 未設置 value 時,`item` 的 key 的默認值 | `string \| number` | `-` |
src/packages/sidebar/doc.md (1)

87-87: CSS 变量值需要保持一致性

--nutui-sidebar-max-width 的默认值应该包含单位,建议修改为:

-| \--nutui-sidebar-max-width | 侧边栏最大宽度 | `128px` |
+| \--nutui-sidebar-max-width | 侧边栏最大宽度 | `128px` |
src/styles/variables.scss (1)

2149-2153: 建议考虑添加圆角效果

考虑到组件的视觉表现,建议为侧边栏添加适当的圆角效果,以提升用户体验。可以参考其他组件的圆角设计,如 $radius-l (8px)。

-$sidebar-border-radius: var(--nutui-sidebar-border-radius, 0) !default;
+$sidebar-border-radius: var(--nutui-sidebar-border-radius, $radius-l) !default;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 25fce1e and a6c6a7a.

📒 Files selected for processing (10)
  • src/packages/sidebar/demo.taro.tsx (1 hunks)
  • src/packages/sidebar/demo.tsx (1 hunks)
  • src/packages/sidebar/demos/h5/demo6.tsx (1 hunks)
  • src/packages/sidebar/demos/taro/demo6.tsx (1 hunks)
  • src/packages/sidebar/doc.en-US.md (1 hunks)
  • src/packages/sidebar/doc.md (1 hunks)
  • src/packages/sidebar/doc.taro.md (1 hunks)
  • src/packages/sidebar/doc.zh-TW.md (1 hunks)
  • src/packages/sidebar/sidebar.scss (1 hunks)
  • src/styles/variables.scss (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/packages/sidebar/sidebar.scss
🧰 Additional context used
🪛 Markdownlint (0.37.0)
src/packages/sidebar/doc.en-US.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.taro.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.zh-TW.md

80-80: null
Link fragments should be valid

(MD051, link-fragments)

🔇 Additional comments (14)
src/packages/sidebar/demos/h5/demo6.tsx (2)

8-8: 验证自定义主题的最小/最大宽度及白边配置
自定义属性 nutuiSidebarItemPadding 对实际布局影响较大,建议在文档或 demo 中提供相关示例,以展示组件在包含或不包含空白区域时的可视化变化。


19-21: 列表渲染与内容对应关系清晰
每个 SideBar.Item 都带有明确的标题与内容,且通过 map 循环动态生成,结构简洁易读,目前实现方式符合预期。

src/packages/sidebar/demos/taro/demo6.tsx (2)

14-16: 事件回调处理恰当,但可进一步考虑稳定性
onChange 的回调中直接使用箭头函数和更新 value 没有问题。如需在大型项目中优化性能,可结合 useCallback 或其他方式减少重复渲染,但此处暂不必过度优化。


26-27: 保持导出默认组件方式规范
默认导出组件的方式清晰直观,与项目结构保持一致,当前写法可直接使用,无需改动。

src/packages/sidebar/demo.tsx (1)

3-8: 验证 demo 组件的导入和实现

需要确保所有导入的 demo 组件都正确实现并导出。

✅ Verification successful

Let me try another verification approach to check the demo files:


Let me try one final verification to check the component definitions:


Demo 组件导入和实现验证完成

通过验证,所有 6 个 Demo 组件都已正确实现并导出:

  • 所有从 demo1.tsxdemo6.tsx 的文件都存在
  • 每个文件都包含了相应的组件定义
  • 所有组件都正确使用 export default 导出
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 验证 demo 组件的实现
for i in {1..6}; do
  echo "=== 检查 demo${i}.tsx ==="
  ast-grep --pattern 'export default function Demo$_($$$) { $$$ }' "src/packages/sidebar/demos/h5/demo${i}.tsx"
  # 同时检查箭头函数导出
  ast-grep --pattern 'export default const Demo$_ = ($$$) => { $$$ }' "src/packages/sidebar/demos/h5/demo${i}.tsx"
done

Length of output: 1715


Script:

#!/bin/bash
# 检查demo文件是否存在并查看其内容
for i in {1..6}; do
  echo "=== Demo${i} 文件内容 ==="
  rg -A 5 "export default" "src/packages/sidebar/demos/h5/demo${i}.tsx" || echo "未找到 demo${i}.tsx 文件"
done

Length of output: 917


Script:

#!/bin/bash
# 检查每个demo文件中的组件定义
for i in {1..6}; do
  echo "=== Demo${i} 组件定义 ==="
  rg -B 2 "export default Demo${i}" "src/packages/sidebar/demos/h5/demo${i}.tsx" || echo "未找到组件定义"
done

Length of output: 989

src/packages/sidebar/doc.zh-TW.md (1)

80-80: 修复文档链接格式

ConfigProvider 组件的链接引用格式需要修正。

-組件提供了下列 CSS 變量,可用於自定義樣式,使用方法請參考 [ConfigProvider 組件](#/zh-CN/component/configprovider)。
+組件提供了下列 CSS 變量,可用於自定義樣式,使用方法請參考 [ConfigProvider 組件](/zh-CN/component/configprovider)。
🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.md (2)

17-49: 示例代码路径需要更新

请将示例代码路径从 h5/demo*.tsx 更新为 demos/h5/demo*.tsx,以匹配代码库的实际结构。


80-80: ConfigProvider 组件链接需要修正

请更新 ConfigProvider 组件的链接片段,确保其指向正确的文档位置。建议验证并更新链接地址。

🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.taro.md (1)

80-80: ConfigProvider 组件链接需要修正

请更新 ConfigProvider 组件的链接片段,确保其指向正确的文档位置。建议验证并更新链接地址。

🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/sidebar/doc.en-US.md (2)

17-49: 示例代码路径需要更新

请将示例代码路径从 h5/demo*.tsx 更新为 demos/h5/demo*.tsx,以匹配代码库的实际结构。


1-94: 文档翻译质量良好

英文文档的翻译质量和结构与中文版本保持一致,未发现明显的翻译问题。

🧰 Tools
🪛 Markdownlint (0.37.0)

80-80: null
Link fragments should be valid

(MD051, link-fragments)

src/styles/variables.scss (3)

2157-2168: 字体层级设计合理

字体样式的设计符合规范:

  1. 使用系统预设的字号变量
  2. 活动状态和非活动状态有清晰的视觉区分
  3. 字重的选择恰当

2169-2173: 颜色方案符合设计规范

颜色变量的设置合理:

  1. 使用主题色($color-primary)作为激活状态的颜色
  2. 使用白色作为项目背景色,确保良好的对比度

2174-2174: 需要验证内容区域的间距处理

根据PR评论反馈,需要提供一个关于内容区域空白处理的演示:

  1. 当前设置的内边距是否适合各种内容场景
  2. 是否需要考虑不同尺寸屏幕下的响应式间距

建议提供一个包含以下场景的演示:

  • 单行文本内容
  • 多行文本内容
  • 带图标的内容
  • 在不同屏幕尺寸下的展示效果

src/packages/sidebar/doc.taro.md Show resolved Hide resolved
src/packages/sidebar/doc.en-US.md Show resolved Hide resolved
src/styles/variables.scss Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/packages/sidebar/_test_/sidebar.spec.tsx (1)

6-6: 建议改进测试数据的设置方式

当前的测试数据过于简单,建议:

  1. 为测试数据添加类型定义
  2. 使用更贴近实际场景的数据结构
-const list = Array.from(new Array(3).keys())
+interface SidebarItem {
+  id: number;
+  title: string;
+  content: string;
+}
+
+const list: SidebarItem[] = [
+  { id: 1, title: '选项1', content: '内容1' },
+  { id: 2, title: '选项2', content: '内容2' },
+  { id: 3, title: '选项3', content: '内容3' },
+];
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e737a7c and 928c72a.

📒 Files selected for processing (1)
  • src/packages/sidebar/_test_/sidebar.spec.tsx (1 hunks)
🔇 Additional comments (2)
src/packages/sidebar/_test_/sidebar.spec.tsx (2)

22-36: 测试用例未完全覆盖声明的功能

测试名称提到了"scroll to the right option",但实际并未验证滚动行为。建议参考之前的建议添加滚动行为的验证。


37-51: 建议完善禁用状态测试

当前测试仅验证了回调函数未被调用,建议参考之前的建议添加样式验证、可访问性属性验证和提示信息验证。

src/packages/sidebar/_test_/sidebar.spec.tsx Show resolved Hide resolved
src/packages/sidebar/_test_/sidebar.spec.tsx Show resolved Hide resolved
Copy link
Collaborator

@xiaoyatong xiaoyatong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

样式有些冗余~~ 简化下

src/packages/sidebar/sidebar.scss Outdated Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/styles/variables.scss (1)

2166-2192: 🛠️ Refactor suggestion

侧边栏宽度设置需要优化

当前宽度设置存在以下问题:

  1. 默认宽度(104px)和最大宽度(128px)差值较小,可能导致长文本展示不佳
  2. 缺少响应式断点支持

建议:

  1. 调整宽度变量:
-$sidebar-width: var(--nutui-sidebar-width, 104px) !default;
-$sidebar-max-width: var(--nutui-sidebar-max-width, 128px) !default;
+$sidebar-width: var(--nutui-sidebar-width, 120px) !default;
+$sidebar-max-width: var(--nutui-sidebar-max-width, 160px) !default;
  1. 考虑添加响应式相关变量:
$sidebar-width-sm: var(--nutui-sidebar-width-sm, 100px) !default;
$sidebar-width-lg: var(--nutui-sidebar-width-lg, 180px) !default;
🧹 Nitpick comments (2)
migrate-from-v2.md (1)

294-302: 建议完善 SideBar 组件文档

建议对新增的 SideBar 组件文档做如下补充:

  1. 添加基础用法示例代码
  2. 补充各属性的类型信息
  3. 说明 valuedefaultValue 的具体数据格式
src/config.json (1)

348-371: 命名规范需要注意一致性

组件配置基本合理,但建议注意以下几点:

  1. 当前存在 SideNavBar 和新增的 SideBar 两个类似组件
  2. 子组件命名方式不统一,有 SideNavBarItemSideBarItem

建议:

  • 统一命名规范,要么都使用 Nav 前缀,要么都不使用
  • 确保新旧组件的功能定位和使用场景有明确区分
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e30d95f and d1f0093.

📒 Files selected for processing (3)
  • migrate-from-v2.md (3 hunks)
  • src/config.json (1 hunks)
  • src/styles/variables.scss (1 hunks)

migrate-from-v2.md Outdated Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/styles/variables.scss (1)

2170-2196: 🛠️ Refactor suggestion

建议优化侧边栏宽度设置!

当前变量定义存在以下问题:

  • 默认宽度(104px)和最大宽度(128px)的差值较小,可能无法适应较长的文本内容
  • 缺少响应式断点相关的变量定义

建议进行如下调整:

-$sidebar-width: var(--nutui-sidebar-width, 104px) !default;
-$sidebar-max-width: var(--nutui-sidebar-max-width, 128px) !default;
+$sidebar-width: var(--nutui-sidebar-width, 120px) !default;
+$sidebar-max-width: var(--nutui-sidebar-max-width, 160px) !default;
+$sidebar-mobile-width: var(--nutui-sidebar-mobile-width, 90px) !default;

另外建议添加以下变量以支持响应式布局:

$sidebar-breakpoint-sm: var(--nutui-sidebar-breakpoint-sm, 768px) !default;
$sidebar-breakpoint-md: var(--nutui-sidebar-breakpoint-md, 992px) !default;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 846e4c7 and 1977729.

📒 Files selected for processing (2)
  • src/config.json (1 hunks)
  • src/styles/variables.scss (1 hunks)

src/config.json Show resolved Hide resolved
@xiaoyatong xiaoyatong merged commit 16bfab6 into jdf2e:feat_v3.x Dec 30, 2024
6 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants