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(v14): indicator adaptation #2746

Open
wants to merge 2 commits into
base: V3.0
Choose a base branch
from

Conversation

oasis-cloud
Copy link
Collaborator

@oasis-cloud oasis-cloud commented Nov 13, 2024

🤔 这个变动的性质是?

  • 新特性提交
  • 日常 bug 修复
  • 站点、文档改进
  • 演示代码改进
  • 组件样式/交互改进
  • TypeScript 定义更新
  • 包体积优化
  • 性能优化
  • 功能增强
  • 国际化改进
  • 重构
  • 代码风格优化
  • 测试用例
  • 分支合并
  • 其他改动(是关于什么的改动?)

🔗 相关 Issue

💡 需求背景和解决方案

☑️ 请求合并前的自查清单

⚠️ 请自检并全部勾选全部选项⚠️

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充
  • fork仓库代码是否为最新避免文件冲突
  • Files changed 没有 package.json lock 等无关文件

Summary by CodeRabbit

  • 新特性

    • 更新了多个组件,包括 IndicatorPaginationPriceProgressSwiperVideo,并统一版本为 3.0.0
    • 新增了 Demo5Demo6 演示组件,增强了示例功能。
    • 文档中新增了 colortype 属性,提供更多自定义选项。
  • 文档

    • 更新了 Indicator 组件的文档,新增了示例和属性说明,改善了可读性和使用指导。

Copy link

coderabbitai bot commented Nov 13, 2024

Walkthrough

此次更改主要集中在 src/config.json 文件的更新,涉及多个组件的版本管理和属性修改。新增了 Indicator 组件的 "v14": true 属性,并将 PaginationPriceProgressSwiperVideo 组件更新至版本 3.0.0。此外,多个组件的 exportEmptyshow 属性也进行了调整。文档和示例组件也进行了相应的更新,以增强本地化支持和示例功能。

Changes

文件路径 更改摘要
src/config.json 更新多个组件的版本和属性,新增 Indicator 组件的版本信息,调整 showexportEmpty 属性。
src/packages/indicator/demo.taro.tsx 增加 Demo5Demo6 组件,更新翻译对象以支持新演示的本地化。
src/packages/indicator/demo.tsx 同上,增加 Demo5Demo6 组件,更新翻译对象。
src/packages/indicator/demos/h5/demo1.tsx 调整 Indicator 组件的导入顺序,减少显示的 Indicator 实例。
src/packages/indicator/demos/h5/demo4.tsx 增加新的 Indicator 实例,设置特定的 colortype 属性。
src/packages/indicator/demos/h5/demo5.tsx 新增 Demo5 组件,包含配置好的 Indicator
src/packages/indicator/demos/h5/demo6.tsx 新增 Demo6 组件,包含配置好的 Indicator
src/packages/indicator/demos/taro/demo1.tsx 调整 Indicator 组件的导入顺序,减少显示的 Indicator 实例。
src/packages/indicator/demos/taro/demo4.tsx 增加新的 Indicator 实例,设置特定的 colortype 属性。
src/packages/indicator/demos/taro/demo5.tsx 新增 Demo5 组件,包含配置好的 Indicator
src/packages/indicator/demos/taro/demo6.tsx 新增 Demo6 组件,包含配置好的 Indicator
src/packages/indicator/doc.en-US.md 更新文档,新增演示部分和属性说明,修改 CSS 变量的默认值。
src/packages/indicator/doc.md 更新文档,新增演示部分和属性说明,修改 CSS 变量的默认值。
src/packages/indicator/doc.taro.md 更新文档,新增演示部分和属性说明,修改 CSS 变量的默认值。
src/packages/indicator/doc.zh-TW.md 更新文档,新增演示部分和属性说明,修改 CSS 变量的默认值。
src/packages/indicator/indicator.scss 修改 .nut-indicator 组件的样式,新增类并重构现有样式。
src/packages/indicator/indicator.taro.tsx 更新 Indicator 组件的类型和属性,重构渲染逻辑以支持不同的 colortype
src/packages/indicator/indicator.tsx 同上,更新 Indicator 组件的类型和属性,重构渲染逻辑。
src/styles/variables.scss 更新 CSS 变量的定义,调整样式以实现更紧凑的设计。

