Skip to content

Add ranged stacked bars#6722

Merged
ckifer merged 1 commit intomainfrom
bar-radius
Dec 4, 2025
Merged

Add ranged stacked bars#6722
ckifer merged 1 commit intomainfrom
bar-radius

Conversation

@PavelVanecek
Copy link
Collaborator

@PavelVanecek PavelVanecek commented Dec 3, 2025

Description

Turns out this was quite simple to do. If the data arrive already stacked - we don't need to do anything, just use as-is and render.

In separate PR I will also add the stack bar rounding and docs for it all.

Related Issue

Closes #1510

Types of changes

  • 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 change)

Checklist:

  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • I have added a storybook story or VR test, or extended an existing story or VR test to show my changes

Summary by CodeRabbit

  • New Features
    • Stacked bar charts now preserve ranged (interval) values per series so ranges are not collapsed by stacking.
  • Documentation
    • Added a new example demonstrating ranged stacked bar charts, including an option to toggle bar animation.
  • Tests
    • Added unit tests validating ranged-data stacking and a visual test to ensure rendering consistency.

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

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 3, 2025

Walkthrough

Preserves two-number ranged values when stacking bar series by post-processing stacked output in getStackedData. Adds a RangedStackedBarChart example, tests, and a visual-regression test entry demonstrating stacked ranged bars.

Changes

Cohort / File(s) Summary
Stacking logic enhancement
src/util/ChartUtils.ts, test/util/ChartUtils/getStackedData.spec.ts
getStackedData now post-processes stacked points to detect original ranged values (arrays of two numbers) and restore those as the point coordinates; added unit test verifying ranged-data stacking behavior.
Example component
www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx, www/src/docs/exampleComponents/BarChart/index.tsx
New RangedStackedBarChart React component (exported default) demonstrating stacked bars with ranged values; registered in bar chart examples with descriptive source and docs.
Visual regression test
test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
Added Playwright visual test that mounts RangedStackedBarChart with animations disabled and performs a screenshot assertion.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Review src/util/ChartUtils.ts post-processing to ensure correct handling of mixed ranged and numeric values and no regression for edge cases (NaN, null, non-array values).
  • Validate the new unit test (getStackedData.spec.ts) covers representative scenarios.
  • Check the example component props (animation toggle) and that the visual-regression test reliably captures the intended baseline.

Suggested reviewers

  • ckifer

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main feature being added: support for ranged (array-based) stacked bars in bar charts.
Description check ✅ Passed The description provides motivation, links to the related issue, indicates new feature type, and confirms tests and VR tests were added. However, documentation updates are noted as incomplete.
Linked Issues check ✅ Passed The code changes implement the core requirement from issue #1510: enabling stacked range-based bars by post-processing stacked data to preserve ranged values.
Out of Scope Changes check ✅ Passed All changes are directly related to implementing ranged stacked bars: core logic in ChartUtils, tests, example component, documentation references, and VR tests.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch bar-radius

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.

@PavelVanecek PavelVanecek added the enhancement Enhancement to a current API label Dec 3, 2025
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: 2

♻️ Duplicate comments (2)
scripts/snapshots/es6Files.txt (1)

15-15: Verify BarStack source and build process.

The es6 snapshot references es6/cartesian/BarStack.js. This should be generated from a source file during the build process. See the verification script in the review of scripts/snapshots/typesFiles.txt.

scripts/snapshots/libFiles.txt (1)

15-15: Same verification needed as other snapshots.

The lib snapshot references lib/cartesian/BarStack.js. See the verification script in the review of scripts/snapshots/typesFiles.txt.

🧹 Nitpick comments (2)
test/util/ChartUtils/getStackedData.spec.ts (1)

327-377: Excellent test coverage for ranged data.

The test thoroughly validates the preservation of ranged data across multiple series and data points. The detailed comments effectively explain the expected behavior.

