Skip to content

Conversation

@xingyu4j
Copy link
Contributor

@xingyu4j xingyu4j commented Nov 17, 2025

Description

升级 node 版本要求 >=20.12.0(tailwindcss4 要求大于20.12.0)
升级 eslint 及各版本依赖到最新,并进行 lint 修复

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update
  • Please, don't make changes to pnpm-lock.yaml unless you introduce a new test example.

Checklist

ℹ️ Check all checkboxes - this will indicate that you have done everything in accordance with the rules in CONTRIBUTING.

  • If you introduce new functionality, document it. You can run documentation with pnpm run docs:dev command.
  • Run the tests with pnpm test.
  • Changes in changelog are generated from PR name. Please, make sure that it explains your changes in an understandable manner. Please, prefix changeset messages with feat:, fix:, perf:, docs:, or chore:.
  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

Summary by CodeRabbit

  • Bug Fixes

    • Charts and file listings now use non‑mutating sorting to avoid accidental data changes.
  • Refactor

    • Standardized UI class ordering across components for more consistent styling and rendering.
    • Reorganized imports and bootstrap ordering to streamline app initialization.
  • Documentation

    • Clarified an error message in demos for clearer guidance.
  • Chores

    • Raised minimum Node and package manager requirements.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot
Copy link

changeset-bot bot commented Nov 17, 2025

⚠️ No Changeset found

Latest commit: 8b0f138

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 17, 2025

Walkthrough

Replaces many in-place array mutations (e.g., sort()/reverse()) with non-mutating alternatives (toSorted(), toReversed()), adjusts small lint/TS config and package engine/dependency entries, removes several ts-expect-error suppressions, and reorders or tweaks Tailwind class tokens across many components.

Changes