Possibly related PRs

Suggested labels

size/L, 3.x

Suggested reviewers

  • irisSong

兔子欢快地跳跃,
新组件如花绽放,
版本更新齐欢呼,
演示丰富更生动!
代码整齐如兔窝,
开发者乐无穷! 🐇✨


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 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 Nov 13, 2024
Copy link

codecov bot commented Nov 13, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 83.99%. Comparing base (304fd2f) to head (68fad76).

Additional details and impacted files
@@           Coverage Diff           @@
##             V3.0    #2746   +/-   ##
=======================================
  Coverage   83.99%   83.99%           
=======================================
  Files         221      221           
  Lines       17878    17878           
  Branches     2676     2676           
=======================================
  Hits        15016    15016           
  Misses       2857     2857           
  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: 2

🧹 Outside diff range and nitpick comments (22)
src/packages/indicator/demos/h5/demo1.tsx (1)

Line range hint 4-13: 建议扩展示例以展示更多功能

当前示例过于简单,建议:

  1. 展示新增的 color 和 type 属性的使用
  2. 添加常见的使用场景示例
  3. 展示不同状态的切换效果

建议按如下方式扩展示例:

 const Demo1 = () => {
   return (
     <>
       <Cell>
         <Indicator total={3} current={0} />
       </Cell>
+      <Cell>
+        <Indicator total={3} current={1} color="#f30" />
+      </Cell>
+      <Cell>
+        <Indicator total={5} current={2} type="dot" />
+      </Cell>
     </>
   )
 }
src/packages/indicator/demos/taro/demo1.tsx (1)

6-10: 建议增加更多示例以展示新特性

当前示例过于简单,建议添加以下内容:

  • 展示新增的 color 属性(primary/white)的使用
  • 展示新增的 type 属性(anchor/slide)的使用
  • 添加不同 current 值的示例以展示指示器的状态变化

建议参考以下代码改进示例:

 const Demo1 = () => {
   return (
     <>
       <Cell>
-        <Indicator total={3} current={0} />
+        <Indicator total={3} current={0} type="anchor" color="primary" />
+      </Cell>
+      <Cell>
+        <Indicator total={3} current={1} type="slide" color="white" />
+      </Cell>
+      <Cell>
+        <Indicator total={3} current={2} type="anchor" color="primary" />
       </Cell>
     </>
   )
 }
src/packages/indicator/demo.tsx (2)

44-49: 建议优化示例代码的展示顺序

新增的白色主题和类型示例被插入在基础用法之后,建议考虑将相关的示例代码放在一起,以提供更连贯的文档体验。例如:

  1. 基础用法
  2. 类型示例
  3. 主题相关(白色主题)
  4. 自定义相关
  5. 布局相关(竖向展示)

需要补充测试用例以确保组件质量

Demo5 和 Demo6 的实现已经完成并且在文档中有相应说明,但缺少测试用例覆盖。建议:

  • 需要为 Demo5(白色指示器)添加测试用例,验证 color="white" 属性的正确性
  • 需要为 Demo6(滑动类型)添加测试用例,验证 type="slide" 属性的正确性
  • 建议参考其他组件的测试方案,在 src/packages/indicator/__tests__ 目录下添加相应的测试文件
🔗 Analysis chain

Line range hint 1-61: 验证新增示例的完整性

需要确认 Demo5 和 Demo6 的实现是否包含了必要的测试用例和文档说明。


Let me verify if there are any existing test files for the Indicator component to understand the testing approach.


Let me check the content of the documentation to see if it covers the new demos.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 检查新增示例组件的实现和文档
for demo in demo5 demo6; do
  echo "Checking implementation of $demo:"
  cat "src/packages/indicator/demos/h5/${demo}.tsx" 2>/dev/null || echo "Missing implementation file"
  
  echo "Checking test coverage:"
  find "src/packages/indicator/__tests__" -type f -name "${demo}.spec.*" 2>/dev/null || echo "Missing test file"
done

Length of output: 1122


Script:

