Conversation
WalkthroughThe PR refactors type safety and null-checking across the codebase. Key changes include renaming Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes
Possibly related PRs
Suggested labels
Suggested reviewers
Pre-merge checks and finishing touches❌ Failed checks (2 warnings, 1 inconclusive)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #6747 +/- ##
==========================================
- Coverage 93.96% 93.95% -0.02%
==========================================
Files 504 504
Lines 42177 42211 +34
Branches 4925 4939 +14
==========================================
+ Hits 39633 39660 +27
- Misses 2539 2546 +7
Partials 5 5 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/util/ReduceCSSCalc.ts (1)
8-24: AvoidasinisSupportedUnitper TypeScript guidelinesThe new
SupportedUnitstyping and restrictedconvertToPxsignature are good, butisSupportedUnitcurrently relies on aunit as SupportedUnitsassertion, which conflicts with the “noas(exceptas const)" guideline for*.tsfiles.You can keep the same runtime behavior and drop the assertion by using an explicit switch:
-type SupportedUnits = 'cm' | 'mm' | 'pt' | 'pc' | 'in' | 'Q' | 'px'; - -const FIXED_CSS_LENGTH_UNITS: ReadonlyArray<SupportedUnits> = ['cm', 'mm', 'pt', 'pc', 'in', 'Q', 'px']; - -function isSupportedUnit(unit: string): unit is SupportedUnits { - return FIXED_CSS_LENGTH_UNITS.includes(unit as SupportedUnits); -} +type SupportedUnits = 'cm' | 'mm' | 'pt' | 'pc' | 'in' | 'Q' | 'px'; + +const FIXED_CSS_LENGTH_UNITS: ReadonlyArray<SupportedUnits> = ['cm', 'mm', 'pt', 'pc', 'in', 'Q', 'px']; + +function isSupportedUnit(unit: string): unit is SupportedUnits { + switch (unit) { + case 'cm': + case 'mm': + case 'pt': + case 'pc': + case 'in': + case 'Q': + case 'px': + return true; + default: + return false; + } +}This keeps the unit narrowing without any non‑
as constassertions, so it should satisfy the repo’s TypeScript rules.Also applies to: 28-30, 61-64
🧹 Nitpick comments (1)
src/context/ErrorBarContext.tsx (1)
12-18: Consider usingReadonlyArray<T>instead ofReadonlyArray<any>for stronger type safety.The generic constraint on
ErrorBarContextType<T>is a good improvement. However,data: ReadonlyArray<any>loses the type information that the generic parameter provides. As per coding guidelines,anyshould be avoided.While React Context has limitations with generics (the context value type is fixed at creation time), you could still type
dataasReadonlyArray<T>to maintain type safety within the generic function scope:type ErrorBarContextType<T extends BarRectangleItem | LinePointItem | ScatterPointItem> = { - data: ReadonlyArray<any> | undefined; + data: ReadonlyArray<T> | undefined; xAxisId: AxisId; yAxisId: AxisId; dataPointFormatter: ErrorBarDataPointFormatter<T>; errorBarOffset: number; };This would ensure that when
SetErrorBarContextis called with a specific type, thedataprop must match that type.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (20)
scripts/snapshots/es6Files.txt(1 hunks)scripts/snapshots/libFiles.txt(1 hunks)scripts/snapshots/typesFiles.txt(1 hunks)src/animation/AnimationManager.ts(1 hunks)src/animation/CSSTransitionAnimate.tsx(3 hunks)src/animation/configUpdate.ts(3 hunks)src/animation/easing.ts(2 hunks)src/cartesian/Area.tsx(3 hunks)src/cartesian/Bar.tsx(2 hunks)src/cartesian/ErrorBar.tsx(2 hunks)src/cartesian/Line.tsx(1 hunks)src/cartesian/Scatter.tsx(2 hunks)src/cartesian/getEquidistantTicks.ts(2 hunks)src/context/ErrorBarContext.tsx(2 hunks)src/util/DataUtils.ts(1 hunks)src/util/ReduceCSSCalc.ts(4 hunks)src/util/TickUtils.ts(2 hunks)src/util/getEveryNth.ts(2 hunks)src/util/isDomainSpecifiedByUser.ts(2 hunks)src/util/scale/getNiceTickValues.ts(1 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{ts,tsx}: Never useanytype (implicit or explicit) in TypeScript code
Preferunknownoveranyand refine the type in TypeScript
Type function parameters and return values explicitly in TypeScript, do not rely on implicit any or inference; exceptions are React components and trivial functions
Do not useastype assertions in TypeScript; the only exception isas const
Files:
src/util/isDomainSpecifiedByUser.tssrc/cartesian/Line.tsxsrc/util/scale/getNiceTickValues.tssrc/cartesian/Area.tsxsrc/util/getEveryNth.tssrc/cartesian/Bar.tsxsrc/cartesian/Scatter.tsxsrc/cartesian/getEquidistantTicks.tssrc/animation/CSSTransitionAnimate.tsxsrc/context/ErrorBarContext.tsxsrc/cartesian/ErrorBar.tsxsrc/util/TickUtils.tssrc/animation/configUpdate.tssrc/util/DataUtils.tssrc/animation/easing.tssrc/animation/AnimationManager.tssrc/util/ReduceCSSCalc.ts
**/*.{js,ts,tsx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Ensure code lints by running
npm run lintand follows Airbnb's Style Guide
Files:
src/util/isDomainSpecifiedByUser.tssrc/cartesian/Line.tsxsrc/util/scale/getNiceTickValues.tssrc/cartesian/Area.tsxsrc/util/getEveryNth.tssrc/cartesian/Bar.tsxsrc/cartesian/Scatter.tsxsrc/cartesian/getEquidistantTicks.tssrc/animation/CSSTransitionAnimate.tsxsrc/context/ErrorBarContext.tsxsrc/cartesian/ErrorBar.tsxsrc/util/TickUtils.tssrc/animation/configUpdate.tssrc/util/DataUtils.tssrc/animation/easing.tssrc/animation/AnimationManager.tssrc/util/ReduceCSSCalc.ts
src/**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Do not hardcode any strings or formatting choices in library code; users should provide localized strings as desired
Files:
src/util/isDomainSpecifiedByUser.tssrc/cartesian/Line.tsxsrc/util/scale/getNiceTickValues.tssrc/cartesian/Area.tsxsrc/util/getEveryNth.tssrc/cartesian/Bar.tsxsrc/cartesian/Scatter.tsxsrc/cartesian/getEquidistantTicks.tssrc/animation/CSSTransitionAnimate.tsxsrc/context/ErrorBarContext.tsxsrc/cartesian/ErrorBar.tsxsrc/util/TickUtils.tssrc/animation/configUpdate.tssrc/util/DataUtils.tssrc/animation/easing.tssrc/animation/AnimationManager.tssrc/util/ReduceCSSCalc.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (DEVELOPING.md)
All imports from
rechartsmust use the public API entry point; imports from internal paths likerecharts/types/*orrecharts/src/*are not allowed
Files:
src/util/isDomainSpecifiedByUser.tssrc/cartesian/Line.tsxsrc/util/scale/getNiceTickValues.tssrc/cartesian/Area.tsxsrc/util/getEveryNth.tssrc/cartesian/Bar.tsxsrc/cartesian/Scatter.tsxsrc/cartesian/getEquidistantTicks.tssrc/animation/CSSTransitionAnimate.tsxsrc/context/ErrorBarContext.tsxsrc/cartesian/ErrorBar.tsxsrc/util/TickUtils.tssrc/animation/configUpdate.tssrc/util/DataUtils.tssrc/animation/easing.tssrc/animation/AnimationManager.tssrc/util/ReduceCSSCalc.ts
🧠 Learnings (4)
📓 Common learnings
Learnt from: PavelVanecek
Repo: recharts/recharts PR: 6669
File: www/src/docs/exampleComponents/ScatterChart/ScatterChartWithLabels.tsx:2-2
Timestamp: 2025-11-23T13:30:10.395Z
Learning: The `TooltipIndex` type from recharts is defined in `src/state/tooltipSlice.ts` but is not currently exported from the public API entry points. It should not be imported from `recharts/types/state/tooltipSlice` as this is an internal implementation path. An ESLint rule is needed to prevent regressions.
📚 Learning: 2025-12-06T03:36:59.360Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: DEVELOPING.md:0-0
Timestamp: 2025-12-06T03:36:59.360Z
Learning: Applies to **/*.{ts,tsx,js,jsx} : All imports from `recharts` must use the public API entry point; imports from internal paths like `recharts/types/*` or `recharts/src/*` are not allowed
Applied to files:
src/cartesian/Scatter.tsxscripts/snapshots/typesFiles.txt
📚 Learning: 2025-11-25T01:22:59.729Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2025-11-25T01:22:59.729Z
Learning: Applies to **/*.{ts,tsx} : Type function parameters and return values explicitly in TypeScript, do not rely on implicit any or inference; exceptions are React components and trivial functions
Applied to files:
src/animation/CSSTransitionAnimate.tsx
📚 Learning: 2025-11-23T13:30:10.395Z
Learnt from: PavelVanecek
Repo: recharts/recharts PR: 6669
File: www/src/docs/exampleComponents/ScatterChart/ScatterChartWithLabels.tsx:2-2
Timestamp: 2025-11-23T13:30:10.395Z
Learning: The `TooltipIndex` type from recharts is defined in `src/state/tooltipSlice.ts` but is not currently exported from the public API entry points. It should not be imported from `recharts/types/state/tooltipSlice` as this is an internal implementation path. An ESLint rule is needed to prevent regressions.
Applied to files:
scripts/snapshots/typesFiles.txt
🧬 Code graph analysis (9)
src/cartesian/Line.tsx (1)
src/cartesian/ErrorBar.tsx (1)
ErrorBarDataPointFormatter(38-42)
src/cartesian/Area.tsx (1)
src/util/ChartUtils.ts (2)
getValueByDataKey(41-55)getCateCoordinateOfLine(470-509)
src/cartesian/Bar.tsx (3)
src/cartesian/ErrorBar.tsx (1)
ErrorBarDataPointFormatter(38-42)src/index.ts (1)
BarRectangleItem(86-86)src/util/ChartUtils.ts (1)
truncateByDomain(297-326)
src/cartesian/Scatter.tsx (1)
src/cartesian/ErrorBar.tsx (1)
ErrorBarDataPointFormatter(38-42)
src/cartesian/getEquidistantTicks.ts (1)
src/util/getEveryNth.ts (1)
getEveryNth(12-27)
src/animation/CSSTransitionAnimate.tsx (1)
src/animation/AnimationManager.ts (2)
AnimationManager(21-26)ReactSmoothStyle(4-4)
src/context/ErrorBarContext.tsx (5)
src/cartesian/Bar.tsx (1)
BarRectangleItem(95-111)src/cartesian/Line.tsx (1)
LinePointItem(69-78)src/cartesian/Scatter.tsx (1)
ScatterPointItem(91-126)src/state/cartesianAxisSlice.ts (1)
AxisId(8-8)src/cartesian/ErrorBar.tsx (1)
ErrorBarDataPointFormatter(38-42)
src/cartesian/ErrorBar.tsx (3)
src/cartesian/Bar.tsx (1)
BarRectangleItem(95-111)src/cartesian/Line.tsx (1)
LinePointItem(69-78)src/cartesian/Scatter.tsx (1)
ScatterPointItem(91-126)
src/util/TickUtils.ts (1)
src/util/getEveryNth.ts (1)
getEveryNth(12-27)
⏰ 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). (2)
- GitHub Check: Build, Test, Pack
- GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (30)
src/animation/AnimationManager.ts (1)
34-34: LGTM: Defensive parameter typingWidening the parameter type to include
undefinedis safe. Whenundefinedis passed, none of the type-specific branches (array, string, object, function) will match, resulting in a no-op. This makes the function more resilient to edge cases.src/animation/easing.ts (1)
59-62: LGTM: Proper null handling with fallbackThe use of
parseCubicBezierwith null-checking and fallback to the linear easing default (line 73) is correct. Once the NaN validation is added toparseCubicBezier, this will be fully robust.src/animation/configUpdate.ts (3)
34-34: LGTM: Defensive guard prevents undefined accessThe additional
nextStepVals[key] != nullcheck ensures thatnextStepVals[key].velocityandnextStepVals[key].fromare safely accessed only when the key exists. This prevents potential runtime errors in edge cases.
70-80: LGTM: Explicit type annotation improves clarityAdding the explicit
Record<string, Val>type annotation tostepperStyleenhances type safety and makes the intent clearer without changing runtime behavior.
132-142: LGTM: Robust null handling in timing style constructionThe null checks for
from[key]andto[key](line 135) ensure that only valid numeric pairs are included intimingStyle. This prevents downstream errors when keys are missing or have undefined values. Theas constassertion on line 140 is appropriate and follows TypeScript best practices.src/util/isDomainSpecifiedByUser.ts (1)
151-157: Regex match-group null checks improve safety without changing behaviorThe added guards
match == null || match[1] == null || dataDomain == nullbefore usingmatch[1]in both MIN and MAX branches correctly avoid computing with an undefined capture group (which would yieldNaN) and make the invalid-pattern path explicit. For malformed"dataMin/Max ± offset"strings you still end up with an invalidcandidatethat failsisWellFormedNumberDomain, so runtime behavior (falling back to deriving the domain from data) is preserved while improving type-safety and clarity.Also applies to: 176-183
src/animation/CSSTransitionAnimate.tsx (3)
34-36: LGTM on the type simplification.The
as const satisfies Partial<CSSTransitionAnimateProps>pattern correctly infers literal types for defaults while ensuring type safety. The non-generic function signature aligns with the simplified props type.
56-61: State type is intentionally wider than props.The state is typed as
ReactSmoothStyle(string | object) whilefrom/toarestring. This is correct because the animation manager'ssubscribecallback can set intermediate animation values typed asReactSmoothStyle. The initialization withfrom/to(strings) is type-safe sincestringis a subtype ofReactSmoothStyle.
10-24: All callers already pass string values forfromandto—no breaking changes in the current codebase.The narrowing of
from/tofrom generic<T extends ReactSmoothStyle>tostringis intentional and doesn't break any existing usages. Treemap, ErrorBar, and all tests pass string values, confirming the API change is compatible with current code. TheuseState<ReactSmoothStyle>correctly allows the animation manager's callback to pass both string and object values internally.src/util/DataUtils.ts (1)
140-161: Optional chaining ingetLinearRegressionsafely handles sparse dataUsing
data[i]?.cx || 0/data[i]?.cy || 0avoids runtime errors ifdata[i]is missing while preserving the “default to 0 when cx/cy are undefined” behavior. Looks good and consistent with the existing aggregation logic.src/util/ReduceCSSCalc.ts (1)
32-44: NaN/undefined guarding inDecimalCSS.parseandcalculateArithmeticlooks solidReturning
DecimalCSS.NaNwhenNUM_SPLIT_REGEXfails (numStr == null) and short‑circuitingcalculateArithmeticforexpr == nullor containingSTR_NANmakes the arithmetic path safer against malformed input while preserving existing behavior for valid expressions. TheDecimalCSS.NaNsingleton is only used as a sentinel and isn’t mutated by the arithmetic methods, so this change looks safe.Also applies to: 108-110
src/cartesian/getEquidistantTicks.ts (1)
3-3: Switch togetEveryNthkeeps tick selection behavior and adds robustnessUsing
getEveryNth(ticks, stepsize)in the break condition preserves the “take every Nth tick” semantics while allowing the util to safely skip any undefined entries (e.g. sparse arrays). This is consistent with the newgetEveryNthhelper and looks correct for thegetEquidistantTicksusage.Also applies to: 27-32
src/cartesian/Scatter.tsx (1)
23-24: Scatter error bar formatter is correctly specialized toScatterPointItemTyping
errorBarDataPointFormatterasErrorBarDataPointFormatter<ScatterPointItem>and wiring it intoSetErrorBarContextaligns Scatter with the new generic error‑bar API. Usingcx/cyfor coordinates,directionto pick betweennode.xandnode.y, andgetValueByDataKey(dataPoint, dataKey)matches howcomputeScatterPointsshapesScatterPointItem, so the implementation looks consistent and sound.Also applies to: 657-669, 688-693
scripts/snapshots/libFiles.txt (1)
193-224: Snapshot entry updated to matchgetEveryNthrenameThe lib snapshot now references
lib/util/getEveryNth.js, which matches the renamed util implementation and keeps the manifest in sync with the codebase.src/util/getEveryNth.ts (1)
12-27:getEveryNthimplementation matches docs and safely skips sparse entriesThe new
getEveryNthcorrectly:
- returns
[]forn < 1,- returns the original array for
n === 1,- and otherwise takes indices
0, n, 2n, …up toarray.length.Guarding with
item !== undefinedmeans sparse arrays don’t produceundefinedelements, which is a safe improvement. TheReadonlyArrayreturn type is also appropriate for a utility that doesn’t promise mutability of its result.scripts/snapshots/typesFiles.txt (1)
193-224: Types snapshot updated to referencegetEveryNthtypingsReferencing
types/util/getEveryNth.d.tskeeps the type snapshot aligned with the renamed util and its new signature.src/cartesian/Line.tsx (1)
24-25: Line error bar formatter correctly bound toLinePointItemAnnotating
errorBarDataPointFormatterasErrorBarDataPointFormatter<LinePointItem>cleanly ties the formatter to the line point shape while reusing the existing logic for coordinates, value, anderrorVal. Its use inSetErrorBarContextremains consistent, so this is a straightforward typing improvement.Also applies to: 630-641, 678-683
scripts/snapshots/es6Files.txt (1)
223-223: LGTM!The snapshot correctly reflects the rename from
getEveryNthWithConditiontogetEveryNth.src/util/TickUtils.ts (2)
1-3: LGTM!Import updated to reflect the function rename from
getEveryNthWithConditiontogetEveryNth.
44-49: LGTM!The function call correctly uses the renamed
getEveryNthwhile preserving the same argument pattern (interval + 1).src/util/scale/getNiceTickValues.ts (1)
18-27: LGTM!The explicit return type annotation
[number, number]improves type safety and aligns with TypeScript best practices. As per coding guidelines, explicit return types are preferred.src/cartesian/Bar.tsx (2)
778-794: LGTM!The explicit generic type
ErrorBarDataPointFormatter<BarRectangleItem>aligns with the updated type signature inErrorBar.tsxand improves type safety.
944-950: LGTM!Good defensive null guard. Accessing
stackedData[index + dataStartIndex]could returnundefinedif the index is out of bounds. This check prevents passingundefinedtotruncateByDomainand correctly returnsnullto filter out invalid entries.src/cartesian/Area.tsx (3)
459-463: LGTM!Optional chaining on
points[0]andpoints[points.length - 1]prevents potential runtime errors when thepointsarray is empty. The existingisWellBehavedNumberchecks properly handle the resultingundefinedvalues.
498-502: LGTM!Same defensive optional chaining pattern applied consistently to
HorizontalRect, matching the fix inVerticalRect.
980-998: LGTM!Good null safety improvement. Extracting
value1withvalue?.[1] ?? nullhandles cases where:
valueisnull/undefined(e.g., missing data)value[1]isundefinedThis prevents runtime errors when passing potentially undefined values to
yAxis.scale()orxAxis.scale().src/cartesian/ErrorBar.tsx (2)
38-42: Good type safety improvement with the generic constraint.The generic parameter with the union constraint properly specializes the formatter for each chart type (Bar, Line, Scatter). This enables better type inference at call sites while maintaining the flexibility needed across different chart components.
137-148: Solid defensive null handling for error bar values.The explicit null checks for the destructured array elements prevent potential runtime issues when
errorValcontains null/undefined values. This properly handles the case where the data source might have incomplete error bar data.src/context/ErrorBarContext.tsx (2)
8-10: Imports support the new generic constraint.These imports enable the type constraint definition and ensure consistency with the types used in the cartesian components.
30-32: Generic function signature properly constrains the context type.The generic constraint ensures type safety when setting up the error bar context for different chart types, and correctly propagates the constraint to the props.
| const parseCubicBezier = (easing: string): [number, number, number, number] | null => { | ||
| const easingParts = easing.split('('); | ||
| if (easingParts.length !== 2 || easingParts[0] !== 'cubic-bezier') { | ||
| return null; | ||
| } | ||
| const numbers = easingParts[1]?.split(')')[0]?.split(','); | ||
| if (numbers == null || numbers.length !== 4) { | ||
| return null; | ||
| } | ||
| const coords = numbers.map((x: string) => parseFloat(x)); | ||
| return [coords[0]!, coords[1]!, coords[2]!, coords[3]!]; | ||
| }; |
There was a problem hiding this comment.
Add validation for NaN values from parseFloat
The parseCubicBezier helper doesn't validate that parseFloat produces valid numbers. Invalid numeric strings (e.g., "cubic-bezier(a,b,c,d)") will result in NaN values that propagate through calculations, potentially causing subtle animation bugs.
Apply this diff to validate the parsed coordinates:
const parseCubicBezier = (easing: string): [number, number, number, number] | null => {
const easingParts = easing.split('(');
if (easingParts.length !== 2 || easingParts[0] !== 'cubic-bezier') {
return null;
}
const numbers = easingParts[1]?.split(')')[0]?.split(',');
if (numbers == null || numbers.length !== 4) {
return null;
}
const coords = numbers.map((x: string) => parseFloat(x));
+ if (coords.some((coord) => Number.isNaN(coord))) {
+ return null;
+ }
return [coords[0]!, coords[1]!, coords[2]!, coords[3]!];
};📝 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.
| const parseCubicBezier = (easing: string): [number, number, number, number] | null => { | |
| const easingParts = easing.split('('); | |
| if (easingParts.length !== 2 || easingParts[0] !== 'cubic-bezier') { | |
| return null; | |
| } | |
| const numbers = easingParts[1]?.split(')')[0]?.split(','); | |
| if (numbers == null || numbers.length !== 4) { | |
| return null; | |
| } | |
| const coords = numbers.map((x: string) => parseFloat(x)); | |
| return [coords[0]!, coords[1]!, coords[2]!, coords[3]!]; | |
| }; | |
| const parseCubicBezier = (easing: string): [number, number, number, number] | null => { | |
| const easingParts = easing.split('('); | |
| if (easingParts.length !== 2 || easingParts[0] !== 'cubic-bezier') { | |
| return null; | |
| } | |
| const numbers = easingParts[1]?.split(')')[0]?.split(','); | |
| if (numbers == null || numbers.length !== 4) { | |
| return null; | |
| } | |
| const coords = numbers.map((x: string) => parseFloat(x)); | |
| if (coords.some((coord) => Number.isNaN(coord))) { | |
| return null; | |
| } | |
| return [coords[0]!, coords[1]!, coords[2]!, coords[3]!]; | |
| }; |
🤖 Prompt for AI Agents
In src/animation/easing.ts around lines 32 to 43, parseCubicBezier currently
maps the four string parts directly to parseFloat without validating them;
update the function to trim each string, parse them to numbers, and verify all
four results are valid finite numbers (e.g., using Number.isFinite or
!Number.isNaN) and return null if any are invalid, preserving the existing null
returns for malformed inputs.
Bundle ReportChanges will increase total bundle size by 5.47kB (0.21%) ⬆️. This is within the configured threshold ✅ Detailed changes
Affected Assets, Files, and Routes:view changes for bundle: recharts/bundle-es6Assets Changed:
view changes for bundle: recharts/bundle-cjsAssets Changed:
view changes for bundle: recharts/bundle-umdAssets Changed:
|
Related Issue
#6645
Summary by CodeRabbit
Bug Fixes
Refactor
✏️ Tip: You can customize this high-level summary in your review settings.