Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
137c809
Highcharts Theme | LineChart (#5246)
tycup Jul 29, 2025
43aa492
Add DonutChart with patterns, useChart hook, and density support
tycup Aug 12, 2025
4d31784
Add PieChart
tycup Aug 21, 2025
f4bba0a
Refactor Highcharts useChart hook
tycup Aug 27, 2025
5fcb2a0
Add Stacked Bar Chart
tycup Aug 27, 2025
29013be
Bug Fixes & Doc Enhancements
tycup Sep 16, 2025
a9563bd
Pin Highcharts to v10.2.0 specifically and v11+
tycup Sep 19, 2025
59613c7
Add Bullet Chart
tycup Aug 27, 2025
5f3f7a4
Fix: Use bullet chart type (#5599)
tycup Sep 19, 2025
b838b99
Highcharts | Fix CSS link for v11+ (#5606)
tycup Sep 22, 2025
c746357
Highcharts | Update snapshot link (#5609)
tycup Sep 22, 2025
3bef5ba
Add Bar Chart
tycup Sep 23, 2025
3d1da8d
Add Column Chart
tycup Sep 22, 2025
53a920c
fix spelling
tycup Sep 30, 2025
f01e6be
Add Area Chart
tycup Sep 3, 2025
6a9ad7f
update useChart hook docs
tycup Oct 9, 2025
2f399a6
Update snapshot install link
tycup Oct 10, 2025
7211647
update snapshot - adds area chart
tycup Oct 10, 2025
da7fc24
Add Scatter Chart
tycup Sep 30, 2025
0f20b6e
Add Bubble Chart
tycup Oct 6, 2025
0c19789
combine bubble and scatter opacity selectors
tycup Oct 16, 2025
ada0f09
updat snapshot link
tycup Oct 21, 2025
388c9b5
Highcharts | Add Box Plot Chart (#5675)
tycup Nov 3, 2025
6490704
Highcharts | Waterfall Chart (#5728)
tycup Nov 7, 2025
6af8c5a
Update highcharts snapshot (#5798)
joshwooding Nov 12, 2025
82930a6
Candlestick Chart (#5744)
tycup Nov 25, 2025
29ced08
Add data visualization tokens (#5846)
joshwooding Nov 26, 2025
d85918e
prepare for versioning
tycup Nov 25, 2025
dae48d3
remove warning and use better token
tycup Nov 25, 2025
e1c541d
Highcharts | Use dataviz tokens (#5858)
tycup Dec 3, 2025
25d98a2
update readme
tycup Dec 13, 2025
5f3d078
Revert "update readme"
tycup Dec 13, 2025
52d901a
use tooltip to guide on patterns and fills
tycup Dec 4, 2025
a990682
add parent track ticket and single fill/line pattern message
tycup Dec 4, 2025
9a3fb72
patch fix
tycup Dec 4, 2025
1d250b7
ensure accessible read out of data points
tycup Dec 5, 2025
665fa4f
Update site/docs/components/chart/examples.mdx
tycup Dec 9, 2025
c5cbc64
ensure correct focus order in stacked bar
tycup Dec 10, 2025
f6760e0
prevent blurry border around legend
tycup Dec 10, 2025
2c6efc3
improve readme
tycup Dec 13, 2025
d84105f
prevent race condition
tycup Dec 13, 2025
bf05cd4
ensure RC status
tycup Dec 19, 2025
783e4c0
prevent strikethrough on hidden legend and border radius in v12
tycup Jan 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/breezy-grapes-sit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@salt-ds/highcharts-theme": minor
---

Added Stacked bar chart

To see an example Options object required to configure a basic stacked bar chart, see the examples section.
7 changes: 7 additions & 0 deletions .changeset/breezy-onions-bow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@salt-ds/highcharts-theme": minor
---

Added Area chart

To see an example Options object required to configure a basic area chart, see the examples section.
7 changes: 7 additions & 0 deletions .changeset/eager-icons-rule.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@salt-ds/highcharts-theme": minor
---

Added Candlestick Chart

To see an example Options object required to configure a basic candlestick chart, see the examples section.
35 changes: 35 additions & 0 deletions .changeset/green-olives-obey.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
"@salt-ds/theme": minor
---

Added new categorical and sentiment data visualization tokens.

## Category

- `--salt-category-1-dataviz`
- `--salt-category-2-dataviz`
- `--salt-category-3-dataviz`
- `--salt-category-4-dataviz`
- `--salt-category-5-dataviz`
- `--salt-category-6-dataviz`
- `--salt-category-7-dataviz`
- `--salt-category-8-dataviz`
- `--salt-category-9-dataviz`
- `--salt-category-10-dataviz`
- `--salt-category-11-dataviz`
- `--salt-category-12-dataviz`
- `--salt-category-13-dataviz`
- `--salt-category-14-dataviz`
- `--salt-category-15-dataviz`
- `--salt-category-16-dataviz`
- `--salt-category-17-dataviz`
- `--salt-category-18-dataviz`
- `--salt-category-19-dataviz`
- `--salt-category-20-dataviz`

## Sentiment

- `--salt-positive-dataviz`
- `--salt-negative-dataviz`
- `--salt-neutral-dataviz`
- `--salt-caution-dataviz`
7 changes: 7 additions & 0 deletions .changeset/hungry-seals-hide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@salt-ds/highcharts-theme": minor
---

Added Bar Chart

To see an example Options object required to configure a basic bar chart, see the examples section.
7 changes: 7 additions & 0 deletions .changeset/legal-trams-guess.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@salt-ds/highcharts-theme": minor
---

Add Bubble Chart
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Suggested change
Add Bubble Chart
Added Bubble Chart


To see an example Options object required to configure a basic bubble chart, see the examples section.
8 changes: 8 additions & 0 deletions .changeset/quiet-hairs-try.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@salt-ds/highcharts-theme": minor
---

- Added PieChart
- Since DonutChart is a variant of PieChart,the plotOptions.pie.innerSize setting is moved out of the global options; otherwise, a default PieChart would automatically become a DonutChart
- Consumers are instructed to supply the innerSize setting themselves in documentation.
- Documentation reordered to show PieChart first due to the above.
7 changes: 7 additions & 0 deletions .changeset/shiny-frogs-pump.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@salt-ds/highcharts-theme": minor
---

Added Bullet Chart

To see an example Options object required to configure a basic bullet chart, see the examples section.
11 changes: 11 additions & 0 deletions .changeset/tasty-snakes-clean.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
"@salt-ds/highcharts-theme": minor
---

- `useChart` hook is density-aware. When Salt density changes, it triggers a `chart.redraw()` and returns a `legendIconSize` mapped to Salt size tokens, enabling responsive legend symbol sizing.
- Salt theme defaults (styled mode): 20-color palette, vertical right-aligned legend with consistent spacing, larger title/axis-title margins, and line markers disabled by default.
- Type compatibility: expose `HighchartsOptionsCompat` so newer fields (e.g. `plotOptions.pie.borderRadius`) type-check while staying assignable to upstream `Options` across Highcharts v10–v12.
- CSS and usage guidance: import Salt base styles before the Highcharts theme, and wrap charts with `highcharts-theme-salt`; add `salt-fill-patterns` to opt into pattern fills.
Example: `import "@salt-ds/theme/index.css"; import "@salt-ds/highcharts-theme/index.css";`

Includes a Donut chart example using `useDensity` + `useChart` to demonstrate density reactivity and optional pattern fills.
72 changes: 72 additions & 0 deletions .changeset/tidy-radios-watch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
"@salt-ds/highcharts-theme": minor
---

### Summary

Salt Highcharts theme is a package that supplies the Salt theme for Highcharts. It includes a CSS file for all CSS-based styles, and an options object for styles that are not CSS configurable. Together, they provide a complete theming solution for Highcharts version 10 to version 12.

_Please note, this package is a WIP. Highcharts CSS files and Options object are not finalised._

### Rationale

A theme-only package for Highcharts offers a lightweight solution focused solely on styling, making it easier to maintain and update visual consistency across charts. Unlike a full React wrapper, it doesn't impose additional abstraction layers, allowing developers to leverage Highcharts' native capabilities directly. This approach minimizes overhead and complexity, providing flexibility to integrate with various frameworks or environments without being tied to a specific implementation.

### Supported charts

This package is a work in progress and represents a snapshot release focusing specifically on the LineChart.

Our intent is to gather feedback on the provided solution, allowing us to refine and expand the theme to support additional chart types in future, incremental releases.

### Usage

Please see the package [README.md](https://github.com/jpmorganchase/salt-ds/blob/main/packages/highcharts-theme/README.md) for guidance on usage.

### License

A license is required to use Highcharts.

### Migration

The Salt Highcharts theme replaces previous approaches that bundled a chart wrapper with styling. Because this package contains **only** theme assets (CSS + Highcharts options), you can keep using any Highcharts integration you prefer and simply apply the theme.

**Steps to migrate**

1. **Install the package** (snapshot build, requires Highcharts 10 – 12):

```bash
# npm
npm install @salt-ds/highcharts-theme

# yarn
yarn add @salt-ds/highcharts-theme
```

2. **Import the theme resources** at your application entry point:

```ts
import "@salt-ds/highcharts-theme/index.css";

// Salt CSS overrides
import Highcharts from "highcharts";
import { highchartsOptionsSalt } from "@salt-ds/highcharts-theme";

// apply global theme options
Highcharts.setOptions(highchartsOptionsSalt);
```

3. **Continue using your existing chart code.** For React you might use `highcharts-react-official` (or any other wrapper):

```jsx
<div className="highcharts-theme-salt">
<HighchartsReact highcharts={Highcharts} options={chartOptions} />
</div>
```

4. **Merge additional options as required.** Highcharts deep-merges subsequent calls to `Highcharts.setOptions`; you can also combine objects per-chart with `Highcharts.merge()`.

**Things to watch for:**

- This snapshot styles **LineChart** only; other chart types will fall back to default Highcharts styles until future releases.
- Ensure the Salt CSS is loaded **after** the default Highcharts CSS to guarantee correct specificity.
- If a previous wrapper injected theme styles automatically, you must now call `Highcharts.setOptions` yourself and add the `highcharts-theme-salt` class to chart containers.
7 changes: 7 additions & 0 deletions .changeset/true-results-fly.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@salt-ds/highcharts-theme": minor
---

Added Box plot chart

To see an example Options object required to configure a basic box plot chart, see the examples section.
2 changes: 2 additions & 0 deletions .storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import "@fontsource/open-sans/800.css";
import "@fontsource/pt-mono";
import "@salt-ds/theme/css/theme-next.css";
import "@salt-ds/theme/index.css";
import "highcharts/css/highcharts.css";
import "@salt-ds/highcharts-theme/index.css";
import "./styles.css";

import { SaltProvider, SaltProviderNext } from "@salt-ds/core";
Expand Down
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"start": "yarn storybook",
"build": "yarn workspaces foreach --exclude @salt-ds/site -Apt run build && yarn bundle:css",
"build:ag-grid-theme": "yarn workspace @salt-ds/ag-grid-theme build",
"build:highcharts-theme": "yarn workspace @salt-ds/highcharts-theme build",
"bundle:css": "yarn bundle:core:css && yarn bundle:lab:css && yarn bundle:embla-carousel:css && yarn copy:icon:css && yarn copy:countries:css",
"bundle:core:css": "yarn workspace @salt-ds/core bundle:css",
"bundle:lab:css": "yarn workspace @salt-ds/lab bundle:css",
Expand All @@ -29,12 +30,13 @@
"lint": "biome check",
"lint:fix": "biome check --fix",
"lint:check:error": "biome check --diagnostic-level=error",
"lint:style": "yarn lint:style:core && yarn lint:style:icon && yarn lint:style:lab && yarn lint:style:ag-theme",
"lint:style": "yarn lint:style:core && yarn lint:style:icon && yarn lint:style:lab && yarn lint:style:ag-theme && yarn lint:style:highcharts-theme",
"lint:style:core": "yarn stylelint -f verbose \"packages/core/src/**/*.css\"",
"lint:style:icon": "yarn stylelint -f verbose \"packages/icons/src/**/*.css\"",
"lint:style:lab": "yarn stylelint -f verbose \"packages/lab/src/**/*.css\"",
"lint:style:embla-carousel": "yarn stylelint -f verbose \"packages/embla-carousel/src/**/*.css\"",
"lint:style:ag-theme": "yarn stylelint -f verbose \"packages/ag-grid-theme/css/**/*.css\"",
"lint:style:highcharts-theme": "yarn stylelint -f verbose \"packages/highcharts-theme/css/**/*.css\"",
"lint:style:theme": "yarn stylelint -f verbose \"packages/theme/css/**/*.css\"",
"storybook": "storybook dev -p 6006",
"build-storybook": "yarn build:ag-grid-theme && yarn bundle:css && storybook build --stats-json",
Expand Down Expand Up @@ -79,6 +81,8 @@
"cypress-real-events": "^1.13.0",
"deepmerge": "^4.2.2",
"dom-accessibility-api": "^0.7.0",
"highcharts": "10.2.0",
"highcharts-react-official": "^3.2.2",
"mockdate": "^3.0.5",
"msw": "^2.12.3",
"msw-storybook-addon": "^2.0.6",
Expand Down
64 changes: 64 additions & 0 deletions packages/highcharts-theme/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Salt Highcharts Theme

`@salt-ds/highcharts-theme` provides Salt styling and default configuration for [Highcharts](https://www.highcharts.com/).

See the Salt docs for usage, examples, and accessibility guidance: [Chart](https://www.saltdesignsystem.com/salt/components/chart).

## Highcharts support

Compatible with **Highcharts 10.2.0** (specifically) and **Highcharts 11+**.

## License

A Highcharts license is required.

## Installation

```bash
npm install [email protected] highcharts-react-official @salt-ds/highcharts-theme
# or
yarn add [email protected] highcharts-react-official @salt-ds/highcharts-theme
```

## Quick start

Import Highcharts CSS **before** the Salt theme CSS (see Highcharts docs: [Style by CSS](https://www.highcharts.com/docs/chart-design-and-style/style-by-css)).

- Highcharts v10.2.0 CSS: `https://code.highcharts.com/10.2.0/css/highcharts.css`
- Highcharts v11+ CSS: `https://code.highcharts.com/your-version/css/highcharts.css`

```jsx
import Highcharts from "highcharts";
import HighchartsReact from "highcharts-react-official";
import { useRef } from "react";
import { useChart } from "@salt-ds/highcharts-theme";

import "@salt-ds/highcharts-theme/index.css";

export function MyChart({ chartOptions }) {
const chartRef = useRef(null);
const options = useChart(chartRef, chartOptions);

return (
<div className="highcharts-theme-salt">
<HighchartsReact
ref={chartRef}
highcharts={Highcharts}
options={options}
/>
</div>
);
}
```

## Optional container classes

See [Chart usage](https://www.saltdesignsystem.com/salt/components/chart/usage) for details.

- `salt-line-patterns`
- `salt-fill-patterns`
- `axes-grid-lines`

## Accessibility

Enable the Highcharts accessibility module (v10 requires initialization; v11+ auto-initializes). See [Chart accessibility](https://www.saltdesignsystem.com/salt/components/chart/accessibility).
97 changes: 97 additions & 0 deletions packages/highcharts-theme/css/salt-fill-patterns.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/* Pattern fills for pie/donut charts */
.highcharts-theme-salt.salt-fill-patterns .highcharts-color-0:not(.highcharts-data-label-connector) {
fill: url(#diagonal-up);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-1:not(.highcharts-data-label-connector) {
fill: url(#dot);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-2:not(.highcharts-data-label-connector) {
fill: url(#zigzag);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-3:not(.highcharts-data-label-connector) {
fill: url(#vertical-lines);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-4:not(.highcharts-data-label-connector) {
fill: url(#diagonal-down);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-5:not(.highcharts-data-label-connector) {
fill: url(#upward-point);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-6:not(.highcharts-data-label-connector) {
fill: url(#horizontal-lines);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-7:not(.highcharts-data-label-connector) {
fill: url(#crosshatch);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-8:not(.highcharts-data-label-connector) {
fill: url(#net);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-9:not(.highcharts-data-label-connector) {
fill: url(#steps);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-10:not(.highcharts-data-label-connector) {
fill: url(#pavement);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-11:not(.highcharts-data-label-connector) {
fill: url(#scallop);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-12:not(.highcharts-data-label-connector) {
fill: url(#vertical-wave);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-13:not(.highcharts-data-label-connector) {
fill: url(#metal);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-14:not(.highcharts-data-label-connector) {
fill: url(#scales);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-15:not(.highcharts-data-label-connector) {
fill: url(#triangle);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-16:not(.highcharts-data-label-connector) {
fill: url(#horizontal-wave);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-17:not(.highcharts-data-label-connector) {
fill: url(#cage);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-18:not(.highcharts-data-label-connector) {
fill: url(#line-dot);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-color-19:not(.highcharts-data-label-connector) {
fill: url(#squares);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-waterfall-series .highcharts-point,
.highcharts-theme-salt.salt-fill-patterns .highcharts-candlestick-series .highcharts-point {
fill: url(#positive-sentiment);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-waterfall-series .highcharts-point.highcharts-negative {
fill: url(#negative-sentiment);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-candlestick-series .highcharts-point-down {
fill: url(#negative-sentiment);
}

.highcharts-theme-salt.salt-fill-patterns .highcharts-waterfall-series .highcharts-point.highcharts-sum {
fill: url(#neutral-sentiment);
}
3 changes: 3 additions & 0 deletions packages/highcharts-theme/css/salt-highcharts-compat.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.highcharts-theme-salt .highcharts-legend-item:hover text {
fill: var(--salt-content-secondary-foreground);
}
Loading