#!/bin/bash
# Check existing test files for Indicator component
echo "Checking existing test files:"
find src/packages/indicator/__tests__ -type f -name "*.spec.*" 2>/dev/null || echo "No test files found"

# Check if there's documentation for the component
echo -e "\nChecking documentation:"
find src/packages/indicator -type f -name "*.md" 2>/dev/null || echo "No documentation found"

Length of output: 433


Script:

#!/bin/bash
# Check documentation content
echo "Checking Chinese documentation content:"
cat src/packages/indicator/doc.md

echo -e "\nChecking if demos are referenced in documentation:"
grep -A 5 "demo5\|demo6" src/packages/indicator/doc.md || echo "New demos not found in documentation"

Length of output: 1771

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

21-36: 新增的示例部分需要补充说明文字

新增的"白色"和"类型"示例部分缺少对功能和使用场景的具体说明,建议为每个示例添加简要描述,帮助用户理解这些新特性的应用场景。

建议在示例代码前添加说明文字,例如:

### 白色
+ 在深色背景下,可以使用白色主题的指示器来获得更好的视觉效果。

:::demo
...

### 类型
+ 指示器支持两种交互类型:锚点(anchor)和滑动(slide),可根据具体场景选择合适的交互方式。

:::demo

67-71: 属性表格的描述需要更详细

Props 表格中的新属性 colortype 的说明过于简单,建议补充更多使用细节和注意事项。

建议修改为:

| 属性 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| current | 当前页,从0开始计数 | `number` | `0` |
| total | 总页数,至少为2 | `number` | `2` |
| direction | 方向,默认为水平方向,可选垂直方向 | `horizontal` \| `vertical` | `horizontal` |
-| color | 颜色 | `primary` \| `white` | `primary` |
+| color | 指示器主题颜色,primary 用于浅色背景,white 用于深色背景 | `primary` \| `white` | `primary` |
-| type | 交互类型 | `anchor` \| `slide` | `anchor` |
+| type | 交互类型,anchor 为点击切换,slide 为滑动切换 | `anchor` \| `slide` | `anchor` |
src/packages/indicator/doc.zh-TW.md (2)

21-36: 保持文档语言一致性

文档是繁体中文(zh-TW)版本,但新增的标题"白色"和"类型"使用了简体中文。建议修改为繁体中文:

  • "白色" -> "白色"(已是繁体)
  • "类型" -> "類型"

83-86: 建议补充设计变量说明

CSS 变量使用了设计系统的标准变量(如 $radius-xxs$spacing-xxxs),建议添加这些设计变量的具体数值说明,以便开发者更好地理解实际效果。

-| \--nutui-indicator-border-radius | 指示器焦點時的border值 | `$radius-xxs` |
+| \--nutui-indicator-border-radius | 指示器焦點時的border值 | `$radius-xxs` (2px) |
-| \--nutui-indicator-dot-margin | 指示器橫向時的margin值 | `$spacing-xxxs` |
+| \--nutui-indicator-dot-margin | 指示器橫向時的margin值 | `$spacing-xxxs` (2px) |
src/packages/indicator/doc.taro.md (2)

21-36: 建议为新增的章节添加说明文字

新增的"白色"和"类型"章节缺少对功能的具体描述,建议添加说明文字以帮助用户理解这些特性的使用场景和目的。

建议在示例代码之前添加说明文字,例如:

### 白色
+ 在深色背景下,可以使用白色变体来提高可见度。

:::demo
...

### 类型
+ 支持锚点(anchor)和滑动(slide)两种交互方式,以适应不同的使用场景。

:::demo
...

67-71: 建议完善 type 属性的说明

属性表格的更新整体清晰,但 type 属性的说明过于简单,建议补充各个选项的具体用途说明。

建议修改如下:

-| type | 交互类型 | `anchor` \| `slide` | `anchor` |
+| type | 交互类型,anchor 为锚点式,slide 为滑动式 | `anchor` \| `slide` | `anchor` |
src/packages/indicator/demo.taro.tsx (1)

48-53: 建议优化示例代码的组织结构

虽然新增的示例代码结构清晰,但建议考虑以下优化建议:

  1. 考虑将相关的示例(如 white 和 type)放在更合适的位置,可能的话将类似的功能组合在一起
  2. 为新增的示例添加适当的说明注释,帮助其他开发者更好地理解用例

建议调整示例顺序如下:

  <View className="h2">{translated.basic}</View>
  <Demo1 />

+ {/* 类型相关示例 */}
+ <View className="h2">{translated.type}</View>
+ <Demo6 />
+
+ {/* 样式相关示例 */}
+ <View className="h2">{translated.white}</View>
+ <Demo5 />

- <View className="h2">{translated.white}</View>
- <Demo5 />
-
- <View className="h2">{translated.type}</View>
- <Demo6 />
src/packages/indicator/doc.en-US.md (2)

21-36: 建议为新增的演示部分添加说明文本

"White" 和 "Type" 这两个新增的演示部分缺少对功能的具体描述说明。建议添加简要说明文本,帮助用户更好地理解这些新特性的用途。

### White
+ 白色主题样式,适用于深色背景。

:::demo
<CodeBlock src='h5/demo5.tsx'></CodeBlock>
:::

### Type
+ 支持锚点(anchor)和滑动(slide)两种交互方式。

:::demo
<CodeBlock src='h5/demo6.tsx'></CodeBlock>
:::

70-71: 建议完善属性说明

color 和 type 属性的说明过于简单,建议补充更详细的使用场景和示例。

-| color | color | `primary` \| `white` | `primary` |
-| type | interactivity Type | `anchor` \| `slide` | `anchor` |
+| color | 指示器颜色主题,primary 用于浅色背景,white 用于深色背景 | `primary` \| `white` | `primary` |
+| type | 交互类型,anchor 为锚点式,slide 为滑动式 | `anchor` \| `slide` | `anchor` |
src/packages/indicator/demos/taro/demo4.tsx (1)

63-82: 建议统一样式单位使用

为了保持代码一致性,建议统一使用相同的 margin 单位。目前代码中混合使用了数字 50 和字符串 '50px'。

建议修改如下:

      <Indicator
        total={6}
        current={2}
        direction="vertical"
        color="white"
        style={{
-         marginLeft: '50px',
+         marginLeft: 50,
        }}
      />

      <Indicator
        total={6}
        current={2}
        direction="vertical"
        color="white"
        type="slide"
        style={{
-         marginLeft: '50px',
+         marginLeft: 50,
        }}
      />
src/packages/indicator/indicator.scss (5)

Line range hint 9-33: 优化选择器结构和样式复用

通过合并 .nut-indicator-dot.nut-indicator-line 的共同样式提高了代码复用性,这是个很好的改进。不过建议考虑以下优化:

  1. 使用 CSS 自定义属性(CSS Variables)来管理不同状态下的样式值
  2. 考虑将重复的边距逻辑抽取为 mixin
 &-dot,
 &-line {
+  --indicator-opacity: 0.4;
+  --indicator-bg: #{$color-border-disabled};
   display: inline-block;
   vertical-align: middle;
   width: $indicator-dot-size;
   height: $indicator-dot-size;
   border-radius: 50%;
-  background-color: $color-border-disabled;
+  background-color: var(--indicator-bg);
   margin: 0 $indicator-dot-margin;
-  opacity: 0.4;
+  opacity: var(--indicator-opacity);

36-47: 建议增加过渡动画的配置选项

新增的线性指示器过渡动画是个很好的改进。建议考虑:

  1. 将过渡时间抽取为变量,方便统一配置
  2. 考虑添加 will-change 属性优化性能
 &-line {
   &-active {
-    transition: transform 0.3s ease-in-out;
+    will-change: transform;
+    transition: transform var(--nut-indicator-transition-duration, 0.3s) ease-in-out;
     background: $indicator-color;
   }
 }

50-64: 优化轨道组件的实现

轨道组件的实现使用伪元素是个不错的选择,但建议考虑以下几点:

  1. 使用 CSS 自定义属性管理背景色和透明度
  2. 考虑添加 pointer-events: none 避免干扰交互
 .nut-indicator-track {
   &:after {
+    pointer-events: none;
     display: block;
     content: ' ';
     position: absolute;
     width: 100%;
     height: 100%;
     box-sizing: border-box;
     border-radius: $indicator-border-radius;
-    background-color: $color-border-disabled;
-    opacity: 0.4;
+    background-color: var(--nut-indicator-track-bg, $color-border-disabled);
+    opacity: var(--nut-indicator-track-opacity, 0.4);
   }
 }

66-92: 建议优化白色主题的样式结构

白色主题的实现逻辑清晰,但可以考虑以下优化:

  1. 使用 CSS 自定义属性统一管理颜色和透明度
  2. 考虑使用 mixin 减少样式重复
 .nut-indicator-white {
+  --indicator-white-bg: rgba(255, 255, 255, 0.4);
+  --indicator-white-border: rgba(0, 0, 0, 0.06);
   .nut-indicator {
     &-dot,
     &-line {
       position: relative;
       box-sizing: content-box;
-      background: rgba(255, 255, 255, 0.4);
-      border: 1px solid rgba(0, 0, 0, 0.06);
+      background: var(--indicator-white-bg);
+      border: 1px solid var(--indicator-white-border);
       opacity: 1;
     }
   }
 }

Line range hint 94-126: 建议完善垂直布局的响应式支持

垂直布局的实现基本合理,但建议考虑以下改进:

  1. 考虑添加响应式断点支持
  2. 使用 CSS Grid 提供更灵活的布局选项

建议考虑使用 CSS Grid 实现更灵活的布局:

.nut-indicator-vertical {
  display: grid;
  grid-auto-flow: row;
  gap: $indicator-dot-margin;
  justify-items: center;
  
  @media (max-width: $nut-breakpoint-sm) {
    // 移动端适配
  }
}
src/packages/indicator/indicator.taro.tsx (3)

44-45: 优化:类名命名更具语义化

建议将类名修改为更加语义化的形式,例如使用 ${classPrefix}--color-${color}${classPrefix}--type-${type},以提高代码的可读性和可维护性。


75-76: 提醒:current 值的有效性检查

在计算 transform 时,使用了 current * 100%。为了防止超出有效范围,建议对 current 进行校验,确保其值在 0total - 1 之间。


30-38: 优化:解构赋值的属性顺序

为提高代码的可读性,建议按照一定的规则排列解构赋值的属性,例如先必需属性后可选属性,或按字母顺序排列。

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 304fd2f and 68fad76.

📒 Files selected for processing (19)
  • src/config.json (1 hunks)
  • src/packages/indicator/demo.taro.tsx (2 hunks)
  • src/packages/indicator/demo.tsx (2 hunks)
  • src/packages/indicator/demos/h5/demo1.tsx (1 hunks)
  • src/packages/indicator/demos/h5/demo4.tsx (2 hunks)
  • src/packages/indicator/demos/h5/demo5.tsx (1 hunks)
  • src/packages/indicator/demos/h5/demo6.tsx (1 hunks)
  • src/packages/indicator/demos/taro/demo1.tsx (1 hunks)
  • src/packages/indicator/demos/taro/demo4.tsx (1 hunks)
  • src/packages/indicator/demos/taro/demo5.tsx (1 hunks)
  • src/packages/indicator/demos/taro/demo6.tsx (1 hunks)
  • src/packages/indicator/doc.en-US.md (3 hunks)
  • src/packages/indicator/doc.md (3 hunks)
  • src/packages/indicator/doc.taro.md (3 hunks)
  • src/packages/indicator/doc.zh-TW.md (3 hunks)
  • src/packages/indicator/indicator.scss (3 hunks)
  • src/packages/indicator/indicator.taro.tsx (1 hunks)
  • src/packages/indicator/indicator.tsx (1 hunks)
  • src/styles/variables.scss (1 hunks)
✅ Files skipped from review due to trivial changes (4)
  • src/packages/indicator/demos/h5/demo5.tsx
  • src/packages/indicator/demos/h5/demo6.tsx
  • src/packages/indicator/demos/taro/demo5.tsx
  • src/packages/indicator/demos/taro/demo6.tsx
🔇 Additional comments (24)
src/packages/indicator/demos/h5/demo1.tsx (1)

1-2: 导入语句排序合理!

按字母顺序排列组件导入,提高了代码的可读性。

src/packages/indicator/demos/taro/demo1.tsx (2)

2-2: 导入语句的顺序调整符合规范

导入语句按字母顺序排列,这样的改动提高了代码的可读性。


Line range hint 1-13: 验证组件是否符合 v14 适配要求

需要确认当前的实现是否完全符合 v14 版本的适配要求。

✅ Verification successful

Let me gather more information about the Indicator component implementation and its version compatibility.


Indicator 组件实现符合当前版本要求

基于以下分析:

  1. 组件实现完整,包含了所有必要的属性(total、current、direction、color、type)
  2. 组件使用了最新的函数式组件写法,采用 TypeScript 类型定义
  3. 组件样式文件正确配置
  4. 示例代码中的用法与当前实现保持一致
  5. 迁移工具(nutui-codemod)中没有针对 Indicator 组件的特殊迁移规则,说明该组件没有破坏性更新

当前的实现和使用方式完全符合最新版本的要求,无需额外适配。

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 检查配置文件中的版本信息
rg -l "Indicator.*v14" src/config.json

# 检查相关的类型定义
rg -A 5 "interface IndicatorProps" src/packages/indicator/

Length of output: 846


Script:

#!/bin/bash
# 检查 Indicator 组件的实现细节
ast-grep --pattern 'const Indicator = ($$$) => {
  $$$
}'

# 检查 package.json 中的版本信息
rg -l "version.*14" package.json

# 检查是否有版本相关的更新文档
fd CHANGELOG.md

Length of output: 125


Script:

#!/bin/bash
# 检查 CHANGELOG.md 中关于 Indicator 组件的更新记录
rg -A 5 "Indicator" CHANGELOG.md

# 检查 Indicator 组件的具体实现
cat src/packages/indicator/indicator.taro.tsx

# 检查是否存在迁移指南或版本升级文档
fd -t f -e md . | xargs rg -l "迁移|升级|v14"

Length of output: 2579


Script:

#!/bin/bash
# 检查迁移指南中关于 Indicator 组件的说明
cat packages/nutui-codemod/README.md

# 检查组件的测试用例
rg -A 5 "describe.*Indicator" src/packages/indicator/

# 检查组件的样式文件
fd -t f -e scss -e less -e css . | xargs rg -l "indicator"

Length of output: 3143

src/packages/indicator/demo.tsx (2)

7-8: 导入语句结构合理

新增的 Demo5 和 Demo6 组件导入遵循了项目现有的导入规范。


14-15: 翻译键值完整且统一

新增的 'white' 和 'type' 翻译项在所有支持的语言(zh-CN、zh-TW、en-US)中都已正确添加。

Also applies to: 22-23, 30-31

src/packages/indicator/demos/h5/demo4.tsx (1)

35-54: 新增的 Indicator 组件实现正确,建议验证文档完整性

新增的两个 Indicator 组件展示了 colortype 属性的用法,实现合理。为确保开发体验,建议验证以下内容:

  1. 新增的 colortype 属性是否已在组件文档中详细说明
  2. 是否提供了这些新属性的使用示例和最佳实践
✅ Verification successful

新增的 Indicator 属性已有完整文档支持,实现规范

经验证,colortype 属性已在文档中有详细说明:

  • color 属性支持 primarywhite 两种值,默认为 primary
  • type 属性支持 anchorslide 两种交互方式,默认为 anchor

新增的示例代码实现规范,与文档描述一致。

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 检查文档中是否包含新属性的说明
rg -A 5 "color.*type" "src/packages/indicator/doc*.md"

Length of output: 127


Script:

#!/bin/bash
# 查找所有可能的文档文件
fd "doc.*\.md" src/packages/indicator/

# 查找所有包含 color 或 type 的文档内容
rg -i "color|type" src/packages/indicator/

Length of output: 7791

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

83-86: CSS 变量的单位使用需要统一

CSS 变量的默认值中,尺寸单位使用了 px,建议与项目的其他组件保持一致的单位使用规范。

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

67-71: 属性表更新完善

属性表的更新准确反映了组件的新特性,描述清晰,默认值正确。新增的 colortype 属性丰富了组件的功能性。

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

83-86: CSS 变量更新合理

CSS 变量的默认值更新采用了设计系统的标准化变量(如 $radius-xxs$spacing-xxxs),这种改进有助于保持组件样式的一致性和可维护性。

src/packages/indicator/demo.taro.tsx (2)

10-11: 导入语句结构清晰且符合规范!

新增的 Demo5 和 Demo6 组件导入与现有代码保持一致的结构和风格。


17-18: 翻译内容完整且多语言支持完善!

新增的 'white' 和 'type' 翻译键已在所有支持的语言(中文简体、中文繁体和英文)中正确配置。

Also applies to: 25-26, 33-34

src/packages/indicator/doc.en-US.md (1)

83-86: CSS 变量更新合理

默认值的调整符合设计规范,使用了系统预设的变量(如 $radius-xxs、$spacing-xxxs),有助于保持视觉一致性。

src/packages/indicator/demos/taro/demo4.tsx (1)

63-82: 新增的 Indicator 属性展示完善

很好地展示了 v14 版本中 Indicator 组件的新特性(color 和 type 属性)。示例代码清晰地演示了不同配置的使用方法。

src/packages/indicator/indicator.scss (1)

4-4: 建议验证布局方向的兼容性

固定使用 row 作为默认方向可能会影响现有的使用场景。建议确认这个改动是否会影响到依赖垂直布局的现有实现。

✅ Verification successful

布局方向修改是安全的

经过验证,组件已经完整支持垂直布局:

  • 通过 direction 属性控制布局方向
  • CSS 中包含 .nut-indicator-vertical 相关样式
  • 组件内部的变换逻辑也考虑了垂直方向的情况

设置 flex-direction: row 作为默认方向是合理的,不会影响现有的垂直布局实现。

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 搜索可能受影响的组件使用示例
rg -l "nut-indicator" "src/sites" "src/packages"

Length of output: 366


Script:

#!/bin/bash
# 检查 indicator 组件的使用方式和布局相关代码
rg -A 5 "nut-indicator" src/packages/swiper/swiper.harmony.css src/packages/indicator/indicator.tsx src/packages/indicator/__test__/indicator.spec.tsx

# 检查 indicator 组件的垂直布局相关代码
rg "vertical" src/packages/indicator/indicator.tsx src/packages/indicator/indicator.scss

Length of output: 5855

src/config.json (1)

1023-1023: 确认 Indicator 组件的 v14 适配标记

添加 "v14": true 标记表明 Indicator 组件已适配 v14 版本,这与 PR 的目标相符。

运行以下脚本以验证其他组件的 v14 适配情况:

✅ Verification successful

Indicator 组件的 v14 适配标记验证完成

根据验证结果:

  • 在总计 102 个组件中,目前仅 Indicator 组件标记了 v14 适配
  • 组件配置完整且合理,包含了必要的版本信息和功能描述
  • 这是首个进行 v14 适配的组件,符合渐进式升级的策略
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 描述:检查其他组件的 v14 标记情况

# 搜索所有带有 v14 标记的组件配置
jq -r '.nav[].packages[] | select(."v14" == true) | .name' src/config.json

Length of output: 86


Script:

#!/bin/bash
# 检查所有组件的总数,以了解 v14 适配的进度
jq -r '.nav[].packages[] | .name' src/config.json | wc -l

# 检查是否有其他版本标记(如 v13)的组件
jq -r '.nav[].packages[] | select(has("v13")) | .name' src/config.json

# 检查 Indicator 组件的完整配置,以确保 v14 标记的上下文
jq -r '.nav[].packages[] | select(.name == "Indicator")' src/config.json

Length of output: 418

src/styles/variables.scss (2)

1802-1806: 指示器圆点尺寸调整更加精致

圆点尺寸的调整使指示器更加紧凑,常规状态从4px减小到3px,激活状态从8px减小到6px,这样的比例更加协调。


1807-1813: 新增边框圆角和间距变量,提升样式系统一致性