Cohort / File(s) Summary
Sort → toSorted / toReversed
apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue, apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue, apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue, apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue, docs/.vitepress/config/plugins/demo-preview.ts, packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue
Replace mutating array operations with non-mutating alternatives: Array.prototype.sort()toSorted() and Array.prototype.reverse()toReversed(); comparator/order preserved.
Package & engines updates
package.json, apps/web-tdesign/package.json, internal/tailwind-config/package.json
Bump Node/pnpm engine ranges and packageManager, map some deps/devDeps to catalog:, and add jiti to dependencies/overrides.
Lint / TypeScript config edits
internal/lint-configs/* (various), internal/lint-configs/eslint-config/tsconfig.json, internal/lint-configs/commitlint-config/index.mjs
Remove several // @ts-expect-error`` suppressions, set moduleResolution: "bundler", raise ESLint node version requirement, and change a `replace()` call to `replaceAll()` (careful with RegExp flags).
Wide Tailwind class reorderings
packages/@core/ui-kit/**, apps/**, docs/**, many src/*/*.vue
Reorder, consolidate, and occasionally add small Tailwind tokens (e.g., border, bg-background) across numerous components; largely presentational changes with minimal logic edits.
Popup / Alert adjustments
packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts, packages/@core/ui-kit/popup-ui/src/alert/alert.vue, packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue, packages/@core/ui-kit/popup-ui/src/modal/modal.vue
Inline-initialize arrays, include model binding (onUpdate:modelPropName) in consolidated props, and reorder border/state-related classes in templates.
Core package minor edits
packages/@core/base/design/src/index.ts, packages/@core/base/design/src/design-tokens/index.ts, packages/@core/preferences/src/preferences.ts
Remove empty export {} declarations and simplify DOM class toggling via classList.toggle(..., boolean).
App import/style rearrange
apps/web-tdesign/src/app.vue, apps/web-tdesign/src/bootstrap.ts
Reorder ConfigProvider import and relocate global TDesign stylesheet import.
Docs & misc
docs/.vitepress/components/*, docs/src/demos/*, cspell.json
Clarify demo error text, tweak container classes, and add "tdesign" to cspell words.

Sequence Diagram(s)

sequenceDiagram
  participant Component as Vue Component
  participant Source as Original Array
  participant Op as toSorted()/toReversed()
  participant Consumer as Consumer (chart/tree)

  Component->>Source: prepare data slice/reference
  Component->>Op: call toSorted(comparator) / toReversed()
  Op-->>Component: returns new array (non-mutating)
  Component->>Consumer: pass new array (no mutation of Source)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~30 minutes

Areas to inspect:

  • Files where sort()toSorted() and .reverse()toReversed() were applied — ensure no callers rely on in-place mutation.
  • internal/lint-configs/commitlint-config/index.mjs change to replaceAll() with a RegExp (verify runtime/Node support and correct flags).
  • Removed // @ts-expect-error`` suppressions — check for surfaced TypeScript errors in lint/config modules.
  • Popup/dialog/context-menu/dropdown/select/input components where Tailwind class reordering may affect CSS specificity/state precedence.

Possibly related PRs

Suggested labels

chore, dependencies, javascript

Suggested reviewers

  • anncwb
  • vince292007
  • mynetfan

Poem

🐰
I hop through classes, tidy arrays,
Non‑muting sorts brighten my days.
Imports nudged and linters cheer,
A carrot-coded change is near.
Happy hops for a cleaner tree!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the primary change: updating Node.js to >=20.12.0, which is the main objective stated in the PR description.
Description check ✅ Passed The description includes context about the Node upgrade and dependency updates, but the checklist items remain unchecked and lack detail on verification of tests, documentation, and lint fixes.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9a4f0f6 and 8b0f138.

📒 Files selected for processing (1)
  • packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2024-12-09T04:41:58.914Z
Learnt from: mynetfan
Repo: vbenjs/vue-vben-admin PR: 5075
File: packages/effects/common-ui/src/components/api-select/api-select.vue:61-62
Timestamp: 2024-12-09T04:41:58.914Z
Learning: 在文件 `packages/effects/common-ui/src/components/api-select/api-select.vue` 的组件 `ApiSelect` 中,`childrenField` 的默认值设置为空字符串是有意的,因为并非所有组件都使用树形数据。

Applied to files:

  • packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: Test (windows-latest)
  • GitHub Check: Check (ubuntu-latest)
  • GitHub Check: Lint (windows-latest)
  • GitHub Check: Lint (ubuntu-latest)
  • GitHub Check: Check (windows-latest)
  • GitHub Check: post-update (windows-latest)
  • GitHub Check: post-update (ubuntu-latest)
🔇 Additional comments (1)
packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue (1)

223-223: ****

The .toReversed() method is safe for this project's browser targets. Since July 2023, this feature works across the latest devices and browser versions. Chrome has these methods available since version 110, and the project's .browserslistrc configuration targets "last 2 versions" of modern browsers (excluding IE 11), which includes all major browsers that support ES2023 features.

The functional change from .reverse() to .toReversed() is correct and requires no further verification—both produce equivalent results since .filter() already creates a new array.

Likely an incorrect or invalid review comment.

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@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 (5)
packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue (1)

128-137: LGTM: Coordinated class reordering for style consistency.

The Tailwind utility class reorderings across the active and hover states maintain equivalent styling while normalizing class order.

Optional cleanup: Line 128 applies text-primary to the active item container, but all text content resides in child elements (.name and .icon at line 132) that override this with text-primary-foreground. The parent's text color utility is effectively unused and could be removed for clarity:

-      @apply bg-primary text-primary dark:bg-accent;
+      @apply bg-primary dark:bg-accent;

Note: This redundancy existed before this PR and can be deferred.

packages/@core/preferences/src/preferences.ts (1)

224-225: LGTM - Cleaner approach using classList.toggle() with boolean.

The refactored code using classList.toggle(className, boolean) is more concise and idiomatic than the previous conditional add/remove pattern while maintaining identical behavior.

internal/vite-config/src/config/application.ts (1)

103-122: Clarify intent of commented-out api: 'modern' in Sass options

You’ve effectively reverted to the default Sass API by commenting out api: 'modern'. If this is a permanent change for compatibility with newer Sass/Node, consider either:

  • Removing the commented line, or
  • Adding a short comment explaining why the explicit api option is disabled, so future readers don’t re-enable it blindly.

Also worth confirming in your environment that NodePackageImporter still behaves as expected with the default API.

internal/lint-configs/commitlint-config/index.mjs (1)

24-26: replaceAll change is correct; consider simplifying pattern

Switching to replaceAll with a global regexp preserves the original behavior of replacing all / characters in the git path-derived string and is compatible with the updated Node ≥20.12.0 requirement.

If you want to simplify and avoid regexp overhead/confusion here, you could optionally use a plain string pattern:

-  ?.replaceAll(/(\/)/g, '%%')
+  ?.replaceAll('/', '%%')

Semantics are the same for this use case.

Please ensure that the Node version used by your commit hooks/CI for commitlint matches the updated engines.node (≥20.12.0), so String.prototype.replaceAll is always available.

packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue (1)

30-30: LGTM! Tailwind class reordering improves consistency.

The class reordering (layout utilities first, then color/animation) aligns with the PR's consistency improvements across dropdown components. Functionality is preserved.

Optional: Consider multi-line formatting for readability.

The 500+ character class string on a single line is difficult to scan and maintain. Breaking it into logical groups would improve readability:

       cn(
-        'z-50 min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
+        'z-50 min-w-32 overflow-hidden rounded-md',
+        'border border-border',
+        'bg-popover p-1 text-popover-foreground shadow-lg',
+        'data-[state=open]:animate-in data-[state=closed]:animate-out',
+        'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
+        'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',
+        'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',
+        'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
         props.class,
       )
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f09aace and bed5298.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (107)
  • apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue (1 hunks)
  • apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue (1 hunks)
  • apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue (1 hunks)
  • apps/web-tdesign/package.json (1 hunks)
  • apps/web-tdesign/src/app.vue (1 hunks)
  • apps/web-tdesign/src/bootstrap.ts (2 hunks)
  • apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue (1 hunks)
  • cspell.json (1 hunks)
  • docs/.vitepress/components/demo-preview.vue (1 hunks)
  • docs/.vitepress/components/preview-group.vue (4 hunks)
  • docs/.vitepress/config/plugins/demo-preview.ts (1 hunks)
  • docs/src/demos/vben-drawer/auto-height/drawer.vue (1 hunks)
  • docs/src/demos/vben-modal/auto-height/modal.vue (1 hunks)
  • internal/lint-configs/commitlint-config/index.mjs (1 hunks)
  • internal/lint-configs/eslint-config/src/configs/command.ts (0 hunks)
  • internal/lint-configs/eslint-config/src/configs/node.ts (1 hunks)
  • internal/lint-configs/eslint-config/src/configs/perfectionist.ts (0 hunks)
  • internal/lint-configs/eslint-config/src/configs/turbo.ts (0 hunks)
  • internal/lint-configs/eslint-config/src/configs/typescript.ts (1 hunks)
  • internal/lint-configs/eslint-config/src/configs/vue.ts (0 hunks)
  • internal/lint-configs/eslint-config/tsconfig.json (1 hunks)
  • internal/tailwind-config/package.json (1 hunks)
  • internal/vite-config/src/config/application.ts (1 hunks)
  • package.json (2 hunks)
  • packages/@core/base/design/src/design-tokens/index.ts (0 hunks)
  • packages/@core/base/design/src/index.ts (0 hunks)
  • packages/@core/preferences/src/preferences.ts (1 hunks)
  • packages/@core/ui-kit/form-ui/src/form-render/form-field.vue (2 hunks)
  • packages/@core/ui-kit/form-ui/src/form-render/form-label.vue (1 hunks)
  • packages/@core/ui-kit/layout-ui/src/components/layout-content.vue (1 hunks)
  • packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue (1 hunks)
  • packages/@core/ui-kit/layout-ui/src/components/layout-header.vue (1 hunks)
  • packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue (2 hunks)
  • packages/@core/ui-kit/layout-ui/src/components/layout-tabbar.vue (1 hunks)
  • packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue (1 hunks)
  • packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue (1 hunks)
  • packages/@core/ui-kit/layout-ui/src/vben-layout.vue (1 hunks)
  • packages/@core/ui-kit/menu-ui/src/components/menu-badge.vue (1 hunks)
  • packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue (1 hunks)
  • packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts (1 hunks)
  • packages/@core/ui-kit/popup-ui/src/alert/alert.vue (2 hunks)
  • packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue (2 hunks)
  • packages/@core/ui-kit/popup-ui/src/modal/modal.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/avatar/avatar.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue (3 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/input-password/input-password.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/input-password/password-strength.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/logo/logo.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/segmented/segmented.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/spinner/loading.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuCheckboxItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuLabel.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubTrigger.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectContent.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/separator/Separator.vue (2 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue (1 hunks)
⛔ Files not processed due to max files limit (34)
  • packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/switch/Switch.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/textarea/Textarea.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipContent.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue
  • packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue
  • packages/@core/ui-kit/tabs-ui/src/components/tabs/tabs.vue
  • packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-more.vue
  • packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-screen.vue
  • packages/@core/ui-kit/tabs-ui/src/tabs-view.vue
  • packages/effects/common-ui/src/components/json-viewer/index.vue
  • packages/effects/common-ui/src/components/resize/resize.vue
  • packages/effects/layouts/src/basic/header/header.vue
  • packages/effects/layouts/src/widgets/theme-toggle/theme-button.vue
  • packages/stores/shim-pinia.d.ts
  • packages/stores/src/modules/tabbar.ts
  • packages/utils/src/helpers/generate-menus.ts
  • playground/src/views/dashboard/analytics/analytics-visits-sales.vue
  • playground/src/views/demos/access/button-control.vue
  • playground/src/views/demos/access/index.vue
  • playground/src/views/demos/features/icons/index.vue
  • playground/src/views/demos/features/login-expired/index.vue
  • playground/src/views/demos/features/tabs/index.vue
  • playground/src/views/demos/features/watermark/index.vue
  • playground/src/views/examples/drawer/auto-height-demo.vue
  • playground/src/views/examples/layout/col-page.vue
  • playground/src/views/examples/loading/index.vue
  • playground/src/views/examples/modal/auto-height-demo.vue
  • playground/src/views/examples/tippy/index.vue
  • pnpm-workspace.yaml
💤 Files with no reviewable changes (6)
  • internal/lint-configs/eslint-config/src/configs/turbo.ts
  • internal/lint-configs/eslint-config/src/configs/vue.ts
  • internal/lint-configs/eslint-config/src/configs/command.ts
  • internal/lint-configs/eslint-config/src/configs/perfectionist.ts
  • packages/@core/base/design/src/index.ts
  • packages/@core/base/design/src/design-tokens/index.ts
🧰 Additional context used
🧠 Learnings (6)
📚 Learning: 2024-12-04T04:43:22.179Z
Learnt from: mynetfan
Repo: vbenjs/vue-vben-admin PR: 5013
File: docs/src/components/layout-ui/page.md:23-24
Timestamp: 2024-12-04T04:43:22.179Z
Learning: 在 `docs/src/components/layout-ui/page.md` 的 `Page` 组件中,`title` 和 `description` 属性有意使用 `string|slot` 类型表示法,表示它们可以接受字符串或插槽。

Applied to files:

  • packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue
📚 Learning: 2025-01-15T04:29:13.944Z
Learnt from: mynetfan
Repo: vbenjs/vue-vben-admin PR: 5397
File: playground/src/bootstrap.ts:23-30
Timestamp: 2025-01-15T04:29:13.944Z
Learning: In the Vue-Vben-Admin project, commented code in bootstrap.ts showing modal and drawer configuration examples should be preserved as reference documentation, even after moving to CSS variables for z-index management.

Applied to files:

  • internal/vite-config/src/config/application.ts
  • packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue
  • docs/src/demos/vben-drawer/auto-height/drawer.vue
  • apps/web-tdesign/src/bootstrap.ts
  • packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue
  • packages/@core/ui-kit/popup-ui/src/modal/modal.vue
  • docs/src/demos/vben-modal/auto-height/modal.vue
  • packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue
📚 Learning: 2025-07-17T16:38:41.911Z
Learnt from: Elm1992
Repo: vbenjs/vue-vben-admin PR: 6537
File: packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue:110-114
Timestamp: 2025-07-17T16:38:41.911Z
Learning: In the Vue-Vben-Admin DialogContent component, the animation system uses a layered approach: zoom animation classes (zoom-out-95, zoom-in-95) are applied unconditionally as the base effect for scale animation, while specific animation types like 'slide' add conditional classes on top of the base effect. This design allows scale animation to use the dialog's built-in zoom effect and enables future animation types to be added without affecting the scale behavior.

Applied to files:

  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue
  • packages/@core/ui-kit/popup-ui/src/modal/modal.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue
  • packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue
  • packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue
📚 Learning: 2024-12-04T04:41:30.161Z
Learnt from: mynetfan
Repo: vbenjs/vue-vben-admin PR: 5013
File: docs/src/components/layout-ui/page.md:31-31
Timestamp: 2024-12-04T04:41:30.161Z
Learning: 在 Vben Admin 项目的 `Page` 组件中,`extra` 内容仅通过 slots 提供,没有对应的 prop 属性。

Applied to files:

  • packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts
📚 Learning: 2024-12-09T04:41:58.914Z
Learnt from: mynetfan
Repo: vbenjs/vue-vben-admin PR: 5075
File: packages/effects/common-ui/src/components/api-select/api-select.vue:61-62
Timestamp: 2024-12-09T04:41:58.914Z
Learning: 在文件 `packages/effects/common-ui/src/components/api-select/api-select.vue` 的组件 `ApiSelect` 中,`childrenField` 的默认值设置为空字符串是有意的,因为并非所有组件都使用树形数据。

Applied to files:

  • packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue
📚 Learning: 2025-02-08T07:36:14.722Z
Learnt from: dingdayu
Repo: vbenjs/vue-vben-admin PR: 5500
File: packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue:51-51
Timestamp: 2025-02-08T07:36:14.722Z
Learning: The project uses changesets for version management and changelog generation. Breaking changes should be documented by creating a new changeset using `pnpm changeset` command, selecting affected packages, choosing "major" as the bump type, and providing a detailed description of the change and its impact.

Applied to files:

  • package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: Check (windows-latest)
  • GitHub Check: Check (ubuntu-latest)
  • GitHub Check: Lint (ubuntu-latest)
  • GitHub Check: Test (windows-latest)
  • GitHub Check: Lint (windows-latest)
  • GitHub Check: post-update (ubuntu-latest)
  • GitHub Check: post-update (windows-latest)
🔇 Additional comments (97)
packages/@core/ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue (1)

22-22: Class reordering aligns with PR standardization goals.

The Tailwind utility classes have been reordered for consistency across the UI kit without any functional impact on the component's behavior or styling output. This is approved.

packages/@core/ui-kit/shadcn-ui/src/components/input-password/password-strength.vue (1)

54-54: Class reordering is consistent with PR objectives.

The Tailwind CSS utility classes have been reordered to follow a convention (layout/sizing → appearance → state/responsive modifiers). This is a cosmetic change with no impact on component behavior or functionality.

docs/src/demos/vben-drawer/auto-height/drawer.vue (1)

35-35: Tailwind class reordering for consistency—approved.

The utility classes have been reordered as part of the broader consistency effort across the codebase. All classes are preserved, and the reorder has no impact on styling or behavior (Tailwind's cascade and specificity handling are independent of class token order).

packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue (1)

103-103: Tailwind class reordering is consistent with project-wide pattern.

The class order changes on these lines (from border-border border-tborder-t border-border and similarly for the bottom border) are cosmetic—Tailwind CSS applies classes regardless of order. This reordering aligns with the broader ESLint/linting fixes applied across the PR and does not affect component logic or behavior.

Also applies to: 112-112

packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue (1)

13-13: Tailwind class reordering: cosmetic change with no functional impact.

The class attribute has been reordered for consistency (aligning with the broader PR pattern of Tailwind utility class reorganization). The computed styles, component behavior, and accessibility remain unchanged. This is a safe, non-functional refactor.

packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue (1)

35-35: Tailwind class reordering is consistent and maintains functionality.

The class order on the VbenButton now follows a logical grouping pattern (functional selectors → layout → sizing → appearance → transitions → interactive states → dark mode variants), which improves consistency across the codebase without affecting rendered styles or component behavior.

packages/@core/ui-kit/layout-ui/src/vben-layout.vue (1)

613-613: Tailwind utility class reordering is safe.

This cosmetic reordering of Tailwind CSS classes on the mask overlay has no impact on functionality or rendering; the class set and their effects remain identical. The change aligns with the PR's focus on consistency and linting improvements.

packages/@core/ui-kit/shadcn-ui/src/components/input-password/input-password.vue (1)

41-41: LGTM!

Pure Tailwind CSS class reordering with no functional impact. All classes are preserved and reorganized into a logical order (layout/positioning, sizing, colors/effects). Consistent with the PR's broader goal of standardizing class ordering across components.

Also applies to: 50-50

packages/@core/ui-kit/shadcn-ui/src/components/avatar/avatar.vue (1)

72-72: Tailwind class reordering is purely cosmetic—no functional impact.

The reordered class string has identical visual and behavioral output. Verify that this reordering aligns with your project's ESLint/formatting rules (e.g., Tailwind CSS class sorting plugin).

If this is driven by an automated tool, confirm the tool configuration is correct and consistently applied across the PR changes. If not, consider documenting the class ordering convention for consistency.

packages/@core/ui-kit/form-ui/src/form-render/form-field.vue (2)

342-344: Tailwind class reordering approved.

The utility classes are correctly reordered on the component error state binding. The order has no functional impact—Tailwind applies all utilities identically regardless of declaration order.


368-373: Tailwind class reordering approved.

The utility classes on the CircleAlert icon are correctly reordered for consistency. As with other Tailwind reorderings in the PR, the class sequence has no effect on rendered styling.

packages/@core/ui-kit/shadcn-ui/src/components/logo/logo.vue (1)

85-85: LGTM! Tailwind CSS class reordering improves consistency.

The reordering follows Tailwind CSS conventions (layout → typography → colors), improving code consistency across the project. No functional impact.

packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue (1)

226-226: LGTM! Non-functional class reordering for consistency.

The Tailwind utility class reordering (moving data-[state=open]:bg-secondary to the end) is a cosmetic change that aligns with the PR's linting standardization effort. No functional impact.

Also applies to: 267-267

packages/@core/ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue (1)

38-38: LGTM! Class reordering for consistency.

This change reorders Tailwind CSS utility classes without altering functionality, aligning with the repository-wide formatting standardization described in the PR.

packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue (1)

30-30: LGTM! Class reordering improves consistency.

The Tailwind CSS utility classes have been reorganized for consistency with other UI components in this PR. The "border border-border" pattern (border width + border color) is valid and intentional. No runtime or visual changes are expected.

packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue (1)

27-27: LGTM! The explicit border class ensures visibility.

Adding the explicit border class alongside border-primary is correct—Tailwind's color utilities like border-primary only set the color, not the width. The reordering aligns with the broader consistency improvements across the UI kit.

packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue (1)

11-11: LGTM! Tailwind class reordering improves consistency.

The reordering of Tailwind utility classes (placing border before border-input) follows a more logical sequence and aligns with the automated lint fixes applied across the codebase. No functional changes.

packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue (2)

35-40: LGTM! Verify visual appearance.

The addition of bg-border and explicit focus-visible:ring-ring improves consistency with the design system tokens. Please visually verify the resizable handle's appearance hasn't regressed, particularly the background color and focus states.


43-47: Verify bg-border duplication is intentional.

Both the outer container (line 37) and this inner handle now have bg-border. If both elements use the same background color, this might be redundant. Please confirm this layering is intentional for the desired visual effect.

packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue (1)

40-40: LGTM! Tailwind class reordering for consistency.

The CSS utility class reordering maintains identical styling while improving consistency with the project's formatting standards.

Also applies to: 58-58, 87-87, 95-95

packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue (1)

17-17: LGTM! Consistent class ordering.

The class reordering aligns with the formatting changes across other breadcrumb components.

packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue (1)

11-11: LGTM! Class reordering for consistency.

The utility class order change maintains identical styling.

packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue (1)

12-12: LGTM! Tailwind class ordering improvement.

Reordering places layout utilities before interactive states, consistent with Tailwind best practices.

packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue (1)

13-13: LGTM! Improved class organization.

The reordering groups related utilities logically while maintaining identical styling behavior.

packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue (1)

25-25: LGTM! Styling update aligns with shadcn-ui conventions.

The addition of the border-input semantic color token and class reordering improves consistency with shadcn-ui's design system. This is a presentational change with no functional impact.

packages/@core/ui-kit/shadcn-ui/src/ui/separator/Separator.vue (2)

24-24: LGTM: Class reordering for consistency.

The Tailwind CSS class reordering improves consistency across the codebase without affecting functionality.


34-34: LGTM: Improved class organization.

The class reordering enhances consistency. The bg-background class ensures the label remains readable when positioned over the separator line.

packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue (1)

267-267: LGTM! Tailwind class reordering improves consistency.

The Tailwind utility classes have been reordered (likely by an automated formatter like prettier-plugin-tailwindcss), grouping related utilities together. This improves code consistency without affecting the rendered styling or behavior.

Also applies to: 298-298

packages/@core/ui-kit/layout-ui/src/components/layout-content.vue (1)

58-58: LGTM! Class ordering normalized.

Positioning utilities moved to the front, consistent with Tailwind's recommended class ordering.

packages/@core/ui-kit/layout-ui/src/components/layout-tabbar.vue (1)

26-26: LGTM! Consistent class organization.

Tailwind classes reorganized to follow a logical ordering pattern (layout → borders → colors → transitions).

packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue (1)

40-40: LGTM! Positioning utilities moved to the front.

Class ordering follows the standard Tailwind convention.

packages/@core/ui-kit/layout-ui/src/components/layout-header.vue (1)

67-67: LGTM! Comprehensive class reordering for consistency.

The extensive class list has been reorganized to follow Tailwind's conventional ordering, improving readability and maintainability.

packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue (1)

13-13: LGTM! Class reordering maintains all interactive states.

All utility classes including hover states are preserved, just reorganized for consistency with the codebase formatting standards.

packages/@core/ui-kit/popup-ui/src/alert/alert.vue (1)

152-152: LGTM! CSS class reordering for consistency.

The Tailwind utility class reorderings maintain identical styling while standardizing class order across the codebase.

Also applies to: 171-171

packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts (1)

147-149: LGTM! Cleaner array initialization.

Consolidating the array initialization is more concise and equally clear.

packages/@core/ui-kit/popup-ui/src/modal/modal.vue (1)

238-238: LGTM! CSS class reordering for consistency.

The Tailwind utility class reorderings maintain identical styling while standardizing class order across the codebase.

Also applies to: 314-314

packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue (1)

22-22: LGTM: Tailwind class reordering.

The class order change is cosmetic and doesn't affect styling since Tailwind utilities have equal specificity.

packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue (1)

27-27: LGTM: Explicit border width added.

The addition of border before border-input explicitly sets border-width: 1px. This ensures the border is visible with the border-input color.

packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue (1)

32-32: LGTM: Class order refinement.

The reordering of focus utilities to follow layout classes is purely organizational and doesn't affect styling behavior.

packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectContent.vue (1)

45-50: LGTM: Enhanced popover styling.

The additions of border-border, bg-popover, and text-popover-foreground provide explicit theming for the select dropdown. The position-specific translations improve positioning when using popper mode.

apps/web-tdesign/src/views/dashboard/analytics/analytics-visits-sales.vue (1)

27-29: Good refactor to non-mutating sort. Switching from .sort() to .toSorted() avoids mutating the original array, which is a better practice. Node.js v20.12.0 includes the V8 update that adds the "change-by-copy" Array/TypedArray methods (including Array.prototype.toSorted), so this is safely supported in your target environment.

packages/@core/ui-kit/menu-ui/src/components/menu-badge.vue (1)

52-52: LGTM: Class reordering for consistency.

The Tailwind utility classes are reordered without any functional change, aligning with the PR-wide class normalization pattern.

cspell.json (1)

45-45: LGTM!

Adding "tdesign" to the spell-check dictionary is appropriate given the tdesign library usage throughout the project.

packages/@core/ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue (1)

28-29: LGTM!

Class reordering maintains identical styling with improved consistency.

packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue (1)

34-34: LGTM!

Class reordering maintains identical styling.

apps/web-tdesign/src/app.vue (1)

9-9: LGTM!

Import reordering maintains identical functionality.

docs/src/demos/vben-modal/auto-height/modal.vue (1)

35-35: LGTM!

Class reordering maintains identical styling.

apps/web-tdesign/package.json (1)

47-47: ✓ Catalog configuration verified and working correctly.

The pnpm catalog contains a valid tdesign-vue-next entry (^1.17.1) defined in pnpm-workspace.yaml, which resolves to version 1.17.3. The package.json correctly references this catalog entry with catalog:, and the dependency is successfully installed with peer dependencies satisfied.

apps/web-tdesign/src/bootstrap.ts (1)

8-20: No issues found; CSS import repositioning is intentional and safe.

The TDesign CSS import at line 19 loads before the app.mount('#app') call, eliminating FOUC risk. The commit history confirms this repositioning was deliberate (cfad886: "adjust style import method"), and the pattern differs from other apps by design—TDesign uses the external tdesign-vue-next library instead of an @vben/styles variant. No cascade conflicts or styling artifacts were detected. The commented modal/drawer configuration remains as reference documentation.

packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue (1)

10-10: LGTM - Class reordering for consistency.

The Tailwind utility class reordering maintains the same styling while aligning with the project's formatting standards.

packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue (1)

38-38: LGTM - Class reordering for consistency.

The Tailwind utility class reordering maintains identical styling while improving code consistency.

packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue (1)

38-38: LGTM - Class reordering for consistency.

The Tailwind utility class reordering maintains the same styling output while aligning with the project's formatting conventions.

packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue (1)

7-7: LGTM - Class reordering for consistency.

The Tailwind utility class reordering aligns with the same pattern applied to DialogOverlay.vue, maintaining consistent class ordering across overlay components.

packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue (1)

84-87: LGTM - Class reordering for consistency.

The animation class reordering maintains identical behavior while improving consistency. The slide animation classes are applied under the same conditions; only their order in the string has changed.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubTrigger.vue (1)

32-32: LGTM - Class reordering for consistency.

The Tailwind utility class reordering maintains the same styling behavior while aligning with consistent class ordering patterns across the codebase.

packages/@core/ui-kit/form-ui/src/form-render/form-label.vue (1)

24-24: LGTM - Class reordering for consistency.

The Tailwind utility class reordering maintains identical styling while improving consistency across the codebase.

packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue (1)

21-27: Non-functional Tailwind class reordering looks good

Reordering to text-sm text-muted-foreground is stylistic only and keeps behavior unchanged; this aligns with consistent utility ordering across the shadcn-ui components.

packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue (1)

19-27: AccordionContent class-order change is safe

The reordered class string preserves the same Tailwind utilities and should not affect layout or animations; it just standardizes ordering.

internal/tailwind-config/package.json (1)

48-63: Confirm jiti catalog wiring across the workspace

Adding "jiti": "catalog:" here looks consistent with the other catalog-based deps in this package. Please just double-check that:

  • jiti is defined in the workspace catalog/root so this resolves correctly, and
  • its version is aligned with any root-level overrides you’ve added in this PR.
docs/.vitepress/components/preview-group.vue (1)

49-107: Preview group Tailwind class tweaks are purely stylistic

The updated class attributes on TabsRoot, header wrapper, TabsTrigger, Code icon, and inner container just normalize utility order and keep the same behavioral/visual intent. No issues from a logic or layout standpoint.

packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue (1)

13-15: Card class reordering is safe and purely stylistic

The Tailwind utilities are unchanged, only reordered. This has no behavioral impact and keeps the component consistent with the rest of the UI kit.

docs/.vitepress/config/plugins/demo-preview.ts (1)

87-91: toSorted usage keeps behavior while avoiding in‑place mutation

Reassigning childFiles = childFiles.toSorted(...) preserves the previous sort behavior (including prioritizing index.vue) while avoiding in-place mutation, which is cleaner and matches the Node ≥20.12.0 requirement declared in the PR.

Please confirm your docs/VitePress build pipeline is already running on a Node version that supports Array.prototype.toSorted (Node 20+), in line with the updated engines field.

packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue (1)

16-16: Form description class order change is non-functional

The same Tailwind classes are present with only their order swapped, so rendering and semantics stay the same while aligning with the new preferred ordering.

packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue (1)

16-16: Error message styling change is order-only

The text-[0.8rem] and text-destructive classes are unchanged apart from order, so behavior and appearance remain intact while matching the normalized class ordering used elsewhere.

packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue (1)

37-37: LGTM! Formatting-only change.

The Tailwind utility classes have been reordered without any functional changes. This aligns with the broader class-order standardization pattern across the PR.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue (1)

22-22: LGTM! Formatting-only change.

Class order adjustment with no functional impact. This change is consistent with the class-reordering pattern applied across UI components in this PR.

packages/@core/ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue (1)

32-32: LGTM! Formatting-only change.

The Tailwind utility classes have been reordered without altering the set of applied styles. This is consistent with the PR's design-system class standardization effort.

docs/.vitepress/components/demo-preview.vue (1)

22-34: LGTM! Formatting changes with minor text improvement.

The class reorderings are formatting-only changes with no functional impact. The addition of "parameter." to the error message at line 34 provides slightly better clarity.

packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue (1)

10-10: LGTM! Formatting-only change.

Class order standardization with no functional changes. This pattern is consistently applied across multiple description components in the PR.

packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue (1)

38-38: LGTM! Formatting-only change.

The class string has been reordered and border utilities made more explicit. This is a presentational change with no functional impact, consistent with the broader UI component class standardization in this PR.

packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue (1)

24-24: LGTM! Formatting-only change.

Class order adjustment with no functional impact. This matches the same reordering pattern applied to other description components (CardDescription, AlertDialogDescription, etc.) in the PR.

packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue (1)

21-21: LGTM! Formatting-only change.

Class order standardization matching the pattern applied across all description components in this PR. No functional changes.

packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue (2)

66-66: LGTM! Class reordering is correct.

The Tailwind utility classes have been reordered without changing the applied styles. The visual rendering remains identical.


78-78: LGTM! Pseudo-element class reordering is correct.

The reordering of before: and after: pseudo-element classes maintains the same styling behavior while improving consistency.

packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue (1)

27-27: LGTM! Class expansion and reordering are correct.

The explicit addition of border, border-input, and focus-visible:ring-1 alongside the reordered utilities maintains the same visual behavior while making the styling more explicit.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue (1)

32-32: LGTM! Class expansion maintains correct styling.

The addition of explicit border and border-border utilities alongside the reordered animation classes preserves the original visual behavior.

packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue (1)

36-36: LGTM! Class reordering across dialog components is correct.

All three elements show consistent class reordering with explicit border token additions. The styling behavior remains unchanged while improving maintainability.

Also applies to: 41-41, 63-63

packages/@core/ui-kit/shadcn-ui/src/components/segmented/segmented.vue (1)

48-48: LGTM! Tab component class reordering is correct.

Both TabsList and TabsTrigger show consistent class reordering without any functional changes to the component behavior.

Also applies to: 55-55

packages/@core/ui-kit/shadcn-ui/src/components/spinner/loading.vue (1)

72-72: LGTM! Loading component class reordering is correct.

All three elements show consistent class reordering. The visual rendering and animation behavior remain identical.

Also applies to: 86-86, 91-91

packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue (1)

32-32: LGTM! Class expansion and reordering are correct.

The explicit addition of border and popover color tokens alongside reordered animation classes maintains the same visual behavior while improving code clarity.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue (1)

30-30: LGTM! Class expansion maintains correct styling.

The expanded class string with explicit layout, border, and popover tokens preserves the original visual behavior while aligning with the project-wide class organization pattern.

packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue (1)

103-111: Dialog animations and close button styling remain consistent with the existing design

The updated DialogContent class list still applies zoom/fade animations unconditionally via data-[state=...] attributes, with animationType === 'slide' layering slide-in/out variants on top. This matches the intended “zoom as base, slide as optional overlay” behavior. The close button’s class reordering preserves the same tokens and state handling without changing behavior.

Also applies to: 119-123

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue (1)

29-32: Context menu item class reordering is safe and keeps current behavior

The Tailwind utility tokens are unchanged—only their order in the string moved. Layout, focus, and disabled-state handling remain intact.

packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue (1)

36-38: Dropdown radio item class ordering change is non-functional

All Tailwind utilities (layout, transition, focus, and disabled-state variants) are preserved; only their ordering changed, so behavior and styling remain the same.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuLabel.vue (1)

26-29: Context menu label styling remains unchanged aside from class order

Padding, font weight, size, and foreground color utilities are all still present; only their order shifted, so the rendered label appearance is unaffected.

package.json (2)

100-103: No changeset required; published packages don't declare engines.node

Verification shows no published workspace packages currently declare engines.node, so there's no need for a changeset entry for engine requirements. The root package is private, and the engine bump won't affect downstream consumers.

CI workflows don't have explicit Node version constraints in most job matrices (consider adding .nvmrc or explicit node-version pins if you want to enforce Node ≥20.12.0 across all CI runs).


96-98: Catalog definitions confirmed and properly configured

The pnpm catalog in pnpm-workspace.yaml correctly defines:

  • vue: ^3.5.24 (line 185)
  • jiti: ^2.6.1 (line 117)

The changes to use "catalog:" references in root package.json (lines 96, 115, 117) are valid and align with the existing centralized version management approach. The catalog entries are correctly defined, so the assumption in the original comment is confirmed.

packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue (1)

28-28: LGTM: Class reordering is non-functional.

The Tailwind utility class reordering (moving focus-related classes after base layout classes) does not affect the rendered output, as Tailwind generates atomic CSS with consistent specificity. This appears to be part of a broader formatting standardization across dropdown menu components.

packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue (1)

35-35: LGTM: Class reordering is non-functional.

Consistent with the pattern across dropdown menu components—focus and state modifier classes moved after base classes without affecting behavior.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuCheckboxItem.vue (1)

35-35: LGTM: Class reordering is non-functional.

Consistent formatting applied to context menu components, matching the pattern in dropdown menu components.

packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue (1)

26-26: LGTM: Class reordering is non-functional.

Moving bg-border to the end of the class string does not affect the rendered output.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue (1)

12-12: LGTM: Class reordering is non-functional.

Moving text-muted-foreground to the end of the class string maintains the same visual output.

packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioItem.vue (1)

35-35: LGTM: Class reordering is non-functional.

Consistent class reordering pattern—base layout classes precede focus and state modifiers without affecting behavior.

packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue (1)

27-27: LGTM: Class reordering is non-functional.

State modifiers moved to the end of the class string, consistent with the formatting pattern across dropdown menu components.

packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue (1)

40-40: Class binding aligns with established design tokens and component patterns.

Verification confirms the explicit utility classes (bg-popover, text-popover-foreground, border-border) are well-defined in the Tailwind configuration and consistently applied across similar components (SelectContent, PopoverContent, HoverCardContent, ContextMenuContent). The visual output remains unchanged as these are standard utilities mapped to the design token CSS variables already used throughout the UI kit.

internal/lint-configs/eslint-config/tsconfig.json (1)

4-6: LGTM! Appropriate moduleResolution for a bundler-based project.

The addition of "moduleResolution": "bundler" aligns with modern TypeScript best practices for projects using bundlers like Vite.

internal/lint-configs/eslint-config/src/configs/typescript.ts (1)

32-33: Verify that the optional chaining correctly accesses the updated @typescript-eslint 8.46.4 configs.

The configs eslint-recommended and strict exist in @typescript-eslint v8.46.4, but the internal structure accessed via .overrides?.[0]?.rules cannot be definitively confirmed from documentation alone. The optional chaining is defensive coding, but it may silently skip rule application if the config structure has changed.

Please manually verify:

  1. That pluginTs.configs['eslint-recommended'].overrides?.[0]?.rules contains the expected rules
  2. That pluginTs.configs.strict.rules contains the expected rules
  3. That ESLint actually applies these rules when linting (test with a TypeScript file to confirm no warnings/errors are missed)

{
ignores: [],
version: '>=18.0.0',
version: '>=20.12.0',
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

Verify Node.js version consistency across project configuration files.

The Node.js version requirement has been updated to >=20.12.0, which aligns with the PR objective to support Tailwind CSS v4. Ensure that all project configuration files (package.json engines field, CI workflows, Docker files, deployment configs, etc.) have been updated to match this requirement.

Run the following script to check for version consistency:


🏁 Script executed:

#!/bin/bash
# Description: Verify Node.js version consistency across configuration files

echo "=== Checking package.json files for engines.node field ==="
fd -e json package.json -x sh -c 'echo "File: {}"; cat {} | jq -r ".engines.node // \"not specified\""'

echo -e "\n=== Checking for .nvmrc files ==="
fd -H -t f '^\.nvmrc$' -x cat {}

echo -e "\n=== Checking for .node-version files ==="
fd -H -t f '^\.node-version$' -x cat {}

echo -e "\n=== Checking GitHub Actions workflows for node versions ==="
fd -e yml -e yaml . .github/workflows -x sh -c 'echo "File: {}"; rg -n "node-version:" {}'

echo -e "\n=== Checking Dockerfile for NODE_VERSION ==="
fd -t f Dockerfile -x sh -c 'echo "File: {}"; rg -n "FROM node:|NODE_VERSION" {}'

Length of output: 3422



---

🏁 Script executed:

```shell
#!/bin/bash
# Get full context of rerun.yml workflow to understand node version matrix
echo "=== Full content of .github/workflows/rerun.yml ==="
cat .github/workflows/rerun.yml

echo -e "\n=== Full content of .node-version ==="
cat .node-version

echo -e "\n=== Relevant section of Dockerfile ==="
head -20 ./scripts/deploy/Dockerfile

Length of output: 323


🏁 Script executed:

#!/bin/bash
# Get full context of rerun.yml workflow to understand node version matrix
echo "=== Full content of .github/workflows/rerun.yml ==="
cat .github/workflows/rerun.yml

echo -e "\n=== Full content of .node-version ==="
cat .node-version

echo -e "\n=== Check for Dockerfile files ==="
fd -t f -name "Dockerfile" -x sh -c 'echo "File: {}"; head -20 {}'

Length of output: 828


🏁 Script executed:

#!/bin/bash
# Search for Dockerfile files with proper syntax
echo "=== Checking for Dockerfile files ==="
fd Dockerfile -t f -x sh -c 'echo "=== File: {} ==="; head -20 {}'

echo -e "\n=== Summary of version constraints found ==="
echo "Root package.json engines.node:"
cat ./package.json | jq -r ".engines.node"
echo -e "\n.node-version:"
cat ./.node-version

Length of output: 616


Resolve Node.js version inconsistency before merge.

The PR updates package.json to >=20.12.0, but configuration files are misaligned:

  • .node-version: 22.1.0 (enforces Node 22 for local development)
  • Dockerfile: node:22-slim (production uses Node 22)
  • package.json: >=20.12.0 (allows Node 20+)

This creates a conflict: the stated minimum (20.12.0) differs from what developers and production actually enforce (22.1.0). Either update .node-version and remove the upper bound assumption, or update package.json to require Node 22+ if that's the true minimum.

🤖 Prompt for AI Agents
In internal/lint-configs/eslint-config/src/configs/node.ts around line 38, the
Node.js version string ('>=20.12.0') conflicts with .node-version (22.1.0) and
Dockerfile (node:22-slim); update the version here to match the actual enforced
minimum (e.g., '>=22.1.0') and then ensure package.json, .node-version, and
Dockerfile are all aligned to the same minimum Node 22.x value (or choose to
lower .node-version/Dockerfile if you intentionally support 20.x) so the repo
and CI/production use a single consistent Node version.

Comment on lines +156 to +162
const currentProps = {
...componentProps,
[modelPropName]: modelValue.value,
[`onUpdate:${modelPropName}`]: (val: T) => {
modelValue.value = val;
},
};
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major

Remove orphaned Chinese comments below.

The consolidation of currentProps initialization is good, but the comments on lines 164 and 166 ("设置当前值" / "Set current value" and "设置更新处理函数" / "Set update handler") are now orphaned since they previously described the separate assignment statements that were consolidated into the object literal.

Apply this diff to remove the orphaned comments:

     const currentProps = {
       ...componentProps,
       [modelPropName]: modelValue.value,
       [`onUpdate:${modelPropName}`]: (val: T) => {
         modelValue.value = val;
       },
     };
 
-    // 设置当前值
-
-    // 设置更新处理函数
-
     // 创建输入组件
     inputComponentRef.value = h(
📝 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 currentProps = {
...componentProps,
[modelPropName]: modelValue.value,
[`onUpdate:${modelPropName}`]: (val: T) => {
modelValue.value = val;
},
};
const currentProps = {
...componentProps,
[modelPropName]: modelValue.value,
[`onUpdate:${modelPropName}`]: (val: T) => {
modelValue.value = val;
},
};
// 创建输入组件
inputComponentRef.value = h(
🤖 Prompt for AI Agents
In packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts around lines 156 to
162, there are orphaned Chinese comments ("设置当前值" and "设置更新处理函数") left over from
a previous split assignment; remove those two comment lines so the consolidated
currentProps object literal remains clean and only keep relevant comments (if
any) nearby.

@xingyu4j
Copy link
Contributor Author

#6929 经 验证没有问题

@jinmao88 jinmao88 merged commit 8b0f138 into vbenjs:main Nov 24, 2025
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants