fix(cli): handle cn-* class transformation in non-className contexts #9384
+192
−5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #9362
Problem
Some components (Calendar, Drawer, Input OTP, Sonner) that use non-Radix libraries have
cn-*classes that weren't being transformed during component generation. This happened because these components usecn-*classes in object properties (e.g.,toastOptions={{ classNames: { toast: "cn-toast" } }}) rather than in standardclassNameattributes.Solution
Added a catch-all transformer
applyToAllStringLiterals()that runs after the existing transformers to handle any remainingcn-*classes in:The function includes
isInAlreadyProcessedContext()to skip strings already handled by existing transformers (className attributes, cn() calls, cva() calls).Changes
packages/shadcn/src/styles/transform-style-map.ts: AddedapplyToAllStringLiterals()andisInAlreadyProcessedContext()functionspackages/shadcn/src/styles/transform-style-map.test.ts: Added 4 test cases for object property transformationTesting
All 946 existing tests pass, plus 4 new tests covering:
toastOptions.classNames.toastpatterncn-*classescn-*classes in single property values