Consider adding a test case for mixed data scenarios where some series have ranged data and others have scalar values to ensure the feature handles this edge case correctly.

www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx (1)

4-9: Clarify the intended data pattern.

The sample data demonstrates three different scenarios:

  • Item A and D: Perfectly connected ranges (end of one range = start of next)
  • Item B: Overlapping ranges
  • Item C: Disconnected ranges with gaps

While this flexibility demonstrates the feature well, it may confuse users about the expected behavior. Consider:

  1. Adding comments to the data explaining each scenario
  2. Simplifying to show one clear pattern (e.g., all connected or all disconnected)

Based on issue #1510, the feature is specifically for "non-connecting range bars" (timeline of events), so showing gaps/overlaps is appropriate, but documentation should make this clear.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 492be75 and 285c733.

⛔ Files ignored due to path filters (4)
  • test-vr/__snapshots__/tests/www/BarChartApiExamples.spec-vr.tsx-snapshots/RangedStackedBarChart-1-chromium-linux.png is excluded by !**/*.png
  • test-vr/__snapshots__/tests/www/BarChartApiExamples.spec-vr.tsx-snapshots/RangedStackedBarChart-1-firefox-linux.png is excluded by !**/*.png
  • test-vr/__snapshots__/tests/www/BarChartApiExamples.spec-vr.tsx-snapshots/RangedStackedBarChart-1-webkit-linux.png is excluded by !**/*.png
  • www/test/__snapshots__/navigation.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (8)
  • scripts/snapshots/es6Files.txt (1 hunks)
  • scripts/snapshots/libFiles.txt (1 hunks)
  • scripts/snapshots/typesFiles.txt (1 hunks)
  • src/util/ChartUtils.ts (1 hunks)
  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx (2 hunks)
  • test/util/ChartUtils/getStackedData.spec.ts (2 hunks)
  • www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx (1 hunks)
  • www/src/docs/exampleComponents/BarChart/index.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (DEVELOPING.md)

Run type checking on the codebase using npm run check-types

**/*.{ts,tsx}: Never use any type (implicit or explicit) in TypeScript code
Prefer unknown over any and 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 use as type assertions in TypeScript; the only exception is as const

Files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
  • src/util/ChartUtils.ts
  • www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx
  • www/src/docs/exampleComponents/BarChart/index.ts
  • test/util/ChartUtils/getStackedData.spec.ts
**/*.{js,ts,tsx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Ensure code lints by running npm run lint and follows Airbnb's Style Guide

Files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
  • src/util/ChartUtils.ts
  • www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx
  • www/src/docs/exampleComponents/BarChart/index.ts
  • test/util/ChartUtils/getStackedData.spec.ts
src/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (DEVELOPING.md)

Run ESLint and Prettier on the codebase using npm run lint

Files:

  • src/util/ChartUtils.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/ChartUtils.ts
{test,www/test}/**/*.spec.{ts,tsx}

📄 CodeRabbit inference engine (DEVELOPING.md)

Write unit tests in the test or www/test directories with .spec.tsx file extension

Files:

  • test/util/ChartUtils/getStackedData.spec.ts
test/**/*.spec.{ts,tsx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Aim for 100% unit test code coverage when writing new code

Files:

  • test/util/ChartUtils/getStackedData.spec.ts
test/**/*.{test,spec}.{ts,tsx}

📄 CodeRabbit inference engine (test/README.md)

test/**/*.{test,spec}.{ts,tsx}: Aim for 100% unit test code coverage when writing new code
Prefer to use the createSelectorTestCase helper function when writing or modifying tests
Use the expectLastCalledWith helper function instead of expect(spy).toHaveBeenLastCalledWith(...) for better typing and autocompletion
Verify the number of selector calls using the spy object from createSelectorTestCase to spot unnecessary re-renders and improve performance
Mock getBoundingClientRect in tests using the helper function provided in test/helper/MockGetBoundingClientRect.ts
Use vi.useFakeTimers() in all tests due to Redux autoBatchEnhancer dependency on timers and requestAnimationFrame
Call vi.runOnlyPendingTimers() to advance timers after renders when not using createSelectorTestCase helper, and avoid vi.runAllTimers() to prevent infinite loops
Use userEvent.setup({ advanceTimers: vi.runOnlyPendingTimers }) or the userEventSetup helper function from test/helper/userEventSetup.ts when creating userEvent instances
When testing tooltips on hover, use vi.runOnlyPendingTimers() after each userEvent.hover() call or use the showTooltip helper function from tooltipTestHelpers.ts to account for requestAnimationFrame delays

Files:

  • test/util/ChartUtils/getStackedData.spec.ts
**/*.spec.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

When running unit tests, prefer to run a single test file using npm run test -- path/to/TestFile.spec.tsx rather than running all tests with npm test

Files:

  • test/util/ChartUtils/getStackedData.spec.ts
🧠 Learnings (10)
📚 Learning: 2025-11-25T01:22:48.289Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: DEVELOPING.md:0-0
Timestamp: 2025-11-25T01:22:48.289Z
Learning: Applies to test-vr/**/*.spec.{ts,tsx} : Visual regression tests should be placed in the `test-vr` directory and use Playwright for testing

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
📚 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 test/component/**/*.spec.tsx : Use React Testing Library for testing component interactions and behavior upon rendering

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
📚 Learning: 2025-11-25T01:23:08.250Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: test/README.md:0-0
Timestamp: 2025-11-25T01:23:08.250Z
Learning: Applies to test/**/*.{test,spec}.{ts,tsx} : Use `vi.useFakeTimers()` in all tests due to Redux autoBatchEnhancer dependency on timers and `requestAnimationFrame`

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
📚 Learning: 2025-11-25T01:23:08.250Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: test/README.md:0-0
Timestamp: 2025-11-25T01:23:08.250Z
Learning: Applies to test/**/*.{test,spec}.{ts,tsx} : Verify the number of selector calls using the spy object from `createSelectorTestCase` to spot unnecessary re-renders and improve performance

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
📚 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 storybook/stories/**/*.stories.tsx : Use Storybook for smoke tests and add play functions with assertions for actual tests

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
📚 Learning: 2025-11-25T01:23:08.250Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: test/README.md:0-0
Timestamp: 2025-11-25T01:23:08.250Z
Learning: Applies to test/**/*.{test,spec}.{ts,tsx} : Mock `getBoundingClientRect` in tests using the helper function provided in `test/helper/MockGetBoundingClientRect.ts`

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
📚 Learning: 2025-11-25T01:23:08.250Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: test/README.md:0-0
Timestamp: 2025-11-25T01:23:08.250Z
Learning: Applies to test/**/*.{test,spec}.{ts,tsx} : Call `vi.runOnlyPendingTimers()` to advance timers after renders when not using `createSelectorTestCase` helper, and avoid `vi.runAllTimers()` to prevent infinite loops

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
📚 Learning: 2025-11-25T01:23:08.250Z
Learnt from: CR
Repo: recharts/recharts PR: 0
File: test/README.md:0-0
Timestamp: 2025-11-25T01:23:08.250Z
Learning: Applies to test/**/*.{test,spec}.{ts,tsx} : Use the `expectLastCalledWith` helper function instead of `expect(spy).toHaveBeenLastCalledWith(...)` for better typing and autocompletion

Applied to files:

  • test-vr/tests/www/BarChartApiExamples.spec-vr.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:

  • www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx
📚 Learning: 2025-11-16T09:14:24.918Z
Learnt from: PavelVanecek
Repo: recharts/recharts PR: 6640
File: src/cartesian/Bar.tsx:156-159
Timestamp: 2025-11-16T09:14:24.918Z
Learning: In recharts, SSR (Server-Side Rendering) is not yet supported—charts don't render at all in SSR environments. The `isAnimationActive: 'auto'` mode is preparatory work for future SSR support, so testing of this mode should be deferred until SSR support is actually implemented.

Applied to files:

  • www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx
🧬 Code graph analysis (3)
src/util/ChartUtils.ts (2)
storybook/stories/API/props/ChartProps.ts (1)
  • data (4-12)
src/util/DataUtils.ts (1)
  • isNumber (24-25)
www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx (1)
storybook/stories/API/props/AnimationProps.ts (1)
  • isAnimationActive (29-36)
test/util/ChartUtils/getStackedData.spec.ts (1)
src/util/ChartUtils.ts (1)
  • getStackedData (427-456)
⏰ 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 (6)
test/util/ChartUtils/getStackedData.spec.ts (1)

150-155: LGTM!

The added comments helpfully clarify the stacking behavior for future readers.

test-vr/tests/www/BarChartApiExamples.spec-vr.tsx (2)

19-19: LGTM!

Import follows the established pattern.


101-104: LGTM!

The visual regression test correctly disables animation for stable screenshots and follows the established pattern for this test file.

www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx (1)

12-32: LGTM!

The component implementation is clean and follows Recharts best practices. The use of responsive, proper margin configuration, and passing through isAnimationActive are all correct.

scripts/snapshots/typesFiles.txt (1)

15-15: This snapshot entry is correct and expected. The types/cartesian/BarStack.d.ts file is generated during the build process from the existing source file src/cartesian/BarStack.tsx. The snapshot file typesFiles.txt is part of the build output validation system—it tracks which .d.ts files are generated by TypeScript compilation and is updated by running npm run test-build-output -- --update after building. No action is required.

src/util/ChartUtils.ts (1)

440-455: Code implementation is correct and follows TypeScript best practices.

The post-processing logic properly preserves ranged data by overwriting stacked coordinates. The approach cleanly handles mixed scenarios with proper type narrowing using Array.isArray() and isNumber() type guards.

The DataKey<any> usage in the function parameter is a pre-existing codebase pattern, not introduced by this change. The code snippet itself contains no TypeScript violations and no hardcoded strings.

@codecov
Copy link

codecov bot commented Dec 3, 2025

Bundle Report

Changes will increase total bundle size by 1.43kB (0.05%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
recharts/bundle-cjs 1.15MB 658 bytes (0.06%) ⬆️
recharts/bundle-es6 997.5kB 626 bytes (0.06%) ⬆️
recharts/bundle-umd 520.24kB 144 bytes (0.03%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: recharts/bundle-es6

Assets Changed:

Asset Name Size Change Total Size Change (%)
util/ChartUtils.js 626 bytes 16.98kB 3.83%
view changes for bundle: recharts/bundle-umd

Assets Changed:

Asset Name Size Change Total Size Change (%)
Recharts.js 144 bytes 520.24kB 0.03%
view changes for bundle: recharts/bundle-cjs

Assets Changed:

Asset Name Size Change Total Size Change (%)
util/ChartUtils.js 658 bytes 18.87kB 3.61%

@codecov
Copy link

codecov bot commented Dec 3, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.03%. Comparing base (4499a65) to head (d8ff5e1).
⚠️ Report is 7 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #6722   +/-   ##
=======================================
  Coverage   94.02%   94.03%           
=======================================
  Files         500      501    +1     
  Lines       42692    42735   +43     
  Branches     4917     4921    +4     
=======================================
+ Hits        40143    40186   +43     
  Misses       2544     2544           
  Partials        5        5           

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

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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: 0

🧹 Nitpick comments (1)
src/util/ChartUtils.ts (1)

440-455: Clarify behaviour for ranged data with non‑'none' offsets and mixed scalar/ranged stacks

The ranged post‑processing itself looks reasonable for the “data already stacked” case, but there are a couple of edge cases worth making explicit:

  • The stack value accessor still does Number(getValueByDataKey(d, key, 0)). For ranged values [start, end] this becomes NaN, so those entries effectively drop out of the stack offset calculation. That’s probably what you want for pure ranged stacks, but in combination with offsets like 'expand', 'silhouette', 'wiggle', or the custom 'sign' / 'positive' offsets, mixed stacks (some keys scalar, some ranged) will now produce stackedData where scalar series are in a normalized/offset coordinate system while ranged series are in absolute [start, end] coordinates after this override. Domain computation then mixes these two notions.

  • If mixed scalar+ranged series and/or non‑'none' offsets are not intended to be supported, it might be safer to:

    • either document that ranged stacking is only supported with offsetType === 'none' (or a specific subset), or
    • make the .value accessor explicitly return 0 when it detects a [start, end] value so that the exclusion from offset math is intentional and visible in the code (with a short comment noting that ranged data is post‑processed).

I’d recommend:

  • adding at least one spec that covers
    • a stack mixing ranged and non‑ranged keys, and
    • a ranged stack with offsetType !== 'none',
  • plus a brief comment here explaining that NaN/0 is deliberately fed into the stack for ranged values so they don’t participate in stacking, and that we restore [start, end] afterwards.

This will lock in the intended behaviour and guard against future regressions around offset types and mixed stacks.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7e2e600 and d8ff5e1.

⛔ Files ignored due to path filters (4)
  • test-vr/__snapshots__/tests/www/BarChartApiExamples.spec-vr.tsx-snapshots/RangedStackedBarChart-1-chromium-linux.png is excluded by !**/*.png
  • test-vr/__snapshots__/tests/www/BarChartApiExamples.spec-vr.tsx-snapshots/RangedStackedBarChart-1-firefox-linux.png is excluded by !**/*.png
  • test-vr/__snapshots__/tests/www/BarChartApiExamples.spec-vr.tsx-snapshots/RangedStackedBarChart-1-webkit-linux.png is excluded by !**/*.png
  • www/test/__snapshots__/navigation.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (5)
  • src/util/ChartUtils.ts (1 hunks)
  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx (2 hunks)
  • test/util/ChartUtils/getStackedData.spec.ts (2 hunks)
  • www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx (1 hunks)
  • www/src/docs/exampleComponents/BarChart/index.tsx (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
  • test/util/ChartUtils/getStackedData.spec.ts
  • test-vr/tests/www/BarChartApiExamples.spec-vr.tsx
  • www/src/docs/exampleComponents/BarChart/RangedStackedBarChart.tsx
  • www/src/docs/exampleComponents/BarChart/index.tsx
🧰 Additional context used
📓 Path-based instructions (4)
src/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (DEVELOPING.md)

Run ESLint and Prettier on the codebase using npm run lint

Files:

  • src/util/ChartUtils.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (DEVELOPING.md)

Run type checking on the codebase using npm run check-types

**/*.{ts,tsx}: Never use any type (implicit or explicit) in TypeScript code
Prefer unknown over any and 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 use as type assertions in TypeScript; the only exception is as const

Files:

  • src/util/ChartUtils.ts
**/*.{js,ts,tsx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Ensure code lints by running npm run lint and follows Airbnb's Style Guide

Files:

  • src/util/ChartUtils.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/ChartUtils.ts
🧬 Code graph analysis (1)
src/util/ChartUtils.ts (1)
src/util/DataUtils.ts (1)
  • isNumber (24-25)
⏰ 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). (1)
  • GitHub Check: Build, Test, Pack

@ckifer ckifer merged commit 3adf89d into main Dec 4, 2025
39 checks passed
@ckifer ckifer deleted the bar-radius branch December 4, 2025 17:24
@coderabbitai coderabbitai bot mentioned this pull request Dec 6, 2025
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Enhancement to a current API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request - stacked range bars

2 participants