通过引入$indicator-border-radius$indicator-dot-margin变量,分别复用了设计系统中的$radius-xxs$spacing-xxxs令牌值,确保了指示器样式与整体设计系统的一致性。

src/packages/indicator/indicator.tsx (5)

4-5: 添加了新的类型定义,明确了 typecolor 属性的可选值


11-12: IndicatorProps 接口中新增了 colortype 属性


19-20: colortype 属性设置了默认值


28-37: 在组件中解构了新的属性 colortype


43-44: 根据 colortype 属性动态添加类名

src/packages/indicator/indicator.taro.tsx (2)

27-27: 建议:校验 ViewProps 与组件属性的兼容性

在组件类型定义中,使用了 Partial<IndicatorProps> & ViewProps。请确保 ViewProps 中的属性不会与您的组件属性产生冲突,以避免潜在的问题。


12-13: 确认:新增的 colortype 属性

新增的 colortype 属性已正确添加到 IndicatorProps 接口中,并在组件中得到正确使用。

Comment on lines +69 to +76
item === 0 ? (
children || (
<div
key={item}
style={{
transform: `${direction === 'vertical' ? 'translateY' : 'translateX'}(${current * 100}%)`,
}}
className={`${classPrefix}-line ${classPrefix}-line-active`}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

renderLineElement 函数中的条件判断可能存在问题

renderLineElement 中,条件判断为 item === 0,这意味着仅对第一个元素应用活动状态和样式。这与 renderDotElement 中根据 current 判断当前项的逻辑不一致。

建议将条件修改为 item === current,以确保活动状态应用于当前项。

请应用以下代码修正:

- item === 0 ? (
+ item === current ? (
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
item === 0 ? (
children || (
<div
key={item}
style={{
transform: `${direction === 'vertical' ? 'translateY' : 'translateX'}(${current * 100}%)`,
}}
className={`${classPrefix}-line ${classPrefix}-line-active`}
item === current ? (
children || (
<div
key={item}
style={{
transform: `${direction === 'vertical' ? 'translateY' : 'translateX'}(${current * 100}%)`,
}}
className={`${classPrefix}-line ${classPrefix}-line-active`}

Comment on lines +67 to +87
const childs: ReactNode[] = []
for (let item = 0; item < total; item++) {
childs.push(
item === 0 ? (
children || (
<View
key={item}
style={{
transform: `translateX(${current * 100}%)`,
}}
className={`${classPrefix}-line ${classPrefix}-line-active`}
/>
)
) : (
<View
key={item}
className={`${classPrefix}-dot ${classPrefixV}-dot`}
/>
<View key={item} className={`${classPrefix}-line`} />
)
)
}
return childs
}
const renderByType = (type: IndicatorType) => {
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

问题:renderLineElement 函数中的逻辑可能导致显示异常

renderLineElement 函数中,只有当 item === 0 时,才渲染带有活动状态的线条,并通过 transform 属性移动。这样可能会导致仅渲染一个活动的线条,无法正确反映当前的 current 状态。建议修改判断条件,确保活动线条的渲染与 current 对应。

应用以下修改以修正逻辑:

-        item === 0 ? (
+        item === current ? (
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const childs: ReactNode[] = []
for (let item = 0; item < total; item++) {
childs.push(
item === 0 ? (
children || (
<View
key={item}
style={{
transform: `translateX(${current * 100}%)`,
}}
className={`${classPrefix}-line ${classPrefix}-line-active`}
/>
)
) : (
<View
key={item}
className={`${classPrefix}-dot ${classPrefixV}-dot`}
/>
<View key={item} className={`${classPrefix}-line`} />
)
)
}
return childs
}
const renderByType = (type: IndicatorType) => {
const childs: ReactNode[] = []
for (let item = 0; item < total; item++) {
childs.push(
item === current ? (
children || (
<View
key={item}
style={{
transform: `translateX(${current * 100}%)`,
}}
className={`${classPrefix}-line ${classPrefix}-line-active`}
/>
)
) : (
<View key={item} className={`${classPrefix}-line`} />
)
)
}
return childs
}
const renderByType = (type: IndicatorType) => {

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.

1 participant